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

OEE计算时如何扣除ResourcePool中的非工作时段?

原逻辑缺陷分析

你之前的代码逻辑存在三个核心问题,导致无法正确统计非工作时长:

  • 触发时机错误:仅在产品流经对应流程节点时才执行判断,若非工作时段内没有产品经过节点,这段时间完全不会被统计
  • 起始时间重复覆盖:若多次触发工人无活跃的判断条件,会反复重写noworkingTimeStart的值,导致上一段非工作时段的起始时间丢失,最终统计的非工作时长偏小
  • 缺少状态标记:没有记录当前是否处于非工作时段的标识,模型启动即处于非工作时段、非工作时段跨多天等边界场景都会出现统计偏差
修复方案

第一步:新增状态变量

首先定义三个全局变量:

  • noworkingTime:累计非工作时长,数值型,初始值为0
  • noworkingTimeStart:当前非工作时段的起始时间,数值型,初始值为0
  • isNoworking:布尔型状态标记,标记当前是否处于非工作时段,初始值根据模型启动时工人资源池的状态设置:若启动时无活跃工人则设为true,同时将noworkingTimeStart设为启动时间time(),否则设为false

第二步:绑定资源池状态事件

不要将统计逻辑写在流程节点中,改为绑定到workers资源池的状态变化事件上,只要资源池状态变化就触发统计逻辑:

  1. 在资源池的资源单元变为不可用事件中添加如下代码:
// 最后一名活跃工人变为不可用,正式进入非工作时段
if(workers.sizeActive() == 0 && !isNoworking){
    isNoworking = true;
    noworkingTimeStart = time();
}
  1. 在资源池的资源单元变为可用事件中添加如下代码:
// 第一名工人恢复可用,正式退出非工作时段
if(workers.sizeActive() > 0 && isNoworking){
    isNoworking = false;
    noworkingTime += time() - noworkingTimeStart;
}

第三步:补全边界统计逻辑

如果需要在模型运行结束时统计全周期OEE,需要在模型停止事件中添加如下代码,避免统计终止时仍处于非工作时段的未结算时长:

if(isNoworking){
    noworkingTime += time() - noworkingTimeStart;
}
OEE计算说明

后续计算OEE使用的有效生产时长直接套用公式:
有效生产时长 = 总观测时长 - noworkingTime
即可排除休息、周末等非工作时段的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:09:05