3. 配方管理模型:GEM 标准中的配方管理状态机
在 SECS/GEM 协议中,配方(Recipe)是设备执行特定工艺所需的参数集合。GEM 标准定义了一套完整的配方管理状态机(Recipe Management State Machine),用于规范设备在配方上传、下载、删除、校验等操作中的行为。理解该状态机是设计可靠配方流程的基础。
3.1 配方管理状态机的核心状态
GEM 标准将配方管理划分为以下 5 个关键状态,设备在任何时刻只能处于其中一个状态:
| 状态名称 | 状态 ID | 描述 | 允许的操作 |
|---|---|---|---|
| 配方空闲 | Recipe Idle | 设备未加载任何配方,或配方已卸载 | 上传、下载、删除配方 |
| 配方加载中 | Recipe Loading | 正在从主机接收配方数据(下载中) | 仅接收数据块,拒绝其他请求 |
| 配方已加载 | Recipe Loaded | 配方数据已完整接收,但尚未校验或激活 | 校验、激活、删除 |
| 配方校验中 | Recipe Verifying | 正在对配方数据进行完整性或语法校验 | 仅校验过程,拒绝其他请求 |
| 配方激活 | Recipe Active | 配方已通过校验,可用于生产 | 执行工艺、卸载、替换 |
设计要点: 配方管理状态机与设备通信状态机(COMM State Machine)相互独立。即使设备处于离线状态,配方管理状态机仍可保持在“配方已加载”或“配方激活”状态,确保配方数据不因通信中断而丢失。
3.2 配方管理状态机转换图
下图展示了配方管理状态机中所有允许的状态转换路径,以及触发转换的关键事件:
3.3 状态转换事件与触发条件
每个状态转换都由特定的 GEM 消息或本地事件触发。下表列出了主要转换的事件源:
| 源状态 | 目标状态 | 触发事件 | GEM 消息示例 |
|---|---|---|---|
| 配方空闲 | 配方加载中 | 主机发送下载请求 | S7F3 (Process Program Send) |
| 配方加载中 | 配方已加载 | 所有数据块接收完毕 | S7F5 (Process Program Request) 完成 |
| 配方已加载 | 配方校验中 | 主机或本地发起校验 | S7F19 (Process Program Verify) |
| 配方校验中 | 配方激活 | 校验通过 | S7F20 (Verify Result = 0) |
| 配方校验中 | 配方已加载 | 校验失败 | S7F20 (Verify Result ≠ 0) |
| 配方激活 | 配方空闲 | 卸载配方 | S7F17 (Delete Process Program) |
| 配方已加载 | 配方空闲 | 删除配方 | S7F17 (Delete Process Program) |
3.4 配方管理状态机的设计原则
- 原子性: 每个状态转换应视为原子操作,设备在转换过程中不应响应其他配方管理请求。
- 可追溯性: 设备应记录每次状态转换的时间、触发源和结果,便于故障排查。
- 超时保护: 在“配方加载中”和“配方校验中”状态,设备应设置超时定时器。超时未完成则自动回退到“配方空闲”状态,并上报错误。
- 并发限制: 同一时刻只能有一个配方处于加载或校验流程,避免数据竞争。
工程实践: 在实现配方管理状态机时,建议使用状态模式(State Pattern)将每个状态封装为独立对象。这样当新增状态或修改转换逻辑时,不会影响其他状态的代码,提高系统的可维护性和可测试性。
3.5 配方管理状态机与异常恢复
配方管理状态机天然支持异常恢复场景。当设备在“配方加载中”或“配方校验中”发生通信中断或电源故障时,恢复策略如下:
- 通信中断: 设备保持当前状态不变,等待主机重新连接后继续未完成的操作或回退。
- 电源故障: 设备重启后,从非易失性存储中读取配方管理状态。若上次处于“配方加载中”,则回退到“配方空闲”;若处于“配方已加载”或“配方激活”,则保持该状态。
- 校验失败: 设备自动回退到“配方已加载”状态,并发送错误报告给主机,等待主机决定是重新校验还是删除配方。
注意: 不要在“配方加载中”或“配方校验中”状态时执行设备工艺操作。这可能导致配方数据不完整或校验未通过,进而引发工艺缺陷或设备损坏。始终确保配方进入“配方激活”状态后再用于生产。
3.6 配方管理状态机与主机交互流程
下图展示了配方下载场景下,状态机与主机之间的典型交互序列:
通过严格遵循 GEM 标准中的配方管理状态机,设备开发者可以构建出健壮、可恢复的配方管理系统,有效应对通信异常、数据损坏等生产环境中的常见问题。