4、诊断覆盖率计算方法:故障注入法、FMEDA分析法、经验公式法

诊断覆盖率怎么算?这个问题,我几乎每次评审都会被问到。说实话,刚入行那会儿我也挺头疼的——不同项目、不同阶段,用的方法完全不一样。今天咱们就把三种主流方法掰开揉碎了讲清楚。

我个人习惯把诊断覆盖率计算分成三类:故障注入法、FMEDA分析法、经验公式法。它们各有各的适用场景,也各有各的坑。

核心观点:没有一种方法能包打天下。成熟项目用FMEDA,验证阶段用故障注入,早期估算用经验公式。关键是要知道什么时候该用哪个。

诊断覆盖率计算方法体系 故障注入法 实测驱动 FMEDA分析法 模型驱动 经验公式法 估算驱动 硬件故障注入 (JTAG/探针) 软件故障注入 (寄存器级) 失效模式分析 (FMEA表) 诊断措施映射 (覆盖率计算) IEC 61508公式 (λDU/λtotal) 三种方法的选择策略 • 故障注入法:适合设计验证阶段,精度高但成本大 • FMEDA分析法:适合系统级评估,可追溯性强 • 经验公式法:适合早期概念设计,快速估算 • 实际项目中,我通常会用FMEDA打底,故障注入做抽样验证

4.1 故障注入法——最实在,但也最费劲

故障注入法,说白了就是故意把故障塞进系统,看诊断机制能不能抓到。我在一个安全气囊控制器项目里用过这招,当时为了覆盖一个SPI通信故障,整整折腾了两周。

基本流程是这样的:

  1. 确定故障模型——比如 stuck-at-0、stuck-at-1、位翻转、开路、短路
  2. 选择注入点——芯片引脚、内部寄存器、总线信号、存储器单元
  3. 执行注入——通过JTAG、探针台或软件模拟方式注入
  4. 观察响应——看诊断机制是否触发、触发时间、是否误报
  5. 计算覆盖率——DC = (检测到的故障数 / 注入的总故障数) × 100%

我的经验:故障注入不是越多越好。我曾经一次性注入了5000个故障,结果大部分是冗余的。关键是要覆盖所有失效模式,而不是追求数量。建议按功能模块分层抽样,每个模块至少选10-20个代表性故障。

这里有个常见的坑——故障注入的深度问题。你想想看,如果只在芯片引脚上注入故障,内部逻辑的诊断覆盖率根本测不到。我见过一个团队,报告说诊断覆盖率95%,结果现场出问题了,一查是内部RAM的故障根本没注入过。

警告:故障注入法测出来的覆盖率,只代表你注入的那些故障。如果故障模型不完整,覆盖率就是虚的。务必对照FMEDA的失效模式清单来设计注入用例。

4.2 FMEDA分析法——系统化,可追溯

FMEDA(Failure Modes, Effects and Diagnostic Analysis)是我个人最推荐的方法。它不像故障注入那样需要实际硬件,而是通过分析每个元器件的失效模式,逐一评估诊断措施的有效性。

核心步骤:

  • 第一步:列出所有元器件及其失效模式(比如电阻开路、电容短路)
  • 第二步:给每个失效模式分配失效率λ(从SN 29500或IEC 62380查)
  • 第三步:判断每个失效模式是否能被诊断机制检测到
  • 第四步:计算:DC = (Σλdetected / Σλtotal) × 100%

举个例子,一个简单的电源监控电路:

元器件 失效模式 失效率 (FIT) 可诊断? 说明
电压基准 输出漂移 50 是 看门狗定时器检测
电压基准 输出卡死 20 是 比较器检测
分压电阻 开路 10 是 电压超出范围
分压电阻 短路 5 否 无法区分正常值
比较器 输出卡死 30 否 无自检功能

算一下:总失效率 = 50+20+10+5+30 = 115 FIT,可诊断的 = 50+20+10 = 80 FIT。DC = 80/115 ≈ 69.6%。

注意:FMEDA的精度取决于失效率数据的准确性。我习惯用IEC 62380的数据,但不同标准差异挺大的。同一个电阻,SN 29500和MIL-HDBK-217给出的FIT值可能差两倍。所以,一定要注明数据来源。

4.3 经验公式法——快,但别太当真

经验公式法,说白了就是拍脑袋——当然,是有依据地拍。在项目早期,连原理图都没画完的时候,客户就问你要诊断覆盖率指标,这时候经验公式就派上用场了。

最常用的公式来自IEC 61508:

DC = 1 - (λ_DU / λ_total)

其中:
λ_DU = 危险未检测失效率
λ_total = 总失效率

对于简单系统,可以近似:
DC ≈ 1 - (1 - DC_sensor) × (1 - DC_logic) × (1 - DC_actuator)

这个公式的假设是各部分的诊断相互独立。但实际项目中,哪有那么独立?我曾经在一个液压系统中发现,传感器和执行器的诊断共用了同一个ADC通道,结果一个故障把两个诊断全干掉了。

避坑指南:经验公式只适用于概念设计阶段。一旦进入详细设计,必须用FMEDA或故障注入来验证。我见过有人拿着经验公式算出来的98%覆盖率去交差,结果审核专家直接问:“你的共因失效怎么考虑的?”当场哑口无言。

4.4 三种方法的对比与选择

我把三种方法的差异整理了一下,方便你对照:

维度 故障注入法 FMEDA分析法 经验公式法
精度 高(实测数据) 中高(依赖数据质量) 低(估算值)
成本 高(需要硬件平台) 中(需要分析工具) 低(Excel就能算)
适用阶段 详细设计/验证 系统设计/认证 概念设计/投标
可追溯性 强(有测试记录) 强(有分析文档) 弱(缺乏细节)
覆盖范围 受限于注入点 全元器件覆盖 系统级粗略估算

我个人习惯的做法是:先用经验公式快速估算,再用FMEDA做系统分析,最后用故障注入抽样验证关键路径。这样既保证了效率,又不会漏掉重要故障。

最后提醒一句:不管你用哪种方法,诊断覆盖率永远是一个统计值。它不代表你的系统一定安全,只代表在已知故障模型中,诊断机制能抓到多少。真正的安全,靠的是严谨的设计和充分的验证,而不是一个漂亮的百分比。