第3章:故障树分析(FTA)——从根因到顶事件的逻辑拆解
故障树分析,简称FTA。说实话,这玩意儿是我在稳定性领域里用得最顺手的工具之一。它不像某些玄学排查法,靠拍脑袋猜原因。FTA有一套严谨的逻辑,能把一个系统级故障,一层层拆到最底层的元器件失效或人为失误。
我最早接触FTA是在做核电DCS系统的时候。那时候甲方要求每个安全功能必须建故障树,算最小割集。一开始觉得烦,后来真出了事故,对照故障树一查,十分钟定位根因。嗯,从那以后,我再也没跳过这步。
3.1 故障树的基本符号
先认识一下“积木块”。故障树里符号不多,但每个都有明确含义。搞混了,树就歪了。
| 符号 | 名称 | 含义 |
|---|---|---|
| 矩形 | 顶事件 / 中间事件 | 需要分析的故障结果,继续往下拆 |
| 圆形 | 底事件 | 最基本的失效原因,不再往下分解 |
| 菱形 | 未展开事件 | 已知原因但暂不展开,或数据不足 |
| 房形 | 条件事件 | 触发故障的特定条件或约束 |
| 三角形 | 转移符号 | 子树引用,避免一张图画不下 |
3.2 顶事件与底事件
顶事件就是故障树最上面那个矩形。它代表你关心的那个系统级故障。比如“数据库服务不可用”、“支付接口超时率超过5%”。
底事件是树的最底层叶子节点。它们必须是“不可再分”的原子原因。比如“CPU温度超过85℃触发降频”、“磁盘写入队列深度超过512”。
这里有个坑:底事件的粒度要一致。你不能左边叶子是“内存ECC错误”,右边叶子是“机房空调坏了”——粒度差太多,树就不平衡了。
3.3 逻辑门:与门和或门
逻辑门是故障树的“骨架”。说白了,就是描述下层故障怎么组合成上层故障。
3.3.1 与门
与门表示:所有输入事件同时发生,输出事件才发生。
举个例子:一个双路冗余电源系统,只有“电源A失效”且“电源B失效”同时发生,才会导致“系统掉电”。这就是与门。
与门在故障树里用圆弧底的门形符号表示。它的特点是:并联冗余越多,系统越可靠。
3.3.2 或门
或门表示:只要有一个输入事件发生,输出事件就发生。
还是那个电源系统,如果改成单路供电,那么“电源A失效”或“电源B失效”都会导致“系统掉电”。这就是或门。
或门用尖底的门形符号表示。它的特点是:串联环节越多,系统越脆弱。
| 对比项 | 与门 | 或门 |
|---|---|---|
| 逻辑关系 | 全部发生才发生 | 任一发生就发生 |
| 对可靠性的影响 | 提高(冗余) | 降低(单点) |
| 最小割集数量 | 少(组合条件苛刻) | 多(触发条件宽松) |
| 实际场景 | 主备切换、双路供电 | 单点故障、依赖链断裂 |
3.4 最小割集求解
割集,就是一组底事件的集合。这组底事件同时发生时,顶事件必然发生。
最小割集,就是不能再精简的割集。去掉任何一个底事件,顶事件就不会发生。
为什么要求最小割集?因为它是系统最脆弱的“命门”。你想想看,一个最小割集就是一个独立的故障路径。路径越短,风险越高——单点故障就是长度为1的最小割集。
3.4.1 下行法(Fussell-Vesely算法)
这是我最常用的方法。思路很简单:从顶事件往下走,遇到与门就把输入事件排成一行,遇到或门就把输入事件排成一列。
具体步骤:
- 从顶事件开始,逐层替换逻辑门
- 遇到与门:子事件横向展开(同一行)
- 遇到或门:子事件纵向展开(不同行)
- 直到所有门都被替换成底事件
- 去重、吸收(去掉包含其他割集的割集)
举个例子,假设故障树结构如下:
顶事件 T = (A 或 B) 与 (C 或 D)
第一步:T = (A 或 B) 与 (C 或 D)
第二步:遇到与门,横向展开 → (A 或 B) (C 或 D)
第三步:遇到或门,纵向展开 →
行1: A C
行2: A D
行3: B C
行4: B D
第四步:全部是底事件,结束
第五步:没有重复,最小割集为 {A,C}, {A,D}, {B,C}, {B,D}
3.4.2 上行法
上行法是从底事件往上推。从最底层开始,用逻辑门表达式逐层替换,最终得到顶事件的布尔表达式。
还是上面那个例子:
底层:G1 = A + B (或门用+表示)
G2 = C + D (或门用+表示)
顶层:T = G1 · G2 (与门用·表示)
代入:T = (A + B) · (C + D)
展开:T = A·C + A·D + B·C + B·D
最小割集:{A,C}, {A,D}, {B,C}, {B,D}
上行法适合手工计算小树。大树还是用下行法配合计算机更靠谱。
3.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。你一看就明白:从符号到门,从门到割集,层层递进。
3.6 实战建议
最后聊点实际的。FTA不是画完就完事的,它要落地。
- 建树前先定边界:系统边界在哪?哪些故障不考虑?我见过有人把“太阳耀斑爆发”都写进故障树——不是不行,但你先想想你能不能控制。
- 最小割集要排序:按长度排序,优先处理长度为1的单点故障。这是性价比最高的改进点。
- 结合FMEA一起用:FMEA找失效模式,FTA找逻辑组合。两个工具互补,效果1+1>2。
- 工具辅助:小树手算,大树用工具。我常用OpenFTA和CAFTA,免费的也有。