3. 故障、错误与失效的因果链
在星载软件可靠性分析中,最容易混淆的三个词是 fault、error 和 failure。它们不是同义词,而是同一条因果链上处于不同位置、具有不同可观测性的三个环节。如果分析语言不统一,后续的故障注入、传播追踪和失效判据就会失去共同基准。本节先建立这条链的严格定义,再结合星载典型场景说明故障如何被激活、错误如何传播、失效如何涌现。
一、三个概念的严格边界
故障(fault)是系统内部的缺陷或异常原因,它本身是静态的、潜在的。例如一段星载姿态控制软件中,某个浮点累加在长时间运行后可能因精度损失产生偏差;或者某块 SRAM 因单粒子翻转导致某一位被置反。故障在未被触发前不产生任何外部可见影响,它只是"存在"。
错误(error)是故障被激活后,系统内部状态与预期状态之间的偏差。错误是动态的、可传播的。例如上述 SRAM 位翻转若恰好落在姿态角速度缓存区,那么该缓存中的数值就成为一个错误值;这个错误值会随计算链继续向下传递。
失效(failure)是错误传播到系统边界后,导致系统对外提供的服务偏离规定行为。失效是可观测的、面向用户的。例如错误值最终使姿态控制输出超出允许范围,卫星姿态出现不可接受的漂移,地面测控发现遥测参数越界——这就是一次失效。
二、故障激活、错误传播与失效涌现
故障激活是指外部条件或内部时序使潜在缺陷开始产生影响。激活需要"触发条件"与"敏感路径"同时成立。以单粒子翻转为例,粒子击中 SRAM 是触发条件,被击中的位恰好属于关键数据区是敏感路径。若翻转发生在未使用的填充位,故障虽被激活但不产生有效错误。
错误传播是错误沿数据流、控制流或状态机转移路径扩散的过程。星载软件中常见的传播路径有三类:一是数据依赖传播,错误值经算术或逻辑运算影响下游变量;二是控制依赖传播,错误值改变分支判断,使程序走入错误路径;三是状态传播,错误值写入全局状态或模式寄存器,影响后续多个周期。传播过程中,错误可能被放大、被衰减,也可能被检错纠错机制截断。
失效涌现强调失效往往不是单一错误的直接结果,而是多个错误在时间与空间上叠加后,突破系统容错边界才显现。例如单粒子翻转引起的瞬时错误若被看门狗及时复位,可能不产生失效;但若同时发生总线错误导致复位失败,两个错误叠加才涌现出系统级失效。因此失效分析必须关注"错误累积"与"容错余量"的关系。
三、星载典型场景中的因果链实例
下面用一个可复现的分析示例说明如何把这条链落到具体对象上。假设某星载姿态控制软件使用 32 位浮点累加器计算角速度积分,运行于低地球轨道,单粒子翻转率约为 1×10⁻⁵ 次/位/天,关键数据区共 4096 位。
故障:SRAM 中角速度缓存区的某一位因单粒子翻转被置反。此时系统行为完全正常,故障处于潜伏状态。
激活:该缓存区在下一次控制周期被读取并参与积分运算。触发条件是"该位被读取",敏感路径是"该位属于角速度有效数据位"。若翻转发生在保留位,则不激活。
错误:积分结果出现偏差。假设翻转的是符号位,角速度值从 +0.5°/s 变为 -0.5°/s,偏差达 1.0°/s。这个错误值写入姿态角缓存,成为内部状态偏差。
传播:错误值经姿态解算、控制律计算、执行机构指令生成三级传播。若控制律中包含积分项,错误还会被累积放大。传播路径可表示为:角速度缓存 → 积分器 → 姿态角 → 控制力矩 → 反作用飞轮指令。
失效:若错误未被截断,飞轮指令持续偏离,卫星姿态角在若干周期后超出允许范围(例如滚动角超过 0.1°),地面遥测发现姿态偏差告警。此时失效涌现。
四、建立统一的分析语言
为了让故障注入与传播分析可复现,建议在分析文档中固定使用以下字段描述每个环节:
| 环节 | 关键字段 | 星载示例 |
|---|---|---|
| 故障 Fault | 位置、类型、触发条件、敏感路径 | SRAM 0x2000 区第 7 位,单粒子翻转,读取时激活 |
| 错误 Error | 偏差量、所在变量、观测点 | 角速度符号反转,偏差 1.0°/s,观测点:积分器输出 |
| 传播 Propagation | 路径、放大/衰减、截断机制 | 积分器→姿态角→控制力矩,EDAC 未覆盖,看门狗未触发 |
| 失效 Failure | 边界、判据、可观测信号 | 滚动角>0.1°,遥测 A 帧姿态偏差字越界 |
这套字段的价值在于:它把"哪里注入、哪里观测、哪里判定"三件事分开。注入点选在 fault 层,观测点选在 error 层,判定点选在 failure 层。如果三者混在一起,实验结论就无法区分"故障未激活"与"错误被容错截断"这两种完全不同的情况。
最后需要强调,因果链不是单向直线。实际星载系统中存在反馈:失效可能触发重构,重构又引入新的故障;错误传播可能改变系统模式,使原本不敏感的路径变为敏感。因此分析时应把链看作带反馈的有向图,而不是简单三段式。掌握 fault、error、failure 的边界与转换条件,是后续设计注入策略、布置观测点和定义失效判据的共同基础。