From 314729da5f6f84a6112344a2210aadfeeb2bac0c Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 21 四月 2025 10:35:43 +0800
Subject: [PATCH] #出库找待机位优化
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java | 4 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java | 49 ++++++++++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java | 10 ++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 13 +++---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java | 1
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java | 19 +++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java | 21 ++++++++++
7 files changed, 108 insertions(+), 9 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index 0ed9518..b24f12a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -477,10 +477,9 @@
//绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙�
String standbyLocNoFrom = shuttleStandbyFrom.getDeviceStandbyLoc();
- //绌挎杞﹀嚭鎻愬崌鏈哄悗灏忚溅寰呮満浣�
- List<String> standbyLocs = shuttleStandbyFrom.getStandbyLoc$();//鑾峰彇鍏ㄩ儴寰呮満浣�
- //鑾峰彇鍙敤寰呮満浣�
- String shuttleFromLiftStandbyLoc = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(shuttleDevice.getDeviceNo()), shuttleDevice.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), standbyLocs);
+ //绌挎杞﹀嚭鎻愬崌鏈哄悗鍏ㄩ儴寰呮満浣�
+ String standbyLocs = shuttleStandbyFrom.getStandbyLoc();//鑾峰彇鍏ㄩ儴寰呮満浣�
+
//鑾峰彇鍑哄簱浠诲姟绫诲瀷
TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
@@ -635,7 +634,7 @@
})),
MotionDto.build((dto -> {
dto.setShuttleNo(shuttleDevice.getId().intValue());
- dto.setLocNo(shuttleFromLiftStandbyLoc);
+ dto.setLocNo(standbyLocs);
})),
MotionCtgType.SHUTTLE_MOVE
));
@@ -904,9 +903,9 @@
})),
MotionDto.build((dto -> {
dto.setShuttleNo(shuttleDevice.getId().intValue());
- dto.setLocNo(shuttleFromLiftStandbyLoc);
+ dto.setLocNo(standbyLocs);
})),
- MotionCtgType.SHUTTLE_MOVE
+ MotionCtgType.SHUTTLE_MOVE_STANDBY
));
// 杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index d827bd6..d4f494a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -323,6 +323,10 @@
case SHUTTLE_TRANSPORT_TO_CONVEYOR:
motion.setDockNo(String.valueOf(target.getStaNo()));
break;
+ case SHUTTLE_MOVE_STANDBY://绌挎杞︾Щ鍔ㄥ埌寰呮満浣�
+ motion.setTarget(null);//绛夊緟鑷姩鎼滅储
+ motion.setTemp(target.getLocNo());//鍏ㄩ儴寰呮満浣�
+ break;
default:
break;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 8fafb60..cd23078 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -1,5 +1,6 @@
package com.zy.asrs.wcs.core.kernel.command;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.exception.CoolException;
@@ -18,6 +19,7 @@
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
@@ -58,6 +60,8 @@
private LiftAction liftAction;
@Autowired
private LiftDispatcher liftDispatcher;
+ @Autowired
+ private ShuttleDispatcher shuttleDispatcher;
// 璁$畻
public Boolean accept(Motion motion) {
@@ -70,7 +74,7 @@
if (null == shuttleProtocol) {
return false;
}
-
+ Device shuttleDevice = shuttleThread.getDevice();
if (!shuttleThread.isIdle(new ExecuteSupport() {
@Override
public Boolean judgement() {
@@ -223,6 +227,21 @@
shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_UPDATE_LOCATION;
shuttleCommands.add(shuttleThread.getUpdateLocationCommand(motion.getTaskNo(), motion.getTarget()));
break;
+ case SHUTTLE_MOVE_STANDBY://绌挎杞︾Щ鍔ㄥ埌寰呮満浣�
+ shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
+
+ //鑾峰彇鍏ㄩ儴寰呮満浣�
+ List<String> standbyLocs = JSON.parseArray(motion.getTemp(), String.class);
+ //鑾峰彇鍙敤寰呮満浣�
+ String shuttleFromLiftStandbyLoc = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(shuttleDevice.getDeviceNo()), shuttleDevice.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), standbyLocs);
+ shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), shuttleFromLiftStandbyLoc, NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+
+ //鏇存柊鍔ㄤ綔鍙敤寰呮満浣�
+ motion.setTarget(shuttleFromLiftStandbyLoc);
+ motion.setUpdateTime(new Date());
+ motionService.updateById(motion);
+
+ break;
default:
throw new CoolException(motion.getMotionCtgEl() + "娌℃湁鎸囧畾浠诲姟浣滀笟娴佺▼锛侊紒锛�");
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java
new file mode 100644
index 0000000..45615c9
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java
@@ -0,0 +1,49 @@
+package com.zy.asrs.wcs.core.model.enums;
+
+public enum MapNodeType {
+
+ DISABLE(-1, "绂佺敤"),
+ NORMAL_PATH(0, "璐т綅"),
+ START_POINT(1, "璧风偣"),
+ TARGET_POINT(2, "缁堢偣"),
+ MAIN_PATH(3, "姣嶈建"),
+ CONVEYOR(4, "杈撻�佺珯鐐�"),
+ CHARGE(5, "鍏呯數妗�"),
+ CONVEYOR_CAR_GO(6, "灏忚溅鍙蛋杈撻�佺珯鐐�"),
+ CAR(66, "灏忚溅"),
+ LIFT(67, "鎻愬崌鏈�"),
+ LOCK(-999, "閿佸畾鑺傜偣"),
+ ;
+
+ public Integer id;
+ public String desc;
+
+ MapNodeType(Integer id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static MapNodeType get(Short id) {
+ if (null == id) {
+ return null;
+ }
+ for (MapNodeType type : MapNodeType.values()) {
+ if (type.id.equals(id.intValue())) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static MapNodeType get(MapNodeType type) {
+ if (null == type) {
+ return null;
+ }
+ for (MapNodeType type1 : MapNodeType.values()) {
+ if (type1 == type) {
+ return type1;
+ }
+ }
+ return null;
+ }
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
index 9129fa2..97dbb55 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -40,6 +40,7 @@
SHUTTLE_MOVE_TO_LIFT(SHUTTLE),
SHUTTLE_MOVE_FROM_CONVEYOR(SHUTTLE),
SHUTTLE_MOVE_TO_CONVEYOR(SHUTTLE),
+ SHUTTLE_MOVE_STANDBY(SHUTTLE),
SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR(SHUTTLE),
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
index 4cbfc4a..67536be 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -4,8 +4,10 @@
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.enums.MapNodeType;
import com.zy.asrs.wcs.system.entity.Dict;
import com.zy.asrs.wcs.system.service.DictService;
+
import java.util.ArrayList;
import java.util.List;
@@ -204,7 +206,13 @@
return false;
}
// 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
- if (map[x][y] < 0) return false;
+ if (map[x][y] < 0) {
+ return false;
+ }
+
+ if (map[x][y] == MapNodeType.CAR.id) {//鑺傜偣鏄皬杞�
+ return false;
+ }
NavigateNode navigateNode = new NavigateNode(x, y);
if (is_exist(navigateNode)) {
return false;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index c307a4d..fd56853 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -488,6 +488,25 @@
return levCount < Integer.parseInt(dict.getValue());
}
+ //鍒嗘瀽鍑哄簱璺緞寰呮満搴撲綅
+ public String analyzeOutPathWaitLoc(String startLoc, String targetLoc, Device shuttleDevice) {
+ //璁$畻璺緞骞跺垎瑙f垚涓ゆ鍔ㄤ綔
+ List<NavigateNode> nodeList = NavigateUtils.calc(startLoc, targetLoc, NavigationMapType.DFX.id, Utils.getShuttlePoints(Integer.parseInt(shuttleDevice.getDeviceNo()), Utils.getLev(startLoc)));
+ if (nodeList == null) {
+ News.error("{} dash {} can't find navigate path!", startLoc, targetLoc);
+ return null;
+ }
+ //鑾峰彇鍒嗘璺緞
+ ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+ if (data.size() <= 1) {
+ return null;//涓ょ偣涔嬮棿鍙湁涓�娈佃矾寰�
+ }
+ //鍙栧嚭鍊掓暟绗簩娈佃矾寰�
+ ArrayList<NavigateNode> navigateNodes = data.get(data.size() - 2);
+ NavigateNode startNode = navigateNodes.get(0);
+ String lastPathStartLoc = Utils.getLocNo(startNode.getX(), startNode.getY(), startNode.getZ());
+ return lastPathStartLoc;
+ }
}
--
Gitblit v1.9.1