时间:2022-06-12 04:22:38
摘要:嵌入式平台为故障诊断专家系统提供了良好的运行环境。介绍了Qt/Embedded和SQLite在ARM-Linux平台上的运行环境的搭建技术,提出在嵌入式Linux环境下用Qt/Embedded对知识库进行管理的方法。使用Qt/Embedded的数据库驱动连接SQLite创建的嵌入式知识库,构造基于Qt/Embedded数据库访问类的知识对象类来表示和访问知识。实践表明该方法具有较高的可靠性和实用性,取得了良好的效果。
关键词:专家系统;Qt/Embedded;SQLITE;ARM-Linux平台;知识库管理
中图号:TP391.6
Knowledge Base Maintenance Method Based on Qt/Embedded and SQLite
ZHAO Shi-feng,LIU Bai-lin
(Institute of Artificial Intelligence & Simulation, Xi’an Technological University, Xi’an 710032,China)
Abstract: Embedded platform was applied to fault diagnosis expert system.The technology of building operating environment for Qt/Embedded and SQLite in ARM-Linux platform was introduced in this paper.An knowledge maintenance method based on Qt/Embedded under the embedded Linux environment was presented.The SQL diiver of Qt/Embedded was applied to embedded knowledge base.To represent and access the knowledge,some classes were built based on SQL classes of Qt/Embedded.The result of application shows that it was successful to achieve high reliability and high practicality.
Key words: expert system; Qt/Embedded;SQLITE;arm-linux platform;knowledge base maintenance
1 引 言
为提高数字化复杂武器系统的可靠性和故障检测维修效率,故障诊断专家系统得到了广泛的应用[1]。随着基于ARM体系结构的嵌入式系统的不断发展,其性能不断提升,为界面友好的可视化故障诊断专家系统提供了良好的运行平台,使其可以较低的成本广泛装备于各型复杂武器系统,作为独立的模块存在于武器系统中,提高故障诊断专家系统的效能和整个武器系统的安全性。
故障诊断专家系统的核心是知识库和推理机,高效的知识库管理方法对整个系统的效率起着决定性的作用。实践证明,数据库结合面向对象技术的知识库构建和管理是行之有效的方法。以嵌入式Linux为操作系统,采用开放源码的SQLite嵌入式数据库,结合Qt/Embedded数据库访问及操作方法,在以S3C2410处理器为核心的ARM-Linux平台上实现嵌入式故障诊断专家系统的知识库的创建和管理。
2 用SQLite创建嵌入式知识库
2.1 嵌入式SQLite数据库及其在ARM-Linux平台上的实现
SQLite是D.Richard Hipp开发的一个基于C库的轻量级嵌入式关系数据库引擎,因其具有代码量小、移植配置简单、功能完备的特点,在嵌入式数据库应用中得到了广泛的应用[2]。为了使SQLite能够移植到ARM-Linux平台上,需要对其进行交叉编译,主机采用Red Hat Enterprise 4操作系统,内核版本为2.6.9,使用arm-linux-gcc交叉编译工具,版本为3.4.6,数据库采用sqlite-3.5.9。ARM-Linux平台采用的引导程序为u-boot-1.3.2,Linux内核版本为2.6.24.4,使用Basybox工具制作压缩根文件系统。交叉编译的过程如下:
① 解压缩源码包sqlite-3.5.9.tar.gz。
② 注释掉源码包中configure文件中关于检查交叉编译环境的部分。
③ 修改Makefile文件,将代码行“BCC = arm linux gcc g O2”修改为“BCC = gcc g O2”。
④ 编译生成执行文件sqlite3及链接库文件。
上述过程完成后,将生成的可执行文件和链接库文件拷贝至压缩文件系统源目录,修改可执行文件的运行权限,就完成了嵌入式SQLite数据库在ARM-Linux平台上的建立。
2.2 知识表示及知识库的创建
知识表示是专家系统的核心问题,故障诊断专家知识一般可分为浅层知识和深层知识。深层知识是关于系统设备的结构和功能方面的原理知识,用基于故障分层和故障分离树的对象式知识框架表示原理知识简单实用,易于实现。一个对象式知识框架的组成[3]如表 1 所示:
在此使用数据库中的表来实现对象式知识框架。数据库中的表形式明了,易于创建和维护,数据库与用户应用程序之间的接口也易于实现。这里对应于四种对象式框架,在嵌入式SQLite数据库中建立状态知识项表、测试知识项表、规则知识项表和维修知识项表,对知识项进行存储。
3 Qt/Embedded访问嵌入式SQLite技术研究
3.1 Qt/Embedded程序嵌入式运行环境建立
Qt是一个跨平台的面向对象的C++图形应用程序框架,Qt/Embedded是Qt的嵌入式版本,是基于帧缓冲(framebuffer)的嵌入式环境下的图形界面应用程序框架。Qt直接工作于帧缓冲之上,不依赖于X server和Xlib,大大减少了内存消耗。同时,作为Qt的超集,Qt/Embedded包含了所有Qt的功能类。采用版本为4.4.0的Qt/Embedded,在ARM-Linux平台上建立Qt/Embedded程序的运行环境,需要对Qt/Embedded进行交叉编译,并对必要的环境变量进行配置,具体过程如下:
① 解压源码包qt-embedded-linux-opensource-src-4.4.0。
② 配置Configure脚本,指定Qt/Embedded的安装路径。
③ 交叉编译、安装Qt/Embedded,即可在步骤②指定的安装路径下得到Qt/Embedded目录qt-embedded-4.4.0。
④ qt-embedded-4.4.0目录中的文件进行裁减,舍去不必要的例程、字体等,以缩减其所占空间。
⑤ 将Qt/Embedded编译的程序拷贝至qt-embedded-4.4.0目录,整体下载至ARM-Linux平台;
⑥ 在ARM-Linux平台上设置QTDIR、 LD_LIBRARY_PATH、LANG等环境变量。
2.2 Qt/Embedded访问SQLite数据库
这里采用Qt/Embedded的libqsqlite.so驱动连接SQLite数据库,并使用Qt/Embedded的数据库操作类实现对数据库的访问和管理,使用的Qt/Embedded的数据库操作类主要有[4]:
(1) QSqlDatabase类
QSqlDatabase类提供一个通过数据库连接访问数据库的接口,一个该类的实例代表了一个数据库连接。用QSqlDatabase创建并打开一个连接到SQLite数据库的默认连接的代码片段如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//将SQLite数据库添加至数据库连接列表
db.setHostName("localhost");//设置主机名
db.setDatabaseName("databasename");//设置数据库名
db.setUserName("username");//设置用户名
db.setPassword("");//设置访问密码
bool ok = db.open();//打开数据库连接
(2) QSqlQuery类
QSqlQuery类提供了一种执行和操纵SQL语句的方式,它包括了数据库操作的所有功能,可以在QSqlDatabase实例上执行SQL查询创建、导航和索取数据等等。用QSqlQuery执行SQL语句的代码片段如下:
QSqlQuery query = QSqlQuery(QString::null,db);//在数据库db上创建一个QSqlQuery对象
query.exec("select name from customer");//执行SQL语句
while ( query.next() ) //检索并定位下一条记录
{
QString name = query.value(0).toString();//获取字段值
……
}
4 知识库管理
4.1 知识库访问
知识库的访问贯穿于整个故障诊断专家系统的知识库建立,维护及故障诊断推理过程中,采用面向对象技术对知识库的访问操作和知识项进行封装,可使知识语义的表达更加直观,并统一知识项的访问方式。在知识库访问时,构造QSQLiteMdb类对Qt/Embedded连接及访问SQLite数据库进行封装,并构造了知识项基类及4个知识项继承类对4个知识项进行了封装,知识库访问层次结构如图 1所示:
4.2 知识库访问及知识表示的类实现
对Qt/Embedded数据库访问及操作类进行进一步封装,构造出知识库连接及访问类QSQLiteMdb及知识项存储基类QFdesItem,其主要数据成员及成员函数描述如下:
(1) QSQLiteMdb类
该类用于连接SQLite数据库并访问数据库中的表:
class QSQLiteAccessMdb
{
public:
QSQLiteAccessMdb();
~ QSQLiteAccessMdb ();
public:
bool ConnectionToMdb( void );//连接数据库
bool CloseConnectToMdb( void );//关闭数据库连接
……
bool QueryData(QString sQuery );//通过Sql语句打开数据库记录集
……
int ReadData( QFdesItem* PItem );//读数据知识项
int WriteData( QFdesItem* PItem );//写数据知识项
……
private:
friend class QFdesState ;//状态
friend class QFdesTest ;//测试
friend class QFdesRule;//规则
friend class QFdesRepair;//维修
QSqlDatabase* m_pConnection;//访问主链结点的连接
QSqlQuery* m_pRecordSet;//m_pQuery;查询集
……
};
类中对QSqlDatabase类QSqlQuery类的数据库连接访问功能进行了进一步的封装,连接数据库和关闭数据库连接通过ConnectionToMdb和CloseConnectToMdb成员函数实现,知识库的读写主要是通过ReadData 成员函数和WriteData 成员函数实现。
(2)
class QFdesItem
{
protected:
QSQLiteAccessMdb *m_pSQLiteAccessMdb;
QFdesItem(){}
virtual ~QFdesItem(){}
public:
int SetSQLiteMdb(QSQLiteAccessMdb *PSQLiteAccessMdb );
QSQLiteAccessMdb *GetSQLite();
int ReadFdesItem( QString& SqlString);//读取SqlString的知识项
int AddNewFdesItem( void );//添加
int UpDateFdesItem( void );//更新
int DeleteFdesItem( void );//删除
int QueryFdesItem( QString& SqlString);//查询
virtual int SaveItemData( void );//存储数据项,对不同知识项必须重载此函数
virtual int ReadItemData( void );//读取数据项,对不同知识项必须重载此函数
virtual int NewItemData( void ){return 1;}//更新数据项,对不同知识项必须重载此函数
……
};
在知识库的维护和故障诊断推理过程中,对知识库的访问和操作主要是通过对QFdesItem类的各个继承类对象完成。对于不同的知识项,必须重载SaveItemData()、ReadItemData()及NewItemData()成员函数,通过QSQLiteAccessMdb类对象实现对知识项的存储、读取和新建。
4.3 知识库管理可视化界面实现
在关系数据库上创建知识库,并结合Qt/Embedded数据库访问技术和面向对象技术,可实现简明高效的知识库管理系统。利用Qt提供的designer工具,可方便的对知识库管理系统的可视化界面进行设计,提高知识库管理系统的可操作性。知识库管理系统的可视化知识获取及维护界面:
5 结 论
在ARM-Linux平台上,使用嵌入式SQLite关系数据库构件知识库,采用面向对象技术对 Qt/Embedded数据库访问类进行进一步封装,构造了知识库访问类和知识项描述类,实现了可视化的嵌入式知识库管理系统。实践证明该系统具有较高的效率和可靠性,具备很好的实用价值。
参考文献:
[1] 刘白林,范跃华,耿朝阳.面向对象技术在某武器系统故障诊断专家系统中的应用[J].西安工业学院学报,2002,22(1):39-44.
LIU Bai-lin,FAN Yue-hua,GENG Chao-yang.An application of OOT on fault diagnostic expert system for a weapon system[J]. Journal of Xi'an Institute of Technology,2002,22(1):39-44.(in Chinese)
[2] 尧有平,薛小波.基于ARM-Linux的SQLite嵌入式数据库的研究[J].微计算机信息,2008,24(2-2):64-66.
RAO You-ping,XUE Xiao-bo. Research of SQLite Embedded Database Base on ARM- Linux[J]. Microcomputer Information, 2008,24(2-2):64-66.(in Chinese)
[3] 刘白林,唐小三,张扬.基于数据库的故障诊断专家系统知识库管理方法[J].火炮发射与控制学报,2007,4:67-71.
LIU Bai-lin,TANG Xiao-san,ZHANG Yang. Knowledge Base Maintenance Method of Fault Diagnosis Expert System Based on Database Technology[J]. Journal of Gun Launch & Control, 2007,4:67-71.(in Chinese)
[4] Jasmin Blanchette,Mark Summerfield.C++ GUI Qt 4编程[M].北京:电子工业出版社,2008.
Jasmin Blanchette,Mark Summerfield.C++ GUI Programming with Qt4,Sencond Edition[M].BeiJing:Publishing House Of Electronics Industry,2008.省略
通信地址:陕西省西安市金花北路四号西安工业大学计算机学院72号信箱
邮政编码:710032