From 6c9369ab9b7da99687857004470e8d7824eb69ae Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 03 九月 2025 08:02:00 +0800
Subject: [PATCH] 修改plc连接读取失败导致无法重新链接

---
 JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java |  124 ++++++++++++++++++++++------------------
 1 files changed, 68 insertions(+), 56 deletions(-)

diff --git a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java
index 0234a10..c5ae0d7 100644
--- a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java
+++ b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java
@@ -20,7 +20,7 @@
 import java.util.Map;
 
 @Slf4j
-public class MachineLoad extends Thread{
+public class MachineLoad extends Thread {
 
     TaskingMapper taskingMapper;
 
@@ -36,7 +36,8 @@
     public Machine thisMachine;
     //public Long machineId = 2L;
     public List<Map> sendRecords = new ArrayList<>();
-    public MachineLoad(Machine machine,PrimitiveTaskMapper primitiveTaskMapper,TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
+
+    public MachineLoad(Machine machine, PrimitiveTaskMapper primitiveTaskMapper, TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService) {
         this.thisMachine = machine;
         this.primitiveTaskMapper = primitiveTaskMapper;
         this.taskingMapper = taskingMapper;
@@ -45,70 +46,76 @@
         this.primitiveTaskService = primitiveTaskService;
         this.lineConfigurationService = lineConfigurationService;
     }
+
     public void plcStart() {
-        Machine machine=machineMapper.selectById(thisMachine.getId());
-        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),machine.getFileName());
-        modbusTcp1.connect();
-        PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement(machine.getFileName());
+        ModbusTcp modbusTcp1 = null;
         try {
-            if(!modbusTcp1.read(plcAgreement)){
+            Machine machine = machineMapper.selectById(thisMachine.getId());
+            modbusTcp1 = new ModbusTcp(machine.getIp(), machine.getPort(), machine.getFileName());
+            if (!modbusTcp1.connect()) {
+                log.error("杩炴帴PLC澶辫触锛岄��鍑烘湰娆℃搷浣�");
+                return;
+            }
+            PlcAgreement plcAgreement = modbusTcp1.getPlcAgreement(machine.getFileName());
+
+            if (!modbusTcp1.read(plcAgreement)) {
                 log.info("閫氳璇诲彇鏂版暟鎹け璐�");
-                if(!"鍏虫満".equals(machine.getStatePowerOn())){
+                if (!"鍏虫満".equals(machine.getStatePowerOn())) {
                     machine.setStatePowerOn("鍏虫満");
                     machineMapper.updateById(machine);
                 }
                 modbusTcp1.close();
                 return;
             }
-            if(!"寮�鏈�".equals(machine.getStatePowerOn())){
+            if (!"寮�鏈�".equals(machine.getStatePowerOn())) {
                 machine.setStatePowerOn("寮�鏈�");
                 machineMapper.updateById(machine);
             }
-            PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//璇锋眰瀛�
-            PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//鍙戦�佸瓧
-            PlcParameter mesSendCount =plcAgreement.getPlcParameter("mesSendCount");//鍙戦�佹暟閲�
+            PlcParameter plcRequest = plcAgreement.getPlcParameter("plcRequest");//璇锋眰瀛�
+            PlcParameter mesSend = plcAgreement.getPlcParameter("mesSend");//鍙戦�佸瓧
+            PlcParameter mesSendCount = plcAgreement.getPlcParameter("mesSendCount");//鍙戦�佹暟閲�
 
-            PlcParameter plcReport =plcAgreement.getPlcParameter("plcReport");//姹囨姤瀛�
-            PlcParameter plcReportID =plcAgreement.getPlcParameter("plcReportID");//姹囨姤ID
-            PlcParameter mesConfirm =plcAgreement.getPlcParameter("mesConfirm");//纭瀛�
-            PlcParameter mesConfirmID =plcAgreement.getPlcParameter("mesConfirmID");//纭ID
-            if (machine.getIsLog()>0){
+            PlcParameter plcReport = plcAgreement.getPlcParameter("plcReport");//姹囨姤瀛�
+            PlcParameter plcReportID = plcAgreement.getPlcParameter("plcReportID");//姹囨姤ID
+            PlcParameter mesConfirm = plcAgreement.getPlcParameter("mesConfirm");//纭瀛�
+            PlcParameter mesConfirmID = plcAgreement.getPlcParameter("mesConfirmID");//纭ID
+            if (machine.getIsLog() > 0) {
                 modbusTcp1.consoleLogInfo(plcAgreement);
             }
-            if (0==plcRequest.getValueInt()&&1==mesSend.getValueInt()) {
+            if (0 == plcRequest.getValueInt() && 1 == mesSend.getValueInt()) {
                 //鍙戦�佸瓧缃�0
-                String send= HexUtil.intTo2ByteHex(0);
-                modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
-                log.info("1.鍙戦�佸瓧缃浂 鍙戦�佸瓧 娓呯┖鎴愬姛锛涘唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}",send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()));
+                String send = HexUtil.intTo2ByteHex(0);
+                modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesSend.getAddressStart() / 2));
+                log.info("1.鍙戦�佸瓧缃浂 鍙戦�佸瓧 娓呯┖鎴愬姛锛涘唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}", send, HexUtil.intTo2ByteHex(mesSend.getAddressStart()));
                 modbusTcp1.close();
                 return;
             }
-            if (0==plcReport.getValueInt()&&0!=mesConfirm.getValueInt()) {
+            if (0 == plcReport.getValueInt() && 0 != mesConfirm.getValueInt()) {
                 //纭瀛楃疆闆�
-                String send=HexUtil.intTo2ByteHex(0);
-                modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2));
-                log.info("2.纭瀛楃疆闆� 浠诲姟瀹屾垚 娓呯┖鎴愬姛锛涘唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()));
+                String send = HexUtil.intTo2ByteHex(0);
+                modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart() / 2));
+                log.info("2.纭瀛楃疆闆� 浠诲姟瀹屾垚 娓呯┖鎴愬姛锛涘唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}", send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()));
                 modbusTcp1.close();
                 return;
             }
-            if(1==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){
-                int finishCount=plcReportID.getValueInt();
-                if(finishCount>0) {//鏈変换鍔�
-                    if(machine.getMode()==1){
+            if (1 == plcReport.getValueInt() && 0 == mesConfirm.getValueInt()) {
+                int finishCount = plcReportID.getValueInt();
+                if (finishCount > 0) {//鏈変换鍔�
+                    if (machine.getMode() == 1) {
                         //鏍囧噯妯″紡  鎵惧凡棰嗗彇鏈畬鎴愮殑绗竴鏉′换鍔�
-                        LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
-                        List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
-                        for(PrimitiveTask primitiveTask:findPrimitiveTasking){
-                            primitiveTask.setLoadCount(primitiveTask.getLoadCount()+1);
+                        LineConfiguration lineConfiguration = lineConfigurationService.machineLineConfiguration(machine);
+                        List<PrimitiveTask> findPrimitiveTasking = primitiveTaskService.findPrimitiveTasking(machine, lineConfiguration.getLineId());
+                        for (PrimitiveTask primitiveTask : findPrimitiveTasking) {
+                            primitiveTask.setLoadCount(primitiveTask.getLoadCount() + 1);
                             primitiveTaskMapper.updateById(primitiveTask);
                             break;
                         }
-                    }else if(machine.getMode()==3){
-                        machine.setFinshCount(machine.getFinshCount()+plcReportID.getValueInt());
+                    } else if (machine.getMode() == 3) {
+                        machine.setFinshCount(machine.getFinshCount() + plcReportID.getValueInt());
                         machineMapper.updateById(machine);
                     }
                     String send = HexUtil.intTo2ByteHex(1);
-                    modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/ 2));
+                    modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart() / 2));
                     log.info("浠诲姟瀹屾垚 鎴愬姛 鍐呭锛歿},鍙戦�佽捣濮嬪湴鍧�:{}", send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()));
                     modbusTcp1.close();
                     return;
@@ -119,41 +126,46 @@
                 modbusTcp1.close();
                 return;
             }
-            if((1==plcRequest.getValueInt()&&0==mesSend.getValueInt())
-                    &&"寮�宸�".equals(machine.getState())){
-                int loadCount=0;
-                if(machine.getMode()==1){
+            if ((1 == plcRequest.getValueInt() && 0 == mesSend.getValueInt())
+                    && "寮�宸�".equals(machine.getState())) {
+                int loadCount = 0;
+                if (machine.getMode() == 1) {
                     //鏍囧噯妯″紡  鎵惧凡棰嗗彇鏈畬鎴愮殑绗竴鏉′换鍔�
-                    LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
-                    List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
-                    for(PrimitiveTask primitiveTask:findPrimitiveTasking){
+                    LineConfiguration lineConfiguration = lineConfigurationService.machineLineConfiguration(machine);
+                    List<PrimitiveTask> findPrimitiveTasking = primitiveTaskService.findPrimitiveTasking(machine, lineConfiguration.getLineId());
+                    for (PrimitiveTask primitiveTask : findPrimitiveTasking) {
                         //浠诲姟鏁�-宸蹭笂鏁伴噺>0  杩斿洖1
-                        if((primitiveTask.getTaskQuantity()-primitiveTask.getLoadCount())>0){
-                            loadCount=1;
+                        if ((primitiveTask.getTaskQuantity() - primitiveTask.getLoadCount()) > 0) {
+                            loadCount = 1;
                         }
                         break;
                     }
-                }else if(machine.getMode()==2){
+                } else if (machine.getMode() == 2) {
                     //瀹氬埗妯″紡
-                    loadCount=1;
-                }else if (machine.getMode()==3){
-                    loadCount=machine.getTaskCount()-machine.getFinshCount();
-                    loadCount=(loadCount>0?1:0);
+                    loadCount = 1;
+                } else if (machine.getMode() == 3) {
+                    loadCount = machine.getTaskCount() - machine.getFinshCount();
+                    loadCount = (loadCount > 0 ? 1 : 0);
                 }
-                if(loadCount>0){
-                    log.info("4銆佸彂閫佷换鍔�  浠诲姟鏁版嵁锛歿}, 璁惧鐘舵��:{}, ",loadCount,machine);
-                    String send=HexUtil.intTo2ByteHex(1)+ HexUtil.intTo2ByteHex(loadCount);
-                    modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
-                    log.info("鍙戦�佷换鍔″彂閫佹姤鏂囧唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}",send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
+                if (loadCount > 0) {
+                    log.info("4銆佸彂閫佷换鍔�  浠诲姟鏁版嵁锛歿}, 璁惧鐘舵��:{}, ", loadCount, machine);
+                    String send = HexUtil.intTo2ByteHex(1) + HexUtil.intTo2ByteHex(loadCount);
+                    modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesSend.getAddressStart() / 2));
+                    log.info("鍙戦�佷换鍔″彂閫佹姤鏂囧唴瀹癸細{},鍙戦�佽捣濮嬪湴鍧�:{}", send, HexUtil.intTo2ByteHex(mesSend.getAddressStart() / 2));
                     modbusTcp1.close();
                     return;
                 }
             }
         } catch (Exception e) {
             log.info("浜や簰閫昏緫閿欒");
+        } finally {
+            // 纭繚杩炴帴鍏抽棴
+            if (modbusTcp1 != null) {
+                modbusTcp1.close();
+            }
         }
-        modbusTcp1.close();
     }
+
     @Override
     public void run() {
         while (this != null) {

--
Gitblit v1.8.0