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事件上报、参数查询、配方管理等所有应用层交互的基础。
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)组成。
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双精度浮点 | 高精度测量值 |
3.3 Stream/Function(SxFy)分类体系
SECS-II使用Stream(流)和Function(功能)的二维编号来唯一标识每一条消息。Stream表示消息的功能类别,Function表示该类别下的具体操作。通常写作SxFy,例如S1F1、S5F1、S6F11。
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。
3.4.2 E-bit(End Bit)
E-bit用于处理多块消息(Multi-block Message),即当一条SECS-II消息的数据量超过传输层限制时,需要拆分成多个块发送:
- E-bit = 0:表示当前块是中间块,后面还有后续数据块。
- E-bit = 1:表示当前块是最后一个块,消息传输结束。
对于单块消息(数据量小于传输限制),E-bit始终为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但确认信息很长,拆成多块 |
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 (报警清除)
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)完成握手。