2. E4标准详解
E4标准(SECS-I)定义了SEMI设备与主机之间通过RS-232串行接口进行点对点通信的物理层与数据链路层规范。它是SECS/GEM协议栈中最底层的传输载体,负责将上层(E5/SECS-II)的消息块可靠地从一个节点传递到另一个节点。
2.1 SECS-I协议栈定位与RS-232物理层
SECS-I位于OSI模型的物理层与数据链路层。它直接依赖RS-232C接口标准,规定了电气特性、连接器类型(通常为DB-25)以及信号线的定义。
关键物理参数:
- 传输模式:全双工,点对点。
- 波特率:标准支持 9600 bps,实际应用中常见 19200、38400 甚至更高。
- 数据位:7 位或 8 位(通常为 8 位)。
- 停止位:1 位。
- 奇偶校验:无(None)、奇校验(Odd)或偶校验(Even),通常为无校验。
- 流控制:硬件流控制(RTS/CTS)或软件流控制(XON/XOFF),SECS-I 标准推荐使用硬件流控制。
2.2 数据块格式(Block Format)
SECS-I 将上层消息分割成固定大小的数据块(Block)进行传输。每个数据块是传输的基本单元,其格式严格定义,确保接收方能正确解析。
| 字段 | 长度(字节) | 描述 |
|---|---|---|
| 长度字节(Length Byte) | 1 | 表示该数据块中数据部分的字节数(不包含长度字节本身)。有效范围:1-254(0 和 255 为保留值)。 |
| 控制字节(Control Byte) | 1 | 包含块类型、重传标志、是否最后一块等控制信息。 |
| 设备ID(Device ID) | 1 | 标识目标设备或源设备。在点对点连接中通常为 0。 |
| 块号(Block Number) | 1 | 当前消息中数据块的序号,从 0 开始递增。 |
| 系统字节(System Bytes) | 2 | 用于消息匹配和确认,由发送方生成,接收方在确认中回显。 |
| 数据部分(Data) | 0-254 | 实际承载的 SECS-II 消息内容(或部分内容)。 |
格式要点:数据块的总长度 = 1(长度字节)+ 1(控制字节)+ 1(设备ID)+ 1(块号)+ 2(系统字节)+ N(数据部分)。N 由长度字节指定,最大为 254 字节。
2.3 块传输协议(Block Transfer Protocol, B2)
B2 协议是 SECS-I 的核心传输机制,它定义了如何将一个完整的 SECS-II 消息(可能被分割成多个数据块)从发送方可靠地传输到接收方。B2 协议使用停止-等待(Stop-and-Wait)的自动重传请求(ARQ)机制。
2.3.1 多块消息传输流程
- 发送方将消息分割成多个数据块,并为每个块分配递增的块号(0, 1, 2, ...)。
- 发送方发送第一个数据块(块号=0),并启动超时计时器(T3)。
- 接收方收到数据块后,检查其完整性(通过长度字节和校验机制)。如果正确,发送一个确认块(ACK);如果错误,发送一个否定确认块(NAK)。
- 发送方收到 ACK 后,发送下一个数据块(块号+1);收到 NAK 或超时,则重传当前数据块。
- 当发送方发送最后一个数据块时,在控制字节中设置“最后一块”标志(E-bit)。
- 接收方收到最后一块并确认后,整个消息传输完成。
超时与重传:发送方在发送每个数据块后必须等待 ACK/NAK。如果在 T3 超时(通常为 1-10 秒,可配置)内未收到响应,发送方将重传该数据块。重传次数有限制(通常为 3-5 次),超过限制则报告通信错误。
2.4 消息确认机制(Message Acknowledge)
SECS-I 的确认机制分为两个层级:块确认(Block Acknowledge)和消息确认(Message Acknowledge)。
2.4.1 块确认(Block Acknowledge)
这是 B2 协议的一部分,针对每个数据块进行确认。接收方在收到数据块后,立即发送一个确认块(ACK)或否定确认块(NAK)。确认块本身也是一个特殊格式的数据块,其控制字节中的类型字段标识为确认类型。
2.4.2 消息确认(Message Acknowledge)
当接收方成功收到一个完整消息的所有数据块后,它需要发送一个消息确认(Message Acknowledge, MACK)给发送方。MACK 是一个独立的 SECS-II 消息,其内容包含原始消息的系统字节,用于匹配请求和响应。
确认机制对比:
| 确认类型 | 层级 | 触发条件 | 响应内容 |
|---|---|---|---|
| 块确认 (ACK/NAK) | 数据链路层 (SECS-I) | 收到单个数据块后 | 确认块(特殊格式的数据块) |
| 消息确认 (MACK) | 会话层 (SECS-II) | 收到完整消息的所有块后 | SECS-II 消息(包含系统字节) |
2.4.3 控制字节详解
控制字节是数据块格式中的关键字段,它决定了数据块的性质和行为。其位定义如下:
| 位 (Bit) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 含义 | R (重传标志) | E (最后一块标志) | 类型 (Type) | 保留 (Reserved) | ||||
- R-bit (Bit 7): 重传标志。如果为 1,表示该数据块是之前发送过的数据块的重传。
- E-bit (Bit 6): 最后一块标志。如果为 1,表示该数据块是当前消息的最后一个数据块。
- Type (Bits 5-4): 数据块类型。
- 00: 数据块(Data Block)
- 01: 确认块(Acknowledge Block, ACK)
- 10: 否定确认块(Negative Acknowledge Block, NAK)
- 11: 保留(Reserved)
实践建议:在实现 SECS-I 驱动时,务必正确处理 T3 超时和重传逻辑。同时,注意区分块确认和消息确认:块确认保证数据块传输的可靠性,消息确认保证整个消息的语义完整性。两者缺一不可。