资源描述:
《VB与Matlab混合编程探讨.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2005年9月爆轰波与冲击波第3期VB与Matlab混合编程探讨冯莉,李巨,邓云华,李玺钦,王兰(中国工程物理研究院流体物理研究所107室,四川绵阳621900)摘要:介绍了VB与Matlab混合编程的方法。充分利用VB编程简洁、开发界面友好等特点和MATLAB强大的数据计算和分析、图形处理功能,开发出复杂的、界面友好人机交互处理软件。关键词:Matlab;VB;ActiveX;混合编程1引言在开发数据采集分析软件时,有时需要对采集的数据信息进行处理、计算以及对分析结果进行实时、直观的图形化显示。Matlab是集数值分析、矩阵运算、信号处理和图形
2、显示于一体的高性能数学软件。VB在图形用户界面开发方面有很强的优势。利用VB开发数据采集系统应用界面,调用Matlab编写的数据处理子程序,可实现应用系统的快速开发。下面讨论VB调用Matlab的几种方法。2调用方法[1]211利用ActiveX技术由于Matlab支持ActiveX服务器端协议,因此,通过建立VB与Matlab之间的ActiveX自动化连接,实现在VB应用程序中调用Matlab。在VB中使用Matlab=createobject“(matlab.application”)创立Matlab的ActiveX对象,其中Matlab.A
3、pplication是Matlab的ActiveX对象在Windows注册表中的名称。在创建Matlab的ActiveX对象后,就可以使用这个对象的各种方法来调用Matlab了。Matlab.Application包含以下几个主要方法。(1)BSTRExecute(Commandasstring);执行Execute方法将调用Matlab执行一条Command字符串的Matlab命令,同时以字符串的形式返回命令的结果。(2)GetFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in]SAFEARRAY(dou
4、ble)pr,[in]SAFEARRAY(double)pi);此方法将指定的Matlab工作空间中的一个一维或二维数组送到VB程序中,Name指定了Matlab中的矩阵变量名,WorkSpace指定了该矩阵所在的工作空间,pr和pi分别是数组的实部和虚部。(3)PutFullMatrix([in]BSTRName,第3期冯莉等:VB与Matlab混合编程探讨107[in]BSTRWorkspace,[in]SAFEARRAY(double)pr,[in]SAFEARRAY(double)pi);此方法将VB程序中的一个一维或二维数组传送到指定的
5、Matlab工作空间中。(4)MinimizeCommandWindow方法,用于使Matlab命令行窗口最小化。(5)MaximizeCommandWindow方法,用于使Matlab命令行窗口最大化。在利用Matlab作为ActiveX自动化服务器时,VB应用程序将自动启动Matlab的Ac2tiveX自动化服务程序,并在程序执行完成后自动关闭ActiveX自动化服务程序。以计算一组温度对电阻的积分为例说明在VB中利用ActiveX自动化接口,使用上述方法后编程。把采集到的温度和电阻保存到数据文本文件(d:WDZ.dat)中;在命令字中,将
6、温度值存放到X矩阵中,电阻值放在Y矩阵,积分值Z在VB界面的文本框IntegralText中显示。在命令按钮Command1编写源码如下:PrivateSubCommand1_Click()Dimz(1To1)AsDoubleDimI()AsDoubleDimTempValueasDoubleSetMatlab=CreateObject("Matlab.Application")'初始化对象Matlab.Execute("loadd:WDZ.dat;y=WDZ(:,2);x=WDZ(:,1);z=rapz(x,y);")CallMatlab.G
7、etFullMatrix("z","base",z,I)Forj=1To1TempValue=z(j)NextIntegralText=Str(TempValue)CallMatlab.quitSetMatlab=NothingEndSub[2]212应用DDE与Matlab通讯DDE(DynamicDataExchange)允许MicrosoftWindows应用程序通过交换数据实现彼此间的通信。应用程序间通过建立一个DDE会话相互通信,发起会话的应用程序叫客户端(Client),对Client端作出响应的应用程序被称为服务器(Server)。
8、图1描述了Matlab作为服务器时与其他应用程序的通信机制。其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供,初