状态机基础:有限状态机(FSM)概念与 SECS/GEM 状态模型

各位好,我是老张。今天咱们聊聊状态机。说实话,我刚入行那会儿,觉得状态机就是个理论概念,跟现场调试八竿子打不着。直到有一次在客户现场,设备死活连不上主机,我盯着日志看了三个小时,最后发现是状态机卡在一个中间态没跳出来。嗯,从那以后,我再也不敢小看这几个状态了。

什么是有限状态机?

有限状态机,英文叫 Finite State Machine,简称 FSM。说白了,就是一个系统在任意时刻只能处于有限个状态中的一个。它根据输入事件,从一个状态切换到另一个状态。

你想想看,半导体设备里的机械臂、阀门、加热器,哪个不是按状态跑的?

FSM 三要素:

  • 状态(State):系统当前所处的稳定工况
  • 事件(Event):触发状态切换的输入信号或消息
  • 转移(Transition):从一个状态到另一个状态的路径规则

我习惯把状态机想象成地铁线路图。你只能在一个站台上车,刷卡进站(事件)后,你才能从「站外」状态跳到「站内」状态。你不能凭空出现在轨道上,对吧?

SECS/GEM 中的状态模型

SECS/GEM 协议定义了一套标准的状态模型,用来描述设备与主机之间的通信关系。这套模型分为四个层级:COMM、EQ、PC、EC。每个层级都有自己的状态机和转移规则。

我在现场排查问题时,第一步永远是确认这四个状态分别处于什么位置。状态不对,后面的所有操作都是白费。

SECS/GEM 四层状态模型结构图 SECS/GEM 四层状态模型 COMM 通信状态 EQ 设备状态 PC 过程状态 EC 设备控制状态 各层级职责: COMM:控制 TCP/IP 连接是否建立 EQ:控制设备是否允许处理物料 PC:控制当前是否正在执行工艺配方 EC:控制设备是否处于可操作模式 层级依赖关系: COMM 是基础,必须先建立连接 EQ 依赖 COMM 处于 Enabled PC 和 EC 依赖 EQ 处于 Ready 四层状态必须逐层向上,不能跳跃

COMM 状态机:通信的命门

COMM 状态机管理设备与主机之间的 TCP/IP 连接。它只有两个状态:NOT COMMUNICATING 和 COMMUNICATING。

状态 含义 典型事件
NOT COMMUNICATING 未建立连接,设备独立运行 网络断开、主机未启动
COMMUNICATING 已建立连接,可收发消息 S1F13/S1F14 握手成功

我的经验:COMM 状态卡在 NOT COMMUNICATING 时,90% 是 IP 地址配错了或者端口被防火墙挡住了。别急着查上层协议,先 ping 一下主机 IP。

EQ 状态机:设备的核心状态

EQ 状态机描述设备整体的运行状态。它比 COMM 复杂一些,有四个主要状态:INIT、NOT READY、READY、IDLE。

我记得有一次,设备一直报 NOT READY,操作员重启了好几次都没用。我上去一看,原来是前一个配方没正常结束,状态机卡在 INIT 到 NOT READY 的转移路径上了。清一下内部标志位就好了。

状态 说明 常见原因
INIT 设备上电初始化中 刚开机、硬件自检未完成
NOT READY 设备无法处理物料 报警未清除、安全门打开
READY 设备就绪,可接收任务 正常待机状态
IDLE 空闲,无任务执行 批次结束、等待新指令

PC 状态机:工艺过程的脉搏

PC 状态机管理工艺配方的执行过程。它包含:IDLE、SETUP、READY、EXECUTING、PAUSED、ABORTING 等状态。

你想想看,一个晶圆正在腔体里做刻蚀,突然 PC 状态跳到 PAUSED,会发生什么?轻则报废一片晶圆,重则损坏腔体部件。所以 PC 状态机的转移条件必须严格校验。

注意:PC 状态机不允许从 EXECUTING 直接跳回 IDLE。必须先经过 ABORTING 或 COMPLETED 状态。我曾经见过一个设备厂商的驱动写错了,直接跳状态,结果主机和设备的工艺记录对不上,查了整整两天。

EC 状态机:设备控制模式

EC 状态机定义设备的控制权限。它有两个主要状态:LOCAL 和 REMOTE。

  • LOCAL:操作面板控制,主机只能监控
  • REMOTE:主机远程控制,面板操作受限

现场经常遇到的问题是:操作员在 LOCAL 模式下改了参数,主机不知道。等切回 REMOTE 模式时,主机下发配方参数,跟现场参数不一致,直接报警。我的建议是:切换 EC 状态前,先做一次参数同步。

状态机故障定位的通用思路

说了这么多,到底怎么用状态机来定位故障?我总结了一个三步法:

  1. 读状态:通过 SECS 消息 S1F1/S1F2 读取当前四层状态
  2. 找差异:对比主机期望的状态和设备实际的状态
  3. 查转移:找到卡住的状态转移路径,检查触发事件是否满足

核心原则:状态机不会自己出错,出错的一定是触发事件或转移条件。别跟状态机较劲,去查日志里的事件序列。