3. 异常分类与恢复需求建模

在自动化实验中,异常并不是一个笼统的“出错”概念。若把所有异常都当作同一种故障处理,恢复策略往往要么过度保守、频繁中断实验,要么过于激进、掩盖真实问题。因此,本节的核心任务是把实验中出现的异常拆解为可辨识、可判定的类别,再把每一类异常转化为明确的恢复需求,使恢复动作有依据、有边界、有验收标准。

一、为什么需要分类体系

自动化实验通常由实验编排器、被测设备、仪器、通信链路、数据采集与存储、计算资源等多个环节组成。不同环节的异常,其表现、影响范围和可恢复性差异很大。例如,设备掉电与一次网络抖动都可能表现为“数据缺失”,但前者需要重新初始化设备并重跑当前用例,后者可能只需重连并补采一个采样窗口。如果不加区分,恢复逻辑就无法选择正确的动作。

分类体系的价值在于三点:第一,把模糊的“异常”变成可观测的特征组合,例如错误码、超时、心跳丢失、数据校验失败、资源占用率等;第二,为每类异常指定恢复目标,是恢复到异常前状态、跳过当前步骤,还是终止实验并保留现场;第三,为恢复动作定义成功判据,避免“执行了恢复动作”被误认为“恢复成功”。

二、五类典型异常及其判定特征

结合自动化实验的常见场景,可将异常划分为设备故障、通信中断、数据污染、资源死锁和逻辑错误五类。它们并非互斥,实际排障中常出现组合,但分类时仍应以“主导原因”为准,避免恢复动作互相冲突。

  • 设备故障:仪器或被测设备无法响应、返回错误状态、自检失败、输出超限。典型特征包括设备状态字异常、命令超时、读数恒定不变或明显越界。恢复需求通常是设备复位、重新初始化、重新建立安全输出,并决定是否重跑当前用例。
  • 通信中断:链路断开、丢包、握手失败、协议解析错误。典型特征是心跳丢失、重传次数超限、连接句柄失效。恢复需求是重连、重建会话、校验链路质量,并判断断连期间的数据是否需要补采。
  • 数据污染:采集数据出现错位、重复、缺失、时间戳乱序或数值超出物理合理范围。典型特征是校验和不匹配、采样间隔异常、同一时刻多条记录。恢复需求是隔离污染数据、标记数据质量、必要时重采或从备份恢复。
  • 资源死锁:多个任务互相等待对方持有的资源,导致实验停滞。典型特征是任务长时间处于等待状态、资源占用率居高不下、无新日志产生。恢复需求是识别死锁环、释放或抢占资源、设置超时与重试上限。
  • 逻辑错误:实验流程、参数计算或状态机判断出现错误,导致结果不符合预期但系统并未崩溃。典型特征是流程跳转异常、参数组合非法、结果与预期偏差大。恢复需求是回滚到最近检查点、修正参数或流程分支,并记录逻辑错误上下文。
异常分类 → 恢复需求映射模型 异常源与特征 设备故障 状态字异常 / 命令超时 通信中断 心跳丢失 / 重传超限 数据污染 校验失败 / 时间戳乱序 资源死锁 任务等待 / 资源占用高 逻辑错误 流程跳转 / 参数非法 可执行恢复需求 复位设备 → 重新初始化 → 重跑当前用例 重连 → 重建会话 → 补采断连窗口 隔离污染数据 → 标记质量 → 重采或备份恢复 识别死锁环 → 释放资源 → 设置超时与重试上限 回滚检查点 → 修正参数 → 记录逻辑上下文 恢复目标与成功判据 目标:设备回到就绪态 判据:自检通过 + 输出正常 目标:链路稳定可通信 判据:心跳恢复 + 丢包率达标 目标:数据可信可用 判据:校验通过 + 时间戳有序 目标:任务继续推进 判据:资源释放 + 任务恢复运行 目标:结果符合预期 判据:参数合法 + 流程回到正轨

三、从分类到恢复需求的转化方法

分类本身不是目的,关键是把每一类异常转化为可执行的恢复需求。转化过程可以按“识别—定级—定目标—定动作—定判据”五步展开,但不必机械套用,实际建模时可根据实验特点调整粒度。

第一步是识别。为每类异常定义可观测的触发条件,例如设备故障可定义为“连续3次命令超时且状态字bit5置位”;通信中断可定义为“心跳间隔超过2秒且重传次数大于5”;数据污染可定义为“校验和不匹配或采样间隔偏离标称值超过20%”。这些条件应尽量量化,避免“感觉不对”这类主观判断。

第二步是定级。根据异常对实验目标的影响程度,划分为轻微、中等、严重三级。轻微异常可自动恢复并继续;中等异常需暂停当前用例、恢复后重跑;严重异常应终止实验、保留现场并告警。定级直接影响恢复动作的激进程度。

第三步是定目标。恢复目标要明确是“回到异常前状态”“跳过当前步骤”还是“安全终止”。例如资源死锁通常以“释放资源并继续”为目标,而设备严重故障可能以“安全停机并保留现场”为目标。

第四步是定动作。动作应具体到可执行的命令或操作序列,例如“发送*RST复位指令→等待5秒→查询*IDN?确认设备在线→重新加载配置”。避免使用“进行恢复”这类模糊表述。

第五步是定判据。每个恢复动作后都要有明确的成功判据,例如“设备自检返回0”“心跳连续3次正常”“数据校验通过且时间戳单调递增”。只有判据满足,才认为恢复完成,否则进入升级处理。

四、恢复需求建模示例

下面以“通信中断”为例,给出一个可参考的恢复需求建模片段。假设实验平台通过TCP与数据采集器通信,采样周期为100ms,心跳周期为1s,允许的最大断连窗口为500ms。

异常类别:通信中断
触发条件:心跳丢失 ≥ 2次 或 重传次数 ≥ 5
影响等级:中等
恢复目标:重建链路并补采断连窗口数据
恢复动作:
  1. 关闭旧socket,释放端口
  2. 以指数退避重连,首次等待200ms,最大等待2s
  3. 重连成功后发送握手帧,校验协议版本
  4. 查询采集器缓存,获取断连期间的时间戳区间
  5. 若缓存完整,补采并合并;若缓存缺失,标记该区间为无效
成功判据:
  - 心跳连续3次正常
  - 补采数据时间戳连续,无重复
  - 丢包率 ≤ 1%
升级条件:重连3次失败 → 转设备故障处理

这个示例体现了分类到需求的完整转化:触发条件可观测,恢复动作可执行,成功判据可验证,升级路径明确。实际建模时,可把五类异常都按类似结构整理成恢复需求表,作为实验编排器异常处理模块的输入。

建模提示:恢复需求应尽量与具体实验解耦。例如“重连并补采”是通用需求,而“重连后从采集器缓存读取断连区间”则依赖设备能力。建模时可把需求分为“通用恢复需求”和“设备相关恢复需求”两层,便于复用。

五、常见误区与检查要点

在实际建模中,容易出现几类问题。一是分类过粗,把设备故障和通信中断混为一谈,导致恢复动作互相干扰;二是恢复目标不明确,只写“恢复通信”,没有说明恢复到什么程度;三是缺少成功判据,恢复动作执行后无法判断是否真正恢复;四是忽略升级路径,重试多次失败后没有后续处理,导致实验卡死。

检查恢复需求是否合格,可以问四个问题:触发条件是否可观测、可量化?恢复动作是否具体到命令或操作序列?成功判据是否可验证?失败后是否有升级或终止路径?四个问题都能明确回答,恢复需求才具备可执行性。

此外,还需注意异常之间的耦合。例如通信中断可能导致数据污染,资源死锁可能引发设备超时。建模时应定义主导异常的判定优先级,避免多个恢复动作同时触发。一般建议按“设备故障 > 通信中断 > 资源死锁 > 数据污染 > 逻辑错误”的顺序判定,先处理底层可用性问题,再处理数据与逻辑问题。

完成分类与需求建模后,下一步就是把这些需求落到实验编排器的异常处理状态机中,使每一类异常都能被自动识别、自动恢复或自动升级。本节建立的分类体系和恢复需求,正是后续恢复策略设计与验证的基础。