APP下载

基于CLIPS的嵌入式故障诊断系统设计与实现

2010-09-08张德慧

中国新技术新产品 2010年8期
关键词:调用嵌入式编程

张德慧

(沈阳理工大学信息科学与工程学院,辽宁 沈阳 110168)

1 引言

目前,网络故障诊断系统过分依赖于监控中心和被监控实体,尤其是占用了监控中心和被监控实体大量的CPU时间、内存和带宽等资源,且系统可靠性、抗毁性、灵活性低。当被监控实体尤其是计算机等发生操作系统或硬件故障时,故障征兆采集和诊断变得非常困难。此时,无法满足智能故障监控和诊断的需求。针对以上弊端,本文采用嵌入式[1]PCI板卡取代实现相关功能的服务器主机,配置在网络节点计算机上,并接入网络实现对远程设备进行及时故障诊断和控制。

网络中的硬件设备、网络软件、应用软件、节点计算机及其在不同节点之间的组合是千变万化的,尤其是一个节点的故障可能会影响到其他多个节点的正常工作,或在其他多个节点表现出来,从而使得网络故障诊断变得非常复杂。基于知识的故障诊断方法不需要对象的精确数学模型,是一种很有生命力的方法[2]。专家系统是人工智能领域最活跃、最重要的一个分支,它利用专家知识和推理,模拟专家的决策活动来解决只有专家才能解决的问题。它具有高效性、灵活性、交互性和学习性等优点[3]。

本文结合嵌入式系统和专家系统的优点,开发了一个基于CLIPS的分布式网络故障诊断专家系统,移植到嵌入式故障诊断卡上,配置到网络计算机节点中,对网络故障进行实时诊断和控制。

2 故障诊断系统的设计与实现

2.1 故障诊断系统的结构设计

由给定网络的特点,故障诊断系统采用分层分布式多域的体系结构,如图1所示。其中诊断卡是一个基于ARM-Linux开发的带有PCI插槽的嵌入式故障诊断系统。对每一个计算机节点通过PCI插槽接入一个嵌入式故障诊断系统,对计算机及其相关的链路和网络设备进行数据采集、故障诊断和控制。按空间位置优先将网络节点划分为域,每个域中选举一个诊断卡上的系统作为域首,负责域内的故障诊断和域间故障协同诊断。每一个域相对于其上级域来是等同于一个节点,故上级域对下级域有诊断和控制功能。其他诊断卡上非域首系统只负责数据采集域和协同。

2.2 专家系统知识表示

知识表示的设计直接关系到专家系统的效能,如何表示和管理知识以便能被专家系统最好地利用是知识工程中的关键问题。

结合网络故障诊断的特点,本文采用基于产生式与面向对象相结合的知识表示形式,非常适合于网络数据的动态变化。当某个特定的实体数据发生变化时,数据转换模块只需产生一个通知事件,利用特定对象的set方法和get方法就能及时反映给故障诊断专家系统工作内存;此外,采用基于产生式与面向对象相结合的知识表示形式与基于规则推理的方式进行诊断还可以弥补基于单一规则推理专家系统不能满足对网络故障具有很强的动态性和并发性特点诊断的需要。

系统定义了一个故障类的顶层Fault类,它是一个抽象类,是其他所有诊断类的基类或间接基类。它包含了所有故障类的共同属性如发生时间等,任何故障类都是从它派生出来的。总体上将故障定义为三类:计算机类、交换机类和链路类,即从Fault类派生出三个类,并进行划分和继承,分别进行类定义和消息相应函数的定义。

2.3 故障树分析法与规则的构建

故障树分析法是一种将系统故障形成原因按树枝状逐级细化的图形演绎方法,是60年代发展起来的用于大型复杂系统的可靠性、安全性分析和风险评价的一种方法。本文引入故障树分析法,对各类故障从整体到局部、从顶层到底层进行全面分析,建立规则库。图2所示为从某节点出发A节点无法访问的故障树分析图。

2.4 故障诊断系统的实现

对于资源相对受限的嵌入式环境,对系统毫无意义的程序带来的资源浪费是不可容忍的,因此本文对CLIPS源码进行了裁剪。本文通过修改编译选项、功能开关、和删除函数注册等方法,裁剪了源码中与ARM-Linux环境无关代码、exmathfun、bmathfun、ext_io 等模块。通过progen+tmake生成so文件。

CLIPS提供两种进行扩展编程的机制,一种是集成式编程,一种嵌入式编程[4]。集成式编程允许将C、FORTRAN和ADA等语言编写的函数在CLIPS中注册为外部函数。嵌入式编程是将CLIPS的源码嵌入C、C++和ADA等语言中进行编程,将CLIPS作为系统的系统的一个模块进行调用的方式。本文利用CLIPS集成式编程和嵌入式编程机制实现诊断家系统服务端的设计。一方面通过C语言开发了控制模块调用接口、数据采集子系统调用接口、通信模块调用接口、I/O功能接口等,注册成为CLIPS的外部函数和命令,定义成为CLIPS I/O路由,在规则中进行调用,完成推理机与其他模块之间的交互。其中与诊断客户端的交互几乎全部是通过自定义I/O路由调用通信模块实现。另一方面,将集成编程后的源码编译成为so文件,嵌入到故障诊断系统中。故障诊断系统通过调用API函数实现推理机,并将推理机作为进程的单独线程,随时监听事件的到来进行实时诊断和控制。

诊断系统服务端以推理机为中心,控制模块在专家系统外部函数的调用下,触发数据采集子系统对网络或特定节点数据进行采集,并通过调用通信模块、知识库管理模块和故障管理模块等,实现与客户端的交互,从而实现与用户的交互接口和知识获取接口。

诊断客户端主要包括用户接口和知识获取接口。用户接口完成用户对诊断功能的调用、诊断过程中输入观察事实、以及查看诊断结果和恢复意见等。故障诊断知识获取接口主要包括规则的添加、修改和删除。如图3所示是诊断系统的客户端一次诊断结果显示。

3 结论

本文充分利用了嵌入式系统集成度高、可靠性好、免维护的特点,使故障诊断系统具有更高的可靠性和移植性。结合专家系统高效能,CLIPS开源和易于移植的特点,降低了故障诊断系统的成本,同时提高了故障诊断系统的适用性和诊断率。

[1]李善平等 Linux与嵌入式系统(第2版)[M].清华大学出版社2006.3

[2]马少平等.人工智能[M].北京:清华大学出版社,2004.8

[3]Joesph Giarratano.专家系统原理与编程(原书第四版)[M].北京:机械工业出版社,2006.8

[4]STB of NASA.Advance Programming Guide,CLIPS6.24 Reference Manual II[M].From Intel net,2006

猜你喜欢

调用嵌入式编程
编程,是一种态度
编程小能手
纺织机上诞生的编程
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
基于系统调用的恶意软件检测技术研究
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器