微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Win CE平台下嵌入式故障诊断专家的设计

Win CE平台下嵌入式故障诊断专家的设计

时间:09-27 来源:电子技术应用 点击:

当各种设备应用与管理系统发生故障时,准确而快速地进行故障诊断定位,对于系统的恢复,具有十分重要意义。然而,由于系统结构复杂,导致设备故障的原因很多,在现场分析、判断和处理故障时,往往依赖于维修人员对设备机理的把握程度和经验,导致故障定位不准,维修时间较长。故采用故障树分析法建立检测引导系统,以此来引导维修人员以专家的思维模式对设备进行检测修理,提高经济性和可靠性。这种检测引导系统即为专家系统。本文以串口通信故障检测为例,设计了一种嵌入式专家系统,结合嵌入式WinCE以及SQLite,达到引导检测的目的。

1 系统架构

1.1 专家系统简介

专家系统(ES)是人工智能领域最活跃和最广泛的领域之一[1]。自从1965 年第一个专家系统Dendral 在美国斯坦福大学问世以来,经过40年的开发,各种专家系统已遍布各个专业领域。目前,专家系统得到了更广泛的应用,并在应用开发中得到进一步发展。所谓专家系统就是使用人类专家推理的计算机模型来处理现实世界中需要专家作出解释的复杂问题,在没有专家参与的情况下得出与专家相同的结论。简言之,专家系统可视作"知识库"和"推理机"的结合,知识库是专家的知识在计算机中的映射,推理机是利用知识进行推理的能力在计算机中的映射,构造专家系统的难点也在于这两个方面。

1.2 系统组成

本文设计的智能专家系统包括用户界面、数据库以及模块化的程序。应用嵌入式数据库SQLite来实现知识的存储以及人机交互实现推理解释。故障树节点的所有信息均存储在SQLite中,并在数据库中实现故障节点的逻辑关系以此取代推理机,达到引导检测的目的[2]。

1.3 系统工作机制

专家系统的组织控制机构(即推理机)根据当前输入数据来运行知识库中的相应知识,按一定策略进行推理,以达到要求的目标。本文专家系统中,推理机根据用户参与选择后的故障信息,在知识库内寻找能与之匹配的故障树结点事件,每步推理都以用户反馈信息为依据,沿故障树脉络进行正向推理,逐步缩小故障范围,直至完成故障源定位。专家系统工作流程如图1所示。


2 专家库设计

故障树分析FTA(Fault Tree Analysis)是一种演绎推理方法, 将系统可能发生的故障和故障原因由总体到部分按树状逐渐细化的图形演绎方法, 通过对故障树的定性和定量分析, 判明故障原因并可得出引发故障的相关因素的相关重要度[3]。故障树是用于系统可靠性分析和故障诊断的一种图形化故障模型,而基于规则的诊断专家系统的目标是当系统发生故障时综合利用各种诊断信息,根据知识库中的规则,通过推理确定系统的故障模式,推断出故障部位和故障原因,最后提出排除故障的方法和维修建议。故障树建立时,将最不希望发生的故障作为顶事件; 位于故障树底部, 导致其他事件的、不可再分的原因事件为底事件,其他事件都是中间事件。各事件间相互关系通过"与"门、"或"门、"非"门等逻辑门表示。

2.1 SQLite移植

从SQLite官方网站下载最新版本的SQLite,解压获得sqlite3.c、sqlite3.h、sqlite3ext.h三个源文件,还要下载一个基于Windows平台的edll压缩文档,解压获取sqlite3.def,最后下载一个支持命令行的版本文件,解压获得sqlite3.exe。然后生成工程:用VS2005新建DLL工程,选择智能设备在定制WinCE生成的SDK(如mini2440-CE6-SDK),把解压出来的源文件加入工程中。最后设置工程属性后编译:编译后便可生成适合设备平台的数据库使用文件sqlite3.lib、sqlite3.dll。以后只要把sqlite3.dll放到与工程相同的目录下,在工程链接的额外依赖中加入sqlite3.lib,然后在需要使用数据库的源文件中加入include"sqlite3.h",SQLite数据库就可以使用了。

2.2 故障树的构建

基于故障树的推理是指利用故障现象信息和故障树节点间的逻辑关系进行推理,利用异常节点作为推理的起始点,利用辅助信息进行假设排除,最终确定故障原因。在进行故障诊断之前,系统要构造故障树,故障树的作用主要用于诊断过程的剪枝,即缩小状态空间的搜索范围,以提高系统工作效率。将数据库中的所有规则组织成若干棵树,每棵树的叶子节点对应一个故障现象或辅助信息,非叶子节点对应一个故障结论,父节点与子节点的关系构成规则,在数据库中记录故障树的根节点、节点层次、节点关系、叶子节点等信息。设置系统变量,用于判断系统是否进行过规则更新操作,在启动系统、退出规则维护界面和调用故障诊断功能时都进行判断,及时提示用户进行故障树的更新处理[4]。

串口无法通信或者通信过程中出现异常,就要对整体或者串口通信过程中的某个细节进行故障诊断。串口通信的实现需要如下几个模块:数据发送模块、数据接收模块、物理链路、中央处理单元、串口扩展板以及电源。故障主要有数据发送模块故障、接收模块故障以及串口扩展板故障三部分。在工作中,无论哪部分模块发生故障都将影响到整个通信过程。根据故障关系以及检测经验设计图2所示的串口通信故障树。


2.3 故障二叉树的建立

关系数据库管理系统的优势在于存储以二维数据表为模型的数据结构。本文将故障树压缩存储来降低检索算法的时空复杂度。

一般的树形dp都有这样的模型:f[x,y]=min{f[x1][y1],f[x2][y2],……f[xm][ym]}给每个儿子分配多少就需要枚举了,这种做法比较慢。但是如果转化为为二叉树之后,dp模型一般都是这样:f[x,y]=min{f[left[x],y1],f[right[x],y]},则变为给一个儿子进行分配就可以了,而且转化之后还有一个很有用的性质,即原树和二叉树的前序遍历相同,可以利用这个性质进行一些优化。而且在某些情况下,通过前序可以把树形dp转化为在线性表(如数组中的dp),这样许多转移方程就可以继续优化,所以在树的算法中把树转化为某种线性序可以大大优化模型,使其算法变得更简单高效。本着这种原则,本专家系统设计的SQLite表如表1所示。建立表之前,根据树转二叉树的算法对每个故障现象进行编号,表1中,NODE代表节点号;TEXT表示节点的故障现象;YESTO、NOTO表示判断后将要跳转的节点;NRANK表示节点等级,根节点等级为0,过度节点等级为1,当节点等级为2(即叶子节点)时,表示测试结束并给出是否保存结果的提示。

WinCE下读取数据库信息对系统进行专家诊断的核心代码如下:
if(atoi(sqlite->GetTableData(1,5))!=2) //保证在非叶子节
//点之间进行跳转
{
node = atoi(sqlite->GetTableData(node,3));//选择YESTO
//跳转到的节点
node = atoi(sqlite->GetTableData(node,4));//选择NOTO
//跳转到的节点
wsprintf(buff1, L"SELECT * from '%s' where NODE = %d ;",
table_name,node);//查询数据库
m_cap = sqlite->GetTableData(node,2);//读取node节点的
//故障现象
GetDlgItem(IDC_TITLE)->SetWindowText(m_cap);
//把故障现象显示出来
}

检测过程中,通过人机交互遍历故障二叉树如图3所示。图中二叉树的每一个叶子节点都是一次检测的结果,也就是故障的最终原因,它们的等级即NRANK都是2。通过等级的判断来确定是否是最终结果并提示保存。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top