《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 基于MFC的故障维修专家系统设计与实现
基于MFC的故障维修专家系统设计与实现
来源:微型机与应用2012年第22期
陈侃松, 刘洪波, 熊 攀, 唐 寅
(湖北大学 物理学与电子技术学院, 湖北 武汉 430062)
摘要: 针对现代工业机械设备维修的复杂性,根据设备的故障现象、故障原因、故障排除的原理,结合以往维修人员的经验,采用Access数据库构建树状结构进行节点管理与节点消息响应,从而实现故障信息管理和故障信息提取。运用C++语言和面向对象的方法实现了人机交互界面,开发出设备故障维修专家库系统。实际应用表明,该系统提高了维修人员的维修效率、减少了人力成本,为实际维修提供参考和指导。
Abstract:
Key words :

摘  要: 针对现代工业机械设备维修的复杂性,根据设备的故障现象、故障原因、故障排除的原理,结合以往维修人员的经验,采用Access数据库构建树状结构进行节点管理与节点消息响应,从而实现故障信息管理和故障信息提取。运用C++语言和面向对象的方法实现了人机交互界面,开发出设备故障维修专家库系统。实际应用表明,该系统提高了维修人员的维修效率、减少了人力成本,为实际维修提供参考和指导。
关键词: Access数据库;树状结构;故障信息;C++;专家库系统

    由于现代工业机械设备的复杂性及其使用寿命要求的日益提高,对设备维修保障和质量服务等方面提出了新的挑战。有效存储和使用设备的历史维修案例、查询设备的应用情况,为维护人员改进维修方式和解决新问题提供了参考依据,也可提高设备的可维护性和稳定性。
    根据维修经验、技巧、方法等构建的设备故障维修专家库系统包括故障现象、故障原因、排除方法等。它为解决设备出现的实际故障问题提供了重要依据。因此,如何有效存储、检索文本、图片、视频等数据资料是构建故障维修专家库系统的关键。本文针对机械设备引起的故障现象、原因及排除方法设计了一套设备故障维修专家库系统,通过关键词匹配检索故障案例,为设备维护提供参考和指导。
1 系统分析与总体设计
    系统设计思路主要由故障信息采集和故障信息录入两部分组成。故障信息采集:维修人员将设备产生的故障现象、故障原因及故障排除方法等信息收集。故障信息录入:管理员将维修人员收集的信息录入数据库。当设备出现故障时,维修人员使用本系统查找出设备故障的排除方法;同时,对某些不准确的信息修改后重新收集,提供给超级用户修改后录入系统。其流程图如图1所示。根据系统流程图设计专家库系统,主要由用户管理、信息管理和信息显示等组成,系统总体框图如图2所示。

2 树状结构的实现
    树状结构是一类非常重要的非线性结构数据,它可以描述客观世界中广泛存在的具有分支关系或层次特性的对象,因此在计算机领域里有着广泛应用,如操作系统中的文件管理、编译程序中的语法结构、数据库系统信息组织形式等。因此,本文将采用树状结构实现专家库系统的层次结构管理和节点消息响应。
     参考文献[1-2]中运用C++设计了树状结构,实现了节点的复制、剪切、粘贴等功能,但程序重启后,修改好的节点信息将会丢失,未能实现树状结构节点的存储。 而本文通过Access数据库构建树状结构[3-4],实现了树状结构节点的存储、节点信息提取,开发出故障维修专家库系统。
2.1 节点在Access数据库的排列原理
    树状结构中的每个节点都包括ID、子节点、父节点、目录号、路径5个自定义的数据,将这些节点包括的数据存放在Access数据库表中,通过对节点数据的排列组合来实现树状分层结构,其数据的组合如图3(a)所示。

    其中,数据的分层是根据子节点和父节点在数据表中的交替排列,每一个父节点下面包括子节点,而每一个子节点又可以作为新的父节点,依次类推。假设先定义一个3层的平面结构,从表格中可以看到节点1、2、3属于总节点,而节点11、12属于节点1的子节点;同理可以得出其他节点的从属关系,而总节点是没有父节点的,其设定值为0。如果需要设计多层的结构,只需将当前节点放在子节点一列,所从属的节点放在父节点一列即可。
    为了实现数据管理,在数据库中添加了目录号(实际应用中可以省略),如目录号101的意义是:前面1代表名称(节点1),01是节点1的第1个子节点,102是节点1的第2个子节点,这样节点1下面可以排99个子节点,子节点的个数可以根据自己的要求定义。
2.2 树状分层结构的实现
    新建一个MFC[5]工程,在工程中创建一个对话框;添加Tree Control控件,控件属性Styles中勾选Has buttons、Has lines、lines at root;通过ADO[6]连接图3(a)所示的数据库表,将数据信息添加到控件中;根据节点在数据库中的排列编写相关的函数,部分代码如下:
     tvInsert.item.pszText = _T("总节点");       //添加总节点
     hParent = m_ctrlTree.InsertItem(&tvInsert);
     TreeAddSubTree("总节点","1",hParent);    //添加子节点
  m_ctrlTree.Expand(hParent,TVE_EXPAND);     //展开节点
    树状结构的界面如图3(b)所示。
3 故障节点管理和消息响应的实现
3.1 故障节点管理

    故障节点管理即信息管理。笔者已在Access数据库中实现了树状分层结构,每一个节点就是一条故障信息,实现故障信息的管理即是实现对节点的添加、删除、修改等操作。
   以Access数据库表的每行数据(一个节点)为出发点,对每行数据进行相关操作。直接采用ODBC [7]对数据库访问,在VC对话框里面添加相关的控件;将数据库的信息映射到List Control控件中,编写修改、添加、删除、清空等函数,其中图片信息界面如图4所示。通过目录号来实现对信息的检索。

3.2 节点消息响应
    节点的消息响应是通过节点提取故障信息,采用路径的方法来实现。在树状结构的基础上,通过VC6.0编译器的对话框添加Picture组件,Picture控件属性中:General→Type→选择Bitmap,Styles中勾选Center image,在点击 (OnClick)和改变选择项(SelchangedTree)事件中编写图片信息显示、图片路径调用等相关程序。当点击树状结构节点时,程序访问Access数据库中路径,并将图片信息显示在Picture控件中。如图5所示,左边为树状结构,右边为故障图片信息。视频信息显示的方法与图片信息的方法相同,只需将Picture控件用Media Player控件替换。调用图片信息部分程序代码如下:

 

 

    hwnd = GetDlgItem(IDC_BITMAP);
              //指定对话框控件句柄
    hDesDC = hwnd->GetDC()->m_hDC;
    hSrcDC = CreateCompatibleDC(hDesDC);
    hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
        strFieldValue,IMAGE_BITMAP,0,0,LR_LOADFROM
        FILE|LR_CREATEDIBSECTION);  //显示位图
    GetObject(hBitmap, sizeof BITMAP, &bm);
    //得到指定图像信息
    SelectObject(hSrcDC, hBitmap);     //复原位图数据
    hwnd->GetClientRect(&rect);   //获取窗口客户坐标
    ::SetStretchBltMode(hDesDC,COLORONCOLOR);   
                                    //指定伸拉模式
    ::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.
        bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,
        +SRCCOPY);                     //将位图载入目标区域
    SetTimer(IDT_TIMER,50,NULL);
3.3 系统管理
    系统管理实现三个功能:用户管理、数据导入、数据备份。
    用户管理包括超级用户和普通用户。超级用户具有添加、修改、删除普通用户和操作某些系统功能的权限。本文采用一种有效的方法,即将采集到的用户名与数据库中的user_name对比来实现。通过建立两张相同的Access数据库表——超级用户表和普通用户表,在程序内部定义一个字符串数组,编写好字符比较函数[8],当用户登录时,用户名被采集放在数组中,再将数组中的用户名与Access数据库表中的user_name比较,如果采集的字符串与超级用户表中的user_name相同,则为超级用户;否则为普通用户。数据导入、导出即调用system("copy Database.mdb X:\\Database.mdb")函数。
4 结果与分析
    为了验证故障专家库系统的可行性,本文通过系统管理界面对树状结构的节点进行添加、删除、修改等调试;建立Access数据库表,存放文字、图片、视频等故障信息,并通过节点的消息响应对信息进行读取。系统在重新启动后,节点信息没有丢失;单击树状结构的节点,显示其相应的故障信息,进而实现数据的有效存储,以及节点的文本、图片、视频等故障信息的提取。经过测试,该专家系统在Microsoft XP、Win7系统下运行稳定, 并可根据需要进行功能扩展。人机交互界面如图6所示。

    本文以Visual C++6.0为开发平台,采用Access2003数据库构建树状结构,运用树状结构中的节点管理和消息提取,并结合工业设备的故障现象、故障原因、故障排除原理以及维修人员的经验建立了具有文本、图片、 视频数据的Access知识库,开发出故障维修专家库系统。实际应用表明,该系统提高了设备维护人员的工作效率、极大地降低了人力成本,为设备维护与故障排除提供了重要参考和指导。
参考文献
[1] 孙鑫,余安萍.VC++深入详解[M]. 北京:电子工业出版社,2006.
[2] 潜继成. 树状结构数据管理[J].电脑编程技术与维护,2010(17):14-15。
[3] 李俊民,高春燕. Access数据库开发实例解析[M].北京:机械工业出版社,2006.
[4] Xu Fengyuan.按数据库记录构建树控[EB/OL]. (2002-12-01).http://www.vckbase.com/document/viewdoc/?id=466.
[5] 曾凡峰,苗雨.MFC编程技巧与范例详解[M].北京:清华大学出版社,2008.
[6] 刘锐宁,宋坤. Visual C++ 程序设计标准教程[M].北京:人民邮电出版社,2009.
[7] 任哲.MFC Windows 应用程序设计[M]. 北京:清华大学出版社,2004.
[8] 谭浩强.C++程序设计实践指导[M]. 北京:清华大学出版社,2005.

此内容为AET网站原创,未经授权禁止转载。