3、诊断覆盖率(DC)基础:DC定义、单点故障度量(SPFM)、潜在故障度量(LFM)、PMHF计算
好,咱们进入第三章。这一章讲的是诊断覆盖率,也就是DC。说实话,这是功能安全里最容易被低估的概念之一。很多人觉得DC不就是个百分比吗?其实没那么简单。我个人习惯把DC看作是安全机制的“体检报告”——它告诉你,你的安全机制到底能查出多少故障。
3.1 诊断覆盖率(DC)的定义
诊断覆盖率,英文叫Diagnostic Coverage,缩写DC。它的定义其实很直白:安全机制检测到的故障率,除以总故障率。
用公式表示就是:
DC = λ_detected / λ_total
其中:
- λ_detected:能被安全机制检测到的故障率
- λ_total:该安全机制覆盖区域内的总故障率
嗯,这里要注意:DC是一个介于0和1之间的值,通常用百分比表示。比如DC=99%意味着安全机制能检测到99%的故障,剩下1%是漏网之鱼。
关键点:DC不是针对整个系统,而是针对某个安全机制或某个安全目标。你设计一个RAM的ECC校验,它的DC只覆盖RAM区域,不覆盖CPU。
我在项目中遇到过不少工程师,拿着芯片厂商给的DC值直接套用,结果发现实际场景根本对不上。为什么?因为DC值依赖于故障模型和运行环境。芯片厂商给的DC可能是基于单比特翻转模型,而你的系统里可能有多比特翻转的风险。
3.2 单点故障度量(SPFM)
单点故障度量,SPFM,全称Single Point Fault Metric。这是ISO 26262里用来衡量系统对单点故障和残余故障的覆盖能力的指标。
说白了,SPFM就是问一个问题:系统中那些直接导致安全目标违反的故障,你覆盖了多少?
SPFM的计算公式如下:
SPFM = 1 - (λ_SPF + λ_RF) / (λ_total - λ_MPF)
其中:
- λ_SPF:单点故障率(直接导致安全目标违反,且无安全机制覆盖)
- λ_RF:残余故障率(有安全机制覆盖,但安全机制本身无法检测到的部分)
- λ_total:总故障率
- λ_MPF:多点故障率(需要多个故障同时发生才会导致安全目标违反)
我的经验:SPFM的目标值取决于ASIL等级。ASIL B要求SPFM ≥ 90%,ASIL D要求SPFM ≥ 99%。我曾经在一个项目中,SPFM算出来只有97%,离ASIL D的99%差一点。后来发现是一个传感器接口的残余故障率被低估了,调整了诊断周期后才达标。
你想想看,SPFM为什么重要?因为它直接反映了系统对“单点失效”的抵抗能力。如果一个故障就能让系统崩溃,那这个系统的安全性就太脆弱了。
3.3 潜在故障度量(LFM)
潜在故障度量,LFM,全称Latent Fault Metric。它衡量的是系统对潜在故障的覆盖能力。
什么是潜在故障?就是那些不会立即导致安全目标违反,但会悄悄积累,最终在某个时刻爆发的故障。比如一个看门狗定时器坏了,但系统还在正常运行——直到主程序卡死,看门狗却不会复位系统。
LFM的计算公式:
LFM = 1 - (λ_MPF_latent) / (λ_MPF - λ_MPF_detected)
其中:
- λ_MPF_latent:潜在的多点故障率(未被检测到,且未被驾驶员感知)
- λ_MPF:总的多点故障率
- λ_MPF_detected:被检测到的多点故障率
避坑指南:我曾经在一个项目中,LFM怎么算都达不到ASIL D要求的90%。后来发现,问题出在“潜在故障的检测时间”上。ISO 26262要求潜在故障必须在一定的暴露时间内被检测到,否则就算作潜在故障。我们当时把诊断间隔设得太长了,导致很多故障被归类为潜在故障。缩短诊断间隔后,LFM就达标了。
LFM和SPFM的区别,我习惯这样理解:
- SPFM:看的是“一锤子买卖”——一个故障直接干翻系统
- LFM:看的是“温水煮青蛙”——故障慢慢积累,最终酿成大祸
3.4 PMHF计算
PMHF,全称Probabilistic Metric for random Hardware Failures,随机硬件故障概率度量。这是ISO 26262里最“硬核”的指标之一,因为它直接给出了一个数字:系统在运行过程中,因随机硬件故障导致安全目标违反的概率。
PMHF的单位是FIT(Failures In Time),1 FIT = 10⁻⁹ 故障/小时。或者用更直观的说法:1 FIT意味着每10亿小时发生1次故障。
ISO 26262对PMHF的要求:
| ASIL等级 | PMHF目标值 |
|---|---|
| ASIL A | < 10⁻⁶ /h(1000 FIT) |
| ASIL B | < 10⁻⁷ /h(100 FIT) |
| ASIL C | < 10⁻⁷ /h(100 FIT) |
| ASIL D | < 10⁻⁸ /h(10 FIT) |
PMHF的计算方法有多种,ISO 26262-10里给出了几种简化模型。我常用的方法是:
PMHF = λ_SPF + λ_RF + λ_MPF_latent × (1 - DC_MPF)
这个公式其实很好理解:
- λ_SPF:单点故障,直接贡献
- λ_RF:残余故障,直接贡献
- λ_MPF_latent:潜在的多点故障,但只有那些没被检测到的部分才贡献
实际项目中的PMHF计算:我记得有一次做ADAS控制器的PMHF分析,算出来是8.5 FIT,刚好满足ASIL D的10 FIT要求。但客户要求留20%余量,也就是不能超过8 FIT。后来我们优化了电源管理模块的诊断覆盖率,把PMHF降到了6.2 FIT。嗯,有时候就是差那么一点点。
3.5 三个指标的关系
SPFM、LFM和PMHF,这三个指标不是孤立的。它们从不同角度描述了系统的安全性能:
- SPFM:关注单点故障的覆盖程度
- LFM:关注潜在故障的覆盖程度
- PMHF:关注最终的故障概率
你可以这样理解:SPFM和LFM是“过程指标”,告诉你安全机制设计得好不好;PMHF是“结果指标”,告诉你系统到底有多安全。
在实际项目中,我建议的顺序是:
- 先做FMEDA,识别所有故障模式
- 分配安全机制,计算DC
- 计算SPFM和LFM,看是否达标
- 最后计算PMHF,确认整体风险水平
一个小技巧:如果你的SPFM和LFM都达标了,但PMHF超标,通常是因为某个安全机制的诊断间隔太长,导致暴露时间过长。这时候调整诊断周期往往比增加新的安全机制更有效。
好了,这一章的内容就到这里。诊断覆盖率这块,说白了就是“算账”——算清楚你的安全机制到底能挡住多少故障。下一章我们会深入FMEDA的具体做法,到时候会用到今天讲的这些概念。