ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

FAB设备OEE自动化分析工具:月度报表从2天缩短到30秒

FAB设备OEE自动化分析工具:月度报表从2天缩短到30秒

每月花2天做OEE报表的日子终于结束了

我们车间有32台关键设备,每月要做OEE报表。

以前的方法:从MES导出Excel → 用Excel公式一个个算 → 手动汇总 → 做PPT。每月花2天,纯体力活。

而且每次都有几个单元格算错,汇总后和PM的数据对不上,又要回来查。

去年底我实在受不了了,用Python写了个自动化工具:导入MES数据 → 30秒出完整的OEE分析报告(含图表)。

现在每月省2天,一年省24天。按我的日薪算,相当于每年省了约6万的'加班费'。

OEE计算核心:三大损失

OEE = 可用率 × 表现率 × 质量率

可用率 = 实际运行时间 / 计划生产时间

表现率 = 理论周期 × 产量 / 实际运行时间

质量率 = 合格品数 / 总产出数

听起来简单,但实际操作中有3个坑:

1. 停机分类:计划保养、设备故障、等待物料、换recipe——每种停机要分开统计

2. 产能基准:不同recipe的周期时间不同,不能用单一基准

3. 时间口径:开机时间和计划时间不是一回事——设备开机但没排产的时间,要计入计划外停机

图1:OEE瀑布图——720小时计划时间,最终594小时合格产出

自动化代码

import pandas as pd
import matplotlib.pyplot as plt

def calc_oee(df):
"""计算单台设备OEE
df列: planned_h, breakdown_h, wait_h, changeover_h,
output_qty, defect_qty, ideal_cycle_min
"""
operating = df["planned_h"] - df["breakdown_h"] \
- df["wait_h"] - df["changeover_h"]
availability = operating / df["planned_h"]
performance = (df["ideal_cycle_min"] * df["output_qty"] / 60) / operating
quality = (df["output_qty"] - df["defect_qty"]) / df["output_qty"]
oee = availability * performance * quality
return {"availability": availability, "performance": performance,
"quality": quality, "oee": oee}

# 批量计算所有设备
df = pd.read_csv("monthly_equipment_data.csv")
results = df.groupby("equipment_id").apply(calc_oee).apply(pd.Series)
results.sort_values("oee", ascending=True)
print(results)

图2:10台ETCH设备月度OEE排名(ETCH-01最低64.2%,需重点关注)

效果对比

指标

手工Excel

Python自动化

制作时间

2天

30秒

设备覆盖

32台

全车间(不限)

错误率

约5%(公式算错)

0%(代码验证)

图表类型

固定模板

自动生成(瀑布图/排名/趋势)

复用性

每月重新做

一键运行

踩坑经验

1. MES导出的时间字段格式不统一(有的精确到秒,有的到分钟)→ 统一用pd.to_datetime转换

2. 换recipe的时间要单独统计——有的设备换recipe只要10分钟,有的要45分钟

3. OEE超过100%说明ideal_cycle设得太保守,需要更新基准值

这份模板/工具我整理了很久,建议收藏备用,下次需要直接拿出来用。

你在FAB遇到过类似问题吗?评论区说说你的处理思路,有代表性的我帮你分析!

VIP资源推荐:关注我获取半导体AI实战工具包(SPC异常检测/OEE分析/FDC分类)

返回列表