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无法检测到真实温度,可能引发热失控。

  1. 安全目标(SG-03):BMS应避免因温度传感器失效导致的热失控风险。(ASIL C)
  2. 功能安全需求:
    • FSR-03-01:BMS应能检测温度传感器开路、短路、漂移故障。
    • FSR-03-02:BMS应在检测到故障后,在200ms内停止充电。
    • FSR-03-03:BMS应通过冗余温度传感器(如NTC+PT100)进行交叉校验。
  3. 安全机制分配:
    • 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),看看怎么把今天这些「功能需求」变成「技术方案」。到时候,我会拿具体的电路图和代码来讲解,敬请期待。