4. ASIL分解方法:冗余分解、多样性分解、分解在系统架构中的应用

好,咱们进入正题。ASIL分解,说白了就是“降级”。你想想看,一个功能如果直接要求ASIL D,那整个开发链条——从软件到硬件,从设计到测试——成本都会很高。但如果我们能用两个独立的、各承担一部分安全要求的子系统去实现它,那每个子系统可能只需要ASIL C甚至ASIL B就够了。

我最早接触这个概念时,也觉得不就是把等级拆开嘛。后来在项目里踩了坑才明白,分解不是简单的数字加减,它背后有一套严格的规则和架构约束。

4.1 冗余分解与多样性分解

ASIL分解主要分两种思路:冗余分解和多样性分解。它们的目标都是降低单一元素的ASIL等级,但实现路径完全不同。

分解类型 核心思想 典型场景 ASIL分配示例
冗余分解 两个相同功能的通道,互相备份 制动系统、转向系统 ASIL D → ASIL C(D) + ASIL C(D)
多样性分解 两个不同原理或不同技术的通道 传感器融合、执行器监控 ASIL D → ASIL B(D) + ASIL B(D)

冗余分解,我习惯叫它“双胞胎方案”。两个通道一模一样,一个坏了另一个顶上。但这里有个坑——共因失效。如果两个通道用同一颗芯片、同一套软件,一个短路两个都完蛋。所以冗余分解必须配合独立性要求。

多样性分解,说白了就是“兄弟俩走不同的路”。比如一个通道用摄像头测距,另一个用激光雷达。即使摄像头被强光干扰,激光雷达还能正常工作。这种分解对系统性失效的抵抗能力更强,但开发成本也更高。

关键原则:分解后的每个元素,其ASIL等级不能低于原等级的“一半”。比如ASIL D分解后,每个元素至少是ASIL C(D);ASIL C分解后,每个元素至少是ASIL B(C)。

4.2 分解在系统架构中的应用

光讲理论没意思,咱们看一个实际案例。我记得有一次做EPS(电动助力转向)项目,安全目标是“转向扭矩不能意外输出”,ASIL D。如果整个扭矩控制模块都按ASIL D开发,成本太高了。

我们是怎么做的?

  1. 识别安全相关元素:扭矩传感器、控制器、电机驱动。
  2. 应用ASIL分解:将ASIL D分解到两个独立路径——主控路径和监控路径。
  3. 分配ASIL等级:主控路径ASIL C(D),监控路径ASIL C(D)。
  4. 保证独立性:两条路径使用不同的供电、不同的时钟源、不同的软件算法。

这样,监控路径一旦发现主控路径输出异常,就能立即切断电机供电。两个ASIL C的子系统加起来,覆盖了ASIL D的安全要求。

我的经验:分解时一定要画清楚“安全边界”。我曾经见过一个项目,两个通道共用了一个看门狗,结果看门狗失效时两个通道同时挂掉。独立性不是嘴上说说,要落实到每个接口、每个资源上。

4.3 ASIL分解的架构图

下面这张图,是我在项目里常用的分解结构。它展示了ASIL D如何通过两条独立路径实现。

ASIL D 分解架构示例 安全目标:ASIL D 路径1:主控通道 ASIL C(D) 扭矩计算 + 电机控制 路径2:监控通道 ASIL C(D) 扭矩校验 + 安全关断 独立性要求 不同供电 / 不同时钟 / 不同软件算法 / 不同硬件资源

注意:分解不是万能的。如果两个通道之间存在“共因失效”,比如共用同一个晶振,那分解就失去了意义。我曾经在一个项目里,两个通道的软件虽然不同,但都调用了同一个底层驱动库。结果那个库有bug,两个通道同时失效。嗯,从那以后,我对“独立性”的审查就格外严格。

4.4 分解的常见误区

  • 误区一:分解后ASIL等级直接相加。不是的。ASIL D分解成两个ASIL C,不代表两个C加起来就是D。分解的前提是独立性和覆盖性。
  • 误区二:分解后可以不做安全分析。恰恰相反。分解后每个路径都要单独做FMEA和FTA,确保它确实能覆盖原安全目标的一部分。
  • 误区三:多样性分解一定比冗余分解好。不一定。多样性分解能抵抗共因失效,但开发成本高、验证复杂。冗余分解简单直接,但需要更严格的独立性设计。

我的建议:在项目早期就确定分解策略。不要等到架构都定死了,才发现某个模块的ASIL等级太高,再回头去拆。那时候改架构的成本,会让你很头疼。