2、设备状态模型基础:GEM状态机模型的核心概念、状态与事件的定义、状态转换图的作用
在SECS/GEM协议体系中,设备状态模型是连接上位机(Host)与设备行为的核心契约。GEM标准定义了一套通用的状态机模型,用于描述设备从启动到运行、再到停止的完整生命周期。理解这一模型,是进行设备模式切换工程实施的前提。
2.1 核心概念:为什么需要状态机模型?
半导体制造设备通常包含多个物理模块(如传输腔、工艺腔、冷却台),每个模块在不同时刻处于不同工作模式。若缺乏统一的状态描述,上位机将无法准确判断设备当前是否可接收物料、是否正在工艺中、是否发生故障。GEM状态机模型解决了以下三个关键问题:
- 统一语义:为设备所有可能的行为阶段定义标准名称(如 INIT、ATTEMPT_ONLINE、EQUIPMENT_OFFLINE)。
- 行为约束:规定在某个状态下,设备允许执行哪些SECS消息(如 S1F13、S2F41),禁止执行哪些操作。
- 可预测性:通过状态转换图,上位机可预判设备对控制指令的响应路径。
工程要点: 设备供应商与工厂MES系统之间的联调,80%的通信异常源于状态机未正确实现或状态转换条件遗漏。务必在设备出厂前完成状态机一致性测试。
2.2 状态与事件的定义
GEM标准将设备状态划分为三个层级:通信状态、控制状态、处理状态。其中,控制状态是模式切换的核心,它直接决定了设备是否接受远程控制。
2.2.1 控制状态(Control State)
控制状态是设备状态模型中最关键的部分,定义了设备对上位机指令的响应策略。GEM标准定义了以下四种控制状态:
| 状态名称 | 状态码 | 描述 | 典型行为 |
|---|---|---|---|
| OFFLINE | 1 | 设备完全本地控制,不接受任何远程指令 | 操作员面板完全接管;SECS通信保持但拒绝S2F41 |
| EQUIPMENT_OFFLINE | 2 | 设备处于离线但可被远程请求上线 | 可接收S1F13请求,但工艺操作仍由本地控制 |
| ATTEMPT_ONLINE | 3 | 设备正在尝试切换到在线模式 | 执行内部安全检查;若通过则进入ONLINE |
| ONLINE | 4 | 设备完全受上位机控制 | 接收S2F41远程指令;自动报告事件 |
2.2.2 通信状态(Communication State)
通信状态描述设备与上位机之间的连接状态,与控制状态相互独立但存在联动关系:
- NOT_CONNECTED:物理链路未建立(如网线断开)。
- CONNECTED:TCP连接已建立,但尚未完成S1F13/S1F14握手。
- COMMUNICATING:已完成握手,处于正常数据交换状态。
2.2.3 事件(Event)的定义
事件是触发状态转换的驱动因素。GEM标准将事件分为三类:
| 事件类别 | 示例 | 触发条件 |
|---|---|---|
| 外部指令事件 | GO_ONLINE (S1F13) | 上位机发送请求 |
| 内部条件事件 | 安全门关闭、工艺完成 | 设备传感器或PLC信号 |
| 故障事件 | 通信超时、硬件异常 | 设备自检或看门狗触发 |
设计建议: 在定义设备事件时,建议将每个事件与唯一的CEID(Collection Event ID)绑定。CEID是GEM中上报事件的标准ID,便于上位机进行日志关联和报警处理。
2.3 状态转换图的作用
状态转换图(State Transition Diagram)是状态机模型的图形化表达,在工程实施中具有不可替代的作用:
- 需求确认:设备供应商与客户通过状态图对齐行为预期,避免文字描述歧义。
- 代码实现:开发人员可直接将状态图映射为有限状态机(FSM)代码结构。
- 测试用例设计:每条转换路径对应一个测试用例,确保覆盖率。
- 故障排查:当设备行为异常时,通过当前状态和触发事件快速定位转换路径是否合法。
2.3.1 控制状态转换图(SVG)
下图展示了GEM标准中控制状态的核心转换路径,包含四个主要状态节点和六条转换边:
2.4 状态转换表与工程映射
在工程实现中,状态转换图通常需要辅以状态转换表,以明确每条转换的触发事件、前置条件和后置动作。下表展示了控制状态转换的完整定义:
| 当前状态 | 触发事件 | 前置条件 | 目标状态 | 后置动作 |
|---|---|---|---|---|
| OFFLINE | 操作员按下“远程允许” | 设备无活动报警 | EQUIPMENT_OFFLINE | 启用SECS远程请求监听 |
| EQUIPMENT_OFFLINE | 收到S1F13 | 通信状态为COMMUNICATING | ATTEMPT_ONLINE | 启动安全检查定时器 |
| ATTEMPT_ONLINE | 安全检查通过 | 所有工艺腔处于IDLE | ONLINE | 发送S1F14;启用远程控制 |
| ATTEMPT_ONLINE | 安全检查失败 | 任一条件不满足 | EQUIPMENT_OFFLINE | 发送S1F14 with ACK6;记录错误码 |
| ONLINE | 收到S1F15 | 无正在执行的工艺 | EQUIPMENT_OFFLINE | 停止远程控制;释放资源 |
| ONLINE | 通信超时 | 无 | EQUIPMENT_OFFLINE | 触发报警;进入安全模式 |
常见工程陷阱: 部分设备在 ONLINE 状态下收到 S1F15 后,直接跳转到 OFFLINE 而非 EQUIPMENT_OFFLINE,这会导致上位机失去对设备的控制权。务必遵循GEM标准:从 ONLINE 只能回到 EQUIPMENT_OFFLINE,不能直接回到 OFFLINE。
2.5 状态机模型的工程落地建议
在设备软件开发中,建议采用以下步骤将GEM状态机模型落地:
- 定义状态枚举:在代码中创建 ControlState 枚举,包含 OFFLINE、EQUIPMENT_OFFLINE、ATTEMPT_ONLINE、ONLINE。
- 实现状态转换矩阵:使用二维数组或状态模式(State Pattern)管理转换逻辑,避免 if-else 泛滥。
- 绑定事件回调:将SECS消息处理函数(如 S1F13 处理函数)与状态转换条件关联。
- 添加状态保护:在状态转换入口处校验前置条件,防止非法转换。
- 记录状态日志:每次状态转换时输出时间戳、旧状态、新状态、触发事件,便于调试。
// 示例:C++ 状态转换矩阵(伪代码)
ControlState transitionTable[4][4] = {
// 当前状态: OFFLINE
{ OFFLINE, EQUIPMENT_OFFLINE, INVALID, INVALID },
// 当前状态: EQUIPMENT_OFFLINE
{ OFFLINE, EQUIPMENT_OFFLINE, ATTEMPT_ONLINE, INVALID },
// 当前状态: ATTEMPT_ONLINE
{ INVALID, EQUIPMENT_OFFLINE, ATTEMPT_ONLINE, ONLINE },
// 当前状态: ONLINE
{ INVALID, EQUIPMENT_OFFLINE, INVALID, ONLINE }
};
ControlState getNextState(ControlState current, Event event) {
int row = static_cast<int>(current);
int col = static_cast<int>(event);
ControlState next = transitionTable[row][col];
if (next == INVALID) {
// 记录非法转换报警
logError("Invalid state transition");
return current; // 保持当前状态
}
return next;
}
进阶提示: 对于复杂设备(如簇式工具),建议为每个物理模块独立维护一个状态机实例,并通过全局协调器管理模块间的状态依赖关系。例如,传输腔处于 ONLINE 状态时,工艺腔才能从 IDLE 切换到 PROCESSING。