From c3156725d5e416298931ccf7075c96025b038f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=80=A1=E8=93=89?= <377046077@qq.com> Date: Fri, 21 Nov 2025 10:47:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BE=93=E9=80=81=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/schedule/ScheduleThread.java | 81 ++++++---------- .../schedule/plcRead/srgv/PlcSrgvRead.java | 96 ++++++++++--------- 2 files changed, 81 insertions(+), 96 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java index 0e75794..66875f6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java @@ -4,9 +4,12 @@ import com.ruoyi.common.domain.CustomThread; import com.ruoyi.common.domain.PlcConnectInfo; import com.ruoyi.device.ddj.domain.MsgDdj; import com.ruoyi.device.ddj.service.IMsgDdjService; +import com.ruoyi.device.srgv.domain.DeviceSrgv; +import com.ruoyi.device.srgv.service.IDeviceSrgvService; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; +import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import com.ruoyi.schedule.scheduleTask.ddj.impl.Ddj1Thread; import com.ruoyi.schedule.scheduleTask.monit.MonitoringThread; @@ -25,12 +28,9 @@ import java.util.concurrent.ConcurrentHashMap; public class ScheduleThread { public CustomThread plcSsjReadCustomThread; - public CustomThread plcDdj1ReadCustomThread; - public CustomThread plcDdj2ReadCustomThread; - public CustomThread plcDdj3ReadCustomThread; - public CustomThread plcDdj4ReadCustomThread; - public CustomThread plcDdj5ReadCustomThread; - public CustomThread plcDdj6ReadCustomThread; + public CustomThread plcSrgvReadCustomThread1; + public CustomThread plcSrgvReadCustomThread2; + public CustomThread plcSrgvReadCustomThread3; public CustomThread monitoringCustomThread; public CustomThread ssjThreadCustomThread; @@ -44,6 +44,8 @@ public class ScheduleThread { private IDeviceSsjService deviceSsjService; @Autowired private IMsgDdjService msgDdjService; + @Autowired + private IDeviceSrgvService deviceSrgvService; private boolean isRun = false; private boolean isRun2 = false; @@ -94,56 +96,37 @@ public class ScheduleThread { ssjList.put(deviceSsj.getDeviceCode(), deviceSsj); } - //plc输送机读取线程 PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("127.0.0.1", 102)); Thread plcSsjReadThread = new Thread(plcSsjRead); plcSsjReadCustomThread = new CustomThread(plcSsjReadThread, plcSsjRead); - //plc堆垛机读取现场 - ConcurrentHashMap ddjList = new ConcurrentHashMap<>(); - List msgDdjs = msgDdjService.selectMsgDdjList(new MsgDdj()); - for (MsgDdj msgDdj : msgDdjs) { - switch (msgDdj.getId()){ + ConcurrentHashMap srgvList = new ConcurrentHashMap<>(); + List srgvs=deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv()); + for(DeviceSrgv srgv:srgvs){ + srgvList.put(srgv.getDeviceId().toString(),srgv); + switch (srgv.getDeviceId()){ case 1: - msgDdj.setPlcDbReadAddress("DB41.0"); - PlcDdjRead plcDdjRead1 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.1", 102)); - Thread plcDdjReadThread1 = new Thread(plcDdjRead1); - plcDdj1ReadCustomThread = new CustomThread(plcDdjReadThread1, plcDdjRead1); + PlcSrgvRead plcSrgvRead1=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort())); + Thread plcSrgvReadThread1 = new Thread((plcSrgvRead1)); + plcSrgvReadCustomThread1=new CustomThread(plcSrgvReadThread1,plcSrgvRead1); break; case 2: - msgDdj.setPlcDbReadAddress("DB42.0"); - PlcDdjRead plcDdjRead2 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.2", 102)); - Thread plcDdjReadThread2 = new Thread(plcDdjRead2); - plcDdj2ReadCustomThread = new CustomThread(plcDdjReadThread2, plcDdjRead2); + PlcSrgvRead plcSrgvRead2=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort())); + Thread plcSrgvReadThread2 = new Thread((plcSrgvRead2)); + plcSrgvReadCustomThread2=new CustomThread(plcSrgvReadThread2,plcSrgvRead2); break; case 3: - msgDdj.setPlcDbReadAddress("DB42.0"); - PlcDdjRead plcDdjRead3 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.3", 102)); - Thread plcDdjReadThread3 = new Thread(plcDdjRead3); - plcDdj3ReadCustomThread = new CustomThread(plcDdjReadThread3, plcDdjRead3); - break; - case 4: - msgDdj.setPlcDbReadAddress("DB42.0"); - PlcDdjRead plcDdjRead4 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.4", 102)); - Thread plcDdjReadThread4 = new Thread(plcDdjRead4); - plcDdj4ReadCustomThread = new CustomThread(plcDdjReadThread4, plcDdjRead4); - break; - case 5: - msgDdj.setPlcDbReadAddress("DB42.0"); - PlcDdjRead plcDdjRead5 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.5", 102)); - Thread plcDdjReadThread5 = new Thread(plcDdjRead5); - plcDdj5ReadCustomThread = new CustomThread(plcDdjReadThread5, plcDdjRead5); - break; - case 6: - msgDdj.setPlcDbReadAddress("DB42.0"); - PlcDdjRead plcDdjRead6 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.6", 102)); - Thread plcDdjReadThread6 = new Thread(plcDdjRead6); - plcDdj6ReadCustomThread = new CustomThread(plcDdjReadThread6, plcDdjRead6); + PlcSrgvRead plcSrgvRead3=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort())); + Thread plcSrgvReadThread3 = new Thread((plcSrgvRead3)); + plcSrgvReadCustomThread3=new CustomThread(plcSrgvReadThread3,plcSrgvRead3); break; } - ddjList.put("ddj" + msgDdj.getId(), msgDdj); + } + PlcSrgvRead.deviceSrgvMap=srgvList; + + } /** @@ -151,12 +134,10 @@ public class ScheduleThread { */ public void startAllThread() { plcSsjReadCustomThread.getThread().start(); - plcDdj1ReadCustomThread.getThread().start(); - plcDdj2ReadCustomThread.getThread().start(); - plcDdj3ReadCustomThread.getThread().start(); - plcDdj4ReadCustomThread.getThread().start(); - plcDdj5ReadCustomThread.getThread().start(); - plcDdj6ReadCustomThread.getThread().start(); + plcSrgvReadCustomThread1.getThread().start(); + plcSrgvReadCustomThread2.getThread().start(); + plcSrgvReadCustomThread3.getThread().start(); + isRun = true; } @@ -180,7 +161,7 @@ public class ScheduleThread { */ public void stopAllThread() { plcSsjReadCustomThread.runnable.isRun = false; - plcDdj1ReadCustomThread.runnable.isRun = false; +// plcDdj1ReadCustomThread.runnable.isRun = false; /* plcDdj2ReadCustomThread.runnable.isRun = false; plcDdj3ReadCustomThread.runnable.isRun = false; plcDdj4ReadCustomThread.runnable.isRun = false; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java index ccca8f9..e68aa56 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java @@ -13,8 +13,9 @@ import com.ruoyi.device.srgv.domain.DeviceSrgv; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ConcurrentHashMap; + @Slf4j -public class PlcSrgvRead implements Runnable{ +public class PlcSrgvRead implements Runnable { public static ConcurrentHashMap deviceSrgvMap; private ModbusTcpNet modbusTcpNet; @@ -24,15 +25,17 @@ public class PlcSrgvRead implements Runnable{ private final int port; private byte station; private Integer layer; + private DeviceSrgv deviceSrgv; private boolean success = false; private IByteTransform byteTransform = null; - public PlcSrgvRead(ConcurrentHashMap deviceSrgvMap, PlcConnectInfo plcConnectInfo){ - PlcSrgvRead.deviceSrgvMap = deviceSrgvMap; - this.ip = plcConnectInfo.getIp(); - this.port = plcConnectInfo.getPort(); - this.station=(byte)1; - } + public PlcSrgvRead(DeviceSrgv deviceSrgv, PlcConnectInfo plcConnectInfo) { + this.deviceSrgv = deviceSrgv; + this.ip = plcConnectInfo.getIp(); + this.port = plcConnectInfo.getPort(); + this.station = (byte) 1; + } + public static int WriteToSSJ(String address, byte[] data) { int a = 0; if (readWriteNet != null) { @@ -42,24 +45,22 @@ public class PlcSrgvRead implements Runnable{ } - @Override public void run() { while (isRun) { try { if (IsConnect()) { - for(String srgvId:deviceSrgvMap.keySet()){ - DeviceSrgv deviceSrgv = deviceSrgvMap.get(srgvId); - if(deviceSrgv!=null){ + + if (deviceSrgv != null) { readSrgvPlc(deviceSrgv); + } - } Thread.sleep(1000); } else { reConnect(); } - }catch (InterruptedException e) { + } catch (InterruptedException e) { // 捕获中断异常,退出循环 Thread.currentThread().interrupt(); // 重新设置中断标志 return; @@ -69,40 +70,41 @@ public class PlcSrgvRead implements Runnable{ } } - private void readSrgvPlc(DeviceSrgv deviceSrgv){ - OperateResultExOne read1 = modbusTcpNet.Read("2400",(short)15);//2400-2414 + + private void readSrgvPlc(DeviceSrgv deviceSrgv) { + OperateResultExOne read1 = modbusTcpNet.Read("2400", (short) 15);//2400-2414 if (read1.IsSuccess) { - setValueByByte1(read1.Content,deviceSrgv); + setValueByByte1(read1.Content, deviceSrgv); } //读取双字 - OperateResultExOne read2 = modbusTcpNet.Read("4800",(short)8);// 4800-4807任务号、原点、目标点、当前 - if(read2.IsSuccess){ - setValueByByte2(read2.Content,deviceSrgv); + OperateResultExOne read2 = modbusTcpNet.Read("4800", (short) 8);// 4800-4807任务号、原点、目标点、当前 + if (read2.IsSuccess) { + setValueByByte2(read2.Content, deviceSrgv); } //读取双字,路径 - OperateResultExOne read3 = modbusTcpNet.Read("5000",(short)800);// 5000-5799 路径 400个 - setValueByByte3(read3.Content,deviceSrgv); - } + OperateResultExOne read3 = modbusTcpNet.Read("5000", (short) 800);// 5000-5799 路径 400个 + setValueByByte3(read3.Content, deviceSrgv); + } //单字 - private void setValueByByte1(byte[] content , DeviceSrgv agvData) { - agvData.setTaskType(Convert.toInt(byteTransform.TransInt16(content,0))); - agvData.setBattery(Convert.toInt(byteTransform.TransInt16(content,2))); - agvData.setWorkMode(Convert.toInt(byteTransform.TransInt16(content,4))); - agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content,6))); - agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content,8))); - agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content,10))); - agvData.setChargeFlag(Convert.toInt(byteTransform.TransInt16(content,12))); - agvData.setWorkPhase(Convert.toInt(byteTransform.TransInt16(content,14))); - agvData.setErrMsg(Convert.toInt(byteTransform.TransInt16(content,16))); - agvData.setSsjRequest(Convert.toInt(byteTransform.TransInt16(content,18))); - agvData.setChangeLayer(Convert.toInt(byteTransform.TransInt16(content,20))); - agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content,22))); - agvData.setManualCharge(Convert.toInt(byteTransform.TransInt16(content,24))); - agvData.setSpare1(Convert.toStr(byteTransform.TransInt16(content,0))); - agvData.setAllowSend(Convert.toInt(byteTransform.TransInt16(content,16))); + private void setValueByByte1(byte[] content, DeviceSrgv agvData) { + agvData.setTaskType(Convert.toInt(byteTransform.TransInt16(content, 0))); + agvData.setBattery(Convert.toInt(byteTransform.TransInt16(content, 2))); + agvData.setWorkMode(Convert.toInt(byteTransform.TransInt16(content, 4))); + agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content, 6))); + agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8))); + agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10))); + agvData.setChargeFlag(Convert.toInt(byteTransform.TransInt16(content, 12))); + agvData.setWorkPhase(Convert.toInt(byteTransform.TransInt16(content, 14))); + agvData.setErrMsg(Convert.toInt(byteTransform.TransInt16(content, 16))); + agvData.setSsjRequest(Convert.toInt(byteTransform.TransInt16(content, 18))); + agvData.setChangeLayer(Convert.toInt(byteTransform.TransInt16(content, 20))); + agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content, 22))); + agvData.setManualCharge(Convert.toInt(byteTransform.TransInt16(content, 24))); + agvData.setSpare1(Convert.toStr(byteTransform.TransInt16(content, 0))); + agvData.setAllowSend(Convert.toInt(byteTransform.TransInt16(content, 16))); } @@ -110,10 +112,10 @@ public class PlcSrgvRead implements Runnable{ private void setValueByByte2(byte[] content, DeviceSrgv agvData) { byteTransform.setDataFormat(DataFormat.CDAB); // TODO 注意双字反转 - agvData.setTaskNo(byteTransform.TransInt32(content,0)); - agvData.setSrcSite(String.format("%06d", byteTransform.TransInt32(content,4))); - agvData.setTarSite(String.format("%06d", byteTransform.TransInt32(content,8))); - agvData.setCurrSite(String.format("%06d", byteTransform.TransInt32(content,12))); + agvData.setTaskNo(byteTransform.TransInt32(content, 0)); + agvData.setSrcSite(String.format("%06d", byteTransform.TransInt32(content, 4))); + agvData.setTarSite(String.format("%06d", byteTransform.TransInt32(content, 8))); + agvData.setCurrSite(String.format("%06d", byteTransform.TransInt32(content, 12))); //设置库区 String currSite = agvData.getCurrSite(); @@ -147,22 +149,23 @@ public class PlcSrgvRead implements Runnable{ agvData.setPath(sb.toString()); } - public void ConnectServer(){ + public void ConnectServer() { ModbusTcpNet modbusTcpNet = new ModbusTcpNet();//创建一个Modbus对象 - try{ + try { modbusTcpNet.setIpAddress(this.ip); modbusTcpNet.setPort(this.port); modbusTcpNet.setStation(station); - this.byteTransform=modbusTcpNet.getByteTransform(); + this.byteTransform = modbusTcpNet.getByteTransform(); OperateResult connect = modbusTcpNet.ConnectServer(); if (connect.IsSuccess) { setIsConnect(true); readWriteNet = modbusTcpNet; } - }catch (Exception ex) { + } catch (Exception ex) { log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); } } + public void setIsConnect(boolean bflag) { if (!success) { success = bflag; @@ -175,6 +178,7 @@ public class PlcSrgvRead implements Runnable{ } return false; } + void reConnect() { closeServer(); ConnectServer();