4. T3 超时(Reply Timeout)

T3 超时是 SECS/GEM 通信中最核心的会话级超时参数之一,它直接决定了设备(Equipment)与主机(Host)之间一次事务(Transaction)的等待极限。理解 T3 的定义、作用及其对事务的影响,是正确配置 HSMS 链路恢复参数的前提。

4.1 T3 的定义与作用

T3(Reply Timeout) 是指发送方在发出一个需要回复的消息(Primary Message)后,等待接收方返回对应回复消息(Reply Message)的最大允许时间。如果在该时间内未收到预期的回复,发送方将判定该事务超时,并触发相应的超时处理流程。

属性 说明
全称 Reply Timeout(回复超时)
所属层级 SECS-II 会话层(Session Layer)
触发条件 发送 Primary Message 后启动计时器
超时后果 事务失败,发送方进入错误处理流程
标准范围 1 秒 ~ 120 秒(SEMI E5 推荐 45 秒)
关键概念:T3 超时是 SECS-II 协议中唯一由发送方主动监控的超时参数。接收方不会主动通知发送方“我还没准备好”,因此 T3 是防止通信死锁的最后防线。

T3 的作用可以归纳为以下三点:

  • 防止事务挂起:当接收方因故障、负载过高或网络异常而无法回复时,T3 确保发送方不会无限期等待。
  • 释放系统资源:每个未完成的事务都会占用发送方的消息缓冲区、事务 ID 和线程资源。T3 超时后,这些资源可以被回收。
  • 触发链路恢复:T3 超时通常是 HSMS 链路降级或断开的先兆信号,可触发后续的 T5/T6/T7 等链路恢复流程。
T3 超时在 SECS-II 事务中的位置 发送方(Host/Equipment) 接收方(Equipment/Host) Primary Message(SxFx) T3 计时器启动(等待回复) 等待时间 < T3 Reply Message(SxFy) 等待时间 ≥ T3 T3 超时 → 事务失败

4.2 T3 超时对事务的影响

T3 超时对 SECS/GEM 事务的影响是多层次的,从单个消息的丢失到整个链路的断开都有可能。以下是 T3 超时可能引发的连锁反应:

⚠ 注意:T3 超时并不等同于 HSMS 链路断开。它只是单个事务的失败,但频繁的 T3 超时会触发 T5(Connect Timeout)和 T6(Control Transaction Timeout),最终导致链路状态机迁移到 NOT CONNECTED 状态。
影响层级 具体表现 严重程度
事务层 当前 Primary Message 的回复丢失,事务标记为失败 低
会话层 发送方可能重试相同事务(取决于应用逻辑) 中
链路层 连续 T3 超时可能导致 T6 超时,触发 Link Test 或 Reconnect 高
应用层 生产数据丢失、配方下载失败、报警确认延迟 严重

从协议栈的角度看,T3 超时的影响路径如下:

  1. 发送方发出 Primary Message,启动 T3 计时器。
  2. 若 T3 超时,发送方将丢弃该事务的上下文,并记录一次 T3_TIMEOUT 错误。
  3. 发送方可以选择重试(Retry)或放弃(Abort),具体行为由上层应用决定。
  4. 如果 T3 超时发生在 HSMS 控制消息(如 Link Test Request)上,则直接触发链路恢复流程。
T3 超时影响路径与链路恢复触发 Primary Message 发送 T3 计时器启动 T3 超时触发 事务上下文释放 链路恢复触发 连续超时 → T6 超时 → Link Test / Reconnect

4.3 T3 配置建议与常见值

T3 的配置需要在响应及时性和网络容忍度之间取得平衡。过短的 T3 会导致误超时(False Timeout),过长的 T3 会延迟故障发现。以下是不同场景下的配置建议:

应用场景 推荐 T3 值 说明
高速生产环境 10 ~ 20 秒 低延迟网络,设备响应快,适合频繁的小事务
标准工厂环境 30 ~ 45 秒 SEMI E5 推荐值,适用于大多数 Ethernet 连接
远程/卫星连接 60 ~ 90 秒 高延迟链路,需容忍网络抖动
批量数据上传/下载 90 ~ 120 秒 大文件传输(如配方、日志)需要更长的等待时间
最佳实践:建议将 T3 设置为 45 秒作为初始值,然后根据实际网络延迟和事务响应时间进行微调。可以通过监控 T3_TIMEOUT 错误计数来判断当前配置是否合理。如果 T3 超时频繁发生,首先排查网络延迟和接收方负载,而不是盲目增大 T3。

配置 T3 时还需要注意以下事项:

  • T3 必须小于 T6(Control Transaction Timeout):通常 T6 是 T3 的 2~3 倍,确保控制事务有足够的时间完成。
  • T3 与 T5(Connect Timeout)无关:T5 用于连接建立阶段,T3 用于已建立连接后的数据事务阶段。
  • 设备端与主机端 T3 应保持一致:如果两端 T3 配置不同,可能导致一端认为超时而另一端仍在等待,造成事务状态不一致。
T3 配置对比:不同场景下的推荐值 高速生产 10~20s 标准工厂 30~45s 远程/卫星 60~90s 批量数据 90~120s 配置原则 T3 过短 → 误超时(False Timeout) | T3 过长 → 故障发现延迟 推荐初始值 45s,根据 T3_TIMEOUT 计数动态调整

4.4 T3 超时处理流程示例

以下是一个典型的 T3 超时处理代码片段(伪代码),展示了发送方在 T3 超时后的标准处理逻辑:

// T3 超时处理示例(伪代码)
function sendPrimaryMessage(message, timeout = T3) {
    startTimer(timeout);
    send(message);
    
    while (timerRunning) {
        if (replyReceived) {
            stopTimer();
            return processReply(reply);
        }
        if (timerExpired) {
            // T3 超时处理
            logError("T3_TIMEOUT", message.id);
            releaseTransactionContext(message.id);
            
            // 根据重试策略决定是否重试
            if (message.retryCount < MAX_RETRIES) {
                message.retryCount++;
                sendPrimaryMessage(message, timeout);
            } else {
                notifyApplication("Transaction failed", message.id);
                triggerLinkHealthCheck();
            }
            return;
        }
    }
}
实现要点:在实际的 SECS/GEM 实现中,T3 计时器通常由硬件定时器或操作系统的高精度定时器驱动。建议使用独立的定时器线程或事件驱动机制,避免阻塞主消息处理循环。