输送线

This commit is contained in:
张怡蓉
2025-11-21 10:47:10 +08:00
parent 9a24fb4be8
commit c3156725d5
2 changed files with 81 additions and 96 deletions

View File

@@ -4,9 +4,12 @@ import com.ruoyi.common.domain.CustomThread;
import com.ruoyi.common.domain.PlcConnectInfo; import com.ruoyi.common.domain.PlcConnectInfo;
import com.ruoyi.device.ddj.domain.MsgDdj; import com.ruoyi.device.ddj.domain.MsgDdj;
import com.ruoyi.device.ddj.service.IMsgDdjService; 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.domain.DeviceSsj;
import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.device.ssj.service.IDeviceSsjService;
import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; 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.plcRead.ssj.PlcSsjRead;
import com.ruoyi.schedule.scheduleTask.ddj.impl.Ddj1Thread; import com.ruoyi.schedule.scheduleTask.ddj.impl.Ddj1Thread;
import com.ruoyi.schedule.scheduleTask.monit.MonitoringThread; import com.ruoyi.schedule.scheduleTask.monit.MonitoringThread;
@@ -25,12 +28,9 @@ import java.util.concurrent.ConcurrentHashMap;
public class ScheduleThread { public class ScheduleThread {
public CustomThread<PlcSsjRead> plcSsjReadCustomThread; public CustomThread<PlcSsjRead> plcSsjReadCustomThread;
public CustomThread<PlcDdjRead> plcDdj1ReadCustomThread; public CustomThread<PlcSrgvRead> plcSrgvReadCustomThread1;
public CustomThread<PlcDdjRead> plcDdj2ReadCustomThread; public CustomThread<PlcSrgvRead> plcSrgvReadCustomThread2;
public CustomThread<PlcDdjRead> plcDdj3ReadCustomThread; public CustomThread<PlcSrgvRead> plcSrgvReadCustomThread3;
public CustomThread<PlcDdjRead> plcDdj4ReadCustomThread;
public CustomThread<PlcDdjRead> plcDdj5ReadCustomThread;
public CustomThread<PlcDdjRead> plcDdj6ReadCustomThread;
public CustomThread<MonitoringThread> monitoringCustomThread; public CustomThread<MonitoringThread> monitoringCustomThread;
public CustomThread<SsjThread> ssjThreadCustomThread; public CustomThread<SsjThread> ssjThreadCustomThread;
@@ -44,6 +44,8 @@ public class ScheduleThread {
private IDeviceSsjService deviceSsjService; private IDeviceSsjService deviceSsjService;
@Autowired @Autowired
private IMsgDdjService msgDdjService; private IMsgDdjService msgDdjService;
@Autowired
private IDeviceSrgvService deviceSrgvService;
private boolean isRun = false; private boolean isRun = false;
private boolean isRun2 = false; private boolean isRun2 = false;
@@ -94,56 +96,37 @@ public class ScheduleThread {
ssjList.put(deviceSsj.getDeviceCode(), deviceSsj); ssjList.put(deviceSsj.getDeviceCode(), deviceSsj);
} }
//plc输送机读取线程 //plc输送机读取线程
PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("127.0.0.1", 102)); PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("127.0.0.1", 102));
Thread plcSsjReadThread = new Thread(plcSsjRead); Thread plcSsjReadThread = new Thread(plcSsjRead);
plcSsjReadCustomThread = new CustomThread<PlcSsjRead>(plcSsjReadThread, plcSsjRead); plcSsjReadCustomThread = new CustomThread<PlcSsjRead>(plcSsjReadThread, plcSsjRead);
//plc堆垛机读取现场 ConcurrentHashMap<String, DeviceSrgv> srgvList = new ConcurrentHashMap<>();
ConcurrentHashMap<String, MsgDdj> ddjList = new ConcurrentHashMap<>(); List<DeviceSrgv> srgvs=deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv());
List<MsgDdj> msgDdjs = msgDdjService.selectMsgDdjList(new MsgDdj()); for(DeviceSrgv srgv:srgvs){
for (MsgDdj msgDdj : msgDdjs) { srgvList.put(srgv.getDeviceId().toString(),srgv);
switch (msgDdj.getId()){ switch (srgv.getDeviceId()){
case 1: case 1:
msgDdj.setPlcDbReadAddress("DB41.0"); PlcSrgvRead plcSrgvRead1=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort()));
PlcDdjRead plcDdjRead1 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.1", 102)); Thread plcSrgvReadThread1 = new Thread((plcSrgvRead1));
Thread plcDdjReadThread1 = new Thread(plcDdjRead1); plcSrgvReadCustomThread1=new CustomThread<PlcSrgvRead>(plcSrgvReadThread1,plcSrgvRead1);
plcDdj1ReadCustomThread = new CustomThread<PlcDdjRead>(plcDdjReadThread1, plcDdjRead1);
break; break;
case 2: case 2:
msgDdj.setPlcDbReadAddress("DB42.0"); PlcSrgvRead plcSrgvRead2=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort()));
PlcDdjRead plcDdjRead2 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.2", 102)); Thread plcSrgvReadThread2 = new Thread((plcSrgvRead2));
Thread plcDdjReadThread2 = new Thread(plcDdjRead2); plcSrgvReadCustomThread2=new CustomThread<PlcSrgvRead>(plcSrgvReadThread2,plcSrgvRead2);
plcDdj2ReadCustomThread = new CustomThread<PlcDdjRead>(plcDdjReadThread2, plcDdjRead2);
break; break;
case 3: case 3:
msgDdj.setPlcDbReadAddress("DB42.0"); PlcSrgvRead plcSrgvRead3=new PlcSrgvRead(srgv,new PlcConnectInfo(srgv.getIp(),srgv.getPort()));
PlcDdjRead plcDdjRead3 = new PlcDdjRead(ddjList, new PlcConnectInfo("127.0.0.3", 102)); Thread plcSrgvReadThread3 = new Thread((plcSrgvRead3));
Thread plcDdjReadThread3 = new Thread(plcDdjRead3); plcSrgvReadCustomThread3=new CustomThread<PlcSrgvRead>(plcSrgvReadThread3,plcSrgvRead3);
plcDdj3ReadCustomThread = new CustomThread<PlcDdjRead>(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<PlcDdjRead>(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<PlcDdjRead>(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<PlcDdjRead>(plcDdjReadThread6, plcDdjRead6);
break; break;
} }
ddjList.put("ddj" + msgDdj.getId(), msgDdj);
} }
PlcSrgvRead.deviceSrgvMap=srgvList;
} }
/** /**
@@ -151,12 +134,10 @@ public class ScheduleThread {
*/ */
public void startAllThread() { public void startAllThread() {
plcSsjReadCustomThread.getThread().start(); plcSsjReadCustomThread.getThread().start();
plcDdj1ReadCustomThread.getThread().start(); plcSrgvReadCustomThread1.getThread().start();
plcDdj2ReadCustomThread.getThread().start(); plcSrgvReadCustomThread2.getThread().start();
plcDdj3ReadCustomThread.getThread().start(); plcSrgvReadCustomThread3.getThread().start();
plcDdj4ReadCustomThread.getThread().start();
plcDdj5ReadCustomThread.getThread().start();
plcDdj6ReadCustomThread.getThread().start();
isRun = true; isRun = true;
} }
@@ -180,7 +161,7 @@ public class ScheduleThread {
*/ */
public void stopAllThread() { public void stopAllThread() {
plcSsjReadCustomThread.runnable.isRun = false; plcSsjReadCustomThread.runnable.isRun = false;
plcDdj1ReadCustomThread.runnable.isRun = false; // plcDdj1ReadCustomThread.runnable.isRun = false;
/* plcDdj2ReadCustomThread.runnable.isRun = false; /* plcDdj2ReadCustomThread.runnable.isRun = false;
plcDdj3ReadCustomThread.runnable.isRun = false; plcDdj3ReadCustomThread.runnable.isRun = false;
plcDdj4ReadCustomThread.runnable.isRun = false; plcDdj4ReadCustomThread.runnable.isRun = false;

View File

@@ -13,8 +13,9 @@ import com.ruoyi.device.srgv.domain.DeviceSrgv;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@Slf4j @Slf4j
public class PlcSrgvRead implements Runnable{ public class PlcSrgvRead implements Runnable {
public static ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap; public static ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap;
private ModbusTcpNet modbusTcpNet; private ModbusTcpNet modbusTcpNet;
@@ -24,15 +25,17 @@ public class PlcSrgvRead implements Runnable{
private final int port; private final int port;
private byte station; private byte station;
private Integer layer; private Integer layer;
private DeviceSrgv deviceSrgv;
private boolean success = false; private boolean success = false;
private IByteTransform byteTransform = null; private IByteTransform byteTransform = null;
public PlcSrgvRead(ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap, PlcConnectInfo plcConnectInfo){ public PlcSrgvRead(DeviceSrgv deviceSrgv, PlcConnectInfo plcConnectInfo) {
PlcSrgvRead.deviceSrgvMap = deviceSrgvMap; this.deviceSrgv = deviceSrgv;
this.ip = plcConnectInfo.getIp(); this.ip = plcConnectInfo.getIp();
this.port = plcConnectInfo.getPort(); this.port = plcConnectInfo.getPort();
this.station=(byte)1; this.station = (byte) 1;
} }
public static int WriteToSSJ(String address, byte[] data) { public static int WriteToSSJ(String address, byte[] data) {
int a = 0; int a = 0;
if (readWriteNet != null) { if (readWriteNet != null) {
@@ -42,24 +45,22 @@ public class PlcSrgvRead implements Runnable{
} }
@Override @Override
public void run() { public void run() {
while (isRun) { while (isRun) {
try { try {
if (IsConnect()) { if (IsConnect()) {
for(String srgvId:deviceSrgvMap.keySet()){
DeviceSrgv deviceSrgv = deviceSrgvMap.get(srgvId); if (deviceSrgv != null) {
if(deviceSrgv!=null){
readSrgvPlc(deviceSrgv); readSrgvPlc(deviceSrgv);
} }
}
Thread.sleep(1000); Thread.sleep(1000);
} else { } else {
reConnect(); reConnect();
} }
}catch (InterruptedException e) { } catch (InterruptedException e) {
// 捕获中断异常,退出循环 // 捕获中断异常,退出循环
Thread.currentThread().interrupt(); // 重新设置中断标志 Thread.currentThread().interrupt(); // 重新设置中断标志
return; return;
@@ -69,40 +70,41 @@ public class PlcSrgvRead implements Runnable{
} }
} }
private void readSrgvPlc(DeviceSrgv deviceSrgv){
OperateResultExOne<byte[]> read1 = modbusTcpNet.Read("2400",(short)15);//2400-2414 private void readSrgvPlc(DeviceSrgv deviceSrgv) {
OperateResultExOne<byte[]> read1 = modbusTcpNet.Read("2400", (short) 15);//2400-2414
if (read1.IsSuccess) { if (read1.IsSuccess) {
setValueByByte1(read1.Content,deviceSrgv); setValueByByte1(read1.Content, deviceSrgv);
} }
//读取双字 //读取双字
OperateResultExOne<byte[]> read2 = modbusTcpNet.Read("4800",(short)8);// 4800-4807任务号、原点、目标点、当前 OperateResultExOne<byte[]> read2 = modbusTcpNet.Read("4800", (short) 8);// 4800-4807任务号、原点、目标点、当前
if(read2.IsSuccess){ if (read2.IsSuccess) {
setValueByByte2(read2.Content,deviceSrgv); setValueByByte2(read2.Content, deviceSrgv);
} }
//读取双字,路径 //读取双字,路径
OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("5000",(short)800);// 5000-5799 路径 400个 OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("5000", (short) 800);// 5000-5799 路径 400个
setValueByByte3(read3.Content,deviceSrgv); setValueByByte3(read3.Content, deviceSrgv);
} }
//单字 //单字
private void setValueByByte1(byte[] content , DeviceSrgv agvData) { private void setValueByByte1(byte[] content, DeviceSrgv agvData) {
agvData.setTaskType(Convert.toInt(byteTransform.TransInt16(content,0))); agvData.setTaskType(Convert.toInt(byteTransform.TransInt16(content, 0)));
agvData.setBattery(Convert.toInt(byteTransform.TransInt16(content,2))); agvData.setBattery(Convert.toInt(byteTransform.TransInt16(content, 2)));
agvData.setWorkMode(Convert.toInt(byteTransform.TransInt16(content,4))); agvData.setWorkMode(Convert.toInt(byteTransform.TransInt16(content, 4)));
agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content,6))); agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content, 6)));
agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content,8))); agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8)));
agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content,10))); agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10)));
agvData.setChargeFlag(Convert.toInt(byteTransform.TransInt16(content,12))); agvData.setChargeFlag(Convert.toInt(byteTransform.TransInt16(content, 12)));
agvData.setWorkPhase(Convert.toInt(byteTransform.TransInt16(content,14))); agvData.setWorkPhase(Convert.toInt(byteTransform.TransInt16(content, 14)));
agvData.setErrMsg(Convert.toInt(byteTransform.TransInt16(content,16))); agvData.setErrMsg(Convert.toInt(byteTransform.TransInt16(content, 16)));
agvData.setSsjRequest(Convert.toInt(byteTransform.TransInt16(content,18))); agvData.setSsjRequest(Convert.toInt(byteTransform.TransInt16(content, 18)));
agvData.setChangeLayer(Convert.toInt(byteTransform.TransInt16(content,20))); agvData.setChangeLayer(Convert.toInt(byteTransform.TransInt16(content, 20)));
agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content,22))); agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content, 22)));
agvData.setManualCharge(Convert.toInt(byteTransform.TransInt16(content,24))); agvData.setManualCharge(Convert.toInt(byteTransform.TransInt16(content, 24)));
agvData.setSpare1(Convert.toStr(byteTransform.TransInt16(content,0))); agvData.setSpare1(Convert.toStr(byteTransform.TransInt16(content, 0)));
agvData.setAllowSend(Convert.toInt(byteTransform.TransInt16(content,16))); agvData.setAllowSend(Convert.toInt(byteTransform.TransInt16(content, 16)));
} }
@@ -110,10 +112,10 @@ public class PlcSrgvRead implements Runnable{
private void setValueByByte2(byte[] content, DeviceSrgv agvData) { private void setValueByByte2(byte[] content, DeviceSrgv agvData) {
byteTransform.setDataFormat(DataFormat.CDAB); byteTransform.setDataFormat(DataFormat.CDAB);
// TODO 注意双字反转 // TODO 注意双字反转
agvData.setTaskNo(byteTransform.TransInt32(content,0)); agvData.setTaskNo(byteTransform.TransInt32(content, 0));
agvData.setSrcSite(String.format("%06d", byteTransform.TransInt32(content,4))); agvData.setSrcSite(String.format("%06d", byteTransform.TransInt32(content, 4)));
agvData.setTarSite(String.format("%06d", byteTransform.TransInt32(content,8))); agvData.setTarSite(String.format("%06d", byteTransform.TransInt32(content, 8)));
agvData.setCurrSite(String.format("%06d", byteTransform.TransInt32(content,12))); agvData.setCurrSite(String.format("%06d", byteTransform.TransInt32(content, 12)));
//设置库区 //设置库区
String currSite = agvData.getCurrSite(); String currSite = agvData.getCurrSite();
@@ -147,22 +149,23 @@ public class PlcSrgvRead implements Runnable{
agvData.setPath(sb.toString()); agvData.setPath(sb.toString());
} }
public void ConnectServer(){ public void ConnectServer() {
ModbusTcpNet modbusTcpNet = new ModbusTcpNet();//创建一个Modbus对象 ModbusTcpNet modbusTcpNet = new ModbusTcpNet();//创建一个Modbus对象
try{ try {
modbusTcpNet.setIpAddress(this.ip); modbusTcpNet.setIpAddress(this.ip);
modbusTcpNet.setPort(this.port); modbusTcpNet.setPort(this.port);
modbusTcpNet.setStation(station); modbusTcpNet.setStation(station);
this.byteTransform=modbusTcpNet.getByteTransform(); this.byteTransform = modbusTcpNet.getByteTransform();
OperateResult connect = modbusTcpNet.ConnectServer(); OperateResult connect = modbusTcpNet.ConnectServer();
if (connect.IsSuccess) { if (connect.IsSuccess) {
setIsConnect(true); setIsConnect(true);
readWriteNet = modbusTcpNet; readWriteNet = modbusTcpNet;
} }
}catch (Exception ex) { } catch (Exception ex) {
log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage());
} }
} }
public void setIsConnect(boolean bflag) { public void setIsConnect(boolean bflag) {
if (!success) { if (!success) {
success = bflag; success = bflag;
@@ -175,6 +178,7 @@ public class PlcSrgvRead implements Runnable{
} }
return false; return false;
} }
void reConnect() { void reConnect() {
closeServer(); closeServer();
ConnectServer(); ConnectServer();