From e31d3ceb4a6196f565794ccfd6b4540e99e4d71b Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 28 三月 2024 15:32:00 +0800
Subject: [PATCH] Merge branch 'Four-Way-Rack' of http://47.97.1.152:5880/r/zy-asrs-master into Four-Way-Rack
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java | 9
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java | 362 +++++++++++++++++++++++++++++++++++++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java | 5
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java | 12 +
5 files changed, 385 insertions(+), 5 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
new file mode 100644
index 0000000..4075c60
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -0,0 +1,362 @@
+package com.zy.asrs.wcs.core.kernel.command;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.wcs.core.action.LiftAction;
+import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.model.command.LiftAssignCommand;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
+import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
+import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
+import com.zy.asrs.wcs.core.model.enums.MotionStsType;
+import com.zy.asrs.wcs.core.service.MotionService;
+import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * Created by vincent on 2023/10/23
+ */
+@Slf4j
+@Service
+public class LiftCommandService {
+
+ @Autowired
+ private MotionService motionService;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private LiftAction liftAction;
+
+ public Boolean accept(Motion motion) {
+ Integer deviceNo = Integer.parseInt(motion.getDevice());
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, deviceNo);
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ //鑷姩銆佸氨缁�佺┖闂�
+ if (!(liftProtocol.getModel()
+ && liftProtocol.getReady()
+ && !liftProtocol.getRun())
+ ) {
+ return false;
+ }
+
+ if (motionService.count(new LambdaQueryWrapper<Motion>()
+ .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
+ .eq(Motion::getDevice, motion.getDevice())
+ .eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
+ return false;
+ }
+
+ ArrayList<LiftCommand> list = new ArrayList<>();
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setLiftNo(liftProtocol.getLiftNo());
+ assignCommand.setTaskNo(motion.getWrkNo());
+ assignCommand.setCommands(list);
+
+ LiftCommand command = new LiftCommand();
+ switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
+ case LIFT_MOVE:
+ // 濡傛灉宸茬粡鍦ㄧ洰鏍囧眰锛岄偅杈瑰眰杩囨护
+ if (liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
+ liftProtocol.setTaskNo(motion.getWrkNo());
+ break;
+ }
+
+ command = liftThread.getEmptyMoveCommand(motion.getWrkNo(), Integer.parseInt(motion.getTarget()));
+ list.add(command);
+ return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+ case LIFT_WITH_GOODS:
+ return false;
+// if (!liftProtocol.getLineFrontHasStock() || !liftProtocol.getLineEndHasStock()) {
+// return false;
+// }
+//
+// command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
+// command.setLiftNo(deviceNo.shortValue());
+// command.setTaskNo(motion.getWrkNo().shortValue());
+// return liftThread.assignWork(command);
+ case LIFT_WITH_SHUTTLE:
+ if (!liftProtocol.getHasCar()) {
+ return false;
+ }
+
+ command = liftThread.getMoveWithShuttleCommand(motion.getWrkNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()));
+ list.add(command);
+ return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+ case LIFT_WITH_GOODS_AND_SHUTTLE:
+ return false;
+// if (!liftProtocol.getPlatShuttleCheck()) {
+// return false;
+// }
+//
+// command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
+// command.setLiftNo(deviceNo.shortValue());
+// command.setTaskNo(motion.getWrkNo().shortValue());
+// return liftThread.assignWork(command);
+ case LIFT_TRANSPORT_TO_CONVEYOR:
+ return false;
+// // 鍒ゆ柇杈撻�佺嚎鐘舵��
+// int staNo = Integer.parseInt(motion.getTarget());
+// WorkZoneType zoneType = WorkZoneType.query(staNo);
+//
+// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
+//
+// StaProtocol staProtocol = devpThread.getStation().get(staNo);
+// if (staProtocol == null) {
+// return false;
+// }
+//
+// if (!staProtocol.isAutoing()
+// || staProtocol.isLoading()
+//// || !staProtocol.isOutEnable()
+// || staProtocol.getWorkNo() != 0) {
+// return false;
+// }
+//
+// // 鍒ゆ柇鎻愬崌鏈虹姸鎬�
+// if (!liftProtocol.getLev().equals(Short.parseShort(motion.getOrigin()))) { // 鏄惁澶勪簬浠诲姟灞�
+// return false;
+// }
+//
+// // 涓嬪彂鍛戒护 ---------------------------------------------------
+//
+// // 1.椹卞姩杈撻�佺嚎鐢垫満
+// StaMotorType staMotorType = null;
+// StaMotorType reqStaMotorType = null;
+// LiftInteractiveModeType liftInteractiveModeType = null;
+// LiftNeighborType neighborType = LiftNeighborType.query(staNo);
+// StaProtocol staProtocol1 = staProtocol.clone();
+// staProtocol1.setWorkNo(motion.getWrkNo().shortValue());
+// staProtocol1.setStaNo(neighborType.finalStaNo.shortValue());
+// switch (neighborType) {
+// case LIFT_2_NEIGHBOR_OUTBOUND_LEV_1:
+// staMotorType = StaMotorType.FORWARD;
+// reqStaMotorType = StaMotorType.REQ_FORWARD;
+// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
+// break;
+// case LIFT_1_NEIGHBOR_INBOUND_LEV_2:
+// case LIFT_1_NEIGHBOR_INBOUND_LEV_3:
+// case LIFT_1_NEIGHBOR_INBOUND_LEV_4:
+// staMotorType = StaMotorType.FORWARD;
+// reqStaMotorType = StaMotorType.REQ_FORWARD;
+// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
+// break;
+// case LIFT_1_NEIGHBOR_OUTBOUND_LEV_1_FINAL_8:
+// staMotorType = StaMotorType.FORWARD;
+// reqStaMotorType = StaMotorType.REQ_FORWARD;
+// liftInteractiveModeType = LiftInteractiveModeType.ENGINE_LOADING_TURN_REVERSE;
+// break;
+// default:
+// break;
+// }
+//
+// MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol1));
+// try {
+// Thread.sleep(1000);
+// } catch (InterruptedException ignore) {}
+//// int times = 0;boolean staProtocolMotorRes = false;
+//// while (times < 5) {
+//// if (staProtocol.getStaMotorType().equals(staMotorType)) {
+//// staProtocolMotorRes = true;
+//// break;
+//// }
+//// if (!devpThread.controlMotor(staNo, reqStaMotorType)) {
+//// continue;
+//// }
+//// try {
+//// Thread.sleep(500);
+//// } catch (InterruptedException ignore) {}
+//// times++;
+//// }
+//// if (!staProtocolMotorRes) {
+//// return false;
+//// }
+//
+// // 2.椹卞姩鎻愬崌鏈虹數鏈�
+// command = liftThread.getLiftTurnCommand(liftInteractiveModeType.id);
+// command.setLiftNo(deviceNo.shortValue());
+// command.setTaskNo(motion.getWrkNo().shortValue());
+// return liftThread.assignWork(command);
+ default:
+ break;
+
+ }
+
+ return Boolean.TRUE;
+ }
+
+ public Boolean finish(Motion motion) {
+ Integer deviceNo = Integer.parseInt(motion.getDevice());
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, deviceNo);
+ if (liftThread == null) {
+ return false;
+ }
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (liftProtocol.getRun() || liftProtocol.getTaskNo() != motion.getWrkNo().shortValue()) {
+ return false;
+ }
+
+ switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
+ case LIFT_MOVE:
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
+ if (!liftProtocol.getModel()
+ || liftProtocol.getRun()
+ || !liftProtocol.getReady()
+ ) {
+ return false;
+ }
+
+ if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
+ return false;
+ }
+ break;
+ case LIFT_WITH_GOODS:
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
+ if (!liftProtocol.getModel()
+ || liftProtocol.getRun()
+ || !liftProtocol.getReady()
+ ) {
+ return false;
+ }
+
+// if (!liftProtocol.getLineFrontHasStock() || !liftProtocol.getLineEndHasStock()) {
+// return false;
+// }
+
+ if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
+ return false;
+ }
+
+ break;
+ case LIFT_WITH_SHUTTLE:
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
+ if (!liftProtocol.getModel()
+ || liftProtocol.getRun()
+ || !liftProtocol.getReady()
+ ) {
+ return false;
+ }
+
+ if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
+ return false;
+ }
+
+ //妫�娴嬫槸鍚︽湁灏忚溅
+ if (!liftProtocol.getHasCar()) {
+ return false;
+ }
+ break;
+ case LIFT_WITH_GOODS_AND_SHUTTLE:
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�侀摼鏉℃病鏈夎浆鍔ㄣ�佹病鏈夋湭灏辩华鎶ラ敊
+ if (!liftProtocol.getModel()
+ || liftProtocol.getRun()
+ || !liftProtocol.getReady()
+ ) {
+ return false;
+ }
+
+ if (!liftProtocol.getHasCar()) {
+ return false;
+ }
+
+ if (!liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
+ return false;
+ }
+
+ break;
+ case LIFT_TRANSPORT_TO_CONVEYOR:
+// // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佺┖闂层�佸噯澶囧氨缁�佸墠鍏夌數鏃犺揣銆侀摼鏉℃病鏈夎浆鍔�
+// if (!liftProtocol.getModel()
+// || liftProtocol.getRun()
+// || !liftProtocol.getReady()
+// || liftProtocol.getLineFxrontHasStock()
+// || liftProtocol.getLineEndHasStock()
+// || liftProtocol.getForwardRotationFeedback()
+// || liftProtocol.getReverseFeedback()
+// ) {
+// return false;
+// }
+//
+// if (liftProtocol.getTaskNo().intValue() != motion.getWrkNo()) {
+// return false;
+// }
+//
+// // 鍒ゆ柇杈撻�佺嚎鐘舵��
+// int staNo = Integer.parseInt(motion.getTarget());
+// WorkZoneType zoneType = WorkZoneType.query(staNo);
+//
+// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
+//
+// StaProtocol staProtocol = devpThread.getStation().get(staNo);
+// if (staProtocol == null) {
+// return false;
+// }
+//
+// if (!staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) {
+// return false;
+// }
+//
+//// // 鍒ゆ柇杈撻�佺嚎鐘舵��
+//// int staNo = Integer.parseInt(motion.getTarget());
+//// WorkZoneType zoneType = WorkZoneType.query(staNo);
+////
+//// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, zoneType.devpPlcId);
+////
+//// StaProtocol staProtocol = devpThread.getStation().get(staNo);
+//// if (staProtocol == null) {
+//// return false;
+//// }
+////
+//// if (!staProtocol.isAutoing() || !staProtocol.isLoading() || staProtocol.getWorkNo() != motion.getWrkNo().intValue()) {
+//// return false;
+//// }
+//
+//// if (!staProtocol.getStaMotorType().equals(StaMotorType.STANDBY)) {
+//// return false;
+//// }
+//
+//// // 灏嗕换鍔″彿鍏堜繚瀛樺埌杈撻�佺嚎绔欑偣涓婏紝鐩爣绔欎负0
+//// StaProtocol clone = staProtocol.clone();
+//// clone.setWorkNo(motion.getWrkNo().shortValue());
+//// clone.setStaNo((short) 0);
+//// if (!MessageQueue.offer(SlaveType.Devp, zoneType.devpPlcId, new Task(2, clone))) {
+//// return false;
+//// }
+////
+//// // 鍋滄鎻愬崌鏈虹數鏈鸿浆鍔紝骞跺浣�
+//// command = liftThread.getLiftTurnCommand(LiftInteractiveModeType.ENGINE_STOP.id);
+//// command.setLiftNo(deviceNo.shortValue());
+//// command.setTaskNo(motion.getWrkNo().shortValue());
+//// return liftThread.assignWork(command);
+
+ break;
+ default:
+ return false;
+ }
+
+ liftProtocol.setTaskNo(0);//娓呴浂宸ヤ綔鍙�
+ return true;
+ }
+
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
index a638e93..5a364fb 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
@@ -4,6 +4,7 @@
import com.zy.asrs.wcs.core.entity.Task;
import com.zy.asrs.wcs.core.kernel.command.AgvCommandService;
import com.zy.asrs.wcs.core.kernel.command.CraneCommandService;
+import com.zy.asrs.wcs.core.kernel.command.LiftCommandService;
import com.zy.asrs.wcs.core.kernel.command.ShuttleCommandService;
import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
@@ -38,8 +39,8 @@
// private ConveyorCommandService conveyorCommandService;
@Autowired
private CraneCommandService craneCommandService;
-// @Autowired
-// private LiftCommandService liftCommandService;
+ @Autowired
+ private LiftCommandService liftCommandService;
@Autowired
private ShuttleCommandService shuttleCommandService;
@@ -191,7 +192,7 @@
executeRes = shuttleCommandService.accept(motion);
break;
case LIFT:
-// executeRes = liftCommandService.accept(motion);
+ executeRes = liftCommandService.accept(motion);
break;
case AGV:
executeRes = agvCommandService.accept(motion);
@@ -223,7 +224,7 @@
case CRANE:
break;
case LIFT:
-// executeRes = liftCommandService.finish(motion);
+ executeRes = liftCommandService.finish(motion);
break;
case SHUTTLE:
executeRes = shuttleCommandService.finish(motion);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
index 920f2ff..7896673 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
@@ -150,7 +150,7 @@
this.protocolStatusType = status;
}
- public void setTaskNo(Integer taskNo) {
+ public synchronized void setTaskNo(Integer taskNo) {
RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
if (null != redisUtil) {
redisUtil.set(DeviceRedisConstant.LIFT_FLAG + this.liftNo, taskNo);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
index 4822620..174c789 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
@@ -20,4 +20,16 @@
boolean reset(LiftCommand command);//澶嶄綅
+
+ //***************鑾峰彇鍛戒护*****************
+ LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev);//绌鸿浇绉诲姩
+
+ LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer originLev, Integer targetLev);//杞借溅绉诲姩
+
+ LiftCommand getPalletInOutCommand(Integer taskNo, Integer originLev, Integer targetLev, Integer originSta, Integer targetSta);//鎵樼洏鍑哄叆
+
+ LiftCommand getLockCommand(Integer taskNo, Boolean lock);//閿佸畾/瑙i攣鎻愬崌鏈�
+
+ LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal);//灏忚溅宸插埌浣�/宸查┒绂讳俊鍙�
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index b44bc38..ba5bd4e 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -343,6 +343,7 @@
}
//绌鸿浇绉诲姩
+ @Override
public LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
@@ -363,6 +364,7 @@
}
//杞借溅绉诲姩
+ @Override
public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer originLev, Integer targetLev) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
@@ -383,6 +385,7 @@
}
//鎵樼洏鍑哄叆
+ @Override
public LiftCommand getPalletInOutCommand(Integer taskNo, Integer originLev, Integer targetLev, Integer originSta, Integer targetSta) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
@@ -407,6 +410,7 @@
}
//閿佸畾/瑙i攣鎻愬崌鏈�
+ @Override
public LiftCommand getLockCommand(Integer taskNo, Boolean lock) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterOperation");
@@ -424,6 +428,7 @@
}
//灏忚溅宸插埌浣�/宸查┒绂讳俊鍙�
+ @Override
public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterOperation");
--
Gitblit v1.9.1