嵌入式故障诊断专家系统的M/Qt转换及实现*

2015-01-01 03:12耿朝阳王宏见谢安明
西安工业大学学报 2015年5期
关键词:嵌入式代码故障诊断

耿朝阳,王宏见,谢安明

(1.西安工业大学 计算机科学与工程学院,西安710021;2.上海信息安全技术工程研究中心,上海201204)

20世纪80年代末以来,神经网络这个涉及多种学科的新的高科技领域,吸引了众多的神经生理学家、心理学家、数理科学家、计算机与信息科学家及工程师们进行研究和应用[1].神经网络日益成为当代高科技领域中的竞争热点.

随着现代化的发展,设备的规模和复杂度越来越高,对设备运行效率的要求越来越高,因此对设备在线故障检测和故障诊断方法有了更高的要求,故障诊断方法的研究越来越受到关注[2].由于设备故障信息的不确定性,以及故障现象与故障原因之间的复杂的非线性关系,故障诊断的难度越来越高,故障诊断的效率和准确度不高,需要探索一种新的方便、快捷、可靠的诊断方法,以提高故障诊断的效率和准确度[3].

基于神经网络的故障诊断方法,因为神经网络自身固有的非线性映射能力、超强自适应能力及学习能力,使其在故障诊断领域中拥有独特的优势[4].但是神经网络算法复杂,如果直接使用C/C++语言编程,虽然运行效率较高,但易出错,且修改困难.传统的方法中,首先在 Matlab环境中对目标对象进行仿真建模,并进行实验调试.确定模型正确后,再手工将 Matlab中的模型翻译成硬件或者软件加以实现,工作量大而且易出错.

文中将神经网络与专家系统融合应用于某装备的设备故障诊断,使用BP神经网络对某装备的电信号的状态特征参数进行分类和识别,有效地将状态分离开来,根据实时采集到的装备内部不同位置的电信号判断其是否正常工作,并能对该装备出现的故障类型进行识别,首先在Matlab环境中输入故障样本,对BP网络进行训练,将训练好的神经网络进行转换,生成C++代码,将代码移植到Linux环境中,减少了手工工作量,提高了系统的开发效率和可靠性,达到快速诊断的目的.

1 诊断方法的研究

使用神经网络进行故障诊断时,需要将故障信息或故障现象输入神经元网络,网络的权值和阈值.存储在神经网络的各节点中.为了得到合适的权值和阈值,需要对网络进行训练[5].选定适当的网络结构和规模,用能反映被检测设备系统特性的变量组作为神经网络的输入,以对应的状态编码为期望输出,构成输入/期望输出样本对,借助一定的学习算法,对神经网络进行训练,确定神经网络的权值和阈值,网络训练完成后将神经网络的权值和阈值存储下来.使用训练好的神经网络进行故障诊断,采集到的设备信号送到神经网络的输入节点,经过神经网络的运算处理,产生相应的输出结果编码,与故障编码进行比较即可方便地确定故障[6-7].

使用BP神经网络进行故障诊断的网络结构如图1所示,xi表示神经网络的输入信号,wi表示神经元之间的权,yi表示神经元的信号输出.

图1 BP神经网络结构图Fig.1 BP neural network structure

在被检测设备内部提取信号,内部各元件连接处的电压值为V1~V6,如图2所示,从设备研制单位得到设备正常工作时这些工作点的电压范围,如果在正常范围内,用“1”表示,不在正常范围内,用“0”表示,“*”表示任意值.如:电源输出电压V1如果不在正常范围内,则电源故障,V1如果在正常范围内则电源正常;电源正常的情况下,如果电源电缆的输出端电压V2不正常,则电源电缆故障,如果V2正常,则电源电缆正常.由此得到设备故障征兆列表见表,对应电压值V1~V6正常与否,可快速确定设备内部某个元件是否发生故障.故障征兆见表1.

图2 设备内部工作电压采集点Fig.2 Voltage acquisition points of equipment

表1 设备故障征兆列表Tab.1 List of equipment fault symptoms

2 环境神经网络的建立

训练样本直接来自设备工作过程中的故障信息,对各节点处的工作电压进行归一化处理后得到各种典型故障特征值,U1~U6作为BP神经网络的训练样本.测试的训练样本见表2.

用BP神经网络进行故障诊断,需确定BP网络的结构,要采集6个节点的电压值,抽取6个故障特征参数,因此网络的输入层神经元个数为6,经过反复的训练确定隐含层神经元个数为17,输出层为3个神经元,表征7种状态,这就需要对故障进行简单编码,见表3.

表2 故障诊断特征参数值Tab.2 The parameter values of Fault characteristics

表3 设备故障源编码Tab.3 Source codes of equipments faults

Matlab中提供了很多工具箱,主要用到神经网络工具箱,开发人员只需要调用神经网络函数库中的相应的函数基本就能实现所需要的应用功能,减少了开发难度并缩短了工程开发周期,将表2的训练样本数值保存在矩阵P中,作为神经网络的训练样本矩阵,表3的故障源代码作为神经网络的目标矩阵T对网络进行训练.以下是BP的网络脚本代码

Matlab中所提供的神经网络库提供的训练函数train,开发者根据实际需要可以调用此函数对网络进行训练使之完成函数的收敛,达到或接近预先所设定的误差目标,如图3所示,训练消耗一定的时间,经过多个周期的运算后,函数逼近和收敛到所预定的误差范围内,满足了预定的训练要求.

图3 Matlab中BP网络的训练Fig.3 BP network training in Matlab

3 BP网络代码转换

3.1 BP网络中生成的 ModelSim模型

使用Matlab中的组件Real-Time Workshop对生成ModelSim模型进行代码转换,可以直接把Matlab里的M语言转换成嵌入式平台下所运行的C代码形式,想要实现这个目标,必须得把训练好的神经网络转换为ModelSim模型,因为组件Real-Time Workshop的代码转换功能是要把训练好的神经网络转换成ModelSim模型后才能进行转换,神经网络工具箱中所提供的gensim函数能实现此功能,将预先设定好的神经网络保存到对象net中,然后执行脚本代码gensim(net,1)后,生成目标模型ModelSim模型,然后执行gensim(new_net,1).

3.2 ModelSim模型的修改

Real-Time Workshop在进行转换时首先搜索模型中的Input与Output标准模块,将标准模块翻译成函数目标输入和输出.调用gensim生成的网络模型,神经网络模块被封装成一个对象,但生成的网络模型不能直接转换成预想的C代码,默认设置下,输入外接虚拟数据源,输出外接虚拟示波器.用模型库中的标准输入和输出模块代替虚拟数据源和虚拟示波器.将神经网络模块和标准输入输出模块连线,为代码转换做准备.

3.3 ModelSim模型中生成的C++代码

在嵌入式系统目标平台上运行Linux下的Qt环境生成的可执行程序,Qt下运用的编译器是GCC(GNU Compiler Collection),由 GCC 编 译ModelSim模型生成C++代码,再由Matlab的编译器Bordland C生成和硬件相关的可执行程序,对编译器和相关参数进行有效设置,在tool下找到Real-time Workshop组件,使用Options对相关选项设置,进行代码转换.

转换前重要参数设置为

① 转换目标模板设置为ERT,则实际使用的是Embbed Real-Time Workshop,此模式化了嵌入式应用且更容易嵌入代码.

② 语言类型设置为C++,使生成的代码以C++形式存在,以便Qt程序调用.

③ 勾选Generate code only选项,使转换结果形成头文件和CPP文件.

④设置执行及采样时间为定步长,否则不能生成有效代码.

⑤确定目标硬件类型,指定硬件中的高低字节顺序及字长大小.

⑥数据接口中选择生成目标语言标准为C89/C90(ANSI).

⑦数据交换选项中选择C-API,此模式下转换的代码以函数方式呈现入口和出口.

4 代码嵌入Linux/Qt程序的算法产品化实现

4.1 Qt与 Matlab代码的冲突问题

Test-data.cpp中存储了大量的常用数据,文中训练好的神经网络权重与偏移等参数以常量的方式记录在此,供程序调用.文件Ert-main.cpp中的main函数作为程序入口点,以周期性的采样频率独立运行,实现在线实时仿真.自动生成代码时,可以参考文件Ert-main.cpp中main函数运算模型的调用方法,编译时屏蔽此main函数,再用Qt的main函数代替文件Ert-main.cpp中main函数作为整个程序的入口点.

4.2 在Matlab中生成的主要代码模块

以Test.mdl模型测试为例,转换后生成的主要文件见表4.

表4 代码模块Tab.4 Code module

Test-data.cpp中存储了大量的常用数据,文中训练好的神经网络权重与偏移等参数以常量方式记录在此,供程序调用,把主函数Ert-main.cpp文件中的main函数当成程序入口点,以周期性的采样频率独立运行,实现在线的实时仿真,自动生成代码时,可以参考main函数中运算模型的调用方法,编译时屏蔽这个main函数,用Qt的主函数代替作为整个程序的入口点.

4.3 编 译

将上文中由Real-Time Workshop生成的C代码与Qt程序进行联合编程后,在Qt环境下进行编译生成可以在嵌入式系统中运行的可执行程序,然后通过交叉编译链将其下载到嵌入式硬件平台下位机,选取输入测试值,运行在Matlab中的神经网络代码程序并记下输出结果,用同样的数据测试在Qt环境中测试联合编程后的Qt程序,实验表明经过转化为可在嵌入式系统中运行的可执行C代码形式下的神经网络,与Matlab中的输出结果完全相同,达到了预期目标.如图4所示.

图4 联合编程测试结果Fig.4 Joint programming test results

5 结 论

文中通过使用Matlab与Qt编程工具联合编程,快速将神经网络算法转换为能在嵌入式平台上运行的C/C++代码,实现了神经网络算法快速应用到嵌入式故障诊断系统的目标,验证了这一方法的实用性和可行性,方便开发人员进行高效的程序开发和实验调试,缩短了产品的开发周期,节约了开发成本.神经网络算法快速应用到嵌入式故障诊断系统的同样适合更复杂的应用神经网络算法的场合,目标系统可以是嵌入式平台,也可以是普通的Windows平台,在控制、模式识别等领域都可以广泛的推广和应用.

[1] 飞思科技产品研发中心.神经网络理论与Matlab7实现[M].北京:电子工业出版社,2005.Feisi Science and Technology R & D Center.Neural Network Theory and Matlab7Realization[M].Beijing:Publishing House of Electronics Industry,2005.(in Chinese)

[2] 姚光强,陈立平.基于COM 技术的C#与 Matlab混合编程[J].计算机工程,2008,34(14):87.YAO Guang-qiang,CHEN Li-ping.Integrated Programming Between C# and Matlab Based on Component Object Model[J].Computer Engineering,2008,34(14):87.(in Chinese)

[3] 从爽.面向 Matlab工具箱的神经网络理论与应用[M].合肥:中国科学技术大学出版社,2003.CONG Shuang.Toolbox for MATLAB Neural Network Theory and Application[M].Hefei:Press of University of Science and Technology of China,2003.(in Chinese)

[4] 王永庆.人工智能原理与方法[M].西安:西安交通大学出版社,2006.WANG Yong-qing.The Principle and Method of Artificial Intelligence[M].Xi’an:Xi’an Jiaotong University Press,2006.(in Chinese)

[5] 耿朝阳,刘德明.嵌入式故障诊断专家系统[J].西安工业大学学报,2013,33(11):889.GENG Chao-yang,LIU De-ming.Embedded Fault Diagnosis Expert System in Equipment[J].Journal of Xi’an Technological University,2013,33(11):889.(in Chinese)

[6] 戚涌,李千目,刘凤玉.基于BP神经网络的网络智能诊断系统[J].微电子学与计算机,2004,21(10):10.QI Yong,LI Qian-mu,LIU Feng-yu.Network Fault Intelligent Diagnosis Base on BP Neural Network[J].The Microelectronics and Meter Computer,2004,21(10):10.(in Chinese)

[7] 蒋宗礼.人工神经网络导论[M].北京:高等教育出版社,2001.JIANG Zong-li.Introduction to Artificial Neural Network[M].Beijing:Higher Education Press,2001.(in Chinese)

猜你喜欢
嵌入式代码故障诊断
基于包络解调原理的低转速滚动轴承故障诊断
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
TS系列红外传感器在嵌入式控制系统中的应用
创世代码
创世代码
创世代码
创世代码
数控机床电气系统的故障诊断与维修
搭建基于Qt的嵌入式开发平台
基于LCD和排列熵的滚动轴承故障诊断