编辑:
2014-11-04
1·2 DDE动态数据交换Matlab从V4·x开始支持DDE(dynamic dataexchange),最典型的是LabVIEW对DDE的使用.
但从V5·x以后,Matlab对DDE的支持就没有再更新. DDE的功能没有ActiveX强大,但它比ActiveX易于实现.它随着Windows的应用而发展起来,是在Windows环境下支持客户服务器计算模式的重要技术之一.因为VB支持DDE客户端功能,Mat-lab提供DDE服务器功能,所以通过DDE方式可以实现VB程序对Matlab的调用. DDE功能函数可以由应用程序提供,也可以由Matlab引擎库提供.
VB应用程序首先通过确定服务器名和主题,唯一地确定会话.在会话期间VB应用程序为客户端,Matlab为服务器端.两者会话的示意如图2.
DDE通信机理示意DDE方式基于Windows的消息机制. DDE服务器是一个维护其它Windows程序可能使用数据的程序,DDE客户则是从服务器获得数据的程序.
DDE对话由客户程序发起,客户程序将一条称为WM—DDE—INITIATE的消息发给当前运行的所有Windows程序,这条消息指出客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应消息并开始会话. DDE只是一种通信方式,它不会启动Matlab软件,所以DDE方式运行时Matlab必须打开,否则程序无法运行.
下例将实现DDE通信方式.在VB下建立工程,然后添加两个TextBox控件,3个Label控件,一个Command控件,一个Image控件.输入如下的代码,然后编译成.EXE文件后即可.此编译文件提供了Matlab的运行环境,在指令输入区可输入任何Matlab指令[3].
程序代码如下:
Private Sub Command1-Click()TextInput.LinkMode=vbLinkNoneTextInput.LinkTopic=“MATLAB|Engine”
TextInput.LinkItem=“EngEvalString”
TextInput.LinkMode=vbLinkManualstring=TextInput.TextTextInput.LinkExecute stringTextInput.LinkMode=vbLinkNoneFigText.LinkMode=vbLinkNoneFigText.LinkTopic=“MATLAB|Engine”
FigText.LinkItem=“EngFigureResult”
FigText.LinkMode=vbLinkManualFigText.LinkRequestIf (FigText.Text=“yes”) ThenImage1.Picture=Clipboard.GetData()ElseImage1.Picture=LoadPicture39第25卷第1期 梁新成等: VB与Matlab混合编程的研究End IfTextOutput.LinkMode=vbLinkNoneTextOutput.LinkTopic=“MATLAB|Engine”
TextOutput.LinkItem=“EngStringResult”
TextOutput.LinkMode=vbLinkManualTextOutput.LinkRequestTextOutput.LinkMode=vbLinkNoneEnd Sub程序运行结果见图3.
DDE方式运行结果1·3 MatrixVB插件MatrixVB可实现Matlab与VB的无缝链接.
所谓无缝链接就是应用程序实现其功能时完全脱离Matlab的工作环境.它主要是利用Matlab Add-in把Matlab函数做成动态链接库形式,然后由VB调用来实现.动态链接库的生成、调用和调试是这种方法的关键.
MatrixVB是MathWorks公司为VB开发的插件,它包含了600多条Matlab的基本函数,插件增强了VB绘图和计算的函数集合.它包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,用来补充VB本身内建函数和图形处理的不足.为了防止计算机在识别Ma-trixVB和VB的运算符时发生冲突,MatrixVB在定义运算符时做了一些变化. VB与MatrixVB中的运算符号区别如表1[4]:
下面的程序通过MatrixVB实现VB对Matlab的调用.
程序的运行代码如下:
Private sub Form-Load()ax=vbaxes(picture1.hWnd)plot(randn(256,4))End程序运行结果如图4.
MatrixVB方式运行结果1·4 动态链接库从Matlab6·5开始,Matlab提供了COM编译器.它是Matlab编译器的扩展,能够把一个和多个M文件转换、编译成COM组件.因为Matlab编译产生的COM对象都是DLL文件,而VB可以直接调用DLL,所以应用DLL可实现VB对Matlab的调用.
具体步骤:在计算机装有VC++或C的前提下,在Matlab的命令窗口运行comtool指令.选择新建工程→给工程加入M文件或MEX文件→编译;之后再在VB下新建工程→添加所生成的动态库→添加控件→给相关控件输入代码→运行即可.
标签:VB论文
精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。