浅谈VB与MATLAB相结合的三种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈VB与M AT LAB相结合的三种方法
樊金荣① 黎洪生②
摘 要 本文分别介绍了在VB中调用M atlab的三种方法:利用动态链接库DLL、利用动态数据交换D EE以及利用A ctivex自动化技术。并以具体的例子给出通过这些方法实现了VB的可视化界面与M atlab强大的数值计算和图形显示能力的结合。
关键词 客户 服务器 M atlab DLL DD E A ctivex 技术
一、前言
V isual Basic是由M icro s oft公司开发的在W indow s95 98平台上的一种十分强大和有生命W indow s编程语言之一,具有易学易用、编程简单、程序集成化程度高及界面可视化又能实现大多数W indow s编程目的,因而一经推出就风靡全球然而,VB提供的数学函数及其有限,因而使之在数值计算和图形显得力不人心。M atlab是M ath W o rk s公司开发的一种工程计算语言。用这个交互系统可以解决很多工程计算问题,特别当涉及到矩阵和矢量形式的问题时,M atlab提供了强大的矩阵处理的和绘图功能。显然,将二者结合起来,能实现VB 可视化界面下运用M A TLAB强大的数值计算和图形显示,使VB编更加灵活快洁。
二、采用动态链接库DLL方法
M atcom是一个从M A TLAB到C++的编译器,它可以节省用户的运算时间和内存要求。M ath too ls公司利用M atcom4技术编写了M ideva工具软件,它可以借用C++编译器将M atlab下的M-文件转换为可被VB调用的DLL或独立瓣可执行文件。VB中要使用DLL,必须在VB工程中包含DLL的声明文件(即模块文件),同时还要将DLL放在工程文件所在的目录下。
如下操作可以一个M-文件编译成DLL:启动M atcom4的M ideva,点菜单F ile Comp ile,选要转换的M-文件应该是能作为函数被其他集城环境调用的M-文件,设文件名为m yfile)。编译完成后,在对应的D ebug或R elease目录下,可以找到一些编译生成的文件。VB需要用到的文件有两个。m yfile.dll(DLL文件)m yfile.bas(在VB中声明DLL的模块文件)。事实上,m yfile.dll中的函数并不能直接与VB进行数据交换,它只能通过矩阵数据进行操作。M ah tToo ls提供了一个单独的C++库文件m atlib42.dll(相当VB集成环境与DLL之间的代理,它包含有20多个矩阵句柄操作函数和800多个从M atlab中转换来的矩阵函数)以及相应的模块文件m atlib42.bas。为了在VB中能调用这类DLL,必须将m yfile. bas和m atlib42.bas加入工程中,并将m yfil.dll和m atlib42. dll拷贝到工程所在的目录下。编译后,在VB中的函数名为m yfile-in-out,其中,in和out分别为函数的输入输出参数的个数。注意,在编程时,必须调用m t In it M来初始化库文件,即请求允许使用转换的DLL,并调用m tEx it M来结束这种请求。另外,还要使用其它的矩阵句柄函数来分配、访问和释放矩阵句柄。
这种方式最简单的例子是直接调用m atlib42.dll中提供的inv-2-1来计算矩阵的逆。
二、采用动态数据交换D EE方法
该方法是利用M A TLAB提供的客户 服务器(C lien t Server)功能,VB应用程序作为系统主控,用M atlab作为后台应用程序完成复杂计算任务与绘画功能,M atlab与VB应用程序间通过DD E协议进行数据交换,DD E(D ynam ic D ata Exchange)是一种开放的、与语言无关的、基于消息的协议,它是应用程序通过共享内存进行进程通信的一种形式。
VB应用程序首先通过确定服务器名和主题(top ic)建立与M A TLAB的DD E会话,服务器名和主题唯一地确定作为客户端,M atlab作为服务端,客户端与服务端可以就确定的项目(Ite m)交换数据。关于VB的DD E功能可以参文献。VB应用程序中需指明的M A TLAB的服务器为M atlab,, M A TLAB有Syste m和Engine两个主题,在Syste m主题下可以列出M A TLAB所提供的详细的DD E功能,在Engine主题下可以充分实现M A TLAB的服务功能。利用VB具有的DD E客户端功能,使用M A TLAB的Engine主题支持的三种操作,VB应用程序主河以向M A TLAB传送可执行的命令,从M A TLAB中读取数据以及向M A TLAB中传送数据。
VB为用户提供的支持DD E通信的控件有:窗体(Fo r m)、多文档窗体(M D I Fo r m)、标签(L abel)、文本框(T ex t Box)和图片框(P icture Box)。相应于DD E协议,这些控件提供了完成一次DD E链接需要的属性和事件,以及设置
①
②黎洪生 武汉理工大学自动化学院 教授 博士生导师 武汉 430070
樊金荣 武汉理工大学自动化学院 硕士 武汉 430070
必要的参数和响应DD E 过程事的事件。
服务器应用程序开发涉及到的主要属性如下:
1.L i n k M ode :对于一个V isual Basic 程序来说,作为一个
服务器程序和作为一个客户程序时,它们的L ink M ode 属性的取值是不同的。当一个V isual Basic 程序作为服务程序时,L ink M ode 属性只是针对Fo r m 的,它的取值为
“1-Source ”。此时,这个Fo r m 中的P icture Box 控件、T ex tBox 控件和L abel 控件就可以作为客户程序的信息源。
2.L i n k Top i c :如同L ink M ode 属性一样。对于服务器程
序和客户程序来说,属性有不同的意义。对服务器程序来说,
L ink Top ic 属性是针对Fo r m 的,用户可以将服务器程序中的Fo r m 的属性设置为任何一个名字,该名字在客户应用程序中
使用。
3.L i n k Ite m :是指通过一个DD E 链接传输的数据容器,
它是标签(L abel )、文本框(T ex t Box )和图片框(P icture Box )的名称。
下面以一个具体的例子来说明该方法:
在VB 主窗体中设置T ex tl 、T ex t 2两个文本框,当T ex 1的内容有变化,则x 矩阵获得变化后的数据,而后在函数
m yfunc 中进行矩阵相乘运算,并把结果返回至T ex t 2控件
中。在实际应用中,m yfunc 函数可以是任意复杂的数据处理函数和控制算法函数。
程序清单:
channel =ddein it (′Server ′,′DD E ′
);rc =ddeadv (channel ,′T ex tl ′,′m yfunc ′,′x ′,[1,0]);Pause ;
rc =ddeunadv (channel ,′T ex tl ′,[1,0]);rc =ddeter m (channel );
其中m yfunc 为自定义的m atlab 函数:
Functi on y -m yfunc (x 3x );
rc =ddepoke (channel ,′
′,y ,[10]);注意:利用动态数据交换调用M A TLAB 时,M A TLAB 的命令窗口必须在建立DD E 会话之前已经运行
四、采用Acti veX 自动化技术
A ctiveX 自动化(OL E 自动化)协议是一种允许一个应用
程序(控制端)去控制另一个应用程序(服务器端)的协议。由于VB 支持A ctiveX 自动化控制端协议,M A TLAB 支持
A ctiveX 自动化服务器端协议。如果已经建立了一个V
B 应用
程序和M A TLAB 之间的A ctiveX 自动化连接,那么一个VB 应用程序中就可以调用M A TLAB 的命令、向M A TLAB 传送或从M A TLAB 接收矩阵数组。
在VB 应用程序中创建了M A TLAB 的A ctiveX 对象以后就可以使用这个对象所包含的各种方法来实现对
M A TLAB 的调用。M atlab .A pp licati on 对象含有3个方法,可
以实现任决定何M A TLAB 功能。现简单介绍它们的用法。
1.Execute (Co mmand a s Str i n g )方法:执行本方法将调用M A TLAB 执行一条Comm and 字符串决定的M A TLAB 命
令,同时返回一个字符串表示命令的执行情况。任何能在
M A TLAB 命令行窗口执行的命令均可以被包括在Comm and
字符串中。
2.GetFull M a tr i x 方法:该方法用来将M A TLAB 中的一
个矩阵变量传送室VB 程序的一个1维或2维数组中。
3.PutFull M a tr i x 方法:该方法用来将VB 程序的一个1
维或2维数组传送到M A TLAB 中的一个矩阵变量中。
4.Vo i d M i n i m i xe Co mmand W i n dow ()方法:该方法用来M A TLAB 使命令行窗口最小化,具体调用如下:Call m atlab M in i m ize Comm and W indow ()。
5.Vo i d M ax i m i ze Co mmandW i n dow ()方法:
该方法用来使M A TLAB 命令行窗口最大化,具体调用如下:CallM atlab .M ax i m ize Comm and W indow ()下面我们用具体例子如何使用该方法:
例:VB 中建立一个新窗口,上有3个控件。按钮Comm and 1、
编辑框T ex t 1,用来接收M A TLAB 命令、文本控件L abell 用户按下Cmm and 1,该程序运行编辑框中给出的
M A TLAB 语句,并将其结果在L abell 控件中显示出来。
(1)建立一个VB 窗口,在其变量声明部分要调用M A TLA T 的A ctiveX 部件,通过如下应用程序在VB 创建A ctiveX 部件,通过如下应用程序在VB 中创建A ctiveX 对
象:
D i m M atlab as O bject (2)在按钮中给出下面的命令P rivate Sub Comm and 1-C lick ()
Set M atlab =C reate O bject (M atlab .A pp licati on )L abell .Cap ti on =M atlab .Execute (T ex tl .T ex t )End Sub
如果在T ex t 1中输入一个命令“Surf (peak s )”,按下
Comm and 1键后,VB 应用程序通过建立与M A TLAB 的DD E
会话,经M A TLAB 执行后生成图形。VB 主界面如图1,图形
界面如图2所示。
图1 VB 主界面