From d3553d8dd6fc00634ac32228e5b8e4d0624eda11 Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期三, 30 八月 2023 11:10:51 +0800
Subject: [PATCH] 调整Modbus配置-解决轴流风机与轴流窗不在同一个分机配置的问题

---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java |  113 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 63 insertions(+), 50 deletions(-)

diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
index 756c767..b6c25d7 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ld.igds.protocol.modbus.command;
 
 import com.ld.igds.common.CoreDeviceService;
+import com.ld.igds.common.CoreSerService;
 import com.ld.igds.constant.Constant;
 import com.ld.igds.constant.DeviceStatus;
 import com.ld.igds.io.RemoteControlService;
@@ -11,10 +12,11 @@
 import com.ld.igds.io.request.ExeDevice;
 import com.ld.igds.io.request.TempControlRequest;
 import com.ld.igds.io.response.DeviceControlResponse;
-import com.ld.igds.modbus.service.HDeviceModbusService;
+import com.ld.igds.modbus.service.HModbusService;
 import com.ld.igds.models.Device;
 import com.ld.igds.models.DeviceModbus;
-import com.ld.igds.protocol.modbus.ModbusUtil;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.protocol.modbus.ModbusUtil2;
 import com.ld.igds.protocol.modbus.ServerUtil;
 import com.ld.igds.protocol.modbus.data.ModbusTcp;
 import lombok.extern.slf4j.Slf4j;
@@ -40,11 +42,11 @@
     @Resource
     private CoreDeviceService coreDeviceService;
     @Resource
-    private HDeviceModbusService deviceModbusService;
+    private HModbusService deviceModbusService;
     @Resource
     private AnalysisService analysisService;
     @Resource
-    private ModbusUtil modbusUtil;
+    private CoreSerService coreSerService;
 
 
     @Override
@@ -76,7 +78,7 @@
                 modbusTcp = new ModbusTcp(deviceModbus);
                 modbusTcp.setIp(request.getIp());
                 modbusTcp.setPort(request.getPort());
-                modbusTcp.setDeviceCode(exeDevice.getPassCode() + "");
+                modbusTcp.setBizCode(exeDevice.getPassCode() + "");
                 modbusTcp.setSerId(request.getSerId());
                 modbusTcp.setCompanyId(request.getCompanyId());
 
@@ -89,10 +91,19 @@
                     temp = modbusTcp.getDeviceModbus().getOpen();
                 }
 
+                //鐜祦椋庢満-鍏�
+                if (DeviceStatus.F_CLOSE.getCode().equals(exeDevice.getTargetStatus())) {
+                    temp = modbusTcp.getDeviceModbus().getStop();
+                }
 
-                if (StringUtils.isEmpty(exeDevice.getLink())) {
+                //鐜祦椋庢満-寮�
+                if (DeviceStatus.F_OPEN.getCode().equals(exeDevice.getTargetStatus())) {
+                    temp = modbusTcp.getDeviceModbus().getOpen();
+                }
+
+                if (StringUtils.isBlank(exeDevice.getLink()) || "null".equals(exeDevice.getLink())) {
                     //鏍规嵁璁惧鐩爣鐘舵�侊紝璋冪敤MODBUS鎵ц
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
                     doWriteExe(modbusTcp, exeDevice.getTargetStatus());
 
                     continue;
@@ -104,17 +115,22 @@
                 modbusTcpLink = new ModbusTcp(deviceModbus);
                 modbusTcpLink.setIp(request.getIp());
                 modbusTcpLink.setPort(request.getPort());
-                modbusTcpLink.setDeviceCode(exeDevice.getLink());
+                modbusTcpLink.setBizCode(exeDevice.getLink());
                 modbusTcpLink.setSerId(request.getSerId());
                 modbusTcpLink.setCompanyId(request.getCompanyId());
-
+                if(StringUtils.isNotEmpty(deviceModbus.getSerId())){
+                    //鑻odbus璁惧閰嶇疆鍒嗘満锛屽垯浣跨敤鎵�閰嶇疆鍒嗘満鐨処P銆佺鍙�
+                    DeviceSer deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
+                    modbusTcpLink.setIp(deviceSer.getIp());
+                    modbusTcpLink.setPort(deviceSer.getPort());
+                }
 
                 //濡傛灉鏄紑椋庢満
                 if (DeviceStatus.F_OPEN.getCode().equals(exeDevice.getTargetStatus())) {
 
                     //鍏堝紑绐楀彛
                     temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, DeviceStatus.OPEN.getCode());
 
@@ -123,41 +139,41 @@
 
                     //鍐嶅紑椋庢満
                     temp = modbusTcpLink.getDeviceModbus().getOpen();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcpLink, DeviceStatus.OPEN.getCode());
                 }
 
                 //濡傛灉鍏抽鏈�
-                if (DeviceStatus.F_CLOSE.equals(exeDevice.getTargetStatus())) {
+                if (DeviceStatus.F_CLOSE.getCode().equals(exeDevice.getTargetStatus())) {
                     temp = modbusTcpLink.getDeviceModbus().getStop();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcpLink, DeviceStatus.CLOSE.getCode());
                 }
 
 
                 //濡傛灉寮�绐�
-                if (DeviceStatus.W_OPEN.equals(exeDevice.getTargetStatus())) {
+                if (DeviceStatus.W_OPEN.getCode().equals(exeDevice.getTargetStatus())) {
                     temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, exeDevice.getTargetStatus());
                 }
 
                 //濡傛灉鏄叧绐楁埛
-                if (DeviceStatus.W_CLOSE.equals(exeDevice.getTargetStatus())) {
+                if (DeviceStatus.W_CLOSE.getCode().equals(exeDevice.getTargetStatus())) {
 
                     //鍏堝叧椋庢満
                     temp = modbusTcpLink.getDeviceModbus().getStop();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
                     doWriteExe(modbusTcpLink, DeviceStatus.CLOSE.getCode());
 
                     Thread.sleep(300);
 
                     //鍦ㄥ叧绐楁埛
-                    temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    temp = modbusTcp.getDeviceModbus().getClose();
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, DeviceStatus.CLOSE.getCode());
                 }
@@ -171,18 +187,14 @@
         return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS);
     }
 
-    private int getAddrExe(String temp) {
-        if (Constant.YN_N.equals(temp)) return 65535;
-        if (temp.length() > 4) {
-            temp = temp.substring(temp.length() - 4);
-        }
-        return Integer.valueOf(temp) - 1;
-    }
-
     private void doWriteExe(ModbusTcp modbusTcp, String targetStatus) throws Exception {
-        boolean exeResult = modbusUtil.writeValue05(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true);
+        boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true);
         if (exeResult) {
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), targetStatus);
+            //鏍规嵁Modbus-TCP锛屽皢鍐欒繃鐨勫�硷紝鎭㈠鍘熸潵鐨勫��
+            ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false);
+            
+            log.debug("--------鍐欏叆鍊�---{}-{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
         }
     }
 
@@ -200,13 +212,10 @@
             if (null == list || list.isEmpty()) {
                 return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鏈幏鍙栧埌璁惧鍒楄〃淇℃伅");
             }
-
             DeviceModbus deviceModbus;
             ModbusTcp modbusTcp;
             ModbusTcp modbusTcpLink;
-            int i = 1;
             for (Device device : list) {
-
                 deviceModbus = deviceModbusService.getCacheDeviceModbus(request.getCompanyId(), device.getPassCode() + "");
 
                 if (null == deviceModbus) {
@@ -219,18 +228,13 @@
                 modbusTcp = new ModbusTcp(deviceModbus);
                 modbusTcp.setIp(request.getIp());
                 modbusTcp.setPort(request.getPort());
-                modbusTcp.setDeviceCode(device.getPassCode() + "");
+                modbusTcp.setBizCode(device.getPassCode() + "");
                 modbusTcp.setSerId(device.getSerId());
                 modbusTcp.setCompanyId(device.getCompanyId());
 
-                // modbusTcp.setAddrExe(this.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
+                doReadStatus(modbusTcp);
 
-                modbusTcp.setAddrExe(1024);
-                doReadExe(modbusTcp);
-
-                if (i == 1) break;
-
-                if (StringUtils.isEmpty(device.getLink())) continue;
+                if (StringUtils.isBlank(device.getLink()) || "null".equals(device.getLink())) continue;
 
                 Thread.sleep(300);
 
@@ -242,12 +246,12 @@
                 modbusTcpLink.setIp(request.getIp());
                 modbusTcpLink.setPort(request.getPort());
                 modbusTcpLink.setSerId(device.getSerId());
-                modbusTcpLink.setDeviceCode(device.getLink());
+                modbusTcpLink.setBizCode(device.getLink());
                 modbusTcpLink.setCompanyId(device.getCompanyId());
 
-                modbusTcpLink.setAddrExe(this.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
+                modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
 
-                doReadExe(modbusTcpLink);
+                doReadStatus(modbusTcpLink);
             }
 
         } catch (Exception e) {
@@ -266,18 +270,27 @@
      * @param modbusTcp
      * @throws Exception
      */
-    private void doReadExe(ModbusTcp modbusTcp) throws Exception {
+    private void doReadStatus(ModbusTcp modbusTcp) throws Exception {
 
         if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpen())) return;
 
-        boolean[] result = modbusUtil.readStatus02(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), 2);
-        log.debug("---------璇诲彇鐘舵��------{}--{}", modbusTcp.getDeviceCode(), result.toString());
+        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpenEnd())) return;
+        int addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd());
 
-        if (result[0]) {
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), DeviceStatus.OPEN.getCode());
+        boolean result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
+        log.debug("---------璇诲紑鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
+
+        if (result) {
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode());
         }
-        if (result[1]) {
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), DeviceStatus.CLOSE.getCode());
+
+        if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getCloseEnd())) return;
+        addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getCloseEnd());
+        result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
+        log.debug("---------璇诲叧鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
+
+        if (result) {
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode());
         }
     }
 

--
Gitblit v1.9.3