From e6818275ab3ed626082cacfdf55e84cc6e92861e Mon Sep 17 00:00:00 2001 From: xuzhiheng <2543137953@qq.com> Date: Tue, 1 Jul 2025 19:11:01 +0800 Subject: [PATCH] update --- .../communication/http/HttpClient.java | 2 +- .../http/service/ExecuteMove.java | 4 +- .../http/service/ExecuteOperation.java | 4 + .../v1/TransportOrderHandler.java | 3 + .../servicewebapi/v1/V1RequestHandler.java | 17 ++++ .../servicewebapi/v1/VehicleHandler.java | 83 ++++--------------- ...pentcs-kernel-defaults-baseline.properties | 3 +- 7 files changed, 43 insertions(+), 73 deletions(-) diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/HttpClient.java b/opentcs-common/src/main/java/org/opentcs/communication/http/HttpClient.java index 0b7faf4..990f10b 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/HttpClient.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/HttpClient.java @@ -46,7 +46,7 @@ public class HttpClient { try (Response response = client.newCall(request).execute()) { return response.body().string(); } catch (IOException e) { - throw new RuntimeException("POST Request Failed", e); + throw new RuntimeException("HTTP POST Request Failed", e); } } diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java index c567826..21d73b3 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteMove.java @@ -181,9 +181,7 @@ public class ExecuteMove extends BaseService { */ public static boolean resetOrder(String vehicleName) { - if (orderInfoMap.containsKey(vehicleName)) { - orderInfoMap.remove(vehicleName); - } + orderInfoMap.remove(vehicleName); return true; } diff --git a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteOperation.java b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteOperation.java index 02909e3..17d0976 100644 --- a/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteOperation.java +++ b/opentcs-common/src/main/java/org/opentcs/communication/http/service/ExecuteOperation.java @@ -84,6 +84,10 @@ public class ExecuteOperation extends BaseService{ //获取订单ID Integer orderId = ExecuteMove.getOrderID(vehicleName); + if (orderId == null) { + return; + } + RequestB2 b2 = new RequestB2(); b2.setAction_parallel_manner(2); diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java index 2c2dbd3..e016ed6 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/TransportOrderHandler.java @@ -91,6 +91,9 @@ public class TransportOrderHandler { //构建订单对象 PostTransportOrderRequestTO postTransportOrderRequestTO = new PostTransportOrderRequestTO(); postTransportOrderRequestTO.setIncompleteName(true); + if (intendedVehicle != null) { + postTransportOrderRequestTO.setIntendedVehicle(intendedVehicle); + } postTransportOrderRequestTO.setDispensable(dispensable); postTransportOrderRequestTO.setDeadline(Instant.now()); postTransportOrderRequestTO.setWrappingSequence(orderSequence.getName()); diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java index ade3e01..de87f4c 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/V1RequestHandler.java @@ -8,6 +8,8 @@ import jakarta.inject.Inject; import java.util.List; import java.util.concurrent.ExecutionException; import org.opentcs.access.KernelRuntimeException; +import org.opentcs.communication.http.service.ExecuteMove; +import org.opentcs.communication.http.service.ExecuteOperation; import org.opentcs.data.ObjectExistsException; import org.opentcs.data.ObjectUnknownException; import org.opentcs.kernel.extensions.servicewebapi.HttpConstants; @@ -450,6 +452,11 @@ public class V1RequestHandler private Object handlePostWithdrawalByVehicle(Request request, Response response) throws ObjectUnknownException { + + //初始化动作状态 + vehicleHandler.initActionStatus(request.params(":NAME")); + + //根据车辆撤销任务 orderDispatcherHandler.withdrawByVehicle( request.params(":NAME"), immediate(request), @@ -468,6 +475,16 @@ public class V1RequestHandler private Object handlePostVehicleRerouteRequest(Request request, Response response) throws ObjectUnknownException { + //清理车辆映射订单ID + ExecuteMove.resetOrder(request.params(":NAME")); + + //可能会有动作阻塞,所以需要初始化动作状态 + vehicleHandler.initActionStatus(request.params(":NAME")); + + //撤销订单 todo 订单撤销后可能会有延时继续运动,所以应该考虑是否需要等待订单撤销成功 +// ExecuteOperation.cancelOrder(request.params(":NAME")); + + //立即重新路由 orderDispatcherHandler.reroute(request.params(":NAME"), forced(request)); response.type(HttpConstants.CONTENT_TYPE_TEXT_PLAIN_UTF8); return ""; diff --git a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java index 640e95d..1feb67d 100644 --- a/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java +++ b/opentcs-kernel-extension-http-services/src/main/java/org/opentcs/kernel/extensions/servicewebapi/v1/VehicleHandler.java @@ -110,77 +110,24 @@ public class VehicleHandler { vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvInfo); } else if (type == 5) { //上报动作完成 //动作完成上报 - AgvActionStatus agvActionStatus = new AgvActionStatus(); - agvActionStatus.setStatus(true); - vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvActionStatus); + initActionStatus(name); +// AgvActionStatus agvActionStatus = new AgvActionStatus(); +// agvActionStatus.setStatus(true); +// vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvActionStatus); } } -// /** -// * 获取执行成本最低车辆 -// * @param destinationPoint 目标点 -// * @return 车辆名称 -// */ -// public String getExecuteVehicle(String destinationPoint) { -// -// //获取所有车辆 -// Set vehicles = vehicleService.fetchObjects(Vehicle.class); -// //设置终点 -// List destinationPointList = List.of(destinationPoint); -// //记录最低路由成本 -// long costs = 0; -// //返回的车辆名称 -// String vehicleName = null; -// -// for (Vehicle vehicle : vehicles) { -// VehicleProcessModelTO vehicleProcessModelTO = vehicleService.fetchProcessModel(vehicle.getReference()); -// boolean commAdapterEnabled = vehicleProcessModelTO.isCommAdapterEnabled(); -// -// //校验车辆:通讯适配器状态、车辆状态、集成级别、订单 -// if ( -// !commAdapterEnabled || -// vehicle.getState() != Vehicle.State.IDLE || -// vehicle.getIntegrationLevel() != Vehicle.IntegrationLevel.TO_BE_UTILIZED || -// vehicle.getTransportOrder() != null -// ) { -// //车辆不能执行任务直接获取下台车辆 -// continue; -// } -// -// //获取车辆当前位置设置为起点 -// String sourcePoint = vehicle.getCurrentPosition().getName(); -// -// PostVehicleRoutesRequestTO postVehicleRoutesRequestTO = new PostVehicleRoutesRequestTO(destinationPointList); -// postVehicleRoutesRequestTO.setSourcePoint(sourcePoint); -// Map, Route> vehicleRoutes = this.getVehicleRoutes(vehicle.getName(), postVehicleRoutesRequestTO); -// -// for (Map.Entry, Route> entry : vehicleRoutes.entrySet()) { -//// TCSObjectReference key = entry.getKey(); -// Route value = entry.getValue(); -// -// //判断成本值是否合规(为空或小于0不合规) -// if (value == null || value.getCosts() < 0) { -// continue; -// } -// -// //比较成本,取成本低车辆名称 -// if (vehicleName == null || costs > value.getCosts()) { -// //记录数据 -// costs = value.getCosts(); -// vehicleName = vehicle.getName(); -// } -// } -// } -// -// -// if (vehicleName == null) { -// //无空闲车辆需要创建订单无意向车辆订单 -//// throw new IllegalArgumentException("无可用车辆"); -// return ""; -// } -// -// return vehicleName; -// } + /** + * 初始化动作完成状态 + * @param name 车辆名称 + */ + public void initActionStatus(String name) { + Vehicle vehicle = vehicleService.fetchObject(Vehicle.class, name); + AgvActionStatus agvActionStatus = new AgvActionStatus(); + agvActionStatus.setStatus(true); + vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvActionStatus); + } + /** * Find all vehicles orders and filters depending on the given parameters. diff --git a/opentcs-kernel/src/main/resources/org/opentcs/kernel/distribution/config/opentcs-kernel-defaults-baseline.properties b/opentcs-kernel/src/main/resources/org/opentcs/kernel/distribution/config/opentcs-kernel-defaults-baseline.properties index b17026c..4aca9ff 100644 --- a/opentcs-kernel/src/main/resources/org/opentcs/kernel/distribution/config/opentcs-kernel-defaults-baseline.properties +++ b/opentcs-kernel/src/main/resources/org/opentcs/kernel/distribution/config/opentcs-kernel-defaults-baseline.properties @@ -14,7 +14,8 @@ kernelapp.rerouteOnDriveOrderFinished = false kernelapp.vehicleResourceManagementType = LENGTH_RESPECTED orderpool.sweepInterval = 60000 -orderpool.sweepAge = 86400000 +orderpool.sweepAge = 60000 +#orderpool.sweepAge = 86400000 rmikernelinterface.enable = true rmikernelinterface.useSsl = false