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)的物理传输层之上,提供了一套独立于传输介质的消息格式和协议规则。它定义了如何将设备状态、控制指令、报警信息等抽象为结构化的消息,确保不同厂商的设备能够使用统一的“语言”进行交互。

核心定位:SECS-II是SECS/GEM协议栈中的“表示层”和“会话层”,负责消息的格式化、编码与解码,不关心底层是RS-232还是TCP/IP。
SECS/GEM 协议栈分层模型 GEM (E30/E37) - 应用行为标准 SECS-II (E5) - 消息标准 HSMS (E37) / SECS-I (E4) - 传输层 TCP/IP / RS-232 - 物理层 E5规范定义了消息的“语法”和“词汇”,GEM规范定义了“行为”和“场景” 上层GEM依赖E5的消息结构,下层HSMS/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
开发提示:在解析SECS-II消息时,首先读取1字节的Format Code,通过高4位判断数据类型,低4位决定后续长度字段的字节数。例如,0x41表示INT1类型,长度字段占1字节。

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):软件版本字符串。
SECS-II 数据项编码结构 Format (1 Byte) Length (1-2 Bytes) Data Body (N Bytes) Format高4位=类型,低4位=长度字节数 例如:0x41 → 类型=INT1(0x40),长度占1字节 Length字段的值表示Data Body的字节数

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。
常见错误:初学者容易混淆SxF0与SxF2。SxF0是通用拒绝,表示“无法处理该请求”;SxF2是正常应答,表示“请求已收到并处理”。在实现中,必须根据Function的奇偶性正确设置消息方向。
SECS-II 消息分类与交互流程 Host (主机) Equipment (设备) S1F1 (Are You There?) S1F2 (On-Line Data) Function编号规则 奇数 Function → 请求 (Primary) 偶数 Function → 应答 (Secondary) 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表示需要接收方回复应答。
SECS-II 消息编码结构(TLV嵌套) Message Header (10 Bytes) Data Body (Variable Length) Data Body 内部结构(TLV嵌套) LIST (0x00) ASCII (0x41) INT1 (0x51) LIST (0x00) 每个数据项都遵循 Format + Length + Value 的TLV结构

3.5 多块消息(Multi-Block Message)

当消息数据体超过传输层限制(如SECS-I的MTU为254字节)时,需要将消息拆分为多个块(Block)传输。多块消息通过消息头中的E位和Block Number字段管理:

  • E=1:当前块不是最后一块,后续还有数据。
  • E=0:当前块是最后一块,消息结束。
  • Block Number:从0开始递增,接收方按此重组消息。
实现建议:在开发SECS-II解析器时,建议维护一个“消息重组缓冲区”,以Device ID + Stream + Function为键,缓存所有E=1的块。当收到E=0的块时,按Block Number顺序拼接数据体,然后提交给上层处理。

3.6 本章小结

E5规范是SECS/GEM协议栈的核心,定义了消息的“语法”和“词汇”。开发者需要重点掌握:

  1. 数据项编码:TLV结构,12种数据类型,Format Code的解析规则。
  2. Stream/Function分类:奇数请求、偶数应答、SxF0拒绝的交互模式。
  3. 消息头结构:10字节固定头,Length/Device ID/Stream/Function/E/P/Block Number字段的含义。
  4. 多块消息:E位和Block Number的管理,消息重组逻辑。