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 计时器,必须在计时器到期前完成消息头的接收。

T2 超时在 HSMS 消息接收中的位置 发送方 (Host/Equipment) 接收方 (Equipment/Host) 消息头传输 (10 字节) 字节 0 → 字节 1 → ... → 字节 9 T2 计时器在此区间运行 T2 超时:等待完整消息头 典型值 10 秒 t₀: 开始接收 t₀ + 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 超时发生时,接收方必须执行以下协议规定的处理步骤:

  1. 丢弃不完整消息:立即丢弃当前接收到的部分消息头数据。
  2. 发送 NAK 响应:向发送方发送否定确认(Negative Acknowledgment),指示消息头接收失败。
  3. 重置接收缓冲区:清空接收缓冲区,准备接收下一个消息。
  4. 记录错误日志:在系统日志中记录 T2 超时事件,包括时间戳、发送方地址、已接收字节数等信息。
  5. 递增错误计数器:更新协议错误统计计数器,用于后续的链路质量评估。
注意:频繁的 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 超时的完整上下文,包括已接收字节的十六进制转储,便于定位问题根因。