车间里的真实场景很多人都不陌生:计划员每天早上抱着一堆Excel排产,排到中午又被新插入的急单推翻;机台操作工干完手里的活,不知道下一件该干什么;设备半夜停机,等到第二天上班才发现,一查已经停了三四个小时;销售问交期,计划员只能说"我看看",然后谁也说不准。上层的ERP把工单下达到车间就像一个黑盒,进去之后完全没有反馈,直到月底盘点才发现一堆逾期和损耗不知道花落谁家。
这就是我这几年来一直在做的方向——制造执行系统(MES)。这篇想聊的,是我们团队沉淀下来的一套MES制造执行系统源码,核心模块包括智能调度、工艺排程、生产管控与设备维保。写这篇文章的目的,不是给你一份"演示视频式"的功能清单,而是把每个模块背后为什么要这么设计、数据模型怎么搭、算法选型怎么取舍、生产现场落地时踩过哪些坑,尽量一次性说清楚。适合正在选型或自研MES的制造企业信息化负责人、做智能工厂项目的实施工程师,以及想通过源码理解MES本质的开发者参考。
如果你期望的是那种"装上就能用、界面很漂亮、演示很流畅"的包装,这套方向可能不适合你;但如果你想搞懂一套能真实对抗车间复杂性的系统是怎么搭起来的,那这篇文章应该对胃口。
1. 先理清边界:一套MES源码到底该管车间的哪些事
我接触过不少企业,一说上MES,需求能列两百多条,恨不得把考勤、绩效、OA都装进去。但MES这层系统的定位其实相当明确,它是ISA-95模型里的第三层,承接上层ERP下达的生产计划,对应到车间层面的执行,再向下连接设备控制器和数据采集。说白了,ERP管的是"决定做什么",MES管的是"怎么做、做得怎么样、在制品在哪个环节、设备状态如何"。
在我这套源码的模块划分里,遵循的是一条主线、三个支撑。主线是生产管控——从工单下发、派工、报工到完工入库;支撑之一是工艺排程,把产品怎么做、用哪条路线、走哪些工序变成系统可计算的工序计划;支撑之二是智能调度,在多个工单争抢同一批设备资源时给出合理的先后顺序和分配方案;支撑之三是设备维保,因为调度排得再好,设备一停,计划照样作废,所以设备可用性是排产计划能不能兑现的地基。
模块之间的边界如果不清晰,代码很快会腐化。比如工艺排程和智能调度很多人容易混淆,这里必须分开:工艺排程关心的是工艺路线层面的时间和顺序约束,解决的是"这个工单按什么工序顺序走、每道工序标准工时多少";智能调度关心的是资源冲突下的分配优化,解决的是"多个工单同时在C1、C2两台机床上加工,哪个先做、哪个机台做"。可以理解为,前者定义了"活该怎么干",后者决定了"什么时候在哪儿干"。
生产管控模块处于中间层,它不做高级优化,但要保证现场信息及时准确地回流。设备维保则相对独立,但它需要的运行时长、开机率等数据,又要依赖生产管控的报工和状态上报来支撑。这四个模块都围绕同一套主数据——物料、工艺路线、工序、设备资源、工单、人员——这是MES的地基,也是很多项目烂尾的根源。
1.1 为什么技术栈和部署方式要在一开始就定死
源码项目在立项时最容易犯的错误,是每个模块用不同的人、不同的框架,最后集成时苦不堪言。我们的这套源码从一开始就统一技术选型,后端基于Java生态的Spring Boot框架,前端采用Vue技术栈,数据库使用MySQL,缓存采用Redis,设备数据采集走MQTT或Modbus协议接入,消息中间件使用RabbitMQ处理工单状态流转和异常事件。这个选型在制造业算是比较"稳"的组合,原因很简单:招人容易、生态成熟、网上踩坑案例多,不会因为框架太冷门把自己坑死。
部署上有一个值得强调的经验:MES要贴近车间部署,不能把服务器放在总部机房然后让车间跨专线访问。车间网络抖动一次,报工卡住,操作工就会觉得系统不好用,回头继续用纸质流转卡。所以我们源码里支持本地化部署和边缘节点缓存,报工请求先写入本地队列,网络恢复后再同步,避免现场业务被弱网卡断。很多MES失败在"不好用"三个字上,而"不好用"往往不是功能问题,是网络、界面、交互这些看起来不起眼的事。
1.2 主数据是MES的命根子,初始化就要带着治理思维
MES主数据包括物料编码、产品结构(BOM)、工艺路线、工序字典、设备台账、班组人员、工厂日历等。多数项目上线前的脏数据清理工程量,绝不亚于功能开发,这个比例在我经手的项目里大概能占到40%。源码里这几个模块的主数据都做成标准导入模板加校验逻辑,比如有了BOM没有工艺路线、有工艺路线但工序对应的资源类型不存在、设备台账里设备编号有重号,这些在导入环节就拦截掉,而不是等运行到一半再闪红灯。
实际实施中我的建议是:工艺主数据至少提前两个月开始梳理,由工艺部门牵头,MES顾问只做引导和模板培训,不要替客户梳理,否则业务部门永远不会自己用起来。工艺数据要细到什么程度呢?不是"某个零件需要车削"这种粗粒度,而是要细到"下料-粗车-精车-热处理-磨外圆-终检"每一道工序,且每一道工序要能对应到可执行的工作中心或具体设备组。排程排得准不准,七成取决于工艺数据的颗粒度,剩下三成才是算法问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工艺排程模块的实现思路:数据建模是排程能不能排准的前提
工艺排程如果只做成一个静态的工序列表展示,那就没有任何价值。它要真正发挥作用,必须
