VB与MATLAB接口的实现
五种VB与MATLAB混合编程接口的方法
摘要: 为充分发挥Matlab与VB各自的优势,将二者结合起来进行工程应用软件的开发。
本文介绍了五种VB与MATLAB混合编程接口的方法,并对各方法性能的优劣进行了比较和评价。
关键词: Matlab;Visual Basic;ActiveX;DDE;MatrixVB;DLL;COM1引言Microsoft Visual Basic是由微软公司开发的可视化编程语言之一,由于它简单易学的特点,只要稍有编程基础就可以很快掌握,可视化的用户界面设计功能,把程序设计人员从繁琐复杂的界面设计中解脱出来。
因而很快就风靡全球,是一种十分强大和有生命力的Windows 编程语言。
但是我们知道VB语言也有它的缺点,即对于数值计算方面其能力欠佳。
Matlab是Matlab 擅长处理数值计算和系统模拟仿真,已被广泛应用于数字信号处理、电力系统仿真、图像处理、系统识别等各个领域。
但是Matlab也存在一些缺点: 1、和其他高级程序相比,程序的执行速度较慢,那是因为;2、对于底层硬件操作以及编程界面方面远远比不上VB、VC 等软件。
鉴于二者各自的优势,为了提高工程软件的开发效率和质量,将两种软件结合起来进行工程应用软件的开发便成了实际的需要。
本文主要讨论VB与Matlab混合编程的几种方法。
2Vb和Matlab接口实现方法介绍2.1借助ActiveX技术ActiveX是特点就是使不同的软件对象可以跨进程、跨平台并能在网络上进行交互。
Matlab ActiveX自动化服务的功能主要包括在(1) Execute (Command as String) 方法: 执行本方法将调用MATLAB执行一条Command 字符串决定的Matlab命令,同时返回一条字符串表示命令的执行情况。
任何能在MATLAB命令行窗口执行的命令均可以被包括在Command 字符串中。
(2) GetFullMatrix方法: 该方法用来将Matlab中的一个矩阵变量传送到VB 程序的一个一维数组或二维数组中。
vb调用matlab的四种方法
一、借助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方法类似。
示例代码如下:1Dim Matlab As Object ’声明对象2Dim MReal1(5,5) As Double ’声明存放实部的Double型数组3Dim MImag() As Double ’声明存放虚部的Double型数组4Set Matlab=CreateObject(“Matlab.Application”) '初始化对象5Matlab.Execute(“a=hilb(5)”) '执行Matlab命令6Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag) '将结果分别存入实部、虚部数组复制代码二、借助DDE技术DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。
vb与matlab接口
VB和Matlab/Simulink的接口方法:AttributeVB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseDim result As StringDim Matlab As ObjectSet Matlab = CreateObject("Matlab.Application")Private Sub Command1_Click()Matlab.execute (save "Text1")End SubPrivate Sub Command2_Click()Text2.Text = Matlab.execute("Test1")result = Matlab.execute("print-dbitmap")Imagel.Picture = Clipboard.GetDataEnd Sub基于COM组件的VB与MA TLAB接口编程摘要:针对VB和MA TLAB接口编程问题,本文提出一种基于COM组件的VB与MA TLAB接口编程方法。
并以具体的例子给出了这种方法的应用过程,实现了VB可视化界面和MATLAB信号分析及图形显示。
关键词:COM组件,VB,MA TLAB,接口编程1引言MA TLAB是Mathworks公司开发的科学计算环境,具有强大的计算绘图能力,并提供了大量的函数库,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。
但它的缺点是界面开发能力差,代码运行效率低。
V isual Basic是Microsoft公司推出的一款面向对象的应用程序开发工具。
VB与MATLAB编程接口应用
l 引入MatrixVB使得VB中可以调用 Matlab函数
MatrixVB是MathWorks针对vB提供的一个 Matlab库,它提供了600多个函数,包括基本的数学 运赏和功能强大的信号处理、线性代数、串运算及图形 图像处理功能等,为VB提供了强大的功能扩展。在 VB中引用Mat“xVB,调用Matlab函数,可以避免重 复性劳动.减少开发人员实现算法和界面设计的困难。
①引入MatrixVB直接调用Matlab函数相对把 M文件编译为DLL文件操作上简单,不需要额外调 用其它文件。
②把M文件编译为DLL文件可以在vB中调用 比MatrixVB更多的函数,因为除了可以把MatrixvB 中的函数对应的M文件编译为DLL调用以外,还可 以把Matlab本身的其它函数或者是自已单独编写的 函数也同样编译为DLL文件。因此可以在MatrixvB 的基础上更进一步扩展vB的功能。需要注意的是在 编译M文件时,如果M文件函数中使用了MlDEvA 函数库中没有的函数,如在SigGenerate函数中调用 wgn,编译时会提示找不到wgn函数,不能正常编译, 这时只需要把该函数的M文件一wgn.m从Matlab 的安装目录中拷贝至MIDEvA安装目录即可通过编 译。
为了使读者更好的理解,这里借助阵列信号处理
的算法仿真的实例对调用Matlab函数的过程进行详
细说明(其中代码经过简化)。
①首先在操作系统中注册MMatrix.dIl动态链接
库(其安装文件可以从Mathworks公司网站下载),
注册成功后.在vB工程中引用MMatrix。
一个基于VB与MATLAB实验系统的设计与实现
《 等数 学》 是理 工 专业 的重 要 基础课 ,但 对 与 MA L 高 T AB的混 合编 程 。系统结 构 如 图 1 示 。 所
图 1 系 统 结 构 不 意 图
Vg1S s m ac i cue sh m t j. yt rht tr ce ai e e c
. 2 学 过 程 往往 遇 到 这样 的难 题 : () 学 生 在 学 习过 1 界 面与 菜单 功能 介绍 1
系统的窗体分三个层次 :入 口窗体——问题选
地用 于课 堂教 学 。如 下介绍 系 统 的设 计 和实现 的 关
键技术 。
() 调入 MA L 1 T AB程 序— —把 在 “ 问题 ( 实
验 )选择 界 面” 中选择 的 问题 ( 验 ) 的 MA L B 实 TA
1 系统 的 设 计 思 想 、结 构 与 特 点
11系统 的设计 思想 与结 构 .
[ 收稿 日期]2 0 — 3 0 060—7 [ 作者简介]吴永深 (9 6 ) 15 一 ,男 ( ,广 东东莞人 ,高级讲师 ,E m i us zi(1. 汉) - al :w y@si. 1c t3 1n 0
维普资讯
第 2期
吴永 深 :一 个 基 于 v B与 MA L B实验 系统 的设 计 与 实 现 TA
TA 程方法 ,开发了 《 高等数学应用问题与数字信号处 四个显 示 区分别 是 :MA L B程序 显 示 区 、题 目内 包 理 虚 拟 实 验 系 统》。该 系统 融 合 了 V 和 MA AL 容显示 区 、图形 显 示 区和 文本 信息 显 示 区 ( 括结 B T B 。五 个 菜单 项 和功 的 优点 ,做 到 V B与 M T A A L B的无缝 连 接 ,无论 是 果 和 程 序运 行 过 程 的错 误 信 息 ) 掌握 或没 有掌 握 V B和 MA L B的师 生都 能 无 障碍 能 如下 : TA
基于vb与matlab的数学与数字信号处理实验系统的设计与实现
基于VB与MATLAB的数学与数字信号处理实验系统的设计与实现一、引言随着科技的不断发展,数学与数字信号处理技术在各个领域的应用越来越广泛。
为了更好地满足教学和科研的需求,我们设计并实现了一个基于VB(Visual Basic)与MATLAB的数学与数字信号处理实验系统。
该系统能够提供丰富的实验环境,帮助学生和研究者进行数学与数字信号处理的学习、研究和实验。
二、系统设计1. 系统架构:本系统采用VB作为前端开发工具,实现用户界面和实验管理功能;后端使用MATLAB进行数学与数字信号处理算法的实现。
通过VB与MATLAB 的接口,实现前后端的交互。
2. 实验管理模块:该模块包括实验的创建、编辑、删除和运行等功能。
用户可以根据需要创建新的实验,对实验进行编辑和删除,以及运行实验并查看结果。
3. 算法实现模块:该模块利用MATLAB强大的数学与数字信号处理功能,实现各种算法。
包括但不限于:信号生成、滤波器设计、频谱分析、信号调制解调等。
4. 用户界面模块:该模块使用VB设计,提供直观、易用的用户界面。
用户可以通过界面进行实验管理,选择算法,输入参数,查看结果等操作。
三、系统实现1. VB与MATLAB接口:通过VB与MATLAB的接口,实现VB与MATLAB之间的数据交换。
VB将用户输入的参数传递给MATLAB,MATLAB进行算法计算后将结果返回给VB,并在界面上显示。
2. 算法实现:利用MATLAB的函数库,实现各种数学与数字信号处理算法。
对于每个算法,我们编写相应的MATLAB函数,并通过VB调用这些函数来执行实验。
3. 用户界面设计:使用VB设计友好的用户界面,包括实验管理界面、算法选择界面、参数设置界面和结果显示界面等。
用户可以通过界面方便地进行实验操作和管理。
四、结论本系统是一个功能强大、易于使用的数学与数字信号处理实验平台。
通过VB与MATLAB的结合,我们实现了实验管理的便捷性和算法实现的强大功能。
基于VB与MATLAB接口的PID控制器实现
随着计算机测控技术的发展 , 计算机测控系统作 为 当今工 业控 制 的主流 系统 , 已取 代常规 的模 拟监 测 、 控制 、 显示 等仪 器设 备 , 具有 较 高级且 复杂 的计算 方 并 法 和处理 方法 , 以完 成各 种过程 控 制 , 为生 产管 理人 并 员、 工程 师或操 作员 提供 所需要 的信息 , 以实 现计算 机 监控 的 目的 。V B作 为 一 种 开发 计 算 机 测控 系统 的 应用 软件 , 在工程 中已被普 遍采 用 , 开发 的界 面也深 受 工程技 术人 员 的好 评 。工程 中 , 也通 常 引入 MA L B TA 工 具 以实现对 大 量数 据 的分 析 和处 理 。 因此 , 何 实 如
Absr c : D a a t rt n n s p ro me s d o t n a in c v o a h e e te b s o to tt . e t a t PI p r mee u i g i e r d ba e n at u t ur e t c i v h e te n r lsa e Th f e o i c e sn I c n r li g a g rt m s e i n d n mp e n e y MAT n r a ig P D o toln lo ih i d sg e a d i l me td b LAB r g a p o r mmi g. e n Th ma — - n ma
VB与MATLAB接口的实现
VB与MATLAB接口的实现今天,我们制作一个能够与Matlab进行交互的应用程序。
程序运行结果如图所示。
运行结果技术要点●引用Matlab库●执行Matlab命令●结束Matlab实现过程■新建项目打开Visual ,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中选择“Windows应用程序”,在名称域中输入“CnMatlab”,然后选择保存路径。
单击“确认”。
■添加控件向当前窗体添加五个Button按钮,两个Picture控件,一个Label控件,一个Hscroll控件和一个Vscroll控件。
单击菜单“项目|添加引用”,选中“Matlab Automation(V ersion5.3)Type Library”这一项。
注意:本程序只能在安装有Matlab的机器上运行。
■设置属性将Label控件和Command按钮的Text属性设置为与界面一致。
在此不再赘述。
■添加代码Dim str1 As String' 显示正弦图Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command1.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")matlab.MinimizeCommandWindow()str1 = "t=1:0.1:2*pi;y=sin(t);plot(t,y)"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示三维扇形图Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command2.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "sale=[100 150 400 250];pie3(sale,[0 0 1 0],{'春季','夏季','秋季','冬季'})"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示三维螺旋线图Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command3.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "t=0:0.1:8*pi;plot3(sin(t),cos(t),t)"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示立体球图Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command4.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "k = 5;n = 2^k-1;[x,y,z] = sphere(n);c = hadamard(2^k);surf(x,y,z,c);"str1 = str1 & "colormap ([1 1 0; 0 1 1]);axis equal"matlab.Execute(str1)matlab.Quit()matlab = NothingShowPic()End Sub' 显示立体波浪图Private Sub Command5_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command5.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "[X,Y,Z] = peaks(30);surfc(X,Y,Z);colormap hsv;axis ([-3 3 -3 3 -10 5])"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub■运行程序单击菜单“调试|启动”或单击图标运行程序。
VB与MATLAB混合编程研究与实现
VB与MATLAB混合编程研究与实现摘要:介绍了VB与MATLAB混合编程的5种方法,分别利用com 组件技术与MatrixVB完成了VB与MA TLAB混编,实现了图像的绘制。
从两种实验结果来看,这两种方法占用计算机内存小,且编程语言简单,充分利用了VB与MATLAB的特点,简化了编程过程。
关键词:VB;MATLAB;com组件;MatrixVB0引言VB具有方便的资源文件集中管理模式、开发周期短、开发环境友好等特点。
MATLAB具有强大的计算机绘图能力,并且提供大量的数据库,但是界面开发能力差、代码运行效率低。
将VB与MATLAB 的特点结合起来,运用VB与MATLAB混合编程实现仿真,使两者相得益彰,不失为一种有益的尝试。
1VB与MATLAB接口编程方法VB与MATLAB混合编程有多种方法,各有优缺点,主要有下面几种方法。
1.1利用ActiveX技术ActiveX自动化(OLE自动化)协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。
在VB下通过ActiveX自动化接口可将MATLAB作为Visual Basic语言的一个ActiveX部件调用。
但是这种方法不能脱离MATLAB运行环境,占用计算机内存较大。
1.2利用可执行文件技术这种方法将MATLAB的运算模块生成可执行的exe文件,然后在VB运行环境下调用。
这种方法占用内存较小,运行效率较高。
1.3利用MatrixVB技术MatrixVB 是MathWorks 公司为VB 开发的插件,插件增强了VB 绘图和计算的函数集合。
它包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能,用来补充VB 本身内建函数和图形处理的不足。
这种方法运行效率高、占用内存小。
1.4利用动态数据交换(DDE)技术动态数据交换(DDE)是在Windows环境下支持客户/服务器计算模式的重要技术。
由于VB支持DDE客户端功能,MA TLAB提供了DDE服务功能,因此,利用VB和MATLAB的动态数据交换能力,可以实现在VB应用程序中调用MATLAB。
利用COM组件实现VB对MATLAB的调用
利用COM组件实现VB对MATLAB的调用1.运算程序设计MATLAB在进行矩阵运算时具有天然的优势,对于大部分常用的最基本的功能函数都提供了现成的算法函数,可以供用户自由调用。
用户只需要确定好接口参数,不需要浪费时间另外开发算法。
在MATLAB中编制完成算法后保存好M 文件。
组件生成编写完所有的M函数后,就可以打包生成COM组件了。
在MATLAB指令窗中输入指令comtool,打开工程编辑器“MATLAB COM Builder”窗口,如图1所示。
图1 COM组件工程编辑器窗口点击File\ New Project,建立新的工程文件,工程设置窗口如图2所示。
图2 工程设置窗口如果程序中需要显示图形图像,必须选中Use Handle Graphics Library项,其他的一般不用修改,采取默认设置。
确认无误后,可以向工程中添加相应的组成文件,然后点击Build\COM object生成组件文件(见图3)。
图3 工程编译窗口所创建的文件便可以在本地计算机中进行部署,如需在其他计算机中部署该COM组件,还需要点击Component\Package Component进行打包,如图4。
图4 工程编译窗口至此,COM组件就已经生成成功,所生成的组件存放在了MATLAB工作目录下的以工程文件名为标题的文件夹中(本例中为AAAA)。
组件在计算机中的部署点击进入AAAA\distrib目录下,双击AAAA.exe,如图5所示,按照提示部署COM文件。
图5 部署COM组件部署完成后,点击进入C盘根目录下,找到AUTOEXEC.bat批处理文件,用文本形式打开输入set path=C:\AAAA文件夹的路径\distrib\bin\win32并重启计算机,至此文件便注册成功,若在注册过程中提示注册AAAA_1_0.dll和distrib\bin\win32目录下的mwcomutil.dll失败,如图6所示,请采用以下解决方案。
MATLAB与VB混合编程方式简易教程
3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。
1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。
其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。
二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。
MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。
2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。
这种方法可以脱离具体的MA TLAB环境,运行效率较高。
3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
vb调用matlab程序步骤-wrl修改
先把VB,VC ,matlab都安装好。
例如建立一个 M函数文件,在matlab下调试好你的m文件,如:function Y=myfunction(a,b)Y=a+b;将myfunction.放入E:根目录下。
一.matlab下做com组件,生成dll文件1. 在matlab的command window里面敲入mex –setup (对matlab编译器配置命令下输入,注意有空格)Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Compaq Visual Fortran 6.1[5] Compaq Visual Fortran 6.6[6] Intel C++ 9.1 (with Microsoft Visual C++ 2005 linker)[7] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 linker)[8] Intel Visual Fortran 9.0 (with Microsoft Visual C++ 2005 linker)[9] Intel Visual Fortran 9.0 (with Microsoft Visual C++ .NET 2003 linker)[10] Lcc-win32 C 2.4.1[11] Microsoft Visual C++ 6.0[12] Microsoft Visual C++ .NET 2003[13] Microsoft Visual C++ 2005[14] Microsoft Visual C++ 2005 Express Edition[15] Open WATCOM C++ 1.3[0] NoneCompiler: 11Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? y 由于我VC 的安装目录正在C盘,因此我选择yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2007a\mexopts.batFrom template: C:\PROGRA~1\MA TLAB\R2007a\bin\win32\mexopts\msvc60opts.batDone . . .2.设置matlab编译器,在matlab的command window里面敲入mbuild –setup (对matlab 编译器配置命令下输入,注意有空格)Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Lcc-win32 C 2.4.1[5] Microsoft Visual C++ 6.0[6] Microsoft Visual C++ .NET 2003[7] Microsoft Visual C++ 2005[8] Microsoft Visual C++ 2005 Express Edition[0] NoneCompiler: 5Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\ApplicationData\MathWorks\MATLAB\R2007a\compopts.batFrom template: C:\PROGRA~1\MATLAB\R2007a\bin\win32\mbuildopts\msvc60compp.batDone . . .--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll succeeded--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll succeeded2. 开一个dos窗口,进入/bin/win32目录下(matlabroot为你机器上matlab安装的路径),例如,我的安装目录在C盘,在dos下进入:C:\Program Files\MATLAB\R2007a\bin\win32 文件夹,输入:regsvr32 mwcomutil.dll,即对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。
基于VB与MATLAB接口实现三维图输出技术
在VB 环境下通过编程实现3D 图形的输出,需要大量的专业化的科学计算,这就给不是从事专业图形处理的科学技术人员带来很大麻烦。
为了解决这一问题,采用编程效率很高的通用编程平台VB 实现系统的控制与数据采集,调用具有强大矩阵运算、数据处理和图形输出功能的MATLAB 语言实现三维图形的绘制。
经常可见VC 调用MATLAB 实现三维图的绘制,但本方法运用界面友好易于编程的VB 语言调用MATLAB COM 接口编程,成功实现了系统的三维图输出,使得VB 语言的用途得到新的创新。
1MATLAB 的COM 自动化技术MATLAB 支持组件自动化(COM Automation ),即一个COM 协议,该协议允许一个程序或组件去控制另一个程序或组件。
MATLAB 支持的组件技术有以下三方面的内容:①在MATLAB 下运行其它软件的组件。
②在其它程序下运行MAT-LAB 的组件(包括MATLAB 自身)。
③将所需的MATLAB 功能,利用MATLAB 自带的COM Builder 工具自动转换生成组件,供其它程序使用。
在其它程序下运行MATLAB 的组件时,交换发起方的应用程序称为客户端,交换的响应方MATLAB 称为服务器端,自动化服务器的核心是包含一个或多个供其它应用程序创建和连接的基于Idispatch 的接口,MATLAB 作为自动化服务器时,可以被Windows 平台上任何可作为自动化控制器的应用程序使用。
通过使用MATLAB 自动化服务器功能,用户可以在自己的应用程序中执行MATLAB 的命令,并从MATLAB 的工作空间中获取数据以及向MATLAB 输出数据。
将MATLAB 作为一个自动化服务器使用时,必须知道MATLAB Axtive 对象在系统注册表中定义的名字ProgID ,一般使用MATLAB.application ,当应用程序使用MATLAB.application 作为ProgID 启动MATLAB 自动化服务器时,表示将MATLAB 自动化服务器作为一个共享服务器,当其它应用程序以同样的ProgID 开启MATLAB 服务器时,系统不再另外初始化一个服务器,而是使用同一个服务器来完成所有的请求。
VB调用Matlab制作的COM组件实现二者混合编程
4、Matlab中处理返回结果并使用它进行进一步计算或可视化等操作。
四、注意事项
在使用基于COM的VB与Matlab混合编程时,需要注意以下几点:
1、确保VB COM接口和Matlab代码之间的兼容性。这通常需要对两种语言进 行适当的转换和映射。
2、COM接口的创建和实现可能需要耗费大量时间和精力,因此需要仔细规划 和设计。
4.处理异常
在调用Matlab函数时,你可能会遇到各种异常情况,例如参数类型不匹配、 参数数量不匹配等等。为了处理这些异常,你需要在VB代码中使用异常处理机制:
result = myMatlabObject.YourFunctionName(input1, input2)
' Handle the exception here
1、创建Matlab COM组件
首先,我们需要创建一个Matlab COM组件。打开Matlab,编写你希望从VB 调用的函数,例如一个用于图像处理的函数。然后在命令窗口中输入以下命令以 创建COM组件:
这将打开COM工具箱。在“新建项目”窗口中,选择“COM库”,然后输入库 名和位置。接下来,添加你的Matlab函数到库中。
在这个例子中,如果myMatlabObject.YourFunctionName(input1, input2) 抛出一个异常,那么这个异常会被Catch块捕获,并可以进一步处理。
5.在VB中使用返回值 在你的Matlab函数返回值后,你可以在VB中使用它。例如:
在这个例子中,如果result不是Nothing,那么你可以进一步使用这个结果。 6.错误检查和清理
1、创建 MATLAB函数:首先
例如: function obj = MyClass(x) function result = add(obj, y)
VB环境下引用Matlab的方法
行 数 据 交换 ,- * 3 -  ̄ 大 大 方便 在 某 些特 定 领 域 的 用 户 。提 供 了 三种 可 以借 鉴 的 方 法 , 实现 V B与 Ma l f a b的数 据 链接 。 关 键 词 :动 态链 接 ; 动 态数 据 交换 ; A c t i v e X 技 术
Re f e F e n c e Ma t l a b Me t ho d un de r VB Env i r o nm e n t
将使得 V B在开发过程 中更加强大 、有效。
以使用这个对 象的各种方法 来调用 Ma l f a b了。 ( 其 中 ,m a t —
l a b . a p p l i c a t i o n是 Ma t l a b的 A c t i v e X对象 在 Wi n d o w s 注册 中的
1 引言
V i s u l a B a s i c 是 Mi c r o s o f t 公 司推 出的可视化 开发工具 ,是
增强 V B的数值处理功能和图形显示能力。
V B控件 :窗体 ( F o r m ) 、多文件 窗体 ( M D I F o r m ) 、 标 签
( L a b e 1 ) 、 i c t u r e B o x )均 为为用
S UN J i — s h u a i
( A r my 7 1 7 9 9, S h a n d o n g Z i b o 2 5 5 3 0 0, C h i n a )
Ab s t r a c t : Ca u s e d b y a l a c k o f Vi s u a l Ba s i c s o f t wa r e i n n u me r i c a l c lc a u l a t i o n , e f f e c t i v e l y l i n k c a l c u l a t i o n b y Ma t l a b l a n - g u a g e , ma k e b o t h b e t t e r f o r d a t a e x c h a n g e ,c a n g r e a t l y f a c i l i t a t e t h e u s e r s i n a p a r t i c u l a r i f e l d .T h i s p a p e r p r o v i d e s t h r e e
VB结合MATLAB完美编程
VB结合MATLAB完美编程MATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。但是MATLAB语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。Visual Basic作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的技术支持。1 基本思路及实现方法MATLAB提供了与C++、Fortran的程序接口,并没有提供直接与VB的接口。目前VB与MATLAB混合编程方面主要使用以下一些方法:(1)在VB中通过调用MATLAB的引擎(Engine)接口,使用Windows的OLE或ActiveX通道与MATLAB通信。通过Object.Execute MATLAB语句在程序中直接使用MATLAB提供的函数库和图形库。这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个MATLAB进程,影响程序运行速度,占用内存。(2)通过使用嵌入VB的矩阵函数库MatrixVB的方法。MatrixVB是由原MathTools公司开发的第三方插件,利用与MATLAB相似的函数、语法嵌入到VB中,可以象使用VB的函数、命令一样使用MATLAB函数。这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入VB语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。安装后,只需在打开的工程中添加MatrixVB库即可(在工程->引用对话框中选中MM atrix)。但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。(3)借助Visual C++与MATLAB的接口,将MATLAB的程序文件(.M)编译为动态链接库(.DLL),VB在代码中调用生成的.DLL中的函数,实现算法,便于用户脱离MATLAB环境使用。由于算法部分采用C++语句,运行速度较快,可应用于实时运算。这种方法对开发者在设置和编程上有一定要求,本文将详细阐述具体实现步骤。其基本思路如图1所示。第一步,编写M文件。在MATLAB中打开Editor,按照MATLAB程序格式输入代码,实现算法,调试成功。注意:M 文件必须以Function开始,避免在VC++中出现转换错误。第二步,使用MATLAB6.0新提供的编译插件MATLAB Add-in在VC++中转换为C文件。在转换前做好MATLAB与VC++的接口连接。步骤如下:·在MATLAB中运行“mex -setup”,选择Microsoft Visual C/C++ version 6.0选项,安装MATLAB Add-i n文件到VC++目录,确认;接着运行“mbuild -setup”,选择Microsoft Visual C/C++ version 6.0作为本地默认编译器;然后在MATLAB下运行“cd prefdir ”和“mccsavepath”命令,MATLAB Add-in可以脱离MA TLAB环境找到MATLAB路径。·在VC++中选择“工具 tools ->定制(customize)->附加项和宏文件 Add-ins and Macro Files 页”,选中“MATLAB Add-in”。这样,在VC++工具栏出现MATLAB Add-in图标,在VC++新建工程对话框中会出现“MA TLAB Project Wizard”。至此连接工作完成。·打开VC++,在新建工程中选择“MATLAB Project Wizard”,按照提示,选择“Shalled M-dll”,输入M文件位置,VC++开始转换。如果M文件没有错误,在工程文件夹中会生成一系列.C文件。其中与M文件同名的.C 文件即为转换的C代码。第三步,编译DLL文件(强烈建议不要对刚刚生成的C代码作任何修改)。选择“编译”菜单,构建.DLL文件,在文件夹中会生成与工程名相同的DLL文件。第四步,在VB中调用DLL文件。在第二步生成的C代码中找到所要的接口函数,注意大小写,记下函数名。在V B中使用Declare语句声明这个函数。在窗体的“通用-声明”输入如下语法:Declare Function /Sub <函数名> Lib “<dll文件名>”Alias “<函数名>” <参数表> as <type>(具体语法可参看VB使用手册)。在程序代码中直接调用声明的函数即可。需要注意的是函数调用过程中的参数传递问题。由于VB和C的数据类型以及参数传递形式不太一样,传递不当,可能会造成调试困难。特别是MATLAB中用到的大量矩阵(数组)参数,调用需十分当心。本文在下面例子中采用文件方式传递参数,利用VB和MATLAB的文件读写功能传递数组参数,对于实时性要求不高的应用,可以方便稳妥地实现数据传递。2 应用举例在VB中利用随机数生成16个10以内的整数,作为一个信号序列,利用MATLAB的快速傅立叶变换函数(FFT ())对序列进行变换,再将变换结果传递回VB,并显示在窗体上。在MATLAB中编辑好M文件(test.m),实现读取序列文件及FFT并写回序列文件,调试成功。代码如下: function tfid=fopen 't.txt''rt+' %以读写文本方式打开文件a count =fscanf fid '%d' %文件以整数格式读入矩阵am=fft a count %FFT运算frewind fid %文件指针指向文件头fprintf fid '%f\n' m %向文件写入矩阵mfclose fid按照前述步骤在VC++中转换为test.c文件,找到接口函数,本例为mlfTest()。void mlfTest(void){mlfEnterNewContext(0,0);Mtest();mlfRestorePreviousContext(0,0);}编译生成test.dll文件。在VB中生成随机序列并写入文件:Private Sub Command1_Click()RandomizeDim i As IntegerDim a As IntegerDim b As StringText1.Text = ″″Open App.Path & ″\t.txt ″ For Output As #1For i = 1 To 16a = Int(10 * Rnd)Print #1, LTrim(a)b = b & Str(a) & Chr(13) & Chr(10)Next iText1.Text = bClose #1End Sub声明mlfTest()函数:Private Declare Sub mlfTest Lib ″G \test\dll\dll.dll″调用该函数的事件代码:Private Sub Command2_Click()MlfTest '调用函数End Sub本例中未向函数传递参数,也无需函数返回运算结果,故采用调用子程序过程(Sub)方式直接调用。结果由VB 读取文件获得:Private Sub Command3_Click()Dim str1 As StringDim str2 As StringText2.Text = ″″Open App.Path & ″\t.txt″ For Input As #1Do While Not EOF 1Line Input #1 str1str2 = str2 & str1 & Chr(13) & Chr(10)LoopText2.Text = str2Close #1End Sub本例在Windows XP、VB6.0、VC++6.0、MATLAB6.5下调试通过。VB与MATLAB的混合编程,可以脱离MATLAB环境运行,有利于程序发布及使用。通过二者结合,减少了设计算法的时间,降低了编程难度,同时兼顾了代码安全和界面友好。程序界面如图2所示。。
matlab与程序设计语言vb接口的方法研究与实现
优势和Matlab在数学处理方面的优势结合起来, 互取长补短, 就 可以达到软件开发的高效性与可用性。 要实现Matlab和VB的综 合应用, 两个软件之间的通讯是一个关键的问题。 一般常用的方 法是通过DDE 建立连接, 或是通过调用API 函数建立连接, 在 高版本的Matlab中还可以通过把Matlab程序写成M文件通过生 成 COM 组件被 VB 调用实现两者的通讯[2]。但 DDE 的通讯方式 效率比较低, 数据通讯速度不快 ; 通过调用API函数建立连接的 方法虽然比较方便, 但灵活性不够; 而COM组件的方式对于一 些复杂的工具箱函数无法实现。 本文提出了一种利用Microsoft Access实现Matlab和VB通讯的方法, 此方法简单易懂, 而且与 强大的数据库工具连接, 很好地实现了对复杂运算数据的管理和 报表的制作。
收稿日期:2005-11-18 32 | Techniques of Automation & Applications
件间关系图如图1所示。
计算机应用
Computer applications
《 自 动 化 技 术 与 应 用 》 2 0 0 6 年 第 25 卷 第 8期
Matlab命令, 并可以从Matlab获取数组数据或把数组数据从 Matlab中输出。 要把Matlab作为一个自动化服务器使用, 按照两个步骤进行。 (1)调用一个COM自动化服务器 图1 软件间关系图 VB在系统中起到了两方面的作用, 一是进行人机界面的开 发, 第二是实现对Matlab运算的控制。 Access数据库相当于VB 和 matlab的一个中间件, Matlab运算所得的结果通过VB显示 在人机界面上, 通过人机界面的对话将数据保存在Access数据库 中, 而Matlab运算所需要的数据都是通过VB写入数据库的, 只 是由VB控制运算时读取数据库中相应数据表中的数据。 在 Matlab的安装过程中, 注册信息中Matlab COM对象的 名称为 “MATLAB.Application” 。 调用Matlab服务器的确切方 式取决于所选择的控制器, 但所有控制器都需要这个名称来确认 服务器。 在 VB 中, 要建立自动化接口, 必须要引用 “Matlab. Application (VersionX) Type Library” 组件以实现操作Matlab 的功能。 (2)使用Execute命令 Matlab自动化的Execute 方法可以在Excel、 VB或任何支 持VBA的程序中使用。 Execute方法把命令字符串作为变量返回
VB程序中实现调用MATLAB的方法
收稿日期:2000207227 作者简介:王跃强(1978-),男,硕士研究生,主要研究方向:光电检测及其自动化.文章编号:1001-9081(2001)02-0095-02VB 程序中实现调用M AT LAB 的方法王跃强,王纪龙,王云才(太原理工大学应用物理系,山西太原030024)摘 要:本文介绍了在VB 应用程序中利用动态数据交换和ActiveX 自动化(O LE 自动化)协议实现的两种调用MAT LAB 函数的方法。
通过这两种方法实现了VB 的可视化界面与MAT LAB 强大的数值分析和图形显示的能力的结合。
关键词:MAT LAB ;VB ;DDE ;客户/服务器中图分类号:TP312VB 文献标识码:B 通过对M AT LAB 的应用程序接口的分析,可以发现M AT LAB 提供了客户/服务器(Client/Server )功能。
利用其中的动态数据交换(DDE )服务功能和ActiveX 自动化(O LE 自动化)服务功能,可以实现在VB 中对M AT LAB 函数的调用,并通过mxArrays (M AT LAB 中的基本数据类型)与M AT LAB 工作空间交换数据,从而增强VB 的数值计算能力和数据的可视化能力。
下面介绍在VB 程序中调用M AT LAB 的方法。
1 MAT LAB 的动态数据交换服务功能动态数据交换(DDE )是在Windows 环境下支持客户/服务器计算模式的重要技术,两个Windows 应用程序之间可以通过交换数据来相互连接,由于VB 支持DDE 客户端功能,M AT LAB 提供了DDE 服务功能,因此利用VB 和M AT LAB 的动态数据交换能力,可以实现在VB 应用程序中调用M AT LAB 。
VB 应用程序首先通过确定服务器名和主题(topic )建立与M AT LAB 的DDE 会话,服务器名和主题唯一地确定了这次会话,在会话期间VB 应用程序作为客户端,M AT LAB 作为服务端,客户端与服务端可以就确定的项目(item )交换数据。
VB应用程序与Matlab接口技术的实现
VB应用程序与Matlab接口技术的实现
陈耀东
【期刊名称】《新余学院学报》
【年(卷),期】2004(009)002
【摘要】VB应用程序与Matlab接口技术的实现是充分利用VB可视化的编程技术的优点和Matlab数值计算功能强大、数据输入与数据输出灵活的特点,将VB应用程序中复杂的数学计算通过接口技术交由Matlab来完成,从而使程序开发人员从繁琐的数学编程中解脱出来.
【总页数】3页(P11-13)
【作者】陈耀东
【作者单位】新余高等专科学校,计算机与信息工程系,江西,新余,338031
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.基于VB与MATLAB接口的PID控制器实现 [J], 周慕逊;王正初
2.基于VB与MATLAB接口实现三维图输出技术 [J], 赵虎
3.Delphi应用程序与Matlab接口技术的实现及应用 [J], 何蓓;李辉
4.VB6.0中如何用ActiveX Automation实现应用程序数据的接口 [J], 张小红;陈贤忠;李则鸣
5.基于VB与MATLAB接口实现三维图输出技术 [J], 赵虎
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB与MATLAB接口的实现:
实例说明
在本实例中,我们制作一个能够与Matlab进行交互的应用程序。
程序运行结果如图78-1所示。
图78-1 运行结果
技术要点
z引用Matlab库
z执行Matlab命令
z结束Matlab
实现过程
■ 新建项目
打开Visual ,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中选择“Windows应用程序”,在名称域中输入“CnMatlab”,然后选择保存路径。
单击“确认”。
■ 添加控件
向当前窗体添加五个Button按钮,两个Picture控件,一个Label控件,一个Hscroll控件和一个Vscroll控件。
单击菜单“项目|添加引用”,选中“Matlab Automation(Version5.3)Type Library”这一项。
注意:本程序只能在安装有Matlab的机器上运行。
■ 设置属性
将Label控件和Command按钮的Text属性设置为与界面一致。
在此不再赘述。
■ 添加代码
Dim str1 As String
' 显示正弦图
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As
System.EventArgs) Handles Command1.Click
Dim matlab As Object
matlab = CreateObject("matlab.application")
matlab.MinimizeCommandWindow()
str1 = "t=1:0.1:2*pi;y=sin(t);plot(t,y)"
matlab.Execute(str1)
matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")
matlab.Quit()
matlab = Nothing
ShowPic()
End Sub
' 显示三维扇形图
Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
Dim matlab As Object
matlab = CreateObject("matlab.application")
str1 = "sale=[100 150 400 250];pie3(sale,[0 0 1 0],{'春季','夏季','秋季','冬季'})"
matlab.Execute(str1)
matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")
matlab.Quit()
matlab = Nothing
ShowPic()
End Sub
' 显示三维螺旋线图
Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command3.Click
Dim matlab As Object
matlab = CreateObject("matlab.application")
str1 = "t=0:0.1:8*pi;plot3(sin(t),cos(t),t)"
matlab.Execute(str1)
matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")
matlab.Quit()
matlab = Nothing
ShowPic()
End Sub
' 显示立体球图
Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command4.Click
Dim matlab As Object
matlab = CreateObject("matlab.application")
str1 = "k = 5;n = 2^k-1;[x,y,z] = sphere(n);c = hadamard(2^k);surf(x,y,z,c);"
str1 = str1 & "colormap ([1 1 0; 0 1 1]);axis equal"
matlab.Execute(str1)
matlab.Quit()
matlab = Nothing
ShowPic()
End Sub
' 显示立体波浪图
Private Sub Command5_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command5.Click
Dim matlab As Object
matlab = CreateObject("matlab.application")
str1 = "[X,Y,Z] = peaks(30);surfc(X,Y,Z);colormap hsv;axis ([-3 3 -3 3 -10 5])"
matlab.Execute(str1)
matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")
matlab.Quit()
matlab = Nothing
ShowPic()
End Sub
■ 运行程序
单击菜单“调试|启动”或单击图标运行程序。
小结
Matlab具有数值运算方便、快捷和画图的优点。
它与VB结合,能实现功能强大的程序。
因此,我们利用可以开发出很有使用价值的程序。