1. SECS/GEM概述:半导体制造自动化的“通用语言”
各位工程师朋友,大家好。我是老张,在半导体设备通信这行摸爬滚打了十几年。今天咱们开始聊SECS/GEM,这门课我会尽量用大白话把那些晦涩的协议讲明白。
先问个问题:你见过一个晶圆厂里,几十台不同厂家的设备,怎么做到像一支军队一样协同工作的?
答案就是SECS/GEM。它不是什么高深莫测的黑科技,说白了就是一套让设备(比如刻蚀机、光刻机)和上位机(MES,制造执行系统)能“说上话”的规则。没有它,每台设备都是信息孤岛,工厂根本跑不起来。
1.1 为什么需要SECS/GEM?—— 没有规矩,不成方圆
我刚开始入行那会儿,还没这么规范。每家设备商都有自己的“方言”。比如A公司的刻蚀机用串口发一串十六进制数,B公司的清洗机用TCP/IP传XML。MES系统要对接这些设备,得写一堆乱七八糟的驱动程序,维护起来简直是噩梦。
后来行业里的大佬们坐不住了,搞出了SECS/GEM这个“普通话”。它的核心价值就三点:
- 互操作性:不同厂家的设备,只要都支持SECS/GEM,就能用同一套接口对接。你换设备,MES侧基本不用改代码。
- 标准化:定义了消息怎么发、数据怎么传、事件怎么报。大家按规矩来,谁也别搞特殊。
- 可扩展性:协议本身很灵活,你可以定义自己的数据项和流程,满足各种特殊工艺需求。
1.2 SECS/GEM协议家族:四层结构,各司其职
SECS/GEM不是一个单一的协议,而是一个协议家族。它像洋葱一样,分了四层。我习惯从下往上讲,这样好理解。
| 层级 | 协议名称 | 通俗解释 | 主要职责 |
|---|---|---|---|
| 第1层(物理层) | SECS-I | 老式电话线(RS-232) | 定义物理连接、电气特性、传输速率(9600/19200 bps) |
| 第2层(传输层) | HSMS | 现代光纤宽带(TCP/IP) | 定义如何在以太网上可靠地传输SECS-II消息 |
| 第3层(消息层) | SECS-II | 信封里的标准信件格式 | 定义消息的结构、数据格式(如整数、浮点数、ASCII字符串) |
| 第4层(应用层) | GEM | 信件里的具体办事流程 | 定义设备的行为规范,比如怎么上报报警、怎么下载配方 |
你看,这个分层设计很巧妙。底层换了(从串口到以太网),上层的SECS-II和GEM基本不用动。这就是工程上的解耦思想。
1.3 协议栈整体架构:一张图看懂
光说理论太干,我画了张图,把整个协议栈的架构和通信流程串起来。你一看就明白。
这张图很直观。主机和设备就像两个对着站的人,他们都有嘴巴(物理层)、有耳朵(传输层)、有共同的语言(消息层)和办事的规矩(应用层)。消息从主机的GEM层一路向下,变成电信号传到设备,再一路向上解析,最终被设备的GEM层理解。
1.4 各协议详解:从物理到应用
1.4.1 SECS-I:老当益壮的串口通信
SECS-I是1980年代的标准,用RS-232串口。速度慢(最高19200 bps),但胜在稳定可靠。我在一些老旧的8寸线里还见过它。它定义了物理连接、字符格式和块传输协议。说白了,就是怎么把一堆字节可靠地从A点搬到B点。
1.4.2 HSMS:高速以太网通信
HSMS是后来为了适应高速生产而推出的。它用TCP/IP作为传输层,速度可以到100Mbps甚至更高。现在的新设备基本都用HSMS。它定义了连接建立、心跳检测、消息收发等机制。嗯,这里要注意,HSMS有两种模式:主动模式和被动模式。主机和设备谁先发起连接,这个在调试时经常搞反,是个坑。
1.4.3 SECS-II:标准化的消息语言
SECS-II定义了消息的格式。它把消息分成一个个“数据项”(Item),每个Item都有类型(比如布尔、整数、浮点数、ASCII字符串)和长度。消息本身用“流”(Stream)和“功能”(Function)来编号,比如S1F13代表“建立通信请求”,S1F14是它的回复。
我习惯把SECS-II消息想象成一份标准表格。表格的标题是“S1F13”,表格里的每一行都是一个数据项,比如设备ID、软件版本号等。这样解析起来非常清晰。
1.4.4 GEM:设备行为的“宪法”
GEM是最高层,也是最贴近业务的一层。它定义了设备必须支持哪些SECS-II消息,以及设备在不同状态下应该有什么行为。比如:
- 状态机:设备有“初始化”、“就绪”、“运行”、“报警”等状态,GEM规定了状态如何切换。
- 事件通知:当设备发生报警或完成一个批次时,必须主动上报。
- 配方管理:主机可以远程下载、上传、删除配方。
说白了,GEM就是一本设备操作手册。设备厂商按照这本手册来开发,用户按照手册来集成。大家都按规矩来,天下太平。
1.5 小结:协议栈的“分而治之”思想
回顾一下,SECS/GEM协议栈通过分层,把复杂的通信问题拆解成了四个小问题。每一层只关心自己的事,层与层之间通过标准接口交互。这种“分而治之”的思想,在工程上非常经典。
你想想看,如果没有这个分层,你要同时处理物理接线、网络连接、消息解析和业务逻辑,那代码得多乱?