3. SECS-II消息结构:Message Header与Data Item详解、Stream/Function分类(SxFy)、W-bit与E-bit的作用

SECS-II(SECS Message Content)是定义在SECS-I/Hsms传输层之上的消息内容层。它规定了消息的头部(Message Header)、数据项(Data Item)、消息分类(Stream/Function)以及控制位(W-bit / E-bit)。理解SECS-II是掌握设备与主机之间Alarm事件上报、参数查询、配方管理等所有应用层交互的基础。

核心要点:SECS-II消息 = 固定长度的Message Header + 可变长度的Data Item(Body)。Stream/Function决定了消息的“语义”,W-bit和E-bit则控制消息的“交互模式”。

3.1 Message Header(消息头部)结构

SECS-II消息头部固定为10个字节(在HSMS传输中,HSMS头部额外包含长度和会话ID,但SECS-II头部本身是10字节)。头部承载了消息的路由、控制、长度信息。

字节偏移 字段名称 长度(字节) 说明
0 Length Byte 0 (High) 1 消息体(Data Item)总长度的高8位(大端序)
1 Length Byte 1 (Low) 1 消息体总长度的低8位(最大长度65535字节)
2 Device ID (High) 1 设备ID高8位(bit15为0,bit14-0为设备ID)
3 Device ID (Low) / Stream 1 bit7为0时表示设备ID低8位;bit7为1时表示Stream号
4 Function (High) 1 Function号的高8位(通常为0)
5 Function (Low) 1 Function号的低8位
6 E-bit / W-bit / R-bit 1 控制位:bit7=E-bit,bit6=W-bit,bit5=R-bit
7 System Bytes (High) 1 系统字节高8位(用于消息配对)
8 System Bytes (Mid) 1 系统字节中间8位
9 System Bytes (Low) 1 系统字节低8位
关键字段解读:
  • Length:仅表示Data Item部分的字节数,不包含头部自身的10字节。
  • Device ID:用于多设备场景下的寻址,通常为0。
  • Stream/Function:消息的唯一标识,例如S1F1代表“Are You There”请求。
  • System Bytes:4字节唯一ID,用于将请求(Primary)与响应(Secondary)配对。

3.2 Data Item(数据项)详解

Data Item是SECS-II消息的载荷部分,采用TLV(Type-Length-Value)格式编码。每个数据项由格式字节(Format Byte)、长度字节(Length Bytes)和数据值(Value)组成。

Data Item TLV 编码结构 Format 1 Byte Length 1-3 Bytes Value(实际数据) N Bytes(由Length字段指定) Format Byte 高4位表示数据类型(如0x10=List, 0x20=Binary, 0x40=ASCII),低4位表示长度字节数

3.2.1 常用Format类型

Format Byte(十六进制) 类型 说明 示例
0x10 List 包含多个子数据项的容器 设备状态列表
0x20 Binary 原始二进制数据 传感器原始值
0x40 ASCII 字符串(ISO 646) 设备ID、报警文本
0x60 8-byte Integer 有符号8字节整数 时间戳
0x68 1-byte Integer 有符号1字节整数 状态码
0x70 4-byte Float IEEE 754单精度浮点 温度、压力
0x78 8-byte Float IEEE 754双精度浮点 高精度测量值
常见陷阱:Format Byte的低4位表示“长度字节数”,而非数据长度。例如0x41表示ASCII类型,且长度字段占1个字节(最大255字节)。如果数据超过255字节,需要使用0x44(长度字段占4字节)。

3.3 Stream/Function(SxFy)分类体系

SECS-II使用Stream(流)和Function(功能)的二维编号来唯一标识每一条消息。Stream表示消息的功能类别,Function表示该类别下的具体操作。通常写作SxFy,例如S1F1、S5F1、S6F11。

SECS-II Stream/Function 分类架构 Stream 1 设备状态与控制 Stream 2 设备控制与诊断 Stream 5 报警管理 Stream 6 数据收集与事件 Stream 7 配方管理 Stream 10 终端服务 Stream 12 晶圆地图 Stream 13 数据收集计划 每个Stream包含多个Function:F0=拒绝响应,F1=请求,F2=响应,F3=发送数据,F4=确认,F5-F255=扩展功能

3.3.1 与Alarm事件相关的关键Stream/Function

消息ID 方向 描述 Alarm相关
S5F1 设备 → 主机 Alarm Report Sent(报警上报) 设备主动上报报警状态变化
S5F2 主机 → 设备 Alarm Report Acknowledge(报警确认) 主机确认收到报警
S5F3 主机 → 设备 Enable/Disable Alarm(启用/禁用报警) 主机控制报警使能状态
S5F4 设备 → 主机 Enable/Disable Alarm Acknowledge 设备确认报警使能变更
S5F5 主机 → 设备 List Alarm Request(列出报警) 主机查询设备所有报警
S5F6 设备 → 主机 List Alarm Data(报警列表数据) 设备返回报警列表
S6F11 设备 → 主机 Event Report Sent(事件上报) 与Alarm联动的事件通知

3.4 W-bit(等待位)与E-bit(结束位)的作用

W-bit和E-bit是SECS-II消息头部第6字节中的两个控制位,它们决定了消息的交互模式和数据边界。

3.4.1 W-bit(Wait Bit)

W-bit用于区分消息是请求(Primary)还是响应(Secondary):

  • W-bit = 1:表示这是一条Primary消息(请求),发送方期望收到一条对应的Secondary消息(响应)。例如,主机发送S5F3(启用报警请求)时W-bit=1,设备必须回复S5F4。
  • W-bit = 0:表示这是一条Secondary消息(响应),是对某条Primary消息的回复。例如,设备回复S5F4时W-bit=0。
工程经验:在Alarm上报场景中,设备发送S5F1(报警上报)时W-bit通常设置为1,表示需要主机回复S5F2进行确认。如果主机未在超时时间内回复,设备应重发或记录通信异常。

3.4.2 E-bit(End Bit)

E-bit用于处理多块消息(Multi-block Message),即当一条SECS-II消息的数据量超过传输层限制时,需要拆分成多个块发送:

  • E-bit = 0:表示当前块是中间块,后面还有后续数据块。
  • E-bit = 1:表示当前块是最后一个块,消息传输结束。

对于单块消息(数据量小于传输限制),E-bit始终为1。

W-bit 与 E-bit 交互流程示例 设备(EQ) 发送方 主机(Host) 接收方 S5F1 W=1 E=1 S5F2 W=0 E=1 W-bit 与 E-bit 组合规则 Primary消息(W=1)必须收到对应的Secondary消息(W=0)作为确认 多块消息中,除最后一块E=1外,其余块E=0;单块消息E=1

3.4.3 W-bit与E-bit的组合场景

W-bit E-bit 含义 Alarm场景示例
1 1 单块请求消息(Primary) 设备发送S5F1上报单个报警,期望主机回复S5F2
1 0 多块请求消息的中间块 设备发送S5F1但报警数据量很大,拆成多块发送
0 1 单块响应消息(Secondary) 主机回复S5F2确认收到报警
0 0 多块响应消息的中间块 主机回复S5F2但确认信息很长,拆成多块
协议约束:W-bit和E-bit不能同时为0且为多块消息的中间块?实际上,W=0且E=0是合法的,表示这是一个多块响应中的中间块。但W=0且E=1且是中间块则违反协议。务必确保:只有最后一块E=1,中间块E=0。

3.5 工程案例:Alarm上报消息的SECS-II结构

以下是一个完整的Alarm上报消息(S5F1)的SECS-II编码示例,展示Message Header与Data Item的实际组合:

// S5F1 Alarm Report Sent 消息编码示例
// 假设设备ID=0,System Bytes=0x00000001

Message Header (10 bytes):
  Length: 0x00 0x0C        // Data Item部分共12字节
  Device ID: 0x00 0x01     // 设备ID=1(bit15=0)
  Stream: 0x05             // Stream 5
  Function: 0x01           // Function 1
  Control: 0xC1            // W-bit=1, E-bit=1 (0b11000001)
  System: 0x00 0x00 0x00 0x01

Data Item (12 bytes):
  // List (包含3个子项)
  0x11 0x03                // Format=List, Length=3字节
    // 子项1: Alarm ID (ASCII)
    0x41 0x04              // Format=ASCII, Length=4字节
    0x41 0x4C 0x30 0x31    // "AL01"
    // 子项2: Alarm Text (ASCII)
    0x41 0x0E              // Format=ASCII, Length=14字节
    0x43 0x68 0x61 0x6D 0x62 0x65 0x72 0x20 0x4F 0x76 0x65 0x6E 0x20 0x48
                          // "Chamber Open H"
    // 子项3: Alarm Status (1-byte Integer)
    0x68 0x01              // Format=1-byte Integer, Length=1字节
    0x01                  // 1=Set (报警激活), 0=Clear (报警清除)
调试技巧:使用SECS/GEM模拟器抓包时,重点关注Message Header中的System Bytes是否匹配。如果主机回复S5F2时System Bytes与S5F1不一致,设备将无法正确关联响应,导致通信超时。

3.6 本章小结

  • Message Header是SECS-II消息的固定10字节头部,包含长度、设备ID、Stream/Function、控制位和系统字节。
  • Data Item采用TLV格式编码,支持List、Binary、ASCII、Integer、Float等多种数据类型。
  • Stream/Function(SxFy)是消息的唯一标识,Stream 5专门用于报警管理,Stream 6用于事件和数据收集。
  • W-bit区分请求(Primary)与响应(Secondary),E-bit标识多块消息的结束边界。
  • 在Alarm处理中,S5F1(W=1, E=1)是设备上报报警的标准格式,主机必须回复S5F2(W=0, E=1)完成握手。