ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

国产开源MES苦糖果:中小离散制造快速落地实践

国产开源MES苦糖果:中小离散制造快速落地实践 简介苦糖果MES系统是一款面向国内离散制造型中小企业的开源免费生产执行管理系统采用B/S架构聚焦生产调度、质量管控、设备维保与库存跟踪等核心场景有效解决中小企业缺乏专业、可落地且低成本MES工具的痛点。资源包共1429个文件主体为1150个Java业务逻辑代码与181个XML配置文件辅以SQL数据库脚本、VM模板页、YML配置及Excel报表模板等完整覆盖后端服务、前端展示、数据初始化与部署脚本如run.bat、clean.bat包体大小66.15MB结构清晰、开箱即用。已有472人学习下载资源包含软件说明书docx、多版本数据库备份.sql.gz、字体与报表模板.jasper/.jrxml及LICENSE协议文件便于快速部署、二次开发与生产环境适配是深入理解制造业MES系统设计与工程实践的优质学习样本。1. 苦糖果MES系统为什么一家国产开源MES能被中小离散制造厂连夜部署上线去年在东莞一家做五金冲压的厂里我亲眼看着产线主管用手机扫了扫车间平板上的二维码三分钟内就完成了当天27台数控车床的报工、首检记录上传和异常停机标注——用的不是某国际大厂动辄百万起的定制化MES而是「苦糖果MES」。它没有炫酷3D数字孪生大屏不强制上云不绑定硬件厂商甚至没要求IT部门写一行定制代码。核心就一条B/S结构 开源 免费 真正能进车间、被班组长点开就用的生产执行管理系统。这不是给CIO看的PPT方案而是给班组长、质检员、设备维修工用的“生产操作系统”。它专为国内离散制造业中小企业设计订单小批量多批次、工艺路线常变、设备品牌杂发那科/广数/华中/凯恩帝混用、人员IT基础弱、预算卡在5万以内。苦糖果不谈“智能制造”宏大叙事只解决三件事谁在什么设备上干了什么活、干得合不合格、出了问题能不能立刻定位到人和工序。如果你正在被ERP管不到车间、Excel手工报工错漏百出、外包MES实施周期半年起步、年服务费吃掉净利润的现实反复暴击——这篇笔记就是为你写的落地实录。2. 从零部署苦糖果MESB/S架构下最小可行环境搭建与初始化配置苦糖果MES的B/S结构是它能快速落地的底层逻辑用户端无需安装任何客户端Chrome/Firefox/Edge甚至微信内置浏览器即可访问服务端仅需一台普通Linux服务器或Windows Server对硬件无特殊要求。其开源免费属性意味着所有源码、数据库脚本、部署文档均公开可查规避了黑盒系统无法审计、升级受制于人的风险。我们以最典型的中小厂场景为例一台4核8G内存的阿里云ECSCentOS 7.9 MySQL 5.7 JDK 11 Tomcat 9全程命令行操作无图形化安装向导干扰。2.1 获取源码与环境校验避开“开源但难编译”的第一道坑首先确认服务器基础环境是否满足最低要求。苦糖果MES基于Spring Boot 2.3.x构建依赖JDK 11而非JDK 8这是很多老厂翻车的起点# 检查JDK版本必须为11.x java -version # 正确输出应类似openjdk version 11.0.22 2024-01-16 # 检查MySQL版本5.7.20不支持8.0默认认证插件 mysql --version # 正确输出mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) # 创建专用数据库字符集必须为utf8mb4否则中文工艺描述会乱码 mysql -u root -p -e CREATE DATABASE kugan_mes DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;提示不要直接用yum install javaCentOS 7默认装的是OpenJDK 1.8。必须手动下载Adoptium Temurin JDK 11 LTShttps://adoptium.net/zh-CN/temurin/releases/?version11解压后配置JAVA_HOME并加入/etc/profile。这是部署失败率最高的环节——90%的“启动报错ClassNotFoundException”源于JDK版本错配。2.2 编译打包与Tomcat部署跳过Maven中央仓库慢的玄学等待苦糖果MES源码托管在Gitee非GitHub国内访问稳定。克隆后需修改pom.xml中的仓库镜像地址避免编译时卡死# 克隆官方仓库注意分支主推v2.3.0稳定版 git clone https://gitee.com/kugan-mes/kugan-mes.git cd kugan-mes # 修改pom.xml将mirrors节点内mirrorOf值从*改为centralurl改为阿里云Maven镜像 sed -i s|mirrorOf.*/mirrorOf|mirrorOfcentral/mirrorOf|g pom.xml sed -i s|urlhttps://repo.maven.apache.org/maven2//url|urlhttps://maven.aliyun.com/repository/public/url|g pom.xml # 清理本地Maven缓存避免旧jar包冲突 rm -rf ~/.m2/repository/com/kugan/ # 执行编译跳过测试节省时间生产环境务必补测 mvn clean package -Dmaven.test.skiptrue编译成功后生成的kugan-mes-web/target/kugan-mes-web-2.3.0.war即为可部署包。将其放入Tomcat的webapps/目录前需先删除Tomcat自带的ROOT应用避免路径冲突# 停止Tomcat $TOMCAT_HOME/bin/shutdown.sh # 清空默认ROOT rm -rf $TOMCAT_HOME/webapps/ROOT # 部署WAR包重命名为ROOT.war实现根路径访问 cp kugan-mes-web/target/kugan-mes-web-2.3.0.war $TOMCAT_HOME/webapps/ROOT.war # 启动Tomcat $TOMCAT_HOME/bin/startup.sh此时访问http://服务器IP:8080若看到苦糖果登录页说明B/S服务层已通。但别急着登录——数据库尚未初始化。2.3 数据库初始化与首账号创建绕过“空库登录失败”的静默陷阱苦糖果MES不提供自动建库脚本需手动执行SQL初始化。其doc/sql/目录下包含kugan_mes_init.sql基础表结构和kugan_mes_data.sql默认组织、用户、角色数据。关键点在于执行顺序与编码# 进入MySQL选择刚创建的数据库 mysql -u root -p kugan_mes # 设置客户端编码防止SQL文件中文注释乱码导致执行中断 SET NAMES utf8mb4; # 逐条执行不可用source命令因文件含多段DELIMITERsource会解析失败 # 复制粘贴以下两段内容到MySQL命令行 -- 第一段建表语句来自kugan_mes_init.sql CREATE TABLE sys_user ( ... ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; ... -- 第二段初始数据来自kugan_mes_data.sql INSERT INTO sys_user VALUES (1,admin,e10adc3949ba59abbe56e057f20f883e,管理员,13800138000,1,2023-01-01 00:00:00); ...参数说明初始账号admin密码为明文123456MD5加密后为e10adc3949ba59abbe56e057f20f883e。生产环境首次登录后必须立即修改且密码策略强制8位以上含大小写字母数字。此设计是为降低初次使用门槛而非安全漏洞——开源系统把密码规则写死在application.yml里你随时可改。完成上述步骤后浏览器刷新http://服务器IP:8080输入admin/123456即可进入系统。此时你拥有的是一个具备完整权限的超级管理员账号后续所有业务配置如BOM管理、工艺路线、设备台账均可在Web界面内完成无需碰代码。3. 适配离散制造业的关键配置从“能用”到“真贴合产线”的三步落地法苦糖果MES的通用性不等于“开箱即用”它需要针对离散制造特性做精准配置。我们以典型冲压厂为例拆解三个不可跳过的配置层组织与权限模型、工艺BOM结构、设备数据采集协议。这三步走错一步系统就会沦为电子版Excel。3.1 构建符合车间管理习惯的组织树拒绝ERP式扁平化离散制造厂的组织结构天然分层集团→工厂→车间→班组→工位。但很多MES强行套用ERP的“公司-部门-岗位”三级模型导致班组长看不到本班组设备状态。苦糖果MES的组织管理模块支持无限级树形结构关键在于把“班组”设为最小管理单元并关联到具体设备进入【系统管理】→【组织管理】→【新增组织】名称冲压一车间-自动冲压班组类型班组下拉框有预设类型勿选“部门”上级组织选择冲压一车间负责人选择该班组班组长账号进入【设备管理】→【设备台账】→【新增设备】设备编号CNC-001设备名称200T自动冲床所属班组下拉选择刚创建的冲压一车间-自动冲压班组逻辑说明此配置使班组长登录后默认只看到本班组设备列表。当点击CNC-001时页面右侧实时显示该设备今日计划产量、已完成数、当前运行状态运行/停机/故障、最近一次报工记录。这才是“管理下沉到工位”的本质——不是功能堆砌而是数据权限按物理管理边界自动收敛。3.2 定义动态工艺BOM应对小批量多变的工艺路线离散制造的核心痛点是BOM和工艺路线频繁变更。苦糖果MES的工艺管理模块采用“版本化生效日期”机制彻底替代静态BOM物料编码物料名称工艺版本生效日期工序列表M-001不锈钢支架V2.32024-05-01下料→冲孔→折弯→焊接→喷塑M-001不锈钢支架V2.42024-06-15下料→激光切割→折弯→焊接→喷塑操作路径【基础资料】→【物料管理】→ 新增物料M-001【工艺管理】→【新增工艺】→ 输入版本号V2.3设置生效日期2024-05-01在工序列表中为每道工序指定工序名称如“冲孔”标准工时分钟所需设备类型自动关联设备台账中的“冲床”类设备是否首检工序勾选后报工时强制上传首件检验报告参数说明当订单下达时系统自动匹配生效日期≤订单开工日的最新工艺版本。若订单开工日为2024-06-20则自动选用V2.4工艺。历史订单仍沿用V2.3确保追溯准确。这种设计让工艺变更不再需要IT人员介入班组长在Web端点几下鼠标即可发布新工艺。3.3 接入异构设备数据用OPC UAModbus双协议覆盖95%国产设备离散厂设备品牌杂发那科、广数、华中、凯恩帝、台达PLC苦糖果MES不强推私有协议而是内置OPC UA客户端和Modbus TCP服务端双通道OPC UA方式推荐用于新购设备在【系统管理】→【设备接入】→【OPC UA配置】中填入设备OPC UA服务器地址如opc.tcp://192.168.1.100:4840、证书路径、读取节点ID如ns2;sChannel1.Device1.MachineStatus。系统每5秒轮询一次状态自动映射到MES设备台账的“运行状态”字段。Modbus TCP方式兼容老设备启动MES内置Modbus服务端默认端口502在设备HMI中配置Modbus主站将设备状态寄存器如40001映射至MES定义的地址如40001运行中,40002停机,40003故障。避坑重点国产设备常将“运行中”状态写入保持寄存器4xxxx但部分HMI默认读取输入寄存器3xxxx。需在设备侧确认寄存器类型并在MES Modbus配置中勾选“读取保持寄存器”。曾有客户因此调试三天最终发现是设备工程师把寄存器类型填反了。4. 避坑指南中小厂部署苦糖果MES的5个血泪经验部署苦糖果MES看似简单但在真实产线环境中以下问题出现频率极高。这些不是文档里写的“注意事项”而是我在17家工厂踩坑后总结的硬核排查清单4.1 现象登录后首页空白F12控制台报Failed to load resource: net::ERR_CONNECTION_REFUSED原因Tomcat启动后前端静态资源JS/CSS未正确加载本质是application.yml中server.servlet.context-path配置为空但Nginx反向代理时加了/mes前缀导致资源路径错乱。解决检查src/main/resources/application.yml确保server.servlet.context-path值为空字符串而非/或/mes。若需反向代理应在Nginx配置中统一处理路径而非在应用层硬编码。4.2 现象报工时提示“工艺路线不存在”但工艺管理中明明已创建原因工艺版本的“生效日期”早于订单的“计划开工日期”系统按严格日期匹配不会自动降级到上一版本。解决进入【生产管理】→【订单管理】打开对应订单检查“计划开工日期”再进入【工艺管理】核对工艺版本的“生效日期”是否≤该日期。若需历史订单沿用旧工艺可临时新增一个生效日期为订单日期的旧版本工艺。4.3 现象设备状态始终显示“离线”OPC UA连接测试通过原因OPC UA服务器启用了匿名访问限制而苦糖果MES默认以anonymous身份连接部分国产PLC如汇川H3U需显式配置用户名密码。解决在【设备接入】→【OPC UA配置】中勾选“启用认证”输入PLC侧配置的用户名如admin和密码默认常为123456保存后重启Tomcat。4.4 现象手机浏览器访问正常但微信内置浏览器白屏原因微信iOS版对localStorage容量限制极严约2MB苦糖果MES前端缓存了大量字典数据如工序类型、检验项目超出限制后JS执行中断。解决修改src/main/resources/static/js/common.js在initDictData()函数开头添加容量检测与清理逻辑// 微信浏览器专用清理 if (navigator.userAgent.indexOf(MicroMessenger) -1) { if (localStorage.length 500) { localStorage.clear(); // 强制清空依赖后端实时拉取 } }重新编译部署即可。4.5 现象导出Excel报表时中文乱码显示为??原因Tomcat启动脚本未指定JVM参数-Dfile.encodingUTF-8导致Java进程默认编码为ISO-8859-1。解决编辑$TOMCAT_HOME/bin/catalina.sh在JAVA_OPTS变量中追加JAVA_OPTS$JAVA_OPTS -Dfile.encodingUTF-8重启Tomcat生效。此问题在CentOS 7上100%复现Windows环境因系统默认编码为GBK反而不易出现。5. 让MES真正驱动改进用过程数据反哺工艺优化的实战技巧部署完成只是起点真正的价值在于让数据流动起来。苦糖果MES不提供AI分析模块但它开放了完整的RESTful API和数据库视图我把最实用的三个数据驱动技巧分享给你5.1 实时监控看板用免费Grafana对接MES数据库苦糖果MES的MySQL数据库中mes_production_order生产订单、mes_work_order工单、mes_device_log设备日志三张表构成核心数据链。我们用Grafana直连MySQL构建产线实时看板面板指标SQL查询示例业务价值设备综合效率OEESELECT device_code, ROUND(AVG(CASE WHEN statusrunning THEN 1 ELSE 0 END)*100,2) oee FROM mes_device_log WHERE create_time DATE_SUB(NOW(), INTERVAL 1 HOUR) GROUP BY device_code识别低效设备聚焦改善当前在制订单TOP5SELECT order_no, material_name, plan_qty, finish_qty, ROUND(finish_qty/plan_qty*100,1) progress FROM mes_production_order WHERE statusprocessing ORDER BY progress ASC LIMIT 5快速定位交付风险订单首检不合格TOP3工序SELECT process_name, COUNT(*) fail_count FROM mes_inspection_record WHERE resultNG AND create_time DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY process_name ORDER BY fail_count DESC LIMIT 3锁定质量薄弱环节落地要点Grafana数据源配置时MySQL连接URL需添加?useUnicodetruecharacterEncodingutf8mb4参数否则中文字段名会乱码。看板部署在厂务办公室电视墙上班组长每天晨会前5分钟就能掌握产线健康度。5.2 工艺参数闭环把设备采集数据反写回工艺标准离散制造的工艺标准常是“纸上谈兵”。我们利用苦糖果MES的API将设备实际加工参数如冲床压力、模具温度自动更新到工艺版本中编写Python脚本每15分钟调用设备日志API获取CNC-001的平均压力值import requests # 调用MES设备日志API需Token认证 url http://mes-server:8080/api/device/log?deviceCodeCNC-001startTime2024-06-20%2000:00:00endTime2024-06-20%2023:59:59 headers {Authorization: Bearer xxxxx} res requests.get(url, headersheaders) avg_pressure calculate_avg_pressure(res.json()) # 自定义计算函数将计算结果通过/api/process/version/update接口写入M-001物料当前工艺版本的“冲孔工序”备注字段update_data { versionId: v2.4, processName: 冲孔, remark: f实测平均压力{avg_pressure}MPa近24h } requests.post(http://mes-server:8080/api/process/version/update, jsonupdate_data, headersheaders)效果工艺工程师在Web端查看M-001的V2.4工艺时“冲孔”工序的备注栏自动显示实测压力值。当新员工培训时看到的不再是“压力设定值50MPa”而是“历史实测均值48.2MPa”大幅降低调机试错成本。5.3 质量追溯提速用扫码枪3秒定位问题源头传统追溯需人工翻查纸质记录苦糖果MES通过报工单号串联全链路数据。我们在车间部署扫码枪实现“一扫即溯”扫码触发逻辑扫描报工单号如WO-20240620-001→ 调用API/api/work/order/detail?orderNoWO-20240620-001→ 返回JSON含{ materialCode: M-001, processVersion: V2.4, deviceCode: CNC-001, operator: 张三, firstInspection: { result: OK, reportUrl: /files/report_001.pdf }, defectRecords: [ { defectType: 毛刺, position: 边缘A区 } ] }终端展示扫码枪连接安卓平板用Termux运行轻量HTTP客户端解析JSON后高亮显示【物料】M-001 不锈钢支架 | 【设备】CNC-001 | 【操作员】张三 | 【缺陷】毛刺边缘A区我的习惯把扫码查询页面做成PWA渐进式Web应用添加到平板桌面图标命名为“追溯快查”。质检员遇到客诉时不再跑办公室查系统蹲在产线边扫一下单号3秒内锁定责任人和工序。这比任何KPI考核都管用——数据透明本身就是最好的管理。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进