3、功能安全概念(FuSa):ASIL等级分解、安全目标定义、安全状态设计

好,我们直接进入正题。功能安全概念,说白了就是回答三个问题:系统要安全到什么程度?哪些危险不能发生?出事了系统该怎么办?

我个人习惯把这一章叫做“安全架构的骨架”。骨架搭歪了,后面肌肉再强壮也白搭。咱们一个一个来拆解。

3.1 ASIL等级分解:别把鸡蛋放在一个篮子里

先聊聊ASIL等级分解。ISO 26262里定义了ASIL A到D四个等级,D是最严格的。但问题来了——如果整个车道保持功能要求ASIL D,你总不能把所有模块都按ASIL D来做吧?成本扛不住,开发周期也受不了。

这时候就需要分解。

分解的核心思想是:把一条高ASIL的安全要求,拆成两条或更多低ASIL的要求,分配给不同的独立要素。 举个例子:

  • 原始要求:车道保持功能需满足ASIL D
  • 分解后:感知模块(摄像头+算法)承担ASIL B(C),控制模块(转向执行器)承担ASIL B(C)
  • 组合起来,通过独立性保证,整体仍满足ASIL D

我在项目中遇到过一种情况:团队把ASIL D分解成两个ASIL B,但没做独立性分析。结果两个模块共用同一个电源芯片,一个短路两个全挂。嗯,这就不叫分解,这叫自欺欺人。

关键原则:分解后的子要素必须相互独立。共享资源(电源、时钟、通信总线)会破坏独立性。

分解的数学逻辑是这样的:

ASIL D = ASIL B(D) + ASIL B(D)   // 两个B级,通过独立性证明
ASIL D = ASIL C(D) + ASIL A(D)   // 一个C级加一个A级
ASIL D = ASIL D + QM(D)          // 一个D级加一个QM(质量级),但QM部分不能影响安全

你想想看,为什么不能直接ASIL D + QM?因为QM部分如果出故障,可能会干扰D级部分。所以QM必须被证明是“无干扰”的。这个坑我踩过,后面讲FFI(自由从干扰)时会细说。

3.2 安全目标定义:把“危险”翻译成“要求”

安全目标,是功能安全概念的起点。它来自HARA(危害分析与风险评估)的输出。HARA告诉你“什么场景下会出什么事故”,安全目标告诉你“怎么避免这个事故”。

举个例子,车道保持功能的一个典型危险:

  • 危害事件:车辆在高速行驶时,系统错误地输出大角度转向,导致车辆偏离车道或侧翻。
  • 安全目标:防止系统在无驾驶员意图时输出非预期的转向扭矩。
  • ASIL等级:ASIL D(因为高速场景下,严重度S3,暴露率E4,可控性C3)

写安全目标时,我建议遵循几个原则:

  1. 每个安全目标只对应一个危害。别想着一个目标覆盖所有问题,那会乱套。
  2. 目标要可验证。“系统要足够安全”这种话别写。要写“系统在故障时,转向扭矩不超过1Nm”。
  3. 明确安全状态。每个安全目标都要对应一个安全状态,或者一个降级模式。
我的小技巧:写安全目标时,先问自己三个问题——这个目标能测试吗?测试通过的标准是什么?如果测试不通过,系统会怎样?三个问题都答得上来,目标才算合格。

我曾经见过一个团队,安全目标写了“系统应避免碰撞”。这目标太模糊了。什么叫避免碰撞?是100%避免还是95%?是避免所有碰撞还是只避免追尾?后来我们把它拆成了三个具体目标:

安全目标编号 描述 ASIL
SG-01 防止系统在无驾驶员意图时输出非预期转向扭矩 ASIL D
SG-02 防止系统在车道线清晰时错误丢失目标车道线 ASIL B
SG-03 防止系统在驾驶员主动接管时拒绝退出 ASIL D

你看,这样每个目标都清晰可测。测试工程师拿到手就知道怎么写测试用例。

3.3 安全状态设计:出事了,系统该干嘛?

安全状态,就是系统发生故障后,要进入的一个“不会造成危害”的状态。对于车道保持功能,常见的安全状态有:

  • 安全状态1:退出车道保持,将控制权交还给驾驶员(同时发出声光报警)
  • 安全状态2:维持当前转向扭矩,并逐渐降级到零(适用于部分转向故障)
  • 安全状态3:紧急制动并停车(适用于完全失控场景,比如传感器全失效)

设计安全状态时,我习惯问一个问题:“这个状态本身会不会引入新的危险?”

举个例子:如果系统检测到摄像头故障,立即退出车道保持并把方向盘猛地回正——这本身可能造成车辆失控。所以安全状态的设计,必须考虑过渡过程。

注意:安全状态不是“瞬间切换”的。从故障发生到进入安全状态,中间有一个故障容错时间间隔(FTTI)。在这个时间内,系统必须完成检测、诊断、响应三步。对于ASIL D的系统,FTTI通常要求在100ms以内。

我记得有一次做评审,一个同事设计的安全状态是“系统故障时,直接切断转向电机电源”。听起来很安全对吧?但问题来了——切断电源后,方向盘会变得非常重,驾驶员在高速上根本打不动。这反而增加了事故风险。后来我们改成了“维持一个较小的助力,同时提示驾驶员接管”。

安全状态的设计,说白了就是权衡。你要在“足够安全”和“不过度惊吓驾驶员”之间找平衡。我个人习惯的做法是:

  1. 先列出所有可能的故障模式
  2. 对每个故障模式,定义最坏情况下的危害
  3. 设计一个能避免该危害的状态
  4. 检查这个状态本身是否安全
  5. 如果状态本身不安全,重新设计

最后说一句:安全状态不是一成不变的。随着系统架构演进,安全状态也要跟着更新。别想着一次设计管三年,那不可能。

总结一下本章核心:
  • ASIL分解:高等级拆成低等级,但必须保证独立性
  • 安全目标:每个危害对应一个目标,目标要可测可验证
  • 安全状态:故障后的归宿,要考虑过渡过程和FTTI

下一章我们会聊功能安全架构的具体实现,包括冗余设计、监控机制和故障响应策略。到时候我会拿一个实际项目的架构图来拆解,咱们不见不散。