无需Downtime块编程触发ResourceTaskStart?Seize块inject类函数咨询
问题解答
1. 不借助Downtime块编程触发ResourceTaskStart块
可以直接通过AnyLogic API调用ResourceTaskStart块的startTask()方法触发任务,完全无需依赖Downtime块。
实现方式:
- 先获取目标资源实例(可从资源池选取特定资源,或提取可用资源)
- 调用ResourceTaskStart块的
startTask(Resource resource, ResourceTaskType taskType)方法,传入资源实例和对应任务类型(未自定义任务类型时可传入null)
代码示例:
假设ResourceTaskStart块名为machineMaintenanceStart,资源池为factoryMachines,自定义任务类型为maintenance:
// 获取第一个可用的机器资源 Machine targetMachine = factoryMachines.getAvailable().get(0); // 触发维护任务 machineMaintenanceStart.startTask(targetMachine, maintenance);
无需指定任务类型时可简化为:
machineMaintenanceStart.startTask(targetMachine, null);
2. 向Seize块的preparedUnits端口手动发送资源
Seize块的preparedUnits输入端口支持编程发送资源,类似source.inject()的效果,直接调用端口的send()方法即可实现。
场景适配(购物车优先抵达逻辑):
在购物车抵达卸货点的事件(如onEnter事件)中添加代码,手动触发卡车资源进入preparedUnits端口,确保购物车先到达:
代码示例:
假设Seize块名为seizeDeliveryTruck,资源池为deliveryTrucks:
// 获取指定送货卡车资源 DeliveryTruck targetTruck = deliveryTrucks.get(0); // 将卡车发送至Seize块的preparedUnits端口 seizeDeliveryTruck.preparedUnits.send(targetTruck);
内容的提问来源于stack exchange,提问作者Brian Babo
相关产品推荐
相关产品推荐

