(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf_第1页
(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf_第2页
(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf_第3页
(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf_第4页
(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf_第5页
已阅读5页,还剩76页未读 继续免费阅读

(通信与信息系统专业论文)基于bdd的动态故障树优化分析研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7 玩l 7 世乒助f 蹬艾摘要现今,故障树分析法已广泛地应用到系统可靠性和安全性的评价中。本文研究了动态建造故障树的方法,以及基于b d d 的故障树定性分析、定量分析和模块分析方法。主要做了以下几方面的工作:首先,提出了一种基于w i n d o w s 界面的计算机辅助动态建造故障树的设计思想和实现方法,并在此基础上设计开发了一套可视化动态建造故障树软件,解决了当前建树方法通用性差和工作量大的问题。其次,用基于结构重要度和基于神经网络两种方法实现了底事件最优指标顺序的确定,解决了底事件指标顺序对b d d 规模的影响问题。依据布尔函数s h a n n o n 分解和b d d 图的关系,用递归法实现了故障树向b d d 转化。再次,在基于b d d 的故障树定性分析研究中,提出并实现了基于b d d 和素数法相结合的单调关联故障树最小割集求解的新方法,用迭代法实现了非单调关联故障树质蕴含的求解。在基于b d d 的故障树定量分析研究中,实现了顶事件发生概率和绝对失效强度的求解。为解决大型复杂故障树的简化分析问题,提出并实现了基于深度优先最左遍历和b d d 相结合的故障树模块分析法。实现了计算机自动化故障树分析。通过这些方法,解决了基于布尔代数的故障树分析中长期存在的“组合爆炸”问题。最后,探讨了故障树分析法和可靠性框图法在系统可靠性研究中的关系,首次得出两者分析结果满足互补关系。关键词:故障树分析,神经网络,质蕴含,模块分析,结构重要度,最小割集,深度优先最左遍历可靠性框图法i 琦- i l7 :_ 业劬,越上a b s t r a c tn o w a d a y s ,f a u l tt r e ea n a l y s i s ( f t a ) h a sb e e nw i d e l yu s e di nt h ea s s e s s i n go fr e l i a b i l i t ya n ds a f e t yo fs y s t e m s a na c t i v ef t ac o n s t r u c t i n gm e t h o d ,q u a l i t a t i v ea n dq u a n t i t a t i v ea sw e l la sm o d u l ea n a l y s i so ff t ab a s e do nb i n a r yd e c i s i o nd i a g r a m ( b d d )w a sr e s e a r c h e di nt h i st h e s i s i n c l u d i n gt h ef o l l o w i n ga r e a so fc o n t e n t s :f i r s t ,b a s e do nw i n d o w si n t e r f a c e ,ad e s i g na n di m p l e m e n t a t i o nm e t h o do fc o m p u t e ra i d e da c t i v ef t ac o n s t r u c t i n gm e t h o dw a sp r e s e n t e d a c c o r d i n gt ot h i sm e t h o d ,t h ev i s u a l i z e da c t i v ef a u l tt r e ec o n s t r u c t i o ns o f t w a r ew a sd e v e l o p e d a n dt h ew o r s ev e r s a t i l i t ya n dh u g ew o r k i n gl o a dp r o b l e m so ff t ac o n s t r u c t i o nw e r es o l v e d t h e n t h eo p t i m a lo r d e r i n gp e r l n u t a t i o nf o rt h eb a s i ce v e n t so f f a u l tt r e ew a sp r o d u c e db ys t r u c t u r a li m p o r t a n c ea n dn e u r a ln e t w o r km e t h o d sr e s p e c t i v e l y , a n dt h er e s u l t i n gs i z ep r o b l e mo fb d da f f e c t e db yt h eb a s i ce v e n s o r d e rw a ss o l v e d a c c o r d i n gt ot h er e l a t i o n s h i po fs h a n n o n sf o r m u l ao fb o o l e a nf u n c t i o n sa n db d d ,t h ef a u l tt r e es t r u c t u r et ob d dc o n v e r s i o nw a sa c c o m p l i s h e db yr e c u r s i v em e t h o d a f t e rt h e n ,an e wm e t h o do fs o l v i n gt h em i n i m a lc u t so fs - c o h e r e n tt r e eb a s e do nb d da n dp r i m en u m b e rw a sg i v e ni nt h eq u a l i t a t i v ea n a l y s i so ff t ab a s e do nb d d ,t h ep r i m ei m p l i c a n ts e t so fn o ns - c o h e r e n tt r e ew a sc a l c u l a t e db ya ni t e r a t i v em e t h o d t h ep r o b a b i l i t ya n du n c o n d i t i o n a lf a i l u r ei n t e n s i t yo ft o pe v e n tw a sc o m p u t e di nt h eq u a n t i t a t i v ea n a l y s i so ff t ab a s e do nb d d af a u l tt r e em o d u l ea n a l y s i s ( f t m a ) b a s e do nd e p t h f i r s tl e f t - m o s tt r a v e r s a l sa n db d dw a sp r e s e n t e dt os o l v el a r g ec o m p l i c a t e df t ap r o b l e m s a n dt h ea u t o m a t i cc o m p u t e ra n a l y s i sw a si m p l e m e n t e d t h el o n ge x i s tn p( n o n - d e t e r m i n i s t i cp o l y n o m i a l ) p r o b l e m so ff t ab a s e do nb o o l e a na l g e b r aw a ss o l v e db yt h e s em e t h o d s f i n a l l y , t h er e l a t i o n s h i po ff t aa n dr e l i a b i l i t yb l o c kd i a g r a ma n a l y s i s ( r b d a ) w a ss t u d i e d ,a n dt h ec o m p l e m e n t a t i o nr e l a t i o no ft h e i rr e s u l t sw a sf i r s tv e r i f i e d k e yw o r d s :f a u l tt r e ea n a l y s i ss t r u c t u r a li m p o r t a n c en e u r a ln e t w o r km o d u l ea n a l y s i sm i n i m a lc u ts e t sp r i m ei m p l i c a n ts e t sd e p t h f i r s tl e f t m o s tt r a v e r s a l sr e l i a b i l i t yb l o c kd i a g r a ma n a l y s i sz 巧- c l - t 业太学蛳士论空己f圭l口1 故障树分析法的概念和特点故障树分析法( f t a f a u 】t t r e e a n a l 3 ,s i s ) ,就是在系统设计过程中,通过对可能造成系统故障的各利,因素( 包括硬件、软件、环境、人为因素) 进行分析,画出逻辑框图( 即故障树) ,从而确定系统故障原因的各种组合方式或其发生概率,计算系统故障概率,并据此采取相应的措施。以提高系统可靠性的一种从整体到局部的逻辑推理设计分析方法 1 1 。f t a 法具有如下特点:灵活性:不局限于对可靠性作一般的分柄,而能分析出各种故障状态。f t a 是一种图形演绎法,是故障事件在一定条件下的逻辑推理方法“1 。f t a 法的过程是一个对系统更深入认识的过程,能使分析人员把握系统的内在联系,弄清各种潜在因素对故障发生影f i 向的途径和程度。f t a 法可以定性和定量地计算复杂系统的故障率和其它可靠性参数,为改善和提高系统可靠性提供定量数据。2 研究的背景2 0 世纪六十年代,人们对系统进行可靠性分析时,主要采用的方法是先画出可靠性框图,再用“布尔真值表”或“概率图法”进行分析“”。采用这种方法虽能给出系统正常工作到某一特定时刻的概率但如果要进一步分析是什么原因使系统产生故障,或者要分析究竟哪个原因是主要的,j i 述方法就显得不够了。另外,当系统比较复杂、元部件数量大时,用“布尔真值表”或“概率图法”实际上已经不切实际。然而在同时期,随着科学技术的发展,迫使人们对这些复杂系统的可靠性、安全性作出评价。f t a 法就是在这种情况下应运而生的。1 9 6 1 年美国贝尔实验室的h aw a s t o n 首先在民兵导弹的发射控制系统可靠性研究中应用f t a 。并获得成功,为预测导弹发舶的随机失效概率作出了贡献“。1 9 6 5 年波音公司在系统安全年会f 式发栽了f t a ,引起科技人员的重视和应用。其后,波音公司研制的f t a 计算机程序,进步推动了它的发展。ft a 很快从宇航v - g - r 业k 学勰- 论女范围进入核工业和其它领域。1 9 7 4 年8 月美国发表美国商用核电站事故风险评价报告( 草案) ( 报告代号为w a s h 一1 4 0 0 ) “”。该报告的成功之处存- 丁应用了事件树和故障树分析法。它用这两种分析方法计算出初因蓐什的发牛频碹置、 程安全设施故障概率以及各神水平的放射性物质排入环境的事故概率,第一次定量地给出了核电站可能造成的风险,在和其它能源造成的风险以及社会现有其它设施的风险比较之后,令人信服地导出了核能是一种非常安全的能源的结论。从那以后,f t a 从宇航、核能进入一般电子、电力、化工、机械、交通乃至土木建筑领域。科学工作者和工程技术人员愈来愈倾向于采用f t a 作为评价系统可靠性和安全性的手段,用f t a 来预测和啥断敞障,分析系统的薄弱环节,指导运行和维修,实现系统设计的最优化。从而f t a4 - 全世界受到普遍重视,并形成了两类基本分析方法:定性分析法:在单调关联求最小割集的鳟法方面,1 9 7 1 年s n s e m a n d e r e s 提出了由底事件向上进行布尔代数展丌的上行法。1 9 7 2 年j b f u s s e l l 和w e v e s e l g 利用与门仅增加割集容量、或门仅增加割集数目的原理提出了下行法”1 ,并应用到m o c u s 程序中。1 9 8 5 年d r s h i e r 和d e w h i t e d 提出了反演法。”。在非单调关联故障树定性分析求质蕴涵的算法方面,w v q u i n e 根据奎因原理,利用对合运算提出了合取法“1 。r j n e l s o n 根据尼尔逊原理通过对布尔代数和进行两次补运算提出了双取补法“1 。1 9 7 8 年hk u m m n o t o 和e j h e n l e y 在尼尔逊原理变形的基础上,借助二叉搜索树提出了k h 算法。1 9 8 1 年m o l o c k s 综合应用模块化、逆变换和对合运算提出了洛克斯算法“1 。定量分析法:在求顶事件发生溉率力i 吼通常采用的是将最小害4 集用直接法或递归法,由相交和化为不交和来求解“。1 9 8 6 年b rl a v o n 提出了不借助割集的自顶向下的迭代算法1 1 。1 9 9 8 年闻利群提出了一种完全依赖于所要求精度的近似算法精度取舍法,在“故障树快速成算系统”软件中得到实际应用,但要同时兼顾精度和时间。2 0 0 1 年金星在布尔集合运算和不交化方法基础上,提出了直接不交化定量分析法,并已经应用到“装备可靠性和维修性评估软件c f k p i 0 ”中”。这些故障树分析技术都是基于布尔代数运算的,并在此基础上形成了一整套的分析计算方法。然而基于和尔代数的传统方法难以胜任大型复杂故障树的分析 :作,其s 阿d l 丁业 学懒“e 殳时间、空间复杂性使得大型复杂故障树的分析工作在一般的计算机上不可能实现,产生了所谓的“组合爆炸”问题“。1 ,表现在:在定性分析时,一j i ! : 用卜刖去_ ej 、行法来求最小割集。例如用下行法,要按照逻辑门规则层层展开。当邋到与门时,符输入量做逻辑积运算,增加割集的容量,当遇到或门时,各输入量做逻辑或运算,增加割集的数目,直到各部分置换到底事件为止。当与门、或门交叉出现时,割集的总数就要顺序增长。通过最小化割集求得最小割集时,就需要集合吸收运算( a u a b = a ) 对全部割集做两两比较,总的比较次数也是相当可观的。在定量分析时,要通过最小割集【良事件发生的概率算出顶事件发生的概率。由于最, 5 i j 集之间是相交的,此时如按般概率展开法引算顶事件发生的概率,其展开的项数是按最小割集的个数呈指数增氏。即使把全部最4 , 害f l 集化为不交,计算量也是非常大的。因此,“组合爆炸”问题是当今f t a z i i 9 个急需解决的问题。而b d d 技术作为故障树分析的一种新的方法,可以解决这些问题。1 9 7 8 年s h e l d o nb a k e r s 提出了一种用来定义、分析、测试和实现大型数字函数的方法,并称之为二元决:策 ( b i n a r yd e c i s i o nd i a g r a m s ) ,简称b d d “”。1 9 8 4 年w gs c h n e e w e i s s 提出了借助香农公式进行川j 尔刁i 交化的方法,显著降低了不交化的计算工作量。1 9 8 6 年r a n d a le b r y a n t 尚先通过指定逻辑变量的次序,将逻辑函数用b d d予以表示,从而使得b d d 迅速地在逻辑l u 路l - p 获得广泛的应用。1 9 9 6 年国际可靠性和维修性年会上,j o a n n eb d u g a n 和s t a c ya d o y l e 以及r o s l y nm s i n n a m o n 和j o h nd a n d r e w s 分别给出了利用b d d 进行故障恻分析( f t a ) 的思路,为解决f t a 研究中的“组合爆炸”问题指明了力i j u 和 各。1 1 | j u ,英国拉夫堡大学让”1 和法国的波尔多大学正在开展基于b d d 的f t a 研究, 二已墩得了一些成果。但在这些研究中还存在者如下术解决的问题:建树方法通用性差、运算量大;底事件指标顺序对b d d 舰模的影响较人:故障树定性分析和定量分析中存在着严重的“组合爆炸”问题:大型复杂i 牧障利n 勺处理思路尚不清晰明确;故障树分析法和可靠性框图法分析结果的关系尚朱给定量解释。为解决这些问题,本文开展了基于b d d 的动态故障捌优化分析算法研究。一丝垄:些苎兰:竺兰塑3 本文的结构安排本文研究和探讨了麟于b d d 的动态i 友障树优化分析算法,并完成了相应的软件设计。全文共分七章。第一章:简要阐述了建造故障桐的步骤和_ :j :j 法,提出了一种动态建造故障树的思想和方法,并设计了计算机实现的交互界丽、图形公共类、图形基本类、画图形、改变图形大小、拖动图形和连接图形的程序。第二章:介绍了s h a l l i n o n 分解、二7 i 决策图b d d 以及两者之问的关系。详细介绍了实现故障树向b d d 的转化的递归法思恕,并给出了其计算机实现过程。第三章:实现了确定故障捌底事件最佳顺序的丽种方法,即基于结构重要度和基于神经网络的方法。简要分析了i i _ j 障捌底m 件顺序对b d d 规模和大小的影响。总结了故障树结构重要度、b i m b a u m 熏要度以及两者关系,实现了基于结构重要度的故障树底事件最优指标顺序的确定。i :f u i 设计了丛于神经网络的故障树底事件顺序的网络模型、动量梯度下降b p 算法、训算机仿真和结果分析。最后对两种方法进行了比较。第四章:实现了基于b d d 的放障树的定性分析。在研究b d d 的基础上,提出了基于b d d 和素数法的求单调关联故障树最小割集的新算法,并用计算机程序实现此新算法。详细介绍了求非单涧关联故障树质蕴涵的迭代算法的理论依据和计算机实现。第五章:实现了基于b d d 的敞障树的定量分析。采用深度优先法搜索b d d ,真接得到故障树顶事件的不交化表达式,i i f 利川互斥事件和的概率公式,从而求出故障树顶事件发生概率的精确结梁。采川基于b d d 的方法,实现了精确求解故障树顶事件的绝对失效强度。最后通过例i fe 列b d d 法和布尔代数法分析故障树的优缺点进行了比较。第六章:实现了故障捌模块分析贷泌。在分析有向图深度优先最左遍历算法的基础上,提出了基于深度优先最左遄历和b d d 的故障树模块分析算法。给出了基于b d d 和模块的故障树定性分析和定量分析方法。第七章:利用故障树分析法和可靠性榧j 划法分别对系统进行了分析,首次得出两者分析结果满足互补关系,并证i 蜴了这恻种方法在系统可靠性分析中的联系和区别。两北t 业九学蛹士论史第一章动态建造故障树在f t a 过程中,建造故障树是第一个关键,同时是最基本、最实际的工作,在一定意义上也是最有用的环节。建捌是否完善直接影响定性分析和定量分析结果的准确性。本章首先对建造故障树的步骤和方法进行了简要阐述,然后在此基础上提出了一种利用动态建造故障树的思想,并详细介绍了它的设计和实现。第一节建立故障树的步骤和方法建造故障树是分析人员对系统设计、运行管理进行彻底剖析的过程,通过系统部件功能的相互关联,寻找系统发生故障的原因。1 1 1 建树步骤建树一般可按以下步骤进行:1 收集并分析有关技术资料分析人员首先必须熟悉系统,并收集有关系统的技术资料、设计说明书、安全报告、运行规程以及有关维修、制造等方面的资料,然后对这些资料进行研究鉴别找出导致系统顶事件的部分,根据故障树分析的广度和深度要求进行建树前的准备。故障树的广度指的是找各种功能的相互关系,故障树的深度指的是找失效的共性,从而从根本上改善系统的可靠性和安全性。2 选择顶事件顶事件是系统最不希望发生的故障状态。它的选取通常需遵循三点;顶事件的发生与否必须有明确定义;顶事件能按逻辑关系迸一步分解;顶事件能定量地度量。3 建造故障树建造故障树实质是找出系统故障和导致故障的诸因素之间的逻辑关系,并将这种关系用特定的图形故障树表示出来。4 故障树的简化根据故障树的广度和深度以及系统的边界条件,将一些对系统影响不重要的故障事件和重复考虑的故障事件从故障树中删除。i t 矿d l 7 :_ 业 ;,贸茗憧1 1 2 建树方法建树方法一般可分为两类:演绛法和计算机辅助法。常见的几种方法有:1 演绎法又称为人工建树方法,是通过人工分析顶事件的发生原因和过程,出顶事件出发循序渐进地寻找每一层事件发生的所有可能的原因,直到底事件为止”1 。其步骤是:写出顶事件符号,作为第一行:在其下面并行地写出导致顶事件发生的直接原因包括软硬件故障、环境因素等,作为第二行,把它们用楣应的符号表示出来,并用适合的逻辑f 3 和顶事件连接:如果还要分析导致这些故障事件发生的原因,则把导致第二行那些故障事件( 称为中间事件) 发生的直接原因作为第三行,用适当的逻辑门与第二行的故障事件相连接;按照这种方法步步深入,一直追溯到引起系统发生故障的全部原因,或者其故障机理和概率分布都是已知,不需继续分析的底事件为止。它的优点是整个过程都是人的思考( t h r o u g ht h i n k ) 过程,使建树工作者更深入地了解系统。缺点是:费时、费钱,加之人的差异影响较大,对含有复杂控制回路的系统,建树有困难。2 合成法( s t m )利用计算机辅助建树,主要是针对系统硬件失效而建造故障树。它的思想是:通过计算机程序将一些分散的小故障树按一定的分析要求自动地画成分析人员所要求的故障树。其步骤是:根据每个部件的失效模式建立对应的部件失效传递函数;输入系统的原理图和边界条件;根据故障事件的类别由计算机进行相应的处理:第一类故障事件作为顶事件,第二、三、四类由部件失效传递函数库找相应的小故障树;进行编辑,程序的输出就是对应的故障树。合成法的优点是得到的故障树不因人而异,是一种规范化的建树方法。缺点是不能考虑二次失效和部件有反馈作用的失效事件,不能通过分析系统从而彻底地了解系统,也不能有效地考虑环境条件和人为失误的影响。3 决策表法( d e c i s i o nt a b l e )利用计算机辅助建树,是在真值表基础上发展而成的。其步骤是:建立部件决策表;简化完全决策表;找出发生顶事件的关键决策表;由关键决策表可画出故障树。i 巧j l t 韭丸学硕l ? 论文其优点是适合于有反馈控制的化工系统或多状态系统故障树的建造。这些故障树一般都属于非单调关联故障树。在这三种基本方法的基础上,根据具体情况提出了许多改进算法,如分层法“1 、递归算法”1 、有向图法“1 、合成算法”1 、节点关系法”等。第二节动态建造故障树的设计和实现在综合国内外建造故障村的相关方法雨1 技术“”“1 的基础上,我们提出了种采用基于w i n d o w s 界面的计算机辅助人工的实时交互式动态分层建造故障树的方法。它通用性强,并大大减少建树工作量。1 2 1 分层建树的思想和实现故障树分析是从顶事件开始,然后找出那些能直接促成顶事件出现的因素,层层深入,一直追溯到那些原始的、其失效机理和概率分布都是已知从而不需要再继续分析的因素即底事件时为止。这样,对于每一棵故障树,可以看成是一层一层衔接而成的,最上层为顶事件,最下层为只有底事件的一层。如图1 1 所示的故障树便可以看成是由3 层构成。第一层第二层第三层图1 1 故障树分层示意图对于每一层,我们所需的信息只是事件的个数和各个事件与下一层事件的逻辑关系,层与层之间的关系可用这种逻辑关系和各事件的分支数来描述( 基本事件的分支数为o ) ,上一层各事件分支数之和就是下一层的事件总数。这样就可以把一棵故障树以层为单位,采用分层的思想,用各层事件名称和各事件分支数来完整描述。基于以上的分层建树的思想,采用数组的方法柬描述故障树的所有信息( 包括每层本身的信息及层与层之间的衔接信息) :! 型! ! 坐苎兰:竺兰:型用二维数组s i , g a ( i ,) 来保存第i 层第- ,个事件与下层的逻辑关系,采用0 ,1 ,2 ,3 等符号来表示这种关系,其中0 表示带与门的中间事件,1 表示带或门的中间事件,2 表示基本事件,3 表示未探明事件。用二维数组d p a r t m e n t ( i ,) 表示第i 层第,个事件的分支数。用数组来e v e n t n u m ( i ) 表示每一层的事件总数,有效地实现了层与层之间信息的传递其中e v e n t n u m ( 1 ) = 1 ,e v e n t n u m ( i ) = 咖a r t m e n t ( i l ,j ) ,( f - 2 ,3 ,一,”) 。1 2 2 动态建树的思想和实现动态建造故障树采用的是基于i y n d o w s 消息处理机制的计算机辅助人工建树的实现方法。故障树基本图元的操作一般按如下步骤来完成:选择图元:计算机根据鼠标点击的故障树图元按钮自动识别出要绘制的图元;绘制图元:根据鼠标在图形区拖动的位置用鼠标事件自动绘制出选中的图元;调整图元:利用鼠标事件对绘制的图元进行图形大小和位置自动调整:连接图元:通过鼠标操作图元的指针变量来连接调整好的各个基本图元:标注图元:通过鼠标操作浮动板进行图元所代表事件内容与概率值的输入;整个故障树的绘制采用自上而下进行,并可根据需要任意给某个门族( 门及其下一级包含的子门、事件的总和) 添加新的元素,直至完成所有门族及其所有成员的绘制。同时,系统能自动识别门与事件之间的关系。下面将着重阐述图元的一些基本操作:一建立图元类故障树是一种图示模型,它是由各种事件的代表符号和描述事件f i l _ l 逻辑因果关系的逻辑门符号组成的倒立树状的逻辑因果关系图。因此,在画树前必须建立图元符号及相应的图元类函数,供建树时使用。我们在设计时,根据情况把图元类设计分为了两类:图元公共类和图元基本类。1 图元公共类在建造故障树时,故障树中的各种图形符号( 事件、逻辑门等) 有一些相同的元素,如记录它们在屏幕上的位置、移动、删除、改变大小等,因而设计了一个公共类模块d r a wo b j e c t 类来存放图元的共同元素。在d r a wo b j e c t 类有以下几个重要的事件和函数:i n i t i a l i z e 事件和t e r m i n a t e 事件两北丁业_ 学嘲t i 鬯史i n i t i a l i z e 事件包含了对象刨建时所需的所有代码。通过类属c o l l e c t i o n 类来定义集合,需要多少集合对象,就建立多少c o l l e c t i o n 对象即c o l l e c t i o n 类的实例。用n e w 关键字创建集合的实例,并且在变量中记录对该实例的引用。t e r m i n a t e 事件包含了撤消对象后进行清理的所有代码,在类终止后破坏集合。c o u n t 函数c o u n t 函数用来检索集合中的元素数。在故障树操作时,首先要根据图元在集合中的位置判断出执行当前操作的圈元:同时在增加或删除图元时会导致集合中的元素数目的变化。基于此,在公共类中定义了c o u n t 函数,其函数值主要由i s o b j e c t 函数使用,用来判断个点和集合中图元的位置关系。r e m o v e 函数r e m o v e 函数用来删除集合中的元素的。通过在窗体的点击鼠标确定变元v n t i n d e x的值,根据v m i n d e x 值来删除其在集合中对应的元素。d r a w 函数d r a w 函数用来绘制全部图元。先清屏,然后遍历集合,再调用相应的图元绘制方法绘制全部图元。s a v e 函数和l o a d 函数s a v e 函数用来保存图元数据信息到文件中,以便下次打开时仍可识别出各图元,并进行各种操作。l o a d 方法用来读文件数据。要让故障树在屏幕上显示,就用l o a d 函数加载出要打开文件中的所有图元。i s o b j e c t 函数i s o b i e c t 函数用来判断输入点( x ,y ) 是否在某个图元上,返回值为该图元在集合中的位置。首先通过调用图形类模块中的i s c u r r e n t 函数来判断一个点是否和故障树中的某个点存在着具体的位置关系,然后根据返回值来确定用户想进行的操作。可以蜕它是使软件完成交互式操作的主要部分。2 图元基本类在公共类d r a wo b j e c t 设计好后,才能在各个单独类里详细定义各种操作的具体实现方法,在每个类中加入自己特定的成员函数和成员变量,如每个类都要有在屏幕画图的功能,不同的类所画图形不同,画图函数也就不同,这样就需要在每个类中都加入相应的画图的成员函数。s e t p o i n t 函数s e t p o i n t 函数用来设置坐标点。一般来说,绘制一个图元只需要两点就够了,用l i n e 函数可绘制顶事件,用c i r c l e 函数可绘制底事件。因此,用s e t p o i m 函数柬设置两点,这两点就成为图元的基本要素,每个基本图元类中的s e t p o i n t 函数基本相同,根据p o s i t i o n 的值进行设置:值为1 时设置第一点坐标;值为2 时设置第二点坐标。壁兰! ! 坠! :丝! 堕墨s e t o l d p o i n t 函数s e t o l d p o i n t 函数是用来设置参考点坐标的。移动基本图元时,只是图元位置发生了改变,图元上的各个点的相对位置没有改变。因此,在每个基本图元类巾设置s e t o l d p o i n t 函数,给每个图元设置个参考点,这个参考点是由鼠标在图元上按下时产生的如果鼠标有移动动作,则这个参考点就移动到了鼠标当前的位置上;然后根据参考点的位置变化,更新s e t p o i n t 函数中两点的坐标。就可改变这个图元的位置,即相当于移动了图元。m o v e 函数和d r a w 函数m o v e 函数绘制的图元只在按下鼠标左键并拖动鼠标时显示的,它并没有真正在图形框p i c t u r e l 上绘制。因此还需要定义d r a w 函数,使得在松开鼠标按键时可以在p i c t u r e l 上绘制图形。s a v e 函数和l o a d 函数由于故障树的基本图元类型和组成不同,不能把故障树作为一个整体来保存,针对每个基本图元分别设计了s a v e 函数和l o a d 函数,实现各基本图元的保存和加载。o n 函数和i s c u r r e n t 函数通过两函数联合使用来判断一个点和图元的位置关系。其中o n 函数直接编写在i s c u r r e n t 函数中。输入事件内容的代码在绘制故障树时肯定要给不同的事件输入它的内容和发生概率。每一个不同的事件符号中包含不同的事件内容,为了能够简单、快捷地输入和编辑事件内容并使其在屏幕上显示,作为这个事件类的一个属性,这样就可以方便地进行操作了。二、绘制图形动态分层建造故障树是基于w i n d o w s 界面的,建树时使用鼠标作图。w i n d o w s应用程序基于消息处理机制,通过处理w i n d o w s 消息来控制程序流程。当程序窗口中有事件发生时,必须定义这个事件的消息处理函数来响应鼠标的动作。为了响应在程序窗口中鼠标的画图动作,添加事件p i c t u r e lm o u s e d o w n ( 鼠标左键按下) ,p i c t u r e lm o u s e u p ( 鼠标左键抬起) ,p i c t u r e lm o u s e m o v e ( 鼠标左键拖动) 等消息处理函数,并在这些函数中加入响应的处理代码。基本的思路是鼠标按下并拖动时,在程序窗口中绘制表示鼠标移动的矩形方框;鼠标抬起时,记录下鼠标起点和终点的坐标,抹去表示鼠标移动位簧的矩形方框:然后生成相应图形类的一个实例,把6 “面记录下的鼠标起点和终点的坐标保存到这个实例的成员变量mr e c t 中,最后根据这些坐标值在程序中画出相应的故障树图形符号。v b 的s d i 应用程序中,视图窗口的绘制功能是由视图类的d r a w 函数来完成的,所以要在d r a w 函数中加入相应的代码调用相应的画图函数。而在p i c t u r e lm o u s e u p的消息处理函数中,要调用d r a w 函数对视图窗口进行更新,使得每次鼠标作阁之后,新的图形都显示在屏幕上。这里存在着一个问题,鼠标动作之后,程序画图时如何知# t f c l - t 监 学蛹l 论立道应该画哪个图形呢? 这个问题可以通过设置一个标记变量来解决:在视图类( 也可以是其它的类,选择视图类可使编程简单方便一些) 中添加个标记变量的不同数值来代表。画图前先选择要面的图形,根据所选择的图形对这个标记变量赋值。鼠标作图之后,在p i c t u r e l m o u s e u p 的消息处理函数中检测这个标记变量,根据这个值生成相应图形类的实例,记录下这个实例的指针,把这个指针传给d r a w 函数,d r a w函数中只要简单地调用这个指针所指地址里的砸图函数就可画出f 确的图形。在类模块中我们已经定义了不同函数来对各神图元进行绘制、移动、缩放等操作。这里我们所要做的就是根据具体的情况( 鼠标的不同事件) 判断使用什么函数,在鼠标事件中调用相应的函数。三、图形大小的改变和拖动图形画好后很多时候我们可能对它不太满意,需要改变图形的大小和位置。操作方式是鼠标位于图形的边框或边角上的特定区域内时,按下并拖动鼠标可以改变图形的大小;鼠标位于图形上方时,按下并拖动鼠标可以改变图形的位置。实现图形大小的改变和图形拖动也是在鼠标事件中加入相应的代码,这时需要判断鼠标动作时进行哪种操作,画图、拖动还是改变图形的大小? 为此可在视图类中添加一个用于标志鼠标操作方式的成员变量,根据鼠标的位置、状态给这个变量赋予相应的值,在d r a w函数中检测这个变量的值,以决定是画新的图形还是改变所选图形的大小和位置。四、连接图形上面的设计工作完成后,已经可以在程序窗口中绘制故障树中的各种图形符号并改变图形的大小或拖动图形。要完成故障树的作图工作,还要把这些图形符号连接起来,组成一棵完整的故障树。程序通过存储生成的图形类实例的指针来保存已绘制的各个图形的各个图形符号,图形的连接是通过操作这些指针来完成的。前面已经提到过,在类c g r a p h i c s 中有一个成员变量用来记录上一级图形指针( 父指针) 。为了设景连接关系,我们采用二叉树的数据结构进行存储。其数据结构示意图见图i 。在类c g r a p h i c s 中再添加两个图形指针变量:左指针和右指针,左指针用于记录下级图形的指针;由于故障树中逻辑门的输入可能不止一个当几个事件同时输入到一个逻辑门时,可以用右指针把这些同级的图形联系起来。这样,为了设置连接关系在类c g r a p h i c s 中共设置了三个指针:父指针、左指针和右指针,采用三重链式的存储结构进行存储。在程序中,我们通过给这些指针赋值( 有些指针变量的值为空,比如顶事件的父指针和底事件的左指针) 来设罱连接关系。设置完毕,根据这些指针的数值把各个图形符号连接起来,组成一棵完整的故障树,五、标注图元事件内容文字与基本事件概率值的输入,通过浮动板进行。对所选中的门族成员单击鼠标右键即弹出浮动输入板。故障树的增删编辑,可通过工具栏或菜单进行,所删除的成员可恢复。题耗t 业凡学碛| :论曼第三节动态建造故障树软件的实现动态分层建造故障树软件主要由三部分组成,分别为:用户界面和树图显示界面,主要完成用户选择各种文件操作和选择绘制故障树的图元符号,并在界面上进行绘图,同时将绘制的树图实时地显示给用户;事件和逻辑门属性界面,主要完成事件描述文字和发生概率的输入,并描述层与层之间的关系,同时将这些参数和关系传到程序内核中;程序内核,主要完成绘制图元时的各种鼠标操作。1 3 1 软件界面设计动态建造故障树软件的主界面如图1 2 所示,用m i c r o s o f t 公司的v i s u a lb a s i c 软件来开发。图1 2 动态建造故障树软件的主界面设计过程中用到了如表1 1 中的控件。表11 控件的对象属性对象设置作用类型名称属性设置值f o r mf o r m lc a b t i o nf a u l tt r e e画图程序窗体p i c t u r e b o xp i c b a c k g r o u n dv i s i b l et r u e放置绘圈区域p i c t u r e b o xp ic t u r e lv is i b l et r u e绘图区域( 容器)h s c r o l1 b a rh s f r 0 1 】v js i b let r u e水平滚动条v s c r o l1 b a rv s cv 0 1 v js i b let r u e乖直滚动条t 0 0 1 b a rt o o b a r la 1 i g n1 一v b h ll g n t o p一般的文件操作t o o l b a rt o o l b a r 2a 1 i g n1 一v b a li g n t o p故障树的各种幽元符号c o m m o n d j a l o gc o m o n d i a l o g lf j l t e r幽形文件公共对话框i m a g e l is ti m a g e l i s t lu s e m a s k c o l o ft r u e存放t o o l b a r i 中的幽标i m a g e l is t m a g e l js t 2u s e m a s k c 0 1 0 rt r u e存放t o o l b a r 2 中的图标一一! ! 垄! :丝垒! :竺:! 篓丝软件采用了经典的w i n d o w s 风格,包括了标题栏、菜单栏、工具栏、绘图区、滚动条和状态栏。菜单栏中的文件、编辑和帮助菜单均与w i n w o r d 等软件基本相同,勿需介绍。故障树菜单中主要用来选择绘图时所要用的事件、逻辑门、连线或转移符号。分析菜单中主要是使用者在绘制完故障树网后选择要进行定性分析还是定量分析,软件使用者可根据不同系统分析的目的作出适当的选择。工具栏,又称快捷按钮栏,是为了方便软件用户进行软件操作而设置的。它的功能完全可以在菜单栏中实现。我们设计了两个工具条,第一个工具条主要用来完成一些文件编辑和帮助的基本任务:第二个工具条主要在故障树建造时选择各神图标时使用,它的各个按钮要完成的功能利名称如表1 2 所示。表1 2 故障树各种图元、名称及作用种类名称i 蚓形符号种类名称蚓形符号顶事件口与门由底事件6城门由中间事件 刍非门由非基本事件 逻辑fji优先与门事件条件事件 3异或囱房形事件r n 组合门囱转向禁门b o转移转此- a直线连线绘图区是用户绘制故障树图的区域,可对绘制的树图进行编辑、修改和删除。滚动条包括了水平滚动条和垂:疆滚动条。通过移动滚动条可以扩大绘图区域,更方便绘图的操作和树图的显示。状态栏用来显示当前正在进行的任务。i 巧- - l t 鳇k 学鼬 一论殳1 3 2 图元类设计程序中建立了1 个公共类和1 6 个基本类,其名称和作用见表1 3 所示。表i 3 幽元类的名称及其作用种类名称作j _ j公共类d r a w o b j e c t 类定义公共操作方法d r a w - t o p _ e v e n t 类顶枣件的绘锩4 及其相庶操作d r a w _ b a s i c e v e n t 类底事件的绘制及其相席操作d r a wm j d d l e e v e n l 类中间事件绘制及其相应操作d r a wn o n b a s i c e v e n t 类非基本事件的绘制及其相应操作d r a w _ t i a o j i a n g _ g v e n t 类条件事f l :的绘制及其相应操作d r a w _ f a n g x i n g _ e v e n t 类房形事件的绘制及其相应操作d r a wa n d _ g a t e 类与门的绘制及其相应操作基本类d r a w _ o rg a t e 类或门的绘制及其相应操作d r a w n o n g a t e 类非门的绘制及其相应操作d r a w p r i o r i t y a t e 类优先与门的绘制及其相应操作d r a w n o r o a t e 类异或门的绘制及其相应操作d r a w _ r n _ 6 a t e 类r n 组合门的绘制及其相应操作d r a w _ j i n a t e 类禁门的绘制及其相应操作d r a w z h u a n x i a n g 类转向符号的绘制及其相应操作d r a w _ z h u a n c i 类转此符号的绘制及其相应操作d r a k _ l i n e 类避线的绘制及其相应操作1 3 3 内核程序流程1 m o v e 函数的实现在所有画图程序中,采用的大多是被称为“绘制橡筋线”的方式,因为它可以随鼠标的移动而发生伸缩变化。使用这种绘图方式的好处在于可以很直观地调整图形的大小和形状。采用m o v e 函数可实现这个功能,其流程如图1 3 所示。要绘制橡筋线,就必须连续擦除前一条直线。要擦除前一条直线并显示新绘制的直线,就必须绘制两条线,其中一条在起点和旧终点坐标之间( 用来擦除前一条直线) ,另一条在起点和当前点之间。将d r a w m o d e 设置为7 ( 异或模式) 即可实现擦除功能。2 d r a w 函数的实现采用d r a w 函数,在松开鼠标按键时可在p i c t u r e l 上绘制图形。此时将d r a w m o d e设置为1 3 ( 复制笔模式) 。在绘制宄图元以后,还需要恢复绘图区域的原始设置,即再次将d r a w m o d e 设置为7 ,这样就可以在移动,缩放图元时也使用异或模式来擦除旧的图元。其流程如图1 4 所示。积乾7 7 、也凡学峨| 论文保存绘蹦模式保存前景色上殴置画笔为“异或”模式设置前景色为“异或”模式0删除原来图元显示jl 根据图元要改变的方式更新相应的坐标值上重绘幽元0恢复绘图区原始

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论