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 c1c8587..27dfca3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java @@ -1,12 +1,21 @@ package com.ruoyi.schedule; import com.ruoyi.device.ddj.domain.MsgDdj; +import com.ruoyi.device.ddj.service.IMsgDdjService; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.common.domain.PlcConnectInfo; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import com.ruoyi.common.domain.CustomThread; +import com.ruoyi.schedule.scheduleTask.ddj.Ddj1Thread; +import com.ruoyi.schedule.scheduleTask.monit.MonitoringThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1BothWayInSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1BothWayOutSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1SingleSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2InSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2OutSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.floor2.LineSsjThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -20,10 +29,21 @@ import java.util.concurrent.ConcurrentHashMap; @Slf4j public class ScheduleThread { - public CustomThread customSsjThread; - public CustomThread customDdjThread; + public CustomThread plcSsjReadCustomThread; + public CustomThread plcDdjReadCustomThread; + + public CustomThread floor1BothWayInSsjCustomThread; + public CustomThread floor1BothWayOutSsjCustomThread; + public CustomThread floor1SingleSsjCustomThread; + public CustomThread floor2InSsjCustomThread; + public CustomThread floor2OutSsjCustomThread; + public CustomThread lineSsjCustomThread; + public CustomThread monitoringCustomThread; + public CustomThread ddj1CustomThread; @Autowired private IDeviceSsjService deviceSsjService; + @Autowired + private IMsgDdjService msgDdjService; private boolean isRun = false; private boolean isRun2 = false; @@ -45,47 +65,57 @@ public class ScheduleThread { * 调度初始化 */ private void scheduleInit() { - /* BsInSsjThread bsInSsjThread1 = new BsInSsjThread(); - bsInSsjThread = new CustomThread(new Thread(bsInSsjThread1), bsInSsjThread1); - JsInSsjThread jsInSsjThread1 = new JsInSsjThread(); - jsInSsjThread = new CustomThread(new Thread(jsInSsjThread1), jsInSsjThread1); - BsOutSsjThread bsOutSsjThread1 = new BsOutSsjThread(); - bsOutSsjThread = new CustomThread(new Thread(bsOutSsjThread1), bsOutSsjThread1); - JsOutSsjThread jsOutSsjThread1 = new JsOutSsjThread(); - jsOutSsjThread = new CustomThread(new Thread(jsOutSsjThread1), jsOutSsjThread1); - BsPickSsjTread bsPickSsjTread1 = new BsPickSsjTread(); - bsPickSsjThread = new CustomThread(new Thread(bsPickSsjTread1), bsPickSsjTread1); - JsPickSsjTread jsPickSsjTread1 = new JsPickSsjTread(); - jsPickSsjThread = new CustomThread(new Thread(jsPickSsjTread1), jsPickSsjTread1); + MonitoringThread monitoringThread = new MonitoringThread(); + monitoringCustomThread = new CustomThread(new Thread(monitoringThread), monitoringThread); - SsjMonitorThread ssjMonitorThread1 = new SsjMonitorThread(); - ssjMonitorThread = new CustomThread(new Thread(ssjMonitorThread1), ssjMonitorThread1);*/ + Floor1BothWayInSsjThread floor1BothWayInSsjThread = new Floor1BothWayInSsjThread(); + floor1BothWayInSsjCustomThread = new CustomThread(new Thread(floor1BothWayInSsjThread), floor1BothWayInSsjThread); + + Floor1BothWayOutSsjThread floor1BothWayOutSsjThread = new Floor1BothWayOutSsjThread(); + floor1BothWayOutSsjCustomThread = new CustomThread(new Thread(floor1BothWayOutSsjThread), floor1BothWayOutSsjThread); + + Floor1SingleSsjThread floor1SingleSsjThread = new Floor1SingleSsjThread(); + floor1SingleSsjCustomThread = new CustomThread(new Thread(floor1SingleSsjThread), floor1SingleSsjThread); + + Floor2InSsjThread floor2InSsjThread = new Floor2InSsjThread(); + floor2InSsjCustomThread = new CustomThread(new Thread(floor2InSsjThread), floor2InSsjThread); + + LineSsjThread lineSsjThread = new LineSsjThread(); + lineSsjCustomThread = new CustomThread(new Thread(lineSsjThread), lineSsjThread); + + Floor2OutSsjThread floor2OutSsjThread = new Floor2OutSsjThread(); + floor2OutSsjCustomThread = new CustomThread(new Thread(floor2OutSsjThread), floor2OutSsjThread); + + Ddj1Thread ddj1Thread = new Ddj1Thread(); + ddj1CustomThread = new CustomThread(new Thread(ddj1Thread), ddj1Thread); } /** * plc读取初始化 */ private void plcReadInit() { - String ip = "127.0.0.1"; - int port = 102; - PlcConnectInfo ssjPlcConnectInfo = new PlcConnectInfo(ip, port); - ConcurrentHashMap list = new ConcurrentHashMap<>(); + ConcurrentHashMap ssjList = new ConcurrentHashMap<>(); //获取要去取的输送机 List deviceSsjs = deviceSsjService.selectDeviceSsjList(new DeviceSsj()); for (DeviceSsj deviceSsj : deviceSsjs) { - list.put(deviceSsj.getDeviceCode(), deviceSsj); + ssjList.put(deviceSsj.getDeviceCode(), deviceSsj); } //plc输送机读取线程 - PlcSsjRead plcSsjRead = new PlcSsjRead(list, ssjPlcConnectInfo); + PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("127.0.0.1", 102)); Thread plcSsjReadThread = new Thread(plcSsjRead); - customSsjThread = new CustomThread(plcSsjReadThread, plcSsjRead); + plcSsjReadCustomThread = new CustomThread(plcSsjReadThread, plcSsjRead); + //plc堆垛机读取现场 - ConcurrentHashMap list2 = new ConcurrentHashMap<>(); - PlcDdjRead plcDdjRead = new PlcDdjRead(list2, ssjPlcConnectInfo); + ConcurrentHashMap ddjList = new ConcurrentHashMap<>(); + List msgDdjs = msgDdjService.selectMsgDdjList(new MsgDdj()); + for (MsgDdj msgDdj : msgDdjs) { + ddjList.put("ddj"+msgDdj.getId(), msgDdj); + } + PlcDdjRead plcDdjRead = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.1", 102)); Thread plcDdjReadThread = new Thread(plcDdjRead); - customDdjThread = new CustomThread(plcDdjReadThread, plcDdjRead); + plcDdjReadCustomThread = new CustomThread(plcDdjReadThread, plcDdjRead); } @@ -93,8 +123,8 @@ public class ScheduleThread { * 开始线程 */ public void startAllThread() { - customSsjThread.getThread().start(); - customDdjThread.getThread().start(); + plcSsjReadCustomThread.getThread().start(); + plcDdjReadCustomThread.getThread().start(); isRun = true; } @@ -102,22 +132,14 @@ public class ScheduleThread { * 开启线程2 */ public void startAllThread2() { - /* //臂式入库线程调度 - bsInSsjThread.getThread().start(); - //臂式出库线程调度 - bsOutSsjThread.getThread().start(); - //臂式出库到位线程调度-wms电子屏交互 - bsPickSsjThread.getThread().start(); - //剪式入库线程调度 - jsInSsjThread.getThread().start(); - //剪式出库线程调度 - //jsOutSsjThread.getThread().start(); - - //剪上出库到位线程调度-wms电子屏交互 - //jsPickSsjThread.getThread().start(); - //监控输送机 - //ssjMonitorThread.getThread().start();*/ - + monitoringCustomThread.thread.start(); + floor1BothWayInSsjCustomThread.thread.start(); + floor1BothWayOutSsjCustomThread.thread.start(); + floor1SingleSsjCustomThread.thread.start(); + floor2InSsjCustomThread.thread.start(); + lineSsjCustomThread.thread.start(); + floor2OutSsjCustomThread.thread.start(); + ddj1CustomThread.thread.start(); isRun2 = true; } @@ -125,8 +147,8 @@ public class ScheduleThread { * 停止线程 */ public void stopAllThread() { - customDdjThread.runnable.isRun = false; - customSsjThread.runnable.isRun = false; + plcSsjReadCustomThread.runnable.isRun = false; + plcDdjReadCustomThread.runnable.isRun = false; plcReadInit(); isRun = false; } @@ -135,12 +157,14 @@ public class ScheduleThread { * 停止线程2 */ public void stopAllThread2() { - /*bsInSsjThread.runnable.isRun = false; - jsInSsjThread.runnable.isRun = false; - bsOutSsjThread.runnable.isRun = false; - jsOutSsjThread.runnable.isRun = false; - bsPickSsjThread.runnable.isRun = false; - jsPickSsjThread.runnable.isRun = false;*/ + monitoringCustomThread.runnable.isRun = false; + floor1BothWayInSsjCustomThread.runnable.isRun = false; + floor1BothWayOutSsjCustomThread.runnable.isRun = false; + floor1SingleSsjCustomThread.runnable.isRun = false; + floor2InSsjCustomThread.runnable.isRun = false; + lineSsjCustomThread.runnable.isRun = false; + floor2OutSsjCustomThread.runnable.isRun = false; + ddj1CustomThread.runnable.isRun = false; scheduleInit(); isRun2 = false; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdjRead.java index 7d4648f..ad91de3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdjRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdjRead.java @@ -23,12 +23,12 @@ public class PlcDdjRead extends Thread { public SiemensS7Net siemensS7Net = null; public static IReadWriteNet readWriteNet = null; - private String ip; - private int port; + private final String ip; + private final int port; private boolean success = false; public PlcDdjRead(ConcurrentHashMap deviceDdjMap, PlcConnectInfo plcConnectInfo) { - this.deviceDdjMap = deviceDdjMap; + PlcDdjRead.deviceDdjMap = deviceDdjMap; this.ip = plcConnectInfo.getIp(); this.port = plcConnectInfo.getPort(); } @@ -57,11 +57,10 @@ public class PlcDdjRead extends Thread { reConnect(); } } catch (InterruptedException e) { - // ²¶»ñÖжÏÒ쳣£¬Í˳öѭ»· - Thread.currentThread().interrupt(); // ÖØÐÂÉèÖÃÖжϱê־ + Thread.currentThread().interrupt(); return; } catch (Exception e) { - log.info("********IP:" + this.ip + " port:" + this.port + "¶ÁȡÊý¾ÝÒ쳣 " + e.getMessage()); + log.info("********IP:" + this.ip + " port:" + this.port + "��ȡ�����쳣 " + e.getMessage()); } } @@ -103,7 +102,7 @@ public class PlcDdjRead extends Thread { readWriteNet = siemensS7Net; } } catch (Exception ex) { - log.info("********IP:" + this.ip + " port:" + this.port + "Á¬½Óʧ°Ü " + ex.getMessage()); + log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); } } @@ -124,7 +123,7 @@ public class PlcDdjRead extends Thread { void reConnect() { closeServer(); ConnectServer(); - log.info("ÖØÐÂÁ¬½Ó SSJ-PLC"); + log.info("重新连接 SSJ-PLC"); } void closeServer() { @@ -134,13 +133,11 @@ public class PlcDdjRead extends Thread { setIsConnect(false); } - /// ¶Ѷâ»úÈÎÎñÏ·¢ - public static int WritetoDDJ(String address, byte[] tsak) { - /*int a = 0; + public static int WriteToDDJ(String address, byte[] data) { + int a = 0; if (readWriteNet != null) { - a = HslRead.WriteResultRender(readWriteNet.Write(address, tsak), address); + a = HslRead.WriteResultRender(readWriteNet.Write(address, data), address); } - return a;*/ - return 0; + return a; } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java index 8164f7a..9d97785 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java @@ -23,12 +23,12 @@ public class PlcSsjRead implements Runnable { public SiemensS7Net siemensS7Net = null; public static IReadWriteNet readWriteNet = null; - private String ip; - private int port; + private final String ip; + private final int port; private boolean success = false; public PlcSsjRead(ConcurrentHashMap deviceSsjMap, PlcConnectInfo plcConnectInfo) { - this.deviceSsjMap = deviceSsjMap; + PlcSsjRead.deviceSsjMap = deviceSsjMap; this.ip = plcConnectInfo.getIp(); this.port = plcConnectInfo.getPort(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/Ddj1Thread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/Ddj1Thread.java index 13da16f..60b10b5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/Ddj1Thread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/Ddj1Thread.java @@ -247,9 +247,9 @@ public class Ddj1Thread implements Runnable { int jym = Tools.getJYM(taskNo, yph, ylh, ych, mbph, mblh, mbch, mlfs, xfwc); byte[] sendData = Tools.sendDataToDevice(taskNo, null, yph, ylh, ych, mbph, mblh, mbch, mlfs, xfwc, jym); if (devId==1){ - return PlcDdjRead.WritetoDDJ("DB61.0", sendData); + return PlcDdjRead.WriteToDDJ("DB61.0", sendData); }else { - return PlcDdjRead.WritetoDDJ("DB61.0", sendData); + return PlcDdjRead.WriteToDDJ("DB61.0", sendData); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java new file mode 100644 index 0000000..46db329 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java @@ -0,0 +1,48 @@ +package com.ruoyi.schedule.scheduleTask.monit; + +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ddj.service.IMsgDdjService; +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.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +/** + * 监控线程 + */ +@Slf4j +public class MonitoringThread implements Runnable { + + public boolean isRun = true; + + private IDeviceSsjService deviceSsjService; + private IMsgDdjService msgDdjService; + + + public void init() { + deviceSsjService = SpringUtils.getBean(IDeviceSsjService.class); + msgDdjService = SpringUtils.getBean(IMsgDdjService.class); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String ssjCode : PlcSsjRead.deviceSsjMap.keySet()) { + DeviceSsj deviceSsj = PlcSsjRead.deviceSsjMap.get(ssjCode); + deviceSsjService.updateDeviceSsj(deviceSsj); + } + for (String ddjCode : PlcDdjRead.deviceDdjMap.keySet()) { + msgDdjService.updateMsgDdj(PlcDdjRead.deviceDdjMap.get(ddjCode)); + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java deleted file mode 100644 index 3edf28d..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.common; - -import com.ruoyi.api.service.IApiService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -/** - * 监控线程 - */ -@Slf4j -public class MonitoringThread implements Runnable { - public HashMap> ssjCodeList; - - private IApiService apiService; - private IAgvQueueService agvQueueService; - - public boolean isRun = true; - - - public void init() { - ssjCodeList = new HashMap<>(); - ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("L1002"); - ssjCodes.add("L1004"); - ssjCodeList.put("in", ssjCodes); - apiService = SpringUtils.getBean(IApiService.class); - agvQueueService = SpringUtils.getBean(IAgvQueueService.class); - log.info("初始化服务 {},{}", apiService, agvQueueService); - } - - @Override - public void run() { - init(); - while (isRun){ - for (String type : ssjCodeList.keySet()) { - - switch ( type){ - case "in": - //生产线入库 - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(),e); - } - - } - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - - public void inDispatch(DeviceSsj inSsjDevice) { - //如果入库请求1 并且 托盘码不为空 - if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { - //查询货位 排列层 - - //查询入口 排列层 - - //生成堆垛机队列 - - } - } -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java deleted file mode 100644 index d8a4ffb..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.common; - -import com.ruoyi.api.service.IApiService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -/** - * 巷道口线程 到位+任务号+入库作业+货位未分配 请求wms生成货位 到位+任务号+入库作业+货位已分配 生成堆垛机入库队列 - */ -@Slf4j -public class RoadwaySsjThread implements Runnable{ - - public HashMap> ssjCodeList; - - private IApiService apiService; - private IAgvQueueService agvQueueService; - - public boolean isRun = true; - - - public void init() { - ssjCodeList = new HashMap<>(); - ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("L1002"); - ssjCodes.add("L1004"); - ssjCodeList.put("in", ssjCodes); - apiService = SpringUtils.getBean(IApiService.class); - agvQueueService = SpringUtils.getBean(IAgvQueueService.class); - log.info("初始化服务 {},{}", apiService, agvQueueService); - } - - @Override - public void run() { - init(); - while (isRun){ - for (String type : ssjCodeList.keySet()) { - - switch ( type){ - case "in": - //生产线入库 - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(),e); - } - - } - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - - public void inDispatch(DeviceSsj inSsjDevice) { - //如果入库请求1 并且 托盘码不为空 - if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { - //查询货位 排列层 - - //查询入口 排列层 - - //生成堆垛机队列 - - } - } -}