From 36cbb1a8020da5a660d0204a130b3e27c7cec0d6 Mon Sep 17 00:00:00 2001 From: xuzhiheng <2543137953@qq.com> Date: Tue, 6 May 2025 10:34:46 +0800 Subject: [PATCH] update --- .../LoopbackCommunicationAdapter.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java b/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java index fc8b46e..9e5e7dd 100644 --- a/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java +++ b/opentcs-commadapter-loopback/src/main/java/org/opentcs/virtualvehicle/LoopbackCommunicationAdapter.java @@ -151,6 +151,10 @@ public class LoopbackCommunicationAdapter * 用于判断是否切换执行订单 */ private static String uniqueOrderName; + /** + * AGV最后上报时间 + */ + private static long AFLastReportTime; /** * Creates a new instance. @@ -360,6 +364,8 @@ public class LoopbackCommunicationAdapter if (body[21] == (byte) 0xAF) { //最后上报时间 + Date now = new Date(); + AFLastReportTime = now.getTime(); System.out.println("0xAF sub success"); @@ -548,7 +554,7 @@ public class LoopbackCommunicationAdapter getProcessModel().setState(Vehicle.State.EXECUTING); - //阻塞当前线程至0xAF订阅结束 + //阻塞当前线程至0xAF订阅结束 todo 为了避免并发可能要注释 while (true) { Date now = new Date(); if ((now.getTime() - sub0xafDeadline) >= 200) { @@ -664,9 +670,16 @@ public class LoopbackCommunicationAdapter } //获取AGV最终经过点 - QueryRobotStatusRsp qryRobotStatusRsp = QryRobotStatus.command(); - String currentPoint = (qryRobotStatusRsp.locationStatusInfo.lastPassPointId).toString(); - initVehiclePosition(currentPoint); + String currentPoint = null; + long specifyTheTime = SubRobotStatue.intervalTime * 2 + 200; + Date now = new Date(); + if ((now.getTime() - AFLastReportTime) <= specifyTheTime) { + QueryRobotStatusRsp qryRobotStatusRsp = QryRobotStatus.command(); + currentPoint = (qryRobotStatusRsp.locationStatusInfo.lastPassPointId).toString(); + initVehiclePosition(currentPoint); + } else { + currentPoint = getProcessModel().getPosition(); + } //判断当前AGV点位是否和最新点位相同 if (currentPoint.equals(LAST_PASSED_POINT)) {