在 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)

组成的可计算系统。


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐