4. T2 超时(Protocol Timeout)
T2 超时是 SECS/GEM 通信会话中用于等待完整消息头(Message Header)的协议级超时参数。当 HSMS 连接建立后,发送方开始传输消息的第一个字节,接收方必须在 T2 规定的时间内接收到完整的 10 字节(或 14 字节,取决于协议版本)消息头,否则视为协议错误。
核心定义:T2 超时是接收方等待消息头最后字节到达的最大允许时间。它不关心消息体(Data Message)的长度,只关注消息头的完整性。
4.1 典型值与取值范围
| 参数 | 典型值 | 最小值 | 最大值 | 单位 |
|---|---|---|---|---|
| T2 超时 | 10 | 1 | 120 | 秒 |
工程建议:在高速以太网环境中,T2 设置为 5-10 秒通常足够。若网络存在较大抖动或经过长距离传输(如跨工厂网络),可适当增加至 15-20 秒。不建议超过 30 秒,否则会延迟协议错误的检测。
4.2 T2 超时在消息传输中的位置
下图展示了 T2 超时在 HSMS 消息接收过程中的作用位置。接收方在检测到第一个字节后启动 T2 计时器,必须在计时器到期前完成消息头的接收。
4.3 配置方法
T2 超时的配置通常在 HSMS 连接建立前的初始化阶段完成。以下是三种常见的配置方式:
4.3.1 通过配置文件设置
在 SECS/GEM 驱动或通信中间件的配置文件中,通常以键值对形式定义 T2 超时:
# HSMS 连接配置示例
[HSMS_CONNECTION]
T1_Timeout = 3.0
T2_Timeout = 10.0
T3_Timeout = 45.0
T4_Timeout = 45.0
Connect_Mode = ACTIVE
Port_Number = 5000
IP_Address = 192.168.1.100
Device_ID = 0
4.3.2 通过 API 编程配置
在支持 SECS/GEM 的 SDK 中,通常提供设置超时的接口函数:
// C++ 示例:使用 SECS/GEM SDK 设置 T2 超时
#include "SecsGemApi.h"
int main() {
HSMSConnectionConfig config;
config.t2Timeout = 10.0; // 设置 T2 超时为 10 秒
config.t1Timeout = 3.0;
config.t3Timeout = 45.0;
config.t4Timeout = 45.0;
config.connectMode = HSMSConnectMode::ACTIVE;
config.port = 5000;
config.ipAddress = "192.168.1.100";
config.deviceId = 0;
HSMSConnection* conn = HSMSConnection::create(config);
conn->connect();
// ... 后续通信逻辑
return 0;
}
4.3.3 通过设备参数配置
部分半导体设备支持通过 EEPROM 或参数文件直接修改 T2 超时值:
# 设备参数文件示例 (Equipment Parameter File)
PARAMETER: T2_TIMEOUT
VALUE: 10
UNIT: SECONDS
RANGE: [1, 120]
DESCRIPTION: "Protocol timeout for waiting complete message header"
4.4 T2 超时触发后的处理流程
当 T2 超时发生时,接收方必须执行以下协议规定的处理步骤:
- 丢弃不完整消息:立即丢弃当前接收到的部分消息头数据。
- 发送 NAK 响应:向发送方发送否定确认(Negative Acknowledgment),指示消息头接收失败。
- 重置接收缓冲区:清空接收缓冲区,准备接收下一个消息。
- 记录错误日志:在系统日志中记录 T2 超时事件,包括时间戳、发送方地址、已接收字节数等信息。
- 递增错误计数器:更新协议错误统计计数器,用于后续的链路质量评估。
注意:频繁的 T2 超时通常表明网络存在严重问题,如链路拥塞、硬件故障或发送方行为异常。连续多次 T2 超时可能导致 HSMS 连接断开(T6 超时触发)。建议在工程实施中设置 T2 超时告警阈值,例如连续 3 次 T2 超时触发运维通知。
4.5 T2 超时与其他超时的关系
| 超时参数 | 作用阶段 | 与 T2 的关系 |
|---|---|---|
| T1 (Inter-Character Timeout) | 字符间等待 | T1 在 T2 之前触发,用于等待单个字符;T2 用于等待完整消息头 |
| T3 (Reply Timeout) | 等待回复消息 | T3 在消息头接收完成后启动,与 T2 无直接时序重叠 |
| T4 (Inter-Select Timeout) | Select 请求间隔 | T4 控制 Select 请求的重试间隔,与 T2 属于不同协议层 |
| T6 (Control Transaction Timeout) | 控制事务超时 | 连续 T2 超时可导致 T6 超时,进而触发连接断开 |
4.6 常见问题与排查
- 问题:T2 超时频繁发生,但网络延迟正常。
排查:检查发送方是否在发送消息头时出现中断,例如 CPU 负载过高导致发送线程被抢占。 - 问题:T2 超时只在特定消息类型上发生。
排查:检查该消息的消息头长度是否符合协议规范,是否存在扩展头(Extended Header)导致接收方解析异常。 - 问题:T2 超时在连接建立初期频繁出现。
排查:检查 HSMS 连接建立过程中的 Select 请求是否完整,以及设备端的 TCP 接收缓冲区是否足够大。
最佳实践:在系统调试阶段,建议将 T2 超时设置为较大的值(如 30 秒),待通信稳定后再逐步调整至典型值 10 秒。同时,在日志中记录每次 T2 超时的完整上下文,包括已接收字节的十六进制转储,便于定位问题根因。