Anylogic - 组装程序在完成 10 次组装后应停止工作 2 小时

Anylogic - Assembler should stop working for 2 hours after 10 assemblies done

“汇编器”在完成 10 次组装后应停止工作 2 小时。 我怎样才能做到这一点?

创建一个名为 countAssembler 的变量,类型为 int。当代理通过汇编程序时增加它。同时创建一个名为 assemblerStopTime 的变量。您还使用 assemblerStopTime=time()

记录汇编程序停止时间

countAssembler 值小于 10 之前放置一个 selectOutputOut 块并让它们进入。否则发送到 Wait 块。

现在,为了保持先进先出规则,在第一个selectOutputOut条件下,你还需要检查等待块中是否有任何代理,并且current time - assemblerStopTime是否大于2。如果有,您释放它并使用 wait.free(0) 函数发送给汇编程序。并派当前代理等待。您还需要将 countAssembler 重置为零。

有很多方法可以做到这一点,具体取决于停止工作意味着什么以及对传入部件的影响。但这里有一个选择

  1. 创建一个名为 Machine 的资源池,这将与技术人员一起使用:

  2. 在汇编程序的“退出”操作上执行此操作(我使用 9 而不是 10,因为 out.count() 在代理完全退出之前不会计数,所以当数到 9 时,表示你已经生产了 10)

    if(self.out.count()==9){
    machine.set_capacity(0);
    create_MyDynamicEvent(2, 小时);
    }

  3. 在您的动态事件(您必须创建)中,您将添加以下代码:

    machine.set_capacity(1);

第二种选择是让变量 countAssembler 计算生成的项目数...然后

  1. 退出时编写 countAssembler++;

  2. 在输入延迟时你写下:

    if(countAssembler==10){
    self.suspend(代理);
    create_MyDynamicEvent(2, HOUR,agent);
    }

  3. 关于你写的动态事件:

    assembler.resume(代理);

不要忘记在动态事件中添加所需的参数: