c#-SECS/GEM协议入门

        做光伏,半导体非标设备的小伙伴肯定对SECS/GEM协议有所耳闻,不同于普通串口、TCP自定义协议,SECS/GEM不是简单的数据收发协议,而是一套半导体工厂标准化的设备通信+设备行为规范体系。作为对接机台与工厂MES、EAP系统的上位机开发人员,彻底搞懂这套协议,是半导体上位机开发的核心能力,本着学习了解写下这篇博客,望各位指正

一、先搞懂:SECS/GEM 到底是什么?

        很多人会混淆SECS、GEM、HSMS三者的关系,这是入门最大的误区。我们可以用一句话精准概括:SECS/GEM = HSMS传输层 + SECS-II报文语法 + GEM设备行为规范,三者缺一不可,共同构成半导体设备通信标准体系。注:SEMI是一个标准体系,覆盖了半导体制作的方方面面,最主要的就是E系列,在整个SEMI体系中,E系列(Equipment Automation)是设备与工厂信息系统对接的基石。从最底层的物理通信(串口/网口),到消息格式、设备行为模型、批次管理,E系列标准定义了”设备自动化”的完整协议栈。

核心概念拆解

  • ECS-II(SEMI E5):应用层报文协议。定义了所有通信消息的格式、数据类型、流(Stream)和功能(Function)编码,是上位机和设备对话的“语言语法”,规定了谁发消息、消息格式是什么、应答规则是什么。

  • E5还定义了消息体的数据类型系统,包括:

    数据类型代号说明
    ListL有序列表,可嵌套
    BinaryB二进制数据
    BooleanBOOLEAN布尔值
    ASCIIAASCII字符串
    Signed IntegerI1/I2/I4/I8有符号整数(1/2/4/8字节)
    Unsigned IntegerU1/U2/U4/U8无符号整数
    FloatF4/F8浮点数(4/8字节)
  • HSMS(SEMI E37):高速消息服务,是SECS的底层传输协议。基于TCP/IP以太网通信,替代了老旧的SECS-I串口通信,是目前工业现场主流的传输方式,负责保证数据可靠收发、重连、心跳、消息分片。

  • GEM(SEMI E30):通用设备模型,也是整套协议的核心灵魂。它不是通信协议,而是设备行为标准。规定了设备的状态机、事件上报、告警机制、远程控制、数据采集规则,统一了所有半导体设备的交互逻辑,让不同厂商的设备能适配同一套工厂上位机系统。现在已经在原有的基础上更新到GEM300

二、协议分层架构

第一层:传输层(HSMS)

        在开发中无需手动使用 Socket、TcpClient 裸写底层通信,我选择的方案是SECS4NET开源库。该库已经完整封装了HSMS底层逻辑,内置连接管理、标准心跳保活、断线自动重连、消息帧收发、粘包拆包、消息分片重组等能力。开发者无需关注底层TCP通信细节,只需要配置参数、启动服务,即可直接实现设备与上位机的可靠通信,极大降低底层开发出错概率。

第二层:报文解析层(SECS-II)

        对HSMS传输的二进制数据进行编解码。SECS-II有严格的报文结构:消息头+消息体,支持多种数据类型(U1/U4、I1/I4、ASCII、List等)。C#开发核心工作就是字节数组与SECS报文对象的互转

第三层:业务逻辑层(GEM)

        整套协议的业务核心,定义交互规则。

        比如:设备端和Host通过S1F1来确定是否在线,EQ/HOST 发出S1F1,HOST/EQ回复S1F2;EQ通过S5F1主动上报报警信息,

        需要注意,作为设备端(EQ),很少主动对Host发送指令,我总结了下,设备端主动发起常用的有

基础通信类
指令消息名称是否需要回复
S1F1确认设备是否在线需要Host回复S1F2
S1F13建立通信需求

需要Host回复S1F14

报警管理
S5F1设备主动上报报警需要Host回复S5F2
事件上报
S6F1设备发送Trace采样数据需要Host回复S6F2
S6F11设备发送事件报告需要Host回复S6F12

我会在结尾Po上最新的SF指令和描述,需要的可以作为参考

三、上位机开发高频核心流(Stream)与指令

SECS协议定义了数十个Stream,作为C#上位机开发,90%的业务场景只需要掌握6大核心Stream,无需全盘记忆,精准适配开发需求。

1. S1 设备状态与控制握手(基础必备)

设备通信基础握手、状态查询,是设备上线的第一步交互。

  • S1F1 / S1F2:设备在线握手/应答,设备上电后主动向上位机发起上线通知,是通信建立的核心指令

  • S1F3 / S1F4:设备状态查询/应答,上位机主动获取设备当前运行、空闲、故障等状态

2. S2 设备远程控制(核心业务)

上位机对设备的远程操作、参数配置、任务调度。

  • S2F13 / S2F14:设备参数读取与应答

  • S2F15 / S2F16:设备参数写入与应答

  • S2F41 / S2F42:远程命令下发与应答,实现设备启动、停止、暂停等核心控制

3. S5 告警管理(设备异常监控)

设备故障、异常告警的上报与确认,是上位机监控的关键功能。

  • S5F1 / S5F2:告警事件上报与应答,设备触发异常时主动推送消息

  • S5F3 / S5F4:告警列表查询,上位机可主动拉取设备所有未处理告警

4. S6 数据事件上报(生产数据采集)

设备生产过程数据、自定义事件上报,用于生产追溯、数据统计。

5. S10 终端交互

设备弹窗消息、人工交互提示上报,适配现场人工操作场景。

四、踩坑场景

  • 坑1:忽略SECS4NET应答匹配机制:很多新手手动管理消息请求应答,实则SECS4NET原生通过TransactionId精准匹配请求与应答消息。如果手动篡改、重复使用事务ID,会导致消息错乱、应答丢失,必须遵循库的事务ID自增、匹配规则。

  • 坑2:不熟悉SECS4NET数据类型封装:库对SECS所有原生数据类型做了封装,若混用C#原生类型替代库内置数据实体,会导致报文格式不标准、设备解析报错。比如List嵌套报文,必须使用SECS4NET专属的List结构构建,不可用C#普通List。

  • 坑3:未遵循GEM状态机规则:很多新手只做数据收发,不维护设备状态,导致下发指令被设备拒收,排查问题耗时很久。

  • 坑4:未正确配置SECS4NET心跳参数:库默认心跳参数不一定适配现场设备,心跳间隔、超时时间配置不当,会出现频繁断连、误判离线问题,必须根据设备手册自定义适配HSMS心跳参数。

  • 坑5:所有SECS消息的是否应答、是否需要回复,并非自定义功能,严格对应 SECS-II 协议标准中的 Reply Flag(应答标记位),这是唯一控制状态。

    Reply Flag 取值规则ReplyFlag = 1:Need Reply(需要回复),标准强制应答消息,设备/Host必须返回对应F功能应答包

    ReplyFlag = 0:No Reply(无需回复),单向上报消息,无需任何应答

五、附录

S/F消息名称方向Reply描述
S1F1Are You There (R)H↔EYes确认设备在线
S1F2On Line DataH↔ENoS1F1 回复,返回设备 MDLN 和 SOFTREV
S1F3Selected Equipment Status Request (SSR)H→EYes查询指定状态变量(SV)的当前值
S1F4Selected Equipment Status Data (SSD)E→HNo返回请求的状态变量值
S1F11Status Variable Namelist Request (SVNR)H→EYes查询 SV 的名称和单位定义
S1F12Status Variable Namelist Reply (SVNRR)E→HNo返回 SV 名称列表
S1F13Establish Communications Request (CR)H↔EYes建立通信请求
S1F14Establish Communications Acknowledge (CRA)H↔ENo通信建立确认回复
S1F15Request OFF-LINE (ROFL)H→EYesHost 请求设备下线
S1F16OFF-LINE Acknowledge (OFLA)E→HNo设备确认下线请求
S1F17Request ON-LINE (RONL)H→EYesHost 请求设备上线
S1F18ON-LINE Acknowledge (ONLA)E→HNo设备确认上线请求
S2F13Equipment Constant Request (ECR)H→EYes查询设备常量(EC)的当前值
S2F14Equipment Constant Data (ECD)E→HNo返回设备常量值
S2F15New Equipment Constant Send (ECS)H→EYes设置设备常量(EC)新值
S2F16New Equipment Constant Ack (ECA)E→HNo设备常量设置确认
S2F17Date and Time Request (DTR)H→EYes查询设备日期时间
S2F18Date and Time Data (DTD)E→HNo返回设备日期时间
S2F29Equipment Constant Namelist Request (ECNR)H→EYes查询 EC 的名称、范围定义
S2F30Equipment Constant Namelist (ECN)E→HNo返回 EC 名称定义
S2F31Date and Time Set Request (DTS)H→EYes设置设备日期时间
S2F32Date and Time Set AcknowledgeE→HNo时间设置确认
S2F33Define Report (DR)H→EYes定义报告(RPTID→DVID/VID 映射)
S2F34Define Report Acknowledge (DRA)E→HNo报告定义确认
S2F35Link Event Report (LER)H→EYes关联事件与报告(CEID→RPTID 映射)
S2F36Link Event Report Acknowledge (LERA)E→HNo事件关联确认
S2F37Enable/Disable Event Report (EDER)H→EYes启用/禁用事件报告
S2F38Enable/Disable Event Report Ack (EDEA)E→HNo事件启用/禁用确认
S2F41Host Command Send (HCS)H→EYesHost 发送远程命令(Remote Command)
S2F42Host Command Acknowledge (HCA)E→HNo远程命令执行确认
S2F43Reset Spooling Streams and FunctionsH→EYes重置 Spooling 配置
S2F44Reset Spooling AckE→HNoSpooling 重置确认
S3F17Carrier Action Request (CAR)H→EYes请求载具相关动作 (GEM300)
S3F18Carrier Action AcknowledgeE→HNo载具动作确认
S5F1Alarm Report Send (ARS)E→HYes设备主动上报报警
S5F2Alarm Report Acknowledge (ARA)H→ENoHost 确认收到报警
S5F3Enable/Disable Alarm Send (EAS)H→EYes启用/禁用指定报警上报
S5F4Enable/Disable Alarm Ack (EAA)E→HNo报警启用/禁用确认
S5F5List Alarms Request (LAR)H→EYes查询报警列表
S5F6List Alarm Data (LAD)E→HNo返回报警列表数据
S6F1Trace Data Send (TDS)E→HYes设备发送 Trace 采样数据
S6F2Trace Data AcknowledgeH→ENo确认收到 Trace 数据
S6F11Event Report Send (ERS)E→HYes设备发送事件报告(最核心的数据采集消息)
S6F12Event Report Acknowledge (ERA)H→ENo确认收到事件报告
S6F15Event Report Request (ERR)H→EYesHost 主动请求事件报告
S6F16Event Report Data (ERD)E→HNo返回请求的事件报告数据
S6F19Individual Report RequestH→EYes请求单个报告数据
S6F20Individual Report DataE→HNo返回单个报告数据
S7F1Process Program Load Inquire (PPLI)H→EYesHost 询问是否可下载配方
S7F2Process Program Load Grant (PPLG)E→HNo设备同意/拒绝配方下载
S7F3Process Program Send (PPS)H→EYesHost 向设备发送配方数据
S7F4Process Program Acknowledge (PPA)E→HNo配方接收确认
S7F5Process Program Request (PPR)H→EYesHost 请求上传设备配方
S7F6Process Program Data (PPD)E→HNo设备返回配方数据
S7F17Delete Process Program Send (DPPS)H→EYesHost 请求删除设备上的配方
S7F18Delete Process Program AckE→HNo配方删除确认
S7F19Current EPPD RequestH→EYes查询设备当前所有配方列表
S7F20Current EPPD DataE→HNo返回配方 ID 列表
S9F1Unrecognized Device ID (UDN)E→HNo无法识别的设备 ID
S9F3Unrecognized Stream Type (USN)E→HNo无法识别的 Stream
S9F5Unrecognized Function Type (UFN)E→HNo无法识别的 Function
S9F7Illegal Data (IDN)E→HNo非法数据格式
S9F9Transaction Timer Timeout (TTN)E→HNo事务超时(T3 超时)
S9F11Data Too Long (DLN)E→HNo数据超长
S9F13Conversation Timeout (CTN)E→HNo多块消息会话超时
S10F1Terminal Request (TR)H→EYesHost 向设备终端发送显示消息
S10F2Terminal Request AcknowledgeE→HNo终端消息确认
S10F3Terminal Display, Single (TDS)H→EYesHost 发送单行终端显示
S10F4Terminal Display, Single AckE→HNo单行终端显示确认
S10F5Terminal Display, Multi-Block (TDM)H→EYesHost 发送多行终端显示
S10F6Terminal Display, Multi-Block AckE→HNo多行终端显示确认
S10F9Broadcast (BC)H→EYesHost 广播消息到所有终端
S10F10Broadcast AcknowledgeE→HNo广播确认
S14F1GetAttr RequestH→EYes查询对象属性 (GEM300)
S14F2GetAttr DataE→HNo返回对象属性值
S14F9SetAttr RequestH→EYes设置对象属性 (GEM300)
S14F10SetAttr DataE→HNo对象属性设置确认
S15F3Recipe Namespace Action ReqH→EYes配方命名空间操作 (GEM300)
S15F4Recipe Namespace Action AckE→HNo配方操作确认
S16F5Process Job Create Req (PJC)H→EYes创建加工作业 (GEM300)
S16F6Process Job Create AckE→HNo加工作业创建确认
S16F11Process Job Command ReqH→EYes加工作业控制命令 (START/STOP/ABORT 等)
S16F12Process Job Command AckE→HNo作业控制确认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值