2. HSMS 连接建立基础:TCP/IP 作为传输层、端口号约定与连接模式

HSMS(High-Speed SECS Message Services)完全依赖 TCP/IP 协议栈作为其底层传输载体。与 SECS-I 的 RS-232 串行通信不同,HSMS 利用 TCP 的面向连接、可靠传输、流量控制和拥塞避免机制,为半导体设备与主机之间的高速数据交换提供了稳定的通道。理解 TCP/IP 在 HSMS 中的角色、端口号约定以及主动/被动连接模式,是掌握 HSMS 状态机运转的前提。

2.1 TCP/IP 作为传输层:为什么选择 TCP?

SECS/GEM 标准选择 TCP 而非 UDP,主要基于以下半导体工厂自动化场景的刚性需求:

  • 可靠传输:TCP 的确认重传机制确保 SECS 消息(如 S6F11 报表数据)不会在网络拥塞时丢失。
  • 保序交付:TCP 保证字节流按序到达,避免 SECS 消息块(Message Block)重组时出现乱序错误。
  • 连接状态感知:TCP 的 keep-alive 和连接断开检测,为 HSMS 的 T3 超时和连接恢复提供了底层信号。
  • 全双工通信:设备与主机可同时收发 SECS 消息,满足实时控制需求。
💡 工程提示:在 HSMS 实现中,TCP_NODELAY 选项通常必须启用(禁用 Nagle 算法),以避免 SECS 短消息因等待缓冲区填充而产生额外延迟,导致 T3 超时误判。

下图展示了 TCP/IP 协议栈在 HSMS 通信体系中的位置:

HSMS 通信协议栈分层架构 应用层:SECS/GEM 消息(SxFy 格式) HSMS 会话层:消息头封装、T3/T5/T6 超时控制、连接状态机 TCP 传输层:端口 5000 / 5001、可靠字节流、连接管理 IP 网络层:IPv4/IPv6 寻址、路由 以太网 / 物理层 数据流方向

2.2 端口号约定:5000 与 5001

SEMI 标准为 HSMS 分配了两个固定的 TCP 端口号,分别对应不同的通信模式:

端口号 模式名称 典型用途 连接方向
5000 被动模式(Passive Mode) 设备作为 TCP Server 监听,主机主动连接 主机 → 设备
5001 主动模式(Active Mode) 设备作为 TCP Client 主动连接主机 设备 → 主机
⚠️ 常见误区:端口 5000 和 5001 仅用于 HSMS 控制连接(Control Connection)。数据消息(SECS 消息)与控制消息共享同一 TCP 连接,不存在独立的数据端口。不要将 5001 误解为“数据端口”。

端口选择的实际考量:

  • 工厂网络策略:若主机位于防火墙后且只允许出站连接,设备应使用主动模式(端口 5001)。
  • 多设备场景:一台主机管理数百台设备时,被动模式(端口 5000)可简化主机侧的连接管理,主机只需连接已知的设备 IP。
  • 安全审计:固定端口便于 IT 部门配置 ACL(访问控制列表)和端口监控。

2.3 主动连接模式(Active Mode)

在主动模式下,设备(Equipment)作为 TCP 客户端,主动向主机(Host)发起 TCP 连接请求。连接建立后,设备发送 HSMS 连接请求(Select.req)消息,完成 HSMS 会话层握手。

主动模式连接流程:

  1. 设备解析主机 IP 地址和端口 5001。
  2. 设备调用 connect() 系统调用,发起 TCP 三次握手。
  3. TCP 连接建立后,设备发送 Select.req 消息(Message ID = 0xFFFF)。
  4. 主机回复 Select.rsp,携带通信能力协商结果。
  5. 连接进入 Selected 状态,可开始数据通信。
🔧 实现要点:主动模式下,设备必须处理 connect() 超时。若主机无响应,设备应根据 T3 超时(通常 45 秒)触发重试,并遵循 HSMS 状态机回退到 Not Connected 状态。

2.4 被动连接模式(Passive Mode)

在被动模式下,设备作为 TCP 服务器,在端口 5000 上监听。主机主动连接设备,设备接受连接后同样需要完成 Select 握手。

被动模式连接流程:

  1. 设备在端口 5000 上调用 listen(),进入监听状态。
  2. 主机发起 TCP 连接请求,设备调用 accept() 接受连接。
  3. TCP 连接建立后,主机发送 Select.req 消息。
  4. 设备回复 Select.rsp,完成会话层握手。
  5. 连接进入 Selected 状态。
💡 工程提示:被动模式下,设备通常需要支持多个并发 TCP 连接(例如来自不同主机的冗余连接),但 HSMS 标准规定同一时间只有一个连接处于 Selected 状态。设备应拒绝或断开多余的 Select 请求。

2.5 主动 vs 被动模式对比

对比维度 主动模式(端口 5001) 被动模式(端口 5000)
TCP 角色 设备 = Client,主机 = Server 设备 = Server,主机 = Client
连接发起方 设备 主机
设备配置复杂度 较高(需处理 DNS 解析、重连逻辑) 较低(仅需监听端口)
防火墙友好性 适合设备在 NAT 后或受限网络 需要主机能直接路由到设备
典型场景 老旧设备、远程工厂、VPN 环境 局域网内、主机集中管理
Select 发起方 设备 主机

下图展示了两种连接模式的网络拓扑差异:

主动模式 vs 被动模式网络拓扑 主动模式(端口 5001) 设备 (Client) 主机 (Server) connect() 监听端口 5001 被动模式(端口 5000) 设备 (Server) 主机 (Client) connect() 监听端口 5000 设备 主机 连接发起方向

2.6 连接建立中的关键超时:T3 的早期介入

在 HSMS 连接建立阶段,T3 超时(Reply Timeout)虽然主要用于数据消息的响应等待,但在 Select 握手过程中同样生效:

  • Select.req 发送后:发起方启动 T3 定时器,等待 Select.rsp。
  • T3 超时处理:若在 T3 时间内未收到响应,发起方应断开 TCP 连接,并尝试重新连接(根据 T5 连接间隔定时器)。
  • 典型 T3 值:45 秒(可配置,但建议与主机侧保持一致)。
🔧 实现要点:在连接建立阶段,T3 超时不应与 TCP 连接超时混淆。TCP connect() 超时通常由操作系统控制(如 20 秒),而 T3 是 HSMS 会话层超时。两者应独立实现,避免嵌套阻塞。

2.7 连接模式选择决策树

实际项目中,选择主动还是被动模式通常遵循以下决策逻辑:

HSMS 连接模式选择决策树 选择连接模式 设备能否被主机直接访问? 是 被动模式:设备监听端口 5000 否 主动模式:设备连接主机端口 5001 注意:部分工厂同时支持两种模式,设备需通过配置参数(如 HSMSMode)动态切换 连接建立后,Select 握手流程在两种模式下完全一致

2.8 本章小结

  • HSMS 依赖 TCP/IP 的可靠传输,端口 5000(被动模式)和 5001(主动模式)是 SEMI 标准强制约定。
  • 主动模式下设备作为 TCP Client 发起连接,适合网络受限场景;被动模式下设备作为 TCP Server 监听,适合局域网集中管理。
  • 无论哪种模式,TCP 连接建立后必须通过 Select.req/rsp 握手才能进入 Selected 状态,开始数据通信。
  • T3 超时在连接建立阶段即生效,用于控制 Select 握手的响应等待,是后续状态机恢复策略的基础。