3、ASIL分解的数学原理:ASIL分解的代数规则(ASIL x + ASIL y = ASIL z),冗余与独立性的概念
好,我们进入第三讲。这一讲,我打算聊聊ASIL分解背后的数学逻辑。
很多人觉得ASIL分解就是个分配任务的过程,把高等级要求拆给几个低等级模块就行了。其实没那么简单。你想想看,如果随便拆,那安全等级不就成儿戏了吗?
这里头有一套严格的代数规则。说白了,就是 ASIL x + ASIL y = ASIL z 这个公式到底怎么算。
3.1 分解的代数基础:加法不是简单的数字相加
先看一个最基础的例子。
假设一个功能要求ASIL D。我把它分解到两个独立的通道上。通道A承担ASIL C,通道B承担ASIL B。那么,这两个通道合起来,能不能满足ASIL D?
答案是:能。但前提是——这两个通道必须相互独立。
这里的加法,不是1+1=2那种加法。它更像是一种“能力组合”。
我习惯用一个表格来理解这个规则:
| ASIL x | ASIL y | ASIL z (结果) | 说明 |
|---|---|---|---|
| D | D | D | 两个D级冗余,当然还是D |
| D | C | D | 高等级带低等级,结果仍为D |
| D | B | D | 常见组合,B级做监控 |
| C | C | D | 两个C级,加起来够D |
| C | B | C | 注意,这里只能到C |
| B | B | B | 两个B级,还是B |
| A | A | A | 两个A级,还是A |
看到没?ASIL D 只能由两个不低于 C 的等级组合得到。如果你拿一个ASIL B加一个ASIL A,最多只能得到ASIL B。这就是代数规则。
核心公式:
ASIL D = ASIL C(D) + ASIL B(D) 或 ASIL D(D) + ASIL QM(D)
但绝不能是:ASIL B + ASIL A = ASIL D
3.2 冗余与独立性:数学规则的前提条件
好,规则讲完了。但有个大前提——冗余和独立性。
我在项目中遇到过一件事。一个团队把ASIL D功能分解到两个ASIL B的通道上。从代数上看,B+B应该等于D?不对,上面表格里B+B只能等于B。他们搞错了。
更严重的是,他们虽然做了两个通道,但两个通道共用了一个电源芯片。结果电源一失效,两个通道同时挂掉。这叫什么冗余?这叫“假冗余”。
避坑指南:
我曾经见过一个设计,两个通道的软件代码是从同一个模型自动生成的。虽然硬件是独立的,但软件逻辑完全一样。一个bug,两个通道一起出问题。这种分解,在审核时直接被打了回来。
真正的独立性,要求:
- 硬件独立:不同的电源、时钟、复位、通信路径
- 软件独立:不同的开发团队、不同的算法实现、不同的编译器
- 时序独立:不能因为一个通道的延迟影响另一个通道的判断
- 故障独立:一个通道的故障不能传播到另一个通道
3.3 代数规则的实际应用:一个ASIL D的转向系统
我们拿一个实际场景来说。一个线控转向系统,要求ASIL D。
我建议这样分解:
- 主路径:ASIL C,负责正常的转向控制
- 监控路径:ASIL B,负责监控主路径的输出是否合理
- 安全路径:ASIL D,当主路径和监控路径都失效时,直接接管
你看,这里用了三个通道。但代数上怎么算?
主路径C + 监控路径B = 可以覆盖到D吗?不行,C+B只能到C。所以必须再加一个独立的ASIL D安全路径。
那如果我只用两个通道呢?
- 方案一:主路径ASIL D + 监控路径ASIL B = 满足D(因为D+B=D)
- 方案二:主路径ASIL C + 监控路径ASIL C = 满足D(因为C+C=D)
我个人更倾向于方案二。为什么?因为两个C级通道,开发成本比一个D级加一个B级要低。而且两个通道对等,设计上更对称,不容易出现“偏科”的情况。
3.4 分解的数学本质:概率与覆盖率
说到底,ASIL分解的数学本质是什么?
是故障概率的乘积。
你想想看,一个ASIL D的系统,允许的随机硬件故障概率是10^-8每小时。一个ASIL B的系统,允许的概率是10^-6每小时。
如果你把两个ASIL B的通道做冗余,且完全独立,那么两个通道同时失效的概率就是:
10^-6 × 10^-6 = 10^-12
这远低于10^-8的要求。所以从概率上看,两个B级冗余,确实可以满足D级要求。但为什么表格里B+B只能等于B?
因为实际工程中,你做不到100%的独立性。总有共因失效,比如电磁干扰、温度变化、软件框架的共用。所以标准保守地规定,B+B只能算到B。
我的经验:
在做分解时,不要只盯着代数规则。要问自己一个问题:这两个通道真的独立吗?如果有一个共因能把它们同时干掉,那你的分解就是无效的。
我习惯在架构设计阶段,就画一张“共因失效分析表”,把可能的共因列出来,然后看每个共因会影响哪些通道。如果发现某个共因能同时影响两个通道,那就得重新设计。
3.5 总结一下这一讲的核心
- ASIL分解的代数规则:ASIL x + ASIL y = ASIL z,但结果不是简单的数字相加,要查表
- 分解的前提:冗余和独立性,缺一不可
- 数学本质:故障概率的乘积,但工程上要考虑共因失效
- 避坑:不要做假冗余,共用电源、共用代码、共用算法都是坑
下一讲,我会聊聊ASIL分解在具体架构中的落地方法。到时候拿一个实际的项目案例,一步步拆解给你看。