提升机调度逻辑修改

This commit is contained in:
liuhanqing
2025-11-25 11:10:22 +08:00
parent e6915aa48c
commit f167b97879
3 changed files with 58 additions and 76 deletions

View File

@@ -32,6 +32,7 @@ public class AgvPathProcessor {
} }
public void processAgvPathInfo(int[][] ints, int floor) { public void processAgvPathInfo(int[][] ints, int floor) {
} }
public void processOnlineAgvSites(int[][] ints, int floor) { public void processOnlineAgvSites(int[][] ints, int floor) {

View File

@@ -155,7 +155,7 @@ public class DeviceSrgv extends BaseEntity
private String spare1; private String spare1;
/** */ /** */
@Excel(name = "") @Excel(name = "请求进入提升机 0-否 1-是")
private String spare2; private String spare2;
/** */ /** */

View File

@@ -11,14 +11,18 @@ import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.bas.port.domain.WcsPort; import com.ruoyi.bas.port.domain.WcsPort;
import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.common.domain.SendData; import com.ruoyi.common.domain.SendData;
import com.ruoyi.device.srgv.domain.DeviceSrgv;
import com.ruoyi.device.tsj.domain.DeviceTsj; import com.ruoyi.device.tsj.domain.DeviceTsj;
import com.ruoyi.device.tsj.service.IDeviceTsjService; import com.ruoyi.device.tsj.service.IDeviceTsjService;
import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.job.service.IMydoJobService;
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueue; import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueue;
import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueueFinish; import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueueFinish;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService;
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead; import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead;
import com.ruoyi.schedule.plcRead.util.Tools; import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -41,6 +45,8 @@ public class TsjThread implements Runnable {
private IWcsPortService wcsPortService; private IWcsPortService wcsPortService;
private IBasCargoSpaceService basCargoSpaceService; private IBasCargoSpaceService basCargoSpaceService;
private IWcsSrgvQueueService wcsSrgvQueueService;
public void init() { public void init() {
} }
@@ -106,60 +112,37 @@ public class TsjThread implements Runnable {
* 创建卸车队列 * 创建卸车队列
*/ */
private void createQueue(DeviceTsj tsj) { private void createQueue(DeviceTsj tsj) {
//todo 根据当前楼层和执行阶段查询任务 获取目标队列 生成提升机队列 当小车出去后 解锁提升机 for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
List<TsjDeviceExecutionQueue> tsjDeviceExecutionQueues = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueList(new TsjDeviceExecutionQueue()); DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) { if (deviceSrgv.getSsjRequest()==1 && deviceSrgv.getTaskNo()>0){
// 提升机存在任务 //请求进入输送机
return; WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
} sRgvQueueParam.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
sRgvQueueParam.setTaskNo(Convert.toStr(deviceSrgv.getTaskNo()));
DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get("1"); List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(sRgvQueueParam);
//判断提升机锁定 并且 小车已进入提升机 if (CollUtil.isNotEmpty(wcsSrgvQueues)) {
if (deviceTsj.getSpare1() == 1 && tsj.getSbzt() == 3 && tsj.getYxxf() == 1) { TsjDeviceExecutionQueue tsjDeviceExecutionQueueByRwh = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(Convert.toLong(deviceSrgv.getTaskNo()));
WcsPort param = new WcsPort(); if (tsjDeviceExecutionQueueByRwh == null){
param.setStatus("1"); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueues.get(0);
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param); String strFloor = wcsSrgvQueue.getTheFloor();
wcsPorts = wcsPorts.stream().filter(x-> "1".equals(x.getStatus()) &&("1".equals(x.getPortType()) || "2".equals(x.getPortType()))).collect(Collectors.toList()); String tarFloor = wcsSrgvQueue.getDefault07();
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = new TsjDeviceExecutionQueue();
for (WcsPort wcsPort : wcsPorts) { tsjDeviceExecutionQueue.setGuid(IdUtil.simpleUUID());
//生成提升机队列 tsjDeviceExecutionQueue.setDeviceId(tsj.getId());
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = new TsjDeviceExecutionQueue(); tsjDeviceExecutionQueue.setDeviceName(tsj.getName());
tsjDeviceExecutionQueue.setTaskNo(Convert.toLong(deviceSrgv.getTaskNo()));
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(wcsPort.getSpare1()));
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId());
if (ObjUtil.isNull(mydoJob)){
continue;
}
if (ObjUtil.isNull(basCargoSpace)){
continue;
}
if (Convert.toInt(mydoJob.getInOrOut())<20){
//入库
if (mydoJob.getRoadwayId().equals(wcsPort.getPortCode())){
//从1层到对应楼层
tsjDeviceExecutionQueue.setSrcRow("0"); tsjDeviceExecutionQueue.setSrcRow("0");
tsjDeviceExecutionQueue.setSrcLayer("0"); tsjDeviceExecutionQueue.setSrcLayer(strFloor);
tsjDeviceExecutionQueue.setTarRow(Convert.toStr(basCargoSpace.getThePlatoon())); tsjDeviceExecutionQueue.setTarRow("0");
tsjDeviceExecutionQueue.setTarLayer(Convert.toStr(basCargoSpace.getTheFloor())); tsjDeviceExecutionQueue.setTarLayer(tarFloor);
} tsjDeviceExecutionQueue.setSendType("1");
}else { tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date()));
if (mydoJob.getRoadwayId().equals(wcsPort.getPortCode())){ tsjDeviceExecutionQueue.setSpare1(Convert.toStr(deviceSrgv.getDeviceId()));
//从对应楼层到指定楼层 tsjDeviceExecutionQueue.setTaskType("1");
tsjDeviceExecutionQueue.setSrcRow("0"); tsjDeviceExecutionQueue.setRwlx("1");
tsjDeviceExecutionQueue.setSrcLayer("0"); tsjDeviceExecutionQueueService.insertTsjDeviceExecutionQueue(tsjDeviceExecutionQueue);
tsjDeviceExecutionQueue.setTarRow(Convert.toStr(basCargoSpace.getThePlatoon()));
tsjDeviceExecutionQueue.setTarLayer(Convert.toStr(basCargoSpace.getTheFloor()));
} }
} }
tsjDeviceExecutionQueue.setGuid(IdUtil.simpleUUID());
tsjDeviceExecutionQueue.setDeviceId(tsj.getId());
tsjDeviceExecutionQueue.setDeviceName(tsj.getName());
tsjDeviceExecutionQueue.setTaskNo(Convert.toLong(mydoJob.getTaskNo()));
tsjDeviceExecutionQueue.setSendFlag("0");
tsjDeviceExecutionQueue.setSendType("1");
tsjDeviceExecutionQueue.setRwlx("1");
tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date()));
tsjDeviceExecutionQueueService.insertTsjDeviceExecutionQueue(tsjDeviceExecutionQueue);
} }
} }
} }
@@ -169,31 +152,29 @@ public class TsjThread implements Runnable {
if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) { if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) {
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueues.get(0); TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueues.get(0);
if ("1".equals(tsjDeviceExecutionQueue.getRwlx())) { //提升机移动到小车楼层 需要判断目标楼层入库点位小车是否到位
//提升机移动到小车楼层 需要判断目标楼层入库点位小车是否到位 WcsPort param = new WcsPort();
WcsPort param = new WcsPort(); param.setPortType("1");
param.setPortType("1"); param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer());
param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer()); param.setStatus("1");
param.setStatus("1"); param.setSpare2("1");
param.setSpare2("1"); List<WcsPort> wcsInPorts = wcsPortService.selectWcsPortList(param);
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param); if (CollUtil.isEmpty(wcsInPorts)) {
if (CollUtil.isEmpty(wcsPorts)) { log.info("提升机任务[{}]下发 目标楼层[{}]入库点位空闲 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer());
log.info("提升机任务[{}]下发 目标楼层[{}]入库点位空闲 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer()); return;
return;
}
} else if ("2".equals(tsjDeviceExecutionQueue.getRwlx())) {
//提升机承载小车到目标楼层 需要判断目标楼层出库点位是否空闲
WcsPort param = new WcsPort();
param.setPortType("1");
param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer());
param.setStatus("0");
param.setSpare2("1");
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param);
if (CollUtil.isEmpty(wcsPorts)) {
log.info("提升机任务[{}]下发 目标楼层[{}]出库点位占用 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer());
return;
}
} }
//提升机承载小车到目标楼层 需要判断目标楼层出库点位是否空闲
WcsPort param1 = new WcsPort();
param1.setPortType("1");
param1.setPortRegion(tsjDeviceExecutionQueue.getTarLayer());
param1.setStatus("0");
param1.setSpare2("1");
List<WcsPort> wcsOutPorts = wcsPortService.selectWcsPortList(param1);
if (CollUtil.isEmpty(wcsOutPorts)) {
log.info("提升机任务[{}]下发 目标楼层[{}]出库点位占用 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer());
return;
}
writeToTsj(tsjDeviceExecutionQueues.get(0)); writeToTsj(tsjDeviceExecutionQueues.get(0));
log.info("提升机任务下发 taskNo{} 任务类型:{}", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getRwlx()); log.info("提升机任务下发 taskNo{} 任务类型:{}", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getRwlx());
} }