中小工厂MES系统,技术方案怎么落地最省事

做中小工厂项目做多了你会发现一件事:大厂的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.030人的厂一年能产生多少数据你自己算,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,主要的功能还是要围绕着生产管理来设计的,对接工业标签打印机,让整个生产流程数字化起来,让管理更加可控