基于CList链表类的故障树分析算法的实现

1  引言

故障树是指将要诊断的设备故障事件作为第一级;将导致该故障发生的所有原因并列作为第二级;然后用适当的逻辑门把它们与设备故障事件连接起来;再将第二级各故障事件发生的原因分别并列在第二级故障事件下面作为第三级;按照此方法,一级级往下,直到把最基本的不能再分解的原因都分析出来,得到的这样一张逻辑图称为故障树

故障树分析包括定性分析和定量分析。定性分折的主要目的是寻找导致与系统有关的不希望事件发生的原因和原因的组合,即寻找导致顶事件发生的所有故障模式。定量分析的主要目的是当给定所有底事件发生的概率时,求出顶事件发生的概率及其他定量指标。

2  定性分析算法的实现

1为一个示例故障树,基本事件X1~X5别代表故障1~故障5

1 示例故障树

定性分析重点就是求出故障树的MCS ,得到导致顶层故障发生的各种故障模式。求MCS通常有:求割集有下行法、上行法BDD等。

下面采用MFC中的CList链表,结合环形数组来实现下行法。CListMFC中一个链表类,链表节点可以存储各种数据结构,且具有丰富的链表操作函数,诸如本算法用到的GetAt()RemoveAt()InsertBefore()FindIndex()GetCount()IsEmpty()等,使用非常方便,省去了自己定义链表以及链表操作函数的复杂过程。

首先定义个故障树节点结构体FtNode,包含了故障树节点的各种信息,该结构体代表各节点信息,并存储在CList链表中。

typedef  struct  FtNode

{

        int GateType; //门类型

        int ChildrenNum; //孩子节点数

        double cf; //基本事件发生概率

        CString NodeDescription; //故障事实描述,如下文

                                                 //的“X1故障”

        ……//包含其它的信息

}

定义一个存放按层次遍历得到的故障树各节点的CList链表:CList<FtNode, FtNode&> FtList存储形式如图2所示。

2 节点在CList中的存储

       接着以数组形式定义200CList链表(可按实际故障树大小来调整改大小):

 CList<FtNode, FtNode&> CutSet[200]

      求解过程的基本思路是:首先FtList中的T节点添加到CutSet[0],用counter计数当前已经使用过的数组数量,用ijl控制三层for循环,外层循环i

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值