3. HSMS 连接建立与断开模拟:T5/T6/T7/T8 定时器作用与连接状态机
HSMS(High-Speed SECS Message Services)是 SEMI E37 标准定义的 TCP/IP 通信协议,负责在主机(Host)与设备(Equipment)之间建立可靠的双向连接。本章聚焦 HSMS 连接的生命周期管理,深入解析四个关键定时器(T5/T6/T7/T8)的作用,以及连接状态机在 Not Connected、Connected、Selected 三个状态之间的转换逻辑。理解这些机制是设计通信容错方案的基础。
3.1 HSMS 连接状态机总览
HSMS 连接状态机定义了通信链路的三种基本状态,以及状态之间的合法转换路径。设备与主机各自维护独立的状态机,通过协议消息同步状态。
关键概念: HSMS 状态机是对称的——主机和设备都运行相同的状态机逻辑,但角色(主动/被动)不同。状态转换由定时器超时或收到特定消息触发。
3.2 四大定时器:T5 / T6 / T7 / T8
HSMS 协议定义了四个关键定时器,用于控制连接建立、数据确认、连接空闲检测和选择状态维护。每个定时器都有明确的超时动作和容错含义。
| 定时器 | 默认值 | 触发位置 | 超时动作 | 容错意义 |
|---|---|---|---|---|
| T5 | 10 s | 连接建立阶段 | 重试 TCP 连接(最多 N 次) | 防止连接请求无限阻塞,控制重试间隔 |
| T6 | 5 s | 数据事务等待回复 | 终止当前事务,断开连接 | 检测对端无响应,避免事务死锁 |
| T7 | 10 s | Connected 空闲状态 | 发送 Linktest.req,若 T7 再次超时则断开 | 检测连接活性,防止“死连接”残留 |
| T8 | 5 s | Selected 空闲状态 | 发送 Linktest.req,若 T8 再次超时则降级为 Connected | 检测选择状态活性,避免虚假 Selected |
常见误区: T7 和 T8 都用于链路检测,但 T7 在 Connected 状态触发,超时后直接断开连接;T8 在 Selected 状态触发,超时后先降级为 Connected,而不是立即断开。这种分层设计避免了因短暂网络抖动导致频繁断开。
3.3 T5 定时器:连接建立重试控制
T5 定时器在 Not Connected 状态启动,控制 TCP 连接请求的重试间隔。设备或主机在主动发起连接时,若连接请求失败或超时,会等待 T5 时长后再次尝试。
- 启动时机: 发送 TCP SYN 包时启动。
- 超时处理: 若 T5 超时仍未收到 SYN-ACK,则重试连接,重试次数由配置决定(通常 3~5 次)。
- 容错设计: T5 防止了连接风暴——如果对端暂时不可用,T5 间隔避免了 CPU 和网络资源的浪费。
- 典型场景: 设备启动时主机尚未就绪,设备每 10 秒重试一次,直到主机上线。
// T5 重试逻辑伪代码
int retryCount = 0;
while (retryCount < MAX_RETRY) {
if (tcp_connect(host_ip, port) == SUCCESS) {
state = CONNECTED;
break;
}
sleep(T5_VALUE); // 默认 10 秒
retryCount++;
}
if (retryCount == MAX_RETRY) {
log_error("T5 重试耗尽,连接失败");
// 触发上层告警
}
3.4 T6 定时器:事务级响应超时
T6 定时器是 HSMS 中最严格的定时器,用于确保每个消息事务都能在预期时间内收到回复。一旦 T6 超时,意味着对端可能已经崩溃或网络中断,必须立即断开连接以释放资源。
最佳实践: T6 值应设置为略大于对端最大处理时间(通常 5 秒)。在半导体设备中,某些复杂指令(如远程 Job 下载)可能需要更长的处理时间,此时应适当增大 T6 或使用异步回复机制。
- 启动时机: 发送需要回复的消息(如 S2F17、S6F11)时启动。
- 超时处理: 立即断开 TCP 连接,状态回到 Not Connected,并记录事务 ID 用于诊断。
- 容错意义: 防止事务堆积导致内存泄漏,快速失败让上层应用及时感知。
3.5 T7 与 T8 定时器:链路活性检测
T7 和 T8 是 HSMS 的“心跳”定时器,用于检测连接是否仍然有效。它们的区别在于作用状态和超时后果。
| 对比维度 | T7(Connected 状态) | T8(Selected 状态) |
|---|---|---|
| 启动条件 | 进入 Connected 状态,且无消息收发 | 进入 Selected 状态,且无消息收发 |
| 超时动作 | 发送 Linktest.req,启动 T7 副本等待回复 | 发送 Linktest.req,启动 T8 副本等待回复 |
| 二次超时 | 断开连接 → Not Connected | 降级为 Connected(不断开 TCP) |
| 恢复机制 | 需重新建立 TCP 连接 | 可重新发起 Select 协商 |
| 适用场景 | 连接刚建立,尚未选择 | 正常通信中,检测选择状态 |
3.6 连接建立与断开模拟流程
下面通过一个完整的连接建立与断开模拟流程,展示状态机与定时器的协同工作。
3.6.1 正常连接建立流程
- Not Connected → Connected: 主动方(如设备)发起 TCP 连接,三次握手成功后进入 Connected 状态。
- Connected → Selected: 主动方发送
Select.req消息,被动方回复Select.rsp(状态码 0 表示成功),双方进入 Selected 状态。 - 数据通信: 在 Selected 状态下,双方可以自由收发 SECS-II 消息,T6 定时器监控每个事务的回复。
- 空闲检测: 若在 Selected 状态下长时间无消息,T8 定时器启动,定期发送 Linktest.req 保持活性。
3.6.2 异常断开模拟场景
| 异常场景 | 触发定时器 | 状态变化 | 恢复方式 |
|---|---|---|---|
| 对端进程崩溃 | T6 超时 | Selected → Not Connected | T5 重试连接 |
| 网络闪断 | T7 超时 | Connected → Not Connected | T5 重试连接 |
| 对端无响应但 TCP 未断开 | T8 超时 | Selected → Connected | 重新 Select |
| 连接请求被拒绝 | T5 重试耗尽 | Not Connected(持续) | 人工干预或切换备用主机 |
容错设计要点: 在实现 HSMS 通信层时,必须为每个定时器设置合理的超时值,并实现超时后的状态回滚和重试逻辑。特别要注意 T6 超时后的资源清理——包括未完成的事务队列、临时缓冲区等,避免内存泄漏。
3.7 状态机实现中的常见陷阱
- 状态不同步: 主机和设备的状态机可能因消息丢失而不同步。例如,主机认为处于 Selected 状态,但设备因 T8 超时已降级为 Connected。此时主机发送的数据消息会被设备拒绝(状态码 3:Not Selected)。
- 定时器重置遗漏: 每次收到消息或发送消息时,必须重置 T7/T8 定时器。如果忘记重置,会导致不必要的 Linktest 请求或连接断开。
- T5 重试风暴: 如果 T5 值设置过小(如 1 秒),且对端持续不可用,会导致大量 TCP 连接请求消耗系统资源。建议 T5 至少 5 秒,并限制最大重试次数。
- 多连接冲突: 在同一个 TCP 连接上,不允许同时存在多个 Select 协商。必须等待前一个 Select 完成(成功或失败)后才能发起新的 Select。
// 状态机转换核心逻辑(简化版)
enum HSMS_STATE { NOT_CONNECTED, CONNECTED, SELECTED };
void on_tcp_connected() {
state = CONNECTED;
start_timer(T7, T7_VALUE);
}
void on_select_rsp(uint8_t status) {
if (status == 0) {
state = SELECTED;
stop_timer(T7);
start_timer(T8, T8_VALUE);
} else {
// Select 被拒绝,保持在 Connected
state = CONNECTED;
}
}
void on_t6_timeout(uint32_t transaction_id) {
log_error("T6 timeout for transaction %d", transaction_id);
cleanup_transaction(transaction_id);
disconnect_tcp();
state = NOT_CONNECTED;
start_timer(T5, T5_VALUE); // 自动重连
}
void on_t8_timeout() {
if (state == SELECTED) {
send_linktest_req();
// 若二次超时,降级
if (linktest_retry_count++ >= 1) {
state = CONNECTED;
stop_timer(T8);
start_timer(T7, T7_VALUE);
linktest_retry_count = 0;
}
}
}
3.8 本章小结
HSMS 连接状态机与 T5/T6/T7/T8 定时器共同构成了半导体设备通信的可靠性基石。理解每个定时器的触发条件、超时动作和状态转换影响,是设计健壮通信容错机制的前提。在实际项目中,建议通过状态机日志和定时器监控面板来可视化连接状态,便于调试和故障定位。