会员注册
发布信息

机泵群智能巡检系统之数据处理模块的开发研究
     引言
   在机泵群智能监测预知维修系统平台的开发中,需要对旋转机械设备的运行状态进行诊断。目前国内外普遍采用的行之有效的方法是共振解调法,又称高频共振法或包络分析法。这就需要将采集的振动信号通过希尔伯特变换进行包络。其基本原理为,对采集的振动信号进行解调处理,获得富含故障信息的解调波,通过对此解调波的振幅和频谱的分析,从而确定故障发生的部位。
   整个的系统开发是在Visual C++平台上实现的,然而Visual C++在数据处理上远不如MATLAB方便、快捷,所以在编写VC++应用程序时,为了利用MATLAB的强大的数值计算和处理功能来完成信号处理,采用了MATLAB的C++数学库来进行计算。

VC++中调用MATLAB函数
   MATLAB中的大多数函数都是基于MATLAB的数学库函数,若数学库中没有需要的函数,则通过编写.m文件,并调用数学库中相应的函数来实现。Matlab的数学库可以把大部分.m文件写成应用程序编译成可执行的exe程序,脱离MATLAB环境,也可以通过mcc编译为C/C++文件。
   在使用MATLAB函数过程中,存在两种情况,一是数学库中有的函数,二是数学库中没有的函数。下面对这两种情况进行分别先容。
● 调用数学库中的函数
在VC++中调用数学库中的函数可以进行直接的调用。但是由于MATLAB和C++之间的调用方式不尽相同。在MATLAB中的变量都是数组形式,因而VC++中调用都是通过MATLAB中的mwArray类型变量来进行赋值和传递变量的。一般使用的转换函数有hozcat、row2cat、ExtractScalar和ExtractData等。
在调用MATLAB数学库函数的VC++文件中加进头文件“matlab.hpp”,就可以直接使用MATLAB数学库函数,其方式与使用VC++中的函数相同,只是传递的参数类型不同。还需要对VC++环境和工程进行设置。
● 调用数学库没有的函数
   MATLAB数学库中没有的函数基本上都是.m文件。调用这些函数时,要使用mcc-t-L Cpp name把.m文件编译为相应的.hpp和.cpp文件。把天生的相应.hpp和.cpp文件加进到VC++工程中,在工程中使用这个函数的文件中加进相应的头文件(.hpp文件)。
   在MATLAB中大部分.m文件不是独立的,有很多一个.m文件中嵌套调用别的.m文件。在这种情况下,需要把在这个.m文件中嵌套调用的其他.m文件代码复制到这个.m文件。总之,在这个.m文件没有嵌套调用别的.m文件,仅仅只有数学库中函数和一些基本算法,是个独立的.m文件。有一点需要留意的是,将所需要的函数的在这个.m文件中的部分代码,一定要放到最前面,即在这个.m文件中可能包括多个子程序。
   假如不知道这个.m文件中是否调用了别的.m文件,通过mcc编译即可被发现。没有调用其他.m文件的文件,编译后只天生以这个文件命名的.hpp和.cpp文件,而假如调用了其他.m文件,则天生三个文件,分别是以这个文件命名的.hpp、.cpp文件和嵌套调用的那个.m文件命名的.hpp文件。

如何脱离MATLAB环境运行
   上面先容了VC++中调用MATLAB函数的方法,此时应用程序需要和MATLAB环境同时运行,并且通过MATLAB的执行程序路径,调用了MATLAB的动态连接库,实际上并没有完全脱离MATLAB,这是由于mcc功能上的限制。
如何真正脱离MATLAB呢?MATLAB提供了一个发行程序包,位于\extern\lib\win32 \mglinstaller.exe,执行它后将在指定目录下解压缩出bin和toolbox两个子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。重新启动之后,应用程序就可以在没有安装MATLAB的环境下运行了。

应用例程
   在机泵群智能监测预知维修系统平台的开发中,利用共振解调技术对设备振动的低频冲击所激起的高频共振波进行包络检波和低通滤波,即解调,获得一个对应于低频冲击的,而又放大并展宽了的共振解调波;通过此共振解调波的幅值和频谱分析,就可以在故障特征频率及其倍频处看到清楚的谱峰,而不含故障冲击的信号缺不会在共振解调波的频谱图中出现谱峰,因此很轻易确定故障发生的部位。
   由上所述,在系统开发的数据处理模块中,需要对采集的振动信号进行包络分析,这一数据分析过程是通过调用MATLAB中的希尔伯特变换函数来实现。
建立的工程文件名为Test。
(1)在MATLAB的安装目录下找到hilbert.m文件和shiftdim.m文件(hilbert.m文件中嵌套调用了shiftdim),然后在shiftm.m文件中的代码复制到hilbert.m文件中,并另存为hilbert1.m文件。
(2)在MATLAB的Command Window下使用命令mcc -t -L Cpp hilbert1,天生hilbert1.hpp和hilbert1.cpp两个文件,编译完后天生的函数名就是hilbert1(即文件名)。
(3)在VC++中建立工程test,并按照2.1中进行相关设置,使用hibert1函数
#include "stdafx.h"
#include "matlab.hpp"
#include "hilbert1.hpp"
void mccDemo()
{mwArray m3,m1,m2,t1;
double *dd=new double[1024];
double *d2=new double[1024];
for(int i=1;i<=1024;i++)
t[i]=i/1000.0;
t1=row2mat(1,1024,t);//把天生的时间序列赋给mwArray数组变量
m1=100*sin(50*t1);
m1.ExtractData(dd);
m3=hilbert1(m1,1024);//进行希尔伯特变换
m2=abs(m3); //MATLAB数学库函数,进行求模运算
m2.ExtractData(d2); //把mwArray的数据转换为double数组中
delete dd;
delete d2;
}
运行结果如图1所示,轴承振动信号的包络幅值谱图。测点的转速频率为15Hz,当轴承内圈有故障时,该轴承的采样信号的时域波形经包络分析后,对其进行相应的频谱分析,得出轴承的内圈故障特征频率。其中,对时域波形的包络分析,就是通过上述的调用过程实现的。
从图1可以看出最大幅值处的频率为88.87Hz,而理论上,用特征频率计算公式求得的故障特征频率为88.6Hz。因此,可以说明此方法是可行的。

结论
利用VC++来完成智能巡检系统的界面设计、数据治理、底层I/O等功能,而利用MATLAB来完成数据处理分析核心算法的设计,两者的有机结合降低了程序的开发难度和周期,进步了开发效率。该方法对其他领域如系统仿真、图像处理等专业领域也有很强的指导意义和推广价值。

参考文献
1 MATLAB C++ Math Library User's Guide [Z]. The
Math Works Inc. 2001
2 MATLAB C++ Math Library Reference [Z]. The
Math Works Inc. 2001
3 David J Kruglinski著,潘爱民等译. Visual
C++6.0技术内幕. 清华大学出版社, 1999
4 何强等.MATLAB扩展编程.清华大学出版
社, 2002
5 周连廷等.污水处理控制系统之数据处理
模块的开发.自动化仪表, 2002.5



  

相关阅读:  
  • 机载激光雷达数据处理软件系统开发的可行性探讨
  • 海量数据处理技术在智能交通中的应用(一)
  • 智能家居控制体系的组成,模块的建立,数据库的处理
  • HPLC之数据处理和计算机控制系统
  • 基于Windows的通风机性能试验数据处理系统
  • 数字水准仪的数据采集与数据处理系统研究
  • 基于pci交换的数据处理模块设计
  • 海量数据处理技术在智能交通领域应用
  • 实时数据处理模块板卡对齿轮的工艺分析提供有效的参考
  • 基于80C196KC的CAN总线智能数据采集模块设计
  • 特殊用户电能质量监测系统的数据处理技术
  • 基于TMS320VC5409和Cygnal单片机构成的移动数据处理传
  • 基于TMS320VC5409和Cygnal单片机构成的移动数据处理传
  • 基于dsp和cygnal单片机的移动数据处理传输系统
  • 电能质量监测数据处理的研究
  • 电能质量监测数据处理的研究
  • 基于80C196KC的CAN总线智能数据采集模块设计
  • 基于80c196kc的can总线智能数据采集模块设计(1)
  • 用于胎儿心电信号测量的嵌入式数据处理系统研究
  • 一种测量发光火焰温度的数据处理方法研究
  •  
     
     

    时间:2011年03月18日 05:32:48 来源:维库开发网 作者: 上一篇:MAX6685/6686在CPU温度保护中的应用(图) 下一篇:双口RAM CY7C026在高速数据采集系统中的应用(图)  (电脑版  手机版)
    Copyright by www.chinabaike.com;All rights reserved.