SECS-GEM新手入门:搞懂这5点少走3个月弯路
2026/8/12 19:18:14 网站建设 项目流程

一、背景故事:卡在S1F13上的三个星期

带过一个刚入行的同事,第一个任务是把一台国产刻蚀机接进EAP。他拿到设备厂商给的通信手册,一百多页,看了三天,然后开始写代码。结果卡在建链这一步整整三个星期:TCP连上了,发S1F13过去,设备不回;换个格式再发,回了个S9F7(消息格式错误);再改,设备直接断开连接。

最后问题是什么?设备端HSMS配置成了Passive模式,而他的程序也是Passive,两边都在等对方主动连;好不容易改成Active之后,S1F13的数据项他按手册示例发了一个空List,但这台设备的固件要求必须带上MDLN和SOFTREV两个ASCII项,否则判为格式错误。这两个坑,手册里都有写,只是分散在第23页和第67页,中间隔着四十多页的报文清单。

这就是SECS-GEM学习曲线的典型形态:知识点不难,但被埋在海量的报文定义里,新人抓不住主干。我后来把入门必须搞懂的东西压缩成五点,按这五点带人,单台设备的对接周期从平均三周降到了五天。这篇文章就是那五点的完整版。

二、技术原理:必须先搞懂的五件事

2.1第一点:协议栈分了几层,各管什么

很多人一上来就查报文,其实先要搞清楚分层。SEMI标准里,E4定义的SECS-I是基于RS-232串口的传输层,现在只在老设备上还能见到;E37定义的HSMS是基于TCP/IP的传输层,新设备基本都走这个;E5定义的SECS-II是消息内容层,规定了SxFy的编号体系与数据项格式;E30定义的GEM是行为规范层,规定了设备应该提供哪些能力(状态模型、事件报告、报警管理、远程控制等)。

这个分层的实际意义是排障时能快速定位。TCP连不上是网络层问题,查IP、端口、防火墙;连上了但收不到Select.rsp是HSMS层问题,查Active/Passive配置与SessionID;收到S9F系列错误是SECS-II层问题,查消息格式与数据项类型;消息格式正确但设备行为不符合预期,那是GEM层问题,查设备的GEM实现是否完整。按层排查,比逐条对报文快得多。

2.2第二点:消息结构与数据项格式

SECS消息用SxFy命名,S是Stream(功能大类),F是Function(具体功能)。奇数F是请求,偶数F是响应,比如S1F13是建立通信请求,S1F14是它的响应。消息头10个字节,包含SessionID(2字节)、Stream与Function(各1字节,Stream的最高位是W-bit)、PType与SType(各1字节)、SystemBytes(4字节,用于请求与响应配对)。W-bit置1表示「我要回复」,置0表示「不用回」,这个位设错是新手最常见的挂起原因。

数据项格式(Item Format)用一个6位的格式码表示,常用的有:List(0x00)、Binary(0x20)、Boolean(0x24)、ASCII(0x40)、I1/I2/I4/I8(有符号整数)、U1/U2/U4/U8(无符号整数)、F4/F8(浮点)。踩坑重灾区是整数类型:设备手册写U4,你按I4发,数值小的时候一切正常,某天数值超过2147483647就开始出诡异错误。所以对接时必须逐项核对格式码,不能靠猜。

2.3第三点:两套状态模型

GEM定义了两套必须分清的状态。第一套是通信状态(Communication State):DISABLED表示通信功能关闭;ENABLED下又分NOT COMMUNICATING(链路建立中)与COMMUNICATING(已完成S1F13/S1F14握手)。只有进入COMMUNICATING,后续所有业务报文才有意义。

第二套是控制状态(Control State):OFFLINE下分EQUIPMENT OFFLINE与ATTEMPT ONLINE;ONLINE下分LOCAL与REMOTE。关键点是:只有在ONLINE-REMOTE状态下,主机才能通过S2F41发送远程命令控制设备。很多新人调试时发现「命令发过去设备不动」,十有八九是设备停在ONLINE-LOCAL,需要操作员在设备面板上切换,或者主机发S1F17(请求上线)。

2.4第四点:事件报告的三步订阅

这是GEM里最有价值、也最容易搞混的机制。设备内部有三类数据:SV(Status Variable,状态变量,可随时查询)、DVVAL(Data Value,只在事件发生瞬间有效)、EC(Equipment Constant,设备常数,可读写)。事件(CEID)发生时,设备会把预先定义好的报告(RPTID)打包,通过S6F11推送给主机。

订阅要走三步,顺序不能错。第一步S2F33,定义报告:告诉设备「RPTID=1这个报告里要包含VID为1001、1002、1003的三个变量」。第二步S2F35,链接事件:告诉设备「当CEID=100这个事件发生时,要发送RPTID=1这个报告」。第三步S2F37,使能事件:告诉设备「CEID=100这个事件现在开始生效」。漏掉第三步是新人最常见的错误,表现为报文都发成功了但一条S6F11都收不到。

2.5第五点:T1T8超时的物理含义

八个超时参数各管一段,搞混了就会误判。T1是字符间超时(仅SECS-I);T2是协议超时(仅SECS-I);T3是回复超时,指发出带W-bit的请求后等待响应的最长时间,默认45秒,这是业务层最重要的一个;T4是块间超时(仅SECS-I);T5是连接分离超时,连接断开后等待多久才允许重连,默认10秒;T6是控制事务超时,Select/Deselect等控制报文的等待时间,默认5秒;T7是未选择超时,TCP连上但未完成Select的最长等待,默认10秒;T8是网络字符间超时,默认5秒。

1:从设备固件到MES的完整链路。排障时按层定位,能把平均定位时间从小时级降到十几分钟。

1T1T8超时参数的含义、默认值与调整建议

参数

适用协议

默认值

含义与调整建议

T1

SECS-I

0.5

字符间超时,串口设备专用,一般不调

T3

HSMS/SECS-I

45

回复超时,长工艺步骤设备可放宽到60秒,不宜超过90

T5

HSMS

10

连接分离超时,过短会导致断线后频繁重连风暴

T6

HSMS

5

控制事务超时,网络抖动大的现场可放宽到8

T7

HSMS

10

未选择超时,主机侧建立连接后未Select即断开

T8

HSMS

5

网络字符间超时,跨网段部署建议适当放宽

三、现状分析:国内设备联机的真实情况

第一个现实是新旧设备混杂。12英寸新线的设备GEM实现相对完整,甚至支持GEM300系列标准(E87载具管理、E90基板追踪、E40工艺作业、E94控制作业等);而8英寸线和很多特色工艺线上还有大量2005年前的老设备,有的只有RS-232串口,有的干脆只提供一个私有协议的DLL。这类设备通常需要加装通信网关做协议转换。

第二个现实是「有GEM不等于GEM完整」。我遇到过设备手册上写着支持GEM,但实际只实现了建链、状态查询和少数几个事件,报警管理(S5F1/S5F3)根本没做,远程命令(S2F41)只支持两个命令。所以在采购设备时,GEM合规性检查清单必须写进技术协议,而不是等设备到厂了才发现。

第三个现实是文档与实现不一致的概率很高。我的经验估计,首次对接一台新设备时,大约有20%到30%的报文定义与手册存在出入,常见形式包括:VID编号与手册不同、数据项类型与手册不同、手册列出的CEID实际未实现、以及响应报文里多出或少了一层List嵌套。所以对接流程里必须包含实测校验环节。

四、瓶颈问题:新手最容易栽的五个跟头

【跟头一】Active与Passive配错。HSMS连接一端必须是Active(主动发起TCP连接),另一端Passive(监听端口)。行业惯例是设备做Passive、主机做Active,但并非绝对,有些设备厂商反过来配。对接前第一件事就是确认这个,别写了一半代码才发现方向反了。

【跟头二】SVID与CEID没有台账。一台设备少则几十个、多则几百个变量与事件,如果不建台账,几周后没人记得VID 3021到底是什么。台账至少要有六个字段:VID编号、名称、数据类型、单位、所属事件、是否已订阅。这张表是后续所有MES数据建模的基础,也是设备升级时做回归测试的依据。

【跟头三】Spooling机制没处理。GEM规定设备在与主机断开期间,可以把事件缓存起来(Spooling),恢复连接后一次性补发。如果主机端没有考虑这个场景,重连后会突然涌入几百上千条历史事件,时间戳还是过去的,直接写进MES会造成工单状态错乱。正确做法是识别Spooling标志位,对补发数据走单独的补录逻辑。

【跟头四】把T3当成万能药。一遇到超时就把T3调大,这掩盖了真正的问题。T3超时的常见真因有三类:设备正在执行长工艺步骤无暇响应(这类才该调T3)、设备固件Bug导致响应丢失(该找厂商)、主机端消息队列积压导致处理延迟(该优化主机)。不区分原因就调参数,结果是异常检测能力被削弱,真出问题时反应更慢。

【跟头五】多主机连接的资源竞争。有些场景下EAP、FDC系统、设备厂商的远程诊断工具会同时连接同一台设备。多数设备只支持单一Host连接,第二个连上来会把第一个踢掉,表现为EAP莫名其妙断线。排查这类问题的办法是查设备侧的连接日志,看断开时刻是否有另一个IP接入。

五、解决方案:五天完成一台设备对接的标准流程

5.11天:资料齐套与环境准备

必须拿到的资料有四份:GEM通信手册(含完整的SVID/CEID/ALID清单)、设备的HSMS配置说明(IP、端口、SessionID、Active或Passive)、设备状态模型说明(含各状态的转换条件)、以及远程命令清单(RCMD及其参数)。拿不齐就不要开工,否则后面每一步都在猜。同时准备好抓包环境(Wireshark加HSMS解析插件)和一个SECS模拟器用于离线验证。

5.22天:建链与基础握手验证

按顺序验证四件事:TCP连接建立;HSMS的Select.req与Select.rsp交换成功;S1F13/S1F14建立通信成功;S1F1/S1F2(Are You There)心跳正常。这一天的产出是一份链路验证记录,包含实际使用的IP端口、SessionID、以及S1F13中设备返回的MDLN与SOFTREV。如果这四步中任何一步卡住,按前面讲的分层法定位,不要跳过去做别的。

5.33天:变量与事件台账实测校验

用S1F3(查询SV值)逐个验证手册上的SVID是否真实存在、返回的数据类型是否与手册一致;用S2F13验证EC;用S1F11(请求SV名称清单)拉取设备实际支持的变量全集,与手册做差异比对。这一步通常会发现手册与实现的出入,把差异逐条记录并发给设备厂商确认。产出物是一份经过实测校验的变量台账。

5.44天:事件订阅与业务报文联调

按S2F33定义报告、S2F35链接事件、S2F37使能事件三步完成订阅,然后在设备上实际跑一片wafer,验证关键事件(上料、工艺开始、工艺结束、下料、报警发生与清除)是否都能收到S6F11。同时验证S5F1报警报文与S2F41远程命令。这一天最容易出问题的是CEID与实际动作对不上,需要边跑边核对。

5.55天:异常场景与验收

异常场景必须测四种:主机侧断网30秒后恢复(验证重连与Spooling处理);设备侧断电重启(验证主机的自动重连与状态恢复);设备在工艺中途报警(验证报警报文与工单状态联动);以及T3超时场景(人为构造慢响应,验证主机的超时处理与重试逻辑)。四项全过才算验收,产出物是验收报告加上一份完整的参数配置备份。

六、实战案例:一台国产刻蚀机的五天对接实录

设备是某国产厂商的CCP刻蚀机,双腔配置,支持HSMS-SS,设备侧Passive、端口5000、SessionID为0。目标是接入现有EAP并向MES推送工艺开始、结束、报警三类事件,同时支持远程配方下发。

第1天资料核对时就发现问题:厂商给的手册是上一个固件版本的,现场设备已经升级过。我们要求厂商提供当前版本的差异说明,同时用S1F11在第3天做了全量变量拉取做交叉验证,最终发现有11个VID编号发生了变化、3个新增、1个废弃。如果按老手册直接写死配置,这11个变量会全部取到错误值。

第2天建链一次通过,但S1F13返回的SOFTREV与手册不符,进一步确认了固件版本差异。这里有个细节值得说:我们把MDLN与SOFTREV记录进了EAP的设备档案,并设置了校验规则——每次建链时比对,若与档案不一致则告警。后来这条规则真的抓到过一次厂商未通知的固件升级。

第3天做变量台账,两个腔体各有47个SV、23个DVVAL、18个EC,合计176项。实测发现两处类型不符:腔体压力手册写F4实际是F8,RF功率手册写I4实际是U4。这两处如果不发现,数据解析出来会是乱码或者负数。

第4天订阅事件时踩了个坑:按手册定义了8个CEID,但工艺结束事件(CEID=311)始终收不到。抓包发现设备根本没发。联系厂商后确认,该事件在当前固件下需要先通过S2F23(Trace数据初始化)开启才会触发,这个前置条件手册里没写。这类隐藏依赖是对接中最耗时的部分,也是必须做实测的理由。

第5天做异常测试,断网恢复后收到了187条Spooled事件,主机按补录逻辑处理,没有污染实时工单状态。设备断电重启场景下,主机在T5超时后自动重连成功,耗时14秒。全部四项测试通过,第5天下午完成验收签字。

2S2F33定义报告、S2F35链接事件、S2F37使能事件的三步顺序不可颠倒,漏掉第三步是收不到S6F11的首要原因。

2SECS-GEM常用报文速查表(对接时贴在工位上)

报文

名称

方向

典型用途与注意事项

S1F13/F14

建立通信

双向

建链握手,需带MDLNSOFTREV,部分设备不接受空List

S1F3/F4

选择状态变量

主机到设备

SVID查询当前值,用于台账实测校验

S2F33/F34

定义报告

主机到设备

订阅第一步,删除报告时发送空的VID列表

S2F35/F36

链接事件报告

主机到设备

订阅第二步,建立CEIDRPTID的映射

S2F37/F38

使能禁用事件

主机到设备

订阅第三步,最常被漏掉的一步

S6F11/F12

事件报告发送

设备到主机

业务数据主通道,需处理Spooling补发场景

S5F1/F2

报警报告

设备到主机

ALIDALCD,需与MES报警字典对齐

S2F41/F42

主机命令

主机到设备

需设备处于ONLINE-REMOTE状态才会执行

七、实施效果:把三周压到五天之后

这套流程在我们团队推行一年后的统计:新设备平均对接周期从21个工作日降至5.4个工作日;对接后首月的通信异常次数从平均23次降至4次;因数据类型错误导致的返工从每台平均1.8次降至0.2次。最大的变化其实是可预期性——项目经理终于可以按天排设备联机计划,而不是给每台设备留出「一到三周不等」的模糊窗口。

效率提升的来源拆开看:资料齐套检查省掉了大约3天的反复沟通;变量台账实测校验把原本分散在整个调试期的类型问题集中在1天暴露,省掉约4天;标准化的异常测试清单避免了上线后返工,这部分节省的时间最难量化但价值最高,因为上线后返工要协调停机窗口,代价是调试期的三到五倍。

给新人的建议是:先花两天时间把这五点吃透,再去翻手册。手册是查询用的,不是通读用的。拿到一台新设备时,按「分层定位、台账先行、订阅三步、异常必测」这四句口诀走,基本不会跑偏。

最后提一个长期收益:变量台账积累到一定规模后会变成资产。我们现在有覆盖43台设备、超过6000个变量的台账库,新项目做数据建模时可以直接复用相似机型的定义,MES的数据字典也是基于它生成的。当年那些看起来很枯燥的逐项核对工作,回头看是回报率最高的投入之一。

八、常见问题答疑:工程落地里最常被追问的几件事

Q1HSMS-SSHSMS-GS有什么区别,该用哪个?

SS是单会话(Single Session),一条TCP连接对应一个设备实体;GS是通用会话(General Session),一条连接可以承载多个会话,用于一台主机管理多个逻辑子设备的场景。实际项目中99%用SS,因为它简单且设备支持度高。只有在设备内部包含多个独立可控单元、且厂商明确支持时才考虑GS。

Q2:设备厂商说不提供GEM,只给私有协议,怎么办?

三个方案按优先级排。第一优先是在采购合同或技术协议里要求GEM合规,这是成本最低的时点;已经买了的话,第二方案是要求厂商提供协议转换网关,费用通常在几万元级别;第三方案是自研适配层,把私有协议翻译成标准SECS消息对外提供,这样EAP侧不需要为这台设备写特例代码,长期维护成本最低。

Q3Trace数据(S2F23)和事件报告有什么区别,该用哪个?

事件报告是离散的,在特定动作发生时推送一次,适合工单状态驱动;Trace是周期性的,按设定间隔连续推送指定变量,适合FDC做时序分析。两者不冲突,通常并行使用。注意Trace的采样间隔设置要谨慎,间隔太短会显著增加设备CPU负载和网络流量,经验值是关键参数1到5秒、次要参数10到30秒。

Q4:多台设备接入时,EAP该一台一进程还是一进程多设备?

推荐一台设备一个独立的连接处理单元(进程或线程),好处是故障隔离,一台设备的异常不会拖垮其他设备的通信。但要注意共享资源的瓶颈,主要是数据库连接池和消息队列。实践中的做法是通信层按设备隔离,数据落库走统一的异步队列,这样既隔离了故障,又控制了资源开销。

Q5:对接完成后,日常运维要监控哪些指标?

至少五个:链路在线率(COMMUNICATING状态的时间占比,目标99.5%以上)、T3超时次数(每台每天,超过5次要查)、S9F系列错误消息数(正常应为零)、事件推送延迟(S6F11从设备发出到落库的时间,目标2秒内)、以及Spooling触发次数。这五个指标做成日报,能提前发现八成的潜在通信问题。

九、配套资料与实战工具包

本文涉及的脚本、模板、检查清单已整理成配套资料包,均为可直接在工厂落地使用的版本,拿到后按自己产线的实际参数替换即可,不需要从零搭。

点击文章上方「VIP资源」下载区,即可获取以下5项配套资料(持续更新MES/SPC/EAP/良率实战资料):

  • SECS-GEM报文速查手册(含常用Stream完整对照与格式码表)
  • 设备变量台账模板(SVID/CEID/ALID六字段版,含实测校验列)
  • 五天对接标准流程检查表与验收报告模板
  • HSMS链路监控脚本(Python,输出在线率与T3超时统计)
  • Spooling补发数据处理逻辑参考实现与测试用例

────────────────────────────────────────

本文首发于博客:半导体智能制造| MES工程师实战笔记

你在自己的产线上遇到过类似情况吗?是怎么处理的?欢迎在评论区留下你的做法,我会挑典型问题在后续文章里展开。

标签:SECS-GEM | EAP |设备联机| HSMS | MES自动化|半导体设备通信

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询