From 8d58c40af40493bd5f066cbfdb1ffd9f113c22fc Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期三, 03 九月 2025 16:37:21 +0800
Subject: [PATCH] 1.前端推数据使用了最新的webSokect客户现场总是掉线,修改为接口方式 2.设备交互整体增加异常处理以及PLC连接方式改为短连接

---
 JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineLoad.java |  151 +++++++++++++++++++++++++++++---------------------
 1 files changed, 87 insertions(+), 64 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 cc0b073..0d341b9 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
@@ -1,10 +1,8 @@
 package com.mes.plcTaskThread;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mes.md.entity.LineConfiguration;
 import com.mes.md.entity.Machine;
 import com.mes.md.entity.PrimitiveTask;
-import com.mes.md.entity.Tasking;
 import com.mes.md.mapper.MachineMapper;
 import com.mes.md.mapper.PrimitiveTaskMapper;
 import com.mes.md.mapper.TaskingMapper;
@@ -17,11 +15,12 @@
 import com.mes.utils.HexUtil;
 import lombok.extern.slf4j.Slf4j;
 
-import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 @Slf4j
-public class MachineLoad extends Thread{
+public class MachineLoad extends Thread {
 
     TaskingMapper taskingMapper;
 
@@ -34,69 +33,89 @@
     PrimitiveTaskMapper primitiveTaskMapper;
 
     LineConfigurationService lineConfigurationService;
-
-    public Long machineId = 2L;
+    public Machine thisMachine;
+    //public Long machineId = 2L;
     public List<Map> sendRecords = new ArrayList<>();
-    public MachineLoad(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;
         this.machineMapper = machineMapper;
         this.taskingService = taskingService;
         this.primitiveTaskService = primitiveTaskService;
         this.lineConfigurationService = lineConfigurationService;
     }
-    public void plcStart() {
-        Machine machine=machineMapper.selectById(machineId);
-        ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),"PlcLoad");
-        modbusTcp1.connect();
-        PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement("PlcLoad");
+
+    public void plcStart() throws Exception{
+        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())) {
+                    machine.setStatePowerOn("鍏虫満");
+                    machineMapper.updateById(machine);
+                }
                 modbusTcp1.close();
                 return;
             }
-            PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//璇锋眰瀛�
-            PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//鍙戦�佸瓧
-            PlcParameter mesSendCount =plcAgreement.getPlcParameter("mesSendCount");//鍙戦�佹暟閲�
+            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 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.setReportCount(primitiveTask.getReportCount()+plcReportID.getValueInt());
+                        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());
+                        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;
@@ -107,52 +126,56 @@
                 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){
-                        //浠诲姟鏁�>宸蹭笂鏁伴噺
-                        List<Tasking> taskingTopList=taskingMapper.selectList(new QueryWrapper<Tasking>().lambda()
-                                .eq(Tasking::getScanId,primitiveTask.getScanId())
-                                .eq(Tasking::getState,"绾夸笂")
-                                .eq(Tasking::getGlassState,"姝e父")
-                        );
-                        if (primitiveTask.getTaskQuantity()>primitiveTask.getReportCount()){
-                            loadCount=primitiveTask.getTaskQuantity()-taskingTopList.size();
-                            loadCount=(loadCount>0?loadCount:0);
+                    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;
                         }
                         break;
                     }
-                }else{
+                } else if (machine.getMode() == 2) {
                     //瀹氬埗妯″紡
-                    loadCount=1;
+                    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) {
+        while (true) {
             try {
                 Thread.sleep(1000);
                 plcStart();
             } catch (InterruptedException e) {
                 e.printStackTrace();
+            }catch (Exception e) {
+                throw new RuntimeException(e);
             }
         }
     }

--
Gitblit v1.8.0