2. SECS 消息结构

SECS 消息是半导体设备与主机(Host)之间通信的基本数据单元。理解其结构是进行协议分析、测试与故障排除的基础。SECS 消息遵循严格的层级格式,由固定长度的消息头(Message Header)和可变长度的消息体(Message Body)组成。

SECS 消息整体结构 消息头 (Message Header) — 固定 10 字节 Device ID | Stream | Function | PType | SType | System Bytes 消息体 (Message Body) — 可变长度 数据项 (Data Item) 嵌套结构:List, ASCII, Binary, U1, U2, U4, I1, I2, I4, F4, F8, Boolean 消息头固定 10 字节,消息体长度由消息头中的 Length 字段决定

2.1 消息头格式(Message Header)

每个 SECS 消息都以一个 10 字节的固定长度消息头开始。消息头包含了路由、识别和控制消息处理的关键信息。

字节偏移 字段名称 长度(字节) 描述
0-1 Length 2 消息体长度(字节数),不包括消息头本身。大端序。
2-3 Device ID 2 设备标识符。低 15 位为设备 ID,最高位为控制位(0=正常,1=控制消息)。
4 Stream 1 消息流编号(0-255)。用于对消息进行主要分类。
5 Function 1 消息功能编号(0-255)。与 Stream 共同构成 SxFy 格式。
6 PType 1 处理类型(Processing Type)。通常为 0。
7 SType 1 会话类型(Session Type)。0=数据消息,其他值用于会话控制。
8-9 System Bytes 2 系统字节。用于消息配对(请求/响应),通常由发送方生成唯一值。
测试要点: 在抓包分析时,优先检查 System Bytes 是否唯一且正确配对。重复的 System Bytes 是导致通信超时和消息丢失的常见原因。

2.2 数据项类型(Data Item Types)

SECS 消息体由数据项(Data Item)组成。每个数据项包含一个格式字节(Format Byte)、长度字节和实际数据。SECS/GEM 定义了丰富的数据类型以适应半导体设备的各种数据需求。

数据项编码结构 格式字节 (Format Byte) 长度字节 (Length Bytes) 数据体 (Data Body) 实际数据内容,长度由长度字节指定 格式字节高 2 位为格式类别,低 6 位为长度字节数(通常为 1 或 3)

2.3 数据项类型详解

下表列出了 SECS 协议中所有标准数据项类型及其编码规则:

类型名称 格式代码(Hex) 长度 描述与典型用途
List 0x01 可变 数据项容器,可嵌套包含其他数据项。用于结构化数据。
ASCII 0x41 可变 可打印 ASCII 字符串。用于设备 ID、状态文本、错误描述。
Binary 0x21 可变 原始字节数据。用于传输固件、配置块、非文本数据。
Boolean 0x25 1 字节 布尔值(0x00=False, 0x01=True)。用于开关状态、使能标志。
U1 0xA1 1 字节 无符号 8 位整数(0 到 255)。用于小范围计数、状态码。
U2 0xA2 2 字节 无符号 16 位整数(0 到 65535)。大端序。
U4 0xA4 4 字节 无符号 32 位整数(0 到 4294967295)。大端序。
I1 0xB1 1 字节 有符号 8 位整数(-128 到 127)。
I2 0xB2 2 字节 有符号 16 位整数(-32768 到 32767)。大端序。
I4 0xB4 4 字节 有符号 32 位整数(-2147483648 到 2147483647)。大端序。
F4 0x84 4 字节 单精度浮点数(IEEE 754)。用于测量值、温度、压力。
F8 0x88 8 字节 双精度浮点数(IEEE 754)。用于高精度计量数据。
故障排除提示: 数据项类型不匹配是 SECS 通信中最常见的错误之一。例如,主机期望一个 U2 类型的数据项,但设备发送了 I2 类型,会导致解析错误。测试时应使用协议分析器验证每个数据项的格式字节。

2.4 Stream 与 Function 概念

SECS 消息通过 Stream (S) 和 Function (F) 的组合来唯一标识消息的用途和方向。格式为 SxFy,其中 x 为 Stream 编号,y 为 Function 编号。

  • Stream:消息的主要类别。例如,Stream 1 用于设备状态和控制,Stream 2 用于设备数据收集,Stream 6 用于报警管理。
  • Function:在特定 Stream 下的具体操作。Function 编号的奇偶性表示消息方向:
    • 奇数 Function:主设备(Host)向从设备(Equipment)发送的请求(Primary Message)。
    • 偶数 Function:从设备向主设备发送的响应或事件通知(Secondary Message)。
Stream/Function 消息流示例 主机 (Host) 发送 S1F1 (请求) 设备 (Equipment) 响应 S1F2 S1F1 (奇数=请求) S1F2 (偶数=响应) Stream/Function 命名规则 S1F1: 主机请求设备通信状态 (Are You There Request) S1F2: 设备响应通信状态 (On Line Data) S6F11: 设备发送事件报告通知 (Event Report Send) S6F12: 主机确认收到事件报告 (Event Report Acknowledge)

2.5 常见 Stream 与 Function 速查表

以下是 SECS/GEM 协议中最常用的 Stream/Function 组合,测试和故障排除时应熟记:

Stream Function 方向 名称 用途
1 1 H→E Are You There Request 主机检查设备是否在线
1 2 E→H On Line Data 设备响应在线状态
1 13 H→E Establish Communications Request 建立通信会话
1 14 E→H Establish Communications Acknowledge 确认通信建立
2 33 H→E Data Variable Get Request 获取设备数据变量
2 34 E→H Data Variable Get Response 返回数据变量值
6 11 E→H Event Report Send 设备主动上报事件
6 12 H→E Event Report Acknowledge 主机确认事件接收
常见陷阱: 不要混淆 Stream 和 Function 的编号。例如,S1F13 是建立通信请求,而 S13F1 是完全不同的消息(用于远程命令)。在测试脚本和日志分析中,务必确认 SxFy 的完整格式。

2.6 消息结构示例

以下是一个完整的 SECS 消息示例(S1F1 请求),展示消息头和消息体的实际编码:

消息头 (10 字节):
  00 02    ; Length = 2 (消息体长度为 2 字节)
  00 01    ; Device ID = 1
  01       ; Stream = 1
  01       ; Function = 1 (奇数,表示请求)
  00       ; PType = 0
  00       ; SType = 0 (数据消息)
  12 34    ; System Bytes = 0x1234

消息体 (2 字节):
  41 00    ; ASCII 数据项,长度为 0(空字符串)

解析结果: S1F1 (Are You There Request) 来自 Device ID 1,System Bytes=0x1234
测试实践: 使用 SECS 模拟器发送 S1F1 消息,并验证设备是否回复 S1F2。如果无响应,首先检查消息头中的 Device ID 和 System Bytes 是否正确。这是最基础的连通性测试。