4. 安全目标与安全状态:从危害到设计的桥梁

各位好,欢迎来到第四章。前面我们聊了危害分析与风险评估(HARA),搞清楚了系统在什么场景下会出危险。但光知道危险还不够,我们得把它转化成工程团队能执行的设计输入。这个转化的关键,就是安全目标和安全状态。

我个人习惯把这一章叫做“从危害到设计的桥梁”。你想想看,HARA 的输出是一堆 ASIL 等级和危害事件,但硬件工程师、软件工程师拿到这些,怎么开始干活?他们需要一个明确的、可量化的设计目标。安全目标就是这个目标,安全状态就是系统出问题后该往哪跑。

核心逻辑链:

危害事件 → 安全目标(顶层安全要求) → 安全状态(期望的系统行为) → 安全机制(具体实现) → FTTI(时间约束)

安全目标与安全状态知识体系 安全目标与安全状态知识体系 危害事件(HARA 输出) 安全目标(ASIL + 功能描述) 安全状态定义 安全机制设计 FTTI 时间约束 安全状态类型 (降级/关闭/跛行) 安全机制分类 (检测/响应/冗余) FTTI 组成 (检测+响应+容错) FTTI 分配 (系统级→组件级) 安全目标是“做什么”,安全状态是“变成什么样” 安全机制是“怎么做”,FTTI 是“多快做到”

4.1 安全目标的定义与导出

安全目标(Safety Goal, SG)是干什么的?说白了,它就是针对每个危害事件,定义一条顶层的安全要求。ISO 26262 第 3 部分明确要求:每个危害事件都要对应至少一个安全目标。

我见过不少新手工程师,上来就写“系统不能失效”。这种目标太笼统了,没法验证。安全目标必须满足三个条件:具体、可验证、有时间约束。

举个例子。假设我们做电动助力转向(EPS)系统,HARA 分析发现一个危害事件:“车辆高速行驶时,转向系统非预期输出大角度转向力矩,导致车辆偏离车道”。对应的安全目标怎么写?

安全目标示例(EPS 系统):

SG-01:在车辆速度 > 30 km/h 时,转向系统不得输出超过 ±5 Nm 的非预期转向力矩,ASIL D,FTTI ≤ 100 ms。

你看,这个目标包含了:

  • 条件:车速 > 30 km/h
  • 行为:非预期转向力矩 ≤ ±5 Nm
  • ASIL 等级:D(最高等级)
  • 时间约束:FTTI ≤ 100 ms

安全目标的导出过程,我建议遵循以下步骤:

  1. 从 HARA 表格中提取每个危害事件
  2. 定义“不发生什么”——即系统必须避免的危险行为
  3. 量化阈值——比如力矩、电压、温度的具体数值
  4. 分配 ASIL——继承自对应的危害事件
  5. 定义 FTTI——从危害发生到系统进入安全状态的最大允许时间

我的经验:安全目标不要写太多。一个中等复杂的 ECU,安全目标通常在 5~15 个之间。写多了,后面安全机制的验证工作量会爆炸。我曾经在一个项目中看到 40 多个安全目标,最后有一半是重复的,白白浪费了评审时间。

4.2 安全状态设计

安全状态(Safe State)是什么?就是系统在检测到故障后,要进入的一个不会导致危害事件发生的系统状态。

安全状态不是只有一个。我个人习惯把安全状态分为三类:

安全状态类型 描述 典型场景
完全关闭 系统停止所有功能,进入休眠或断电 安全气囊控制器检测到传感器故障
降级模式 系统部分功能受限,但维持基本安全操作 制动系统 ESP 故障,保留基础制动
跛行回家 系统以受限能力运行,允许车辆开到维修点 电机控制器过温,限制输出功率

设计安全状态时,有几个关键点要注意:

  • 安全状态必须可验证——你能通过测试确认系统确实进入了该状态
  • 安全状态必须可退出——通常需要钥匙电循环或故障消除后才能退出
  • 安全状态本身不能引入新危害——比如突然断电可能导致转向锁死,那就不是安全状态

我曾经踩过的坑:在一个线控制动项目中,我们设计的安全状态是“切断制动助力”。结果发现,切断助力后驾驶员需要踩 3 倍的力才能制动,在紧急情况下根本刹不住。这就是安全状态本身引入了新危害。后来我们改成“保留基础助力,但限制助力幅度”。

4.3 安全机制概念

安全机制(Safety Mechanism)是实现安全目标、达到安全状态的具体技术手段。ISO 26262 第 5 部分和第 6 部分对安全机制有详细要求。

安全机制可以按功能分为三类:

  1. 故障检测机制——发现故障的存在
    • 例如:CRC 校验、看门狗、自检程序、信号合理性检查
  2. 故障响应机制——在检测到故障后采取行动
    • 例如:切换到冗余通道、触发安全状态、记录故障码
  3. 故障避免机制——从设计上防止故障发生
    • 例如:物理隔离、冗余设计、降额设计

你想想看,一个安全目标通常需要多个安全机制共同实现。比如前面 EPS 的例子:

  • 安全目标:非预期转向力矩 ≤ ±5 Nm
  • 安全机制 1:扭矩传感器信号合理性检查(检测)
  • 安全机制 2:双通道扭矩计算对比(检测)
  • 安全机制 3:检测到不一致时,切断助力电机供电(响应)
  • 安全机制 4:进入降级模式,保留基础机械转向(安全状态)

关键原则:安全机制本身也可能失效!所以对于 ASIL C/D 的系统,安全机制通常需要具备“诊断覆盖率”和“安全机制自身的独立性”。说白了,你不能用一个可能坏掉的东西去保护另一个东西。

4.4 容错时间间隔(FTTI)

FTTI(Fault Tolerant Time Interval)是 ISO 26262 里一个非常重要的时间参数。它的定义是:从故障发生到可能引发危害事件之间的最大时间间隔。

换句话说,FTTI 就是你的“救命时间”。系统必须在这个时间内完成故障检测、故障响应、进入安全状态这一整套动作。

FTTI 的组成可以分解为:

阶段 描述 典型时间占比
故障潜伏时间 故障发生到被检测到的时间 30%~50%
故障响应时间 检测到故障后,执行安全机制的时间 20%~30%
安全状态建立时间 系统从故障响应到完全进入安全状态的时间 20%~30%

FTTI 怎么确定?我建议从两个方向入手:

  • 自上而下:从危害事件分析,确定系统级 FTTI。比如制动系统,从制动失效到车辆失控可能只有 200 ms,那 FTTI 就不能超过 200 ms。
  • 自下而上:从组件的响应时间出发,累加得到系统级 FTTI,然后看是否满足要求。

我的习惯:在项目初期,我会先定一个“保守的 FTTI”。比如系统分析下来 FTTI 需要 100 ms,我可能会先按 80 ms 去设计安全机制。为什么?因为后面集成测试时,各种延迟叠加,实际 FTTI 往往会比理论值大。留点余量,心里踏实。

FTTI 的分配是一个系统工程。举个例子,一个 EPS 系统的 FTTI 分配:

系统级 FTTI(安全目标要求):100 ms
├── 故障检测时间(扭矩传感器自检):30 ms
├── 故障确认时间(软件滤波 + 一致性检查):20 ms
├── 故障响应时间(切断助力继电器):15 ms
├── 安全状态建立时间(电机放电 + 状态确认):25 ms
└── 设计余量:10 ms

注意:FTTI 不是越短越好。过短的 FTTI 会导致系统频繁进入安全状态,影响可用性。比如一个传感器偶尔出现毛刺,如果 FTTI 太短,系统可能还没确认故障就切断了功能,造成不必要的降级。所以 FTTI 的设计要在安全性和可用性之间找平衡。