3. EAP与设备通信基础
EAP(Equipment Automation Program)要监控设备状态、采集事件、处理异常,第一步不是写业务逻辑,而是把“EAP 与设备之间到底怎么说话”搞清楚。半导体设备通信的事实标准是 SECS/GEM:SECS 定义消息语义与格式,GEM 定义设备应具备的行为模型,HSMS 则负责在 TCP/IP 之上承载这些消息。理解这三层关系,是后续所有状态机、事件采集和报警处理的地基。
协议栈分层:从应用语义到物理链路
可以把整条通信链想象成四层:最上层是 GEM 行为模型(状态变量、事件、报警、远程命令等对象);其下是 SECS-II 消息层,规定消息由 Stream 和 Function 编号标识,数据以 Item 树组织;再下是 SECS-I(串口)或 HSMS(TCP/IP)传输层;最底是物理网络。现代 300mm 设备几乎都用 HSMS,因此本节聚焦 HSMS。
HSMS 连接管理:谁主动、谁监听
HSMS 有两种角色:Active(主动发起 TCP 连接)和 Passive(监听端口等待连接)。EAP 通常作为 Active,设备作为 Passive 监听约定端口(常见 5000,但必须按设备手册确认)。TCP 建立后并不等于通信就绪,还要经过 HSMS 的 Select 流程:Active 端发送 Select.req,Passive 端回 Select.rsp,状态从 Not Selected 进入 Selected,此时才允许传输 SECS-II 消息。连接空闲时用 Linktest.req/rsp 保活,异常时用 Deselect 或直接断开重连。
实际排障中,最常见的“连不上”有三类:端口或 IP 配错、设备未处于远程模式、Select 被拒绝。判断依据是看日志里有没有 Select.req 发出、有没有收到 Select.rsp,以及 rsp 中的状态码。
消息结构:SxFy 与 Item 树
每条 SECS-II 消息由 Stream(S)和 Function(F)唯一标识,例如 S1F13 是“建立通信请求”,S1F14 是它的回复。消息体由 Item 组成,Item 有类型(如 L 列表、A ASCII、U4 无符号四字节、BOOLEAN 等)和长度。以 S1F13 为例,其结构通常是 L,2 <A "MDLN"> <A "SOFTREV">,表示设备型号和软件版本。回复 S1F14 则包含 L,2 <B 0x00> <L,2 <A MDLN> <A SOFTREV>>,其中第一个字节是通信确认码,0 表示成功。
理解 Item 树的关键是“嵌套列表”:L 里面可以再套 L,形成树形结构。解析日志时,先看 SxFy,再逐层展开 L,最后读叶子节点的类型和值。
常用 SxFy 消息速查
| 消息 | 方向 | 用途 | 典型 Item 结构 |
|---|---|---|---|
| S1F13 / S1F14 | 双向 | 建立通信 | L,2 <A MDLN> <A SOFTREV> |
| S1F1 / S1F2 | 双向 | Are You There | 空 / L,2 <A MDLN> <A SOFTREV> |
| S1F3 / S1F4 | 双向 | 在线状态切换 | L,1 <B ONLINE> |
| S2F13 / S2F14 | 双向 | 设备常数请求 | L,n <ECID> / L,n <ECV> |
| S5F1 / S5F2 | 设备→EAP | 报警上报 | L,3 <B ALCD> <U4 ALID> <A ALTX> |
| S6F11 / S6F12 | 设备→EAP | 事件报告 | L,3 <U4 DATAID> <U4 CEID> <L,2 <L,2 RPTID V>> |
| S6F15 / S6F16 | EAP→设备 | 事件报告请求 | L,3 <U4 DATAID> <U4 CEID> <L,2 <L,2 RPTID V>> |
| S7F1 / S7F2 | EAP→设备 | 工艺配方上传 | L,2 <A PPID> <A PPBODY> |
其中 S6F11 是事件采集的核心:设备状态变化、工艺开始/结束、报警触发都会通过它上报。CEID 是事件编号,RPTID 是报告编号,V 是变量值。EAP 收到后按 CEID 分发处理。
通信日志抓取与解析入门
抓日志最直接的方式是在 EAP 侧开启 HSMS 报文记录,或在设备侧启用通信 Trace。日志通常包含时间戳、方向(< 表示发送,> 表示接收)、SxFy、系统字节和 Item 内容。下面是一段示例日志(非实测,仅用于说明格式):
2025-03-18 10:22:01.334 < S1F13 W L,2
<A "EQP-01">
<A "1.2.3">
2025-03-18 10:22:01.402 > S1F14 W L,2
<B 0x00>
<L,2 <A "EQP-01"> <A "1.2.3">>
2025-03-18 10:22:05.118 > S6F11 W L,3
<U4 1001>
<U4 2001>
<L,2 <L,2 <U4 3001> <A "RUN">>>
解析步骤:先看方向确认是 EAP 发出还是设备上报;再看 SxFy 判断消息类型;然后逐层读 Item。例如上面 S6F11 中,DATAID=1001,CEID=2001,报告 3001 的变量值为 "RUN",说明设备上报了“进入运行状态”事件。若日志中 S6F11 的 CEID 与 EAP 配置的事件表对不上,事件就会被丢弃或误判。
掌握以上内容后,EAP 与设备的通信就不再是黑盒:你能从一条日志判断连接是否建立、消息是否合法、事件是否被正确解析。这是后续状态监控、事件采集和异常处理的前提。