Browse Source

环境监测集成modbus/tcp定时任务

王先生 2 years ago
parent
commit
82d3736dca

+ 50 - 4
eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/ModbusTask.java

@@ -81,8 +81,7 @@ public class ModbusTask {
         }
     }
 
-    public void  gainModbusData(){
-
+    public void  gainModbusData() {
         try {
             /**
              * 根据sql查询所有总集合
@@ -113,7 +112,53 @@ public class ModbusTask {
                                           */
                                           List<DmModbusData> dmModbusData = group.getDmModbusData();
                                           if (!dmModbusData.isEmpty()){
+                                              //已经确认 空气质量统一用3X(Input  Register)  数据类型为short
+                                              dmModbusData.forEach(data->{
+                                                  switch (data.getSoftwareRegisterType()){
+                                                      case "3X(Input  Register)":
+                                                          log.info("调用读取InputRegisters模拟量数据");
+                                                          try {
+                                                              Number number = readInputRegisters(Integer.valueOf(data.getSoftwareRegisterAddress()), 1, 1);
+
+                                                          } catch (InterruptedException e) {
+                                                              log.error("调用读取InputRegisters模拟量数据,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          } catch (ExecutionException e) {
+                                                              log.error("调用读取InputRegisters模拟量数据,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          }
+                                                          break;
+                                                      case "4X(Holding  Register)":
+                                                          log.info("调用读取HoldingRegister数据方法");
+                                                          try {
+                                                               Number number = readHoldingRegisters(Integer.valueOf(data.getSoftwareRegisterAddress()), 1, 1);
+                                                          } catch (InterruptedException e) {
+                                                              log.error("调用读取HoldingRegister数据方法,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          } catch (ExecutionException e) {
+                                                              log.error("调用读取HoldingRegister数据方法,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          }
+                                                          break;
+                                                      case "1X(Input  Status)":
+                                                          log.info("调用读取readDiscreteInputs开关量方法");
+                                                          try {
+                                                              Boolean aBoolean = readDiscreteInputs(Integer.valueOf(data.getSoftwareRegisterAddress()), 1, 1);
+                                                          } catch (InterruptedException e) {
+                                                              log.error("调用读取HoldingRegister数据方法,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          } catch (ExecutionException e) {
+                                                              log.error("调用读取HoldingRegister数据方法,modbus读取数据失败,失败原因:{}",e.getMessage());
+                                                          }
+                                                          break;
+                                                      case "0X(Coil  Status)":
+                                                          log.info("调用读取Coils开关量,{readCoils}方法");
+                                                          try {
+                                                              Boolean aBoolean = readCoils(Integer.valueOf(data.getSoftwareRegisterAddress()), 1, 1);
+                                                          } catch (InterruptedException e) {
+                                                              e.printStackTrace();
+                                                          } catch (ExecutionException e) {
+                                                              e.printStackTrace();
+                                                          }
+                                                          break;
+                                                  }
 
+                                              });
                                           }
                                      });
                                  }
@@ -225,7 +270,7 @@ public class ModbusTask {
         ReadHoldingRegistersResponse readHoldingRegistersResponse = future.get();// 工具类做的同步返回.实际使用推荐结合业务进行异步处理
         if (readHoldingRegistersResponse != null) {
             ByteBuf buf = readHoldingRegistersResponse.getRegisters();
-            result = buf.readFloat();
+            result = buf.readShort();
             ReferenceCountUtil.release(readHoldingRegistersResponse);
         }
         return result;
@@ -254,7 +299,8 @@ public class ModbusTask {
         ReadInputRegistersResponse readInputRegistersResponse = future.get();// 工具类做的同步返回.实际使用推荐结合业务进行异步处理
         if (readInputRegistersResponse != null) {
             ByteBuf buf = readInputRegistersResponse.getRegisters();
-            result = buf.readDouble();
+
+            result = buf.readShort();
             ReferenceCountUtil.release(readInputRegistersResponse);
         }
         return result;