4、功能安全概念:功能安全需求导出、系统架构设计、安全机制定义
好,我们进入功能安全概念阶段。说白了,这一步就是把上一章做的HARA分析结果,真正落地成可执行的技术方案。我个人习惯把这一步叫做“从纸上谈兵到真刀真枪”的转折点。你想想看,HARA分析告诉你哪里会出问题,但怎么解决?谁来负责?用什么手段?这些就是功能安全概念要回答的。
4.1 功能安全需求导出
功能安全需求,不是拍脑袋想出来的。它必须从安全目标和安全状态推导出来。我见过不少新手,上来就写“系统要冗余”,这其实不对。正确的做法是:先看安全目标是什么,再看怎么实现。
举个例子,安全目标是“车辆在制动主回路失效时,必须在500ms内进入安全状态”。那么功能安全需求就应该是:“制动系统应具备独立于主回路的备份制动路径,且该路径的响应时间不超过500ms”。你看,这样写才可验证、可测试。
导出功能安全需求的几个关键原则:
- 可验证性:每条需求必须能通过测试或分析来确认。我曾经在一个项目里看到“系统应足够可靠”这种需求,结果评审时被怼得哑口无言——什么叫“足够”?没法测。
- 无歧义性:避免“可能”、“大概”、“必要时”这类模糊词。用具体数值、时间、条件来描述。
- 可追溯性:每条功能安全需求必须能追溯到对应的安全目标。我习惯在需求编号里直接带上安全目标ID,比如FSR_01_SG03,这样一看就知道是来自安全目标3。
- 独立性:安全机制不能依赖它要保护的功能本身。嗯,这里要注意,如果你用同一个软件模块既做控制又做监控,那这个监控基本等于没有。
避坑指南:我曾经在一个线控制动项目中,把功能安全需求写得过于笼统,结果开发团队理解偏差,做出来的东西根本达不到ASIL D要求。后来我学乖了,每条需求都配上明确的验收标准,比如“通过故障注入测试,在100次试验中,安全机制必须100%触发”。
4.2 系统架构设计
架构设计,说白了就是决定“谁来做什么”。在功能安全领域,架构设计有两个核心任务:一是分配功能到组件,二是确保组件之间有足够的独立性。
我常用的架构设计思路:
- 分层架构:把系统分成功能层、安全层、诊断层。功能层负责正常制动,安全层负责故障时的降级操作,诊断层负责监控和报告。这样各司其职,互不干扰。
- 冗余设计:对于ASIL D的系统,我几乎必用双通道架构。一个通道失效,另一个通道还能接管。但注意,冗余不是简单的复制粘贴——两个通道最好用不同的实现方式,避免共因失效。
- 故障响应路径:架构里必须明确画出故障从发生到被检测、再到触发安全状态的完整路径。我习惯用一张图把这条路径标出来,评审时大家一目了然。
举个例子,一个典型的制动系统功能安全架构可能包含:
- 主控制器(负责正常制动)
- 监控控制器(独立监控主控制器的输出,发现异常立即接管)
- 执行器(比如电磁阀,具备故障安全位置)
- 诊断模块(定期自检,上报故障码)
个人经验:我在设计架构时,会特意留出“故障注入接口”。这不是为了测试方便,而是为了在实车验证时能模拟各种故障场景。你想想看,如果没有这个接口,你怎么证明你的安全机制真的有效?
4.3 安全机制定义
安全机制,就是具体的技术手段。它负责检测故障、控制故障、或者容忍故障。我把它分成三类:
| 类型 | 作用 | 例子 |
|---|---|---|
| 检测机制 | 发现故障 | 看门狗、CRC校验、信号合理性检查 |
| 控制机制 | 限制故障影响 | 降级模式、故障隔离、冗余切换 |
| 容错机制 | 允许故障存在但系统仍工作 | 三模冗余、纠错码 |
定义安全机制时,我建议按以下步骤:
- 识别需要覆盖的故障:从HARA分析中找出每个安全目标对应的故障模式。
- 选择合适的安全机制:不是所有故障都需要最高等级的机制。比如,对于偶发的通信错误,CRC校验就够了;但对于可能导致制动失效的硬件故障,你可能需要双通道冗余。
- 定义安全机制的属性:包括检测时间、响应时间、覆盖率、误报率等。这些属性必须量化,否则没法验证。
- 分配安全机制到组件:明确哪个组件负责执行哪个安全机制。我习惯用一张矩阵表来管理,行是故障模式,列是安全机制,交叉点打勾表示覆盖。
注意:安全机制本身也可能失效!这就是所谓的“安全机制的共因失效”。我曾经在一个项目中,两个通道用了同一个供应商的同一批次芯片,结果一个电源浪涌把两个通道都打坏了。从那以后,我坚持要求不同通道使用不同供应商或不同设计方案的组件。
最后,我想强调一点:功能安全概念不是一次性的工作。随着设计的深入,你会发现新的问题,或者原来的假设不成立。这时候就要回头更新功能安全概念。我一般会在每个设计里程碑做一次评审,确保概念始终有效。
好了,这一章的内容就到这里。下一章我们会讲如何把这些概念落实到具体的硬件和软件设计中。到时候再聊。