一、背景故事:卡在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第五点:T1到T8超时的物理含义
八个超时参数各管一段,搞混了就会误判。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的完整链路。排障时按层定位,能把平均定位时间从小时级降到十几分钟。
表1:T1至T8超时参数的含义、默认值与调整建议
参数 | 适用协议 | 默认值 | 含义与调整建议 |
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.1第1天:资料齐套与环境准备
必须拿到的资料有四份:GEM通信手册(含完整的SVID/CEID/ALID清单)、设备的HSMS配置说明(IP、端口、SessionID、Active或Passive)、设备状态模型说明(含各状态的转换条件)、以及远程命令清单(RCMD及其参数)。拿不齐就不要开工,否则后面每一步都在猜。同时准备好抓包环境(Wireshark加HSMS解析插件)和一个SECS模拟器用于离线验证。
5.2第2天:建链与基础握手验证
按顺序验证四件事:TCP连接建立;HSMS的Select.req与Select.rsp交换成功;S1F13/S1F14建立通信成功;S1F1/S1F2(Are You There)心跳正常。这一天的产出是一份链路验证记录,包含实际使用的IP端口、SessionID、以及S1F13中设备返回的MDLN与SOFTREV。如果这四步中任何一步卡住,按前面讲的分层法定位,不要跳过去做别的。
5.3第3天:变量与事件台账实测校验
用S1F3(查询SV值)逐个验证手册上的SVID是否真实存在、返回的数据类型是否与手册一致;用S2F13验证EC;用S1F11(请求SV名称清单)拉取设备实际支持的变量全集,与手册做差异比对。这一步通常会发现手册与实现的出入,把差异逐条记录并发给设备厂商确认。产出物是一份经过实测校验的变量台账。
5.4第4天:事件订阅与业务报文联调
按S2F33定义报告、S2F35链接事件、S2F37使能事件三步完成订阅,然后在设备上实际跑一片wafer,验证关键事件(上料、工艺开始、工艺结束、下料、报警发生与清除)是否都能收到S6F11。同时验证S5F1报警报文与S2F41远程命令。这一天最容易出问题的是CEID与实际动作对不上,需要边跑边核对。
5.5第5天:异常场景与验收
异常场景必须测四种:主机侧断网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天下午完成验收签字。
图2:S2F33定义报告、S2F35链接事件、S2F37使能事件的三步顺序不可颠倒,漏掉第三步是收不到S6F11的首要原因。
表2:SECS-GEM常用报文速查表(对接时贴在工位上)
报文 | 名称 | 方向 | 典型用途与注意事项 |
S1F13/F14 | 建立通信 | 双向 | 建链握手,需带MDLN与SOFTREV,部分设备不接受空List |
S1F3/F4 | 选择状态变量 | 主机到设备 | 按SVID查询当前值,用于台账实测校验 |
S2F33/F34 | 定义报告 | 主机到设备 | 订阅第一步,删除报告时发送空的VID列表 |
S2F35/F36 | 链接事件报告 | 主机到设备 | 订阅第二步,建立CEID与RPTID的映射 |
S2F37/F38 | 使能禁用事件 | 主机到设备 | 订阅第三步,最常被漏掉的一步 |
S6F11/F12 | 事件报告发送 | 设备到主机 | 业务数据主通道,需处理Spooling补发场景 |
S5F1/F2 | 报警报告 | 设备到主机 | ALID加ALCD,需与MES报警字典对齐 |
S2F41/F42 | 主机命令 | 主机到设备 | 需设备处于ONLINE-REMOTE状态才会执行 |
七、实施效果:把三周压到五天之后
这套流程在我们团队推行一年后的统计:新设备平均对接周期从21个工作日降至5.4个工作日;对接后首月的通信异常次数从平均23次降至4次;因数据类型错误导致的返工从每台平均1.8次降至0.2次。最大的变化其实是可预期性——项目经理终于可以按天排设备联机计划,而不是给每台设备留出「一到三周不等」的模糊窗口。
效率提升的来源拆开看:资料齐套检查省掉了大约3天的反复沟通;变量台账实测校验把原本分散在整个调试期的类型问题集中在1天暴露,省掉约4天;标准化的异常测试清单避免了上线后返工,这部分节省的时间最难量化但价值最高,因为上线后返工要协调停机窗口,代价是调试期的三到五倍。
给新人的建议是:先花两天时间把这五点吃透,再去翻手册。手册是查询用的,不是通读用的。拿到一台新设备时,按「分层定位、台账先行、订阅三步、异常必测」这四句口诀走,基本不会跑偏。
最后提一个长期收益:变量台账积累到一定规模后会变成资产。我们现在有覆盖43台设备、超过6000个变量的台账库,新项目做数据建模时可以直接复用相似机型的定义,MES的数据字典也是基于它生成的。当年那些看起来很枯燥的逐项核对工作,回头看是回报率最高的投入之一。
八、常见问题答疑:工程落地里最常被追问的几件事
Q1:HSMS-SS和HSMS-GS有什么区别,该用哪个?
SS是单会话(Single Session),一条TCP连接对应一个设备实体;GS是通用会话(General Session),一条连接可以承载多个会话,用于一台主机管理多个逻辑子设备的场景。实际项目中99%用SS,因为它简单且设备支持度高。只有在设备内部包含多个独立可控单元、且厂商明确支持时才考虑GS。
Q2:设备厂商说不提供GEM,只给私有协议,怎么办?
三个方案按优先级排。第一优先是在采购合同或技术协议里要求GEM合规,这是成本最低的时点;已经买了的话,第二方案是要求厂商提供协议转换网关,费用通常在几万元级别;第三方案是自研适配层,把私有协议翻译成标准SECS消息对外提供,这样EAP侧不需要为这台设备写特例代码,长期维护成本最低。
Q3:Trace数据(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自动化|半导体设备通信