带有循环的 Anylogic 状态图可将 3 个套件设置为空闲或预定
Anylogic statechart with loops to set 3 suites as idle or scheduled
(Main.java:935)__(NPE Error Image) 我有 3 个相同的套件,表示为代理类型 ProductionOrder。 main 上的按钮发送调用以注入 main 上的源。源创建一个 ProductionOrder 代理,并在其 On exit 操作中包含以下代码,该代码触发 ProductionSuite 代理类型中的状态图转换。状态图从 'idle' 开始,并有一个连接到 'scheduled' 的消息转换。当我 运行 模型并按下按钮时,源收到注入调用并将 ProductionOrder 发送到套件 2。我可以在 运行 window 套件 2 的选项卡中看到当源被激活时,它确实从 'idle' 状态变为 'scheduled' 状态。尽管当套件 0 和 1 都没有收到订单时,它也会将状态更改为 'scheduled'。当我再次按下按钮以注入第二个 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 语句都会被触发,因为所有的 prodSuites 在开始时都处于空闲状态。这也可以解释为什么你在第二次尝试时出错......
我的意思是:
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);}
(Main.java:935)__(NPE Error Image) 我有 3 个相同的套件,表示为代理类型 ProductionOrder。 main 上的按钮发送调用以注入 main 上的源。源创建一个 ProductionOrder 代理,并在其 On exit 操作中包含以下代码,该代码触发 ProductionSuite 代理类型中的状态图转换。状态图从 'idle' 开始,并有一个连接到 'scheduled' 的消息转换。当我 运行 模型并按下按钮时,源收到注入调用并将 ProductionOrder 发送到套件 2。我可以在 运行 window 套件 2 的选项卡中看到当源被激活时,它确实从 'idle' 状态变为 'scheduled' 状态。尽管当套件 0 和 1 都没有收到订单时,它也会将状态更改为 'scheduled'。当我再次按下按钮以注入第二个 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 语句都会被触发,因为所有的 prodSuites 在开始时都处于空闲状态。这也可以解释为什么你在第二次尝试时出错......
我的意思是:
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);}