R语言实现故障树定量与定性分析——以GJB-Z 768A-1998 故障树分析指南图5.37为例

近期参与的软件开发项目,笔者直接负责FTA部分,考虑使用现有的工具包来辅助完成功能的开发,于是选用了近些年比较火热的解释性语言R来实现。
在这里插入图片描述

参考《GJB-Z 768A-1998 故障树分析指南》,图5.37如上图所示
下面使用R的开源包FaultTree完成故障树生成与故障树分析

1.故障树生成

首先需要加载R的开源包“FaultTree”,可以前往https://r-forge.r-project.org/R/?group_id=2125 自行下载安装。或者直接在R中输入

install.packages("FaultTree", repos="http://R-Forge.R-project.org")

可能会提示你需要加载一些相关的依赖包,例如Rcpp之类的,按照提示操作即可
接着就可以生成故障树了

library(FaultTree)
library(FaultTree.SCRAM)
library(FaultTree.widget)
#建立故障树

elec <- ftree.make(type="or", name="电网失效") #E1 id=1
elec <- addLogic(elec,at=1,type = "and",tag = "E2",name = "B站输入无效")   #E2 id=2
elec <- addLogic(elec,at=1,type = "and",tag = "E3",name = "C站输入无效")  #E3 id=3
elec <- addLogic(elec, at=1,type = "or", tag="E4", name="站B和站C仅由同一单线供电") #E4 id=4
elec <- addProbability(elec, at=2, prob=.01, tag="X1", name="输电线1故障") #X1 id=5
elec <- addProbability(elec,at=2,prob = .01,tag="X2",name="输电线2故障") #X2 id=6
elec <- addLogic(elec,at=2,type = "or",tag="E5",name = "来自站C的输电线路无电") #E5 id=7
elec <- addProbability(elec,at=3,prob = .01,tag = "X3",name = "输电线3故障") #X3 id=8
elec <- addLogic(elec,at=3,type = "or",tag = "E6",name = "来自站B的输电线路无电") #E6 id=9
elec <- addLogic(elec,at=4,type = "and",tag = "E7",name = "输电线23同时故障") #E7 id=10
elec <- addLogic(elec,at=4,type = "and",tag = "E8",name = "输电线13同时故障") #E8 id=11
elec <- addLogic(elec,at=4,type = "and",tag = "E9",name = "输电线12同时故障") #E9 id=12
elec <- addDuplicate(elec,at=7,dup_id = 8) #重复事件X3 id=13
elec <- addLogic(elec,at=7,type = "and",tag = "E10",name = "输电线45同时故障") #E10 id=14
elec <- addProbability(elec,at=14,prob = .01,tag = "X4",name = "输电线4故障") #X4 id=15    
elec <- addProbability(elec,at=14,prob = .01,tag = "X5",name = "输电线5故障") #X5 id=16
elec <- addDuplicate(elec,at=9,dup_id = 14) # 重复事件E10  id=17
elec <- addDuplicate(elec,at=10,dup_id = 6) # 重复事件X2 id=18
elec <- addDuplicate(elec,at=10,dup_id = 8) # 重复事件X3 id=19
elec <- addDuplicate(elec,at=11,dup_id = 5) # 重复事件X1 id=20
elec <- addDuplicate(elec,at=11,dup_id = 8) # 重复事件X3 id=21
elec <- addDuplicate(elec,at=12,dup_id = 5) # 重复事件X1 id=22
elec <- addDuplicate(elec,at=12,dup_id = 6) # 重复事件X2 id=23
elec <- addDuplicate(elec,at=9,dup_id = 12) # 重复时间E9 id=24

#测试树结构
test.ftree(elec)

2.故障树图形化输出

FaultTree库提供了html来完成故障树的图形化输出

#绘制故障树
ftree2html(elec,dir = "elec",write_file = TRUE) #手动将html改为GBK编码

到这一步,故障树就以HTML文件形式输出到了当前R的工作空间下。
【注意】
笔者在测试过程发现,输出的HTML文件调用了网上的Jquery和d3js来完成图形化加载
其中,d3js控制字符,Jquery提供动态页面效果。
由于FaultTree库默认设置的Jquery引用链接失效,会直接导致输出的HTML无法正常加载。
只需要将HTML文件中头部的java script引用地址修改为国内提供的Jquery引用地址即可。笔者使用的是百度提供的Jquery【虽然版本很旧,但也够用了】
对应文件中的

<script src="http://d3js.org/d3.v3.min.js" charset="GBK"></script>
<script src="https://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>

注意到,笔者将charset也改成了GBK,这样可以兼容中文

页面展示效果如下:
在这里插入图片描述
中间节点可以实现自由折叠,上图是将右侧折叠后的效果,被折叠的节点将以蓝色框显示。

3.定性分析

FaultTree库提供了最小割集的一键计算函数,通过设置cutsets函数的参数method,可以选用不同的计算方法,默认是下行法MOCUS

#最小割集
cutsets(elec) #默认下行法MOCUS

R中计算结果如下:

[[1]]
NULL

[[2]]
     [,1] [,2]
[1,] "X2" "X3"
[2,] "X1" "X3"
[3
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值