4. SECS-I串行通信基础

SECS-I(SEMI E4)是SEMI设备通信标准中最早被广泛采用的串行链路协议,它定义了设备(Equipment)与主机(Host)之间通过RS-232串行接口进行消息交换的完整规则。虽然现代工厂越来越多采用HSMS(基于TCP/IP),但大量存量设备、老旧机台以及部分特殊场景仍然依赖SECS-I。理解SECS-I的物理层、链路层、块传输、握手时序和超时机制,是排查串口通信故障、编写稳定通信程序的基础。

一、物理层:RS-232串行接口与信号定义

SECS-I运行在RS-232(或兼容的V.24)物理层之上,采用异步串行传输。典型连接为设备与主机之间的三线制或全握手方式。关键信号包括:

  • TXD/RXD:发送数据与接收数据,交叉连接。
  • RTS/CTS:请求发送与清除发送,用于硬件流控。
  • DTR/DSR:数据终端就绪与数据装置就绪,用于链路建立与状态检测。
  • SG:信号地,必须共地。

SECS-I标准推荐使用全双工、异步、8位数据位、1位停止位、无校验(8-N-1)的配置,波特率常见为9600、19200、38400,部分高速设备可达115200。物理层只负责比特流的可靠传输,不保证消息边界,消息的成帧与确认由链路层完成。

二、链路层:块传输与握手时序

SECS-I链路层将一条完整的SECS-II消息拆分为多个块(Block)进行传输。每个块包含块头(Block Header)和块体(Block Body)。块头固定为10字节,包含:

  • 设备ID(Device ID,2字节)
  • 消息ID(Message ID,4字节)
  • 块号(Block Number,2字节)
  • 系统字节(System Bytes,2字节,用于事务匹配)

块体长度可变,最大为244字节(含块头共254字节)。发送方每发送一个块,必须等待接收方返回EACK(确认)或EENQ(请求重发)等握手信号,才能发送下一个块。这种“发送—等待—确认”的停等协议保证了块传输的可靠性。

握手时序核心规则:

  • 发送方发送ENQ(请求发送)→ 接收方回复EACK(允许发送)。
  • 发送方发送一个数据块 → 接收方校验后回复EACK(正确)或EENQ(错误,请求重发)。
  • 所有块发送完毕后,发送方发送EOT(传输结束)。
  • 接收方收到EOT后,若所有块完整,则组装消息并向上层提交。

下面用一张时序图展示SECS-I单块消息的完整握手过程:

SECS-I 单块消息握手时序(发送方 → 接收方) 发送方 (Sender) 接收方 (Receiver) ① ENQ(请求发送) ② EACK(允许发送) ③ 数据块(Block Header + Body) ④ EACK(块接收正确) ⑤ EOT(传输结束) 组装完整消息 提交上层 SECS-II T1 T2 T3 T4 T5

三、超时机制:T1、T2、T3、T4

SECS-I定义了四个关键超时定时器,用于检测链路异常并触发重传或断开:

定时器 含义 典型值 超时后果
T1 发送ENQ后等待EACK的时间 0.5~2秒 重发ENQ,连续失败则断开链路
T2 发送数据块后等待EACK的时间 0.5~2秒 重发当前块,超过重试次数则报错
T3 接收方等待下一个块或EOT的时间 1~5秒 判定传输中断,丢弃已收块
T4 接收方等待发送方重发块的时间 1~5秒 判定链路故障,释放会话

注意:T1和T2设置过短会导致正常网络抖动下频繁重传;设置过长则故障恢复缓慢。建议根据实际串口波特率和线缆长度调整,通常9600bps下T1/T2取1秒左右,115200bps下可缩短至0.5秒。

四、常见串口参数与调试方法

调试SECS-I通信时,首先确认串口参数完全匹配。常见配置如下:

波特率: 9600 / 19200 / 38400 / 115200
数据位: 8
停止位: 1
校验位: None
流控:   RTS/CTS 或 None
设备ID: 0~32767(需与主机配置一致)

调试步骤建议按以下顺序进行:

  1. 物理层检查:确认线缆连接正确,TXD/RXD交叉,GND共地,必要时用万用表测量RTS/CTS电平。
  2. 串口参数核对:使用串口调试助手以相同参数打开端口,观察是否有乱码或超时。
  3. 链路层抓包:使用支持SECS-I解析的工具(如SECS Driver、串口监听软件)捕获ENQ/EACK/数据块/EOT序列。
  4. 超时分析:若频繁出现EENQ或T2超时,检查波特率偏差、线缆质量、接收方处理延迟。
  5. 日志比对:将设备端日志与主机端日志按时间戳对齐,定位是发送方未发、接收方未回还是中间丢失。

实战经验:某次设备通信间歇性失败,抓包发现发送方发出ENQ后接收方偶尔不回EACK。最终定位为接收方串口中断优先级过低,在高负载时丢失字节。将串口接收改为DMA+中断方式后问题消失。这说明SECS-I调试不能只看协议层,物理层和驱动层同样关键。

五、常见误区与复盘

  • 误区一:认为SECS-I和HSMS可以混用。两者消息格式相似,但链路层完全不同,不能直接互通。
  • 误区二:忽略设备ID和系统字节的匹配。设备ID错误会导致消息被丢弃,系统字节不匹配会导致事务无法关联。
  • 误区三:超时值随意设置。过短导致重传风暴,过长导致故障发现滞后,应参考SEMI E4推荐值并结合现场调整。
  • 误区四:只用软件模拟调试,不接真实设备。真实设备的时序抖动、流控行为和异常处理与模拟器差异很大。

复盘时建议记录每次通信的块号、系统字节、超时事件和重传次数,形成链路质量基线。当重传率超过1%时,应主动检查线缆、波特率误差和接收方缓冲区,而不是等到通信完全中断再处理。