带循环的Anylogic状态图,可将3个套件设置为空闲或已调度

时间:2019-10-16 18:15:20

标签: loops anylogic statechart

(Main.java:935) __ (NPE Error Image)我有3个相同的套件,分别表示为代理类型ProductionOrder。主机上的按钮发送呼叫以注入到主机上的源。源创建一个ProductionOrder代理,并在其On出口操作中包含以下代码,该代码触发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);'

1 个答案:

答案 0 :(得分:1)

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

我的意思是

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);}