简介:这份PDF文档面向半导体设备自动化领域的工程师与集成人员,系统讲解SECS/GEM(SEMI设备通信标准/通用设备模型)协议规范,帮助解决不同厂商设备与主机系统之间的通信与互操作问题。文档以广州金南瓜科技的SECS/GEM方案为实施案例,内容涵盖通讯状态模型、控制状态模型与设备处理状态,并逐项展开主机发起场景、事件通知、在线识别、动态事件报告配置、变量与跟踪数据采集、报警管理、远程控制、设备常数、过程程序管理、时钟及终端服务等设备能力,同时给出TCP/IP通讯超时等协议细节与变量命令实现清单,目录结构清晰,便于按模块查阅与对照实施。资源包共1个PDF文件,约1006KB,轻量易读。目前已有741人学习下载,适合需要理解SECS/GEM规范、推进设备联网与产线自动化改造的从业者参考。
1. 设备联机卡在“连不上”:一份可交付的 SECS/GEM 接口方案该长什么样
做半导体设备联机的人大多遇到过这种场面:设备端日志干干净净,主机端一直停在“等待建立通讯”,现场几个人围着交换机排查网线,最后发现是设备根本没实现 S1F13 的主动发起逻辑。这类问题不是网络玄学,而是接口方案没把状态模型、消息子集和场景时序写清楚。这份 SECS/GEM 规格说明书要解决的正是这件事——把一台设备与主机之间的通讯协议、GEM 能力、状态机、消息格式和典型场景固化成一份可对照实施的文档,适合正在做设备联机毕设、自动化产线课程设计,或需要给甲方交付一份设备接口规格书的工程师参考。它不教你写设备内部逻辑,但能让你在“主机问什么、设备答什么、超时怎么办”这三件事上有据可依。
2. 需求与标准基线:先锁定 E5/E30/E37 三条线,再谈功能
2.1 为什么不能跳过标准基线直接写代码
很多课程设计或毕设一上来就画界面、连 TCP,结果答辩时被问“你遵循的是哪版 SEMI 标准”就卡住。SECS/GEM 不是单一协议,而是一组标准的组合:E5 定义 SECS-II 消息内容,E30 定义 GEM 通用设备模型,E37 和 E37.1 定义 HSMS 高速消息服务及单会话模式。这份方案在参考标准章节明确列出了 E5-0219、E30-0418、E37-0819、E37.1-0413 四条基线,意味着后续所有消息、状态和场景都要能回溯到这几份标准上。
我一般会建议在方案第一章就把“遵循标准清单”和“不实现项”并列写出来。比如这份方案的 GEM 适应性表里,Material Movement 和 Spooling 两项明确勾选为“No”,其余如状态模型、事件通知、报警管理、远程控制、过程程序管理、时钟、终端服务均为“Yes”。这张表就是后续验收的边界:主机方不会来要物料搬送消息,设备方也不用为 Spooling 缓冲机制额外写代码。把“不做什么”写清楚,比列一堆“我们支持什么”更能减少后期扯皮。
2.2 硬件形态与部署边界要先定死
方案里对硬件的描述很克制:SECS/GEM 接口模块运行在工控级电脑上,属于软件模块。这句话背后其实是一个关键设计决策——协议栈不跑在设备主控 PLC 里,而是独立一台工控机做协议转换和消息代理。这样做的直接好处是设备内部逻辑与通讯逻辑解耦,设备升级不用动协议栈,协议栈调参也不影响设备运行。
落到课程设计或毕设里,如果你的“设备”是一台模拟加工单元,通常的做法是用一台工控机或虚拟机跑 GEM 接口程序,通过 TCP/IP 与主机侧的模拟 Host 通信,设备内部状态用脚本或仿真程序驱动。方案里没有展开工控机选型和操作系统,这部分按项目实际环境补即可,但要在文档里写明“接口模块为软件模块,部署于工控级计算机”,避免答辩时被追问“你的 SECS 卡插在哪个槽”。
2.3 GEM 能力清单就是需求范围说明书
把 GEM 适应性表拆开看,基础要求里状态模型、设备处理状态、主机发起 S1F13/F14 场景、事件通知、在线识别、错误消息、文档、操作员发起控制全部为 Yes;附加能力里建立通讯、动态事件报告配置、变量与事件名列表请求、变量数据采集、跟踪数据采集、状态数据采集、报警管理、远程控制、设备常数、过程程序管理、终端服务、时钟、限值监控、设备发起控制均为 Yes。这份清单直接对应后面第 3 章“设备能力及实施”的十三个小节,也对应第 5 章“变量和命令”里的具体实现表。
提示:做毕设时不要照抄全部 Yes。先确认你的模拟设备能真实响应哪些消息,再把表里对应项改成 No,并在文档里注明“本期不实现,预留扩展”。评审看的是自洽,不是功能多。
3. 状态模型设计:通讯状态与控制状态两张图撑起联机骨架
3.1 通讯状态模型:DISABLED 与 ENABLED 之下再分四态
方案采用 Harel 记法描述状态图,通讯状态模型顶层只有两个状态:DISABLED 和 ENABLED。DISABLED 下 SECS-II 与主机不存在任何通信,操作员从 ENABLED 切到 DISABLED 时所有通信立即停止。ENABLED 是可能的系统默认值,其下分 COMMUNICATING 和 NOT COMMUNICATING 两个子状态;NOT COMMUNICATING 又用 AND 关系同时激活 HOST-INITIATED CONNECT 和 EQUIPMENT-INITIATED CONNECT 两条并行分支。
设备发起连接这条分支里,进入 NOT COMMUNICATING 后先到 WAIT CRA,把 CommDelay 定时器置为“过期”,发送 S1F13 开始建链;连接事务失败则转 WAIT DELAY,初始化 CommDelay 定时器、清空发送队列(必要时按生成顺序放入 spool 缓冲),等定时器到期再回 WAIT CRA 重发 S1F13。WAIT DELAY 期间如果收到非 S1F13 的消息,直接丢弃不回复,把定时器置为过期并立即重发 S1F13。WAIT CRA 收到 COMMACK=0 的 S1F14 后进入 COMMUNICATING。主机发起连接这条分支则在进入时停在 WAIT CR FROM HOST,收到 S1F13 后回 S1F14(COMMACK=0)并进入 COMMUNICATING。COMMUNICATING 下发生通讯失败则退回 NOT COMMUNICATING,同时清空发送队列。
这段状态迁移表是整份方案里最值得逐行对照实现的部分。很多“连不上”的问题,根源就是设备端只实现了被动等 S1F13,没有实现设备主动发 S1F13 的分支,或者 CommDelay 定时器没有按“过期—初始化—到期重发”的节奏走。相关数据里只列了一个 ECID:EstablishCommunicationsTimeout,即建立通讯超时。实现时把这个值做成可配置项,默认值按现场网络质量调,不要硬编码。
3.2 控制状态模型:OFF-LINE 下只认 S1F13 和 S1F17
控制状态模型定义主机与设备之间的协作级别。OFF-LINE 状态下,设备对主机发来的任何 primary 消息都回 SxF0,唯独 S1F13 和 S1F17 会正常处理和响应;S1F17 用于主机请求设备切换到 ON-LINE。这个设计的意义在于:设备离线时不是“装死”,而是用 Sx,F0 明确告诉主机“我现在不接受这个操作”,同时保留建链和上线请求两条通道。
实现时要注意 Sx,F0 的构造:事务号要回填主机请求里的 System Bytes,消息体通常为空或带一个表示“功能不可用”的字节。如果设备端把 OFF-LINE 下的 S1F17 也回了 SxF0,主机就永远无法把设备拉上线,这是联调阶段很典型的一个翻车点。方案里把 S1F13 和 S1F17 单独列为例外,就是在提醒实现者这两条消息在 OFF-LINE 下必须走正常处理路径。
3.3 设备处理状态:把“设备在干什么”映射成可上报的枚举
方案目录里“设备处理状态”一项在原始文档中标注为“错误!未定义书签”,说明这一节的正文在源文件里缺失或未正确生成。按 GEM 的常规做法,设备处理状态通常用一组枚举值表达设备当前是否可加工、是否在处理中、是否暂停、是否故障,并通过状态数据采集或事件通知上报给主机。我在补这类缺失章节时,一般会先和主机方确认他们关心哪几个状态,再反推设备端需要维护的状态变量,而不是照搬标准里的全集。
落到实现上,设备处理状态建议做成一个内部状态机,状态迁移由设备事件触发,迁移时产生 collection event,事件里携带状态变量。这样主机侧通过动态事件报告配置订阅该事件后,就能在状态变化时收到上报,而不需要轮询。方案第 3 章的事件通知和状态数据采集两节正好对应这个设计,第 5 章再列出具体实现了哪些 collection event 和 status variable。
4. 设备能力落地:十三项 GEM 能力的实现顺序与消息映射
4.1 建链、在线识别与动态事件报告配置的先后关系
设备能力实施的第一组是主机发起场景、事件通知、在线识别、动态事件报告配置。这四项有明确的依赖顺序:先能建链(S1F13/F14),再做在线识别(S1F1/F2 或 S1F17 上线),然后主机才能下发动态事件报告配置(S2F33 定义报告、S2F35 链接事件与报告、S2F37 启停事件报告)。如果顺序反了,主机在设备未上线时下发 S2F33,设备回 SxF0,配置就丢了。
我一般会在实现里加一个“GEM 就绪”标志:建链成功且设备处于 ON-LINE 后才允许处理 S2F33/S2F35/S2F37,否则统一回 SxF0 并在日志里记一条“配置请求被拒,设备未上线”。这样联调时主机方一看日志就知道是时序问题,不用互相猜。
4.2 变量、跟踪、状态三类数据采集的差别
变量数据采集(S1F3/S1F4、S2F13/S2F14 等)是按需或按报告取当前值;跟踪数据采集(S2F23/S2F24 等)是主机设定采样周期后设备按周期主动上报一组变量;状态数据采集(S1F11/S1F12、S1F3 针对状态变量)偏向设备整体状态。三者共用一套变量字典,但触发机制不同。
实现时建议把变量字典做成一张表,字段包括变量 ID、名称、数据类型、单位、读写属性、所属类别(数据变量/状态变量/设备常数)。方案第 5 章分别列出“已实现的数据变量”“已实现的状态变量”“已实现的报警”“设备常数”“已实现的主机命令”,这张表就是变量字典的落地形式。跟踪数据采集的周期参数要设下限,避免主机下发一个 10ms 周期把设备通讯线程打满。
4.3 报警管理与远程控制的边界
报警管理包括报警使能/禁止(S5F3/S5F4)、报警信息上传(S5F1/S5F2 或 S5F5/S5F6)、报警报告发送。远程控制包括主机命令下发(S2F41/S2F42)和设备对命令的响应。这两项都涉及“主机让设备做事”,区别在于报警是设备侧事件驱动、远程控制是主机侧命令驱动。
实现远程控制时,S2F41 的响应要区分“命令已接受并执行完成”“命令已接受但执行中”“命令不被支持”“命令参数错误”几种情况,用 HCACK 和参数列表表达。方案第 7.5 节的远程控制场景给出了主机命令发送的时序,实现时按这个时序把 ACK 和后续完成事件分开处理,不要在一个响应里既回 ACK 又回结果,否则主机侧状态机会乱。
4.4 过程程序管理、时钟与终端服务的实现要点
过程程序管理覆盖删除(S7F17/S7F18)、目录请求(S7F19/S7F20)、上传(S7F3/S7F4)、下载(S7F5/S7F6)等场景。实现时要把 PPID 作为主键管理,上传下载走文件分片或整体传输按方案约定,方案第 7.7 节给出了四个典型场景的时序。时钟部分包括设备请求时间(S2F17/S2F18)、主机设定时间(S2F31/S2F32)、主机查询当前时间,实现时注意时区和格式,通常用 ASCII 时间字符串。终端服务是主机向设备显示区发信息(S10F3/S10F4 等),实现一个消息显示队列即可,不要和报警显示混用同一个区域。
5. 消息与场景实现:SML 描述、消息子集与七类联机时序
5.1 用 SML 把消息格式写成可对照的契约
方案第 6 章给出 SECS-II 消息子集和 SML 语言描述,第 6.2 节列出消息格式、数据项字典和数据格式。SML 是一种文本化描述 SECS-II 消息结构的方式,适合放在规格书里让主机方和设备方对照实现。下面是一段示意性的 SML 片段,展示 S1F13 和 S1F14 的结构,实际实现时按方案第 6 章的数据项字典填具体项:
'S1F13 W' <L [2] <A [2] 'MDLN'> // 设备型号,ASCII <A [6] 'SOFTREV'> // 软件版本,ASCII >. 'S1F14' <L [2] <B [1] 0x00> // COMMACK,0 表示接受 <L [0] > // 可选的 MHEAD,空列表表示无 >.这段 SML 里,S1F13 的 W 表示等待回复,消息体是一个两元素列表,分别是设备型号和软件版本;S1F14 的 COMMACK 为 0 表示通讯建立被接受。实现时要注意列表长度和数据类型必须与数据项字典一致,主机侧解析器通常按固定结构读,多一个元素或少一个字节都会导致解析失败。方案第 6.2.1 节的数据项字典就是用来锁死这些结构的,写代码前先把字典表填完整。
5.2 建立通讯的两种发起方式要都实现
方案第 7.1 节给出两个场景:主机尝试建立通讯、设备尝试建立通讯且主机确认。对应第 3.1 节状态模型里的两条并行分支。设备端如果只实现被动等 S1F13,在主机先启动、设备后启动的现场就会一直连不上;反过来如果只实现主动发 S1F13,主机侧没准备好时设备会反复重试。稳妥的做法是两条都实现,用 CommDelay 定时器控制重试节奏,并在配置里允许选择“仅被动”“仅主动”“两者都允许”。
5.3 动态事件报告配置的完整链路
第 7.2 节给出动态事件报告配置场景,链路通常是:主机发 S2F33 定义报告(报告 ID 加变量 ID 列表),发 S2F35 把报告链接到 collection event,发 S2F37 使能事件报告;设备侧维护报告定义表、事件链接表和使能标志,事件发生时按链接关系组包上报。实现时要注意 S2F33 的“定义报告”是覆盖式的,同一报告 ID 重复定义要替换而不是追加;S2F35 链接时如果报告 ID 不存在要回错误码。方案第 5.1 节“已实现的事件采集”列出了设备支持哪些 collection event,主机只能订阅这张表里的事件。
5.4 名列表请求、状态报告与“Are you there”
第 7.3 节覆盖数据变量名列表请求、事件名列表请求、主机请求报告、主机发起跟踪报告、请求设备状态报告、请求状态变量名列表、Are you there(S1F1/S1F2)。这些场景的共同点是“主机问、设备答”,实现时重点在名列表的完整性和一致性:S1F11 返回的数据变量名列表必须和第 5.2 节“已实现的数据变量”表一致,S1F21 返回的事件名列表必须和第 5.1 节一致。名列表对不上,主机侧配置界面就显示不出来,联调时表现为“主机看不到变量”,实际是设备返回了空列表或旧列表。
5.5 报警、远程控制、设备常数、过程程序、终端服务与时钟的场景收口
第 7.4 到 7.9 节分别给出报警管理(使能/禁止、上传报警信息、发送报警报告)、远程控制(主机命令发送)、设备常数(主机下发、查询、名列表请求)、过程程序(删除、目录请求、上传、下载)、终端服务(主机向设备显示发信息)、时钟(设备请求时间、主机设定时间、主机查询时间)的场景时序。第 7.10 节控制场景覆盖主机接受 ON-LINE、主机设 OFF-LINE、主机设 ON-LINE 三条。这些场景的实现套路一致:先按状态模型判断当前是否允许处理,再按消息子集解析参数,最后按场景时序回 ACK 和后续事件。方案第 8 章附件里的网络配置、开启 GEM、使用 GEM 三节是部署和操作层面的补充,做交付文档时可以把这三节扩成现场调试手册。
6. 避坑与验收:联调最容易翻车的五处和一份可执行的验收清单
6.1 常见问题排查:现象、原因、解决
现象一:主机一直停在“等待建立通讯”,设备日志无 S1F13 发出。原因通常是设备端只实现了 HOST-INITIATED CONNECT 分支,没实现 EQUIPMENT-INITIATED CONNECT,或者 CommDelay 定时器初值设成了 0 导致不重试。解决:按第 3.1 节状态表检查进入 NOT COMMUNICATING 后是否先到 WAIT CRA 并发送 S1F13,定时器按“过期—初始化—到期重发”三步走。
现象二:设备已上线,主机下发 S2F33 却收到 SxF0。原因多半是设备把“建链成功”当成了“已上线”,没有等 S1F17 或 S1F1 完成在线识别就允许配置。解决:加 GEM 就绪标志,建链且 ON-LINE 后才处理 S2F33/S2F35/S2F37,否则回 SxF0 并记日志。
现象三:主机能看到事件但收不到报告。原因通常是 S2F35 链接了报告但 S2F37 没使能,或者事件发生时设备按旧报告定义组包。解决:检查使能标志和报告定义表的版本,事件触发时按当前链接关系实时组包,不要缓存旧结构。
现象四:报警上报后主机侧报警列表不更新。原因可能是 S5F1 的 ALCD 字节或 ALID 与第 5.4 节“已实现的报警”表不一致,主机按表匹配失败就丢弃。解决:报警 ID、报警类型、使能状态三者与方案表逐项对齐,上报前做一次自检。
现象五:过程程序下载到一半超时。原因通常是文件分片大小与主机约定不一致,或者设备侧接收缓冲没按 S7F5 的消息长度预分配。解决:在方案里写明分片大小和超时时间,设备侧按消息头长度校验后再读体,超时回 S7F0 并清理半包。
6.2 验收清单:拿这份表逐项打勾再交付
验收不要靠“感觉能通”,按下面这张表逐项走一遍,每项记录实际结果和日志片段:
| 验收项 | 检查方法 | 通过标准 |
|---|---|---|
| 标准基线 | 对照第 1.2 节四条标准 | 文档列明 E5/E30/E37/E37.1 及版本 |
| GEM 能力表 | 对照第 1.4 节勾选项 | Yes/No 与第 3、5 章实现一致 |
| 通讯状态 | 分别测主机发起和设备发起 | 两种方式都能进入 COMMUNICATING |
| 控制状态 | OFF-LINE 下发非 S1F13/S1F17 | 回 SxF0;S1F17 能拉上线 |
| 事件报告 | S2F33→S2F35→S2F37 后触发事件 | 主机收到报告且变量值正确 |
| 名列表 | S1F11/S1F21 与第 5 章表比对 | 条目、ID、名称完全一致 |
| 报警 | 使能后触发报警 | 主机收到 S5F1 且列表更新 |
| 远程控制 | 下发 S2F41 | HCACK 与完成事件分开返回 |
| 过程程序 | 上传、下载、目录、删除 | 四个场景均按第 7.7 节时序完成 |
| 时钟 | 设备请求、主机设定、主机查询 | 时间格式和时区一致 |
6.3 答辩时怎么讲这份方案
答辩或交付评审时,不要从“我用了什么框架”讲起,先讲边界:这台设备实现哪些 GEM 能力、不实现哪些、依据哪几条标准。然后打开通讯状态图,指着 WAIT CRA 和 WAIT DELAY 讲重试机制,这是最能体现你理解协议的地方。接着用一条完整链路串起来:建链→上线→S2F33 配置→触发事件→主机收报告→报警→远程控制,每一步对应方案里的章节号和消息对。最后主动说出第 6.1 节里你实际踩过的那一两个坑,比背功能列表更有说服力。
从那以后我每次做设备联机方案,都会先把 GEM 适应性表和第 5 章的变量/事件/报警清单填完,再动一行代码——表填不出来的地方,就是后面一定会翻车的地方。希望帮到你。
本文还有配套的精品资源,点击获取