鐘功祥 等
摘要:結合MATLAB強大的運算能力和VB的友好界面,詳細介紹VB調用MATLAB生成的COM組件在鉆井泵故障診斷中的應用過程,提高編程的工作效率。其中鉆井泵故障診斷數(shù)據(jù)處理使用小波分析方法,得出小波分析的能量比和波形分析圖形,對鉆井泵故障診斷數(shù)據(jù)處理提供了簡便途徑。
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 引言
鉆井泵是石油鉆井循環(huán)系統(tǒng)中關鍵的設備,因結構復雜和工況惡劣,生產(chǎn)中常因異常故障導致施工停止,從而造成極大的經(jīng)濟損失。鉆井泵故障診斷一般分為狀態(tài)信號采集、故障特征提取、故障識別和狀態(tài)預測,其中故障特征提取一般摻雜其它因素的影響,因此,需要對采集的信號進行必要的處理,以突出故障特征。
鉆井泵故障診斷信號處理計算量相當復雜,若用單一的軟件處理數(shù)據(jù),其編程復雜和耗費時間,且給編程人員造成了很大的工作量。
文章采用VB6.0,充分利用VB的界面和較強的開發(fā)軟件的能力,并且它的編程速度簡單快捷,但VB的數(shù)值計算能力很弱,處理數(shù)據(jù)運算能力很差。所以用VB不能很好的處理鉆井泵故障診斷數(shù)據(jù)。
而MATLAB是MathWorks公司推出的一種具有強大的數(shù)值計算、信號處理和圖形繪制能力的軟件,但是MATLAB的界面開發(fā)能力較弱,給工程計算人員帶來很大的不變。
文章結合兩者間的優(yōu)點,通過混合編程,將復雜的鉆井泵故障診斷數(shù)據(jù)處理變得簡單易做,提高了編程工作效率。
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環(huán)境運行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是參數(shù)定義(自定義)。
在VB窗體中初始化組件,并且在初始化時要與參數(shù)定義相結合,其結構為:Set xiao = New fen.fen。
2 MATLAB中的M文件
鉆井泵故障診斷分為動力端和液力端,它的數(shù)據(jù)處理方法包含有經(jīng)驗模態(tài)分解、小波分析、細化處理和時域分析等。文章主要介紹鉆井泵故障診斷液力端小波分析方法,其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)。再根據(jù)鉆井泵故障診斷的要求,編寫和設計相應的輸入數(shù)據(jù)按鈕和通道按鈕。
在此工作面上點擊“輸入?yún)?shù)”按鈕,選擇“通道”,最后再點擊“小波分析”,可以得出小波分析的能量比和分析圖形。
4 結束語
文章介紹基于COM組件的MATLAB和VB混合編程在鉆井泵故障診斷中的應用,利用了VB的良好用戶界面和MATLAB的強大計算能力與圖形繪制能力,提高了編程人員的工作效率,為鉆井泵故障診斷的數(shù)據(jù)處理的方法提供了便利。
通過MATLAB與VB的混合編程技術的運用,可以把此方法運用在處理復雜數(shù)據(jù)和繪制復雜圖形上,發(fā)揮兩軟件的優(yōu)點。
在編寫完程序后,將VB和MATLAB打包,可以單獨在其它機器上運行,使編寫的軟件程序具有更高保密性。
參考文獻:
[1]馬培勇,羅紅潤,周思柱.基于COM組件的MATLAB和VB 混編方法在機械可靠性工程中的應用[J].2012.7.
[2]張賽民,陳靈君.VB調用Matlab制作的COM組件實現(xiàn)二者混合編程[J].2006.
[3]王江萍,鮑澤富.MATLAB與VB混合編程及其鉆井事故診斷中的應用[J].2009.4.