开篇:为什么 20GWh 电芯工厂必须上 MES

事故现场:三起 0.8 亿级的停产事故
2025 年 11 月,南方某 20GWh 锂电池电芯工厂(下称电芯厂 A)连续三周发生三件让厂长连夜召开停产复盘会的事故。
事故 1:客户退货一整柜化成容量不够的电芯。 一家车厂在产线装配后做 Pack EOL 测试,发现某批次的 280Ah 半固态电芯 1C 容量仅有 265Ah,比规格下限 275Ah 还少 10Ah。整柜 672 颗电芯退货,直接损失 86 万元,外加一次严重的客户投诉。事后复盘发现:化成工序当周换了一台新的化成柜,工程师误将充电截止电流从 0.05C 改为 0.07C,导致化成不充分。问题不在于化成柜没数据——化成柜每小时往 SCADA 推一次电流电压——而在于没人把这数据与容量规格做闭环比对,更没人知道这柜电芯流向了哪条 Pack 产线。
事故 2:OEE 88% 但产能少交付了 12 万颗。 月度运营会上,OEE 报表显示涂布机 OEE 月均 88%(业界标杆水平),但下工序辊压线当月却因"涂布极片缺料"等料 437 小时,相当于辊压线 18 天没生产。深挖发现:OEE 算法把"待料停机"归到了"计划停机",与"换卷""保养"合并,可用率被高估了 11 个百分点。所谓 88% OEE 实际是 77%,按 60PPM(每分钟 60 颗)节拍,辊压一个月少出 12 万颗极片,整厂产能少交了 12 万颗电芯。
事故 3:召回 36 颗电芯查了 11 天。 客户报一颗化成后 14 天的内短路,要求工厂按"同一物料批次"召回。工厂从成品 SN 反查化成批次、注液批次、卷绕工序、涂布极片、正极粉料批次,用了 11 天、5 个跨工序会议、12 张 Excel 才圈定 36 颗可能受影响的电芯。期间客户每天一个电话问"查到哪了",工厂回复"还在查"——这次召回的公关成本比 36 颗电芯本身贵 5 倍。
三起事故的共同根因:电芯厂的产线设备是数字化的,数据也都被 SCADA 采上来了,但数据之间不串、与业务不连、与质量不闭环。厂长开停产复盘会时问了一句话:「我们花了两千万搞的数字化,怎么连化成柜参数改了都没人知道?」。
排查:为什么 ERP 看不见产线,SCADA 又缺业务上下文
电芯厂 A 已有 SAP ERP(管订单、采购、财务)+ Ignition SCADA(管设备实时状态),两套系统都"在线",为什么仍然挡不住这三起事故?我们做了一次系统化梳理:
| 维度 | SAP ERP | Ignition SCADA | 缺口 |
|---|---|---|---|
| **数据颗粒度** | 工单、BOM、销售订单 | 设备秒级点位 | 工单与设备的对应关系缺失 |
| **时间颗粒度** | 日/班次 | 1 秒 | 中间没有 1 分钟级的工序节拍 |
| **业务上下文** | 财务成本、销售订单 | 设备状态机 | "设备在跑哪个工单的哪个工序的哪个料号"无定义 |
| **追溯方向** | 物料批次→工单 | 设备→点位 | 没有正反向双向追溯 |
| **质量判定** | 不做 | 不做 | 没有工序级 in-process 质量判定 |
| **设备协议** | 不接 | OPC DA/Modbus | 缺 OPC UA 的信息模型与 SECS/GEM 的半导体级模型 |
根因归纳:ERP 是财务-订单视角,看不见工序与设备;SCADA 是设备-实时视角,看不见订单与物料;中间缺一个承上启下的执行层——ISA-95 把它定义为 Level 3 的 Manufacturing Execution System / Manufacturing Operations Management,简称 MES / MOM。
更糟的是,电芯厂 A 的 SCADA 是按车间独立部署的,涂布、辊压、卷绕、化成四个车间四套 SCADA,数据格式不统一(同一"设备状态"字段,涂布是 RUN/STOP/IDLE,化成是 1/2/3),跨工序追溯必须靠人肉 ETL。
为什么 ERP 厂商不直接把 MES 加进去?因为 MES 是强工业属性的——它要懂 ISA-88 配方、懂 SECS/GEM 设备协议、懂工序节拍、懂批次三链、懂 SPC Cpk、懂 OEE 三因子——这些都不是财务软件该背的。所以业内有句话:ERP 想做 MES 是"财务想做工业",做不深;SCADA 想做 MES 是"自动化想做管理",做不全。 这就是 MES 在 L3 独立存在的商业理由。
底层原理:ISA-95 五层金字塔与 MES 的"三明治"位置
ISA-95(IEC 62264)是国际自动化学会给制造系统集成画的金字塔:
Level 4 ERP / 业务计划 订单、采购、财务、销售 天/周
Level 3 MES / MOM 执行 工单、工序、批次、OEE、追溯 小时/分钟/秒
Level 2 SCADA / 监控 设备状态、PID、报警 毫秒/秒
Level 1 PLC / 控制器 DCS、PLC、伺服 毫秒
Level 0 设备 / 物理资产 涂布机、辊压机、化成柜 实时
MES 在 L3,向上对接 ERP 的销售订单与生产订单(BOM、工艺路线、计划完工时间),向下对接 SCADA 的设备状态与点位。它不取代 ERP 也不取代 SCADA,而是把它们的数据"翻译"成可执行的业务动作:
- ERP 的"工单 1000 颗型号 X 电芯" → MES 把工单展开成 7 段工艺的派工单(涂布 1000 片、辊压 1000 片、化成 1000 柜…),把派工单下到具体设备具体班次。
- SCADA 的"涂布机速度 60 m/min、张力 20 N" → MES 把这秒级点位卷成"工单 WO-20251109-001 在涂布工序、班次 A、设备 BC-001 上的实时产出节拍 = 0.95 片/min、累计下料 480 片"。
ISA-95 还定义了 MES 的九大功能模块(不一定要全做,但该做全做):
- 生产调度(Production Scheduling)——把 ERP 工单拆成工序级派工单
- 生产派工(Production Dispatching)——把派工单下到设备/班组
- 生产执行管理(Production Execution Management)——工序起止、暂停、改派
- 数据采集(Data Collection)——从 SCADA/设备采集点位与事件
- 质量管控(Quality Management)——工序级 SPC、Cpk、不合格处置
- 物料管理(Material Management)——批次收发、库存、过期预警
- 维护管理(Maintenance Management)——设备保养计划、停机编码
- 绩效分析(Performance Analysis)——OEE、Cpk、批次合格率
- 人员管理(Personnel Management)——班组、技能、操作授权
电芯厂 A 的事故 1 缺的就是 #5 质量管控(化成截止电流变更未触发 SPC 异常),事故 2 缺的是 #8 绩效分析(OEE 三因子口径错),事故 3 缺的是 #6 物料管理 + #4 数据采集(批次三链没有打通)。
正确姿势:MES 的边界——做什么、不做什么
MES 项目最容易翻车的地方不是技术不够,而是边界没划清:要么把 SCADA 的事揽进来做(点位全往 MES 推,把时序库当 SCADA 历史库用),要么把 ERP 的事揽进来做(在 MES 里跑 MRP 排产、跑成本核算)。我把这条线明确划出来:
MES 该做的:
- 工单到工序的展开(不接 ERP 工单计划本身)
- 派工单到设备/班组的下发(不取代 SCADA 设备控制)
- 工序起止事件登记(设备状态由 SCADA 推,MES 只叠加业务上下文)
- 批次三链追溯:料-工序-成品的双向追溯(核心!)
- 工序级 SPC、Cpk 计算(不做整批合格率,那是 QMS 的事)
- OEE 三因子(可用率/表现率/质量率)+ 停机编码
- Andon 呼叫与闭环(不做设备保养计划,那是 EAM 的事)
- 时序数据分级存储:秒级点位 / 分钟级 KPI / 小时级 SPC
MES 不该做的:
- 不做财务成本核算(ERP 的事)
- 不做销售订单管理(ERP 的事)
- 不做 MRP 物料需求计划(ERP 的事,APS 是另一回事)
- 不做设备级 PID/PLC 控制逻辑(L1-L2 的事)
- 不做 EAM 设备预防性保养(专业 EAM 的事)
- 不做 QMS 全质量文件管理(DHR、批记录、CAPA——专业 QMS 的事)
- 不做 WMS 立体库货位管理(专业 WMS 的事,MES 只接 WMS 出入库事件)
这套边界做完,电芯厂 A 的三起事故都能闭环:
- 事故 1:化成截止电流参数变更触发工艺参数变更审批,未经审批的参数不让下发设备;SCADA 采到电流值与下发参数对比,超出 SPC 控制线触发自动 hold,不让这柜料流向下工序。
- 事故 2:OEE 三因子按 ISA-95 TR88.03 标准口径——计划停机只算"计划内+已批准"的,待料属于"未计划停机"扣可用率,OEE 数字回归真实。
- 事故 3:批次三链在物料收发时强制扫 SN/批次号,工序产出也强制登记 SN,反向追溯一次 SQL 0.5 秒圈出 36 颗受影响电芯。
数据说话:电芯厂 A 的数字化成熟度评分
为了把"该上什么"说清楚,我们给电芯厂 A 的 7 段工艺做了 ISA-95 L3 成熟度评分(5 分制):
| 工艺段 | 派工下发 | 批次追溯 | SPC/Cpk | OEE 口径 | Andon 闭环 | 综合 |
|---|---|---|---|---|---|---|
| 涂布 | 2 | 1.5 | 1 | 2 | 0 | **1.3** |
| 辊压 | 2 | 1 | 1 | 2 | 0 | **1.2** |
| 分切 | 2 | 1 | 0 | 2 | 0 | **1.0** |
| 卷绕 | 2 | 1.5 | 1.5 | 2 | 1 | **1.6** |
| 注液 | 2 | 1 | 0.5 | 2 | 0 | **1.1** |
| 化成 | 1 | 2 | 2 | 1.5 | 1 | **1.5** |
| 分容 | 1 | 2 | 2.5 | 1.5 | 1 | **1.6** |
| 全厂 | 1.7 | 1.4 | 1.2 | 1.8 | 0.4 | **1.3** |
全厂综合 1.3/5——典型的"有 SCADA 没 MES"状态:派工靠纸质流转单(2 分是因为有人在敲键盘下发,但没工单-设备对应关系),追溯靠 Excel(1.4 分),SPC 只在化成分容两段做(1.2 分),OEE 口径不统一(1.8 分看似最高但口径错),Andon 几乎为零(0.4 分)。
对标业内:成熟度 4 分以上的标杆工厂(如宁德溧阳工厂、亿纬锂能荆门工厂)事故 1 当场就拦下、事故 2 OEE 口径合规、事故 3 召回追溯 < 30 分钟。所以 1.3 → 3.5 是这一期 MES 项目要拉到的目标线。
面试怎么答:MES 是什么、为什么不是 ERP、国内 MES 失败率高的根因
问:MES 是什么?跟 ERP、SCADA 什么关系?
答:MES 是 ISA-95 L3 的制造执行系统,向上接 ERP L4 把生产订单展开成工序级派工单,向下接 SCADA L2 把设备秒级点位叠加业务上下文变成工单-工序-料号-班次四元组的实时产出节拍。它做 ERP 不该做(工序节拍、批次三链、SPC)和 SCADA 做不全(工单展开、追溯、OEE 口径统一)的事,是"承上启下"的执行层,不是财务层也不是控制层。
问:为什么 ERP 不直接把 MES 加进去?
答:三个原因:① 业务上下文错位——ERP 是财务视角,关心成本、订单,看不到工序节拍和设备状态机;② 协议栈差距——MES 要懂 OPC UA 信息模型、SECS/GEM 半导体级设备协议、Modbus TCP、PLC 寄存器映射,ERP 厂商不背这些;③ 时间颗粒度错位——ERP 是天/班次级,MES 是秒/分钟级,时序数据量差三个数量级,强行合并会拖垮 ERP 主库。
问:国内 MES 失败率高的根因是什么?
答:① 边界没划清——把 SCADA 历史库或 ERP MRP 揽进来做,结果两边都做不好;② 设备协议不上心——很多 MES 项目 80% 经费花在前端看板、20% 花在采集,最后数据采不上来或采错;③ 批次三链不打通——只做正向追溯(料→成品),不做反向追溯(成品→料),召回时秒级响应变 11 天人工查;④ OEE 口径随意——计划停机/非计划停机不分,1C 容量等规格上下限不进 SPC;⑤ 不上时序库——把秒级点位写 PostgreSQL,3 个月就锁表;⑥ 忽视 ISA-88 工艺路线——把工艺路线当 BOM 平铺,不建模工序间的"前置-后置-替代料",订单改派时全链断。这六条是我们这次 MES 项目要正面回答的。
落地清单:项目立项、团队、技术选型、连载路线图
立项决策:
- 项目代号 cell-mes(cell-mes-practice 仓库)
- 工厂规模 20 GWh/年,电芯型号 280Ah 半固态 + 314Ah 高镍
- 工艺段 7 段:涂布-辊压-分切-卷绕-注液-化成-分容
- 上线目标:6 个月内全厂 7 段工艺 L3 成熟度从 1.3 → 3.5
- 商务边界:MES 不取代 SAP 也不取代 Ignition,做 L3 的执行、追溯、质量、OEE、Andon
技术选型(经过 2 周选型对比的结论):
| 层 | 选型 | 理由 |
|---|---|---|
| 后端 | Spring Boot 3 + MyBatis-Plus + Java 21 | 团队栈延续,Java 21 虚拟线程适合 OPC UA 长连接 |
| 关系库 | PostgreSQL 16 | 工单、BOM、批次三链、SPC 控制图主键库 |
| 时序库 | Apache IoTDB 1.3 | 国产时序库,对工业点位 native 支持,可与 gansu-ems 同栈 |
| 缓存 | Redis 7 | Andon 状态机 + 限流 + 派工单草稿 |
| 设备协议 | OPC UA + Modbus TCP + SECS/GEM | 涂布/辊压走 OPC UA,化成柜走 Modbus,少数进口设备走 SECS |
| 前端 | Vue3 + Vite + Element Plus + ECharts | 看板与表单 |
| 部署 | Docker Compose + Nginx | 单工厂部署,不上 K8s(运维成本) |
| 租户隔离 | 行级(tenant_id)+ schema(高敏感) | 多工厂租户 |
14 章连载路线图:
| 章 | 标题 | 核心问题 |
|---|---|---|
| ch00 | 开篇:为什么 20GWh 电芯工厂必须上 MES | 业务背景、ISA-95、MES 边界 |
| ch01 | 业务建模:7 段工艺 + ISA-95 设备层级 + 工单/BOM/工艺路线三件套 | 工艺路线树、BOM 替代料 |
| ch02 | 架构解剖:分层架构 + 时序/关系双库 + 多租户 | 采集-执行-业务-看板四层 |
| ch03 | 工程化:Spring Boot 3 + MyBatis-Plus + Flyway 多租户骨架 | 项目结构、租户上下文 |
| ch04 | OPC UA + Modbus 采集层 | 涂布 OPC UA、化成 Modbus、卷绕 SECS |
| ch05 | 工艺路线与 BOM 展开 | 派工单级联、替代料选择 |
| ch06 | 批次追溯三链 | 正反向追溯、召回边界 |
| ch07 | OEE 与停机分析 | 三因子口径、停机编码 |
| ch08 | SPC 与 Cpk | 化成容量控制图、西电规则 |
| ch09 | Andon 与质量闭环 | 呼叫分级、8D 闭环 |
| ch10 | 化成柜容量预测 | Early Warning、拦截策略 |
| ch11 | IoTDB 分级存储 | 秒级/分钟级/小时级归档 |
| ch12 | Vue3 看板与简易排产 | Andon 看板、APS 优先级 |
| ch13 | 面试总纲 30 题 | 九大模块答题框架 |
专栏定位:这套连载不是"开源 MES 改造"(如 gansu-ems 改 OpenEMS),而是自研商用 MES 项目骨架 + ISA-95/IEC 62264 工业标准事实——每章会给出真实的 Controller/Service/Repository 代码骨架、真实的 SQL 表结构与查询、真实的 SPC/OEE 算法实现。源代码会随章节发布到 cell-mes-practice 仓库,关键算法在测试里有黄金数据兜底。
电芯厂 A 的三起事故不是孤例,是过去十年中国新能源制造狂奔的缩影。这一期 MES 项目要做的不是给设备接根线,而是给厂长一双能看清全厂的眼睛——产线在跑什么工单的什么工序的什么料号、哪柜料被自动 hold、哪台设备的 Cpk 在漂移、哪个班次的 Andon 还没人接。这本连载是我作为该项目的架构师兼实施负责人,记录下来的 13 章实战。
