4、功能安全概念(FSC):安全目标定义、功能安全需求导出、安全机制分配
好,我们进入功能安全概念阶段。说实话,这是整个BMS功能安全开发中最「烧脑」的环节之一。为什么?因为你要把上一阶段做的HARA分析结果,真正落地成可执行的安全目标和需求。
我个人习惯把FSC比作「搭骨架」。你想想看,HARA只是告诉你「这里可能会骨折」,而FSC就是告诉你「怎么打石膏、用什么材料、固定多久」。没有这个骨架,后面的技术安全概念和软硬件实现,全是空中楼阁。
4.1 安全目标定义:从ASIL等级到具体约束
安全目标(Safety Goal, SG)是什么?说白了,就是一句话:「系统必须避免XX危害事件发生」。它直接继承自HARA中每个危害事件的最高ASIL等级。
举个例子,我在项目中遇到过这样一个场景:
危害事件:车辆行驶中,BMS误判电池过温,触发紧急切断,导致动力中断。
安全目标(SG-01):BMS应避免因温度误判导致非预期的动力中断。
ASIL等级:ASIL C
安全状态:维持当前动力输出,或降功率运行(不允许直接切断)。
容错时间间隔(FTTI):≤ 100ms
这里有几个关键点,我特别想强调:
- 安全目标必须「可验证」。你不能写「BMS要安全」,这没法测。要写「BMS在温度传感器故障时,应能在100ms内检测到故障并进入降功率模式」。
- 一个危害事件对应一个安全目标。别想着合并,合并了后面需求导出会乱套。
- 安全状态要明确。是切断?降功率?还是维持?我见过一个项目,安全目标写的是「进入安全状态」,结果大家吵了三天「到底什么是安全状态」。
我的小技巧:写安全目标时,用「主语 + 应避免/应确保 + 具体危害 + 在XX条件下」的句式。比如:「BMS应避免在SOC低于10%时,因单体电压采样失效导致过放保护失效。」这样写,后面做测试用例时,你直接照着读就行。
4.2 功能安全需求导出:从SG到FSR的「翻译」过程
安全目标定好了,接下来就是导出功能安全需求(Functional Safety Requirement, FSR)。这一步,我个人觉得是最容易出问题的。
为什么?因为FSR是「承上启下」的。它既要覆盖安全目标,又要能被技术安全概念(TSC)实现。很多工程师在这里犯的错误是:把FSR写成了技术方案。
比如,你看到SG-01是「避免非预期动力中断」,然后你直接写:
❌ 错误写法:「FSR-01:主正继电器应在100ms内断开。」
这已经是技术安全需求了,不是功能安全需求。功能安全需求应该关注「功能」层面,而不是「怎么实现」。
✅ 正确写法:「FSR-01:BMS应具备检测温度传感器故障的能力,并在故障发生时,在100ms内请求VCU执行降功率策略。」
看到了吗?FSR只告诉你「要检测故障、要请求降功率」,至于用什么传感器、怎么通信、VCU怎么响应,那是后面TSC的事。
我一般用表格来管理FSR,结构如下:
| FSR ID | 关联SG | 需求描述 | ASIL | 安全状态 | FTTI |
|---|---|---|---|---|---|
| FSR-01 | SG-01 | BMS应能检测温度传感器开路/短路故障 | ASIL C | 降功率模式 | ≤100ms |
| FSR-02 | SG-01 | BMS应在检测到故障后,通过CAN向VCU发送降功率请求 | ASIL C | 降功率模式 | ≤100ms |
| FSR-03 | SG-02 | BMS应避免在充电过程中因电流采样失效导致过充 | ASIL B | 停止充电 | ≤500ms |
⚠️ 避坑指南:我曾经在一个项目中,把FSR写得太细,直接指定了「使用NTC电阻、10kΩ上拉、ADC采样」。结果后面换供应商时,NTC型号变了,所有需求都得改。记住:FSR只关心「做什么」,不关心「怎么做」。
4.3 安全机制分配:把需求「分」给谁来做?
安全机制分配,说白了就是回答一个问题:「这个安全功能,谁来执行?」
在BMS中,安全机制可以分配给:
- 系统自身(比如BMS主芯片的看门狗)
- 外部组件(比如VCU、BCM、继电器)
- 人为操作(比如维修保养时的安全操作)
我习惯用「安全机制分配矩阵」来做这件事。举个例子:
| FSR ID | 安全机制 | 分配对象 | 说明 |
|---|---|---|---|
| FSR-01 | 温度传感器故障诊断(开路/短路检测) | BMS主控模块 | 通过硬件诊断电路实现 |
| FSR-02 | 降功率请求发送 | BMS通信模块 | 通过CAN总线发送,需冗余校验 |
| FSR-03 | 过充保护 | BMS主控模块 + 充电机 | BMS检测到过充风险后,通过CAN通知充电机停止充电 |
这里有个关键点:如果安全机制分配给了外部组件(比如VCU),你必须在接口需求中明确对方的责任。否则,后面做集成测试时,你会发现「BMS发了降功率请求,但VCU没响应」,然后两边互相甩锅。
我的经验:在分配安全机制时,尽量优先分配给「自己管得着」的模块。比如,BMS自己能做的故障诊断,就别依赖VCU。依赖越多,接口越复杂,出问题的概率越大。你想想看,一个CAN报文丢了,可能整个安全链就断了。
4.4 一个完整的FSC示例(以过温保护为例)
为了让你更清楚,我拿一个实际案例串一遍:
场景:电池包在快充过程中,温度传感器失效,导致BMS无法检测到真实温度,可能引发热失控。
- 安全目标(SG-03):BMS应避免因温度传感器失效导致的热失控风险。(ASIL C)
- 功能安全需求:
- FSR-03-01:BMS应能检测温度传感器开路、短路、漂移故障。
- FSR-03-02:BMS应在检测到故障后,在200ms内停止充电。
- FSR-03-03:BMS应通过冗余温度传感器(如NTC+PT100)进行交叉校验。
- 安全机制分配:
- FSR-03-01 → BMS模拟前端(AFE)模块,通过硬件诊断电路实现。
- FSR-03-02 → BMS主控模块,通过控制充电继电器断开实现。
- FSR-03-03 → BMS主控模块,通过软件算法比较两个传感器读数实现。
注意:这里FSR-03-03的「交叉校验」是一个典型的「冗余+多样性」安全机制。两个不同类型的传感器,同时失效的概率极低。这是ISO 26262中推荐的「独立失效」设计思路。
4.5 常见问题与避坑
最后,我总结几个我在项目中踩过的坑:
- 坑1:安全目标写得太模糊。比如「BMS应确保安全」,这等于没写。一定要量化:什么故障?多长时间内?进入什么状态?
- 坑2:FSR和技术需求混在一起。我见过一个需求文档,FSR里直接写了「使用SPI通信,波特率1MHz」。这应该是TSC的内容,写在FSC里只会让后面的人困惑。
- 坑3:安全机制分配不考虑独立性。比如,你把故障检测和故障响应都分配给同一个MCU,那如果MCU本身挂了,整个安全链就断了。要适当引入「独立后备」机制。
- 坑4:忘了定义「安全状态」的退出条件。比如,你让BMS进入降功率模式,那什么时候可以恢复?是故障消失后立即恢复?还是需要钥匙重启?这个不写清楚,测试时根本没法测。
嗯,FSC这部分内容确实比较「虚」,但它是整个功能安全开发的「宪法」。后面所有的设计、实现、测试,都要以FSC为准。所以,花时间把FSC做扎实,绝对值得。
下一章,我们会进入技术安全概念(TSC),看看怎么把今天这些「功能需求」变成「技术方案」。到时候,我会拿具体的电路图和代码来讲解,敬请期待。