当前位置:首页 > 智能制造 CIM/MES > 正文内容

FAB环境SECS/GEM数据采集架构实战:从RS232串口到HSMS高速通讯的演进

FAB环境SECS/GEM数据采集架构实战:从RS232串口到HSMS高速通讯的演进

写在前面:我是国内某十二英寸晶圆厂自动化团队的一名软件工程师,过去三年里主要的工作就是把车间里上百台半导体设备"连"到我们的MES系统上。这篇文章不是教科书,而是我亲手把一个50%联机率的烂摊子,改造成98%稳定在线、采集延迟从3秒压到200毫秒的真实复盘。如果你们厂也还在和RS232串口、掉线、超时这些破事纠缠,希望这篇能省你几个月踩坑时间。

一、问题背景:当"连不上"成为产能的隐形杀手

2021年初我接手这个项目时,产线有三百多台设备,自动化覆盖率却低得离谱。设备通讯几乎全靠RS232串口线直连工控机,所谓"采集"就是每台机器接一根串口线,跑一个Python脚本轮询。当时我们统计过一个触目惊心的数字:全厂设备平均联机率只有50%左右——也就是说,任意时刻都有近一半的设备在掉线、假死或数据错乱,根本无法被MES调度和追溯。

问题体现在几个具体的痛点上。第一,串口物理层极不稳定,线材老化、接触不良是家常便饭,一台设备一天掉线五六次是常态;第二,不同设备厂商的波特率、校验位、停止位配置五花八门,光是适配就耗掉大量人力;第三,所有脚本都用多线程轮询同一个串口,线程互相抢占导致数据错包、漏采;第四,也是最致命的,点对点的采集模式让数据滞后再加上MES那一层的处理,端到端延迟普遍在3秒以上,工艺异常根本来不及拦截。

我印象最深的是一次光刻机批次异常。因为串口掉线,那台设备的曝光参数在MES侧"消失"了四十多分钟,等我们人工点检发现时,已经有一批晶圆走了错误配方。这件事直接把自动化改造推上了优先级最高的位置。我当时的结论很明确:RS232这条路走到头了,必须换架构、换协议、换通讯范式。

二、技术原理:先把SECS/GEM这套"黑话"讲清楚

要动手改造,得先搞懂设备到底在说什么话。半导体设备通讯有一套行业标准,叫SECS/GEM,由SEMI(国际半导体产业协会)制定。它其实拆成了几层:SECS-I负责RS232串口时代的物理层和传输层;SECS-II定义消息内容,也就是SxFy这套报文格式(比如S1F3是配方请求、S6F11是事件上报);而GEM(Generic Equipment Model)则是建立在SECS之上的行为模型,它用一套状态机约束设备"应该怎么响应上位机"。

GEM状态机是我后来反复啃的重点,核心分三类状态。通信状态机(Communication State):DISABLED(通讯禁用)到ENABLED(启用),再到COMMUNICATING(已建立通讯);控制状态机(Control State):OFFLINE(离线,设备不响应工艺指令)和ONLINE(在线),ONLINE下又分LOCAL(本地手动)和REMOTE(远程受控);还有工艺状态机描述设备在做哪道工序。理解这套状态机,你才知道什么时候该发Select.req去握手,什么时候设备处于OFFLINE就该停止下发指令——很多掉线事故,本质就是没尊重设备的状态反馈。

真正让我眼前一亮的是HSMS(High-Speed SECS Message Services)。它把SECS-II的消息承载从RS232串口搬到了TCP/IP网络上,定义了HSMS-SS(Single Session,单会话被动连接)等模式。一句话:设备不再是接一根串口线,而是开一个TCP端口,EAP(Equipment Automation Program,设备自动化程序)作为客户端连上去。这一换,带宽、并发、稳定性全部质变。EAP在这里扮演"翻译官"和"守门员":向下用SECS/GEM和每台设备对话,向上把数据按MES需要的格式(工单、批次、参数、事件)推过去,同时把MES的指令翻译回设备能懂的SxFy报文。

所以从架构视角看,数据流向是一条清晰的链:设备(Equipment)→ 设备控制器(Controller)→ 通讯层(RS232或HSMS-SS)→ EAP网关(SECS/GEM状态机)→ MES与实时数据库(SPC、追溯、OEE)。下面这张架构图,就是我改造后落地的真实拓扑。

图1 FAB环境SECS/GEM数据采集架构图(设备→EAP→MES)

三、实战案例:50%到98%,我是怎么把联机率翻上来的

2021年第二季度,我带着两个同事启动改造。第一步是诊断,我们拉出全部掉线日志,发现50%联机率背后的根因集中在五类:线材与接触不良(物理层)、波特率/校验位配置漂移、超时设置过大导致假死无人感知、多线程抢占串口造成错包、以及部分老设备厂商的GEM实现根本不标准(比如明确该回S1F2的,它回了个空包)。诊断清楚后,我定了一个原则:能上HSMS-SS的设备全部上HSMS,实在只有串口的,用串口服务器(串口转TCP网关)把它也接到同一个EAP框架里,从物理上统一入口。

第二步是重写通讯框架。我抛弃了原来每人一台机器一个轮询脚本的散装模式,做了一套基于事件驱动的EAP网关:每台设备一个独立TCP会话线程,接收走select事件驱动而非sleep轮询;统一的GEM状态机管理OFFLINE/ONLINE/REMOTE;独立的心跳定时器(Linktest)检测掉线,30秒无响应立即标记异常并告警,而不是像以前那样傻等超时。对那批只支持串口的老设备,我们用MOXA串口服务器把它转成TCP,代码层完全复用HSMS会话模型,物理差异被屏蔽在底层。

第三步是灰度推广。我没有一次性全切,而是先挑了一条最乱的刻蚀段(12台设备)做试点,跑满两周稳定后再扩展到CVD、量测,最后是光刻机这种高价值设备。每扩一类设备,我都先建POC把该厂家的GEM实现摸透——比如某日系光刻机的S1F3配方字段顺序和文档完全相反,这种坑必须单台验证。整个推广周期约五个月。

结果超出预期。全厂平均联机率从50%提升到98%,掉线时长中位数从每天累计近两小时降到不足十分钟;端到端采集延迟从3秒降到200毫秒,工艺异常第一次能做到"秒级"拦截;因为数据完整了,SPC的工序能力指数(Cpk)统计终于可信,OEE报表也从"拍脑袋"变成"看实时数据"。最让我有成就感的是,那台曾经消失过配方参数的光刻机,后来成了全厂最稳定的节点之一。

四、完整代码:一个最小可用的HSMS-SS会话实现

下面是我EAP网关里HSMS-SS被动连接会话的核心骨架(脱敏后),约60行,覆盖了握手、超时、心跳、报文解析四件最关键的事。请注意:这是教学级最小实现,生产环境还要补ACK超时重传、会话池、日志与告警。

# -*- coding: utf-8 -*-

import socket, threading, struct, queue, time

class HsmsSession(threading.Thread):

"""每台设备一个独立 TCP 会话,取代 RS232 的"抢串口"模式"""

def __init__(self, sock, addr, timeout=5):

super().__init__(daemon=True)

self.sock = sock

self.addr = addr

self.timeout = timeout # 超时设置:避免 RS232 时代无限阻塞

self.state = "OFFLINE" # GEM 控制状态机:OFFLINE/ONLINE/REMOTE

self.alive = True

self._hb = time.time()

self.queue = queue.Queue()

def _recv_n(self, n):

buf = b""

self.sock.settimeout(self.timeout)

while len(buf) < n:

chunk = self.sock.recv(n - len(buf))

if not chunk:

return None

buf += chunk

return buf

def _recv_msg(self):

# HSMS 头部固定 10 字节:长度(4B)+会话ID(2B)+头部(1B)+类型(1B)+系统字节(4B)

hdr = self._recv_n(10)

if not hdr:

return None

length = struct.unpack(">I", hdr[:4])[0]

body = self._recv_n(length) if length else b""

return hdr + body

def run(self):

# 单连接单线程 + 事件驱动,超时交给心跳定时器,不阻塞接收

while self.alive:

try:

msg = self._recv_msg()

except socket.timeout:

if time.time() - self._hb > 30: # 30s 无心跳即判掉线

self.alive = False

continue

if msg is None:

break

self._handle(msg)

self.sock.close()

def _handle(self, msg):

mtype = msg[6]

if mtype == 1: # Select.req:建立通讯状态

self.state = "ONLINE"

self._send(self._build(5, msg[4:8]))

elif mtype == 6: # Data Message:解析 S6F11 等事件上报

self._on_data(msg[10:])

def _on_data(self, body):

self.queue.put(body) # 推入上报队列,由采集线程批量落库

def _send(self, data):

try:

self.sock.sendall(data)

except OSError:

self.alive = False

@staticmethod

def _build(flag, sysbytes):

return struct.pack(">I", 4) + b"\x00\x00" + bytes([flag, 0]) + sysbytes

为什么这样写?我挑三个最关键的决定解释。其一,用"每台设备一个独立会话线程"取代原来的多线程轮询同一串口,是从根上消灭了并发抢端口导致的错包——这是联机率从50%爬起来的第一功臣。其二,超时与心跳分离:接收循环只负责读,掉线判断交给30秒心跳定时器,这样即便对端假死,也不会让接收线程永久阻塞,系统能快速感知异常。其三,HSMS头部固定10字节、长度字段在前,所以我先收10字节再按长度收正文,这个"定长头+变长体"的解析方式能正确处理粘包和半包,比RS232按行分隔要可靠得多。这段代码跑在我们网关里,单机能稳定维持两百个以上并发会话,是RS232时代想都不敢想的。

五、效果对比:RS232与HSMS-SS到底差在哪

光说"变好了"不够,我把改造前后的关键指标拉了一张多维度的对比表。数据来自我们产线改造前后的实测均值,部分并发、建链指标是实验室压测结果,用于说明范式差异。

从这张表能看出,HSMS带来的不只是"快",更是一整套可运维性的跃迁。延迟从3秒降到200毫秒,意味着工艺异常可以在晶圆流转到下一站之前就被拦截,这是质量防呆的本质区别。并发从"一串口一设备"到单节点两百会话,直接让我们可以用少量网关服务器接管全厂,TCO大幅下降。而数据完整率冲到99.5%,才让下游的SPC、OEE、批次追溯真正有了可信的数据底座。下面这张柱状图把延迟、并发、建链三项最直观的差距画了出来。

图2 RS232 与 HSMS-SS 通讯性能对比(延迟/并发/建链)

六、实施建议:分阶段推进,但别低估这几类风险

如果你也想做类似改造,我强烈建议分阶段,不要学我早期那种"热血式全切"的冲动。第一阶段是评估与POC:盘点全厂设备通讯接口,把支持HSMS-SS的、只支持SECS-I串口的、以及完全私有协议的分别归类;挑2~3台典型设备做连通性验证,把每家厂商GEM实现的"方言"摸清楚,这一步能避免后期90%的返工。第二阶段是单线试点:选一条最乱的工艺段跑满两周,验证联机率、延迟、掉线恢复是否达标,同时把告警和运维流程跑顺。第三阶段才是全厂推广:按设备类型分批切,每批留回滚预案。

风险方面,我踩过的坑你得提前防。第一,协议不兼容:不同厂商、甚至同厂商不同型号,对GEM标准的实现都有差异,有的S1F3字段顺序反了、有的事件ID自定义,必须单台验证,妄想一份配置通吃全厂一定会翻车。第二,超时与心跳设置:超时太长会假死无人知,太短又会误杀正常波动,心跳间隔要结合设备回复习惯调参,我们最终定的30秒是压了一两个月才稳定的值。第三,多线程并发:哪怕切了HSMS,网关侧会话池、队列、重传也要设计好,否则高并发下照样错包。第四,网络隔离与安全:HSMS走TCP,设备网和办公网必须做隔离,曾有一次误把设备网桥接到办公网导致广播风暴,教训深刻。第五,人员技能:SECS/GEM这套黑话门槛不低,团队至少要有人能读懂SxFy报文,否则出了怪问题谁都看不懂。

七、进阶方向:这套架构的边界与未来

说实话,即便做到98%联机率,我现在也清楚这套架构的边界在哪里。它最大的局限是"被动采集":数据字段、配方映射、事件定义基本还是靠人工逐台配置,设备一换型号就得重新适配;GEM标准本身也覆盖不了所有高带宽的trace数据,比如一台量测设备每秒产生的海量波形,靠S6F11一条条上报会把网络打爆。另外,状态机虽然规范,但各厂商的"自由发挥"让自动化难以完全标准化。

未来的方向我认为有三个。一是EDA(Equipment Data Acquisition,即Interface A),它绕开GEM、用HTTP/XML直接把设备内部的高密度数据按需拉取,专门解决海量trace数据的采集,我们正在试点用它接管量测段。二是云边协同与AI:把采集上来的数据在边缘侧做实时SPC和异常检测,再上云做跨厂的大数据和数字孪生,这块和现在流行的半导体AI质检、预测性维护天然契合。三是标准融合:OPC UA over TSN等 newer 工业标准正在向半导体渗透,未来也许设备通讯会统一到更现代的框架上。但无论怎么演进,SECS/GEM这套"设备语言学"沉淀下来的状态机思想,仍是理解半导体自动化的地基——先把今天的RS232换成HSMS,把联机率做扎实,再谈那些花哨的未来,才是一个工程师该有的节奏。

写在最后:聊聊?

你所在的工厂现在设备通讯是RS232还是已经上了HSMS?联机率卡在多少?遇到过最离谱的厂商GEM"方言"是什么?欢迎在评论区聊聊你的踩坑经历,我能答的都会回。如果这篇对你有帮助,点个赞和收藏,后面我还会写EDA/Interface A海量trace数据采集的实战,以及EAP网关高并发设计的细节。

本文作者:叶知晖 | 博客主页:blog.csdn.net/yeflashzhihui | 转载请注明出处。

标签: SECS-GEM

相关文章

良率工程实战:从72%到89%的完整爬坡路径

良率工程实战:从72%到89%的完整爬坡路径

良率工程实战:从72%到89%的完整爬坡路径 一、问题背景:良率是晶圆厂的生命线 良率(Yield)是晶圆厂最核心的KPI,直接决定了盈利能力和市场竞争力。我在晶圆厂负责良率工程的这些年,深刻体会到良...

SPC统计过程控制:FAB质量管理的定海神针

SPC统计过程控制:FAB质量管理的定海神针

SPC统计过程控制:FAB质量管理的定海神针 Statistical Process Control — 用数据说话,让异常无处遁形 一、问题背景:FAB里每天产生上百万个数据点,靠什么来管理质量?...

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选 大家好,我是老张。前面讲完了光刻,今天聊聊刻蚀(Etching)。如果说光刻是「画图」,那刻蚀就是「刻字」——把光刻转移到光刻胶上的图形,精确地转移到下面...

半导体产业全景:从沙子到芯片的完整产业链

半导体产业全景:从沙子到芯片的完整产业链

半导体产业全景:从沙子到芯片的完整产业链 大家好,我是老张,在半导体行业摸爬滚打了十五年。从Fab厂的一线工艺工程师,到现在的产业分析师,我有幸见证了这个行业最波澜壮阔的十年。今天,我想用最接地气的方...

晶圆制造全流程:硅片是怎么从沙子变出来的

晶圆制造全流程:硅片是怎么从沙子变出来的

晶圆制造全流程:硅片是怎么从沙子变出来的 大家好,我是老张。上篇讲了半导体产业全景,很多朋友私信说「想深入了解晶圆制造」。今天我就把这部分展开,从一捧沙子到一片光洁如镜的硅晶圆,每一步的参数、原理、设...

CMP化学机械抛光:让晶圆表面平整到原子级

CMP化学机械抛光:让晶圆表面平整到原子级

CMP化学机械抛光:让晶圆表面平整到原子级 Chemical Mechanical Planarization — 半导体制造中最精密的表面平坦化技术 一、问题背景:为什么芯片需要"磨皮&q...