【MES系统】工业级状态机设计:如何构建可扩展的生产流程引擎
在 MES、WMS、设备管理、工艺执行等工业系统中,很多项目在早期都能快速开发,但随着业务复杂度增加,系统往往会逐渐失控:
- 状态字段越来越多
- if-else 越来越长
- 流程越来越难维护
- 插单、返工、暂停逻辑混乱
- 状态跳转不可追溯
- 系统出现大量“非法状态”
最终:
系统不再是“流程驱动”,而变成了“代码堆叠”。
其根本原因通常只有一个:
缺少真正的“工业级状态机设计”。

本文从工业 MES 场景出发,系统介绍:
- 为什么工业系统必须使用状态机
- 如何设计可扩展状态机
- 如何构建生产流程引擎
- Java中的典型实现思路
一、为什么工业系统天然适合状态机?
工业系统最大的特点是:
一切都在“状态变化”。
例如:
工单状态
待生产 → 生产中 → 暂停 → 完成
工序状态
未开始 → 执行中 → 已完成
设备状态
运行 → 故障 → 维修 → 恢复
物料状态
待入库 → 已入库 → 已领料 → 已消耗
工业系统本质上不是 CRUD 系统,而是:
“状态流转系统”。
二、传统流程代码为什么一定会崩?
很多 MES 系统最初都会这样写:
if(order.getStatus().equals("CREATED")) {
order.setStatus("RUNNING");
}
后面增加:
if(machineFault) {
order.setStatus("SUSPENDED");
}
再后来:
if(rework) {
order.setStatus("REWORK");
}
最终变成:
- 巨量 if-else
- 状态跳转失控
- 无法审计
- 无法回放
- 无法扩展
三、工业级状态机的核心思想
工业级状态机并不是:
“一个状态字段”。
而是:
“状态 + 事件 + 规则”
四、状态机核心模型
标准模型包含四部分:
| 模型 | 作用 |
|---|---|
| State(状态) | 当前阶段 |
| Event(事件) | 驱动变化 |
| Transition(迁移) | 状态切换规则 |
| Action(动作) | 状态切换后执行逻辑 |
五、一个标准工单状态机
例如:
CREATED
↓
PLANNED
↓
RELEASED
↓
RUNNING
↓
COMPLETED
↓
CLOSED
同时允许:
RUNNING → SUSPENDED
SUSPENDED → RUNNING
RUNNING → REWORK
六、工业系统为什么一定要“事件驱动”?
因为现实世界并不是线性的。
生产过程会受到:
- 设备故障
- 缺料
- 插单
- 人工干预
- 网络异常
影响。
因此:
状态变化必须由“事件”触发。
七、事件模型设计(关键)

事件不是日志。
而是:
“现实世界发生的事实”。
常见事件类型
工单事件
OrderCreated
OrderReleased
OrderStarted
OrderCompleted
工序事件
OperationStarted
OperationFinished
设备事件
MachineStarted
MachineStopped
MachineFault
人工事件
PauseRequested
ResumeRequested
八、Transition(状态迁移)设计

这是状态机真正的核心。
标准结构
| 当前状态 | 事件 | 下一个状态 |
|---|---|---|
| CREATED | RELEASE | RELEASED |
| RELEASED | START | RUNNING |
| RUNNING | COMPLETE | COMPLETED |
| RUNNING | PAUSE | SUSPENDED |
九、为什么“状态迁移表”非常重要?
因为它解决了:
“状态是否合法”
例如:
❌ 非法:
CREATED → COMPLETED
必须禁止。
十、工业级状态机的关键能力
真正的工业级状态机,必须支持:
1. 可回退
例如:
RUNNING → REWORK
2. 可暂停
RUNNING → SUSPENDED
3. 可恢复
SUSPENDED → RUNNING
4. 可追溯
必须知道:
- 谁触发
- 为什么触发
- 什么时候触发
5. 可审计
所有状态变化必须保留历史。
十一、生产流程引擎的核心设计

状态机再往上,就是:
生产流程引擎(Workflow Engine)
核心职责
流程引擎负责:
- 驱动状态流转
- 执行动作
- 调度资源
- 处理异常
- 记录历史
十二、一个标准流程引擎结构
Event
↓
StateMachine
↓
Transition Resolver
↓
Action Executor
↓
Persistence
↓
Event Bus
十三、各模块职责
1. Event Bus(事件总线)
负责:
- 接收事件
- 分发事件
例如:
MachineFault
OrderCompleted
2. StateMachine(状态机核心)
负责:
- 判断状态是否合法
- 计算下一状态
3. Transition Resolver
负责:
- 查找迁移规则
例如:
RUNNING + PAUSE
→ SUSPENDED
4. Action Executor
负责:
- 执行业务动作
例如:
- 发送通知
- 更新库存
- 记录日志
5. Persistence
负责:
- 状态持久化
- 历史记录
十四、工业级状态机的 Java 实现思路

1. 状态定义
推荐使用枚举:
public enum OrderStatus {
CREATED,
RELEASED,
RUNNING,
SUSPENDED,
COMPLETED
}
2. 事件定义
public enum OrderEvent {
RELEASE,
START,
PAUSE,
RESUME,
COMPLETE
}
3. Transition 模型
public class Transition {
private OrderStatus from;
private OrderEvent event;
private OrderStatus to;
}
4. Transition 注册
Map<Key, Transition> transitions;
Key:
(fromState + event)
5. 状态流转核心逻辑
public OrderStatus transit(
OrderStatus current,
OrderEvent event
) {
Transition transition =
transitions.get(
new Key(current, event)
);
if (transition == null) {
throw new IllegalStateException(
"非法状态流转"
);
}
return transition.getTo();
}
十五、Action 机制(非常关键)
工业系统不能只有状态变化。
还必须支持:
“状态变化后的动作”。
示例
RUNNING → COMPLETED
触发:
- 更新产量
- 更新库存
- 推送 ERP
- 写入追溯记录
Java 实现
public interface Action {
void execute(Context context);
}
十六、为什么推荐“配置化状态机”?
工业流程会频繁变化。
例如:
- 新增返工流程
- 新增审批节点
- 新增暂停逻辑
如果写死代码:
系统会迅速失控。
推荐做法
将:
- 状态
- 事件
- Transition
配置化。
例如:
{
"from": "RUNNING",
"event": "PAUSE",
"to": "SUSPENDED"
}
十七、工业状态机与工作流的区别
很多人会混淆:
| 类型 | 特点 |
|---|---|
| 工作流 | 面向审批 |
| 状态机 | 面向生产状态 |
MES 更适合:
状态机模型。
十八、工业系统真正高级的设计
真正成熟的工业系统:
不是:
“功能驱动”
而是:
“状态 + 事件驱动”
十九、一个汽车零部件工厂示例
下面以“汽车刹车盘加工”为例,说明状态机在离散制造中的实际运行。
1. ERP下发生产订单
订单:生产 5000 件刹车盘
MES 创建工单:
WO-20260501
状态:CREATED
2. 工艺路线拆解
系统生成工序:
毛坯入库
→ 粗车加工
→ 精车加工
→ 动平衡检测
→ 清洗
→ 包装
3. 工单释放
事件:
RELEASE
状态流转:
CREATED → RELEASED
4. 开始加工
CNC车床开始执行:
START
状态变化:
RELEASED → RUNNING
同时:
Operation-粗车 → RUNNING
5. 设备故障
加工过程中:
某台 CNC 主轴报警。
设备系统发送事件:
MachineFault
流程引擎触发:
RUNNING → SUSPENDED
并自动执行:
- 暂停后续上料
- 通知维修人员
- 记录停机时间
- 更新 OEE
6. 故障恢复
维修完成后:
ResumeRequested
状态恢复:
SUSPENDED → RUNNING
7. 质检不合格
动平衡检测发现部分产品超差。
系统触发:
QualityFailed
状态进入:
RUNNING → REWORK
系统自动:
- 创建返工工序
- 记录不良原因
- 更新质量追溯链
8. 工单完成
全部工序结束:
COMPLETE
状态:
RUNNING → COMPLETED
随后:
- 更新库存
- 回传 ERP
- 生成生产报表
- 归档追溯数据
二十、总结
工业级状态机设计的核心,不是:
- 状态字段
- if-else
- 流程图
而是:
将现实世界的生产过程,抽象为:
- 状态(State)
- 事件(Event)
- 迁移(Transition)
- 动作(Action)
组成的可计算系统。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐





所有评论(0)