面向对象的方法在机械故障诊断系统中的应用
2006-05-07 来源:电子技术应用
摘 要: 针对机械设备的故障诊断,应用面向对象的方法和技术简化了复杂系统的设计,提高了知识的表达能力和诊断效率。
关键词: 面向对象 建模 知识库 消息传递 故障诊断
面向对象的方法作为一种新的程序设计思想和认知方法学引起了人们广泛的重视。其基本特征有:信息隐蔽(或封装)、数据抽象、动态链接和继承。面向对象的程序具有模块化、表达广泛概念、默认值表达和代码复用等特点。面向对象编程使系统软件结构和空间中对问题的描述相一致,把对应于客观存在实体的数据和作用于实体的过程包含在一个“对象”之内,从而使对象成为比数据和过程具有更高结构层次的计算实体[1]。
诊断是在对某一研究对象的目前所处状态及其有关参数作出判决后,得到有益的信息,进而对所研究对象的运行情况作出正确与否的结论。对于复杂系统的诊断问题,诊断过程复杂,诊断知识多样。而采用面向对象的技术则可以使故障诊断系统具有良好的可扩充性和可重用性,便于从现实事物对象提取系统抽象模型,实现复杂系统的设计;并且有利于实现系统对故障知识进行层次表示和混合表达,提高系统故障诊断效率。可以说,面向对象的技术在故障诊断系统的设计及实现中得到了充分的体现。下面结合所研制的故障诊断系统对此作以描述。此系统由软、硬件实现,主要是有目的地采集相关信息,用适当的分析方法提取有意义的特征;并应用诊断知识与合适的分析策略,分析出系统中故障的部位及原因,并加以定量描述;最后作出诊断决策和状态预测,实现采用了面向对象的分析和编程方法。主要包括数据采集、信号分析、诊断对象建模、神经网络建模、诊断等模块。
1 面向对象的基本特征[1][3][5][6]
1.1 层次性
面向对象方法学认为对象都可由相对简单的对象经层层组合而成,因此复杂对象可按其结构抽象分解关系组成层次结构,这样可把复杂系统看成是一个由有限的结构元素按一定规律聚合而成的系统,系统的元素是子系统,子系统的元素可以是更深层次的子系统,如此类推,直至把元素表示为某一具体的物理零件。现以CE6140型车床的结构分解来说明这种层次结构,示意图如图1所示。同样,复杂系统的故障也具有层次关系,这样可深入到基本结构元素,找到引起故障的最终原因,如图2所示。因此,基于机床这一复杂诊断对象的层次特性,可对其进行结构分解和故障分解,以逐步细化缩小故障范围,降低诊断问题求解的复杂性,提高诊断的准确性和灵活性。
由于机械设备机构和故障的层次性与面向对象技术中的对象的继承性和层次性相对应,因此设备诊断对象的构成适合采用面向对象的方法。在机械设备中,如果设备的元素或系统有故障,则所有包含这个元素的上级设备子系统直至设备本身也有故障。而当上一级设备元素有故障,则此故障必源于下一级相应的元素或联系的故障[2]。
1.2 类和实例
在面向对象方法学中,所有对象都是类的实例。对象类是建立在对象概念基础上,由类所描述的对象即称为类的实例。类是实例的模板,也是数据的抽象;实例是类的一个个体。设备的基本元件有齿轮、轴、轴承等。可分别设计类,包含其属性描述和功能描述。如齿轮类声明如下:
TGearTool:public TBoxTool{ //从TboxTool继承
public:
TGearTool():TBoxTool(″″);
TGearTool(char*name):TBoxTool(name);//运用多态性技术
~TGearTool(); //析构函数
virtual void DrawObject(TDC&); //画齿轮
bool oprrator ==(const TGearTool& other) const;
GearParam gearparam; //齿轮属性
protected:
friend ostream& operator <<(ostream& os,const TGearTool& tool); //运用流类的输入来保存永久对象
friend istream& operator>>(istream&is,TGearTool& tool); //运用流类的输出打开永久对象
......
};
类与类之间的继承关系也即子类-父类的关系。上面三个类分别从零部件类Component继承特性,因为齿轮、轴、轴承等可进一步抽取其共性如型号、材料、特征故障频率等,形成零部件类。齿轮类、轴类等也可进一步派生其它类,如图3所示。
在软件系统中,这种面向对象程序设计提供的继承机制,可以避免对象的数据和操作的大量重复,实现代码重用,大大地减少了对象、对象类的创建工作量。这种继承性使所建的软件系统具有开放性,要建立的系统并非从空白开始,而是尽可能利用已建立的系统或已建立的类,以它们为基础进行扩充,考虑向上或向下的接口方法[3]。
1.3 消息传递
对象间除了通过消息传递完成通信外,不再有任何其它的联系。消息中可以包含运算参数,也可有对象名。向某对象发送消息就是要求它根据目前状态和处理能力执行某个操作。在消息传递过程中,消息发送者只是知道消息接受者具有某种功能,而不知道它的内部结构以及如何实现这种功能,从而支撑了数据的抽象和封装。诊断系统,主要由齿轮、轴、轴承等零部件对象通过一定的传动关系有序组成,当此传动链上的某根轴接受到赋予其转速的消息时,则根据对象内所提供的操作计算出该轴的特征频率,同时发送消息给此传动链上相关对象。这些对象接受到消息后,分别在其内部根据一定的传动信息计算出对象的特征频率。诊断过程也是用消息来触发,例如对于齿轮故障诊断,当齿轮对象接受到其它对象所发出的诊断消息时,它会根据其当时的状态如故障特征频率、故障特征频率处的相对幅值比、归一化值等信息,发送消息给相应的模糊神经网络自动进行推理、诊断,而不需要外部的干涉,并且其它对象也不知道它的内部实现过程。对象间的发送消息实现了机械设备的诊断,如图4所示,图中FNN(Fuzzy Neural Network)表示模糊神经网络模型。
2 知识的面向对象表示
复杂系统诊断问题求解中涉及到的诊断知识很多,不仅包括诊断对象的结构与功能方面的知识,还包括各种因果知识、启发性知识经验等,因此需把各种知识有机地结合起来。面向对象的方法可以将故障诊断知识组成一种混合知识表达形式,即以对象为中心,将对象的属性动态行为特征、相关领域知识库和处理方法等有关知识封装在表达对象的结构中,使故障诊断知识库或文档具有良好的体系结构;通过对象类的知识表达,实现数据抽象与信息共享。
2.1 机械设备的面向对象表示
由前面叙述可知,诊断对象可分离出各个零部件对象,同时以对象的形式写出其功能描述和行为描述。每个对象以知识的载体独立于其它对象,每个子对象可写出其功能和结构接口描述,以便零部件对象出现在某一特定子对象中,建立与其它零部件对象的功能和接口联系。诊断对象的知识库可由这些零部件知识对象有机地“堆”在一起组成,我们所开发的面向对象的“机械设备建模工具”把此特性提高到了新的高度。工程师可方便地根据机械设备的传动关系,利用系统所提供的轴、轴承、齿轮、离合器等建模工具方便地作出设备的机械构造示意图,并可通过友好的人机接口赋予零部件对象一定的信息,如轴承滚动体的个数、接触角、节径等。此诊断对象可方便地修改、查询,当此传动链上的任意一根轴被赋予一定的转速后,诊断对象能根据对象间的消息传递自动搜索其传动链关系并计算工作频率等参数,搜索后的信息保存在各零部件对象中。诊断设备的面向对象的知识表示和建模方法增加了知识的可重用性和通用性,减轻了工作人员的计算任务。
2.2 诊断知识的面向对象表示
不同零部件对象的故障模式对应不同的故障文档库,为此可分别对轴、轴承、齿轮、离合器等建立故障文档库,文档库的知识应可方便地修改、增加、删除等。每个文档库包含的知识可分为两部分,一部分为故障知识的模糊规则表示;另一部分为储存模糊诊断知识的神经网络。之所以用神经网络来储存模糊规则,是因为神经网络的学习机制可对原有规则进行修改、加入新规则、对修改的规则和新加入的规则进行检查等,且可避免在模糊推理过程中增加模糊性的缺点。在具体实现中,可采用五层FNN保存诊断知识,用神经网络实现模糊推理[7];而模糊规则则用网络的节点对象、连接权对象、连接结构等来翻译解释。网络对象可由开发的“神经网络建模工具”来实现,根据不同的故障规则知识表示可建立不同的网络对象。
对于具体网络,可通过网络对象所提供的初始化方法完成信息的搜寻,如:网络的最大层数,网络的输入节点、输出节点及隐层节点,每个节点对应的网络层号,与每个节点相连的前层所有的节点、连线,与每个节点相连的下一层所有的节点、连线,以及每个节点对象的所选函数、阈值等。所以网络的节点对象和连线对象通过初始化根据不同的诊断知识保存了不同的信息。这符合面向对象的知识表达,即以对象为中心,包含与其相关的完成特定任务的所有知识。
3 面向对象的诊断推理
面向对象的表达机制在诊断推理中起着重要的作用,因为面向对象表达的结构特征有助于有效地组织和控制推理行为,同时其本身具有自动推理机制[2]。诊断推理过程以五层模糊神经网络为例。它能根据网络中各个输入节点对象的输入值、阈值、输入输出函数,连线对象的权值,隐层节点对象的输入值、阈值、输入输出函数等一层层地前向推理,最终得到输出节点对象所存储的诊断值,如图5所示。之所以能自动地前向推理,是因为每层的节点对象及连线对象不仅存储了一定的故障规则知识,还存储了对象间的接口连接信息。这种诊断推理算法迅速、可靠。它不仅仅适用于某一特定网络,而且适用于其它具体网络,网络的层数及节点函数等网络信息均未定死。前面提到的网络对象的建模使它可对故障知识的更新适应得非常快,而故障知识的及时更新又保证了诊断的可靠、准确。所以这种面向对象的诊断推理方法可用于动态变化的系统,系统变化时,只要非常简单地操作即可更新故障信息。因此,当设备故障发生时,诊断网络会用最新的信息去进行诊断工作。
4 多态性及动态链接
多态性指相同的操作(或函数、过程)为不同的对象所接受时,可导致不同的行为,即同一操作有不同的实现方法。主要表现在:运算符重载、虚函数与动态链接。在图3所示的零部件类中,有一个画图函数DrawObject()就应用了多态性技术,它能根据不同的对象执行不同的动作。其声明如下:
class Parts{
......
virtual void DrawObject(){}
};
齿轮类的声名为:
class Gear:public parts{
......
virtual void DrawObject(){DrawGear();}
};
可以看出零部件类的DrawObject()函数什么也没有做,但是当用齿轮来产生一个具体对象时,则调用零部件类的DrawObject()函数,它能根据具体对象作出齿轮图形。也就是当这个基类Parts接受到图形消息时,能根据不同的具体对象如齿轮、轴承等调用不同的方法作出合适的动作,画出齿轮、轴承等不同的图形。动态链接主要指调用操作的机制。由于面向对象的程序设计中所有操作都与某个对象有关,因此可以在程序执行时根据对象特性具体确定操作。采用动态链接使程序设计具有良好的灵活性,程序段的功能可进行单纯的功能增减,而不必修改原有的程序。
- 祛魅固态电池:一文看懂这项大火的技术