梁 杰 饶天贵
1(中国铁路武汉局集团有限公司机务部 湖北 武汉 430070)
2(株洲中车时代电气股份有限公司 湖南 株洲 412001)
故障树分析法(Fault Tree Analysis,FTA)[1]是目前国际上公认的一种简单有效的可靠分析和故障诊断的方法,也是指导系统最优化设计、薄弱环节分析和运行维护的有力工具。由于其推理技术逻辑性强、使用简便、知识结构清晰,在各大型复杂系统的故障诊断领域已得到广泛应用。
基于故障树的机车诊断系统是将故障树分析法在可靠性分析和故障诊断方面优异的性能,引入到机车故障诊断诊断领域中。首先应用大量专业知识和专家经验知识等构建故障树系统,利用故障树的逻辑结构信息以及对故障树定性、定量分析的结果形成相应的知识库,同时模拟人类专家的思维方式进行推理和判断,以解决需要技术专家才能解决的复杂问题,从而实现对机车故障的快速逻辑推理和诊断,为机车的检修以及故障处理提供可靠的决策依据。
本文给出一种新的基于故障树的机车诊断系统设计方案,减少了对数据库的依赖,提高了诊断推理的效率,同时给出了基于模块化故障树的诊断推理以及定性分析方法,为诊断复杂的机车系统提供较好的解决方案。
该系统以故障树的形式组织整个知识库,然后根据推理机快速准确查找故障原因,系统主要功能框图如图1所示。
图1 机车故障诊断系统框图
知识管理:主要包括故障树的管理、故障树的分析以及故障节点信息维护。
诊断知识库:主要包括故障树结构信息库、故障节点信息库。
综合数据库:主要包括推理的结论以及推理的中间结果等信息。
推理机:故障的推理以及故障的识别。
人机交互界面:主要负责故障征兆和推理结果显示,以及为知识管理和推理过程控制提供交互界面。
故障树的管理主要包括故障树的建立、故障树的存储、故障树的修改维护等功能。
故障树建立是故障树分析的前提,可通过可视化的方式,利用演绎法,从顶事件到底事件逐步添加,完成故障树的建立,最后将故障树的结构信息与节点信息分别保存在文本文件和数据库文件中。也可通过直接编制故障树文本文件,将故障树结构按公式形式存储在文本文件中,一个文本文件保存一个故障树信息,文件名与故障树信息表中的TreeID一致。一个公式对应于一行文本,公式存储顺序根据故障树结构层次自顶至底。“+”表示或门,“*”表示与门,各个事件包括顶事件、中间事件、底事件,用相应编码表示,该编码规则参见故障字典信息表的FactID字段。故障树文本文件存储示例如图2所示,其对应的故障树TOP图如图3所示,故障树信息表见表1。
图2 控制电路电源断开故障树文本表示
图3 控制电路电源断开故障树示意图
表1 故障树信息表
2.1.1故障树信息表
故障树信息表用以存储故障树相关的信息,TreeID表示树的编号。第0位为“T”,表示故障树;第1-3位为车型编码,如001表示HXD1C、002为HXD1D等;第4-5位为编码,系统编码如表2所示;第6-7位表示该系统树的索引号。TreeInfo字段主要用于对故障树信息进行描述。TreeTopEventID字段用以存储该故障树的顶事件编号,顶事件编号即为故障事实表中的FactID字段。TreeProb字段为该故障树顶事件发生的概率。
表2 故障字典信息
2.1.2故障字典信息表
故障信息字典存储所有故障事实的相关信息。其中FactID为故障编号,共16位。第0位为F表示故障事实;第1-3位为车型编码;第4-5位为系统编码,如表2所示;第6-8位为部件编码参见表3,预留;第9位为故障等级,1表示A类故障,2表示B类故障,3表示C类故障,默认为0;第10-13位为故障编码;第14-15位预留。FactDescription字段用以对故障情况进行描述。FactDriverInfor字段保存针对该故障司机的处理维护措施。FactMentenInfor字段保存针对该故障检修人员的维护措施。FactSum字段保存该故障发生的次数,为维护人员提供参考。FactProb字段保存该事件发生的概率,关于故障发生的概率的设定可以由领域专家或工程师根据其经验来设定,也可以通过对故障历史进行统计,计算各个事件的发生概率。
表3 交流传动电力机车系统名称及代码
2.1.3电力机车系统部件编码表
在完成故障树的创建和维护修改故障树的信息之后,需同步修改数据库中的故障树的节点信息。故障树节点信息表见表4。
表4 故障节点信息表
续表4
故障树节点信息主要保存建好的故障树的每个节点的信息以及故障树的网络拓扑信息,为故障诊断推理提供必要的信息,为模块化故障树推理、冲突消解提供支持辅助推理。NodePoseID节点在故障树中的位置编号,第0-2位表示节点在故障树中的层数,第3-5位表示节点在该层中从左到右的序号。MatchDegree字段用以保存匹配度信息,取值范围为(0,1),表示该节点事件发生对父节点的贡献程度,如果该节点与其兄弟节点的关系为与,则它们的匹配度之和为1,如果关系为或,则该值为1。
故障树节点信息在系统程序中用的数据结构如下:
故障树节点信息类
public class FactNode
{
intindex;
//故障节点的相对坐标信息,
String description;
//故障节点的描述信息
String factIDstr;
//故障节点ID
String gate;
//导致节点事件发生的所有子节点之间的门类型
FactNode(String factIDstr,String description)
{
this.description=description;
this.factIDstr= factIDstr;
}
FactNode (){}
void setFactNodeIndex(int index)
{
this.index =index;
}
……
}
故障树分析模块主要用来对构建的故障树进行定性和定量分析。定性分析是指寻找出导致顶事件发生的故障源,识别导致顶事件发生的所有故障模式,即寻找故障树所有最小割集;定量分析是通过底事件发生概率计算出顶事件发生的概率,同时完成事件重要度计算,即事件故障发生对顶事件影响大小尺度的计算。由于故障树增大,底事件将随之增加,最小子集的查找的工作量将呈非线性增长,提出了模块化割集处理的方法。下面从定性分析、模块化割集处理、定量分析三个方面分析模块进行阐述。
2.2.1定性分析
对故障树的定性分析,即通过分析故障树的最小割集中包含的底事件状态,或利用对最小路集所包含的通道事件的状态分析,实现对故障的预测及诊断。采用自上而下的故障树搜寻算法,计算故障树的最小割集,即导致故障树顶层故障事件发生的基本事件的最小集合,确定导致系统故障的各个基本原因,可以为检修和维护提供支持。
常采用由上而下的故障树搜寻算法来求解故障树最小割集,算法实现过程:逻辑“与”增加的是割集容量,逻辑“或”增加的是割集的数量。从故障树顶事件开始,由上到下,依次把上一级事件置换为下一级事件,遇到与门将输入事件横向并列写出,遇到或门将输入事件竖向串列写出,直到把全部逻辑门都置换成底事件为止,此时最后一列代表所有割集,割集采用最小割集素数法,其思想就是给每个底事件赋于素数,割集相除去掉能作为被除数的割集,从而得到最小割集。以图2所示的MIO控制电路电源断开故障树为例,可得到最小割集表示如下:{F001080000103601},{F001080000103603},{F001080000103604},{F001080000103606},{F001080000103607 },{F001080000103608 }。
同时利用对偶树,确定故障树的最小路集,及保证系统不发生故障的最小基本事件的集合,从而保证系统的稳定和安全,为控制系统故障或者为已发生故障系统恢复正常提供依据。最小割集以及最小路集的数据信息表如表5-表8所示。
表5 最小隔集表
表6 最小割集底事件表
表7 最小路集表
表8 最小路集底事件表
2.2.2定量分析
故障树定量分析[2],即对系统的可靠度、不可靠度以及相关事件的重要度等指标进行量化,通过数学手段实现对系统的安全性、稳定性与相关因素之间的影响关系以及各构成元件对安全性的重要度等方面的量化研究。根据故障树定量分析的结果,指导系统模块诊断顺序,尽早发现故障源。
底事件的概率设定,一般是由工程技术人员或者领域专家通过界面进行设置,同时,也可以通过对故障历史进行统计,计算各个事件发生概率。最小割集故障概率等于它所包含的各个底事件概率的乘积,故障树顶事件的概率可以根据其逻辑关系式推算出来。
假如各个底事件是相互独立,各个割集的概率为割集中各个底事件发生概率的乘积。Fs表示顶事件发生概率,n表示底事件的个数,m表示MCS的个数,FiFj表示MCS的概率积,顶事件发生的概率近似为:
(1)
为了描述故障树各个最小割集对顶事件所做的贡献大小,可将最小割集的重要度定义为:
Fc/s=Fc/Fs
(2)
式中:Fc表示最小割集的发生概率;Fs为故障树顶事件的发生概率;最小割集重要度Fc/s是最小割集概率占故障树顶事件的概率的比率。
以MIO控制电路电源断开故障树为例,如图2所示,介绍对故障树的定性分析。MIO控制电路电源断开故障树的底事件概率如表9所示。经过计算,最小割集表示如下:{F001080000103601},{F001080000103603},{F001080000103604},{F001080000103606},{F001080000103607 },{F001080000103608 }。
表9 MIO控制电路电源断开故障树底事件概率表
根据概率统计知识计算故障树各中间件与顶事件的概率如下:
PF001080000103605=1-(1-PF001080000103606)(1-PF001080000103607)×
(1-PF001080000103608)=0.519 8
PF001080000103602=1-(1-PF001080000103603)(1-PF001080000103604)×
(1-PF001080000103605)=0.366 5
PF001080000103600=1-(1-PF001080000103601)(1-PF001080000103602)=
0.458 2
PF001080000103600为顶事件MIO控制电路电源断开故障发生的概率,然后根据式(2)计算出各个最小割集的重要度,如表10所示。
表10 MIO控制电路电源断开故障树最小割集重要度
根据表中数据可以得出,最小割集{F001080000103608}重要度最大,规则匹配时,与其对应的规则进行最先匹配,若匹配不成功,则按重要度的大小,依次向后匹配。
诊断推理模块,根据输入的故障特征,利用知识库知识,进行故障树的查找完成故障推理,是系统的核心模块。诊断推理首先进行故障字典查找,其流程图如图4所示。故障推理的方法主要包括:正向推理,即从事实到目标的推理,通过一定规则来证明故障原因的正确性;反向推理,即自顶而下的推理,找出故障发生的根本原因。推理解释功能在系统推理时完成对推理过程的解释,也可实现推理的人机交互,给出故障诊断策略。自动诊断则根据故障树的最小割集,直接给出故障树的失效模式。
图4 故障字典查找逻辑图
在该系统中进行故障诊断时,根据输入的故障描述信息在故障信息字典中查找故障的FactID,然后根据FactID在故障节点信息表中获取相应的故障树的TreeID,根据当前获得的TreeID查找并读取与其名匹配的故障树文本文件,然后解析存储的故障树公式,生成相应的故障树节点。通过继承Java应用开发工具包SWING中的DefaultMutableTreeNode类创建相应的树节点,以树状结构保存对应的故障树的所有信息,后续再诊断推理中则可直接调用该类的parent(),children()函数直接实现对故障的逐级正向或逆向诊断推理。利用DefaultMutableTreeNode结构创建JTree对象,实现按照层次结构可视化展示故障树的结构信息。系统程序中用到的数据结构信息如下:
故障树结构信息类
class FaultTreeNode extends DefaultMutableTreeNode
{
FactNode node;
FaultTreeNode (FactNode node )
{
super(node);
this.node =node;
}
public String toString()
{
returnnode.description;
}
……
}
JTree faultTree=new JTree(FaultTreeNode root);
在反向推理时,若当前推理已到达该故障树的叶子节点,根据该叶子节点在故障节点信息表中的信息,确定是否存在以该节点为顶事件的故障树,若不存在则推理结束,否则读取对应的故障树,继续推理。同理,在正向推理过程中,若推理已经到达顶事件,则在故障节点信息表中查询是否存在以该节点为叶子节点的故障树,若存在则查找并解析该故障树,继续进行正向推理,直到推理结束。
自动诊断推理,即直接求出故障树的最小割集。机车系统由很多系统部件组成,各个系统由若干子系统构成,各系统之间也存在一定的关联关系,任何一棵故障树可能只是系统中的一棵子树,所以给出了模块化故障树的割集计算方式。首先完成对各子树的割集及分析结果的计算,并存储这些结果,然后对总故障树进行分析。在输出总故障树最小割集时,首先遍历该最小割集合中的各个元素,若不存在以该元素为顶事件的故障树,则将该元素的遍历标志置为1,否则将该子树的割集与该割集中的其他元素进行与运算,形成新的割集集合,同时将该子树顶事件的概率作为该底事件发生的概率。将不存在元素为顶事件的割集放入割集输出队列中,直到存在割集中的元素未被遍历,则表示最终割集计算完毕。其计算流程图如图5所示。
图5 模块化割集处理流程
另外在诊断推理过程中,需要解决冲突消解问题。即在当前的推理过程中,若有几条规则同时满足,则进入推理冲突消解程序。该程序首先比较规则的匹配度,匹配度相同时考虑规则的重要度或者顶事件的概率重要度等相关信息。冲突消解原则:(1) 判断故障事实与规则的匹配度,匹配度高的规则优先选择。(2) 匹配度相同时,若为不同的故障树,则根据顶事件发生概率进行选择,若在同一故障树内,则根据其父事件概率进行选择,依次递归。
本文给出了该系统的详细设计方案,故障树的信息采用文本和数据库存储方式相结合,使故障树的结构信息与节点信息分离,减少了对数据库的依赖而造成知识爆炸,有效降低了推理诊断过程中的知识搜索空间;同时采用JAVA控件存储故障树信息,充分利用JTree控件的优势,快速实现故障的逻辑推理诊断,从而不完全依赖对知识库的搜索进行知识的推理,进一步提高了推理效率;给出了模块化故障树的推理诊断以及定性定量分析解决方案,对大型复杂系统的故障诊断具有重要意义。