3、功能安全概念(FSC):功能安全需求导出、安全机制分配、故障容错时间间隔
好,咱们进入功能安全概念(FSC)这个环节。说实话,FSC 是整个安全生命周期里最考验系统理解能力的一步。你前面做的 HARA 和 ASIL 等级,说白了就是告诉你「哪里会出问题、问题有多严重」。而 FSC 要回答的是——「我们怎么解决它」。
我个人习惯把 FSC 看作一座桥。桥的一头是危害分析和风险评估,另一头是技术安全需求。你要把那些抽象的「危险事件」翻译成具体的、可执行的「安全需求」。嗯,这里有个坑,我后面会讲。
3.1 功能安全需求导出
功能安全需求(Functional Safety Requirement,FSR)是从安全目标(Safety Goal)直接推导出来的。每个安全目标至少对应一个 FSR。怎么导?说白了就是问自己一个问题:
「为了实现这个安全目标,系统必须具备什么能力?」
举个例子。假设你的安全目标是:
安全目标:防止车辆在行驶中非预期加速(ASIL D)
那么对应的 FSR 可能包括:
- FSR-001:当检测到油门踏板信号异常时,系统应在 100ms 内进入跛行模式(ASIL D)
- FSR-002:加速请求必须通过双通道冗余校验,单点故障不得导致非预期加速(ASIL D)
- FSR-003:系统应具备自诊断功能,每 10ms 至少执行一次传感器合理性检查(ASIL D)
你看,每个 FSR 都包含三个要素:触发条件、系统响应、时间约束。缺一不可。
我在项目中遇到过一种情况——需求工程师写 FSR 时只写了「系统应检测故障」,没写时间要求。结果到了集成测试阶段,发现故障检测花了 500ms,而安全目标要求 100ms。嗯,那叫一个惨。所以我的建议是:写 FSR 时就把时间写死,别留模糊空间。
个人技巧:我习惯用「IF-THEN-WITHIN」模板来写 FSR。比如:IF(故障发生)THEN(系统执行某动作)WITHIN(XX 毫秒)。这样写出来的需求,测试工程师一看就知道怎么测。
3.2 安全机制分配
有了 FSR,下一步就是把这些需求分配到具体的系统元素上。这个过程叫安全机制分配。你想想看,一个安全目标可能涉及传感器、控制器、执行器,甚至通信链路。你不能把所有责任都丢给一个模块,对吧?
安全机制分配的核心原则是:独立性。什么意思?就是安全机制不能和它要保护的功能共用同一个故障点。否则,那个点一坏,功能和安全机制一起完蛋。
常见的分配策略有几种:
- 同构冗余:两个相同的通道,互相校验。比如双 MCU 架构。
- 异构冗余:用不同的实现方式做同一件事。比如一个用硬件比较器,一个用软件算法。
- 多样性:不同的技术原理。比如霍尔传感器和磁阻传感器同时监测位置。
- 监控机制:一个模块干活,另一个模块盯着它。比如看门狗、锁步核。
我记得有一次做 EPS(电动助力转向)项目,安全目标是「防止非预期转向」。我们最初把故障检测和故障响应都放在同一个 MCU 里。评审时功能安全专家直接拍桌子了——「你 MCU 自己坏了,谁来检测?谁来响应?」后来我们加了一个独立的硬件监控芯片,专门负责检测 MCU 的健康状态。这就是独立性的典型应用。
避坑指南:我曾经犯过一个错误——把安全机制分配得太分散。每个模块都承担一点安全责任,结果接口定义混乱,集成时发现信号对不上。后来我学乖了:分配安全机制时,一定要画一张「安全机制分配矩阵图」,横轴是系统元素,纵轴是安全机制,交叉点打勾表示归属。这样一目了然。
3.3 故障容错时间间隔
故障容错时间间隔(Fault Tolerant Time Interval,FTTI)这个概念,说实话,很多人理解得不够深。它指的是:从故障发生到系统进入安全状态之间,系统必须保持功能正常的时间窗口。
为什么要有 FTTI?因为任何安全机制都需要时间。检测故障需要时间,诊断确认需要时间,执行降级动作也需要时间。FTTI 就是给这些动作划了一条红线——你必须在这个时间内完成所有事情。
FTTI 的典型分解如下:
| 阶段 | 描述 | 典型时间 |
|---|---|---|
| 故障潜伏期 | 故障发生到被检测到 | 10-50ms |
| 诊断时间 | 确认故障并判定严重程度 | 5-20ms |
| 响应时间 | 执行安全动作(如降级、关断) | 10-30ms |
| 安全状态建立 | 系统进入安全状态 | 5-10ms |
你看,加起来差不多 30-110ms。如果你的安全目标要求 FTTI 为 100ms,那你的安全机制设计就必须在这个窗口内完成所有动作。超了,就是违反安全目标。
我个人的经验是:FTTI 的分配一定要留余量。别卡着 100ms 设计,留个 20% 的余量比较稳妥。为什么?因为实际硬件有延迟、软件有抖动、温度会影响响应速度。你想想看,-40°C 和 125°C 下,同一个 MOSFET 的关断时间能差一倍。不留余量,测试时大概率会翻车。
关键点:FTTI 不是孤立存在的。它和诊断覆盖率(DC)、安全机制的反应时间、系统的故障响应策略都强相关。设计时一定要通盘考虑,不能只看一个指标。
3.4 一个完整的 FSC 示例
咱们拿一个简单的例子串一下。假设你做一个电池管理系统(BMS),安全目标是:
安全目标:防止电池过充导致热失控(ASIL C)
对应的 FSR 可能是:
- FSR-001:当单体电压超过 4.25V 时,系统应在 200ms 内切断充电回路(ASIL C)
- FSR-002:电压采样电路应具备自检功能,每 100ms 执行一次(ASIL C)
- FSR-003:充电接触器控制信号应采用双通道冗余(ASIL C)
安全机制分配:
- 电压检测:主控 MCU 的 ADC + 独立硬件比较器(异构冗余)
- 故障响应:主控控制主接触器 + 硬件看门狗强制关断(多样性)
- 自检:MCU 内部自检 + 外部监控芯片(独立性)
FTTI 分解:
- 故障潜伏期:50ms(ADC 采样周期)
- 诊断时间:20ms(软件滤波 + 确认)
- 响应时间:80ms(接触器动作 + 硬件关断)
- 安全状态建立:30ms(电容放电、系统稳定)
- 合计:180ms,小于 200ms,OK
你看,这样一整套下来,FSC 就完整了。每个环节都有依据,每个时间都有出处。测试时照着这个设计去验证,心里就有底了。
最后说一句:FSC 文档写完后,我建议你找另一个工程师做一次「同行评审」。不是走形式,是真的让他一条一条地读你的 FSR,然后问「为什么这么写?」。很多时候,自己写的东西自己看不出漏洞,别人一眼就能发现。我吃过这个亏,所以现在特别重视评审环节。