优化调整

This commit is contained in:
lsymicc
2026-04-22 17:13:01 +08:00
parent 9d8496eeb6
commit 955b94c145
22 changed files with 322 additions and 99 deletions

View File

@@ -72,9 +72,9 @@ public class PlcDdj1Read extends Thread {
msgDdj.setYxxf(ParseUtil.optInt(24, ddsx));
msgDdj.setXtxh(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentRow(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentColumn(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentFloor(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentRow(ParseUtil.optInt(18, ddsx));
msgDdj.setCurrentColumn(ParseUtil.optInt(18, ddsx));
msgDdj.setCurrentFloor(ParseUtil.optInt(18, ddsx));
}
}
@@ -119,7 +119,8 @@ public class PlcDdj1Read extends Thread {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}

View File

@@ -119,7 +119,8 @@ public class PlcDdj2Read extends Thread {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}

View File

@@ -108,9 +108,10 @@ public class PlcSsjRead implements Runnable {
ssjDevice.setTaskNo(ParseUtil.optDInt(4, ddsx1));
ssjDevice.setSszt(ParseUtil.optInt(8, ddsx1));
ssjDevice.setRkqq(ParseUtil.optInt(10, ddsx1));
ssjDevice.setTraySize(ParseUtil.optInt(12, ddsx1));
ssjDevice.setHeight(ParseUtil.optInt(12, ddsx1));
ssjDevice.setTrayCode(ParseUtil.optString(14, ddsx1));
ssjDevice.setMode(ParseUtil.optInt(24, ddsx1));//todo 输送机操作模式
ssjDevice.setException(ParseUtil.optInt(28, ddsx1));
ssjDevice.setMode(ParseUtil.optInt(30, ddsx1));//todo 输送机操作模式
}
}
@@ -246,7 +247,8 @@ public class PlcSsjRead implements Runnable {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}
@@ -254,9 +256,13 @@ public class PlcSsjRead implements Runnable {
public static int writeToSsj(String address, String taskNo, int qx , int completed) {
int jym = Tools.getJYM(Integer.parseInt(taskNo), qx);
//任务号
SendData taskNoSendData = new SendData(Tools.DINT, taskNo);
//去向
SendData qxSendData = new SendData(Tools.INT, qx);
//下发完成
SendData completedSendData = new SendData(Tools.INT, completed);
//校验码
SendData jymSendData = new SendData(Tools.INT, jym);
byte[] bytes = Tools.sendData(taskNoSendData, qxSendData, completedSendData, jymSendData);
return PlcSsjRead.WriteToSSJ(address, bytes);

View File

@@ -0,0 +1,87 @@
package com.ruoyi.schedule.scheduleTask;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IJobCallBackService;
import com.ruoyi.job.service.IMydoJobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
import static com.ruoyi.common.TaskStatusCode.*;
@Component
public class TaskHandler {
@Autowired
private IMydoJobService mydoJobService;
@Autowired
private IJobCallBackService jobCallBackService;
@Autowired
private IBasCargoSpaceService basCargoSpaceService;
/**
* 处理未正常移除的【堆垛机执行完成】或【出库到位】的遗留任务
*/
@Scheduled(fixedDelay = 3000)
public void mydoJobHandler() {
//此处 - 堆垛机执行完成【TASK_EP_DDJ_FINISH】和出库到位【TASK_EP_SSJ_STOCKOUT_FINISH】的常量值相同,均可表示任务【已完成】
//用任意一种状态查询所有标记为【已完成】的任务
List<MydoJob> jobs = mydoJobService.selectMydoJobList(
new MydoJob().builder().executionPhase(TASK_EP_DDJ_FINISH).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
mydoJobService.taskFinish(Long.valueOf(job.getTaskNo()));
}
}
}
/**
* 定时扫描未回传或回传异常的任务记录
*/
@Scheduled(fixedDelay=3000)
public void jobCallBack() {
jobCallBackService.jobCallBack();
}
// @Scheduled(fixedDelay = 3000)
public void stockinExceptionHandler() {
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PUT).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
}
}
}
// @Scheduled(fixedDelay = 3000)
public void stockoutExceptionHandler() {
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PICK).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
mydoJobService.InvalidMydoJob(Long.valueOf(job.getTaskNo()), Integer.valueOf(job.getRoadwayId()));
//清空/重置【取货无货】的出库异常货位库存信息
basCargoSpaceService.resetCargoSpaceByStockoutException(job.getCargoSpaceId());
}
}
}
}

View File

@@ -31,7 +31,7 @@ import java.util.HashMap;
import java.util.List;
import static com.ruoyi.common.TaskExceptionType.TASK_EXCEPTION_STOCKIN_OCCUPIED;
import static com.ruoyi.common.TaskStatusCode.TASK_EP_DDJ_FINISH;
import static com.ruoyi.common.TaskStatusCode.*;
@Slf4j
@@ -155,6 +155,8 @@ public class DdjThread implements Runnable {
//更新异常类型【FaultFlag】-1
if ("0".equals(mydoJob.getFaultFlag()) && "1".equals(ddjDeviceExecutionQueue.getSpare1())) {
mydoJob.setStatus("1");
//把执行阶段标记为【入库放货有货】的异常
mydoJob.setExecutionPhase(TASK_EXCEPTION_PUT);
mydoJobService.updateMydoJob(mydoJob);
//上报异常 - 向wms请求重分接口
@@ -181,6 +183,7 @@ public class DdjThread implements Runnable {
//更新任务参数
mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
mydoJob.setCargoSpaceId(mydoJobReAssign.getSiteCode());
mydoJob.setExecutionPhase(TASK_EP_DDJ);
mydoJob.setFaultFlag("2");
mydoJobService.updateMydoJob(mydoJob);
@@ -208,6 +211,9 @@ public class DdjThread implements Runnable {
if (ddj.getCzfs() == 5 && ddj.getSbzt() == 1053 && ddj.getJdbz() < 5) {
Long rwh = ddj.getRwh();
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
//把执行阶段标记为【出库取货无货】的异常
mydoJob.setExecutionPhase(TASK_EXCEPTION_PICK);
mydoJobService.updateMydoJob(mydoJob);
//无货异常处理
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh,ddj.getId());

View File

@@ -158,9 +158,9 @@ public class PortConvThread implements Runnable {
paramMap.put("taskTypeCode", WMS_TASK_TYPE_STOCKIN);//todo wms自定义的任务类型编号
paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
paramMap.put("cntCode", inSsjDevice.getTrayCode());//容器编号
String height = inSsjDevice.getHeight();
int height = inSsjDevice.getHeight();
// String weight = inSsjDevice.getWeight();//todo 需要直读重量或从plc读值?
paramMap.put("weight", getWeight(MOXA_IP, MOXA_PORT, SO_TIMEOUT_MS));//重量
paramMap.put("weight", getWeightByMoxa(MOXA_IP, MOXA_PORT, SO_TIMEOUT_MS));//重量
paramMap.put("altimetry", height);//高度
String errorMessage = "";
@@ -325,7 +325,7 @@ public class PortConvThread implements Runnable {
* @param timeout 最大等待时间(单位:毫秒),建议 2000~5000
* @return 重量(kg),成功时为非 NaN 的 Double;失败(超时/断连/解析失败)返回 null
*/
public static Double getWeight(String moxaIp, int moxaPort, long timeout) {
public static Double getWeightByMoxa(String moxaIp, int moxaPort, long timeout) {
Socket socket = null;
try {
// 1️⃣ - 建立连接(带连接超时)