APP下载

基于VB与MATLAB混合编程在钻井泵故障诊断中的应用

2013-02-26钟功祥

价值工程 2013年3期

钟功祥 等

摘要:结合MATLAB强大的运算能力和VB的友好界面,详细介绍VB调用MATLAB生成的COM组件在钻井泵故障诊断中的应用过程,提高编程的工作效率。其中钻井泵故障诊断数据处理使用小波分析方法,得出小波分析的能量比和波形分析图形,对钻井泵故障诊断数据处理提供了简便途径。

Abstract: Combined with the powerful operation ability of MATLAB and friendly interface of VB, the paper introduces in detail the application of COM components generated by VB call MATLAB, improves the efficiency of programming. The drilling pump fault diagnosis data processing uses wavelet analysis method, and draws the energy of wavelet analysis and waveform analysis graph, providing a simple way to the drilling pump fault diagnosis data processing.

关键词: MATLAB;VB;COM组件;钻井泵故障诊断

Key words: MATLAB;VB;COM components;drilling pump fault diagnosis

中图分类号:TP39 文献标识码:A 文章编号:1006-4311(2013)03-0192-02

0 引言

钻井泵是石油钻井循环系统中关键的设备,因结构复杂和工况恶劣,生产中常因异常故障导致施工停止,从而造成极大的经济损失。钻井泵故障诊断一般分为状态信号采集、故障特征提取、故障识别和状态预测,其中故障特征提取一般掺杂其它因素的影响,因此,需要对采集的信号进行必要的处理,以突出故障特征。

钻井泵故障诊断信号处理计算量相当复杂,若用单一的软件处理数据,其编程复杂和耗费时间,且给编程人员造成了很大的工作量。

文章采用VB6.0,充分利用VB的界面和较强的开发软件的能力,并且它的编程速度简单快捷,但VB的数值计算能力很弱,处理数据运算能力很差。所以用VB不能很好的处理钻井泵故障诊断数据。

而MATLAB是MathWorks公司推出的一种具有强大的数值计算、信号处理和图形绘制能力的软件,但是MATLAB的界面开发能力较弱,给工程计算人员带来很大的不变。

文章结合两者间的优点,通过混合编程,将复杂的钻井泵故障诊断数据处理变得简单易做,提高了编程工作效率。

1 MATLAB制作COM组件

1.1 将M文件转化成dll文件 文章采用MATLAB7.8,将M文件转化成dll时,先在MATLAB的Command Window中输入mbuild - setup,对compilers进行设置,选择Microsoft Visual C++ 6.0 。然后在Command Window输入deploytool新建一个工程文件(MATLAB菜单栏上点击File—New —Deployment Project)。

在新建的窗口中添加M文件,然后点击Build the project生成dll文件。如果要脱离MATLAB环境运行dll文件,则需要安装MATLAB中的MCRIstaller.exe,然后再打包。

1.2 VB调用dll文件 打开VB新建工程标准exe,在菜单栏“工程”中选择“引用”,进入引用对话框。在引用对话框中选择生成的dll文件,笔者通过COM组件生成的dll文件的命名是fen 1.0 Type Library,并且要在VB的通用栏中声明COM组件,其结构为:Private xiao As fen.fen,其中xiao是参数定义(自定义)。

在VB窗体中初始化组件,并且在初始化时要与参数定义相结合,其结构为:Set xiao = New fen.fen。

2 MATLAB中的M文件

钻井泵故障诊断分为动力端和液力端,它的数据处理方法包含有经验模态分解、小波分析、细化处理和时域分析等。文章主要介绍钻井泵故障诊断液力端小波分析方法,其MATLAB中M文件的程序如下:

function E=xiaobofenjian (unnamed2)

a6=wprcoef(y,[3 5]);

B=unnamed2/500*9.8;%单位换算

a7=wprcoef(y,[3 6]);

t=0:2/8192:2-2/8192;

a8=wprcoef(y,[3 7]);

figure(2);subplot(211);

subplot(4,2,1);plot(t,a1);ylabel('S30');

plot(unnamed2);title(‘单位换算);

subplot(4,2,2);plot(t,a2);ylabel('S31');

wname='sym8';lev=5;

subplot(4,2,3);plot(t,a3);ylabel('S32');

[c,l]=wavedec(unnamed2,lev,wname);

subplot(4,2,4);plot(t,a4);ylabel('S33');

s=wden(c,l,'rigrsure','s','mln',lev,wname); %滤波处理

subplot(4,2,5);plot(t,a5);ylabel('S34');

M=mean(s);%求平均值

subplot(4,2,6);plot(t,a6);ylabel('S35');

q=(s-M);%零值化处理

subplot(4,2,7);plot(t,a7);ylabel('S36');

subplot(212);

subplot(4,2,8);plot(t,a8);ylabel('S37');

plot(s);title(‘滤波后信号);

E=wenergy(y); %求能量比

y=wpdec(q,3,'db16','shannon');%小波包分解

EE=num2str(E');

%信号重构

EEE=mat2str(E');

a1=wprcoef(y,[3 0]);

sel ok]=listdlg('Liststring',EE,'Name','能量比E

a2=wprcoef(y,[3 1]);

的值', 'ListSize', [400 200]);

a3=wprcoef(y,[3 2]);

if ok==1

a4=wprcoef(y,[3 3]);

clipboard('copy',EEE);

a5=wprcoef(y,[3 4]);

end

3 VB调用MATLAB

在VB的窗体中添加一个按钮并且在该按钮下写出VB调用MATLAB的程序,其结构为:Call xiao.xiaobofenjian(1, E, unnamed2)。再根据钻井泵故障诊断的要求,编写和设计相应的输入数据按钮和通道按钮。

在此工作面上点击“输入参数”按钮,选择“通道”,最后再点击“小波分析”,可以得出小波分析的能量比和分析图形。

4 结束语

文章介绍基于COM组件的MATLAB和VB混合编程在钻井泵故障诊断中的应用,利用了VB的良好用户界面和MATLAB的强大计算能力与图形绘制能力,提高了编程人员的工作效率,为钻井泵故障诊断的数据处理的方法提供了便利。

通过MATLAB与VB的混合编程技术的运用,可以把此方法运用在处理复杂数据和绘制复杂图形上,发挥两软件的优点。

在编写完程序后,将VB和MATLAB打包,可以单独在其它机器上运行,使编写的软件程序具有更高保密性。

参考文献:

[1]马培勇,罗红润,周思柱.基于COM组件的MATLAB和VB 混编方法在机械可靠性工程中的应用[J].2012.7.

[2]张赛民,陈灵君.VB调用Matlab制作的COM组件实现二者混合编程[J].2006.

[3]王江萍,鲍泽富.MATLAB与VB混合编程及其钻井事故诊断中的应用[J].2009.4.