2. 通信中断类型:物理层中断、会话层中断与应用层中断
在 SECS/GEM 通信模型中,异常中断并非单一现象,而是按照 OSI 参考模型的分层结构,发生在不同协议层级。理解中断发生的层次,是制定精准超时与重连策略的前提。本章将中断归纳为三类:物理层中断、会话层中断与应用层中断,并分别剖析其成因、特征与典型处理策略。
2.1 中断分层总览
下表从发生层级、典型场景、检测手段与恢复方式四个维度,对三类中断进行对比:
| 中断类型 | 发生层级 | 典型场景 | 检测手段 | 恢复方式 |
|---|---|---|---|---|
| 物理层中断 | 物理介质(网线/串口) | 网线被意外拔出、串口松动、交换机断电 | 链路层状态检测(Link Status)、串口 DCD 信号丢失 | 物理恢复后自动重连或手动插拔 |
| 会话层中断 | SECS 会话(T3/T5 超时) | 设备响应超时、HSMS 心跳丢失、网络拥堵导致报文延迟 | T3 计时器超时、T5 连接响应超时 | 重发请求、重建 HSMS 连接、重置会话状态 |
| 应用层中断 | SECS 消息事务(SxF0 异常) | 设备回复 SxF0(非法数据)、消息格式错误、功能码不支持 | 解析回复消息中的 SxF0 代码 | 根据错误码修正参数或降级处理 |
分层诊断原则: 排查通信中断时,应遵循“从下至上”的顺序——先确认物理链路是否正常,再检查会话超时,最后分析应用层消息内容。跳过物理层直接分析应用层,往往会导致误判。
2.2 物理层中断(网线/串口断开)
物理层中断是最直观、最底层的通信故障。当网线被意外拔出、串口 DB9 接头松动或交换机端口断电时,通信介质上的电信号或光信号完全消失,上层所有协议均无法工作。
2.2.1 物理层中断特征
- 检测延迟低: 操作系统或设备驱动可在毫秒级检测到链路断开(如网卡 Link Status 变为 Down)。
- 影响范围广: 所有基于该物理链路的 SECS 连接同时中断,无法进行任何数据交换。
- 恢复依赖人工或自动重连: 物理介质恢复后,HSMS 或 RS-232 连接需要重新建立会话。
2.2.2 物理层中断处理策略
- 链路状态监控: 在设备端和主机端分别注册链路状态回调,当检测到 Link Down 时立即触发告警。
- 自动重连机制: 物理恢复后,HSMS 主动发起
Connect请求,重新建立 TCP 连接并完成 Select 流程。 - 串口 DCD 检测: 对于 RS-232 串口,监控 DCD(Data Carrier Detect)信号,信号丢失即视为物理中断。
工程经验: 在半导体工厂中,网线被 AGV 小车碾压或误拔是物理层中断的最常见原因。建议在设备端使用带锁扣的工业级 RJ45 连接器,并在软件中设置 1~3 秒的去抖滤波,避免因短暂接触不良触发频繁重连。
2.3 会话层中断(T3/T5 超时)
会话层中断发生在 SECS 消息事务或 HSMS 连接建立阶段,典型表现为 T3 计时器超时(等待回复超时)和 T5 计时器超时(连接建立超时)。这类中断不涉及物理介质损坏,而是由于网络拥堵、设备负载过高或协议栈异常导致响应延迟。
2.3.1 T3 超时与会话层中断
T3 计时器用于控制单个 SECS 消息事务的等待时间。当主机发送一个 Primary Message 后,启动 T3 计时器;若在 T3 时间内未收到对应的 Secondary Message,则判定为 T3 超时,会话层中断发生。
| 参数 | 典型值 | 说明 |
|---|---|---|
| T3 超时时间 | 45 秒(SEMI E5 推荐) | 等待回复的最大时间,超过即认为事务失败 |
| T5 超时时间 | 10 秒(HSMS 连接建立) | 等待 Connect/Select 回复的最大时间 |
| 重试次数 | 3 次(可配置) | T3 超时后允许的最大重发次数 |
2.3.2 会话层中断处理策略
- T3 超时处理: 重发 Primary Message(最多 N 次),若仍超时则断开 HSMS 连接并重新建立会话。
- T5 超时处理: 关闭当前 TCP 连接,等待 T6(连接空闲超时)后重新发起 Connect 请求。
- 心跳保活: 启用 HSMS 心跳(T3 间隔发送 Select.req 或 Linktest.req),提前发现会话异常。
注意: 频繁的 T3 超时不一定代表网络故障,也可能是设备端处理能力不足或消息队列溢出。在调整 T3 超时值之前,应先排查设备 CPU 负载和消息处理线程状态。
2.4 应用层中断(SxF0 异常)
应用层中断发生在 SECS 消息事务的回复阶段。当设备收到一条 Primary Message 后,由于数据格式错误、功能码不支持或参数越界等原因,无法正常处理该消息,此时设备会回复一条 SxF0 消息(其中 x 为对应的 Stream 编号),表示“非法数据”或“请求不被接受”。
2.4.1 SxF0 异常分类
SxF0 消息中包含一个 Error Code(错误码),用于指示具体的异常原因。常见的错误码如下:
| 错误码 | 含义 | 典型触发场景 |
|---|---|---|
| 0 | 非法数据(Data Invalid) | 参数值超出允许范围,如 S2F41 中设置的温度值超过上限 |
| 1 | 不支持的功能(Function Not Supported) | 设备固件版本不支持该 Stream/Function 组合 |
| 2 | 无法处理(Unable to Process) | 设备当前状态不允许执行该操作,如正在执行 Recipe 时收到 S7F5 |
| 3 | 数据过长(Data Too Long) | 消息体长度超过设备缓冲区上限 |
2.4.2 应用层中断处理策略
- 解析错误码: 收到 SxF0 后,首先提取 Error Code,根据错误码确定异常类型。
- 参数修正: 对于“非法数据”错误,根据设备规范调整参数后重新发送。
- 功能降级: 对于“不支持的功能”错误,查询设备支持的 Stream/Function 列表,改用替代方案。
- 状态检查: 对于“无法处理”错误,先查询设备当前状态(如 S1F13),确认设备就绪后再重试。
最佳实践: 在开发阶段,建议在主机端维护一张“设备能力表”,记录每台设备支持的 Stream/Function 集合、参数范围以及当前状态。当收到 SxF0 时,自动查表并给出修正建议,可大幅减少人工排查时间。
2.5 三类中断的关联与综合处理
在实际生产环境中,三类中断可能相互关联或级联发生。例如:
- 物理层中断 → 会话层中断: 网线断开后,所有正在等待回复的 T3 计时器必然超时,触发会话层中断。
- 会话层中断 → 应用层中断: 频繁的 T3 超时可能导致设备状态机紊乱,后续消息被回复 SxF0。
- 应用层中断 → 会话层中断: 若主机连续发送非法消息,设备可能主动断开连接,导致会话层中断。
因此,在实现异常处理逻辑时,建议采用分层隔离与状态机联动的设计:
- 物理层独立监控,不依赖上层协议状态。
- 会话层维护重试计数器与连接状态,超时后优先尝试重连而非直接报错。
- 应用层记录错误码历史,当同一设备连续出现多次 SxF0 时,触发会话层重置。
分层隔离原则: 每一层只处理本层的异常,不越级干预。例如,物理层恢复后,会话层应自动重建连接,而不需要应用层介入;应用层收到 SxF0 时,不应直接关闭 TCP 连接,而应通过错误码引导修正。