如何解决AnyLogic中PML的Pickup块inPickup端口计数返回0的问题?
解决AnyLogic PML Pickup块inPickup端口count()始终返回0的问题
核心原因
pickup.inPickup.count()返回0的本质是你误解了这个端口的使用场景,或是没匹配正确的运输工具分配方式:
inPickup是Pickup块专门接收从流程中直接流入的运输工具的端口,只有当运输工具通过这个端口进入Pickup块时,count()才会返回非零值。- 如果你的运输工具是通过
ResourcePool资源池分配的(这是PML模块中最常见的运输工具管理方式),inPickup端口根本不会被触发,所以count()自然为0。
解决方案
根据你的运输工具管理方式,选择对应的统计方法:
1. 若使用ResourcePool管理运输工具
直接通过资源池API获取当前参与Pickup任务的运输工具数量,替换原公式:
dataset.add(pickup.out.count() * transporterPool.getNumberOfBusyUnits())
这里transporterPool是你定义的运输工具资源池名称,getNumberOfBusyUnits()会返回当前正在执行运输任务的运输工具数量。
2. 直接获取Pickup块关联的运输工具
如果不需要依赖资源池,可使用Pickup块自带的API获取当前关联的运输工具集合:
dataset.add(pickup.out.count() * pickup.getTransporters().size())
getTransporters()返回Pickup块当前正在使用的所有运输工具,size()即为对应数量。
3. 若确实通过inPickup端口流入运输工具
检查以下几点:
- 确认运输工具的生成/流转逻辑正确,确实有运输工具流入
inPickup端口; - 检查流程连接线是否正确连接到
inPickup(而非其他端口); - 确保调用
count()的时机是在运输工具流入之后(比如在事件、状态变化触发器中,而非模型初始化阶段)。
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

