2. 功能安全标准体系
HARA,全称 Hazard Analysis and Risk Assessment。说白了,它就是功能安全开发的“第一道安检门”。
我经常跟团队里的年轻人讲:没有HARA,后面的所有安全活动都是盲人摸象。你连车跑多快、撞多狠、人伤多重都没搞清楚,怎么定安全目标?怎么设计安全机制?
2.1 HARA的目的与流程
HARA的核心目的就三个:
- 找出危害——系统在什么情况下会出危险?
- 评估风险——这个危险到底有多严重?发生的概率有多大?
- 定出等级——给每个危害分配一个ASIL等级,作为后续设计的“硬指标”。
整个流程我习惯分成五步走:
- 功能定义:搞清楚系统到底要干什么。比如“电子助力转向系统”的功能就是“根据方向盘转角输出助力扭矩”。
- 危害识别:功能失效了会怎样?比如“助力扭矩突然丢失”或“输出反向助力”。
- 场景分析:这个失效在什么场景下最危险?高速变道?还是低速泊车?
- 三要素评级:对每个危害场景,分别评出严重度(S)、暴露率(E)、可控性(C)。
- ASIL等级确定:查表,S、E、C三个值一组合,ASIL等级就出来了。
关键提醒:HARA不是一次性工作。系统设计变了、使用场景变了、法规更新了,HARA都要跟着迭代。我见过不少项目,HARA做完就扔一边,结果后期测试发现安全目标根本覆盖不住新场景——那叫一个惨。
下面这张图是我自己总结的HARA核心流程,你一看就明白:
2.2 危害识别
危害识别,就是回答一个问题:“这个功能如果失效了,最坏能坏到什么程度?”
举个例子。你做一个“自动紧急制动(AEB)”系统。正常功能是检测到障碍物后自动刹车。那失效模式有哪些?
- 误触发:没障碍物时突然急刹——后车追尾风险。
- 不触发:有障碍物时没反应——直接撞上去。
- 部分失效:刹车力度不够——减速不足,还是撞。
我的经验:做危害识别时,别只盯着“完全失效”。部分失效、间歇性失效、多故障叠加往往才是真正的杀手。我曾经在一个线控制动项目中,发现“单轮制动压力异常”这个危害被团队忽略了——结果在冰雪路面上,单轮抱死比四轮全失更危险。
2.3 场景分析
同一个失效,在不同场景下风险天差地别。你想想看:
- “转向助力丢失”在高速公路上以120km/h过弯——严重度极高。
- “转向助力丢失”在停车场以5km/h挪车——基本没风险。
所以,场景分析要覆盖:
- 驾驶场景:高速、城市、乡村、停车场、隧道、桥梁……
- 环境条件:白天/黑夜、晴天/雨雪/大雾、干燥/湿滑路面。
- 车辆状态:直行、转弯、变道、加速、减速、静止。
- 人员状态:驾驶员是否疲劳?是否分心?是否有经验?
注意:场景分析不是越多越好。每个场景都要有工程合理性。我曾经见过有人把“车辆在火星表面行驶”写进场景——这就不太合适了。场景要基于实际使用条件和合理可预见的误使用。
2.4 严重度(S)、暴露率(E)、可控性(C)评级
这是HARA最核心、也最容易出争议的部分。ISO 26262给出了明确的等级定义,但实际落地时,每个公司都有自己的“内部标尺”。
严重度(S)——伤有多重?
| 等级 | 描述 | 典型场景 |
|---|---|---|
| S0 | 无伤害 | 轻微刮擦,无人受伤 |
| S1 | 轻伤(可治疗) | 低速追尾,颈部轻微扭伤 |
| S2 | 重伤(需住院) | 50km/h碰撞,骨折 |
| S3 | 致命伤 | 高速正面碰撞,死亡 |
暴露率(E)——发生的频率有多高?
| 等级 | 描述 | 典型场景 |
|---|---|---|
| E0 | 几乎不暴露 | 车辆在火星表面行驶 |
| E1 | 非常低(<1% 驾驶时间) | 车辆在结冰路面上行驶 |
| E2 | 低(1%~10% 驾驶时间) | 车辆在夜间行驶 |
| E3 | 中等(10%~50% 驾驶时间) | 车辆在城市道路行驶 |
| E4 | 高(>50% 驾驶时间) | 车辆在干燥路面上行驶 |
可控性(C)——人能控制住吗?
| 等级 | 描述 | 典型场景 |
|---|---|---|
| C0 | 完全可控 | 空调失效,驾驶员无感 |
| C1 | 简单可控 | 转向助力轻微波动,驾驶员可补偿 |
| C2 | 一般可控 | 制动助力部分失效,驾驶员需用力踩 |
| C3 | 难以控制 | 高速爆胎,驾驶员很难稳住方向 |
避坑指南:我曾经在一个项目中,团队把“可控性”评得太乐观。比如“制动完全失效”场景,有人觉得“驾驶员可以拉手刹啊,C1吧”。但实际测试发现,在高速上制动完全失效,驾驶员从惊慌到反应再到正确操作,平均需要3-5秒——这期间车已经冲出几百米了。最后我们改成了C3。记住:可控性不是“理论上能不能”,而是“普通人能不能”。
2.5 ASIL等级确定
有了S、E、C三个值,查ISO 26262-3:2018 Table B.1,就能得到ASIL等级。我直接给你看这个表:
| S | E | C1 | C2 | C3 |
|---|---|---|---|---|
| S1 | E1 | QM | QM | QM |
| E2 | QM | QM | ASIL A | |
| E3 | QM | ASIL A | ASIL B | |
| S2 | E1 | QM | QM | ASIL A |
| E2 | QM | ASIL A | ASIL B | |
| E3 | ASIL A | ASIL B | ASIL C | |
| S3 | E1 | QM | ASIL A | ASIL B |
| E2 | ASIL A | ASIL B | ASIL C | |
| E3 | ASIL B | ASIL C | ASIL D |
举个例子:
- 场景:车辆在高速公路上以120km/h行驶(E3),突然转向助力完全丢失(S3,因为可能失控撞车),普通驾驶员很难控制(C3)。查表:S3+E3+C3 = ASIL D。
- 场景:车辆在停车场以5km/h挪车(E2),转向助力丢失(S1,因为速度低,最多刮擦),驾驶员很容易控制(C1)。查表:S1+E2+C1 = QM(仅需质量管理,无需功能安全措施)。
我的习惯:每次定完ASIL等级,我都会问自己一个问题:“如果这个危害真的发生了,我敢不敢让我的家人坐在那辆车上?”如果答案是“不敢”,那这个等级可能评低了。安全不是算出来的,是设计出来的。