第3章:SECS/GEM协议入门
各位同学好,我是老张。今天咱们聊聊半导体设备自动化里最绕不开的一个东西——SECS/GEM协议。说实话,我刚入行那会儿,看到这一堆缩写就头大。什么SECS、GEM、HSMS,感觉像在念咒语。但干这行久了你会发现,搞懂它,你才算真正入了自动化设备编程的门。
3.1 什么是SECS/GEM?
SECS/GEM,说白了就是半导体设备跟工厂上位机(也就是MES系统)之间沟通的“普通话”。
SECS是“半导体设备通信标准”的缩写,它定义了消息怎么发、怎么收。GEM是“通用设备模型”,它定义了设备应该具备哪些能力、怎么报告状态。你可以这么理解:SECS是信封和邮递员,GEM是信的内容和格式。
我记得第一次调试设备时,对方MES工程师问我:“你们设备支持GEM吗?”我当时一愣,心想这不就是个通信协议吗?后来才知道,GEM才是真正决定设备“智商”的东西。支持GEM的设备,能主动上报报警、自动汇报生产数据、响应远程指令。不支持?那你就只能当个“哑巴设备”,等着人家轮询来问。
核心要点:
- SECS:通信的“管道”和“信封”
- GEM:设备行为的“标准剧本”
- 两者结合,才能实现设备与工厂系统的双向对话
3.2 HSMS通信——告别老旧的RS-232
早期SECS通信走的是RS-232串口,速度慢、距离短、接线麻烦。我当年在FAB里见过老设备,后面拖着一根粗粗的串口线,走线还得绕半天。后来HSMS(High-Speed SECS Message Services)出来了,改用TCP/IP网络通信。
HSMS的好处很明显:
- 速度快,百兆千兆随便跑
- 距离远,一个厂区随便连
- 可以多设备同时通信
嗯,这里要注意:HSMS虽然叫“高速”,但它本质上还是SECS协议的传输层。也就是说,你上层发的消息格式还是SECS那套,只是底层的“邮递员”从走路换成了开车。
我曾经遇到过一个坑:某台设备HSMS连接老是断,查了半天发现是防火墙把某个端口给拦了。所以啊,搞HSMS通信,第一件事就是确认网络通不通,别一上来就怀疑代码。
3.3 消息结构——Stream/Function
SECS/GEM的消息结构,核心就是Stream和Function。你可以把Stream想象成“章节”,Function是“小节”。比如Stream 1是“设备状态”,Stream 2是“设备控制”,Stream 10是“终端显示”。
每个Stream下面有多个Function。举个例子:
| Stream | Function | 含义 | 方向 |
|---|---|---|---|
| 1 | 1 | Are You There?(你在吗?) | Host → Equipment |
| 1 | 2 | On-Line Data(在线数据) | Equipment → Host |
| 2 | 41 | Send Recipe(发送配方) | Host → Equipment |
| 6 | 11 | Data Report(数据报告) | Equipment → Host |
你看,S1F1就是“你在吗?”,S1F2就是“我在,这是我的状态”。一问一答,成对出现。这是SECS/GEM的基本通信模式——Primary和Secondary。Primary是主动发起的消息,Secondary是响应消息。
我个人习惯把Stream/Function记成“SxFy”的格式。比如S1F1、S2F41。写代码的时候,你就是在拼装这些SxFy消息。
小技巧:刚开始记不住Stream编号?没关系。你只需要记住几个常用的:S1(状态)、S2(控制)、S6(数据报告)、S10(终端)。其他的用到再查SEMI标准文档就行。
3.4 消息格式——SECS-II
消息结构搞清楚了,那消息内容长什么样?这就得说SECS-II了。SECS-II定义了消息体的编码方式,用的是“Item”嵌套结构。
每个Item有:
- 一个类型(比如L是列表,A是ASCII字符串,U4是无符号4字节整数)
- 一个长度
- 数据内容
举个例子,一个简单的S1F1消息,它的SECS-II内容可能是:
L, 0
就是一个空列表。而S1F2的响应可能是:
L, 3
A, "MDXX-1234" // 设备ID
A, "SOFT-V2.1" // 软件版本
BOOLEAN, TRUE // 是否可用
你看,这就是一个嵌套结构。最外层是列表(L),里面包了三个Item。实际编程中,你不需要手动拼这些二进制数据,SECS/GEM库会帮你做序列化和反序列化。但理解这个结构很重要,因为调试的时候,你经常需要看原始报文。
我曾经在调试时,发现设备返回的数据总是解析不对。后来抓包一看,原来是设备把字符串编码搞错了,该用ASCII却用了JIS编码。嗯,这种坑,你不看原始报文根本发现不了。
3.5 知识体系总览
为了让你更直观地理解SECS/GEM的整体结构,我画了一张图:
从这张图你可以看到,SECS/GEM是分层设计的。上层GEM定义“做什么”,中间SECS-II定义“怎么说”,下层HSMS和物理层定义“怎么传”。每一层各司其职,互不干扰。这种分层思想,在工业通信协议里非常常见。
3.6 避坑指南
最后,分享几个我踩过的坑:
- 消息超时:SECS/GEM通信有严格的超时机制。T3是回复超时,T5是连接超时。我曾经把T3设得太短,设备处理慢一点就断连了。建议T3至少设10秒以上。
- 字节序问题:SECS-II里整数是大端序(Big-Endian)。如果你用的小端序CPU,记得做转换。我见过有人直接memcpy,结果数据全反了。
- 状态机混乱:GEM定义了设备的状态机,比如INIT、EQUIPMENT_OFF、ATTEMPT_ONLINE等。设备必须在正确的状态下才能处理某些消息。别想着跳过状态直接发指令,设备会直接拒绝。
特别注意:SECS/GEM标准文档(SEMI E5、E30、E37)是必读的。网上有很多二手资料,但真正遇到问题,还得翻标准原文。我电脑里一直存着这几份PDF,调试时随时查。
好了,这一章就到这里。SECS/GEM是半导体自动化的基石,搞懂它,后面的编程实战才能顺利推进。下一章咱们会动手写一个简单的SECS通信程序,到时候你就知道这些概念怎么落地了。
公众号:蓝海资料掘金营,微信deep3321