3. E5规范详解:SECS-II消息标准
E5规范(SECS-II)是半导体设备通信的核心数据表示层,定义了消息的结构、数据项、流/功能分类以及编码规则。掌握E5是理解SECS/GEM协议栈的基础,也是实现设备与主机(Host)之间可靠通信的前提。
3.1 SECS-II消息标准概述
SECS-II(SEMI Equipment Communications Standard Part 2)建立在E4(SECS-I)的物理传输层之上,提供了一套独立于传输介质的消息格式和协议规则。它定义了如何将设备状态、控制指令、报警信息等抽象为结构化的消息,确保不同厂商的设备能够使用统一的“语言”进行交互。
3.2 数据项(Data Item)定义
数据项是SECS-II消息中最小的数据单元,类似于编程语言中的变量。每个数据项由数据项名称(Name)、项ID(Item ID)和数据类型(Format)三部分组成。E5规范预定义了数百个标准数据项,用于描述设备的各种属性。
3.2.1 数据类型(Format Codes)
SECS-II定义了12种基本数据类型,每种类型对应一个唯一的Format Code(1字节)。编码时,Format Code的高4位表示类型,低4位表示长度字节数(通常为1或2)。
| Format Code | 类型名称 | 描述 | 长度字节 | 示例 |
|---|---|---|---|---|
| 0x00 | LIST | 列表,包含多个子项 | 1 | 包含3个元素的列表 |
| 0x10 | BIN | 二进制数据 | 1 | 0x1A 0x2B |
| 0x20 | BOOLEAN | 布尔值(TRUE/FALSE) | 1 | TRUE (0x01) |
| 0x30 | ASCII | ASCII字符串 | 1 | "Hello" |
| 0x40 | INT8 | 有符号8位整数 | 1 | -5 |
| 0x50 | INT1 | 有符号16位整数 | 1 | 1024 |
| 0x60 | INT2 | 有符号32位整数 | 1 | 65536 |
| 0x70 | INT4 | 有符号64位整数 | 1 | 2^40 |
| 0x80 | UINT8 | 无符号8位整数 | 1 | 200 |
| 0x90 | UINT1 | 无符号16位整数 | 1 | 50000 |
| 0xA0 | UINT2 | 无符号32位整数 | 1 | 3000000000 |
| 0xB0 | UINT4 | 无符号64位整数 | 1 | 2^50 |
| 0xC0 | FLOAT4 | 32位浮点数(IEEE 754) | 1 | 3.14159 |
| 0xD0 | FLOAT8 | 64位浮点数(IEEE 754) | 1 | 2.718281828 |
3.2.2 标准数据项示例
E5规范中定义了大量标准数据项,以下列出开发中常用的几个:
- SVID (Status Variable ID):状态变量标识符,用于查询设备状态。
- ECID (Equipment Constant ID):设备常量标识符,用于读写设备参数。
- ALID (Alarm ID):报警标识符,用于识别报警类型。
- CEID (Collection Event ID):收集事件标识符,用于触发事件报告。
- MDLN (Model Number):设备型号字符串。
- SOFTREV (Software Revision):软件版本字符串。
3.3 消息流(Stream)与功能(Function)分类
SECS-II消息由流(Stream)和功能(Function)两个维度唯一标识。Stream表示消息的类别,Function表示具体的操作。一个完整的消息ID格式为 S<n>F<m>,例如 S1F1、S6F11。
3.3.1 Stream分类
E5规范定义了0~255共256个Stream,其中0~127为设备相关标准Stream,128~255保留给厂商自定义。以下是常用的标准Stream:
| Stream | 名称 | 描述 | 典型功能 |
|---|---|---|---|
| S1 | 设备状态 | 设备识别、状态查询、通信控制 | S1F1 (Are You There), S1F13 (Establish Communications) |
| S2 | 设备控制与诊断 | 设备常量读写、远程控制、诊断 | S2F13 (Equipment Constant Request), S2F17 (Remote Command) |
| S5 | 报警管理 | 报警上报、报警确认、报警列表 | S5F1 (Alarm Report), S5F3 (Enable/Disable Alarm) |
| S6 | 数据收集与事件 | 事件上报、追踪数据、数据收集 | S6F11 (Event Report), S6F15 (Data Collection Request) |
| S7 | 工艺程序管理 | 工艺程序上传/下载、配方管理 | S7F1 (Process Program Load), S7F3 (Process Program Request) |
| S9 | 错误消息 | 消息格式错误、通信错误报告 | S9F1 (Unrecognized Stream), S9F3 (Invalid Data) |
| S10 | 终端服务 | 终端显示、操作员消息 | S10F1 (Terminal Request), S10F3 (Terminal Display) |
3.3.2 Function编号规则
Function编号决定了消息的方向和语义:
- 奇数Function(如F1, F3, F5):表示请求(Primary Message),由发起方发送。
- 偶数Function(如F2, F4, F6):表示应答(Secondary Message),由接收方回复。
- Function 0:保留用于拒绝(Abort)消息,当接收方无法处理请求时回复SxF0。
3.4 消息格式编码规则
SECS-II消息采用TLV(Type-Length-Value)编码方式,支持嵌套结构。一个完整的SECS-II消息由消息头(Message Header)和数据体(Data Body)组成。
3.4.1 消息头结构
消息头固定为10字节,包含以下字段:
| 偏移 | 字节数 | 字段 | 描述 |
|---|---|---|---|
| 0 | 4 | Length | 消息总长度(包含这4字节本身) |
| 4 | 1 | Device ID | 设备ID(低7位有效,最高位为控制位) |
| 5 | 1 | Stream | 流编号(0~255) |
| 6 | 1 | Function | 功能编号(0~255) |
| 7 | 1 | E/P | E位(是否最后一块)+ P位(是否需要应答) |
| 8 | 2 | Block Number | 块编号(用于多块消息重组) |
3.4.2 编码示例
以下是一个完整的S1F1消息(Are You There?)的编码示例,该消息不包含数据体:
// S1F1 消息编码(十六进制)
// 消息头(10字节)
00 00 00 0A // Length = 10(消息头长度)
00 // Device ID = 0
01 // Stream = 1
01 // Function = 1(奇数,请求)
00 // E=0, P=0(单块,不需要应答)
00 00 // Block Number = 0
// 数据体(无)
// 总长度 = 10字节
以下是一个包含数据体的S1F2应答消息示例(回复设备型号):
// S1F2 消息编码(十六进制)
// 消息头(10字节)
00 00 00 1E // Length = 30
00 // Device ID = 0
01 // Stream = 1
02 // Function = 2(偶数,应答)
00 // E=0, P=0
00 00 // Block Number = 0
// 数据体(20字节)
// LIST 包含2个元素
00 01 02 // LIST, Length=2
// 第一个元素: ASCII "ASM-300"
41 07 41 53 4D 2D 33 30 30 // ASCII, Length=7, "ASM-300"
// 第二个元素: ASCII "1.2.3"
41 05 31 2E 32 2E 33 // ASCII, Length=5, "1.2.3"
- Length字段包含消息头自身的4字节,因此最小值为10(无数据体时)。
- Device ID的bit7为控制位(0=设备消息,1=主机消息),实际ID为bit0~bit6。
- E位(bit7 of byte7)为0表示最后一块,为1表示还有后续块。
- P位(bit6 of byte7)为1表示需要接收方回复应答。
3.5 多块消息(Multi-Block Message)
当消息数据体超过传输层限制(如SECS-I的MTU为254字节)时,需要将消息拆分为多个块(Block)传输。多块消息通过消息头中的E位和Block Number字段管理:
- E=1:当前块不是最后一块,后续还有数据。
- E=0:当前块是最后一块,消息结束。
- Block Number:从0开始递增,接收方按此重组消息。
3.6 本章小结
E5规范是SECS/GEM协议栈的核心,定义了消息的“语法”和“词汇”。开发者需要重点掌握:
- 数据项编码:TLV结构,12种数据类型,Format Code的解析规则。
- Stream/Function分类:奇数请求、偶数应答、SxF0拒绝的交互模式。
- 消息头结构:10字节固定头,Length/Device ID/Stream/Function/E/P/Block Number字段的含义。
- 多块消息:E位和Block Number的管理,消息重组逻辑。