做中小工厂项目做多了你会发现一件事:大厂的MES和小厂的MES完全不是同一个东西。
大厂要的是全流程覆盖、高并发、多工厂协同。中小工厂没那么复杂——能用就行、便宜最好、出了问题有人能修。30个人的厂,5到10道工序,系统搭得再高级人家也用不上。
这篇文章不讲空话,直接说我自己的技术选型和落地经验。Spring Boot也好Vue也好,都是实操下来确实省事的方案。想省钱或者想自己搭一套的,应该能拿去直接用。
架构:能用单体就别碰微服务
这是我最想说的。很多技术同学一上来就微服务、K8s、消息队列。我看着都心疼。中小工厂的并发量和业务复杂度远没到那个地步。微服务带来的运维复杂度对一两台服务器跑完全部业务的小厂来说,完全是给自己找麻烦。
前端:Web管理端(Vue3)+ 工人扫码端(H5或者小程序) ↓ REST API (JWT) 后端:Spring Boot + MySQL + Redis ↓ Modbus/MQTT(可选) 设备:扫码枪 + 打印机 + PLC(可选,初期不建议上)前后端分离,后端单体应用。不整花活。
技术选型:够用就行
| 层面 | 建议 | 为什么 |
|---|---|---|
| 后端 | Spring Boot 3.x | 成熟稳定,路边找个初中级Java就能维护 |
| 数据库 | MySQL 8.0 | 30人的厂一年能产生多少数据你自己算,MySQL完全扛得住 |
| 缓存 | Redis | 看板数据缓存和JWT令牌管理,够用了 |
| 前端管理端 | Vue 3 + Element Plus | 开发效率高,组件库省事 |
| 移动扫码端 | uni-app | 一套代码跑H5和小程序,工人用手机浏览器或微信扫码就能打开,不用装App |
| 设备对接 | Modbus TCP / MQTT | 留着扩展用就好,初期别碰PLC,不是搞不定,是一旦接了设备,现场调试能把你耗死 |
| 部署 | Docker Compose | 一条命令拉起所有服务,运维门槛最 |
前后端分离,后端单体应用。不整花活。
数据库设计:三张核心表就够了
很多MES系统设计上来就十几二十张表,没必要。先把这几张跑通:
-- 工单表 CREATE TABLE work_order ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(32) NOT NULL UNIQUE, product_name VARCHAR(100), quantity INT NOT NULL, completed_quantity INT DEFAULT 0, status TINYINT DEFAULT 0 COMMENT '0待生产 1生产中 2已完成 3已关闭', plan_start_time DATETIME, actual_start_time DATETIME, actual_end_time DATETIME, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 工序记录表 CREATE TABLE process_record ( id BIGINT PRIMARY KEY AUTO_INCREMENT, work_order_id BIGINT NOT NULL, process_seq INT NOT NULL COMMENT '工序序号', process_name VARCHAR(50), worker_id BIGINT, status TINYINT DEFAULT 0 COMMENT '0待处理 1处理中 2已完成', start_time DATETIME, end_time DATETIME, good_count INT DEFAULT 0, defect_count INT DEFAULT 0 ); -- 质量记录表 CREATE TABLE quality_record ( id BIGINT PRIMARY KEY AUTO_INCREMENT, work_order_id BIGINT NOT NULL, process_record_id BIGINT, defect_type VARCHAR(30), defect_count INT DEFAULT 0, inspector_id BIGINT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );等这些跑顺了,再慢慢加物料批次、设备管理、计件工资那些。别想一次性全做完。
核心流程:工单下发到扫码报工
代码我直接放关键逻辑,看思路就行。
工单下发时自动拆工序:
工单创建的时候,系统根据产品关联的工艺路线模板,自动把工单拆成工序记录。每个工序是一条记录,工人到了这一步扫码就能开始做。这个自动拆单的逻辑是MES最基础也最核心的——没有工序级管理,就不叫MES。
扫码报工逻辑:
工人到了工位,扫一下工单上的二维码。系统查到当前工序,如果是待处理状态就更新为处理中、记录开始时间和操作人。如果是处理中状态就更新为已完成、记录完工数量和不良品数量。同时更新工单上的累计完成数量。
就这两步。工人不用碰电脑,不用填表单,扫码就行。这就是MES落地成功的第一个信号——工人不反感用、不需要培训。
看板实时刷新:
老板和车间主任最需要的就是一块屏。上面显示今天总共多少工单、完成了多少、超期了多少、不良率多少。数据放Redis里缓存60秒,前端定时拉一下,页面自动刷新。够了。不要搞花里胡哨的BI仪表盘,中小厂没人看。
部署:一条命令
version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: mes2024! MYSQL_DATABASE: mes volumes: - mysql_data:/var/lib/mysql redis: image: redis:7-alpine backend: build: ./backend ports: - "8080:8080" depends_on: - mysql - redis nginx: image: nginx:alpine ports: - "80:80" volumes: - ./frontend/dist:/usr/share/nginx/html一台服务器,跑四个容器。后端Spring Boot打jar包做成镜像,前端Vue项目build完挂到Nginx上。第一次部署我会过去帮忙搭,后面出问题远程SSH上去看两眼就修好了。
几点实在的建议
说几个踩坑踩出来的经验吧。
先跑通三个核心功能再谈别的。工单创建、扫码报工、实时看板。这三件事跑顺了,两周够了。质量模块、设备对接、报表分析,后头慢慢加。很多项目死在"想一口气做完全部功能"——做到一半老板觉得太久看不到效果,项目就黄了。
PLC设备对接初期别碰。不是技术上做不了,是一旦接了设备,现场调试的时间成本你扛不住。PLC型号不同协议不同、接线方式不同、通讯动不动中断。初期让人工扫码先跑起来,等系统在车间站稳了,再考虑加设备数据采集。
报表模块放在最后。前期老板最想看的就是那张实时看板——今天干了多少、做得怎么样。你先把看板做得漂漂亮亮的,老板看得爽了,自然会问能不能出个月度报表。那时候再加不迟。
生产工单系统区别于ERP,主要的功能还是要围绕着生产管理来设计的,对接工业标签打印机,让整个生产流程数字化起来,让管理更加可控