《39闫斌论文.docx》由会员分享,可在线阅读,更多相关《39闫斌论文.docx(23页珍藏版)》请在课桌文档上搜索。
1、山西农业高校毕业论文农用柴油机常见故障诊断系统的探讨与开发作者:刘建理指导老师:贾利恒专业:计算机应用技术学院:计算机科学与技术学院中国山西太谷2006年09月摘要11弓I言21.1 探讨本课题的目的和意义21.2 本课题国内外探讨现状21.3 探讨内容及探讨方法32故障诊断专家系统分析及开发简介32.1 农用柴油机故障类型42.2 专业领域学问库的生成及学问表示42.3 开发工具简介43故障诊断专家系统的基本原理73.1 发动机故障形成缘由73.2 发动机故障诊断方法73.3 故障诊断的故障树依据原理83.3.1 数据结构基本原理及基本概念83.3.2 树状结构介绍93.3.3 发动机故障树
2、与树状数据结构103.3.4 二叉树及其操作103.3.5 森林与二叉树的转换133.3.6 故障森林与故障二叉树的转换143.4 故障诊断的学问表示143.5 故障诊断推理机制基本思想153.6 诊断流程154基于VFP的诊断型专家系统的实现154.1 概述154.2 系统功能简介154.3 系统主要实现的模块功能151.1.1 项目的建立151.1.2 学问库的建立步骤16433故障诊断推理模块164.3.4 图片资料的利用184.3.5 学问库修改完善184.3.6 学问库阅读、打印模块194.4总结19系统数据库的建立194.4.2系统特点195结论与建议205.1 结论205.2 建
3、议21农用柴油机常见故障诊断系统的探讨与开发摘要柴油机在农机作业中起着举足轻重的作用,它工作质量的好坏将干脆影响到农机工作的状况,而柴油机在工作中难免发生很多故障,须要操作人员和修理人员实时诊断解除。但有些故障引起的缘由很多,要想精确推断须要较多的学问,因此开发发动机故障诊断系统有肯定的好用价值和意义。本系统从好用角度动身,针对农用柴油机的发动机进行故障诊断专家系统的开发探讨。依据发动机故障的困难性,依据计算机数据结构原理,采纳故障树的数据结构和关系数据库原理完成学问表示,建立了较完善的学问库,实现了确定性故障诊断所需的学问库和推理机。利用MiCroSOftViSUaIFoXPrO编程工具,设
4、计并组建了农用柴油发动机故障诊断专家系统,缓解了故障诊断专家供不应求的冲突,提高了农用柴油机的常见故障诊断的效率和精确率。系统主要实现的功能包括:发动机确定性故障诊断功能,故障模糊查询功能,用户诊断数据库阅读、打印功能,学问库维护修改和可扩充功能,并配有发动机结构图,便于用户学习驾驭。关键词:柴油机,故障诊断,专家系统,学问库,故障树1引言.探讨本课题的目的和意义发动机作为拖拉机的心脏,是机车行驶的动力来源。由于它的结构困难、零件多、工作条件恶劣,因此在运行中故障最多且难解除。利用计算机对农用柴油机进行故障诊断既快速又精确,因此开发农用故障诊断专家系统是特别必要的。近年来,中小型拖拉机在农村的
5、发展较快,但运用操作人员科技文化素养总体低下,大都没有经过系统的理论学习和实践技能培训。调查结果表明,操作人员中初、中学文化的仅占47.5%,小学文化占34.3%,还有18.2%属于文盲和半文盲,真正参与过农机培训的操作人员和农机修理人员不足5%。由于他们对机械结构、原理和性能没真正了解,对故障的推断处理实力差,平常根本谈不上什么维护保养,更不用说是机械修理。农忙时间机具因出故障得不到刚好解除而延误农时的现象特别严峻。更有不少的机手在拖拉机出现冒黑烟、烧机油和难起动等故障时也不刚好检修,甚至挂挡打齿,前轮摇摆,制动跑偏等危及行车平安的故障出现时仍凑合运用,心存侥幸,带病作业。中小型农机仅能维持
6、在“能用”、“能跑”的水平,根本谈不上效益和作业质量,大大缩短了机具的运用寿命,甚至引发机械和人身故障。因此,快速、高质量地确定故障缘由和部位对复原拖拉机性能是特别必要的。发动机诊断技术能以最小的劳动消耗,快速、精确、牢靠、客观地评价发动机及其技术状况,因此,开发“农用柴油机常见故障诊断系统”具有特别重要的意义。故障诊断专家系统是一种不解体诊断过程,它将柴油机修理领域专家的学问及大量实际修理阅历进行汇总和提炼,能模拟柴油机修理专家来进行诊断的计算机灵能系统。计算机依据用户供应的故障线索及存储在计算机内部的学问库,来引导用户逐步进行深化诊断,最终确定发动机故障的部位,并提出修理建议,并不断修改和
7、完善学问库,从而达到修理专家的水平。开发农用柴油机常见故障诊断专家系统的目的是,从好用角度动身,为一般用户进行常见故障诊断专家系统的开发,以满意广阔一般用户的需求。1.2 本课题国内外探讨现状发动机故障诊断系统的发展是随着发动机工业和设备诊断技术的发展而同步前进的。20世纪80年头,出现了第一代发动机故障诊断系统OBD-I(OnBOardDiagnosis)o1982年,意大利米兰发动机工业高校首先胜利研制了发动机电系故障诊断系统,该系统采纳反向推理,学问库由100多种规则组成,主要来自修理工人的阅历和修理手册,此系统的实际目的是为了教学。日本丰田中心探讨所开发了发动机故障诊断专家系统ATER
8、X,它依据司机日常留意到现象,推断引起发动机故障的缘由及修理方法,该系统是一个产生式系统,学问结构中约120条规则,采纳正向推理,把可能的故障缘由全部输出。国内在基于学问的发动机故障诊断系统方面的探讨较晚。1988年天津工程学院的PC机上用DBASE语言开发,以TURBE-PRo1.oG语言改写的发动机故障诊断专家系统,该系统以老解放汽油车为主要探讨对象。南京高校的1998年开发的发动机故障修理专家系统的基础ABDES,运用基于CASE的推理模式,采纳可视化编程手段,供应了一个可视化的学问获得工具,可以完成基本的发动机故障诊断。这些系统普遍存在的问题是好用性差,学问库不完善,推理效率低。目前,
9、国内外对农用柴油机故障诊断系统的探讨还较少,特殊是对中小型拖拉机的故障诊断的探讨更加缺少。本课题的探讨可填充此空白,对广阔农机用户有较强的好用价值。1.3 探讨内容及探讨方法鉴于以上现状,笔者确定在这方面作些尝试。依据柴油发动机的常见故障,应用人工智能专家系统原理和面对对象的设计方法,建立学问库和相应学问表达推理机制,利用编程工具一一面对对象的可视化编程软件MiCrOSoftVisualFoxPro29,设计并组建拖拉机发动机的常见故障诊断专家系统,实现的功能包括:发动机故障诊断功能;故障模糊查询功能;用户诊断数据库阅读、打印、保存功能;学问库维护修改和可扩充的功能。另配有大量的发动机构造图和
10、修理图片,以便用户学习驾驭30。以缓解故障诊断专家供不应求的冲突,提高发动机常见故障诊断的效率和精确率。探讨方法分以下几步:收集整理发动机故障现象及解除方法;针对发动机的故障,依据计算机数据结构原理,采纳故障树的数据结构和关系数据库原理完成学问表示,建立了学问库,实现了故障诊断所需的学问库和推理机,构建发动机故障诊断系统的诊断流程;在此基础上利用编程工具MiCrOSOftVisualFoxPro,分别设计各种工作界面,实现上述功能;最终对软件反复进行测试,以进一步完善软件的功能。2故障诊断专家系统分析及开发简介2.1 农用柴油机故障类型经过分析,我们把专业领域的专家学问即发动机常见故障归纳为十
11、大类12:发动机起动困难或无法启动;功率不足;排气不正常;柴油机运转不稳;柴油机运转中有不正常响声;柴油机过热;柴油机突然自行熄火;飞车;窜烧机油;机油压力不足。2.2 专业领域学问库的生成及学问表示用合适的形式表示领域专家的学问是构造学问库的重要环节。近年来,面对对象的编程技术得到了快速发展,在此基础上发展起来的面对对象的学问表示方法为解决专家系统中的学问获得、学问表示、学问库的组织、学问推理等方面供应了特别有效的途径。为此,学问库的建立重点采纳了面对对象的程序设计语言。针对发动机的故障,依据计算机数据结构原理,采纳故障树的数据结构和关系数据库原理完成学问表示,建立了学问库,实现了故障诊断所
12、需的学问库和推理机。口用面对对象程序设计语言MicrosoftVisualFoxPro(简称VFP)开发工具开发了发动机故障诊断专家系统。该系统主要实现的功能包括:发动机故障诊断功能,故障模糊查询功能,用户诊断数据库阅读、打印、保存功能,学问库维护修改和可扩充的功能,另配有大量的发动机构造图和修理图片,便于用户学习驾驭。2.3 开发工具简介本系统采纳VFP开发工具及结构化查询语言(SQ1.),其简介如下5,4:VisualFoxPro是目前微机上优秀的数据库管理系统之一,被人们誉为“大众数据库:正如其名称中冠之的ViSUal一样,它采纳了可视化的面对对象的程序设计方法,VFP采纳的是关系数据库
13、模型,数据库系统以其开发成本低、简洁易学、便利用户等优点得到快速推广。关系型数据库运用的标准语言是结构化查询语言(StrUCtUredQuery1.anguage,SQ1.),它是操纵和管理数据库的系统软件。ViSUaIFOXPrO属于一种关系型数据库管理系统,是以肯定的组织形式存放在计算机存储介质上的相互关联的数据的集合。具有最小的冗余度,具有数据独立性、实现数据共享、平安牢靠、保密性能好等特点。关系数据库基本概念:(1)关系模式:ViSUaIFoXPrO中,一个关系就是一张二维表,每个关系有一个关系名。在ViSUalFoXPrO中,一个关系存储为一个文件,文件扩展名为.dbf,称为表。对关
14、系的描述称为关系模式,一个关系模式对应一个关系结构,其格式为:关系名(属性名1,属性名2,,属性名N)在ViSUalFoxPro表示为表结构:表名(字段名1,字段名2,,字段名N)(2)元组:在一个二维表(一个具体关系)中,水平方向的行称为元组,每一行是一个元组。元组对应存储文件中的一个具体记录。例如,职工表和工资表两个关系各包括多条记录(或多个元组)。(3)属性:二维表中垂直方向的列称为属性,每一列有一个属性名,与前而讲的实体属性相同,在ViSUalFoXPr。中表示为字段名。每个字段的数据类型、宽度等在创建表的结构时规定。例如,职工表中的职工号、姓名、性别等字段名及其相应的数据类型、宽度等
15、。(4)域:属性的取值范围,即不同元组对同一个属性的取值所限定的范围。例如,姓名的取值范围是文字字符;性别只能从“男”/“女”两个汉字中取一;逻辑型属性婚否只能从逻辑“真”和逻辑“假”两个值中取值。(5)关键字:属性或属性的组合,其值能够唯一的标识一个元组。在VisualFoXPr。中表示为字段或字段的组合,职工表中的职工号可以作为标识一条记录的关键字。由于具有某一-职称的可能不止一个人,职称字段就不能作为起唯一标识作用的关键字。在ViSUalFoXPr。中,主关键字或候选关键字就起唯一标识一个元组的作用。(6)外部关键字:假如表中的一个字段不是本表的主关键字或候选关键字,而是另外一个表的主关
16、键字或候选关键字,这个字段(属性)就称为外部关键字。在VisualFoxPro中,把相互之间存在联系的表放在一个数据库中统一管理。数据库文件的类型为.dbc例如,在职工管理数据库中可以加入职工表/工资表。在图书管理数据库中可以加入读者表/图书表/借阅表。结构化查询语言(StnICtUredQuery1.anguage)SQ1.是基于关系模型的数据库查询语言,它是一种非过程化的程序语言,也就是说,没有必要写出将如何做某事情,只需写出做到什么就可以了。写出的语句可看作是一个问题,称为“查询”(QUery),针对这个查询,得到所需的查询结果。下面是一个例子:SelectName,TotalfromC
17、lasswhereTotal600这个查询意为从数据库表Class中将总分(TOtaI)大于600的全部人选出来,并列出他们的姓名(Name)和总分(TotaI)。把SQ1.描述为子语言更适当一些,因为它没有任何屏幕处理或用户输入/输出的实力。它的主要目的是为了供应访问数据库的标准方法,而不管数据库应用的其余部分是用什么语言编写的,它既是为数据库的交互式查询设计的(因此被称为动态SQ1.),同时也可在过程化语言编写的数据库应用程序中运用(因此被称为嵌入式SQ1.)oSQ1.的优点:(1)非过程化语言SQ1.是一个非过程化的语言,因为它一次处理一个记录,对数据供应自动导航。SQ1.允许用户在高层
18、的数据结构上工作,而不对单个记录进行操作,可操作记录集。全部SQ1.语句接受集合作为输入,返回集合作为输出。SQ1.的集合特性允许一条SQ1.语句的结果作为另一条SQ1.语句的输入。SQ1.不要求用户指定对数据的存放方法。这种特性运用户更易集中精力于要得到的结果。全部SQ1.语句运用查询优化器,它是RDBMS的一部分,由它确定对指定数据存取的最快速度的手段。查询优化器知道存在什么索引,哪儿运用合适,而用户从不须要知道表是否有索引,表有什么类型的索引。(2)统一的语言SQ1.可用于全部用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及很多其它类型的终端用户。基本的S
19、Q1.吩咐只需很少时间就能学会,最高级的吩咐在几天内便可驾驭。SQ1.为很多任务供应了吩咐,包括:.查询数据.在表中插入、修改和删除记录.建立、修改和删除数据对象.限制对数据和数据对象的存取.保证数据库一样性和完整性以前的数据库管理系统为上述各类操作供应单独的语言,而SQ1.将全部任务统一在一种语言中。(3)是全部关系数据库的公共语言由于全部主要的关系数据库管理系统都支持SQ1.语言,用户可将运用SQ1.的技能从一个RDBMS转到另一个。全部用SQ1.编写的程序都是可以移植的。3故障诊断专家系统的基本原理3.1发动机故障形成缘由发动机故障形成缘由主要有:(1)本身存在着易损零件。发动机设计中不
20、行能做到全部的零件都具有同等寿命,发动机本身有些零件为易损件,如空气滤清器、机油滤清器等运用寿命较短,均需定期更换,如没有刚好更换或提前损坏发动机就会发生故障。(2)零件本身质量差异。发动机零件是由不同厂家大批量生产的,不行避开地存在质量差异。原厂配件运用中会出现问题,协作厂和不合格的配件装到发动机上更会出现问题,因此各厂家都在努力提高配件质量,消退零件本身质量缺陷。(3)发动机消耗品质量差异。发动机上的消耗品主要有燃油和润滑油等,其质量好坏会严峻影响发动机的运用性能和运用寿命。而这些用品的添加往往很难由用户来保证,稍不留意就会加入劣质燃油和润滑油,对发动机的危害极大,可能用户还没在意,发动机
21、就出问题了。(4)发动机运用环境影响。农用机械的运用环境大多较为恶劣,道路不平,严峻颠簸,长期大负荷工作,工作场所尘土较大等,发动机简洁发生故障,或引起突发性损坏。(5)用户运用方法的影响。运用方法正确与否对发动机故障影响很大。发动机运用管理不当,不能按规定进行走合和定期维护,野蛮启动等都会使发动机早期损坏和出现故障。(6)发动机故障诊断技术和修理技术的影响。发动机在运用过程中要定期修理,出了故障要做出精确的诊断,才能修好。在发动机运用、维护、故障诊断和修理作业中都须要有技术,不会修不能乱修,不懂不能乱动,以免旧病未除,新毛病又出现。发动机故障广泛地存在于发动机的制造、运用、维护和修理工作的全
22、过程,对于每一个环节都应特别留意,特殊是在运用中要留意发动机的故障,有故障要刚好发觉、刚好解除,才能使发动机在运用过程中削减出现事故。23.2发动机故障诊断方法发动机运用过程中,不行避开的要发生各种故障。农用车辆在行车途中,要由驾驶员当场检查、当场诊断、当场解除故障,才能使车辆行驶;有些故障比较大或比较困难,驾驶员较难自己解决,要由修理工来检查、诊断和解除。发动机故障千变万化,千姿百态,种类繁多,但是故障诊断的方法和步骤都是肯定的,只要基本方法正确,思路清楚,方法得当,故障诊断也是简洁做出的。发动机故障诊断的方法基本上可以归纳为12种:望问法、视察法、听觉法、试验法、触摸法、嗅觉法、替换法、仪
23、表法、度量法、分段检查法和局部拆装法等。3应用这些方法,要有理论做指导,充分了解发动机的运用和修理状况,充分了解故障的发生状况。对于发动机上出现的比较简洁的故障,只凭阅历和感官即可找到缘由和所发部位;对于疑难故障,只能凭仪器和应用特地的故障诊断设备才能找到,有了仪器和设备,也要会运用,运用中还要结合修理阅历,敏捷的运用这些故障诊断方法,对故障做出综合评价。在诊断中不断实践,不断总结和积累阅历,就会应用自如。3.3 故障诊断的故障树依据原理结合发动机故障诊断专家系统要实现的功能,经过对发动机故障的分析则可知,对于发动机故障的每一种存在的现象都有多种一级缘由与之相对应,且每一种一级缘由有可能会分为
24、多种二级缘由,甚至三级缘由。以此种思想结构可知,数据与数据元素之间的关系,正好符合计算机数据结构中树的基本特点,则对于发动机故障来说,可采纳此种数据的表现形式来完成。12数据结构基本原理及基本概念数据结构是指相互之间存在一种或多种特定的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,而是在他们之间存在着某种关系,这种数据元素相互之间的关系称为结构。依据数据元素之间关系的不同特征,通常有以下4种基本结构:集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系;线性结构:结构中的数据元素之间存在一对一的关系;树形结构:结构中数据元素之间存在一对多的关系;图状结构或网状结构:
25、结构中数据元素之间存在多对多的关系。在数据结构4种基本结构之上加载的一组操作称为抽象数据类型。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何改变,只要他的数学特性不变,都不影响其外部的运用。另一方面,抽象数据类型的范畴更广,它不再局限于各处理器中肯定一并实现的数据类型,还包括用户在设计软件系统时自己定义的数据类型。为了提高软件的复用率,在近代程序设计方法学中指出,一个软件系统的框架应建立在数据之上,而不是建立在操作之上。即在构成软件系统的每个相对独立的模块上,定义一组数据和施于这些数据上的一组操作,并在模块的内部给出这些数据的表示及其操作
26、的细微环节,而在模块外部运用的只是抽象的数据和抽象的操作,明显所定义数据类型的抽象层次越高,含有该数据类型的软件模块的复用程度就越高,所以发动机故障诊断专家系统后台的数据库要经过细致严密的思索,以提高软件的复用程度。树状结构介绍树状结构是一类重要的非线性数据结构。直观的看来是以分支关系定义的层次结构。树结构在客观世界中广泛存在,同时在计算机领域中也得到了广泛应用,尤其在数据库系统中,树形结构也是信息的重要组织形式之一。发动机故障诊断系统后台的数据库就是采纳树形结构来完成的,即故障树。树是n(n=O)个结点的有限集。在随意一个棵非空树中,当nl时,其余结点可分为m(m0)个互不相交的有限集T1,
27、T2,,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。如图3-1(图略)所示为树的示例。它是有13个结点的树,其中A是根,其余结点分成3个互不相交的子集:TI=B,E,F,K,1.,T2=C,G,T3=D,H,1.J,M;T1,T2和T3都是根为A的子树,且本身也是一棵树。例如Tl其根为B,其余结点分为两个互不相交的子集。TU=E,K,1.和T12=F都是B的子树。而TiI中E是根,K和1.是E的两棵互不相交的子树,其本身又是只有一个根结点的树,如图3-1所示(图略)。树的结构定义是一个递归的定义,即在树的定义中又用到树的概念,它道出了树的固有特性:分支分层。树的结点包含一个数据元素及
28、若干指向其子树的分支。结点拥有的子树数称为结点的度。例如在树的示例中,A的度为3,C的度为1,F的度为0。结点的子树的根称为该结点的孩子,相应的,该结点称为该子的双亲。例如,在树的示例所示的树中,D为A的子树,同时又是T3的根,则D是A的孩子,而A则是D的双亲,同一个双亲的孩子之间互称兄弟。例如,H,I和J互为兄弟。结点的层次从根起先定义起,根为第一层,根的孩子为其次层。树中结点的最大层次称为树的深度或高度。如A树的深度为4。假如将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的孩子称为最终一个孩子。发动
29、机故障树与树状数据结构发动机故障树完全符合树的各种思想特点。如图3-2(图略)所示,发动机起动困难故障树,A:表示发动机系统,第一层表示十大确定性功能故障现象;B:表示发动机起动困难;C:表示功率不足;D:表示排气不正常;E:表示运转不稳;F:表示运转中有不正常响声;J:表示机油压力不足等等。其次层表示上一级故障现象下的一级故障缘由,N:表示燃油供应系统不正常;O:表示气缸压力不足;P:表示配气机构工作不正常;Q:表示配气机构不正常;R:表示燃油系工作不正常;S:表示润滑系工作不正常等等。图3-2(图略)为发动机起动困难的故障树,B表示发动机起动困难,为故障树的根结点,下一层N,0,P为故障树
30、的子树结点即为一级缘由,再下一层则是二级缘由的树叉,二级缘由下边又包含三级缘由,即故障树的第三层,由于故障树比较大,在这里就不具体叙述了。对于发动机的故障来说有好多,依据此种数据结构可以构成多棵故障树,即为故障森林。森林是m(m=0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。二叉树及其操作在数据结构当中有一种特殊树的抽象数据类型一一二叉树。二叉树是另一种树状结构,它的特点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能随意颠倒。对于二叉树重点探讨它的存储结构及操作。二叉树的存储结构一般采纳双链式存储结构来存储,因为在二叉树的一些
31、应用中,经常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。这里提出一个遍历二叉树的问题,即如何按某条搜寻路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。”访问”的含义很广,可以是对结点作各种处理,表现在数据库当中一般为检索、插入和删除等操作。遍历对线性结构来说,是一个简洁解决的问题。而对二叉树则不然,由于二叉树是一种非线性结构,每个结点都只能有两棵子树,因而须要找寻一种存储规律,以便使二叉树上的结点能排列在一个线性队列上,从而便于某种操作的产生。分析表明,二叉树采纳双向链表的存储结构对于各种操作都是比较便利的。表示二叉的链表中的结点至少包含4个域:数据
32、域和左、右孩子域,及父亲结点域。利用这两种结点结构所得二叉树的存储结构称之为三叉链表或双向链表。在二叉树的双向链表的存储结构基础上进行的操作,通过遍历根结点和其左右子树,便是遍历了整个二叉树。假如以1.,D,R分别表示遍历左子树、访问根结点和遍历右子树,则可能有D1.R,1.DR,1.RD,DR1.,RD1.,R1.D等六种遍历二叉树的方案。若限定先左后右,则只有前3种状况,分别称之为先(根)序遍历、中(根)序遍历和后(根)序遍历。基于二叉树的递归定义,可得下述遍历二叉树的递归算法定义。先序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则访问根结点;先序遍历左子树;先序遍历右子树。中序遍历
33、二叉树的操作定义为:若二叉树为空,则空操作;否则中序遍历左子树;访问根结点;中序遍历右子树。后序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则后序遍历左子树;后序遍历右子树;访问根结点。算法1给出了先序遍历二叉树基本操作的递归算法在三叉链表上实现。StatusPreOrderTraverse(BiTereeT,Status(*Visit)(TElemTypee)定义树T及访问函数采纳二叉连表存储结构,Visit是对数据元素操作的应用函数,先序遍立二叉数T的递归算法,对每个数据元素调用函数visit.最简洁的Visit函数是:/StatusPrintElement(TelemTypee/(
34、输出元素e的值/printf(e);运用时,加上格式串/returnOK;/)调用实例:PreOrderTavese(T5PrintElement);if(T)函数体,当树T不为空时进入下面的遍历if(Visit(T-data)访问根结点,当访问胜利时进入下面的递归遍历if(PreOrderTraverse(-Ishild,Visit)递归调用自身访问左子树if(PreOrderTraverse(T_Ishild,Visit)returnOK;调用自身访问右子树returnERROR;访问不胜利时,返回ERROR)elsereturnOK;)/PeeOrderTraverse依据上述思路,可类
35、似的实现中序遍历和后序遍历的递归算法,此处不再一一列举,如图3-3(图略)所示。二叉树表示下述表达式:a+b*(c-d)-ef则依据上述算法先序遍历二又树,按访问结点的先后次序将结点排列起来,可得到二叉树的先序序列为:-+a*b-cd/ef中序遍历此二又树,则可得此二叉树的中序序列为:a+b*(c-d)-e/f后序遍历此二叉树,则可得此二叉树的后序序列为:abcd-*+ef-依照递归算法执行过程中递归工作栈的状态改变状况可干脆写出相应的非递归算法。例如,从中序遍历递归算法执行中递归工作栈的状态可见:(1)工作记录中包含两项,其一是递归调用的语句编号,其二是指向根结点的指针,则当栈顶记录中的指针
36、非空时,应遍历左子树,即指向左子树根的指针进栈;(2)若栈顶的记录中的指针值为空,则应退至上一层,若是从左子树返回,则应访问当前层即栈顶记录中指针所指的根结点;(3)若是从右子树返回,则表明当前层的遍历结束,应接着退栈。从另一角度看,这意味着遍历右子树时不再须要保存当前层的根指针,可干脆修改栈顶记录中的指针即可。由此可得中序遍历二叉数的非递归算法:Statusinordertraverse(bitreeT,Status(*Visit)(TelemTypee)采纳二叉链表存储结构,Visit是对时局元素操作的应用函数。中序遍历二叉树T的非递归算法,对每个元素调用函数Visit.InitStack
37、(三);建立空栈Pust(S,T);根指针进栈While(!StackEmpty(三)当栈不为空的时候进入循环(While(GetTop(s,p)&p)取得栈顶元素并且不为O时Pusth(s,p_Ichild);向左走到终点Pop(s,p);空指针退栈If(!Stacktmpty(三)当栈不为空时访问结点,向右一步Pop(s,p);栈顶元素出栈If(!Visit(p-data)returnerror;假如访问失败则返回错误Push(s,p_Ichild);右子树进栈/if/whilereturnok;/InOrderTraverse上面具体论述了二叉树的存储结构及其三种遍历的方法,那二叉树和故
38、障森林有什么联系呢?经过上述分析,发动机故障采纳故障树的结构来组织,多个故障就意味着一个故障森林,由上述分析可知,对于多个故障树的操作是相当的困难的,所以我们必需把故障森林转化成一棵故障树,这就是森林转化为二叉树的操作。森林与二叉树的转换经过上述分析,发动机故障采纳故障树的结构来组织,多个故障就意味着一个故障森林,可以细致的思索思索,对于多个故障树的操作是相当的困难的,所以就必需把故障森林转化成一棵故障树,这就是森林转化为二叉树的操作,如图3-4(图略)所示。由于二叉树和树都可用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一个对应关系。也就是说,给定一棵树,可以找到唯一的一
39、棵二叉树与之对应。故障森林与故障二叉树的关系如图3-4(图略)所示。从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树必空。若把森林中的其次棵树的干结点看成是第一棵树的根结点的兄弟,则同样可导出森林和二叉树的对应关系。如图3-5(图略)所示。这个一一对应的关系导致森林或树与二叉树可以相互转换,其形式定义如下:假如F=T1,T2,,Tm)是森林,则可按如下规则转换成一棵二叉树B=root,1.B,RBo若F为空,即m=0,则B为空树;若F非空,即m0,则B的根root即为森林中第一棵树的根ROOT(Tl);B的左子树1.B是从Tl中根结点的子树森林Fl=(TU,T12,Tlml)转
40、换而成的二叉树;其右子树RB是从森林F=(T2,T3,Tm)转换而成的二叉树。故障森林可以依据此种方法转换成一棵故障二叉树,如下图3-5(图略)所示,森林与二叉树的转换:故障森林与故障二叉树的转换依据计算机数据结构原理,发动机故障采纳故障树的结构来组织,多个故障就意味着一个故障森林,对于多个故障树的操作是相当困难的,所以就必需把故障森林转化成一棵故障树,这就是森林转化为二叉树的操作。从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树必空。若把森林中的其次棵树的干结点看成是第一棵树的根结点的兄弟,则同样可导出森林和二叉树的对应关系。如图3-6所示,发动机起动困难的故障树:故障森林转
41、换成一棵故障二叉树是发动机故障诊断专家系统的重要的前提条件,只有把后台的数据库结构完善后才能作各种赐予二叉故障树的操作。3.4 故障诊断的学问表示从故障树的顶事务至每一个底事务形成了故障分析支路。这样的支路在程序实现时均与一个链表结构对应。为了便利说明,在系统中采纳了双向链表结构来表示这些支路,并用数据库表结构表示,见表3-1(表略)。下面对各个字段进行说明。结点标识码ID:节点标识码,字符串,是节点的标记。每一个显节点均对应唯一的标识码。标识码由数字组成。结点数据askl,ask2:依据类型的不同有不同的含义。当类型为“提问”时askl为现象或故障,ask2设置为空;当类型为“结论”时,as
42、kl为诊断结果,ask2为解除方法。父亲结点firstl:父亲结点标识;左孩子结点nextl:左孩子结点标识;右孩子结点next2:右孩子结点标识。结点类型lei:结点的类型3.5 故障诊断推理机制基本思想首先用户选择故障名称,找到相应的故障入口,然后依据故障入口给出相应的提问,并在用户回答问题以后进行推理,如此反复,引导用户完成诊断过程。假如用户没有找到结果,允许用户重新诊断。3.6 诊断流程柴油机常见故障诊断流程如图3-7(图略)所示。4基于VFP的诊断型专家系统的实现4.1 概,述在开发探讨本系统时选用大众数据库MicrosoftVisualFoxPro6.0开发工具。利用关系数据库原理
43、建立的学问库、故障库简洁易懂,便于用户理解驾驭,使计算机依据用户驾驭的故障线索及存储在计算机内部的学问库中的数据进行选择推理,最终确定发动机的故障部位,并提出修理建议。其特点是:检索速度快,用户可很便利地阅读打印学问库数据,并可依据实践阅历随时修改、完善学问库。但是,对困难故障推理难于实现。4.2 系统功能简介所设计的诊断型专家系统具有如下的功能:(1)发动机故障诊断功能;(2)故障模糊查询功能;(3)学问库阅读、打印功能;(4)学问库维护修改和可扩充功能。系统具体功能及运用方法见附录。4.3 系统主要实现的模块功能项目的建立项目管理器的作用是把应用系统中运用的全部文件如:表单、数据库、表、报
44、表、菜单等不同类型的文件有效的组织和管理起来。设计好的主程序、程序、表单、数据库、表、报表、菜单等都必需添加到项目管理器中。学问库的建立步骤VFP采纳关系数据库模型,将学问库划分后,每个库中含有多个表,分别为:故障现象表、一级故障缘由表、二级故障缘由及解除方法表。将“故障现象”表中的“故障现象”字段和“故障缘由”表中的“一级缘由”字段设置为主索引。如图4-1(图略)所示,建立表间关联,设置参照完整性。故障诊断推理模块对于发动机的故障,本系统依据用户选定的故障现象进行搜寻,然后推理,进而得出结论并供应修理建议,推理采纳SQ1.查询语言。以发动机启动困难或无法启动为例,介绍故障诊断模块的确定。(1
45、)起先界面的制作起先界面由下列元素组成:IabenJabeI2,imagel,image2,image3,image4,image5o其中各元素对应的属性分别见表4-1(表略)。其中label2控件的Init事务的代码为:thisform.label3.c叩tion=20+SUBSTR(DTOe(date。),7,2)+“年,+SUBSTR(DTOC(date(),l,2)+“月“+SUBSTR(DToC(date。),4,2)+“日”运行时该控件位置显示系统当前日期。Image3控件的click事务的代码为:RUN/nc:programfilesmicrosoftofficeofficell
46、winword.exe运行结果是调用WOrd应用程序,查看资料库的图片。image2控件的click事务的代码为:DOform编辑模式.sex运行结果是调用故障缘由和解除方法编辑模块。image1控件的click事务的代码为:DOform常见故障现象.sex运行结果是调用故障诊断模块。image5控件的click事务的代码为:C1.EAREVENTSthisform.Releasequit运行结果是退出诊断系统。为了美观,本表单中添加了一个背景,方法是在本表单的PiCtUre属性中添加下列代码:e:柴油机常见故障诊断系统picture08000副本I1.jPg在接下来的表单中有相像设置时不再介
47、绍,请读者参照上述方法制作。在发动机常见故障解除方法模块中,设置了combo1,textl,text2,command1,command2,COmmand3等控件。列表框Combol的Init过程代码为:this.clearlocalacountries,ccountrydimensionacountrieslselectdistinctyjyyfrom启动困难一级缘由.dbfintoarray;acountrieswheregzxx=燃油供应系统不正常foreachm.ccountryinacountriesif!empty(m.ccountry)this.additem(m.ccountry)endifendfbr列表框Combol的InteraCtiVeChange事务代码为:selectejyy,pcfffrom启动困难解除方法.dbf;where(yjyy=thisfbrmbo1.value)intoarrayresultthisform.text1.value=result(1
链接地址:https://www.desk33.com/p-1393379.html