3、失效模式分类:硬件失效、软件失效、人为失效
做功能安全这么多年,我越来越觉得,搞懂失效模式的分类,是入门的第一道坎,也是老手容易翻车的地方。
说白了,系统出问题,无非三个源头:硬件扛不住了、软件写错了、人搞砸了。但每个源头里的门道,可深着呢。
我个人习惯,把失效模式先画个三叉戟:硬件、软件、人。咱们一个一个来拆。
3.1 硬件失效:随机失效 vs. 系统失效
硬件失效,我把它分成两类。这两类性质完全不同,处理方式也天差地别。
3.1.1 随机硬件失效
什么叫随机?就是老天爷决定的。你芯片造出来,用着用着,某个晶体管突然就坏了。这不是设计问题,是物理规律。
我记得在做一个ADAS控制器项目时,有个ECU在台架上跑了3000小时,突然电源管理芯片的基准电压漂了。查了一圈,不是设计问题,就是随机失效。嗯,这种你只能靠冗余、诊断覆盖率去兜底。
随机硬件失效的特点:
- 不可预测:你没法知道它什么时候来
- 符合概率分布:通常用FIT(失效率)和MTBF(平均无故障时间)来量化
- 处理方式:靠安全机制(比如ECC、CRC、看门狗)来检测并响应
3.1.2 系统硬件失效
这个就有点意思了。系统硬件失效,不是老天爷决定的,是设计者自己埋的雷。
比如,你选了个电容,规格书上说耐压16V,结果实际电路里纹波峰值到了15.5V。设计余量不够,用久了电容就爆了。这不是随机失效,这是设计缺陷。
我曾经在一个项目里,就因为PCB走线间距没算好,导致高压爬电,整批板子返工。你说这是随机吗?不,这是系统性的设计失误。
系统硬件失效的特点:
- 可复现:只要条件满足,它一定会出现
- 源于设计、制造或工艺:比如时序裕量不足、材料选型错误
- 处理方式:靠设计评审、FMEA、FTA、严格的验证测试来消除
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;
}
3.2.3 配置失效
这个容易被忽略。软件本身没问题,但参数配错了。
比如,一个安全扭矩限制值,默认是100Nm,结果配置工程师写成了1000Nm。电机直接过载,机械结构损坏。你说这是软件bug吗?不是,是配置失效。
我曾经在项目里专门加了一个配置参数校验模块,所有关键参数写入前,都要做范围检查和合理性检查。这招很管用。
3.3 人为失效:操作 vs. 维护
最后说说人。人是最不可靠的环节,没有之一。
3.3.1 操作失效
操作员按错了按钮、看错了屏幕、在错误的时机做了错误的操作。
比如,一个工业机器人,操作员在维护模式下没挂安全锁,直接伸手进去。这就是操作失效。功能安全里,我们通过人机工程学设计和防误操作机制来降低这种风险。
我记得在功能安全标准里,操作失效通常用操作错误率来评估,但说实话,这个很难量化。我建议的做法是:假设操作员一定会犯错,然后设计系统来容忍这个错误。
3.3.2 维护失效
这个更隐蔽。设备坏了,维修工换了个零件,但型号不对。或者,维修之后忘了恢复某个安全功能。
举个例子,一个安全继电器,维修工换了个非原厂的替代品,响应时间慢了10ms。整个安全回路的SIL等级就降级了。
维护失效的常见场景:
- 零件替换错误:用了非认证的备件
- 恢复遗漏:维修后忘了重新上锁、忘了恢复安全参数
- 校准错误:传感器校准参数写错
3.4 三种失效的对比总结
最后,我习惯用一张表来总结这三种失效模式。你想想看,做FMEA的时候,这三种都要覆盖到。
| 失效类型 | 根本原因 | 典型例子 | 主要应对措施 |
|---|---|---|---|
| 随机硬件失效 | 物理退化、随机故障 | 芯片位翻转、电容老化 | 冗余、诊断、安全机制 |
| 系统硬件失效 | 设计/制造缺陷 | 时序裕量不足、材料选型错误 | 设计评审、FMEA、验证测试 |
| 软件设计失效 | 架构/逻辑设计错误 | 状态机遗漏、接口不匹配 | 架构分析、设计评审、形式化方法 |
| 软件编码失效 | 代码实现错误 | 数组越界、死锁、整数溢出 | 编码规范、静态分析、单元测试 |
| 软件配置失效 | 参数设置错误 | 安全阈值配错、使能位写反 | 参数校验、配置管理、自动化检查 |
| 操作失效 | 人为误操作 | 按错按钮、误判状态 | 防误操作设计、人机工程、培训 |
| 维护失效 | 维修/校准错误 | 换错零件、遗漏恢复 | 防呆设计、维护流程、安全验证 |
嗯,这一章的内容就到这里。记住一句话:硬件失效靠兜底,软件失效靠规范,人为失效靠设计。下一章,咱们聊聊怎么用FMEA把这些失效模式一个一个揪出来。