2. 故障诊断基础:故障、错误、失效的定义与区别

各位好,我是老周。在功能安全领域摸爬滚打了十几年,我见过太多因为概念不清导致的返工。今天咱们就来聊聊故障诊断最基础的东西——故障、错误、失效这三个词到底有什么区别。

说实话,我刚入行那会儿也经常搞混。直到有一次在项目评审会上,被一个德国专家追问了半小时,才真正把这些概念刻进脑子里。嗯,咱们今天就把它彻底讲明白。

2.1 核心概念:故障、错误、失效

这三个词在ISO 26262里有明确定义,但很多工程师把它们当同义词用。其实不然,它们代表的是三个完全不同的阶段。

术语 英文 定义 状态
故障 Fault 导致功能异常的物理或逻辑缺陷 静态存在
错误 Error 故障被激活后产生的错误状态 动态激活
失效 Failure 错误传播到系统边界,导致功能丧失 外部可见

我习惯用一个比喻来理解:故障是病因,错误是症状,失效是病人倒下了。你想想看,病因不一定会发作,症状不一定会致命,但一旦病人倒下了,那就是失效。

关键理解:故障是原因,错误是状态,失效是结果。诊断的目标是在故障变成失效之前把它揪出来。

2.2 故障模型与故障分类

搞清楚了概念,咱们来看看故障到底长什么样。我在项目中常用的故障模型主要有这么几类:

2.2.1 按持续时间分类

  • 永久故障:一旦出现就不会消失。比如芯片烧了、线路断了。这种最好诊断,但后果也最严重。
  • 间歇故障:时有时无,跟环境条件相关。比如温度高了就出问题,温度低了又好了。我最头疼的就是这种,复现起来特别费劲。
  • 瞬态故障:一次性的,受外部干扰触发。比如电磁干扰导致的数据翻转。这种在汽车电子里很常见,尤其是高速信号线附近。

2.2.2 按影响范围分类

  • 单点故障:一个元件坏了,直接导致安全目标被违反。ISO 26262里对单点故障覆盖率有硬性要求。
  • 多点故障:多个元件同时出问题。这里又分两种:
    • 双点故障:两个故障同时出现才导致失效
    • 潜伏故障:一个故障存在但没被发现,另一个故障来了才触发

避坑指南:我曾经在一个项目中忽略了间歇故障的检测,结果客户在冬季测试时频繁报错,但回厂检测又一切正常。后来花了整整两周才定位到是某个焊点在低温下接触不良。从那以后,我对间歇故障的覆盖率要求都提高了一档。

2.3 诊断覆盖率的概念

诊断覆盖率(Diagnostic Coverage, DC)是功能安全里最核心的量化指标之一。说白了,就是你的诊断机制能检测出多少比例的故障。

公式很简单:

DC = 检测到的故障率 / 总故障率

但实际应用时要注意几点:

  • 覆盖率是针对特定故障模式计算的,不是笼统的"系统覆盖率"
  • ISO 26262对不同ASIL等级有最低覆盖率要求:
    • ASIL A:无硬性要求
    • ASIL B:≥90%
    • ASIL C:≥97%
    • ASIL D:≥99%
  • 覆盖率不是越高越好,要考虑成本和实现复杂度

我的经验:别一上来就追求99%的覆盖率。先做80%的快速诊断,再逐步优化到90%、97%。这样项目节奏更可控,也更容易发现设计中的盲区。

2.4 故障传播链与诊断策略

理解了故障、错误、失效的关系,咱们就能画出完整的故障传播链:

故障传播链与诊断介入点 故障 物理/逻辑缺陷 错误 错误状态 失效 功能丧失 诊断介入点 在线监控 → 故障检测 → 故障响应 → 安全状态 检测 抑制 容错 说明:诊断可以在故障→错误阶段(检测)、错误→失效阶段(抑制)、 失效发生后(容错)三个层面介入。越早介入,安全裕度越大。

从这张图可以看出,诊断介入得越早,留给系统响应的时间就越充裕。我个人习惯在故障→错误阶段就做检测,这样还有时间做降级处理,而不是直接进入安全状态。

2.5 AUTOSAR中的故障诊断实现

在AUTOSAR架构里,故障诊断主要通过以下几个模块实现:

  • DET(Default Error Tracer):开发阶段的错误追踪,用于调试
  • DEM(Diagnostic Event Manager):管理诊断事件,记录故障发生次数、时间戳等
  • DCM(Diagnostic Communication Manager):处理UDS诊断请求,比如读取故障码
  • FIM(Function Inhibition Manager):根据故障状态决定是否抑制某些功能

举个例子,假设一个传感器出现了永久故障:

  1. DEM检测到传感器信号超出合理范围,记录一个诊断事件
  2. DCM通过CAN总线将故障码(DTC)上报给诊断仪
  3. FIM根据故障等级,决定是否关闭相关功能或进入降级模式

实际项目经验:我在做ADAS控制器时,遇到过一个问题——DEM的事件存储太频繁,导致NVRAM写坏。后来调整了去抖(Debounce)策略,故障确认前先做3次连续采样,既保证了诊断覆盖率,又避免了存储寿命问题。

2.6 本章小结

咱们今天聊了三个核心概念:故障是根因,错误是中间状态,失效是最终表现。诊断覆盖率不是越高越好,而是要在成本、复杂度和安全目标之间找到平衡点。

记住一句话:好的诊断设计,是在故障变成失效之前,用最小的代价把它抓住。