3. GEM 设备状态模型:核心状态定义

GEM(Generic Equipment Model)标准定义了半导体设备必须实现的一组有限状态机(Finite State Machine, FSM),用于规范设备在通信与自动化环境中的行为。设备状态模型是 GEM 功能验证的基石,所有 SECS 消息的收发、控制权限的切换、报警与事件的上报,都必须在正确的设备状态下执行。

核心概念: GEM 设备状态模型包含 5 个主要状态:INIT、NOT_READY、READY、LOCAL、REMOTE。其中 LOCAL 和 REMOTE 属于控制状态(Control State),INIT、NOT_READY、READY 属于通信状态(Communication State)。设备在任何时刻都同时处于一个通信状态和一个控制状态。

3.1 通信状态(Communication State)

通信状态描述设备与主机(Host)之间的连接与数据交换能力。GEM 定义了三种通信状态:

状态 缩写 定义 典型行为
INIT 初始态 设备上电或复位后的初始状态,尚未建立与主机的通信链路。 设备自检、加载配置;不响应 SECS 消息;等待连接建立。
NOT_READY 未就绪 设备已与主机建立连接,但尚未完成初始化协商或处于离线维护模式。 可接收部分管理消息(如 S1F13/F14);不处理生产相关指令。
READY 就绪 设备已完成初始化,与主机通信正常,可接收并执行所有 GEM 消息。 正常生产通信;支持数据收集、报警、远程控制等全部功能。
验证要点: 在 GEM 符合性测试中,必须验证设备能否在 INIT 状态下正确响应 S1F13(Establish Communications Request),并在收到 S1F14 后正确迁移到 NOT_READY 或 READY 状态。

3.2 控制状态(Control State)

控制状态决定设备操作权限的归属——是由本地操作员控制,还是由远程主机控制。GEM 定义了两种控制状态:

状态 定义 控制权归属 典型场景
LOCAL 本地控制 设备面板/本地操作员 设备调试、维护、手动操作;主机仅可读取状态,不可下发控制指令。
REMOTE 远程控制 主机(Host) 自动化生产线;主机可下发启动、停止、参数设置等控制指令。
安全约束: 从 REMOTE 切换到 LOCAL 必须经过操作员确认(通常通过硬件钥匙开关或软件确认对话框),防止主机意外断开导致设备失控。GEM 标准要求设备在 REMOTE 状态下必须支持 S2F17/F18(Remote Command)消息。

3.3 状态组合与迁移

设备在任何时刻都处于一个通信状态与一个控制状态的组合。GEM 标准定义了 6 种有效组合(3 种通信状态 × 2 种控制状态),但实际设备通常只使用以下 4 种常见组合:

  • INIT + LOCAL:上电初始,本地控制
  • NOT_READY + LOCAL:连接建立但未就绪,本地维护
  • READY + LOCAL:通信正常,本地操作
  • READY + REMOTE:通信正常,远程自动化控制(生产模式)

以下 SVG 图展示了 GEM 设备状态机的核心状态迁移路径:

GEM 设备状态机核心状态迁移图 GEM 设备状态机核心状态迁移 通信状态(Communication State) INIT 初始态 NOT_READY 未就绪 READY 就绪 S1F13/F14 初始化完成 控制状态(Control State) LOCAL 本地控制 REMOTE 远程控制 S2F17 远程命令 操作员确认切换 有效状态组合 INIT+LOCAL → NOT_READY+LOCAL → READY+LOCAL → READY+REMOTE(生产模式)

3.4 状态迁移触发条件

设备状态迁移由特定事件或 SECS 消息触发。以下是主要迁移路径的触发条件:

  1. INIT → NOT_READY:设备收到并响应 S1F13(Establish Communications Request),发送 S1F14 后进入 NOT_READY。
  2. NOT_READY → READY:设备完成内部初始化(如加载配方、校准传感器),自动迁移到 READY。
  3. READY → NOT_READY:设备发生严重故障、通信中断或收到 S1F15(Request OFF-LINE)消息。
  4. LOCAL → REMOTE:主机发送 S2F17(Remote Command)且设备允许远程控制。
  5. REMOTE → LOCAL:操作员在设备面板上切换控制模式(通常需要硬件确认)。
验证清单: 在 GEM 功能验证中,必须逐项测试以下状态迁移场景:
• 上电后设备是否进入 INIT+LOCAL
• 主机发送 S1F13 后设备是否迁移到 NOT_READY
• 设备初始化完成后是否自动进入 READY
• 在 READY 状态下主机能否通过 S2F17 切换到 REMOTE
• 操作员能否从 REMOTE 切换回 LOCAL

3.5 状态相关的 GEM 功能约束

不同设备状态下,GEM 功能的可用性有严格约束。以下表格总结了核心功能在各状态下的支持情况:

GEM 功能 INIT NOT_READY READY LOCAL REMOTE
建立通信(S1F13/F14) ✓ 必须 — — — —
数据收集(S6F11/F12) ✗ ✗ ✓ ✓ ✓
报警管理(S5F1/F2) ✗ ✓ 仅清除 ✓ ✓ ✓
远程命令(S2F17/F18) ✗ ✗ ✓ ✗ ✓
变量读取(S2F13/F14) ✗ ✓ 部分 ✓ ✓ ✓
设计建议: 在设备软件架构中,建议将状态机实现为一个独立模块,所有 SECS 消息处理函数在执行前先检查当前设备状态。如果消息在当前状态下不允许,应返回 S9F1(Unrecognized Device ID)或 S9F5(Invalid Message Type)错误响应。

3.6 状态机实现示例(伪代码)

以下伪代码展示了设备状态机的基本实现框架:

// 设备状态枚举
enum CommState { INIT, NOT_READY, READY };
enum ControlState { LOCAL, REMOTE };

// 设备状态结构体
struct DeviceState {
    CommState comm;
    ControlState ctrl;
};

// 状态迁移函数
bool transitionTo(DeviceState& current, CommState newComm, ControlState newCtrl) {
    // 验证迁移合法性
    if (current.comm == INIT && newComm == NOT_READY) {
        // 允许:收到 S1F13 响应
    } else if (current.comm == NOT_READY && newComm == READY) {
        // 允许:初始化完成
    } else if (current.ctrl == LOCAL && newCtrl == REMOTE) {
        // 允许:收到 S2F17 且设备支持远程
    } else {
        return false;  // 非法迁移
    }
    
    // 执行迁移
    current.comm = newComm;
    current.ctrl = newCtrl;
    
    // 触发状态变更事件
    onStateChanged(current);
    return true;
}

// SECS 消息处理示例
void handleS1F13(DeviceState& state) {
    if (state.comm == INIT) {
        transitionTo(state, NOT_READY, state.ctrl);
        sendS1F14();  // 发送确认响应
    } else {
        sendS9F5();   // 发送错误响应
    }
}
常见错误: 在 GEM 验证中,经常发现设备在 NOT_READY 状态下错误地执行了远程命令(S2F17),或者在 LOCAL 状态下响应了主机下发的控制指令。这些行为违反了 GEM 状态模型,会导致验证失败。务必在代码中实现严格的状态检查。