4. 安全目标定义:ASIL等级确定、安全状态定义、安全机制设计

好,我们进入正题。前面做了那么多危害分析和风险评估,说白了,就是为了得到一张清晰的「安全目标清单」。这张清单,就是我们后续所有安全工作的总纲。

我个人习惯把这一步叫做「从危害到目标的翻译」。你想想看,一个危害事件,比如「飞机在起飞阶段突然掉高」,它只是一个现象。而安全目标,则是要明确地说:「系统必须保证在起飞阶段,垂直速度不低于某个阈值」。这中间,需要我们把ASIL等级、安全状态、安全机制这三件事,一次性定清楚。

4.1 ASIL等级确定:不是拍脑袋,是算出来的

ASIL,全称是Automotive Safety Integrity Level。在飞控领域,我们其实更习惯用DAL(Design Assurance Level),但ASIL的思维框架完全适用。它由三个参数决定:严重度(S)暴露概率(E)可控性(C)

公式很简单:ASIL = f(S, E, C)。但实际赋值的时候,坑特别多。

⚠️ 注意: 我曾经在一个项目中,把「可控性」等级定得太乐观。当时觉得飞行员肯定能反应过来,结果仿真数据一出来,反应时间根本不够。从那以后,我定C值的时候,都会先做一遍人因工程分析。

具体怎么查表?我一般用这个矩阵:

严重度 (S) 暴露概率 (E) 可控性 (C) ASIL等级
S3 (致命) E4 (频繁) C3 (难控制) ASIL D
S2 (重伤) E3 (中等) C2 (可控制) ASIL B
S1 (轻伤) E2 (偶尔) C1 (易控制) ASIL A
S0 (无伤害) E1 (极低) C0 (完全可控) QM

嗯,这里要注意:ASIL D是最严格的,要求你从需求到代码,每一步都要有完整的追溯和验证。而QM(Quality Management)级别,基本就是常规开发流程。

我建议你在做ASIL分解的时候,多用冗余架构来降级。比如一个ASIL D的功能,拆成两个ASIL C的通道,互相监控。这样既能满足安全要求,又不会把开发成本推到天上去。

4.2 安全状态定义:系统「出事」后该干嘛

安全状态,就是系统在检测到故障后,应该进入的「保命模式」。它不是随便一个状态,而是经过分析后,确认风险可接受的那个状态。

常见的飞控安全状态有几种:

  • 降级模式:比如从全自主飞行,降级到遥控模式。我做过一个项目,GPS失效后,系统自动切到视觉导航,虽然精度差了点,但至少不会撞山。
  • 保持模式:悬停或平飞,等待指令。这个模式适合通信中断的场景。
  • 紧急着陆:这是最后的手段。系统会找一个安全区域,自动降落。
  • 安全停机:直接切断动力,但只适用于地面或极低空。
💡 核心原则: 安全状态必须满足两个条件——可到达(系统有能力进入该状态)和可维持(进入后不会自动退出)。

我曾经犯过一个错:把「悬停」定义为安全状态,但没考虑电池电量。结果系统在低电量时进入悬停,没撑到救援来就坠毁了。所以,定义安全状态时,一定要把资源约束(电量、算力、通信)考虑进去。

4.3 安全机制设计:给系统上「保险」

安全机制,就是用来检测故障、并引导系统进入安全状态的那些「机关」。它可以是硬件、软件,也可以是两者的组合。

我一般把安全机制分成三类:

  1. 检测机制:比如看门狗、心跳信号、CRC校验。它们负责「发现」问题。
  2. 响应机制:比如故障切换、数据冻结、状态锁定。它们负责「处理」问题。
  3. 保护机制:比如硬件冗余、软件多样性、表决器。它们负责「防止」问题发生。

举个例子,一个飞控系统的IMU(惯性测量单元)故障,安全机制可以这样设计:

// 伪代码:IMU故障检测与响应
if (IMU数据异常) {
    // 检测机制:一致性检查
    if (IMU1 vs IMU2 偏差 > 阈值) {
        // 响应机制:切换通道
        switchToBackupIMU();
        // 保护机制:记录故障日志
        logFault("IMU mismatch");
        // 进入安全状态
        enterSafeState(DEGRADED_MODE);
    }
}

嗯,这里要注意:安全机制本身也可能失效。所以,我们通常会给关键安全机制加一层「监控」。比如看门狗本身,也要有独立的超时检测。

💡 我的经验: 设计安全机制时,多用「故障注入测试」来验证。我曾经在仿真环境里,故意让IMU输出跳变,结果发现切换逻辑有500ms的延迟。这个延迟在高速飞行中,足以让飞机偏航好几度。后来我们优化了切换算法,把延迟降到了50ms以内。

4.4 知识体系总览

为了让你更直观地理解这三者的关系,我画了一张图:

安全目标定义核心逻辑 危害分析与风险评估 安全目标定义 安全要求规格 ASIL等级确定 • 严重度(S)评估 • 暴露概率(E)评估 • 可控性(C)评估 安全状态定义 • 降级模式 • 保持模式 • 紧急着陆/停机 安全机制设计 • 检测机制 • 响应机制 • 保护机制

你看,整个流程是串起来的。危害分析输出安全目标,安全目标又拆成三个具体的工作项。任何一个环节没做好,后面的安全验证都会出问题。

4.5 避坑指南

最后,分享几个我踩过的坑:

  • ASIL等级不要「就高不就低」。我见过有人把所有功能都定成ASIL D,结果开发成本爆炸,项目延期。合理的做法是,根据实际危害场景,该高就高,该低就低。
  • 安全状态要可测试。你定义了一个「紧急着陆」状态,但怎么验证它?我建议在系统设计阶段,就为每个安全状态写一个测试用例。
  • 安全机制要防「共因失效」。比如两个冗余的IMU,如果用的是同一款芯片、同一版固件,那一个bug就能让两个通道同时失效。这就是共因失效。解决办法是多样性——不同型号、不同算法、不同供应商。

好了,这一章的内容就到这里。记住,安全目标定义是整个功能安全工程的「宪法」。后面所有的设计、实现、测试,都要围绕它来展开。


公众号:蓝海资料掘金营,微信deep3321