3. SECS 消息结构:Message Header 与 Data Item 详解、Stream 与 Function 的概念

SECS 通信的核心是消息的标准化。无论是设备上报状态,还是主机下发指令,都必须遵循固定的消息结构。本章将深入拆解 SECS 消息的骨架——Message Header(消息头)与Data Item(数据项),并详细阐述Stream(流)与Function(功能)的概念及其在通信中的实际作用。

3.1 SECS 消息的总体结构

一条完整的 SECS 消息由两部分组成:Message Header 和 Data。Header 负责路由和控制,Data 则携带具体的业务数据。在 SECS-I 或 HSMS 传输层中,消息还会被包裹上相应的传输层头部,但应用层始终遵循此结构。

核心要点: 解析任何 SECS 消息,必须先解析 Header,确定 Stream 和 Function 后,再根据 SxFx 的规范解析 Data 部分。
SECS 消息总体结构(应用层) Message Header 长度:10 字节(SECS-I)/ 固定 包含:Device ID, S, F, 等 Data 包含:Data Item 列表 格式:SML 或 二进制编码

3.2 Message Header 详解

Message Header 是 SECS 消息的指挥中心。它包含了消息路由和识别所需的所有关键字段。在 SECS-I 中,Header 固定为 10 字节;在 HSMS 中,Header 长度固定为 16 字节,但核心字段含义一致。

3.2.1 核心字段解析

字段 字节偏移 (SECS-I) 说明 示例值
Device ID 0-1 设备标识符。用于区分多设备环境中的目标设备。通常由设备制造商设定。 0x0001
Stream 2-3 (高字节) 消息的类别编号。范围 0-127。例如 Stream 1 为设备状态相关。 0x01
Function 2-3 (低字节) 消息的具体功能编号。范围 0-255。例如 Function 1 为 Are You There Request。 0x01
E-Bit 3 (bit 7) 结束位。0 表示还有后续消息块,1 表示这是最后一个消息块。 1
W-Bit 3 (bit 6) 等待位。1 表示发送方期望收到回复。 1
System Bytes 4-7 系统字节。用于消息配对(请求与回复)。发送方生成唯一值,接收方在回复中回显。 0x00000001
实战技巧: 在抓包分析时,重点关注 Stream 和 Function 字段,它们直接决定了消息的业务含义。W-Bit 用于判断是否需要等待回复,是设计通信流程的关键。

3.3 Stream 与 Function 的概念

Stream 和 Function 共同构成了 SECS 消息的“指令码”。它们像一本书的章节和段落,Stream 是章节编号,Function 是段落编号。通过 SxFx 的组合,可以唯一定义一条消息的用途。

3.3.1 Stream(流)

Stream 定义了消息的类别。SECS 标准预定义了多个 Stream,每个 Stream 代表一类功能域。

  • Stream 0 (S0): 用于测试和诊断。
  • Stream 1 (S1): 设备状态与识别。例如 S1F1 (Are You There), S1F13 (Establish Communications Request)。
  • Stream 2 (S2): 设备控制与诊断。例如 S2F41 (Remote Command)。
  • Stream 5 (S5): 异常与报警。例如 S5F1 (Alarm Report)。
  • Stream 6 (S6): 数据收集与事件。例如 S6F11 (Event Report)。
  • Stream 7 (S7): 工艺程序管理。例如 S7F1 (Process Program Load)。
  • Stream 10 (S10): 终端服务。例如 S10F3 (Terminal Display)。

3.3.2 Function(功能)

Function 定义了在特定 Stream 下的具体操作。Function 编号通常成对出现,形成请求/回复对。

  • 奇数 Function: 通常表示请求(Primary Message)。例如 S1F1 是请求设备响应。
  • 偶数 Function: 通常表示回复(Secondary Message)。例如 S1F2 是对 S1F1 的回复。
注意: 并非所有奇数 Function 都对应一个偶数 Function 回复。有些消息是单向的(如事件通知),不需要回复。W-Bit 的设置决定了是否需要回复。
Stream 与 Function 关系图 Stream 1 (S1) 设备状态与识别 F1: Are You There (Req) F2: On Line Data (Reply) F13: Establish Comm (Req) F14: Establish Comm (Reply) Stream 5 (S5) 异常与报警 F1: Alarm Report (Event) F2: Alarm Report Ack F3: Enable/Disable Alarm F4: Enable/Disable Ack Stream 6 (S6) 数据收集与事件 F1: Trace Data Send F11: Event Report F12: Event Report Ack F15: Data Request

3.4 Data Item 详解

Data Item 是 SECS 消息中实际携带数据的单元。每个 Data Item 由三部分组成:Item Header、Length 和 Value。SECS 标准定义了多种数据类型,用于表示不同格式的数据。

3.4.1 数据类型

格式码 数据类型 描述 示例
L List 列表,可以包含多个子 Item。是构建复杂数据结构的容器。 <L [3]> ... </L>
A ASCII ASCII 字符串。用于文本信息,如设备 ID、状态文本。 <A “ONLINE”>
B Binary 二进制数据。用于原始字节流。 <B 0x01 0x02>
BOOLEAN Boolean 布尔值。True/False。 <BOOLEAN True>
U1/U2/U4/U8 Unsigned Integer 无符号整数,长度分别为 1/2/4/8 字节。 <U4 100>
I1/I2/I4/I8 Signed Integer 有符号整数,长度分别为 1/2/4/8 字节。 <I4 -50>
F4/F8 Floating Point 浮点数,长度分别为 4/8 字节。 <F4 3.14>

3.4.2 Data Item 编码示例

以下是一个 S1F1 (Are You There Request) 消息的 SML 表示及其对应的二进制编码结构。

<!-- S1F1 的 SML 表示 -->
S1F1 W
<L [0]>  <!-- 空列表,表示没有数据 -->
.

对应的二进制编码(简化):

Header: Device ID=0x0001, S=0x01, F=0x01, W=1, System Bytes=0x12345678
Data:   <L [0]>  (格式码 0x01, 长度 0x00)
解析技巧: 使用 SECS 模拟器或抓包工具时,将消息显示为 SML 格式可以大大提高可读性。SML 是 SECS Message Language 的缩写,是一种人类可读的文本表示形式。

3.5 消息结构综合示例

让我们通过一个完整的 S1F13 (Establish Communications Request) 消息,来串联本章的所有概念。

S1F13 消息结构分解 完整 SECS 消息 (S1F13) Message Header Device ID: 0x0001 S=1, F=13, W=1 System Bytes: 0xA1B2C3D4 Data (SML) <L [3]> <A “MDX-123”> <!-- Device ID --> <A “SECS-II”> <!-- Version --> <BOOLEAN True> <!-- Ready --> </L> Header 决定消息路由 Data 携带具体业务数据
本章小结: 掌握 SECS 消息结构是进行设备通信开发的基础。Message Header 提供了消息的元信息(谁、什么、是否需要回复),Data Item 提供了灵活的数据承载能力,而 Stream 与 Function 的组合则定义了消息的业务语义。在后续章节中,我们将基于这些概念,配置实际的通信环境并编写通信代码。