From 7042950a224eea80226c316a80774983e2074ddc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 26 九月 2024 15:34:19 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java | 36 ++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java | 6 +-
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java | 8 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 9 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java | 1
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java | 4 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java | 59 +++++++++++++++++++
7 files changed, 119 insertions(+), 4 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 bfa0d2c..7fea4fa 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
@@ -1153,6 +1153,15 @@
MotionCtgType.SHUTTLE_MOVE
));
+ // 閿佸畾鐩爣妤煎眰绌挎杞﹀緟鏈轰綅璺緞
+ motionList.addAll(kernelService.mapLockPath(
+ null,
+ MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(standbyLocNoFrom);
+ }))
+ ));
+
// 鎻愬崌鏈虹┖杞界Щ鍔ㄥ埌绌挎杞﹀眰
motionList.addAll(kernelService.liftMove(
null
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 f5e1c54..3b3b015 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
@@ -440,4 +440,40 @@
return motionList;
}
+ // Map -----------------------------------------------------------------------------
+
+ /**
+ * 鍦板浘璺緞閿佸畾
+ */
+ public List<Motion> mapLockPath(MotionDto origin, MotionDto target) {
+ List<Motion> motionList = new ArrayList<>();
+
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.MAP.val());
+ motion.setDevice(String.valueOf(target.getShuttleNo()));
+ motion.setMotionCtg(MotionCtgType.MAP_LOCK_PATH.val());
+
+ motion.setTarget(target.getLocNo());
+ }));
+
+ return motionList;
+ }
+
+ /**
+ * 鍦板浘璺緞瑙i攣
+ */
+ public List<Motion> mapUnlockPath(MotionDto origin, MotionDto target) {
+ List<Motion> motionList = new ArrayList<>();
+
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.MAP.val());
+ motion.setDevice(String.valueOf(target.getShuttleNo()));
+ motion.setMotionCtg(MotionCtgType.MAP_UNLOCK_PATH.val());
+
+ motion.setTarget(target.getLocNo());
+ }));
+
+ return motionList;
+ }
+
}
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 71b7906..54f1ab3 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
@@ -162,7 +162,7 @@
// return false;
// }
- shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+ shuttleCommands = this.shuttleInOutLiftCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
break;
case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満
@@ -450,5 +450,62 @@
return commands;
}
+ public synchronized List<ShuttleCommand> shuttleInOutLiftCommand(String startLocNo, String endLocNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
+ NavigateNode startNode = NavigatePositionConvert.locNoToNode(startLocNo);
+ NavigateNode endNode = NavigatePositionConvert.locNoToNode(endLocNo);
+ List<NavigateNode> unlockPath = new ArrayList<>();
+ unlockPath.add(startNode);
+ unlockPath.add(endNode);
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+
+ //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
+ boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(endLocNo), shuttleProtocol.getShuttleNo(), unlockPath, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
+ if (!lockResult) {
+ News.error("{} dash {} can't find unlock path!", startLocNo, endLocNo);
+ return null;//瑙i攣澶辫触
+ }
+
+
+ //鑾峰彇灏忚溅绉诲姩閫熷害
+ Integer runSpeed = Optional.ofNullable(basShuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, assignCommand.getDeviceId())).getRunSpeed()).orElse(1000);
+ Long hostId = shuttleThread.getDevice().getHostId();
+ List<NavigateNode> nodeList = NavigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
+ if (nodeList == null) {
+ News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
+ return null;
+ }
+
+ List<NavigateNode> allNode = new ArrayList<>();
+ for (NavigateNode node : nodeList) {
+ allNode.add(node.clone());
+ }
+
+ List<ShuttleCommand> commands = new ArrayList<>();
+ //鑾峰彇鍒嗘璺緞
+ ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+ //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
+ for (ArrayList<NavigateNode> nodes : data) {
+ //寮�濮嬭矾寰�
+ NavigateNode startPath = nodes.get(0);
+
+ //鐩爣璺緞
+ NavigateNode endPath = nodes.get(nodes.size() - 1);
+ Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+ //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+ String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ(), hostId);
+ //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
+ String distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ(), hostId);
+ //鑾峰彇绉诲姩鍛戒护
+ ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
+ command.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
+ commands.add(command);
+ }
+
+ assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+
+ return commands;
+ }
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
index 05252e6..36b772c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/DeviceCtgType.java
@@ -13,6 +13,7 @@
SHUTTLE,
AGV,
LED,
+ MAP,
;
DeviceCtgType() {
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 19d2949..9129fa2 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
@@ -60,6 +60,10 @@
// AGV ----------------------------------------------
AGV_TRANSPORT(AGV),
+ // MAP ----------------------------------------------
+ MAP_LOCK_PATH(MAP),//鍦板浘閿佸畾璺緞
+ MAP_UNLOCK_PATH(MAP),//鍦板浘瑙i攣璺緞
+
;
public DeviceCtgType deviceCtg;
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 af17b74..d81e150 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
@@ -41,6 +41,8 @@
private LiftCommandService liftCommandService;
@Autowired
private ShuttleCommandService shuttleCommandService;
+ @Autowired
+ private MapCommandService mapCommandService;
@Scheduled(cron = "0/1 * * * * ? ")
public synchronized void executeTask() {
@@ -327,6 +329,9 @@
case AGV:
executeRes = agvCommandService.accept(motion);
break;
+ case MAP:
+ executeRes = mapCommandService.accept(motion);
+ break;
default:
break;
}
@@ -362,6 +367,9 @@
case CONVEYOR:
executeRes = conveyorCommandService.finish(motion);
break;
+ case MAP:
+ executeRes = mapCommandService.finish(motion);
+ break;
default:
break;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
index 9b2bdad..44adfe3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigatePositionConvert.java
@@ -38,10 +38,10 @@
//WCS绯荤粺搴撲綅鍙疯浆璺緞绠楁硶鑺傜偣
public static NavigateNode locNoToNode(String locNo) {
- int col = Integer.parseInt(locNo.substring(0, 2));
- int row = Integer.parseInt(locNo.substring(2, 5));
+ int col = Utils.getRow(locNo);
+ int row = Utils.getBay(locNo);
int[] newPosition = coverPosition(col,row);
- NavigateNode node = new NavigateNode(col, row);
+ NavigateNode node = new NavigateNode(newPosition[0], newPosition[1]);
node.setZ(Utils.getLev(locNo));
return node;
}
--
Gitblit v1.9.1