AGV仓储仿真系统:如何实现多次随机选取货架循环作业?
仓储AGV仿真系统问题解决
需求与现有问题
需求:搭建仓储系统,AGV从货架系统取货架送至工作站,等待数秒后送回,要求AGV送回货架后随机选取货架重复流程。
现有问题:
- 所有货架完成一次作业后仿真直接结束
- AGV固定按从左到右顺序取货
- 修改队列FIFO/LIFO模式无法实现随机取货
- 添加等待块后仿真无动作
- 已勾选“Restore Agent on Exit”,但AGV仍仅单次取货
解决步骤
1. 实现随机选货
放弃队列模式,用代码随机指定货架目标:
- 在AGV完成货架送回动作后,添加代码块
- 写入以下代码(替换成你仿真中的实际对象名称):
// 从货架系统随机选一个货架 Shelve randomShelve = rackSystem.getShelves().get(randomIndex(rackSystem.getShelves().size())); // 触发AGV执行取货-送站-回库流程 agv.moveTo(randomShelve, () -> { agv.pickup(randomShelve); agv.moveTo(workstation, () -> { agv.drop(randomShelve); // 工作站等待5秒(可修改时长) delay(5, TimeUnit.SECONDS, () -> { agv.pickup(randomShelve); agv.moveTo(rackSystem, () -> { agv.drop(randomShelve); // 完成后触发下一轮任务 getEngine().scheduleOnce(() -> startNextTask(), 0); }); }); }); }); - 把上述流程封装成自定义函数
startNextTask(),方便循环调用
2. 实现循环作业,防止仿真提前结束
- 将整个作业流程封装为函数后,在AGV每次送回货架后调用该函数,形成循环
- 在仿真设置中,将结束条件改为手动结束或设置足够长的仿真时长,避免因货架单次作业完成而终止
3. 资源池替代方案
如果偏好使用队列/资源分配方式:
- 创建资源池,将所有货架加入池内
- 设置资源池的分配策略为随机(Random)
- AGV完成任务后,将货架释放回资源池,再重新随机请求货架,实现循环随机取货
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

