)
每天手动算OEE太累了我花2天写了个Python工具5分钟搞定。完整代码分享拿去直接用。痛点为什么要自动算OEE我之前每天的工作- 8:00 从MES导出昨日生产数据CSV格式- 8:30 用Excel计算可用率、性能率、质量率- 9:30 手动算OEE三个指标- 10:00 画OEE趋势图- 10:30 写分析报告每天2小时重复劳动而且容易出错。有一次我把运行时间算错了导致OEE偏高2%被领导批评了一顿。受不了了自己写工具工具设计功能需求1. 读取MES导出的CSV数据2. 自动计算OEE三个指标3. 生成OEE报表Excel格式4. 自动标记异常设备5. 支持多设备批量分析技术选型Python 3.9 Pandas openpyxl生成Excel完整代码#!/usr/bin/env python3# -*- coding: utf-8 -*-OEE自动计算工具 v1.0import pandas as pdfrom dataclasses import dataclassfrom typing import List, Dictfrom datetime import datetimedataclassclass OEEResult:OEE计算结果equipment_id: strdate: strplan_time: float # 计划运行时间分钟actual_time: float # 实际运行时间cycle_time: float # 周期时间秒/片output: int # 产出数量good_output: int # 良品数量propertydef availability(self) - float:可用率 实际运行时间 / 计划运行时间return self.actual_time / self.plan_time if self.plan_time 0 else 0propertydef performance(self) - float:性能率 (理论周期时间 × 产出) / 实际运行时间ideal_time (self.cycle_time / 60) * self.output # 转换为分钟return ideal_time / self.actual_time if self.actual_time 0 else 0propertydef quality(self) - float:质量率 良品数量 / 产出数量return self.good_output / self.output if self.output 0 else 0propertydef oee(self) - float:OEE 可用率 × 性能率 × 质量率return self.availability * self.performance * self.qualityclass OEECalculator:OEE计算器def __init__(self, data_path: str):self.df pd.read_csv(data_path)self.results: List[OEEResult] []def calculate(self) - List[OEEResult]:计算所有设备的OEEfor eq_id in self.df[equipment_id].unique():eq_data self.df[self.df[equipment_id] eq_id]# 汇总数据result OEEResult(equipment_ideq_id,dateeq_data[date].iloc[-1],plan_timeeq_data[plan_time].sum(),actual_timeeq_data[actual_time].sum(),cycle_timeeq_data[cycle_time].mean(),outputeq_data[output].sum(),good_outputeq_data[good_output].sum())self.results.append(result)return self.resultsdef get_summary(self) - Dict:获取汇总统计if not self.results:self.calculate()return {avg_oee: sum(r.oee for r in self.results) / len(self.results),max_oee: max(r.oee for r in self.results),min_oee: min(r.oee for r in self.results),total_equipment: len(self.results),low_oee_list: [r.equipment_id for r in self.results if r.oee 0.85]}def export_report(self, output_path: str):导出Excel报表if not self.results:self.calculate()data []for r in self.results:data.append({设备ID: r.equipment_id,日期: r.date,计划时间: r.plan_time,实际时间: r.actual_time,可用率: f{r.availability*100:.1f}%,性能率: f{r.performance*100:.1f}%,质量率: f{r.quality*100:.1f}%,OEE: f{r.oee*100:.1f}%,状态: ✅正常 if r.oee 0.85 else ⚠️需改善})df_out pd.DataFrame(data)df_out.to_excel(output_path, indexFalse, sheet_nameOEE报表)print(f报表已导出: {output_path})def main():# 模拟数据data {date: [2026-06-10] * 3,equipment_id: [ETCH-01, ETCH-02, CVD-01],plan_time: [1440, 1440, 1440], # 24小时×60分钟actual_time: [1300, 1350, 1380], # 实际运行分钟cycle_time: [45, 42, 60], # 秒/片output: [1700, 1900, 1380], # 产出片数good_output: [1650, 1850, 1350] # 良品片数}df pd.DataFrame(data)df.to_csv(oee_data.csv, indexFalse)# 计算OEEcalc OEECalculator(oee_data.csv)results calc.calculate()print(\n OEE计算结果 )for r in results:print(f{r.equipment_id}: OEE{r.oee*100:.1f}% f(可用率{r.availability*100:.1f}%, f性能率{r.performance*100:.1f}%, f质量率{r.quality*100:.1f}%))# 导出报表calc.export_report(OEE报表_20260610.xlsx)# 汇总summary calc.get_summary()print(f\n 汇总统计 )print(f平均OEE: {summary[avg_oee]*100:.1f}%)print(f最高OEE: {summary[max_oee]*100:.1f}%)print(f最低OEE: {summary[min_oee]*100:.1f}%)print(f需改善设备: {summary[low_oee_list]})if __name__ __main__:main()运行效果运行一次5秒钟自动计算所有设备的OEE并生成Excel报表。以前2小时的工作现在5分钟搞定。怎么用1. 安装依赖pip install pandas openpyxl2. 准备CSV文件包含equipment_id、plan_time、actual_time、cycle_time、output、good_output3. 运行脚本python oee_calculator.py4. 查看生成的OEE报表.xlsx后续优化方向1. 增加邮件告警OEE低于85%自动发邮件2. 增加趋势图展示OEE随时间的变化3. 增加根因分析自动标记可能导致OEE低的原因--- 你也在手动算OEE吗有什么痛点评论区聊聊 觉得有用就点赞收藏关注我分享更多半导体工具