APP下载

一种复杂系统的快速故障诊断方法

2016-11-23杨国振

计算机测量与控制 2016年5期
关键词:控件代码结论

杨国振,苏 健

(1.装甲兵工程学院 控制工程系,北京 100072;2.装甲兵工程学院 信息工程系,北京 100072)

一种复杂系统的快速故障诊断方法

杨国振1,苏健2

(1.装甲兵工程学院控制工程系,北京100072;2.装甲兵工程学院信息工程系,北京100072)

针对复杂系统故障诊断效率低,通用性、扩展性差等问题,提出并实现了一种基于灵巧故障树的快速故障诊断方法,首先通过诊断节点生成算法建立故障诊断树的关系,然后运用数据库技术对知识库进行处理,最后采用图形界面实现人机交互;该方法将故障树、数据库和虚拟界面进行融合设计,实现了故障的快速诊断和推理的动态更新,并在多型火炮控制系统的故障诊断中得到应用,取得了重大效益。

灵巧故障诊断树;快速诊断;诊断节点;ACCESS数据库

0 引言

现有的故障诊断方法可划分为基于解析模型的方法、基于信号处理的方法和基于知识的方法[1]。基于知识的方法是目前研究和应用的热点,当对象的数学模型难以获得,且无法得到输入输出信号时,多采用该方法[2]。基于知识的方法又包括神经网络法、模式识别法、模糊推理法、故障树分析法、专家系统法、粗糙集法和事例推理法等,它们都有各自适用的情形,前人也已作出了大量研究]。

针对实际系统,在分析和掌握该系统的故障现象及其对应的故障机理后,为提高故障诊断效率,可采用故障诊断树分析法,但目前基于该方法所开发设计的故障诊断软件较少。

本文运用故障诊断树分析法原理,基于Labwindows CVI树控件,开发设计了相应的故障诊断软件。该软件可应用于装甲车辆炮控系统、汽车发动系统、自动控制系统等诸多复杂控制系统的快速故障诊断,以确定故障部位,进行故障定位。

1 总体思路

故障诊断树分析法是一种图形演绎法,包括矩形事件、菱形事件和圆角矩形事件三类事件符号,矩形事件为顶事件,代表故障现象节点,菱形事件为中间事件,代表测试判断节点,圆角矩形事件为底事件,代表故障源节点。每个菱形事件有测试结果为真和测试结果为假两个分支,事件之间通过有向连接线表示逻辑层次关系。故障诊断树是由故障现象与故障原因之间的测试结果驱动的,上一步的测试结果直接驱动下一步的测试内容。本方法中,将故障诊断树由图形表示法转化为文字表示法,通过设计相应的文本字段来对应矩形事件、菱形事件和圆角矩形事件。

实现快速故障诊断的总体思路为:首先建立知识库,将复杂系统的故障现象及故障原因以故障诊断树的形式进行存储;然后借助Labwindows CVI树控件,将故障诊断树直观地显示给用户,指导故障诊断。用户既可查看完整的故障诊断流程,实现基于故障诊断树的单步故障诊断;又可对故障诊断树进行增加、删除和修改节点等操作,根据实际情形修改和完善故障诊断树,这相当于一个专家系统。涉及到的关键技术有ACCESS数据库通信技术,Labwindows CVI树控件操作技术,以及实现故障诊断树各类操作的算法。

2 实现步骤

快速故障诊断的具体实现步骤如图1所示。

图1 复杂系统快速故障诊断软件实现步骤

2.1梳理系统故障诊断树

故障诊断树分析法是实现快速故障诊断的基础,我们首先需要依据专家知识和实践经验,列举系统可能存在的故障现象,并逐步分析产生各故障现象的原因,以及其中的逻辑关系,梳理出系统的故障诊断树,建立知识库。

2.2生成诊断节点,建立知识库

梳理出系统的故障诊断树后,根据其中的逻辑关系,编写诊断节点代码,并录入ACCESS数据库,故障诊断树是以文本的形式存储在ACCESS数据库中的。

为实现功能,我们设计数据库GZZDS.mdb,包含两类数据表,一类是故障现象总表,命名为“gzxxzb”,另一类是各故障现象对应的故障诊断树存储表,命名规则为“table”+“故障现象序号”。

故障现象总表存储了被诊断系统或设备内的全部故障现象,包括数字字段“ID”和文本字段“gzxx”,前者是故障现象依次排列的序号,后者是对各故障现象的具体文字性描述。

故障诊断树存储表的个数由故障现象总表中的故障现象总数决定,每个表包括数字字段“ID”、数字字段“层次”、文本字段“内容”和数字字段“类型”。“ID”字段代表当前记录的序号;故障诊断树的层次结构关系通过“层次”字段识别,它的命名规则为:表的首行记录代表故障现象,“层次”是 “0”,自第2行开始是展开的故障诊断树,第1个判断节点的 “层次”是“1”,结论为真的节点“层次”是“10”,为假的节点“层次”是“11”,依次类推,后一层节点“层次”是前一判断节点“层次”值尾部添加“1”或者加“0”,当结论为真时,添加“1”,反之加“0”;“内容”字段是对应故障诊断树每一步的具体操作提示,或为判断节点,或为结论节点;“类型”字段包含“0”、“1”和“2”3种,该表的首行记录是故障现象,“类型”为“0”,其余记录若是判断节点,“类型”为“1”,若是结论节点,“类型”为“2”。举例说明某故障诊断树的存储,如图2所示。2

图2 某故障诊断树的存储

.3建立Labwindows CVI软件平台与数据库的通信连接

将节点代码录入ACCESS数据库后,通过SQL Toolkit工具实现Labwindows CVI软件平台与数据库的通信交互[9],继而实现后续功能,包含以下几个步骤。

1)建立数据库连接:

sprintf(strDataSource,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s","GZZDS.mdb");

db Handle=DBConnect(str DataSource);

2)激活SQL语句:

db Table=DBActivateSQL(db Handle,"SELECT*FROM gzxxzb");

3)处理SQL语句:

DBBindColChar(db Table,3,256,neirong,&dbstatus[0],"")将字符型字段绑定到变量中;

DBBindColInt(db Table,4,&leixing,&leixingstatus)将整型字段绑定到变量中;

resCode=DBCreateRecord(db Table)创建一条记录;

resCode=DBPutRecord(db Table)将当前记录存储到数据库中;

resCode=DBDeleteRecord(db Table)删除当前记录;

DBFetchRandom(db Handle,numberlist)随机读取数据;

number=DBNumber Of Records(db Table)返回表中记录的总数;

4)与数据库断开连接:

resCode=DBDisconnect(db Handle)。

2.4故障诊断树显示及故障诊断推理

基于Labwindows CVI中的树状控件和已经建立好的数据表,针对某一故障现象,既可完整地展示出故障诊断树,给予操作人员清晰直观的认识;也可以根据每一步的测试结果逐一显示故障诊断树,实现故障诊断推理。

Labwindows CVI的树控件提供了一组分级项目列表,可清晰地分层显示故障诊断树,常用的函数有:向控件中插入项目(Insert ListItem,可以选择插入故障诊断树的同级分支或者子分支)、删除项目(DeleteListItem)等[9]。

故障诊断推理的难点在于如何将故障诊断树存储表中的内容以符合Labwindows CVI树控件操作规则的形式分层展现出来,分析如下:

1)故障诊断树中“层次”为“0”的记录代表故障现象,“层次”为“1”的记录表示第1个判断节点,除这两条记录外,其余记录都是前一判断节点的“是”与“否”两个分支,两两配对存在。

2)构造一维层次代码数组cengciarray[],由“1”开始,将表中所有“层次”值存入该数组中,并通过冒泡法对该数组排序,这样任一判断节点的两个结论分支是前后相连的。

3)构造二维数组indexarray[m][n],第一维用于标记当前元素的序号m,indexarray[m][0]用于保存元素的层次代码,indexarray[m][1]用于保存当前元素所处故障诊断树中的位置,我们称之为索引代码。规定indexarray[0][0]=1,indexarray[0][1]=0,表明indexarray[m][n]的首元素是层次代码为1的记录,且该元素的索引代码为0。

4)确定每一条记录的索引代码,该值是不断动态变化的,具体方法如下。

1)初步计算每条记录的索引代码。“是”结论节点的索引代码由它的判断节点的索引代码“+1”,“否”结论节点的索引代码由它的判断节点的索引代码“+2”,层次代码除以10后取整得到与其相关的判断节点。

例如:由数组cengciarray[]中层次代码为1的元素开始,该元素表示故障诊断树的首个判断节点,它的索引代码为0,它的两个结论分支的索引代码分别是1和2,将它们的层次代码和索引代码存入数组indexarray[m][n]中。

2)对索引代码进行修正。从indexarray[m][n]的首元素开始循环遍历该数组,如果某个元素的索引代码等于它后面元素的索引代码,则该元素的索引代码加2,其余元素的索引代码保持不变。

3)不断重复第一步、第二步,直至获得cengciarray[]数组中所有元素的索引代码,并依次存入indexarray[m][n]数组中。

通过以上算法,可将任一故障诊断树存储表中的记录按照故障诊断树的层次关系存储在数组indexarray[m][n]中。以图1的存储表为例,确定indexarray[m][n]中数值的具体步骤如表1~5所示。

表1 indexarray[m][n]中数值确定步骤一

表2 indexarray[m][n]中数值确定步骤二

表3 indexarray[m][n]中数值确定步骤三

表4 indexarray[m][n]中数值确定步骤四

表5 indexarray[m][n]中数值确定步骤五

5)完整展示故障诊断树。依据indexarray[m][1]中数值由小到大的顺序,借助Labwindows CVI树控件操作函数,依次显示数据表中的各条记录。

6)故障诊断推理。故障诊断推理是由判断节点的测试结果驱动的,通过故障诊断树存储表中各条记录的层次代码实现该功能。假设当前判断节点的层次代码为cengci,单步诊断选择“是”结论时,树控件显示层次代码为cengci*10的那条记录,选择“否”结论时,显示层次代码为cengci*10+1的记录。最终,通过当前节点的类型代码判断单步诊断是否完毕,当该值为“2”时,表明得到故障结论,诊断过程结束。

2.5故障诊断节点的编辑

由于知识经验的不准确或不完备,我们先前梳理的故障诊断树可能存在错误,这时允许操作人员对故障诊断节点进行编辑,即对数据表中存储的记录进行修改。

操作人员可修改、增加或删除故障诊断树的节点,在Labwindows CVI平台中,首先通过Get CtrlIndex函数获得树控件的焦点,即需要进行操作的节点,再基于indexarray[m][n]数组的索引代码实现对故障诊断树存储表的识别,继而对存储表进行修改、增加或删除操作。应注意,增加节点时,首先将所选择的结论节点类型改为判断节点,然后为判断节点成对添加“是”与“否”两个结论节点;删除节点时,是删除所选节点的所有后续节点。

2.6故障结论存储与显示

故障诊断推理结束后,可存储故障结论,并能与数据库实现交互通信,读取历史数据。当选择某故障现象后,可显示出该故障现象发生的总次数及其对应各故障原因的次数。这一功能是通过设计数据表“gzxxcc”实现的,具体方法类似于2.2中对数据表进行的相关操作,此处不再赘述。

3 故障诊断应用实例

3.1软件界面设计

故障诊断软件包括主界面、故障诊断界面以及与诊断节点操作相关的界面,可实现以下具体功能:

1)故障现象选择。进入程序主界面后,显示出系统所有可能存在的故障现象。选择某个故障现象,点击“开始”,进入故障诊断界面,该界面将故障现象和首个判断节点自动显示出来。

2)查看流程。点击“查看流程”,可将该故障诊断树直观全面地显示。

3)单步诊断。点击“单步诊断”,根据故障诊断树的提示,选择判断节点的结论“是”或“否”,并可通过“返回”按钮回到上一步,最终弹出“注意”对话框,提示故障诊断完毕,得到结论。

4)修改节点。选择某节点,点击“修改节点”,可对节点的类型或内容进行修改。

5)增加节点。选择某结论节点,点击“增加节点”,自动将该节点变为判断节点,并可以成对添加它的“是”与“否”结论节点。

6)删除节点。选择某节点后,点击“删除节点”,即可删除后续所有节点。

7)故障结论存储与显示。某单步诊断结束后,点击所弹出对话框中的“OK”,可将当前故障诊断结果存入数据库中。退到程序主界面后,在页面左侧选择某故障现象,点击“结论显示”,会弹出新的界面,以显示该故障现象发生的总次数及其对应各故障原因的次数。

3.2实例验证

以某型装甲车辆炮控系统出现“系统通电,电源指示灯不亮”的故障为例进行说明。针对该故障现象,可以查看完整的故障诊断树如图3所示,进行单步诊断时,依照提示,逐步进行,最终得到故障诊断结论为“电源电缆故障”,如图4所示,达到了预期的效果。

4 结论

图3 完整的故障诊断树

图4 单步诊断流程

本文提出了一种可应用于复杂系统的快速故障诊断方法,并开发设计了相应的故障诊断软件,经实验验证,达到了预期的故障诊断效果。该方法具有以下优点:1)直观形象,故障诊断树通过简单的二叉树将系统间的逻辑关系清晰地表达出来,判断节点与结论节点直观形象地展现了故障及其发生的原因,便于维修人员理解接受;2)针对性强,故障诊断树分层体现了与故障现象相关的测试点,不需要盲目地采集所有信号,针对性强;3)应用范围广,故障诊断树分析法可适用于各个层级的故障诊断,针对不同层次的诊断对象,进行不同的分析研究;4)用途多样,故障诊断树建立后,不仅利于维修人员的诊断工作,还有助于设备的管理、维修和技术培训。

[1]陆雪梅,尚群立.动态控制系统的故障诊断方法综述[J].机电工程,2008,25(6):103-107.

[2]朱大奇,于盛林.基于知识的故障诊断方法综述[J].安徽工业大学学报,2002,19(3):197-204.

[3]李光升,康洪铭,谢永成,等.基于BP神经网络的装甲车辆电源系统故障诊断方法研究[J].计算机测量与控制,2012,20(10):2719-2721.

[4]陈德道,安虎平,等.基于模糊故障树的数控机床故障诊断方法[J].机床与液压,2015,43(5):177-180.

[5]张雷,常天庆,朱斌,等.基于模糊推理的炮控系统性能评估与故障诊断[J].计算机测量与控制,2010,18(8):1815-1817.

[6]苏健,陈玉强,陈军伟,等.基于故障树分析的火控系统故障诊断专家系统设计[J].计算机测量与控制,2013,21(11):3008-3010.

[7]许斌,周鸣岐.测试点优化及故障诊断树生成技术[J].国外电子测量技术,2006,25(3):1519.

[8]郑伟,冯富强,皮文静,等.故障诊断树生成技术研究与实装验证[J].装备指挥技术学院学报,2012,23(1):119-122.

[9]王建新.Lab Windows/CVI虚拟仪器测试技术及工程应用[M].北京:化学工业出版社,2011.

A Fast Fault Diagnosis Method for Complex System

Yang Guozhen1,Su Jian2
(1.Department of Control Engineering,Academy of Armored Force Engineering,Beijing100072,China;2.Department of Information Engineering,Academy of Armored Force Engineering,Beijing100072,China)

For the efficiency of fault diagnosis in complex systems is low,and poor universality and expansibility,a fast fault diagnosis method is proposed and realized based on the smart fault diagnosis tree.The framework and relationship is built through the generation algotithm of diagnostic nodes,then the knowledge base is processed on data base,Human-Computer Interaction is realized by the graphical interface.To achieve the fast fault diagnosis and the dynamic data update,they are fused with the fault diagnosis tree、the data base and the Virtual Interface,the method is used for the fault diagnosis of several gun control systems,and it has great benefits.

smart fault diagnosis tree;fast fault diagnosis;diagnostic node;ACCESS database

1671-4598(2016)05-0008-04

10.16526/j.cnki.11-4762/tp.2016.05.003

TP306

A

2015-05-28;

2015-12-04。

杨国振(1977-),硕士研究生,主要从事武器系统工程方向的研究。

猜你喜欢

控件代码结论
由一个简单结论联想到的数论题
立体几何中的一个有用结论
基于.net的用户定义验证控件的应用分析
创世代码
创世代码
创世代码
创世代码
关于.net控件数组的探讨
结论
基于嵌入式MINIGUI控件子类化技术的深入研究与应用