周志稳,马卫国
(长江大学机械工程学院,湖北 荆州 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