Loops 带有循环的Anylogic状态图,可将3个套件设置为空闲或计划

Loops 带有循环的Anylogic状态图,可将3个套件设置为空闲或计划,loops,anylogic,statechart,Loops,Anylogic,Statechart,__我有3个相同的套件,表示为代理类型ProductionOrder。main上的按钮向main上的源发送注入调用。源创建一个ProductionOrder代理,并在其On exit操作中包含以下代码,该操作在ProductionSuite代理类型中触发状态图转换。状态图从“idle”开始,并有一个连接到“scheduled”的消息转换。当我运行模型并按下按钮时,源代码接收到一个inject调用,并将ProductionOrder发送到Suite2。我可以在Run窗口的suite 2选项卡中看到

__我有3个相同的套件,表示为代理类型ProductionOrder。main上的按钮向main上的源发送注入调用。源创建一个ProductionOrder代理,并在其On exit操作中包含以下代码,该操作在ProductionSuite代理类型中触发状态图转换。状态图从“idle”开始,并有一个连接到“scheduled”的消息转换。当我运行模型并按下按钮时,源代码接收到一个inject调用,并将ProductionOrder发送到Suite2。我可以在Run窗口的suite 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);'

您是否可以简单地使用“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);}

成功了。非常感谢。我现在可以创建3个订单发送到空闲房间。当我按下第四个键时,我又得到了所有的错误。看起来我需要更改exitToSuite操作的代码。这些是控制台中显示的第一个错误,而其他错误(未知源);在生产时(2019)在生产时(Main.java:935)在生产时(2019)在生产时(Main.java:933)在生产时(2019)在生产时(Main.java:567)在生产时(Main.java:567)在生产时(在生产时)在(Main.java:1)访问$7(在生产时)?是NPE吗?截图会更有帮助;-)很可能,您的第四次按钮单击会将另一个代理推入源对象,但它不知道要去哪里。我怀疑这里有一些基本的设计问题,这是控制台中的一个NPE。我将原始问题中的图像链接到顶部。Main的第935行是什么代码?(当抛出错误时,在AnyLogic中打开控制台窗口,并单击所有红色错误文本中的蓝色链接。发送NPE实际发生位置的屏幕)。我将图像链接到第一个图像旁边。它是连接到main上sourceProductionOrder的exitToSuite出口的出口操作代码。