当前位置: 网学 > 编程文档 > VB > 正文

Matlab与VB集成

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式

工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。Matlab是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与VB在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的。下面将分别讨论Matlab与vb集成的四种方法。

一、借助 ActiveX部件

Microsoft把所有以COM为基础的技术统称为ActiveX技术。自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。

Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述:

● BSTR Execute([in] BSTR Command);

BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。

● void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi);

该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。

● void PutFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in] SAFEARRAY(double) pr,[in] SAFEARRAY(double) pi);

该方法将一个mxArray放入指定的工作空间。各参数的含义及调用方法与GetFullMatrix方法类似。

示例代码如下:

Dim Matlab As Object’声明对象

Dim MReal1(5,5) As Double

’声明存放实部的Double型数组

Dim MImag() As Double

’声明存放虚部的Double型数组

Set Matlab=CreateObject(“Matlab.Application”)’初始化对象

Matlab.Execute(“a=hilb(5)”)

’执行Matlab命令

Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag)

’将结果分别存入实部、虚部数组

二、借助DDE技术

DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。图1描述了Matlab作为服务器时与其他应用程序的通信机制。

图1 借助DDE时应用程序通信机制


图1 借助DDE时应用程序通信机制

其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供。

初始化会话时,客户端应用程序必须指定两个参数service name(服务器应用程序的名称)和topic(会话主题)。

下面的示例说明了VB与Matlab建立并完成DDE会话的全过程:

说明: TextInput是输入文本框,TextOutput是输出文本框。在TextInput中输入Matlab命令回车后,由Matlab在后台执行并将结果返回给TextOutput显示。

Sub TextInput_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn then

’初始化TextInput与Matlab间的DDE会话

TextInput.LinkMode = vbLinkNone

TextInput.LinkTopic = “MATLAB|Engine”

TextInput.LinkItem =“EngEvalString”

TextInput.LinkMode = vbLinkManual

szCommand = TextInput.Text

’执行Matlab命令

TextInput.LinkExecute szCommand

TextInput.LinkMode = vbLinkNone

’初始化TextOutput与Matlab间的DDE会话

TextOutput.LinkMode = vbLinkNone

TextOutput.LinkTopic = “MATLAB|Engine”

TextOutput.LinkItem

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号