周志穩,馬衛國
(長江大學機械工程學院,湖北 荊州 434023)
?
VB和MATLAB混合編程在井眼軌道設計上的運用
周志穩,馬衛國
(長江大學機械工程學院,湖北 荊州 434023)
摘要:為提高連續油管鉆井井眼軌道設計的便捷性,采用基于COM組件的VB和MATLAB混合編程方法,將繪圖的代碼進行封裝,只要即時改變參量數值,就可得出相應的圖形,并可比較不同參數下圖形的特點。該設計實現了VB編寫的多個模塊調用一個MATLAB程序的功能,減少了程序編寫的工作量,提高了程序開發的效率。
關鍵詞:Visual Basic;MATLAB;混合編程;井眼;軌道設計
連續油管是一種小直徑柔性管柱,作為鉆井管柱在國外已經被廣泛應用于老井加深和開窗側鉆鉆井。連續油管鉆井更適應于復雜結構井和小井眼鉆井,探究其井眼軌道的設計和控制具有十分重要的指導意義。井眼軌道設計作為一種鉆井施工的參考,可以知道已鉆井眼軌道是否符合設計的要求,從而進一步指導待鉆井眼的施工,及時調整井斜角和方位角,以便準確鉆達目標點[1]。連續管井眼軌道的設計與常規鉆井一樣,可以采用解析法,軌道設計的關鍵在于根據給定的條件求出軌道的關鍵參數,只要求出此參數,軌道上所有參數就都可以求出[2],然后根據所求出的參數完成井眼軌道的繪制。國內外一般使用C#語言結合OpenGL技術實現軌跡的繪制,但此種方法編程復雜,開發成本高。VB具有良好的可視化功能,但圖形處理和數值計算能力欠佳。MATLAB具有強大的圖形處理的能力,并且編寫簡單,編程效率高,但可視化界面編寫復雜[3]。因此,本文采用基于COM組件的VB和MATLAB混合編程方法來解決二維井眼軌道的繪制問題。
1設計方案
目前,運用得比較多的MATLAB和VB編程方法有:(1)動態數據交換(DynamicDataExchange,DDE)[4];(2)中間文件傳遞方式[5];(3)ActiveX技術(即Automationserver技術)[6];(4)動態鏈接庫(DynamicLinkLibrary,DLL)[7];(5)MatrixVB方式[8-9];(6)COM組件技術[10]。在上述6種方法中,前3種調用過程較復雜,并且不能在脫離MATLAB的環境下運行;Mideva雖然能脫離MATLAB環境,但已經停止發行;而MatrixVB采用解釋執行的方式,因此執行效率比較低,難以進行實時處理[11];COM組件不但可以脫離MATLAB環境,而且實時處理能力強,可移植性好。因此,本文將采用COM組件來實現VB和MATLAB的混合編程。
2基于COM組件的VB與MATLAB接口實現方法
2.1系統環境要求:
(1)Mircrosoftwindow7系統或MircrosoftwindowsXP系統;
(2)MATLAB2010b;
(3)MircosoftVisualBasic6.0;
(4)MircosoftVisualStudio2008ExpressEditions。
2.2M文件轉化為DLL組件
首次進行M文件轉化DLL操作時,需要配置編譯環境[12],具體操作如下:在命令窗口輸入mbuild-setup回車,根據提示信息,選擇MicrosoftVisualC++ 2008編譯器。當窗口中出現Done…字樣時,表示配置成功。然后接著在命令行中輸入deploytool回車,在彈出的deploymentproject頁面中設置工程的名稱為trajectory1,將下面的目標(Target)選項設置為genericCOMcomponent(如圖1)。確定后進入deploymenttool界面,選擇工具欄AddFile為工程添加M文件,如需在未安裝MATLAB的電腦中運行,則還需依次進行如下操作:Project-setting-advance選中MCRStartupOption選項,然后進行Project-build操作,生成DLL文件,默認存放于Distrib的文件夾中,文件名為trajectory1_1_0.dll,同時生成的還有src文件夾,最后進行打包發布即可。

圖1 Depolyment project窗口Fig.1 Depolyment project window

圖2 引用對話框設置窗口Fig.2 Reference settings window
2.3VB調用MATLAB
在菜單欄的工具選項卡中選擇引用,彈出引用窗口,在引用框中找到trajectory1 1.0TypeLibrary選項,勾選后單擊確定,添加成功后還需要對組件進行聲明和初始化,其語法結構為:
DimDEAstrajectory1.trajectory1
SetDE=Newtrajectory1.trajectory1
在VB程序中調用接口函數,其語法結構為:
CallDE.trajectory1(Rz1,Dkop1,St1,Alpha_b1)
在VB創建的工程中引用已經生成的DLL文件,實現VB和MATLAB接口的信息傳遞和調用(如圖2)。
3應用實例
以鉆井設計中最優先考慮的剖面類型——“直-增-穩”型二維剖面為例,進行具體的說明[13-14]。
3.1二維井眼軌道的設計及其求解方法


圖3 三段式井眼軌道Fig.3 Three sections borehole trajectory
(1)
Rz(1-cosαb)+Dnwsinαb=St。
(2)
其中,Dt為靶點垂深,m;St為靶點水平位移,m。
本文將在VB中進行計算,計算出的結果傳遞到MATLAB中進行繪圖,從而實現VB對MATLAB的調用,由于只要軌道的關鍵參數求出,就可對軌道圖形進行繪制,因此只要將關鍵參數作為MATLAB的函數參數,編寫M文件,即可實現及時變參,這樣就可達到在不同條件下的不同情況中繪制軌道圖形的效果。從而本文的6種情況下的軌道圖形的繪制只需調用一個MATLAB程序,即6種情況可共用一個DLL文件,從而大大減少了程序編寫的工作量,提高了效率。
3.2編寫M文件
運用MATLAB接近數學表達式的自然化語言進行編程,簡單易行。
M文件的代碼如下:
functiontrajectory1(Rz,Dkop,St,Dmw,alpha_b,Dt)
plot([0 0],[0,-Dkop],′r′)
holdon%繪制直井段
hd=pi/180;
t=acos((Rz-St+Dmw*sin(alpha_b*hd))/Rz);
k=t+pi;
alpha=pi:pi/50000:k;
x=Rz+Rz*cos(alpha);
y=-Dkop+Rz*sin(alpha);
plot(x,y)
holdon%繪制圓弧井段
x1=(St-Dmw*sin(alpha_b*hd)):0.001:St;
y1=(x1-St)*tan(alpha_b*hd+pi/2)-Dt;
plot(x1,y1,′g-′)%繪制穩斜井段
legend(′垂直段′,′造斜段′,′穩斜段′);
title(′三段式二維井眼軌道′);
xlabel(′水平位移(m)′);
ylabel(′垂深(m)′);
gridon
axisequal
3.3VB程序的調用
依照前面介紹的VB調用MATLAB的方法,對生成的DLL文件,在VB工程中進行引用,并且對COM組件進行聲明和初始化,最后實行調用。圖4為主界面部分,每個子菜單對應一種設計工況(見上文3.1),如圖5所示。在不同參數條件下的軌道可以同時顯示在界面中(如圖6所示),并且可以將軌道的井深、井斜角和方位角輸出與實鉆的情況進行對比,從而選出最優的井眼軌道曲線,為實踐提供參考。在與已知油井數據進行對比后,結果表明與實際情況基本相符。

圖4 三段式井眼軌道系統界面Fig.4 Interface of three sections borehole trajectory

圖5 某種條件下的工作界面Fig.5 Work interface in a certain condition

圖6 不同設計要求下的軌道形狀的對比Fig.6 Contrast of trajectories for different requirements
4總結
本文實現了VB調用MATLAB所生成的同一DLL組件,對不同參數條件下的軌道進行繪制,從而減少了編程的工作量,提高了程序編寫的便捷性,節約了軟件的存儲,較傳統的商業軟件優勢明顯。雖然目前還不能囊括所有的井眼軌道類型,但是可以在此基礎上進一步進行大位移井眼軌道(如拋物線形井眼軌道、懸鏈線形井眼軌道)的設計,這也是下一步的工作方向和重點。
參考文獻:
[1]劉修善.定向鉆井軌道設計與軌跡計算的關鍵問題解析[J].石油鉆探技術,2011,39(5):1-7.
[2]石曉兵,喻著成,陳平.側鉆水平井、分支井井眼軌跡設計與控制理論[M].北京:石油工業出版社.2009.
[3]鐘功祥,王仕強,呂治忠.基于VB與MATLAB混合編程在鉆井泵故障診斷中的應用[J].價值工程,2012(3): 192-193.
[4]謝松,周衛,李文林. 基于VB與MATLAB混合編程的數據可視化與數據挖掘軟件的研究[J]. 中國中醫藥圖書情報雜志,2014,38(2):8-11.
[5]孟力力,楊其長.VB調用Matlab的COM組件實現二者混合編程[J]. 電腦開發與應用,2008,21(6):24-26.
[6]王 麗,遲永濱. 基于VB與Matlab的發動機外特性曲線繪制[J].小型內燃機與摩托車,2013,42(1):38-41.
[7]巫慶輝,龐艷偉. 基于VB與Matlab的磁化曲線實驗教學軟件的開發[J]. 渤海大學學報:自然科學版;2013,34(2):166-171.
[8]蒙冠杰,蔡益舟,柯年杭.VB與Matlab混合編程的實用方法[J].電腦編程技巧與維護,2014(12):11~12.
[9]孟繁娟,杜永平.Vb和Matlab混合編程方法—MatrixVB[J].計算機技術與發展,2008,18(5):76-78.
[10]馬培勇,羅紅潤,周思柱. 基于COM組件的MATLAB和VB混編方法在機械可靠性工程中的應用[J]. 計算機應用與軟件,2012,29(7): 189-191.
[11]宋廣東,劉統玉,王昌.基于COM組件的VB與MATLAB混合編程實現振動信號處理[J].山東科學,2010,23(1):32-35.
[12]馮旭.在VB開發環境中調用由MATLAB函數轉化的DLL[J].西北民族大學學報:自然科學版;2004, 25(2):65-67.
[13]孫騰飛,高德利,張輝.目標垂深和造斜率不確定條件下的水平井軌跡設計[J].特種油氣藏,2012,19(4):141-144.
[14]郭鳳超,陶亮,賈曉斌.水平井鉆井管柱力學模型與軟件開發[J].石油機械,2013,41(7):28-32.
[15]高遠文,魯港.直增穩剖面設計問題的解析解[J].礦探工程,2010,37(1):13-15.
ApplicationofhybridprogrammingwithVB
andMATLABinwelltrajectorydesign
ZHOUZhi-wen,MAWei-guo
(SchoolofMechanicalEngineering,YangtzeUniversity,Jingzhou434023,China)
Abstract∶To improve the convenience of coiled tube drilling trajectory design, we employ COM component based VB and MATLAB hybrid programming method and encapsulate the drawing code.It can draw the corresponding figure and compare the characteristics of different parameters figures,if only parameter value is instantaneously changed.We realize the calling of VB based multiple modules to one MATLAB program, which decreases the workload of program writing and improves software development efficiency.
Key words∶Visual Basic;MATLAB;hybrid programming;well;trajectory design
中圖分類號:TE24;TP311.52
文獻標識碼:A
文章編號:1002-4026(2015)04-0089-05
作者簡介:周志穩(1988-),男,碩士研究生,研究方向為先進鉆采技術。
基金項目:國家科技重大專項(2011ZX05036-006)
收稿日期:2014-11-09
DOI:10.3976/j.issn.1002-4026.2015.04.017