YMS系统开发2-EAP自动化SECS/GEM协议详解
被这个协议搞昏头了,确实很复杂。
简单来说SECS协议分为3个部分:
1.连接层--分为串口连接和TCP/IP连接,前者是使用SECS-I进行连接,后者是用HSMS-SS连接
2.消息结构规范--就是管传输的消息是什么格式,定义消息结构、数据类型(如 List、ASCII、U4 等)及语义(Stream/Function 分类),由SECS-II控制
3.控制层--GEM,这个就是定义有哪些指令你可以发送,控制机台做什么的
HSMS的报文格式:
HSMS报文由三部分组成:
- 消息长度(Message Length):4字节无符号整数(大端序),表示消息头部 + 消息文本的总字节数(最小值为10)。
- 消息头部(Message Header):固定10字节,包含会话控制、消息类型等关键信息。
- 消息文本(Message Text):可变长度,承载SECS-II消息内容(如S1F3、S6F11等)。
eg:00 00 00 0A FF FF 00 00 00 01 00 00 00 00
其中前4位00 00 00 0A指的是报文长度不包括表示长度的起始的4个字节
报文头信息:
会话ID | Byte 0-1 | U2 | 16位设备唯一标识(最高位固定为0) | 0x0001 (设备ID=1) |
Header Byte2 | Byte 2 | U1 | 数据消息:高1位为等待位(W-Bit,1=需回复),低7位为SECS流号(Stream) 控制消息:状态码(如0x00) | 0x81 (W=1, Stream=1) |
Header Byte3 | Byte 3 | U1 | 数据消息:SECS功能码(Function) 控制消息:子类型(如SelectStatus) | 0x01 (Function=1) |
PType | Byte 4 | U1 | 编码格式(0=SECS-II标准;1-127保留;128-255厂商自定义) | 0x00 (默认SECS-II编码) |
SType | Byte 5 | U1 | 消息类型: 0=数据消息(Data) 1-9=控制消息(如Select.req、Linktest.rsp等) | 0x00 (数据消息) |
系统字节 | Byte 6-9 | U4 | 事务唯一标识(用于匹配请求与响应) | 0x00000001 (事务ID=1) |
注:
- W-Bit规则:若消息需回复(如S1F1),W-Bit=1;回复消息(如S1F2)W-Bit=0
- 控制消息特例:
Linktest.req/rsp
的会话ID固定为0xFFFF
PType:
取值 | 描述 |
0 | SECS-II编码 |
1-127 | 子标准保留 |
128-255 | 保留,未使用 |
SType:
取值 | 描述 |
0 | 数据消息 |
1 | select.req |
2 | select.rsp |
3 | deselect.req |
4 | deselect.rsp |
5 | linktest.req |
6 | linktest.rsp |
7 | reject.req |
8 | 未使用 |
9 | separate.req |
10 | 未使用 |
11-127 | 子标准保留 |
128-255 | 保留,未使用 |
消息文本:
消息文本即SECS-II消息体,采用嵌套的 数据项(Item) 和 列表(List) 结构
- 数据项头部(Item Header):
- 格式字节(1字节):
- 高6位:数据类型(如ASCII=
010000
,二进制=001000
) - 低2位:长度字段字节数(0/1/2/3字节)。1个字节最大值为255,如果后面的数据没有超过255后面两位就用 01 表示 及 01000001 十六进制表示为 41;
- 高6位:数据类型(如ASCII=
- 长度字段(1-3字节):数据内容的实际长度(大端序)。
- 格式字节(1字节):
- 数据内容(Item Body):具体数据值(如字符串、整数等)。
格式字节的第1位和第2位:定义Format byte后面有几个字节来表述Item Body的长度。取值只能1、2、3。( 如果值为2,则表示有2个字节表述Item Body的长度,即第2个和第3个字节。值为0是非法的,会产生错误。
示例:
| 格式字节 | 长度字段 | 数据内容 |
| 01000001 | 00000011 | 01000001 01000010 01000011 |
(0x41表示ASCII+1字节长度,0x03表示长度=3)
HSMS支持的数据类型:
工作模式与超时机制
- 连接模式:
- 主动模式(Active):设备作为客户端,主动连接Host(默认端口5000).此时设备的设置应该为remote IP/port:Host IP/port; local IP/port:equipment IP/port
- 被动模式(Passive):设备作为服务端,监听Host连接,此时设备的配置为:remote IP/port:equipment IP/port ; local IP/port: equipment IP/port
- 状态机:
Not Connected
→Connected
(含子状态Not Selected
/Selected
)
- 关键计时器:
- T3:回复超时(默认10秒),超时则重发或报错
- T5:连接间隔(指断开连接和重新连接的最小时间,防频繁重连)
- T6:控制指令超时时间(
控制会话超时 T6 (T6 control transaction timeout)表示一个控制会话所能开启的最长时间,超过该时间就认为这次通信失败。当发送<xx>.req 控制消失时 T6计时器开启,若在 T6 超时之前收到相应的<xx>.rsp 消息则计时器关闭,否则控制消息的发起者将关闭这次会话,并认为出现一个通信故障)
- T7:连接超时(指TCP/IP连接成功后到连接选择之间的最大时间,也就是发送stype=1 到收到stype=2 回复的这段时间,表示当建立了 TCP/IP 连接之后通信处于 Not Select 状态的最长时间,通信必须在该时间完成 select 操作,否则将会断开 TCP/IP 连接。)
- T8:接收超时(网络字符超时 T8 (T8 network intercharacter timeout)表示成功接收到单个HSMS 消息的字符之间的最大时间间隔。鉴于 TCP/IP 是面向流的通信协议,因此一个 HSMS 通信消息可能被分为若干个 TCP/IP 消息进行传输,若 T8 计时器超时则认为这次传输失败。)
SECS指令:
由S-Stream和F-Function 组成
SECS命令由 SxFy
格式标识:
- **
Sx
**:Stream(流),表示功能大类(如设备状态、报警管理)。 - **
Fy
**:Function(功能),表示具体操作(如请求、响应、主动上报)。 - 奇偶规则:
- 奇数
Fy
(如S1F1
):请求/命令(主机或设备发起)。 - 偶数
Fy
(如S1F2
):响应/确认(必须回复前一条奇数指令)。
- 奇数
一些变量含义:
名称 | 含义 |
DeviceID | 用于Host识别的设备号 |
CEID | event ID 即事件ID |
SVID | 设备状态变量ID |
ECID | 设备常量ID |
VID | 变量ID |
RPTID | report ID 即上报ID |
PPID | recipe ID 即配方ID(工艺ID) |
CHIPID | 芯片ID |
SECS / GEM标准定义了3类数据项:
状态变量(SV)
状态变量是用于标识设备或其任何组件(例如传感器,仪表等)的状态的数据项。工艺设备的状态变量的示例包括–温度,压力,气流,RF正向功率,旋转速度,这些数据项通常不附加到诸如批次开始,晶圆开始等事件中。工厂主机可以随时向设备查询状态变量,也可以定义跟踪数据设置以请求设备提供状态变量。工厂主机不能更改设备的状态变量。
数据值变量(DV)
数据值变量是与特定事件相关的数据项,例如批次开始,设备上发生的警报/错误,晶圆处理/测量完成等。数据值变量的示例包括–批次ID,槽号,当前配方等等。这些变量仅在发生特定事件(例如选择配方,开始批处理等)时才更改。工厂主机通过定义报告并将报告与事件相关联来查询数据值变量。
与状态变量不同,数据值变量可能没有值。例如,数据值变量之一是“警报ID”,它指定最新警报的ID。但是,如果自打开设备以来没有任何警报,则该字段可以为空。工厂主机不能更改设备的数据变量。
设备常数(EC)
设备常数是与设备配置有关的数据项–它们可以包含与设备硬件,软件或SECS/GEM软件有关的项。与状态变量和数据值变量不同,工厂主机可以通过SECS消息更改设备常数。设备常数的示例包括–抽空时间限制,设备待机时间,固定销等待时间等。
指令介绍
1. 通信管理与状态控制(Stream 1)
- **
S1F1
(Are You There Request)**- 功能:设备向主机发送连接探测请求。
- 响应:主机需回复
S1F2
(在线数据)确认连接。
- **
S1F13/S1F14
(Establish Communication)**- 功能:设备主动请求建立通信链路(
S1F13
),主机回复S1F14
确认。
- 功能:设备主动请求建立通信链路(
- **
S1F17/S1F18
(Request ON-LINE)**- 功能:主机请求设备切换至“联机/远程”控制模式(最高控制权限),设备回复
S1F18
确认。
- 功能:主机请求设备切换至“联机/远程”控制模式(最高控制权限),设备回复
2. 设备状态监控与查询(Stream 1 & 2)
- **
S1F3/S1F4
(Selected Equipment Status)**- 功能:主机查询指定状态变量(SVID),设备返回当前值(
S1F4
)。 - 应用场景:实时监控温度、压力等关键参数。
- 功能:主机查询指定状态变量(SVID),设备返回当前值(
- **
S2F13/S2F14
(Equipment Constant)**- 功能:主机查询或设置设备常量(ECID),如抽空时间限制(
S2F13
请求,S2F14
返回数据)。
- 功能:主机查询或设置设备常量(ECID),如抽空时间限制(
3. 报警与异常管理(Stream 5)
- **
S5F1/S5F2
(Alarm Report)**- 功能:设备主动上报报警事件(
S5F1
),主机需回复S5F2
确认接收。
- 功能:设备主动上报报警事件(
- **
S5F3/S5F4
(Enable/Disable Alarm)**- 功能:主机启用/禁用特定报警通知(如仅监控高危报警)。
4. 数据采集与事件报告(Stream 6)
- **
S6F11/S6F12
(Event Report)**- 功能:设备主动上报事件(如批次开始、晶圆完成),主机回复
S6F12
确认。这个巨复杂,功能巨多,是核心指令,根据CEID和RPTID分为很多种。 - 数据关联:可绑定状态变量(SV)、数据变量(DV)生成结构化报告。
- 功能:设备主动上报事件(如批次开始、晶圆完成),主机回复
- **
S6F15/S6F16
(Event Report Request)**- 功能:主机请求特定事件的历史数据(如追溯故障原因)。
5. 远程控制与指令下发(Stream 2)
- **
S2F41/S2F42
(Host Command)**- 功能:主机发送远程控制命令(如
START
、STOP
),设备回复S2F42
执行结果。
- 功能:主机发送远程控制命令(如
- **
S2F49/S2F50
(Enhanced Remote Command)**- 功能:扩展指令集,支持复杂控制逻辑(如多步骤工艺触发)。
6. 配方与程序管理(Stream 7)
- **
S7F1/S7F2
(Process Program Load)**- 功能:主机查询设备能否加载新配方(
S7F1
),设备回复许可状态(S7F2
)。
- 功能:主机查询设备能否加载新配方(
- **
S7F5/S7F6
(Process Program Request)**- 功能:主机下发配方数据(
S7F5
),设备回复加载结果(S7F6
)。
- 功能:主机下发配方数据(
消息体包含两种类型List和item,对应十六进制为00和其他几种值类型,格式都是一样,类型+长度,也可以混着用,和文件结构一样。
例子:
S1F13请求报文(设备->主机)
报文功能
设备请求与主机建立通信,携带设备 ID、软件版本等基本信息。
00 00 00 1A // 消息长度 = 30 字节(10 头部 + 20 消息体)
00 01 // 会话 ID = 0x0001
00 // Byte2:Stream = 1(S1),W-bit = 0(无需回复)
0D // Byte3:Function = 13(F13)
00 // Byte4:PType = 0(SECS-II 编码)
00 // Byte5:SType = 0(数据消息)
12 34 56 78 // Byte6-9:系统字节 = 0x12345678
-------------- 消息体开始(SECS-II 部分) --------------
01 02 // L2 列表(List)包含 2 个元素
41 05 45 51 31 32 33 // 设备 ID: "EQ123" ASCII 字符串(5 字节)
41 05 31 2E 30 2E 30 // 软件版本:"1.0.0" ASCII 字符串(5 字节)