
简介面向制造企业信息化从业者、生产管理人员及智能制造初学者的MES入门级PDF文档系统介绍了制造执行系统的提出背景、权威定义、核心概念与发展历程重点剖析了MES在企业计划层如ERP与过程控制层如PLC之间的执行层定位并针对计划层与现场自动化系统之间的信息“断层”问题给出多个典型车间管理场景。文档还梳理了生产调度、工艺管理、质量管理、设备管理、库存管理等常用功能模块帮助读者快速建立对MES整体框架和工作逻辑的认知。资源为单个PDF文件大小约250KB内容精炼适合快速通读或作为团队内部培训的基础材料。已有459人学习浏览。通过学习读者可以理清MES与ERP、SCADA/PLC的关系理解MES在智能工厂中的关键作用并能够结合文档中的典型问题清单识别自身企业的车间管控痛点为后续MES选型或项目实施打下基础。1. MES不是ERP的补充它管的是工单在车间的真实状态如果一条产线只有ERP和纸工单晚上一盘点在制品数量对不上你第一反应是找ERP的错还是去车间里找料大多数工厂的做法是改单据但问题往往出在工序交接的空白带——ERP管到工单和发料就停了工位上的执行状态没人记录这就是MES要填的缝隙。MES的核心不是“记账”而是把“工单下发了、料上了线、正在过哪道工序、当前设备状态如何”变成实时数据再用这些数据反推排产、防错和追溯。要讲清楚这套东西最有效的路径是从业务对象拆起再定架构然后落到一次最小工单闭环上。按“业务对象→架构选型→本地部署→效果验证”这条线走适合正在做MES选型的技术评估、刚接手数字化项目的工程师也适合想给现有MES补短板的产品经理和车间主管。2. MES核心业务五张业务表看完整车间数字化2.1 工单、工艺路线、物料批次是MES的三个主对象MES的业务模型可以压成一句话按既定工艺路线把物料批次一步步转成成品批次同时记录每一步的设备、人员和工时。因此最核心的主数据只有三类——工单、工艺路线、物料批次——所有功能模块都围绕这三个对象展开。工单一般由ERP下发但MES里处理的工单和ERP里的生产订单并不完全等同。MES里的工单带拆批和并批一条5000件的SMT订单可以按线体拆成两个2500件的执行工单两条线体各自完成的前工序件再合并到同一条后工序。工单状态机至少要覆盖“已创建→已下达→已开工→已完工→已关闭”每两个状态之间的转换都会产生一条事件记录这是追溯的原始凭证。工艺路线以工序版本存放。同样是PCBA板卡旧料号和新料号对应的贴片程序可能不同所以工艺路线要带版本号与实际生效时间。物料批次管理来料批次、供应商、数量、质量状态以及它在本工单上的耗用关系。三个主数据如果不干净后续防错、追溯、产能核算都会失真。2.2 报工与在制品MES里最容易绕过的功能报工是MES被车间抱怨最多的功能也是实施中最容易流于形式的部分。手工填纸质报工单、隔天补录工时这类动作一旦普遍化MES里的在制品数据就不可信后续排产和追溯也失去意义。可落地的报工设计应当和设备产量或扫码动作联动——SMT贴片机完成一板后自动计数焊后检验岗位扫工单二维码上报检验结果装配工位用扫码枪扫物料条码来触发开工和完工。在制品的数据模型在多数MES里体现为一张工序在制卡包含工单号、当前工序号、良品数量、不良数量、锁定数量。以这张在制卡为底座生成的在制品查询是所有生产看板和报表的数据来源。实施时只关注结果报表而忽视在制卡的准确性后续数据修正成本会成倍增加。2.3 不良品处理不能只记数量还要记录返工路径“产生的不良怎么处置”直接决定MES质量模块的深度。只记录“不良数量2”的系统和记录“这2件发生在第20道工序、不良代码是PAD偏移、返工路径回到第15道工序重新过回流焊”的系统在追溯能力上差一个量级。实施时我一般会把返工做成独立的一条工艺路线版本让返工件走标准的返工路线而不是临时手填一张单据。否则时间一长返工与正常生产的数据口径就分不开了。2.4 设备数据采集是MES和ERP的分水岭ERP不做设备数据采集MES做。一台贴片机的实际Cycle time、抛料率、稼动率无法靠人工Excel表每天盘出来。MES从PLC或设备接口拿到的典型字段包括设备状态运行/待机/维修、当前程序号、已产出数量、报警代码。采集频率按场景设置设备状态建议秒级推送或拉取产量统计做到分钟级聚合即可不必全量高频落库。下表是MES核心模块与主数据的关系实施时可以先按模块做一次差距分析模块主数据依赖核心输入核心输出工单管理工单、工艺路线ERP计划、手工建单派工指令、状态变更报工管理工单、报工卡扫码/设备产量工序在制、工时记录质量追溯物料批次、不良代码检验结果、返工单追溯报告、不良统计设备管理设备台账、保养计划PLC/传感器数据稼动率、预警记录看板报表上述全部上述全部实时看板、日报2.5 用一条SQL验证在制品和报工状态是否一致验证MES数据是否可信一个直接做法是查在制卡的当前工序与最后更新时间大多数生产库都能支持下面这类查询-- 在制卡与工单当前工序一致性检测 SELECT wo.work_order_no, wo.product_code, op.operation_code, op.operation_name, tic.wip_qty AS wip_count, tic.updated_at AS last_update FROM work_order wo JOIN operation op ON wo.current_operation_id op.operation_id JOIN ticket_in_card tic ON tic.work_order_id wo.work_order_id WHERE wo.status IN_PROGRESS ORDER BY tic.updated_at DESC;这段查询的目的不只是跑数字而是暴露两类问题一是工单状态为“进行中”但当前工序为空说明报工漏记或工序回退没处理二是在制数量与工序实际批次数量对不上多半是返工或拆批没有走系统流程。排错时顺着last_update找到最近一笔报工记录和操作员就能定位是流程设计问题还是操作习惯问题。3. MES选型必须拆开看的四层架构与集成参数3.1 为什么MES要拆成设备、采集、业务、展示四层设备层、采集层、业务层、展示层是MES实施中比较常见的分层方式。设备层是PLC、贴片机、AOI、AGV这些现场设备采集层负责把设备信号翻译成标准业务事件业务层处理工单、质量、追溯等核心逻辑展示层给不同角色输出操作界面和报表。采集层单独拆出来的原因是设备协议永远是实施中最大的不确定因素。一台设备改点位如果直接穿透到业务层上层逻辑要跟着返工有了采集层做隔离设备侧变化只影响一台边缘网关或采集服务业务SQL完全不用动。采集层的常见形态有两种。现场网关适合老旧设备走IO模块或串口接入采集服务直接跑在MES服务端适合已经具备网口、支持OPC UA或Secs/GEM协议的设备。选型时更值得关注的是断点续传能力设备断网几分钟不能把这部分产量数据丢掉否则一天下来OEE会少算。3.2 业务层接口工单下发与工序结构的JSON示例MES业务层接口在绝大多数项目里用REST API暴露。以ERP向MES下发工单为例常见数据载体是JSON{ // 工单号全局唯一贯穿两个系统 workOrderNo: WO20250131001, productCode: PCBA-SMT-002, planQty: 500, planStartTime: 2025-01-31 09:00:00, // 工序列表seq用10的步长便于后续插入 operations: [ {seq: 10, operationCode: SMT-PRINT, machineType: PRINTER}, {seq: 20, operationCode: SMT-MOUNT, machineType: MOUNTER}, {seq: 30, operationCode: REFLOW, machineType: REFLOW_OVEN} ] }真实接口里JSON不允许携带注释上面示例里的注释只是为了标出三个容易出错的参数位。第一个是workOrderNo命名规则最好全厂统一我见过最麻烦的情况是ERP下发一套号、MES内部再映射一套号每次追溯都要靠中间表翻译。第二个是seq的步长建议用10、20、30这种留出间隙否则工艺调整要插一道工序时所有后续工序号都得重排。第三个是machineType只写到设备类型不绑定具体设备实例具体由哪台贴片机执行放到调度阶段再决定。3.3 展示层不是车间大屏是分角色的操作界面MES的展示层经常被理解成一块“车间大屏”实际上大屏只是展示层里比较小的部分。一线操作工看的是工位终端要显示当前工单、当前工序、物料批次和下一步动作班组长看的是产出、不良和异常待办计划员看的是在制分布和超期工单管理层看汇总的达成率和设备利用率。实施时我建议先做工位终端和手机端最后再做车间大屏。方案汇报时大屏容易让人联想到数字孪生展示效果确实抓眼但数字孪生要设备级建模和实时渲染周期长、变动多MES先把工序执行、物料批次和设备状态三者的数据闭环跑通车间里能用的功能反而比一块大屏实在得多。两者投入产出不在一个量级决策时别被演示动画带偏。3.4 三类选型取舍通用MES、行业MES、开源MESMES选型没有标准答案但有三条判断逻辑值得参考。第一条功能必须在数据模型层面核实让供应商把在制卡、报工单、不良单三张表的设计逻辑讲清楚讲不清楚的无论功能清单多长都先放一边。第二条行业模板的作用比想象中小SMT看起来有标准做法但不同厂对追溯粒度的要求差异很大有的按批追溯即可有的要求按单板SN追溯模板经常在“标准做法”和“现场实际”之间卡住扩展成本反而不低。第三条开源MES适合验证业务闭环商用MES适合正式上线交付。以Carbon为代表的开源MES能支撑本地快速跑通数据流但真实产线对文档完整度、升级路径和服务响应有要求商用产品在这些边界上更清晰。实施MES集成前建议把下面五个集成点先确认清楚每个都直接影响接口设计集成对象数据方向关键字段失败处理建议ERP工单下发/完工回写工单号、数量、计划时间消息队列重试PLC/设备状态/产量上报状态码、累计产量断点续传补采WMS物料批次出入库批次号、仓位、数量库存差异对账扫码枪/工位终端报工/开工扫描工单号、操作员、数量离线缓存事后同步质量系统不良/返工单不良代码、返工路径状态机冲突检测这五个集成点的失败处理往往决定MES能不能长期跑顺。ERP下发工单失败要能自动重试设备断网时采集到的产量要能在恢复后补传工位终端离线时要允许报工先存在本机、联机后再同步。接口层不做这些兜底车间就会出现一批绕过系统的备份Excel表。4. 开源MESCarbon本地部署跑通一条最小工单闭环4.1 为什么拿开源MES做本地验证更高效不管最终选商用MES还是自研先用一个开源MES把“建产线→建工艺→建工单→开工→报工→完工”这条链路在本地跑通对判断项目范围帮助很大。开源MES的代码和表结构开放可以拿真实业务数据做演练例如把SMT车间的工艺路线录入后看工序版本切换是否卡件或者模拟两条线同时领同一批次物料观察防错逻辑怎么拦截。本地部署用容器最省事。数据库、应用服务、前端都启动后一台8GB内存的机器就能跑完整套流程不需要额外采购工业硬件。4.2 用Docker Compose启动MES服务端和数据库下面是一个最小可跑的容器编排示例镜像名以开源项目实际发布为准覆盖本地验证的主要需求version: 3.8 services: mes-db: image: postgres:15 restart: unless-stopped environment: POSTGRES_DB: mesdb POSTGRES_USER: mes POSTGRES_PASSWORD: mes_pass_2025 # 本地验证用生产环境必须换 ports: - 5432:5432 volumes: - mes_pgdata:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, pg_isready -U mes] interval: 10s timeout: 5s retries: 5 mes-server: image: carbon-mes-server:latest # 占位镜像名以开源项目发布为准 restart: unless-stopped environment: SPRING_DATASOURCE_URL: jdbc:postgresql://mes-db:5432/mesdb SPRING_DATASOURCE_USERNAME: mes SPRING_DATASOURCE_PASSWORD: mes_pass_2025 MES_INIT_MODE: auto ports: - 8080:8080 depends_on: mes-db: condition: service_healthy volumes: mes_pgdata:配置里三个位置别改错。healthcheck必须配否则应用进程先于数据库启动一批建表脚本会因连接失败漏执行MES_INIT_MODE: auto表示应用启动时自动执行初始化脚本本地验证阶段打开能省掉手工导库生产环境关掉mes_pgdata是具名数据卷没有它每次重启容器数据就回到出厂状态。4.3 初始化主数据并跑一次开工→报工→完工启动容器后先确认服务状态再初始化。初始化顺序建议按“车间→线体→物料→批次→工艺路线→工单”来原因很简单下游单据的外键依赖上游主数据顺序反了前端就会一直报“数据未找到”。# 创建车间线体后建立物料和来料批次 curl -X POST http://localhost:8080/api/v1/workshops -H Content-Type: application/json \ -d {code: SMT, name: SMT车间} curl -X POST http://localhost:8080/api/v1/lines -H Content-Type: application/json \ -d {code: SMTA, name: SMT A线, workshopCode: SMT} curl -X POST http://localhost:8080/api/v1/materials -H Content-Type: application/json \ -d {code: PCB-103, name: PCB板-103, unit: pcs} curl -X POST http://localhost:8080/api/v1/material-batches -H Content-Type: application/json \ -d {batchNo: B20250130-001, materialCode: PCB-103, qty: 500} # 维护工艺路线版本号必须显式给定 curl -X POST http://localhost:8080/api/v1/routes -H Content-Type: application/json \ -d {productCode: PCBA-SMT-002, version: V1, operations: [ {seq: 10, code: SMT-PRINT, name: 印刷}, {seq: 20, code: SMT-MOUNT, name: 贴片}, {seq: 30, code: REFLOW, name: 回流焊} ]}字段选择上有两个需要提前约定。batchNo建议带自然日期比如B日期当日序号后续按时间窗口查追溯会快很多工艺路线的version字段如果不显式赋值很多开源实现默认只保留一份最新版本历史上该工单用的是哪版工艺就没法对账了。主数据就绪后按下面的顺序完成工单执行流程# 工单开工指定线体与领用批次 curl -X POST http://localhost:8080/api/v1/work-orders/WO20250131001/start -H Content-Type: application/json \ -d {lineCode: SMTA, batchRefs: [B20250130-001]} # 贴片工序报工300件良品298不良2 curl -X POST http://localhost:8080/api/v1/work-orders/WO20250131001/operations/20/report \ -H Content-Type: application/json \ -d {qty: 300, goodQty: 298, defectQty: 2, operator: zhang3} # 查看当前在制分布 curl http://localhost:8080/api/v1/work-orders/WO20250131001/wip第二段接口里的operations/20的20是工序seq不是数据库主键ID。用seq写报工接口对业务语义更清晰但如果同一个工单存在多条派生工艺例如拆批后各自微调seq值就可能在派生版本里重复此时接口必须额外携带工艺版本号。报工的报废数量也要单独传很多数据模型把goodQty/defectQty/scrapQty做成三列接口文档一旦没写清集成人员容易把scrap混进defect里不良率就被算高了。4.4 对照前端看板核对API返回验证数据闭环API流程跑通后回到前端确认两张页面。工单列表页应显示工单从“已创建”变成“已开工”同时出现当前在制数量工序在制看板应能查到第20道工序的在制卡良品和不良数量与API返回值一致。看到不一致时先看前端调用的是哪个接口再在浏览器Network面板里确认请求参数有没有带上工艺版本号。本地验证阶段建议保留下面的核对表每次改动主数据或工艺路线后都过一遍检查项期望结果不一致时优先排查点工单状态已开工开工接口未绑定线体在制数量与报工累计值一致报工接口seq传错工序位置显示当前工序20工艺路线版本未生效物料冻结量与领用批次数量对应拆批接口漏了回写提示这套初始化脚本和接口核对流程原样搬到生产环境时只需要替换服务地址、账号和真实主数据最大的工作量反而在历史数据清洗上建议尽早启动。5. SMT行业MES落地的四个验证点5.1 板上追溯从单板SN反查物料与工艺参数SMT的追溯要求通常是单板级。一块PCBA在客户端出问题后厂内要能按SN反查到它经过哪台印刷机、哪台贴片机、哪一个料站、哪一批锡膏以及当时的炉温曲线。这套能力在MES里的基础是每块PCB的独立SN从印刷工序开始扫码后续扫码记录全部落库。上线后拿三块不良板做反向验证扫SN应能查到印刷参数、贴装程序名和对应物料批次。5.2 料站防错有效与否要看设备动作是否被拦防错逻辑是否有效不只看系统有没有提示要看错误的动作有没有被拦住。SMT里最典型的是料站防错换料时MES核对料盘条码与当前工单BOM是否一致不一致就要锁机。验证时让现场人员故意扫一盘阻值不对的电阻MES必须当场抛红并拒绝允许开工。如果只弹了提示、设备继续运转就要检查MES与设备的联动节点是否真正生效。5.3 数据指标投入产出平衡是对账的最低要求上线一段时间后最怕的不是系统停机而是系统数据与现场实物流对不上。对账的最低口径是投入数等于在制数加已完成数加报废数建议用每天自动跑的对比表检查指标计算口径警戒值投入产出平衡当班投入 - (在制完工报废)超过5件则告警追溯完整率可追溯批次 / 应追溯批次低于99%告警离线录入占比手工补录工单 / 总工单数超过3%需要整改5.4 用自动化巡检SQL把对账变成日常机制对账不能靠人工每天看报表要让系统自己跑-- 每日投入产出平衡巡检 SELECT product_code, SUM(input_qty) AS total_input, SUM(finish_qty) AS total_finish, SUM(scrap_qty) AS total_scrap, SUM(wip_qty) AS total_wip FROM daily_production_summary WHERE produce_date CURRENT_DATE GROUP BY product_code;这张汇总表的口径要和MES在制卡保持一致出现不平衡时优先查三类问题返工品是否重复计数、跨日工单的在制结转是否失真、离线工位在补录时有没有漏掉时间维度。让这条SQL在每日凌晨自动执行只要投入产出等式不被打破MES的基础数据就能持续作为排产和质量分析的可信来源。本文还有配套的精品资源点击获取