3. 危害分析与风险评估(HARA)

HARA,全称 Hazard Analysis and Risk Assessment。说白了,就是回答三个问题:车会不会出危险?危险有多严重?我们该怎么定目标?

我刚开始做功能安全那会儿,总觉得HARA就是走个过场,填几张表完事。直到有一次,一个网关项目因为运行场景定义漏了“高速路上突然断网”这个场景,导致ASIL等级定低了。嗯,从那以后,我再也不敢小看这一步。

3.1 HARA方法论:从顶层到底层

HARA不是拍脑袋,它有一套标准流程。我个人习惯把它拆成四个阶段:

  1. 功能定义 – 搞清楚网关到底要干什么。
  2. 运行场景定义 – 车会在什么环境下跑?
  3. 危害事件识别 – 哪些故障会导致危险?
  4. ASIL等级确定 – 定级,然后定安全目标。

你想想看,这四个阶段就像盖楼打地基。前面漏了,后面全得返工。

核心原则:HARA必须基于功能行为,而不是基于硬件故障。我们分析的是“功能失效后会发生什么”,而不是“这个电阻会不会烧”。

3.2 运行场景定义:别让车在真空中跑

很多工程师容易犯一个错:只考虑“正常驾驶”。但真实世界哪有那么理想?

运行场景至少要考虑三个维度:

  • 环境条件:白天/黑夜、雨雪/晴天、隧道/开阔地。
  • 车辆状态:静止、低速、高速、倒车、充电。
  • 通信场景:CAN总线正常、CAN总线过载、以太网断开、无线信号丢失。

我记得有个项目,网关在地下车库场景下出现了CAN报文延迟。测试团队一开始没把这个场景写进HARA,结果ASIL等级定低了。后来补测,发现延迟会导致刹车信号晚到200ms——这在高速上就是十几米的制动距离。

我的建议:运行场景清单至少列20个以上。别怕多,后面可以合并。漏一个,可能就要改架构。

3.3 危害事件识别:从故障到事故

危害事件 = 故障 + 运行场景 + 危害后果。

举个例子:

  • 故障:网关转发CAN报文时,数据位翻转。
  • 场景:车辆在高速上以120km/h巡航。
  • 后果:发动机控制器收到错误的扭矩请求,突然加速,导致追尾。

这个链条必须完整。我曾经见过有人只写“网关故障导致车辆失控”——太笼统了,没法定级。

识别危害事件时,我习惯用“如果…那么…”句式来推演:

  • 如果网关丢了一条关键CAN报文,那么制动系统会不会无响应?
  • 如果网关转发延迟超过100ms,那么转向指令会不会滞后?
  • 如果网关被恶意报文攻击,那么车辆会不会进入错误模式?

注意:不要只分析单一故障。组合故障(比如CAN总线断线 + 网关看门狗失效)也要考虑。ISO 26262要求覆盖合理可预见的误用。

3.4 ASIL等级确定:三个参数的博弈

ASIL等级由三个参数决定:

参数 全称 等级范围 说明
S Severity(严重度) S0 ~ S3 对人员伤害的严重程度
E Exposure(暴露概率) E0 ~ E4 场景发生的概率
C Controllability(可控性) C0 ~ C3 驾驶员能否避免事故

最终ASIL等级 = f(S, E, C)。查表即可:

S E C ASIL
S1 E1 C1 QM
S2 E3 C2 ASIL B
S3 E4 C3 ASIL D
S3 E2 C1 ASIL A

这里有个坑:C(可控性)很容易被低估。我见过一个案例,网关丢了一条车窗控制报文,工程师觉得“车窗关不上而已,没什么危险”,给了C1。但后来发现,如果车窗在高速上突然打开,风噪会干扰驾驶员,导致分心——实际可控性应该至少C2。

避坑指南:我曾经把一个网关的ASIL等级定成QM,因为我觉得“丢一条报文不会死人”。后来安全评审时,专家问了一句:“如果丢的是制动灯信号呢?”我当场就愣住了。从那以后,我定级时都会问自己:最坏情况下,这个故障会导致什么?

3.5 HARA输出:安全目标

HARA的最终产物不是一张表,而是安全目标(Safety Goal)。每个危害事件都要对应一个安全目标。

举个例子:

  • 危害事件:网关转发CAN报文延迟导致制动指令滞后。
  • ASIL等级:ASIL D。
  • 安全目标:网关必须在10ms内转发制动相关CAN报文,否则进入安全状态。

安全目标要满足三个条件:

  • 可验证 – 能不能通过测试证明?
  • 可分配 – 能不能落实到具体模块?
  • 无歧义 – 团队每个人理解一致。

我的习惯:安全目标写完后,我会让测试工程师和系统工程师各读一遍。如果他们理解不一样,说明目标写得不够清楚。

3.6 HARA流程全景图

下面这张图是我自己总结的HARA流程,每次做新项目都会贴到墙上:

HARA流程全景图 HARA流程全景图 功能定义 运行场景定义 危害事件识别 ASIL等级确定 安全目标 说明: 每个危害事件对应一个安全目标。ASIL等级决定了后续开发流程的严格程度。

3.7 常见误区与避坑

做HARA这么多年,我踩过不少坑。挑几个典型的说说:

  • 误区一:ASIL等级越高越好。 不是的。ASIL D意味着开发成本翻倍。合理定级,够用就好。
  • 误区二:只分析网关本身。 网关是通信枢纽,它的故障会影响其他ECU。分析时要考虑上下游。
  • 误区三:忽略时间因素。 网关的延迟、丢包、重传,这些时间特性直接影响危害严重度。

警告:HARA文档不是写一次就完事的。项目过程中,如果功能变更、场景新增、架构调整,HARA必须重新评审。我见过一个项目,HARA写完就锁进柜子,结果功能改了三次,安全目标还是原来的——最后审核没过,全部重来。

好了,HARA这部分就聊到这儿。记住一句话:HARA不是负担,是保护伞。 做扎实了,后面开发、测试、集成都会顺很多。