首页 > 解决方案 > 带有循环的 Anylogic 状态图可将 3 个套件设置为空闲或计划

问题描述

(Main.java:935) __ (NPE 错误图像) 我有 3 个相同的套件,表示为代理类型 ProductionOrder。main 上的按钮向 main 上的源发送注入调用。源创建一个 ProductionOrder 代理,并在其 On exit 操作中包含以下代码,该操作触发 ProductionSuite 代理类型中的状态图转换。状态图从“idle”开始,并有一个连接到“scheduled”的消息转换。当我运行模型并点击按钮时,源接收到注入调用并将 ProductionOrder 发送到套件 2。我可以在“运行”窗口中套件 2 的选项卡中看到它确实从“空闲”变为“已调度” ' 源被激活时的状态。尽管当套件 0 和 1 都没有收到订单时,它也会将状态更改为“已调度”。当我再次按下按钮以注入第二个 ProductionOrder 代理时,模型会出现一堆错误并且无法继续。我认为它仍在某个地方将套件组合在一起,并且问题可能不再来自源代码,因为它现在发送消息。或者也许我需要另一行代码来进一步分离这些套件。

 sourceProductionOrder--->exitToSuite

 [sourceProductionOrder On Exit Action]

'if ( productionSuite(0).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(0);
deliver("Suite is Scheduled", agent.assignedSuite);}

if ( productionSuite(1).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(1);
deliver("Suite is Scheduled", agent.assignedSuite);}

if ( productionSuite(2).inState(ProductionSuite.idle))
{agent.assignedSuite = productionSuite(2);
deliver("Suite is Scheduled", agent.assignedSuite);}'

[exitToSuite On Exit Action]

'agent.assignedSuite.enterProductionOrder.take(agent);'

标签: loopsanylogicstatechart

解决方案


您是否可以简单地使用“if...else if ... else if”设置(而不是您当前的“if ... if ... if”)?目前,您的所有 if 语句都将被触发,因为所有 prodSuite 在开始时都处于空闲状态。这也可以解释为什么您在第二次尝试时会出错......

我的意思是说:

if ( productionSuite(0).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(0);
    deliver("Suite is Scheduled", agent.assignedSuite);}

else if ( productionSuite(1).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(1);
    deliver("Suite is Scheduled", agent.assignedSuite);}

else if ( productionSuite(2).inState(ProductionSuite.idle))
    {agent.assignedSuite = productionSuite(2);
    deliver("Suite is Scheduled", agent.assignedSuite);}

推荐阅读