AnyLogic中如何配置三个并行工位实现工件载具分流以缩短生产节拍
AnyLogic 3并行工位工件载具分配逻辑实现方案
前置准备
首先在模型中创建对应基础元素:
- 3个功能完全一致的加工工位,使用流程建模库的
Delay模块实现,统一命名为station_0、station_1、station_2,设置相同的加工时长参数 - 自定义工件载具Agent类型,命名为WT,不需要额外加特殊属性,直接用默认实体属性即可
- 在分流节点处放置
SelectOutput3模块,用来给到达的WT分配工位
核心分配逻辑实现
你需要的分配规则优先级为:优先选空闲工位 > 无空闲时选剩余加工时长最短的工位,我们通过自定义函数实现该逻辑:
- 在模型中新建一个函数,命名为
getTargetStationIndex,返回值类型设置为int - 函数内写入如下代码:
// 把三个工位存入列表统一遍历 List<Delay> allStations = List.of(station_0, station_1, station_2); // 第一步:筛选所有空闲工位 List<Delay> idleStations = allStations.stream() .filter(station -> station.isIdle()) .toList(); // 存在空闲工位直接返回第一个空闲工位的序号 if (!idleStations.isEmpty()) { return allStations.indexOf(idleStations.get(0)); } // 不存在空闲工位时,返回剩余加工时间最短的工位序号 return allStations.indexOf( allStations.stream() .min(Comparator.comparingDouble(station -> station.getRemainingTime())) .get() );
- 打开
SelectOutput3模块的属性面板,在「选择条件」栏直接填入getTargetStationIndex(),模块会自动根据返回值0/1/2把WT分配到对应出口的工位。
后续流程配置
12个WT完成单工位加工后,直接用输送线模块/连接端口把所有工位的出口连回分流节点的入口,即可实现WT的循环流转。
验证建议
作为入门学习者,你可以先把工位加工时长设置为固定值,运行模型时打开三个Delay模块的动态监控,观察WT分配是否符合规则:
- 只要存在空闲工位,新WT一定会进入空闲工位
- 所有工位都忙碌时,新WT会进入最先结束加工的工位
如果使用物料搬运库的输送线组件,逻辑完全一致,只需要把Delay模块替换为对应加工服务模块,把代码中的isIdle()、getRemainingTime()替换为对应模块的空闲判断、剩余时间获取方法即可。
内容的提问来源于stack exchange,提问作者J.Jurkov
相关产品推荐
相关产品推荐

