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/MachineRotate.java |  195 ++++++++++++++++++++++++++----------------------
 1 files changed, 106 insertions(+), 89 deletions(-)

diff --git a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java
index 3fcff53..68abf6d 100644
--- a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java
+++ b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/plcTaskThread/MachineRotate.java
@@ -14,7 +14,7 @@
 import java.util.*;
 
 @Slf4j
-public class MachineRotate extends Thread{
+public class MachineRotate extends Thread {
 
 
     private MachineMapper machineMapper;
@@ -22,108 +22,123 @@
     private S7objectMachine s7objectMachine;
     public static Long machineId = 6L;
     public List<Map> sendRecords = new ArrayList<>();
+    public Machine thisMachine;
 
-    public MachineRotate(MachineMapper machineMapper, TaskingService taskingService){
+    public MachineRotate(Machine machine, MachineMapper machineMapper, TaskingService taskingService) {
+        this.thisMachine = machine;
         this.machineMapper = machineMapper;
         this.taskingService = taskingService;
     }
-    public void plcStart() {
+
+    public void plcStart() throws Exception {
         //鏃嬭浆鍙�
-        Long machineId=20L;
-        Machine machine=machineMapper.selectById(machineId);
-        if (s7objectMachine==null){
-            s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcRotate", EPlcType.S1200);
-            s7objectMachine.start();
-        }
+        Machine machine = machineMapper.selectById(thisMachine.getId());
+        S7objectMachine s7objectMachine = new S7objectMachine(machine.getIp(), machine.getPort(), machine.getFileName(), EPlcType.S1200);
+        s7objectMachine.readData();//鎸夌収json鏂囦欢璇诲彇鍐呭
         PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
-        PlcParameterInfo plcRequest =plcParameterObject.getPlcParameter("plcRequest");//璇锋眰瀛�
-        PlcParameterInfo plcRequestID =plcParameterObject.getPlcParameter("plcRequestID");//璇锋眰ID
-        PlcParameterInfo plcRequestType =plcParameterObject.getPlcParameter("plcRequestType");//PLC璇锋眰
+        if (plcParameterObject == null) {
+            s7objectMachine.plccontrol.closeS7client();
+            return;
+        }
+        try {
 
-        PlcParameterInfo mesSend =plcParameterObject.getPlcParameter("mesSend");//鍙戦�佸瓧
-        PlcParameterInfo mesSendId =plcParameterObject.getPlcParameter("mesSendID");//鍙戦�両D
-        PlcParameterInfo length =plcParameterObject.getPlcParameter("length");//闀�
-        PlcParameterInfo width =plcParameterObject.getPlcParameter("width");//瀹�
-        PlcParameterInfo rotateType =plcParameterObject.getPlcParameter("rotateType");//鏃嬭浆绫诲瀷
+            PlcParameterInfo plcRequest = plcParameterObject.getPlcParameter("plcRequest");//璇锋眰瀛�
+            PlcParameterInfo plcRequestID = plcParameterObject.getPlcParameter("plcRequestID");//璇锋眰ID
+            PlcParameterInfo plcRequestType = plcParameterObject.getPlcParameter("plcRequestType");//PLC璇锋眰
 
-        PlcParameterInfo mesSendType =plcParameterObject.getPlcParameter("mesSendType");//  鎵爜1   涓嶆壂鐮�2
-        String scan_id="";
-        if (machine.getIsLog()>0){
-            s7objectMachine.consoleLogInfo();
-        }
-        if ("0".equals(plcRequestType.getValue())&&!"0".equals(mesSendType.getValue())) {
-            //鍙戦�佸瓧缃�0
-            log.info("1.鍙戦�佺被鍨嬪瓧缃浂,娓呴櫎涓婃鍙戦�佺殑绫诲瀷鏁版嵁{}->0",mesSendType.getValue());
-            s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), 0);
-            return;
-        }
-        if ("0".equals(plcRequest.getValue())&&!"0".equals(mesSend.getValue())) {
-            //鍙戦�佸瓧缃�0
-            int finishCount=taskingService.finishMachineTask(machine);
-            log.info("1.鍙戦�佸瓧缃浂,娓呴櫎涓婃鍙戦�佺殑鏁版嵁{},{},{},{},{}"
-                    ,finishCount
-                    ,length.getValue()
-                    ,width.getValue()
-                    ,mesSendId.getValue()
-                    ,mesSend.getValue());
-            s7objectMachine.plccontrol.writeWord(length.getAddress(), 0);
-            s7objectMachine.plccontrol.writeWord(width.getAddress(), 0);
-            s7objectMachine.plccontrol.writeWord(mesSendId.getAddress(), 0);
-            s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), 0);
-            s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 0);
-            return;
-        }
-        if ("1".equals(plcRequestType.getValue())&&"0".equals(mesSendType.getValue())) {
-            //鍙戦�佺被鍨�   1鎵爜  2涓嶆壂鐮�
-            int type=machine.getMode()==1?2:1;
-            log.info("3.鍙戦�佺被鍨嬫暟鎹�0->{}",mesSendType.getValue());
-            s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), type);
-            return;
-        }
-        List<Tasking> taskingCount=taskingService.findMachineWorkStateTask(machine,"姝e湪宸ヤ綔");
-        if("1".equals(plcRequest.getValue())&&"0".equals(mesSend.getValue())
-                &&"寮�宸�".equals(machine.getState())
-                &&taskingCount.size()<machine.getMaxTaskCount()){
-            Tasking tasking;
-            if(machine.getMode()==1){
-                //鏍囧噯妯″紡
-                tasking=taskingService.startMachineTask(machine);
-            }else{
-                //瀹氬埗妯″紡
-                String PlcRequestID_=plcRequestID.getValue();
-                scan_id= PlcRequestID_.substring(PlcRequestID_.lastIndexOf(",")+1);
-                //鏍囪褰撳墠宸ュ簭 浠ュ墠鐨勭幓鐠� 鐩存帴鍒板綋鍓嶅伐搴�
-                tasking=taskingService.startScanIdMachineTask(machine,scan_id);//涓嶇椤哄簭锛岀洿鎺ユ壘浠庣炕鐗囧彴鎵爜鍚庡埌鏃嬭浆鍙扮殑鏁版嵁
+            PlcParameterInfo mesSend = plcParameterObject.getPlcParameter("mesSend");//鍙戦�佸瓧
+            PlcParameterInfo mesSendId = plcParameterObject.getPlcParameter("mesSendID");//鍙戦�両D
+            PlcParameterInfo length = plcParameterObject.getPlcParameter("length");//闀�
+            PlcParameterInfo width = plcParameterObject.getPlcParameter("width");//瀹�
+            PlcParameterInfo rotateType = plcParameterObject.getPlcParameter("rotateType");//鏃嬭浆绫诲瀷
+
+            PlcParameterInfo mesSendType = plcParameterObject.getPlcParameter("mesSendType");//  鎵爜1   涓嶆壂鐮�2
+            String scan_id = "";
+            if (machine.getIsLog() > 0) {
+                s7objectMachine.consoleLogInfo();
             }
-            if(tasking!=null){
-                log.info("4銆佸彂閫佹暟鎹�:{},{},{},{},{}"
-                        ,tasking.getGlassId(),tasking.getProgramId()
-                        ,tasking.getLength().intValue(),tasking.getWidth().intValue(),1);
-                s7objectMachine.plccontrol.writeWord(length.getAddress(), tasking.getLength().intValue());
-                s7objectMachine.plccontrol.writeWord(width.getAddress(), tasking.getWidth().intValue());
-                s7objectMachine.plccontrol.writeString(mesSendId.getAddress(), tasking.getGlassId().toString());
-                s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), 1);
-                s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
-                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                String sendRecord=df.format(new Date())+"  "+
-                        tasking.getGlassId()+"-"+
-                        tasking.getLength()+"-"+
-                        tasking.getWidth();
-                if (sendRecords.size()>7){
-                    sendRecords.remove(0);
-                }
+            if ("0".equals(plcRequestType.getValue()) && !"0".equals(mesSendType.getValue())) {
+                //鍙戦�佸瓧缃�0
+                log.info("1.鍙戦�佺被鍨嬪瓧缃浂,娓呴櫎涓婃鍙戦�佺殑绫诲瀷鏁版嵁{}->0", mesSendType.getValue());
+                s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), 0);
+                return;
+            }
+            if ("0".equals(plcRequest.getValue()) && !"0".equals(mesSend.getValue())) {
+                //鍙戦�佸瓧缃�0
+                int finishCount = taskingService.finishMachineTask(machine);
                 nullMachine(machine);
-                Map sendContentMap=new HashMap();
-                sendContentMap.put("sendContent",sendRecord);
-                sendRecords.add(sendContentMap);
-            }else if(!scan_id.isEmpty()){
-                taskingService.scanMachineAdd(machine,scan_id);
+                log.info("1.鍙戦�佸瓧缃浂,娓呴櫎涓婃鍙戦�佺殑鏁版嵁{},{},{},{},{}"
+                        , finishCount
+                        , length.getValue()
+                        , width.getValue()
+                        , mesSendId.getValue()
+                        , mesSend.getValue());
+                s7objectMachine.plccontrol.writeWord(length.getAddress(), 0);
+                s7objectMachine.plccontrol.writeWord(width.getAddress(), 0);
+                s7objectMachine.plccontrol.writeWord(mesSendId.getAddress(), 0);
+                s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), 0);
+                s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 0);
+
+                return;
             }
+            if ("1".equals(plcRequestType.getValue()) && "0".equals(mesSendType.getValue())) {
+                //鍙戦�佺被鍨�   1鎵爜  2涓嶆壂鐮�
+                int type = machine.getMode() == 1 ? 2 : 1;
+                log.info("3.鍙戦�佺被鍨嬫暟鎹�0->{}", mesSendType.getValue());
+                s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), type);
+                return;
+            }
+            List<Tasking> taskingCount = taskingService.findMachineWorkStateTask(machine, "姝e湪宸ヤ綔");
+            if ("1".equals(plcRequest.getValue()) && "0".equals(mesSend.getValue())
+                    && "寮�宸�".equals(machine.getState())
+                    && taskingCount.size() < machine.getMaxTaskCount()) {
+                Tasking tasking;
+                if (machine.getMode() == 1) {
+                    //鏍囧噯妯″紡
+                    tasking = taskingService.startMachineTask(machine);
+                } else {
+                    //瀹氬埗妯″紡
+                    String PlcRequestID_ = plcRequestID.getValue();
+                    scan_id = PlcRequestID_.substring(PlcRequestID_.lastIndexOf(",") + 1);
+                    //鏍囪褰撳墠宸ュ簭 浠ュ墠鐨勭幓鐠� 鐩存帴鍒板綋鍓嶅伐搴�
+                    tasking = taskingService.startScanIdMachineTask(machine, scan_id);//涓嶇椤哄簭锛岀洿鎺ユ壘浠庣炕鐗囧彴鎵爜鍚庡埌鏃嬭浆鍙扮殑鏁版嵁
+                }
+                if (tasking != null) {
+                    log.info("4銆佸彂閫佹暟鎹�:{},{},{},{},{}"
+                            , tasking.getGlassId(), tasking.getProgramId()
+                            , tasking.getLength().intValue(), tasking.getWidth().intValue(), 1);
+                    s7objectMachine.plccontrol.writeWord(length.getAddress(), tasking.getLength().intValue());
+                    s7objectMachine.plccontrol.writeWord(width.getAddress(), tasking.getWidth().intValue());
+                    s7objectMachine.plccontrol.writeString(mesSendId.getAddress(), tasking.getTaskSequence().toString());
+                    s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), machine.getRotateMode());
+                    s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
+                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    String sendRecord = df.format(new Date()) + "  " +
+                            tasking.getGlassId() + "-" +
+                            tasking.getLength() + "-" +
+                            tasking.getWidth();
+                    if (sendRecords.size() > 7) {
+                        sendRecords.remove(0);
+                    }
+                    nullMachine(machine);
+                    Map sendContentMap = new HashMap();
+                    sendContentMap.put("sendContent", sendRecord);
+                    sendRecords.add(sendContentMap);
+                } else if (!scan_id.isEmpty()) {
+                    taskingService.scanMachineAdd(machine, scan_id);
+                }
+            } else if ("0".equals(plcRequest.getValue())) {
+                nullMachine(machine);
+            }
+        } catch (Exception e) {
+            s7objectMachine.plccontrol.closeS7client();
+            log.info("閫昏緫澶勭悊寮傚父锛氳澶噄d銆恵}銆�", machine.getId());
         }
 
     }
+
     public void nullMachine(Machine machine) {
-        if (!"".equals(machine.getRemark())){
+        if (!"".equals(machine.getRemark())) {
             machine.setRemark("");
             machineMapper.updateById(machine);
         }
@@ -131,12 +146,14 @@
 
     @Override
     public void run() {
-        while (this != null) {
+        while (true) {
             try {
                 Thread.sleep(1000);
                 plcStart();
             } catch (InterruptedException e) {
                 e.printStackTrace();
+            }catch (Exception e) {
+                log.info("{}", e.getMessage());
             }
         }
     }

--
Gitblit v1.8.0