diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 7081497..ce15389 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -46,6 +46,17 @@ received = bytesToLinkCommandResponse(finsFrame); } + // 读写命令的响应 + if (commandStr.equalsIgnoreCase("00000002")) { + String commandType = FINSByteFrameTool.getFinsCommandCode(byteMessage); + if (commandType.equalsIgnoreCase("0101")) { + // 读内存命令响应 +// received = + } else if (commandType.equalsIgnoreCase("0102")) { + // 写内存命令响应 + } + } + // // // byte typeb = finsFrame.FRAME_DATA_AFN; diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 7081497..ce15389 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -46,6 +46,17 @@ received = bytesToLinkCommandResponse(finsFrame); } + // 读写命令的响应 + if (commandStr.equalsIgnoreCase("00000002")) { + String commandType = FINSByteFrameTool.getFinsCommandCode(byteMessage); + if (commandType.equalsIgnoreCase("0101")) { + // 读内存命令响应 +// received = + } else if (commandType.equalsIgnoreCase("0102")) { + // 写内存命令响应 + } + } + // // // byte typeb = finsFrame.FRAME_DATA_AFN; diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 8daac2b..54eb01f 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -142,7 +142,7 @@ public static String getFinsCommandCode(byte[] finsFrame) { byte[] text = getText(finsFrame); - if (null != text && text.length > 12) + if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); else return ""; diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 7081497..ce15389 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -46,6 +46,17 @@ received = bytesToLinkCommandResponse(finsFrame); } + // 读写命令的响应 + if (commandStr.equalsIgnoreCase("00000002")) { + String commandType = FINSByteFrameTool.getFinsCommandCode(byteMessage); + if (commandType.equalsIgnoreCase("0101")) { + // 读内存命令响应 +// received = + } else if (commandType.equalsIgnoreCase("0102")) { + // 写内存命令响应 + } + } + // // // byte typeb = finsFrame.FRAME_DATA_AFN; diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 8daac2b..54eb01f 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -142,7 +142,7 @@ public static String getFinsCommandCode(byte[] finsFrame) { byte[] text = getText(finsFrame); - if (null != text && text.length > 12) + if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); else return ""; diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java index f3e2fd2..5e6c828 100644 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ b/src/com/szpg/plc/server/FINSCommandPool.java @@ -21,9 +21,9 @@ private Map> messageToSend; //发送命令池 private Map messageToResponse; //响应消息池 - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("POOL.VALID_TIME", "5")); + private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("POOL.POOL.REFRESH_TIME", "5")); + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); public FINSCommandPool() { messageToSend = new HashMap>(); diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 7081497..ce15389 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -46,6 +46,17 @@ received = bytesToLinkCommandResponse(finsFrame); } + // 读写命令的响应 + if (commandStr.equalsIgnoreCase("00000002")) { + String commandType = FINSByteFrameTool.getFinsCommandCode(byteMessage); + if (commandType.equalsIgnoreCase("0101")) { + // 读内存命令响应 +// received = + } else if (commandType.equalsIgnoreCase("0102")) { + // 写内存命令响应 + } + } + // // // byte typeb = finsFrame.FRAME_DATA_AFN; diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 8daac2b..54eb01f 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -142,7 +142,7 @@ public static String getFinsCommandCode(byte[] finsFrame) { byte[] text = getText(finsFrame); - if (null != text && text.length > 12) + if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); else return ""; diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java index f3e2fd2..5e6c828 100644 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ b/src/com/szpg/plc/server/FINSCommandPool.java @@ -21,9 +21,9 @@ private Map> messageToSend; //发送命令池 private Map messageToResponse; //响应消息池 - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("POOL.VALID_TIME", "5")); + private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("POOL.POOL.REFRESH_TIME", "5")); + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); public FINSCommandPool() { messageToSend = new HashMap>(); diff --git a/src/com/szpg/task/ReadCH4ParamTask.java b/src/com/szpg/task/ReadCH4ParamTask.java index 6a6231b..b4276ec 100644 --- a/src/com/szpg/task/ReadCH4ParamTask.java +++ b/src/com/szpg/task/ReadCH4ParamTask.java @@ -1,22 +1,48 @@ package com.szpg.task; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; public class ReadCH4ParamTask implements Runnable { - + private ACUClient client; - private byte[] content; - - public ReadCH4ParamTask(ACUClient client, byte[] content) { + private AppCommand appCommand; + + public ReadCH4ParamTask(ACUClient client, AppCommand command) { this.client = client; - this.content = content; + this.appCommand = command; } @Override public void run() { + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(appCommand); + // 发送读取甲烷参数内存命令 ACUClientUtil.getInstance().sendACUCommand(client, content); + + ReadCH4ParamCommand ch4Cmd = (ReadCH4ParamCommand) appCommand; + + // 发送完成之后将命令保存在数据库中 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4Cmd.getId()); + cmd.setTm(ch4Cmd.getTime().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4PARAM); + cmd.setDest(ch4Cmd.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); + cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); + cmd.setCount_word(ch4Cmd.getCount()); + + new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); } } diff --git a/src/com/szpg/DSCTest.java b/src/com/szpg/DSCTest.java index f99b32d..a7bf684 100644 --- a/src/com/szpg/DSCTest.java +++ b/src/com/szpg/DSCTest.java @@ -4,17 +4,20 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.data.PgAcu; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.DTProtocolInterface; -import com.szpg.plc.protocol.ProtocolFactory; +import com.szpg.plc.protocol.fins.FINSConstants; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; import com.szpg.task.ACUSocketCheckTask; import com.szpg.task.ReadCH4ParamTask; +import com.szpg.util.Configure; public class DSCTest { - private final DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + private static DSCTest dsc = new DSCTest(); public static void main(String[] args) { ACUClient client = new ACUClient("192.168.8.107", 6800); @@ -30,21 +33,27 @@ new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS); // 测试发送查询甲烷参数命令 - new DSCTest().testSendCH4Command(client); + dsc.testSendCH4Command(client); } private void testSendCH4Command(ACUClient client) { ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setMessageProducerId("00F400"); - ch4.setDestinationId("006B00"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(2); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + ch4.setMessageProducerId(sour); - byte[] content = finspi.messageToBytes(ch4); + PgAcu acu = new PgAcuDaoImpl().findACUById(1); + String dest = acu.getAcu_net() + acu.getAcu_node() + acu.getAcu_unit(); + ch4.setDestinationId(dest); + + ch4.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + ch4.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.START")))) + "00"); + ch4.setCount(Integer.parseInt(Configure.getProperty("acubl", "YXL.ACU001.DCH.COUNT"))); ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1); - sche.schedule(new ReadCH4ParamTask(client, content), 15, TimeUnit.SECONDS); + sche.schedule(new ReadCH4ParamTask(client, ch4), 15, TimeUnit.SECONDS); sche.shutdown(); //执行完任务之后关闭线程 } } diff --git a/src/com/szpg/db/dao/PgAcuDao.java b/src/com/szpg/db/dao/PgAcuDao.java index 3a6c694..ed4eaa7 100644 --- a/src/com/szpg/db/dao/PgAcuDao.java +++ b/src/com/szpg/db/dao/PgAcuDao.java @@ -7,4 +7,5 @@ public interface PgAcuDao { public List findAllACU(); + public PgAcu findACUById(Integer id); } diff --git a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java index e57acfc..90956d9 100644 --- a/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuDaoImpl.java @@ -48,4 +48,38 @@ return null; } + @Override + public PgAcu findACUById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcu.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询ACU成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询ACU异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + return null; + } + } diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java index 7a5ea2d..4379704 100644 --- a/src/com/szpg/db/test/PgAcuTest.java +++ b/src/com/szpg/db/test/PgAcuTest.java @@ -1,15 +1,29 @@ package com.szpg.db.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import org.junit.Before; import org.junit.Test; +import com.szpg.db.dao.PgAcuDao; import com.szpg.db.dao.impl.PgAcuDaoImpl; public class PgAcuTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } @Test public void testFindAllACU() { - assertEquals(3, new PgAcuDaoImpl().findAllACU().size()); + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); } } diff --git a/src/com/szpg/db/util/ConnectionManager.java b/src/com/szpg/db/util/ConnectionManager.java index a903ea3..068219c 100644 --- a/src/com/szpg/db/util/ConnectionManager.java +++ b/src/com/szpg/db/util/ConnectionManager.java @@ -13,14 +13,14 @@ try { dataSource = new ComboPooledDataSource(); - String host = Configure.getProperty("DB.HOST", "localhost"); - String port = Configure.getProperty("DB.PORT", "1521"); - String dbname = Configure.getProperty("DB.SERVICE", "ORCL"); + String host = Configure.getProperty("sys", "DB.HOST", "localhost"); + String port = Configure.getProperty("sys", "DB.PORT", "1521"); + String dbname = Configure.getProperty("sys", "DB.SERVICE", "ORCL"); String url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbname; dataSource.setJdbcUrl(url); - dataSource.setUser(Configure.getProperty("DB.USERNAME", "scott")); - dataSource.setPassword(Configure.getProperty("DB.PASSWORD", "tiger")); + dataSource.setUser(Configure.getProperty("sys", "DB.USERNAME", "scott")); + dataSource.setPassword(Configure.getProperty("sys", "DB.PASSWORD", "tiger")); dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { diff --git a/src/com/szpg/plc/message/AppCommand.java b/src/com/szpg/plc/message/AppCommand.java index 2334198..bed8dc2 100644 --- a/src/com/szpg/plc/message/AppCommand.java +++ b/src/com/szpg/plc/message/AppCommand.java @@ -1,5 +1,8 @@ package com.szpg.plc.message; +import java.util.Calendar; +import java.util.UUID; + public abstract class AppCommand extends AppMessage { /** @@ -7,16 +10,30 @@ */ private static final long serialVersionUID = -2819290815081490558L; + private String id; private String destinationId; private CommandResponse commandResponse; + /** + * 基类的构造函数 + * 自动生成ID和时间 + */ public AppCommand() { - + this.setId(UUID.randomUUID().toString().replace("-", "")); + this.setTime(Calendar.getInstance()); } @SuppressWarnings("rawtypes") public abstract Class getResponseClass(); + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getDestinationId() { return destinationId; } diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index 334f919..7e9c937 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -1,8 +1,8 @@ package com.szpg.plc.message.command; import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.protocol.fins.FINSConstants; public abstract class ReadMemoryCommand extends AppCommand { @@ -41,7 +41,7 @@ public ReadMemoryCommand getInstance(String type) { switch (type) { - case FINSConstants.COMMAND_READ_CH4: + case AppMessageConstants.CMD_TYPE_READCH4PARAM: return new ReadCH4ParamCommand(); default: diff --git a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java index 46c1109..73e5395 100644 --- a/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java +++ b/src/com/szpg/plc/message/command/read/ReadCH4ParamCommand.java @@ -9,7 +9,7 @@ * */ private static final long serialVersionUID = -8356882767656717757L; - + @Override public Class getResponseClass() { return ReadCH4ParamCommandResponse.class; diff --git a/src/com/szpg/plc/protocol/fins/FINSConstants.java b/src/com/szpg/plc/protocol/fins/FINSConstants.java index b24a6ec..2697e74 100644 --- a/src/com/szpg/plc/protocol/fins/FINSConstants.java +++ b/src/com/szpg/plc/protocol/fins/FINSConstants.java @@ -30,9 +30,4 @@ public final static byte RSV = 0x00; //RSV字节固定为00 public final static byte GCT = 0x02; //GCT字节根据PLC版本设置为02 public final static byte SID = 0x00; //SID字节固定为00 - - - /******** 命令类型 ********/ - public final static String COMMAND_READ_CH4 = "ReadCH4"; - public final static String COMMAND_WRITE_CH4 = "WriteCH4"; } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 7081497..ce15389 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -46,6 +46,17 @@ received = bytesToLinkCommandResponse(finsFrame); } + // 读写命令的响应 + if (commandStr.equalsIgnoreCase("00000002")) { + String commandType = FINSByteFrameTool.getFinsCommandCode(byteMessage); + if (commandType.equalsIgnoreCase("0101")) { + // 读内存命令响应 +// received = + } else if (commandType.equalsIgnoreCase("0102")) { + // 写内存命令响应 + } + } + // // // byte typeb = finsFrame.FRAME_DATA_AFN; diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 8daac2b..54eb01f 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -142,7 +142,7 @@ public static String getFinsCommandCode(byte[] finsFrame) { byte[] text = getText(finsFrame); - if (null != text && text.length > 12) + if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); else return ""; diff --git a/src/com/szpg/plc/server/FINSCommandPool.java b/src/com/szpg/plc/server/FINSCommandPool.java index f3e2fd2..5e6c828 100644 --- a/src/com/szpg/plc/server/FINSCommandPool.java +++ b/src/com/szpg/plc/server/FINSCommandPool.java @@ -21,9 +21,9 @@ private Map> messageToSend; //发送命令池 private Map messageToResponse; //响应消息池 - private final int VALID_MIN = Integer.parseInt(Configure.getProperty("POOL.VALID_TIME", "5")); + private final int VALID_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.VALID_TIME", "5")); //刷新时间 - private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("POOL.POOL.REFRESH_TIME", "5")); + private final int FRESH_MIN = Integer.parseInt(Configure.getProperty("sys", "POOL.POOL.REFRESH_TIME", "5")); public FINSCommandPool() { messageToSend = new HashMap>(); diff --git a/src/com/szpg/task/ReadCH4ParamTask.java b/src/com/szpg/task/ReadCH4ParamTask.java index 6a6231b..b4276ec 100644 --- a/src/com/szpg/task/ReadCH4ParamTask.java +++ b/src/com/szpg/task/ReadCH4ParamTask.java @@ -1,22 +1,48 @@ package com.szpg.task; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppCommand; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.protocol.DTProtocolInterface; +import com.szpg.plc.protocol.ProtocolFactory; import com.szpg.plc.server.ACUClient; import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; public class ReadCH4ParamTask implements Runnable { - + private ACUClient client; - private byte[] content; - - public ReadCH4ParamTask(ACUClient client, byte[] content) { + private AppCommand appCommand; + + public ReadCH4ParamTask(ACUClient client, AppCommand command) { this.client = client; - this.content = content; + this.appCommand = command; } @Override public void run() { + DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol(); + byte[] content = finspi.messageToBytes(appCommand); + // 发送读取甲烷参数内存命令 ACUClientUtil.getInstance().sendACUCommand(client, content); + + ReadCH4ParamCommand ch4Cmd = (ReadCH4ParamCommand) appCommand; + + // 发送完成之后将命令保存在数据库中 + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4Cmd.getId()); + cmd.setTm(ch4Cmd.getTime().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4PARAM); + cmd.setDest(ch4Cmd.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] { ch4Cmd.getMemoryArea() })); + cmd.setStart_mem_word(ch4Cmd.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4Cmd.getStartAddress().substring(4)); + cmd.setCount_word(ch4Cmd.getCount()); + + new PgAcuRdcmdDaoImpl().addCmdRecord(cmd); } } diff --git a/src/com/szpg/util/Configure.java b/src/com/szpg/util/Configure.java index 3a7c4aa..7faa37a 100644 --- a/src/com/szpg/util/Configure.java +++ b/src/com/szpg/util/Configure.java @@ -2,28 +2,43 @@ import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; public class Configure { - private static Properties properties = new Properties(); +// private static Properties properties = new Properties(); + // 配置文件集合 + private static Map pMap = new HashMap(); static { try { ClassLoader cl = Configure.class.getClassLoader(); - InputStream is = cl.getResourceAsStream("sys.properties"); - properties.load(is); + + // 获取sys配置文件信息 + Properties sys = new Properties(); + InputStream sysIs = cl.getResourceAsStream("sys.properties"); + sys.load(sysIs); + pMap.put("SYS", sys); + + // 获取ACUBL配置文件信息 + Properties bl = new Properties(); + InputStream blIs = cl.getResourceAsStream("ACUBL.properties"); + bl.load(blIs); + pMap.put("ACUBL", bl); + } catch (IOException e) { e.printStackTrace(); } } - public static String getProperty(String key) { - return properties.getProperty(key); + public static String getProperty(String file, String key) { + return pMap.get(file.toUpperCase()).getProperty(key); } - public static String getProperty(String key, String defaultValue) { - String value = properties.getProperty(key); + public static String getProperty(String file, String key, String defaultValue) { + String value = pMap.get(file.toUpperCase()).getProperty(key); if (null == value) { return defaultValue; } else { @@ -32,7 +47,8 @@ } public static void main(String[] args) { - + System.out.println(Configure.getProperty("sys", "LOCALHOST.NODE")); + System.out.println(Configure.getProperty("acubl", "YXL.ACU001.DCH01_Val")); } }