运输订单
由类的实例表示,描述了由车辆执行的进程。 通常,此过程是货物从一个地点到另一个地点的实际运输。 然而,A也可以只描述车辆到目的地位置的运动以及要执行的可选车辆操作。TransportOrderTransportOrder
以下所有内容都是 openTCS 中“运输订单”的示例,即使实际上没有传输任何内容:
- 将货物从某个地方运输到其他地方的经典订单:
a) 移动到位置“A”并在那里执行“装载货物”操作。
b) 移动到位置“B”并在那里执行“卸载货物”操作。 - 操纵运输或固定货物:
a) 移动到位置“A”并在那里执行“钻取”操作。
b) 移动到位置“B”并在那里执行“锤子”操作。 - 将车辆移至停车位置的命令:
a) 移动到点“Park 01”(不执行任何特定操作)。 - 为车辆电池充电的命令:
a) 移动到位置“充电站”并在那里执行“充电电池”操作。
订单的生命周期
→ RAW:初始化状态
→ACTIVE:被激活
→DISPATCHABLE / UNROUTABLE:如果可以到达,状态更改为等待派发,如果目的地无法到达,状态更改为不可路由。
→BEING_PROCESSED:正在执行状态。
→WITHDRAWN:如果废弃了更改为废弃状态,
→FAILED:订单运行过程中失败,置为失败。
→FINISHED:订单结束。
订单组成结构
一个订单包含多个driverOrder,一个driverOrder包含一个目的地和对应的操作,对应0或者1个路由。如果车辆在原地做动作,路由为0,如果去到目的地做动作,路由为1。一个路由有多个step组成,小车适配器获取step执行。
创建订单
web API创建订单:
rmi创建订单:
// 目的地列表,一个目的地对应一个driverOrder
List<DestinationCreationTO> destinations
= List.of(
new DestinationCreationTO("Some location", "Some operation")
);
// 订单
TransportOrderCreationTO orderTO
= new TransportOrderCreationTO("MyTransportOrder", destinations);
// 指定订单运行车辆,以及结束时间,可选。如果不指定运行车辆,内核会自动选择
orderTO = orderTO
.withIntendedVehicleName("Some vehicle")
.withDeadline(Instant.now().plus(1, ChronoUnit.HOURS));
// 创建订单
TransportOrderService transportOrderService = getATransportOrderService();
transportOrderService.createTransportOrder(orderTO);
撤销订单
// 根据订单名撤销
DispatcherService dispatcherService = getADispatcherService();
dispatcherService.withdrawByTransportOrder(someOrder.getReference(), true);
// 根据车辆撤销
DispatcherService dispatcherService = getADispatcherService();
dispatcherService.withdrawByVehicle(curVehicle.getReference(), true);
查看订单
web API:
rmi接口:
Set<org.opentcs.data.order.TransportOrder> transportOrders = kernelServicePortal.getTransportOrderService().
fetchObjects(org.opentcs.data.order.TransportOrder.class, new TransportOrderFilter());
// 过滤器
public class TransportOrderFilter implements Predicate<TransportOrder>, Serializable {
@Override
public boolean test(TransportOrder transportOrder) {
return true;
}
}
上一篇:利用openTCS实现车辆调度系统(五)openTCS WEB接口及扩展
下一篇:路径规划二次开发