3、失效模式分类:硬件失效、软件失效、人为失效

做功能安全这么多年,我越来越觉得,搞懂失效模式的分类,是入门的第一道坎,也是老手容易翻车的地方。

说白了,系统出问题,无非三个源头:硬件扛不住了、软件写错了、人搞砸了。但每个源头里的门道,可深着呢。

我个人习惯,把失效模式先画个三叉戟:硬件、软件、人。咱们一个一个来拆。

3.1 硬件失效:随机失效 vs. 系统失效

硬件失效,我把它分成两类。这两类性质完全不同,处理方式也天差地别。

3.1.1 随机硬件失效

什么叫随机?就是老天爷决定的。你芯片造出来,用着用着,某个晶体管突然就坏了。这不是设计问题,是物理规律。

我记得在做一个ADAS控制器项目时,有个ECU在台架上跑了3000小时,突然电源管理芯片的基准电压漂了。查了一圈,不是设计问题,就是随机失效。嗯,这种你只能靠冗余、诊断覆盖率去兜底。

随机硬件失效的特点:

  • 不可预测:你没法知道它什么时候来
  • 符合概率分布:通常用FIT(失效率)和MTBF(平均无故障时间)来量化
  • 处理方式:靠安全机制(比如ECC、CRC、看门狗)来检测并响应
核心指标:ISO 26262里,随机硬件失效用SPFM(单点故障度量)和LFM(潜伏故障度量)来评估。说白了,就是看你安全机制能覆盖多少。

3.1.2 系统硬件失效

这个就有点意思了。系统硬件失效,不是老天爷决定的,是设计者自己埋的雷。

比如,你选了个电容,规格书上说耐压16V,结果实际电路里纹波峰值到了15.5V。设计余量不够,用久了电容就爆了。这不是随机失效,这是设计缺陷。

我曾经在一个项目里,就因为PCB走线间距没算好,导致高压爬电,整批板子返工。你说这是随机吗?不,这是系统性的设计失误。

系统硬件失效的特点:

  • 可复现:只要条件满足,它一定会出现
  • 源于设计、制造或工艺:比如时序裕量不足、材料选型错误
  • 处理方式:靠设计评审、FMEA、FTA、严格的验证测试来消除
避坑指南:我曾经见过一个团队,把随机失效的FIT值算得特别漂亮,但系统失效一个没管。结果量产之后,因为一个电阻的功率降额没做够,批量退货。记住,系统失效不解决,随机失效算得再准也没用。

3.2 软件失效:设计、编码、配置

软件失效,说白了就是代码里藏着bug。但bug也分三六九等。

3.2.1 设计失效

这是最要命的。架构没想清楚,后面怎么补都补不回来。

比如,你设计了一个状态机,但漏了一个异常状态。代码写得再漂亮,一旦系统进入那个未定义状态,直接死机。这就是设计失效。

我建议,在设计阶段一定要做软件架构分析,用FMEA的思路去扫一遍每个模块的接口和状态。

3.2.2 编码失效

这个大家最熟悉。指针越界、数组溢出、整数溢出、死循环……

我记得有一次,一个同事写了个for循环,条件写成了i <= n,结果数组只有n个元素,直接越界。这种就是典型的编码失效。

编码失效的常见类型:

  • 内存相关:野指针、内存泄漏、缓冲区溢出
  • 逻辑错误:条件判断写反、边界条件遗漏
  • 并发问题:竞态条件、死锁、优先级反转
// 一个典型的编码失效示例
int buffer[10];
for (int i = 0; i <= 10; i++) {  // 注意:i <= 10 越界了
    buffer[i] = i;
}
我的习惯:编码规范一定要严格执行。MISRA C不是摆设,静态代码分析工具也不是摆设。你想想看,一个等号写成了两个等号,编译器不报错,但逻辑全错了。

3.2.3 配置失效

这个容易被忽略。软件本身没问题,但参数配错了。

比如,一个安全扭矩限制值,默认是100Nm,结果配置工程师写成了1000Nm。电机直接过载,机械结构损坏。你说这是软件bug吗?不是,是配置失效。

我曾经在项目里专门加了一个配置参数校验模块,所有关键参数写入前,都要做范围检查和合理性检查。这招很管用。

3.3 人为失效:操作 vs. 维护

最后说说人。人是最不可靠的环节,没有之一。

3.3.1 操作失效

操作员按错了按钮、看错了屏幕、在错误的时机做了错误的操作。

比如,一个工业机器人,操作员在维护模式下没挂安全锁,直接伸手进去。这就是操作失效。功能安全里,我们通过人机工程学设计防误操作机制来降低这种风险。

我记得在功能安全标准里,操作失效通常用操作错误率来评估,但说实话,这个很难量化。我建议的做法是:假设操作员一定会犯错,然后设计系统来容忍这个错误

3.3.2 维护失效

这个更隐蔽。设备坏了,维修工换了个零件,但型号不对。或者,维修之后忘了恢复某个安全功能。

举个例子,一个安全继电器,维修工换了个非原厂的替代品,响应时间慢了10ms。整个安全回路的SIL等级就降级了。

维护失效的常见场景:

  • 零件替换错误:用了非认证的备件
  • 恢复遗漏:维修后忘了重新上锁、忘了恢复安全参数
  • 校准错误:传感器校准参数写错
我的建议:在系统设计阶段,就要考虑维护的可操作性。比如,关键零件用防呆设计,不同型号的接口不一样,插错了插不进去。另外,维护流程里一定要有功能安全验证步骤,修完之后必须跑一遍安全自检。

3.4 三种失效的对比总结

最后,我习惯用一张表来总结这三种失效模式。你想想看,做FMEA的时候,这三种都要覆盖到。

失效类型 根本原因 典型例子 主要应对措施
随机硬件失效 物理退化、随机故障 芯片位翻转、电容老化 冗余、诊断、安全机制
系统硬件失效 设计/制造缺陷 时序裕量不足、材料选型错误 设计评审、FMEA、验证测试
软件设计失效 架构/逻辑设计错误 状态机遗漏、接口不匹配 架构分析、设计评审、形式化方法
软件编码失效 代码实现错误 数组越界、死锁、整数溢出 编码规范、静态分析、单元测试
软件配置失效 参数设置错误 安全阈值配错、使能位写反 参数校验、配置管理、自动化检查
操作失效 人为误操作 按错按钮、误判状态 防误操作设计、人机工程、培训
维护失效 维修/校准错误 换错零件、遗漏恢复 防呆设计、维护流程、安全验证

嗯,这一章的内容就到这里。记住一句话:硬件失效靠兜底,软件失效靠规范,人为失效靠设计。下一章,咱们聊聊怎么用FMEA把这些失效模式一个一个揪出来。