如何通过按钮移除Assembler模块Delay段中的Agent?
解决Assembler模块Delay段Agent无法移除的问题
问题需求
通过"Reset"按钮清除两个Queue模块(Lager_Oberteile、Lager_Plättchen)及Assembler模块(Klebestation)中的所有Agent,其中Assembler的Delay段Agent无法通过原代码移除。
原代码问题分析
原代码仅通过if (Klebestation.delaySize() == 1)判断并移除指定Agent,存在两个核心问题:
- 仅处理Delay段有1个Agent的情况,无法覆盖多个Agent的场景
- 直接指定
Oberteil_Plättchen_geklebt作为移除对象,可能因Agent引用不匹配导致移除失败
修正后的代码
// 清空两个Queue模块的所有Agent while(Lager_Oberteile.size() > 0) { Lager_Oberteile.removeFirst(); } while(Lager_Plättchen.size() > 0) { Lager_Plättchen.removeFirst(); } // 循环清空Assembler模块的Delay段 while(Klebestation.delaySize() > 0) { Agent delayAgent = Klebestation.getDelayAgent(0); Klebestation.remove(delayAgent); } offene_Aufträge = 0;
关键说明
- 改用
while循环判断delaySize(),确保无论Delay段有多少Agent都能被清空 - 使用
getDelayAgent(0)获取Delay段的第一个Agent对象,保证移除操作的准确性 - 保留原Queue模块的清空逻辑,确保所有目标模块的Agent都被清除
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

