You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AnyLogic中限制设备故障事件仅在运行时段触发?

解决AnyLogic中设备未启用时触发故障事件的问题

方法一:给故障事件添加触发前置条件

  • 打开你用于触发故障的事件(比如命名为故障触发事件),在**触发条件(Condition)**栏中添加判断逻辑:
    • 直接引用设备的运行状态参数,若设备有isRunning布尔参数(true表示运行),则写isRunning == true
    • 若设备还有独立的启用状态参数(比如isEnabled),可叠加判断:isRunning == true && isEnabled == true
  • 只有当设备处于运行状态时,事件才会满足触发条件,否则即使到了预设触发时间也不会执行。

方法二:动态启停故障事件

  • 在设备投入使用的逻辑(比如初始化完成、开始运行的代码块/启动事件)中,启动故障事件:
    故障触发事件.restart(); // 重置并启动事件,按设定分布重新计算下一次触发时间
    
  • 在设备停止运行的逻辑(比如停机、维护启动前)中,暂停故障事件:
    故障触发事件.cancel(); // 取消当前待触发的事件
    
  • 这种方式从根源避免误触发,设备未启用时事件完全不处于待触发状态。

方法三:重置循环故障事件的触发时间

如果故障是循环发生的(使用重复事件),可在设备启用时重新初始化触发间隔:

  • 在设备启动的代码块中添加:
    循环故障事件.setDelay(yourDistribution.sample()); // 用你设定的分布重新采样下一次触发时间
    循环故障事件.restart();
    
  • 设备停止时调用cancel()暂停事件,确保未运行状态下不会有待触发的故障事件。

额外注意点

  • 确保设备的isRunning参数在正确时机更新:设备开始运行时设为true,停机、故障、维护时设为false
  • 若使用AnyLogic自带的Resource或Machine库组件,可直接用组件自带方法替代自定义参数,比如触发条件写machine.isOperational() && machine.isBusy()

内容的提问来源于stack exchange,提问作者FMT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:22:03