From 103ca74d9b67ce4f766b5f77451741a76fa696b9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 22 三月 2026 09:50:10 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java | 86 ++++++++++++++++++++++++++++--------------
1 files changed, 57 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
index 2cfd566..064b5cd 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
@@ -214,6 +214,16 @@
@Override
public StationCommand getCommand(StationCommandType commandType, Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
+ return getCommand(commandType, taskNo, stationId, targetStationId, palletSize, null);
+ }
+
+ @Override
+ public StationCommand getCommand(StationCommandType commandType,
+ Integer taskNo,
+ Integer stationId,
+ Integer targetStationId,
+ Integer palletSize,
+ Double pathLenFactor) {
StationCommand stationCommand = new StationCommand();
stationCommand.setTaskNo(taskNo);
stationCommand.setStationId(stationId);
@@ -223,7 +233,7 @@
if (commandType == StationCommandType.MOVE) {
if (!stationId.equals(targetStationId)) {
- List<NavigateNode> nodes = calcPathNavigateNodes(stationId, targetStationId);
+ List<NavigateNode> nodes = calcPathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor);
List<Integer> path = new ArrayList<>();
List<Integer> liftTransferPath = new ArrayList<>();
for (NavigateNode n : nodes) {
@@ -239,6 +249,11 @@
if (Boolean.TRUE.equals(n.getIsLiftTransferPoint())) {
liftTransferPath.add(stationNo);
}
+ }
+ if (path.isEmpty()) {
+ log.warn("杈撻�佺嚎鍛戒护鐢熸垚澶辫触锛岃矾寰勪负绌猴紝taskNo={}, stationId={}, targetStationId={}",
+ taskNo, stationId, targetStationId);
+ return null;
}
stationCommand.setNavigatePath(path);
stationCommand.setLiftTransferPath(liftTransferPath);
@@ -298,12 +313,15 @@
return zyStationConnectDriver.readOriginCommand(address, length);
}
- private List<NavigateNode> calcPathNavigateNodes(Integer startStationId, Integer targetStationId) {
+ private List<NavigateNode> calcPathNavigateNodes(Integer taskNo,
+ Integer startStationId,
+ Integer targetStationId,
+ Double pathLenFactor) {
NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
if (navigateUtils == null) {
return new ArrayList<>();
}
- return navigateUtils.calcByStationId(startStationId, targetStationId);
+ return navigateUtils.calcByStationId(startStationId, targetStationId, taskNo, pathLenFactor);
}
private void executeMoveWithSeg(StationCommand original) {
@@ -378,20 +396,8 @@
}
int segCursor = 0;
- while (true) {
- CommandResponse commandResponse = sendCommand(segmentCommands.get(segCursor));
- if (commandResponse == null) {
- try {
- Thread.sleep(200);
- } catch (Exception ignore) {}
- continue;
- }
- if (commandResponse.getResult()) {
- break;
- }
- try {
- Thread.sleep(200);
- } catch (Exception ignore) {}
+ if (!sendSegmentWithRetry(segmentCommands.get(segCursor), original.getTaskNo())) {
+ return;
}
long runTime = System.currentTimeMillis();
@@ -432,18 +438,8 @@
int thresholdSegment = (int) Math.ceil(segLen * segmentAdvanceRatio);
if (remainingSegment <= thresholdSegment && segCursor < segmentCommands.size() - 1) {
segCursor++;
- while (true) {
- CommandResponse commandResponse = sendCommand(segmentCommands.get(segCursor));
- if (commandResponse == null) {
- Thread.sleep(200);
- continue;
- }
-
- if (commandResponse.getResult()) {
- break;
- }
-
- Thread.sleep(200);
+ if (!sendSegmentWithRetry(segmentCommands.get(segCursor), original.getTaskNo())) {
+ break;
}
}
Thread.sleep(500);
@@ -530,4 +526,36 @@
}
return null;
}
+
+ private boolean sendSegmentWithRetry(StationCommand command, Integer taskNo) {
+ while (true) {
+ if (isTaskMoveReset(taskNo)) {
+ return false;
+ }
+ CommandResponse commandResponse = sendCommand(command);
+ if (commandResponse == null) {
+ sleepQuietly(200L);
+ continue;
+ }
+ if (commandResponse.getResult()) {
+ return true;
+ }
+ sleepQuietly(200L);
+ }
+ }
+
+ private boolean isTaskMoveReset(Integer taskNo) {
+ if (taskNo == null || redisUtil == null) {
+ return false;
+ }
+ Object cancel = redisUtil.get(RedisKeyType.DEVICE_STATION_MOVE_RESET.key + taskNo);
+ return cancel != null;
+ }
+
+ private void sleepQuietly(long millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (Exception ignore) {
+ }
+ }
}
--
Gitblit v1.9.1