第三章 设备互联与数据采集:SECS/GEM协议详解、设备联网方案、边缘计算网关部署

各位工程师,咱们直接进入正题。

晶圆厂搞数字化,第一步是什么?不是上MES,不是搞大数据。是把设备连起来,把数据采上来。设备不联网,后面全是空谈。这一章,我就把设备互联这件事儿,从协议到方案,再到落地部署,掰开了讲清楚。

3.1 SECS/GEM协议:半导体设备的通用语言

先说说SECS/GEM。这玩意儿,说白了就是半导体设备之间、设备和上位系统之间沟通的“普通话”。

我刚开始接触这行时,觉得这协议太古老了,怎么还在用?后来吃过亏才明白,稳定可靠才是工业现场的第一要义。SECS/GEM虽然看着笨重,但它在半导体行业扎根了几十年,所有主流设备都支持。

3.1.1 协议栈结构

SECS/GEM不是一个协议,是一组协议。从上到下分几层:

  • SECS-I (E4):物理层和链路层。早期用RS-232,现在基本都是TCP/IP了。
  • SECS-II (E5):消息层。定义了消息的格式和内容,比如“设备状态报告”、“配方下载”这些。
  • GEM (E30/E37):应用层。定义了设备的行为模型,比如设备该在什么时候主动上报数据。

嗯,这里要注意。很多人把SECS和GEM混着叫,其实不对。SECS是通信协议,GEM是设备行为标准。你设备支持GEM,才算是真正意义上的“可互联”。

3.1.2 核心概念:HSMS与SECS-II消息

现在工厂里,设备互联基本都用HSMS(High-Speed SECS Message Services)。说白了,就是把SECS消息封装在TCP/IP包里传。

我给大家看一段典型的SECS-II消息结构,用Python模拟一下:

# 模拟一个SECS-II消息:设备状态数据上报 (S1F1)
# Stream 1, Function 1: Are You There Request
secs_message = {
    "header": {
        "stream": 1,
        "function": 1,
        "direction": "host_to_eqp",  # 主机到设备
        "block": 0,
        "system_bytes": 0x0001
    },
    "body": None  # 空body,表示询问
}

# 设备回复 S1F2: 设备在线
secs_reply = {
    "header": {
        "stream": 1,
        "function": 2,
        "direction": "eqp_to_host",
        "block": 0,
        "system_bytes": 0x0001
    },
    "body": {
        "mdln": "ASML NXT:1980Di",  # 设备型号
        "softrev": "3.2.1"          # 软件版本
    }
}

你看,结构很清晰。Stream和Function组合起来,就定义了一条指令。S1F1就是“你在吗?”,S1F2就是“我在,这是我的型号”。

个人经验:调试SECS接口时,我最常用的工具就是Wireshark抓包。把HSMS端口(默认5000)的包抓下来,看Stream/Function对不对。有一次排查了三天,最后发现是System Bytes没对上,设备不认。从那以后,我每次联调都先检查System Bytes的递增逻辑。

3.2 设备联网方案:从单机到互联

协议讲完了,咱们聊聊怎么把设备真正连起来。工厂里的设备五花八门,新设备、老设备、进口的、国产的,联网方案不能一刀切。

3.2.1 新设备:原生SECS/GEM支持

现在的新设备,尤其是200mm、300mm产线上的,基本都自带SECS/GEM接口。你只需要:

  1. 跟设备厂商确认支持的协议版本(E5、E30、E37)。
  2. 配置IP地址和端口号(通常是5000或5001)。
  3. 联调测试,确认数据能正常收发。

我建议,新设备到厂验收时,就把SECS联调作为一项必测项。别等到上线了才发现通信有问题,那时候再改就麻烦了。

3.2.2 老设备:加装协议转换器

老设备就头疼了。很多只有干接点、RS-232串口,甚至只有指示灯。怎么办?加装协议转换器。

市面上有专门的SECS/GEM网关盒子,一头接设备的串口或IO,另一头输出标准的SECS/GEM协议。我见过最极端的案例,是一台90年代的扩散炉,只有几个继电器触点。我们硬是加了个PLC,把触点信号转成Modbus,再用网关转成SECS/GEM。虽然绕了点,但数据总算是采上来了。

避坑指南:我曾经在一个项目里,图便宜买了杂牌协议转换器。结果设备一跑高速,网关就丢包。最后换了工业级的网关,问题才解决。记住,工业现场,稳定第一,别在网关这种关键节点上省钱。

3.2.3 联网拓扑:星型还是链型?

设备多了,网络拓扑就得规划。我个人习惯用星型拓扑,每台设备单独拉网线到车间交换机。虽然布线成本高一点,但故障隔离性好。一台设备网线松了,不影响其他设备。

链型拓扑(菊花链)虽然省线,但一个节点断了,后面一串都断。除非是空间极度受限的机台,否则我不推荐。

3.3 边缘计算网关部署:数据的第一道处理站

数据采上来了,直接往云端或MES送?别急。数据量太大,网络带宽扛不住,而且很多数据需要实时处理。这时候,就需要边缘计算网关。

3.3.1 网关的核心功能

边缘网关不是简单的协议转换器。它要做三件事:

  • 数据采集:从设备收数据,支持SECS/GEM、Modbus、OPC UA等多种协议。
  • 数据预处理:过滤掉无效数据,做简单的计算(比如求平均值、统计良率)。
  • 数据转发:把处理后的数据,用MQTT、HTTP等方式,发给上层系统。

你想想看,一台光刻机每秒产生几百条数据,全传上去,服务器不崩才怪。在网关里做一层过滤,只传关键数据,这才是聪明的做法。

3.3.2 部署架构:一拖多 vs 一对一

网关部署有两种模式:

模式 适用场景 优点 缺点
一拖多(1个网关管多台设备) 同类型设备集中区域 成本低,管理方便 单点故障风险高
一对一(每台设备配1个网关) 关键设备、高价值设备 故障隔离,性能有保障 成本高,部署工作量大

我个人建议,关键设备(光刻机、刻蚀机)用一对一模式。辅助设备(清洗机、烘箱)可以用一拖多。平衡成本和可靠性。

3.3.3 实战:用Node-RED搭建一个简单的边缘网关

这里我给大家演示一个轻量级的方案。用Node-RED,配合SECS/GEM插件,几分钟就能搭一个原型。

// Node-RED 流程示例:接收SECS消息,过滤后转发到MQTT
// 1. 输入节点:SECS/GEM Listener (监听设备消息)
// 2. 函数节点:数据过滤 (只保留状态变化的数据)
// 3. 输出节点:MQTT Out (发布到broker)

// 函数节点代码示例 (JavaScript)
let msg = context.get('lastMsg') || {};
let currentData = msg.payload;

// 如果数据没有变化,丢弃
if (currentData.status === msg.lastStatus) {
    return null;  // 返回null表示丢弃消息
}

// 更新缓存
msg.lastStatus = currentData.status;
context.set('lastMsg', msg);

// 添加时间戳
currentData.timestamp = Date.now();

return { payload: currentData };

你看,逻辑很简单。收到设备状态,跟上次比一下。没变化就扔掉,有变化才发出去。这一下就能过滤掉90%的冗余数据。

核心要点:边缘计算网关不是万能的。它做的是“第一道处理”,把数据变干净、变精简。真正的深度分析,还是得交给上层平台。但如果没有这道处理,上层平台再牛也跑不动。

3.4 本章知识体系总览

说了这么多,我画张图帮大家理一理思路。这张图展示了从设备到上层系统的完整数据流。

设备互联与数据采集知识体系 设备层 新设备 (原生SECS/GEM) 老设备 (加装协议转换器) 非标设备 (PLC/IO转接) 通信协议层 SECS-I / HSMS (传输层) SECS-II (消息层) GEM (设备行为模型) 边缘计算网关层 数据采集 (多协议接入) 数据预处理 (过滤/计算) 数据转发 (MQTT/HTTP) 上层系统 (MES / 大数据平台 / 云) 数据流向

这张图从下往上看,就是数据从设备产生,经过协议封装,到边缘网关处理,最后送到上层系统的完整链路。每一层都有它的职责,缺一不可。

好了,设备互联和数据采集这部分,我就讲这么多。记住,协议是基础,方案是骨架,网关是大脑。把这三样搞明白了,你的晶圆厂数字化改造,第一步就算走稳了。