1. 故障树基本结构构建
任务说明
以离心泵“意外停机”为顶事件,构建一个三层故障树基本结构:顶事件→中间事件→底事件,并为每个中间事件明确逻辑门类型(与门/或门)。本案例聚焦故障树的结构搭建与逻辑门定义,不涉及定量计算。
故障树结构
逻辑门定义
| 门位置 | 门类型 | 输入事件 | 输出事件 | 逻辑含义 |
|---|---|---|---|---|
| G0(顶层) | 或门 | M1, M2 | 顶事件T | M1或M2任一发生,顶事件即发生 |
| G1(M1下方) | 或门 | X1, X2, X3 | M1 | 任一底事件发生,M1即发生 |
| G2(M2下方) | 或门 | X4, X5, X6 | M2 | 任一底事件发生,M2即发生 |
Python代码实现
from dataclasses import dataclass
from typing import List, Dict
@dataclass
class Event:
"""故障树事件节点"""
id: str
name: str
event_type: str # 'top' / 'intermediate' / 'basic'
gate: str = None # 'OR' / 'AND' / None(底事件无门)
children: List[str] = None
def __post_init__(self):
if self.children is None:
self.children = []
class FaultTree:
"""故障树基本结构"""
def __init__(self):
self.events: Dict[str, Event] = {}
def add_event(self, event: Event):
self.events[event.id] = event
def build_pump_tree(self):
"""构建离心泵意外停机故障树"""
# 顶事件
self.add_event(Event('T', '离心泵意外停机', 'top', gate='OR',
children=['M1', 'M2']))
# 中间事件
self.add_event(Event('M1', '机械故障', 'intermediate', gate='OR',
children=['X1', 'X2', 'X3']))
self.add_event(Event('M2', '电气/控制故障', 'intermediate', gate='OR',
children=['X4', 'X5', 'X6']))
# 底事件
self.add_event(Event('X1', '轴承磨损卡死', 'basic'))
self.add_event(Event('X2', '叶轮断裂', 'basic'))
self.add_event(Event('X3', '机械密封泄漏', 'basic'))
self.add_event(Event('X4', '电机过载烧毁', 'basic'))
self.add_event(Event('X5', '控制回路断线', 'basic'))
self.add_event(Event('X6', '变频器故障', 'basic'))
def display_structure(self):
"""打印故障树结构"""
print("=" * 50)
print("故障树结构(离心泵意外停机)")
print("=" * 50)
for e in self.events.values():
if e.event_type == 'top':
print(f"[顶事件] {e.id}: {e.name} (门: {e.gate})")
for cid in e.children:
child = self.events[cid]
print(f" ├─ [中间事件] {child.id}: {child.name} (门: {child.gate})")
for gid in child.children:
gc = self.events[gid]
print(f" │ ├─ [底事件] {gc.id}: {gc.name}")
print()
def get_min_cut_sets(self):
"""获取最小割集(全部为或门时,每个底事件即一个最小割集)"""
cuts = []
for e in self.events.values():
if e.event_type == 'intermediate':
for cid in e.children:
cuts.append([cid])
return cuts
if __name__ == "__main__":
ft = FaultTree()
ft.build_pump_tree()
ft.display_structure()
print("最小割集(或门结构下):")
for i, cut in enumerate(ft.get_min_cut_sets(), 1):
print(f" {{{', '.join(cut)}}}")
运行与验证
运行方式:将上述代码保存为 fault_tree.py,在Python 3.8+环境中执行 python fault_tree.py。
预期输出:程序会打印完整的故障树层级结构,显示顶事件T通过或门连接M1、M2,M1通过或门连接X1~X3,M2通过或门连接X4~X6;随后输出6个最小割集:{X1}、{X2}、{X3}、{X4}、{X5}、{X6}。
判定标准:输出结构与上方SVG图一致,且最小割集数量为6(每个底事件单独构成一个割集),即说明故障树基本结构构建正确。由于本案例全部采用或门,任一底事件发生即可导致顶事件,符合“意外停机”的失效逻辑。