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。

SECS/GEM 协议栈与 HSMS 连接关系 EAP 主机 GEM 应用逻辑 状态/事件/报警处理 SECS-II 编解码 SxFy + Item 树 HSMS 会话层 Select / Linktest TCP/IP Socket 生产设备 GEM 设备模型 SV/EC/CEID/ALID SECS-II 编解码 SxFy + Item 树 HSMS 会话层 Select / Linktest TCP/IP Socket TCP 连接(HSMS 端口,示例 5000) HSMS 数据报文(10 字节头 + 消息体) SECS-II 消息:S1F13 / S6F11 / S5F1 … GEM 语义:状态变量、事件报告、报警

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 / S6F16EAP→设备事件报告请求L,3 <U4 DATAID> <U4 CEID> <L,2 <L,2 RPTID V>>
S7F1 / S7F2EAP→设备工艺配方上传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 中为每条 S6F11 记录 CEID、RPTID 和关键变量值,并保留原始报文,便于异常回溯时对照设备侧 Trace。
HSMS 端口、Device ID、Select 超时、Linktest 间隔必须与设备手册一致;Device ID 不匹配会导致消息被静默丢弃,日志中看似“已发送”但设备无响应。

掌握以上内容后,EAP 与设备的通信就不再是黑盒:你能从一条日志判断连接是否建立、消息是否合法、事件是否被正确解析。这是后续状态监控、事件采集和异常处理的前提。