1. SECS-II 协议概述:SECS-II 在 SECS/GEM 协议栈中的位置、消息类型与功能

SECS-II(SEMI Equipment Communications Standard Part 2)是 SECS/GEM 协议栈中定义消息内容与语义的核心层。它规定了设备与主机之间交换的每条消息的结构、编码规则、数据类型以及事务处理机制。理解 SECS-II 的位置与功能,是进行协议栈移植和消息事务处理的基础。

1.1 SECS-II 在协议栈中的位置

SECS/GEM 协议栈采用分层架构,从物理介质到应用语义逐层封装。SECS-II 位于传输层(HSMS/SECS-I)之上、应用层(GEM)之下,承担着“消息格式化与语义解释”的桥梁作用。

协议栈分层对照表
层级 协议/标准 主要职责 典型数据单元
应用层 GEM (E30, E37, E39...) 定义设备行为模型、状态机、报警、远程控制等语义 GEM 状态、集合、事件通知
表示层 SECS-II (E5) 消息结构、数据类型、编码、事务处理 SECS-II Message (Stream/Function)
传输层 HSMS (E37) / SECS-I (E4) 连接管理、消息分帧、可靠传输、重传机制 HSMS Message / SECS-I Block
物理层 TCP/IP / RS-232 比特流传输、电气特性 TCP Segment / Serial Frame

从移植角度看,SECS-II 层是协议栈中最复杂、最易出错的部分。它不依赖底层传输介质(TCP 或串口),但必须严格遵循 SEMI E5 标准中的消息编码规则和事务处理规则。

SECS/GEM 协议栈分层架构 应用层:GEM (E30, E37, E39...) 设备行为模型、状态机、报警、远程控制 表示层:SECS-II (E5) 消息结构 · 数据类型 · 编码 · 事务处理 传输层:HSMS (E37) / SECS-I (E4) 连接管理 · 消息分帧 · 可靠传输 物理层:TCP/IP / RS-232 比特流传输 · 电气特性 移植 核心
移植要点:在协议栈移植中,SECS-II 层通常需要独立实现为一个模块,它不直接操作 socket 或串口,而是通过回调接口与传输层交互。这种解耦设计使得 SECS-II 可以复用于 HSMS 和 SECS-I 两种传输方式。

1.2 SECS-II 消息类型与功能

SECS-II 消息由 Stream(流)和 Function(功能)两个维度唯一标识,格式为 S<n>F<m>,例如 S1F1、S6F11。Stream 表示消息的类别,Function 表示该类别下的具体操作。

1.2.1 Stream 分类

SEMI E5 标准定义了 0~255 个 Stream,其中 0~127 为标准 Stream,128~255 为用户自定义 Stream。以下是常用的标准 Stream:

Stream 名称 功能描述 典型消息
S1 设备通信控制 建立/断开连接、设备状态查询、通信超时管理 S1F1 (Are You There), S1F13 (Establish Communications Request)
S2 设备控制与诊断 设备参数读写、远程命令、诊断数据获取 S2F17 (Remote Command), S2F41 (Host Command Send)
S5 报警管理 报警上报、报警列表查询、报警使能/禁用 S5F1 (Alarm Report), S5F3 (Enable/Disable Alarm)
S6 数据收集与事件 事件通知、数据变量上报、跟踪数据收集 S6F11 (Event Report), S6F15 (Data Report)
S7 设备标识与配方 设备 ID、配方管理、物料跟踪 S7F1 (Equipment ID), S7F19 (Current Recipe Request)
S10 终端服务 终端显示消息、操作员交互 S10F1 (Terminal Display), S10F3 (Terminal Request)

1.2.2 Function 方向与事务类型

每个 Function 编号的奇偶性决定了消息的方向和事务角色:

  • 奇数 Function(F1, F3, F5...):Primary Message(主消息),由发起方发送,用于发起一个事务。
  • 偶数 Function(F2, F4, F6...):Secondary Message(次消息),由响应方发送,用于回复对应的 Primary 消息。

例如:

  • S1F1(Primary):主机发送“Are You There”查询设备是否在线。
  • S1F2(Secondary):设备回复“Yes, I am here”并携带设备状态信息。
SECS-II 消息事务流示例(S1F1 / S1F2) 主机 (Host) 设备 (Equipment) S1F1 (Primary) S1F2 (Secondary) 事务规则 Primary 发起事务,Secondary 结束事务 每个事务有唯一 System Bytes(系统字节)标识

1.3 SECS-II 消息结构

一条完整的 SECS-II 消息由消息头(Message Header)和消息体(Message Body)组成。消息体包含一个或多个数据项(Data Item),每个数据项由数据项头(Item Header)和数据内容(Data Content)构成。

消息结构层次(从外到内)
SECS-II Message
├── Message Header (10 bytes)
│   ├── Device ID (2 bytes)      // 设备标识
│   ├── Stream (1 byte)          // 流号
│   ├── Function (1 byte)        // 功能号
│   ├── W-bit (1 bit)            // 等待位(是否需要回复)
│   ├── System Bytes (4 bytes)   // 系统字节(事务ID)
│   └── Reserved (2 bytes)       // 保留
│
└── Message Body (可变长度)
    ├── Data Item 1
    │   ├── Item Header (2-4 bytes)
    │   │   ├── Item Format Code (1 byte)   // 数据类型编码
    │   │   └── Item Length (1-3 bytes)     // 数据长度
    │   └── Item Data (N bytes)
    ├── Data Item 2
    │   └── ...
    └── Data Item N

1.4 数据类型与编码

SECS-II 定义了丰富的数据类型(Format Code),用于表示整数、浮点数、字符串、列表等。在协议栈移植中,数据类型编解码是核心工作之一。

Format Code 类型名称 字节长度 说明
0x00 LIST 可变 列表,包含多个子数据项
0x10 BIN 1~N 二进制数据
0x20 BOOLEAN 1 布尔值(0x00=False, 0x01=True)
0x30 ASCII 1~N ASCII 字符串
0x40 INT8 1 有符号 8 位整数
0x50 INT16 2 有符号 16 位整数(大端序)
0x60 INT32 4 有符号 32 位整数(大端序)
0x70 INT64 8 有符号 64 位整数(大端序)
0x80 UINT8 1 无符号 8 位整数
0x90 UINT16 2 无符号 16 位整数(大端序)
0xA0 UINT32 4 无符号 32 位整数(大端序)
0xB0 UINT64 8 无符号 64 位整数(大端序)
0xC0 FLOAT4 4 单精度浮点数(IEEE 754)
0xD0 FLOAT8 8 双精度浮点数(IEEE 754)
移植常见陷阱:
  • 字节序:SECS-II 所有多字节整数和浮点数均使用大端序(Big-Endian)。在 x86 平台移植时,必须进行字节序转换。
  • LIST 嵌套:LIST 可以嵌套任意层数,编解码器必须支持递归解析。
  • 长度编码:数据项长度字段支持 1~3 字节变长编码,需要根据第一个字节的高位判断长度格式。

1.5 事务处理机制

SECS-II 的事务处理基于请求-响应模型,由 System Bytes(系统字节)唯一标识一个事务。关键规则如下:

  • 事务发起:发送 Primary 消息时,分配一个唯一的 System Bytes 值(通常为递增计数器)。
  • 事务匹配:接收方在回复 Secondary 消息时,必须原样复制 Primary 消息中的 System Bytes。
  • W-bit(等待位):如果 W-bit = 1,表示发送方期望收到回复;如果 W-bit = 0,表示不需要回复(单方向消息)。
  • 超时处理:发送方在发送 W-bit=1 的消息后,启动 T3 定时器(Reply Timeout),如果在规定时间内未收到回复,则触发超时重传或错误处理。
事务处理在移植中的实现建议:建议在 SECS-II 层维护一个事务表(Transaction Table),以 System Bytes 为 Key,记录每个待回复事务的状态、超时时间、重试次数等信息。事务表的大小应根据设备并发能力进行配置,避免溢出。

1.6 本章小结