Visual Basic调用matlab程序的研究.doc_第1页
Visual Basic调用matlab程序的研究.doc_第2页
Visual Basic调用matlab程序的研究.doc_第3页
Visual Basic调用matlab程序的研究.doc_第4页
Visual Basic调用matlab程序的研究.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要visual basic调用matlab程序的研究摘要1 正文 工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。matlab是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与vb在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率。本文介绍在vb6.0中利用activex自动化技术使用和操作matlab的方法。它以vb作为自动化控制器。matlab作为自动化服务器,在使用vb进行windows编程中,充分发挥matlab在系统分析。仿真等方面的优势。2 关键词visual basic6.0matlabactivex自动化abstract1 text :the paper describes mainly about use the technology of activex which is included in visual basic 6.0 to operate the calculating engine of matlab, make matlab run with the vb enviroment,realize the combined development of vb and matlab2 key words: visual basic 6.0;matlab;combined developmenti目录目录前言1第1章 绪论21.1综述21.2 matlab被调用程序的发展状况21.3课题背景21.3.1 visual basic6.0背景21.3.2 matlab 语言背景31.3.3 activex控件背景41.4本文主要研究工作5第2章 visual basic调用matlab程序的研究62.1 visual basic调用matlab程序原理62.1.1 visual basic调用matlab程序的几种具体实现方法62.1.2 matlab语言与active x 技术72.2创建activex控件的步骤8第3章visual basic借助 activex部件调用matlab的实现133.1 visual basic借助 activex部件调用matlab程序简介133.2 调用程序设计原理133.2.1 调用图133.2.2 activex自动化图133.2.3、创建和获取activex自动化对象的过程153.2.4 matlab对象的一些属性和方法153.3 visual basic调用matlab程序功能介绍163.3.1 初始化界面介绍163.3.2 初始化界面实现173.3.3 调用程序界面介绍173.3.4用户应用界面的初步实现173.4毕业设计调用界面的实现213.5调用matlabe程序的实现223.6调用程序的帮助23结论23致谢24附录26开题报告26中期报告28英文翻译281 原文282 翻译35附件441前言前言matlab自1984年由美国mathworks公司推向市场以来,已成为国际公认的最优秀的科技应用 软件。它具有强大的数值、符号计算,离线和在线计算,矩阵计算能力,计算结果和编程可 视化,界面友好,语言自然,是功能强大的计算辅助解决具体工程问题的标准软件。microsoft公司推出的visual basic(简称vb)是目前被广泛使用的,开发应用程序的可视化 开发工具。由于它功能强大,易学易用,越来越多的人将它作为开发windows应用程序的工具。工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。matlab是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与vb在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率;为此,mathworks公司为matlab提供了应用程序接口,允许matlab和其它应用程序进行数据交换,为在其它程序设计语言调用matlab高效算法提供了可能。绪论第1章 绪论1.1综述matlab自1984年由美国mathworks公司推向市场以来,已成为国际公认的最优秀的科技应用软件。它具有强大的数值、符号计算,离线和在线计算,矩阵计算能力,计算结果和编程可视化,界面友好,语言自然,是功能强大的计算辅助解决具体工程问题的标准软件。microsoft公司推出的visual basic(简称vb)是目前被广泛使用的,开发应用程序的可视化 开发工具。由于它功能强大,易学易用,越来越多的人将它作为开发windows应用程序的工具。matlab也是支持activex自动化技术的软件,能够被任何可作为activex控件程序的microsof t programs所控制,利用这一特性,用户可以非常方便地在自已的程序中使用matlab,包括执行matlab命令,使用其功能丰富的工具箱(toolbox),向matlab输入数据,获取结果(数据,图形)。这样既能用vb编出漂亮的windows程序,又能同时获得matlab在工程辅助设计,仿真等方面的功能。本文主要介绍在visual basic6.0中如何调用出matlab程序。1.2 matlab被调用程序的发展状况1 借助 activex部件调用matlab2 借助dde技术调用matlab3 通过m文件调用matlab4 引入matrixvb调用matlab1.3课题背景1.3.1 visual basic6.0背景1 visual basic6.0概念visual basic6.0是微软公司推出的主流编程语言之一,是一种新型的计算机编程语言。它与传统的程序设计语言相比,最突出的特点是可视化、事件驱动和交互式。visual basic经过微软公司长期不断的完善、第三方资源的大量加入以及广大爱好者的大力支持,visual basic6.0已经成长为功能强大,使用人数2西安工业学院学士学位论文众多的主流编程软件。它提供了向导自动生成代码,支持拖放技术、属性检查、实施与法检查等内置自动化技术,大大降低了编写代码的工作量,同时它还提供极丰富的控件,使得visual basic6.0成为最简捷、最有效开发windows应用程序工具。2 visual basic具体包含以下内容:对象:面向对象编程(oop),虽然visual basic并不是完全的面向对象编程,但也利用了对象编程技术。对象简单地说就是大家经常看到的各种窗口、按钮、文本框甚至打印机等。属性:如同电视有黑白、彩色之分一样,作为对象的windows中的窗口也是有大有小,文本框的位置不可能完全一样,菜单要显示出不同的功能,这些都是由对象的属性决定的。不同对象的属性可能不同。属性一般决定了对象的位置、大小、显示等情况。方法:就是对象能够做的事,如打印机对象就有打印(print)方法、窗口对象支持隐藏(hide)方法、很多对象支持移动(move)方法等。事件:就是对象对用户各种操作的反映情况。如用户用鼠标按一下按钮,就会触发按钮的“按”(click)事件。控件:控件就是visual basic提供的编程用的模块,与对象有直接的联系,如同积木的木块,使用这样的控件,就可以像拼图或堆积木一样“搭”、“拼”你的程序界面。visual basic中使用控件,简化了windows中的窗口、按钮等对象的编程设计。每个控件都有各自的属性、事件及方法。只需修改这些特征你就可以随心所欲地编程了。最重要的是,你可以利用成千上万的各种扩充的控件来快速构造几乎能满足你任何要求的程序。例如,如果你不满意windows简陋的媒体播放器,你就可以使用vb的多媒体控件在1小时以内设计一个完全自己风格的能够播放cd、vcd的多媒体播放器,而功能完全与之相当。3 visual basic语言的特点(1)vb继承了basic简单易用的特点;(2)vb适用于windows环境下快速编程;(3)vb采用可视化技术,操作直观;(4)vb采用面向对象技术,没有复杂的程序流程;(5)vb编程模块化、事件化,程序由许多小程序组成;(6)可以使用大量的visual basic控件、模块简化编程;(7)vb可以调用windows中的api函数及dll库;(8)vb 有很好的出错管理机制;(9)vb与其他程序有良好的沟通性,如各种数据库;1.3.2 matlab 语言背景1 matlab语言概述matlab是mathworks公司开发的一种工程计算语言。它是一个交互系统,在matlab中的基本数据元素是一个不要求维数的复矩阵。用matlab可解决很多工程计算问题,特别是涉及到矩阵和矢量形式的问题。matlab是一个高度集成的语言环境,在它的界面下可以编写程序、运行程序并可进行跟踪调试。对于广大的工程技术人员和科学研究人员来说,matlab不失为一种很好的工具。matlab也有局限性,一般它不能脱离matlab集成环境工作;而且编写界面的功能比较弱。2 matlab 的主要特点(1)其强大的计算功能. (2) 计算结果和编程可视化.(3)极高的编程效率。3 matlab 存在的一些问题(1) 运行的速度慢 。运行速度是工程设计尤其是控制领域的命脉所在,由于matlab 的程序世界是运行的,所以其运行速度不可避免地要下降。(2) 无法脱离matlab环境运行。matlab6.x以上的版本对计算机的要求较高,且自身程序所占的空间较大,这就是得些配置较低的机器运行有困难。1.3.3 activex控件背景1 activex控件概念 activex是一个microsoft的术语,它指的是一组包括控件,dll和activex文档的组件,它通常是以动态链接库的形式存在,因此必须在一个叫容器的独立执行软件中运行。这样的容器包括authorware、delphi,visual basic,visual c,internet explorer和access等等。activex控件数据输入和函数功能执行都必须通过容器,因此activex控件和容器都必须支持一些特定的接口协议。根据microsoft 相应的规格标准,activex控件应具备如下的性能机制。属性和方法:activex控件必须提供属性的名称、方法的名称及参数,通过这项机制容器可以存取和改变activex控件的属性参数。事件:activex控件由这项机制通知容器在activex控件中发生的事件,比如属性参数的改变,用户按下鼠标左键等。存储:容器由这项机制通知activex控件存储和提取有关信息数据等。2认识vb的activex控件vb给我们带了9个内置activex控件:imagelist、toolbar、statusbar、tabstrip、slider、progressbar、treeview、listview、coolbar。richtextbox控件richtextbox控件是整个字处理的核心。它提供了文本框的所有功能,能够将不同字体、字号和属性混在一起编辑,能够精确地控制文本边界。在部件窗口选上microsoft rich textbox control6.0就可把控件引入工具箱。 imagelist控件包含一组imagelist对象,要通过索引或键来引用,它作为放置其他图形控件的中央仓库。在程序运行时,可通过treeview1.imagelist=imagelist1语句,将treeview1控件与imagelist1控件相关联,treeview1控件就可以使用imagelist1控件中的图片。toobar 控件 包含一组button对象,用于生成与程序相关的工具条。statusbar 控件 状态栏就是通过这个控件制作的。这三个控件包含在microsoft windows common control6.0中,把它引入工具箱,并把这三个控件放入窗体。1.4本文主要研究工作matlab是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与vb在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率。本文介绍在vb6.0中利用activex自动化技术使用和操作matlab的方法。它以vb作为自动化控制器。matlab作为自动化服务器,在使用vb进行windows编程中,充分发挥matlab在系统分析仿真等方面的优势。5visual basic调用matlab程序的研究第2章 visual basic调用matlab程序的研究2.1 visual basic调用matlab程序原理2.1.1 visual basic调用matlab程序的几种具体实现方法1 借助 activex部件 microsoft把所有以com为基础的技术统称为activex技术。自动化是大多数activex技术的基础,它可使解释性的宏语言(如vb)能够在不了解应用程序实现细节的情况下控制自动化对象。matlab实现了activex自动化服务支持,在vb下通过activex自动化接口可将matlab作为visual basic语言的一个activex部件调用。 2 借助dde技术 通过对matlab的应用程序接口的分析,可以发现matlab提供了客户/服务器功能。利用其中的动态数据交换(dde)服务功能和activex自动化(ole自动化)服务功能,可以实现在vb中对matlab函数的调用, dde(dynamic data exchange)允许microsoft windows应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个dde会话,对会话进行初始化的应用程序称为客户端(client),对client端作出响应的应用程序称为服务器(server)并通过maxrrays(matlab中的基本数据类型)与matlab工作空间交换数据,从而增强vb的数值计算能力和数据的可视化能力。如(图2.1)所示图2.1 dde技术调用matlab3 通过m文件 matlab产生的m文件不能直接在vb中调用,可利用mcc将m文件直接编译成.exe文件,然后在vb中声明下面三个api函数,最后使用shell命令即可实现vb与matlab的无缝集成。 (1) 用mcc生成独立的外部应用程序。可使用如下两种命令: mcc -p file.m 或 mcc -m file.m (2) 在vb中声明调用的三个api函数: declare function waitforsingleobject lib “kernel32”(byval hhandle as long, byval dwmilliseconds as long) as long declare function closehandle lib “kernel32”(byval hobject as long) as12 long declare function openprocess lib “kernel32”(byval dwdesiredaccess as long, byval binherithandle as long,byval dwprocessid as long) as long (3) 示例代码: dim ltask as long, lret as long, lhandle as long 执行file.exe文件 ltask = shell(“file.exe”, vbnormalfocus) lhandle = openprocess(synchronize, false, ltask) 等待进程执行完毕 lret = waitforsingleobject(lhandle, infinite) lret = closehandle(lhandle) file.exe文件执行完毕后,继续执行应用程序 通过以上编码,应用程序可以在执行过程中调用.exe完成特定的计算或图形功能后,再继续其执行过程,从而实现与matlab的调用。 4 引入matrixvb matrixvb是mathworks针对vb提供的一个matlab库,它提供了600多个函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,为vb提供了强大的功能扩展。在vb中使用该数学工具包可避免重复性劳动,从而减少开发人员实现算法和界面设计的困难。 matrixvb是一个独立的产品,其使用十分方便。matrixvb安装完成后,只需在vb工程中引用mmatrix即可。 2.1.2 matlab语言与active x 技术visual basic activex部件是microsoft公司提供的一种用于模块继承的新协议,它是工具箱的扩充部分。在程序中加入activex部件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。activex部件保留了一些普通vb控件的属性、事件和方法。activex部件特有的方法和属性大大增强了程序设计者的能力和灵活性。虽然matlab是一个安全独立的编程和数据运算的集成环境,使他可以方便的做很多工作。但是,很多时候仅仅靠matlab环境还不能很好的完成任务,比如说:(1)matlab程序中出现循环时,matlab运行起来非常吃力,速度很慢。(2)以前去多用其他语言编写的算法程序如果要移植到matlab环境中运行就需要编写为m文件,还需要浪费许多人力物力。别的编程环境需要使用matlab的某些优秀的功能时找不到合适的办法。因此,matlab与外部的数据和程序交互是很有意义的。matlab程序接口的出现,正是为了处理这些问题,用过它可以完成于其他编程环境的交互,各取所长,充分发挥。matlab接口包括:(1) 在matlab环境中调用别的语言编写的程序和算法,它通过mex文件来实现。(2) matlab于别的编程环境的数据交互,它通过mat文件来实现。(3) 别的编程环境使用matlab 的计算功能,它通过matlab计算引擎来实现。 matlab支持的activex有两方面含义:(1)在其他程序下运行matlab的activex部件。(2)在matlab下运行其它activex部件。从某种意义上来说,activex 技术的应用有些像 dde 链接,但比 dde 链接更强大,所以 activex 出现后,链接 dde 的方法就不再那么吸引人了。与 activex 的链接将成为主要的链接方式。activex 实际上是在调用一种部件,而无需要求该部件对应的程序正在运行,这会使得其功能更加强大。2.2创建activex控件的步骤a. 使用visual basic编程语言编写过应用程序,一定要非常熟悉诸如textbox、label和data等控件。要利用这些控件,可以将它们绘制在窗体中,通过属性,方法和事件控制它们的行为。当用户创建自己的activex控件时,除了确定属性、方法和事件以外,用户是在创建一个相似的对象。当创建了自己的activex控件以后,就可以在其他visual basic 工程中使用它,就像使用textbox控件一样。可以在能使用activex控件的任何应用程序或开发工具(包括其他visual basic工程、authorware或者microsoftinternet explorer)中使用自己的控件。在visual basic中创建一个activex控件不同于创建一个standard exe应用程序。因此当创建一个新控件时,一般应遵循的步骤是:(1)确定控件将要提供的功能。因为activex控件类似于一个独立的对象,所以需要明确这个对象的目的,希望它在屏幕上有什么样的外观?使用此控件时,需要什么属性、方法以及事件用于应用程序中?(2)设计控件的外观。(3)设计控件的接口,即属性、事件和方法。(4)创建由控件工程和测试工程组成的工程组。(5)通过把控件和或代码添加到 usercontrol 对象中来实现控件的外观。(6)实现控件的接口和功能。(7)编译控件部件(.ocx 文件)。b.具体实现方法(1)确定datalistview控件的功能标准的listview控件在显示数据库记录时还存在一些不足,如必须编写大量的代码等,datalistview通过在listview的基础上添加部分功能而弥补了listview的不足,因此它除了本身固有的属性、方法和事件外,添加了如下成员:1) dataservername属性 - 确定所操作的数据库服务器。2) databasename属性 - 确定所操作的数据库。3) administratorname属性 - 确定操作数据库的管理员名称。4) passwordname属性 - 确定操作数据库的管理员口令。5) showdatabase方法 - 显示select命令所执行的数据库操作结果。6)errordatabase事件 - 当遇到错误的数据库操作时引发该事件。(2)设计控件的外观datalistview由于仅包含一个listview控件,所以其外观没有太多需要考虑的问题。如果要创建的控件是多个控件构成,或新控件不包括任何现存控件即完全从头开始创建一个全新的控件的话,则外观问题是一个很重要的问题。(3)设计控件的接口,即属性、事件和方法对listview控件所作的改进是为了让listview控件支持数据库的内容显示,以便在所有能支持activex控件的应用程序中使用。通过添加用户自己的属性dataservername、databasename、administratorname、passeordname和方法showdatabase等可以实现这项功能。datalistview的其他属性、事件和方法都和标准listview一样。(4)创建由控件工程和测试工程组成的工程组1)启动一个新的activex控件工程。2)按下ctrl+t 组合键或者选择(工程)|(部件)菜单选项,显示(部件)对话框,在(控件)选择框中选择microsoft windows common controls6.0。3) 选择(工程)|(引用)菜单选项,显示(引用)对话框,在(可用的引用)选择框中选择microsoft activex data objects 2.0 library。4)在usercontrol窗口中添加一个listview控件,listview控件的左上角位置为00。5)设置activex工程和usercontrol控件属性值,如(表2.2)所示。条目设置工程类型activex控件工程名称datalv工程描述通过ado,使得listview控件能够直接操作数据库usercontrol 的name属性datalistviewusercontrol 的public属性true表2.2 activex工程和usercontrol控件属性值6)保存这个工程。7)选择(文件)|(添加工程)菜单选项。然后添加一个标准exe工程。建立该工程的目的是为了在创建activex控件时不断地进行测试。此时已建立了一个由控件工程和测试工程组成的工程组,下面就可以正式开始创建datalistview控件。(5)实现控件的外观确定控件外观的方式取决于当前控件的创建模型。如果要创建一个用户绘制控件,那么必须自己在usercontrol_paint 事件过程编写代码来完成所有的绘工作,同时还需要确定何时绘制控件,以便在需要的时候调用usercontrol的refresh方法来产生paint 事件。如果是改进一个现有控件,那么只需正确地将组成控件放置在usercontrol上即可。由于datalistview控件仅包含listview一个组成控件,那么只需简单地在usercontrol1上绘出一个标准listview控件,控件名为缺省的listview1,即可完成外观绘制工作。为了在使用控件时,使listview控件和自己绘制的空间相匹配,必须建立usercontrol的resize事件过程。resize事件过程的代码见附录(1)。仅四行代码的resize事件过程是简单控件的用户界面的所有必须的代码,其目的是使listview控件和usercontrol对象有相同的尺寸。(6)实现控件的接口和功能这是整个创建过程中最核心、最重要也是最复杂的步骤。对于创建控件的每一属性、事件和方法均需逐一实现。1)创建dataservername属性要创建dataservername属性值,首先需要添加一个在内部存贮属性值的局部变量。要做到这一点,在usercontrol对象的genaral declarations通用声明语句中创建此变量。如下所示:dim m_dataservername as string接着需要创建称为dataservername的新属性,可以通过手工输入get和let过程,或者选择(工具)|(添加过程) |(类型)创建这个新属性。dataservername属性的代码相当容易理解。当置dataservername属性的值时,property get过程仅将局部变量的存贮内容取出来。当设置dataservername属性值时,property let过程将为局部变量赋予一个有效值。两个property过程的代码见附录(3):需要注意的是在property let过程中,有一个propertychanged方法,它的功能是通知容器(可以理解为存放所有属性的单元)属性值已变更,需产生一个writeproperties 事件,来保存新属性值。事实上不仅在property let过程需要调用propertychanged方法,在usercontrol的代码模块中无论何时改变了activex控件的某个属性值,均需调用该过程,以保存属性的变化。注意property dataservername方法的用法,此方法与readproperties和writeproperties事件在一起使用。此时需要使用用户控件的initproperties事件指定此属性的初始值:private sub usercontrol_initproperties()m_dataservername = m_def_dataservernameend sub即使用户没有设置初始值,这些代码也会确保设置了一个初始值。至databasename、administratorname、passeordname 属性的创建过程跟dataservername属性的创建过程完全一样,这里就不再重复叙述。2)使用propertybag对象用户还需要为writeproperties和readproperties事件创建代码,从而保护dataservername、databasename、administratorname、passeordname属性在设计阶段的属性值。这两个事件都使用propertybag 对象保存和检索dataservername、databasename、administratorname、passeordname属性的值。propertybag对象能够保持dataservername、databasename、administratorname、passeordname的设计值。具体实现代码在附件(2)。由于这两个过程是针对容器对象的,因此所有属性值的保存和读取都通过这两个过程来实现,而不是每个属性都需要单独的两个过程。其中,propertybag就是容器对象的名称。writeproperty方法有三个参数:第一个字符串标识需要保存的属性,第二个参数是需要保存的值,最后的参数是属性的缺省值。readproperty 方法需要两个参数:一个字符串用来保存属性的名称,另一个为缺省值。在窗体上绘制activex控件的那一刻,就会开始执行activex控件的代码。在控件设计过程中,将dataservername、databasename、administratorname、passeordname属性的默认值设置为:const m_def_dataservername = lycconst m_def_databasename = pubsconst m_def_administratorname = saconst m_def_passwordname = 当然,也可以在程序运行时多次修改它。控件的正常行为是当程序终止时恢复其默认值,这样增加了保持属性的两种独立状态的要求。简言之,如果在设计阶段改变了一个属性值,那么控件必须得到这个新值,而不是使用默认值。相反,如果在程序运行时改变属性值,那么当返回设计状态时,控件必须检索此属性值。propertybag对象允许activex控件存贮有关它自己的属性值,使它能执行这个动作。propertychanged 方法会通知用户已经改变了一个属性。通过了解程序的状态以及是否调用了propertychanged方法,vb 就可以激发writeproperties和readproperties事件。3)为showdatabase方法编写代码showdatabase方法实现在listview控件中显示select命令所执行的数据库操作结果。在其具体实现过程中采用了 ado(activex data objects)的数据存取方法。ado的主要特点是使用更加容易,访问速度更快,而对磁盘和存储容量的要求更小,ado支持建立各种客户/服务器模式与基于web的应用程序,具有远程数据服务rds(remote data service)的特性,通过rds能够在一次往返中将服务器端的数据传送到客户端的应用程序或web页面中,并在客户端对数据进行处理后,立即更新服务器端的数据。采用ado所基于的ole db技术,可以对电子邮件、文本文件、数据表格等各类数据通过统一的接口api接口进行存取,是远程数据存取的一个主要发展方向。showdatabase方法具有一个字符串参数,但无任何返回值,具体代码见附录(4)当对数据库的操作发生错误后,除了不能正常显示以外,还应通知宿主程序用户。可以通过创建一个叫做errordatabase的事件实现上述功能。要创建这个事件,把下述代码添加到usercontrol对象的generaldeclarations段中。public event errordatabase()此事件的工作像其他控件的事件一样。使用控件的用户可以将代码放到这个事件中,用户要做的唯一的事情就是用raiseevent方法激发此事件。(7)编译控件部件(.ocx 文件)。现在已经完成了datalistview控件的创建工作,为了在datalv工程外也可以使用该控件,只需将datalv工程编译.ocx控件部件即可。在(工程组)窗口单击(datalv)以选择该工程,在(文件)菜单上单击(生成datalv.ocx,在(生成工程)对话框中选择控件存放的目录后, 单击(确定)即可创建.ocx 文件。一旦生成了.ocx文件的控件,就可以象使用其它控件一样来随心所欲地使用它了。activex技术可以灵活、高效的实现可交互、重入、重用、完全分布式、与语言无关的各种应用。随着activex技术的发展,activex控件在应用程序中的作用将会显得越来越重要,那么创建一个功能完善、具有自己特色的activex控件就非常具有现实意义。但是,activex技术也有一些明显缺点,activex技术依赖于windows平台,对广泛应用的unix平台目前仍不兼容,另外 activex在许多方面的性能还较弱,activex技术仍需要不断完善和发展visual basic借助activex部件调用matlab的实现第3章visual basic借助 activex部件调用matlab的实现3.1 visual basic借助 activex部件调用matlab程序简介matlab对计算机配置要求高,在运行时会占用系统的很多资源,不仅浪费了时间也受到了很大的约束性。但是,matlab也支持activex自动化技术的软件,能够被任何可作为activex程序的microsof t programs所控制,包括excel access,visual basic,visualc+.利用这一特性,用户可以非常方便地在自已的程序中使用matlab,包括执行matlab命令,使用其功能丰富的工具箱(t oolbox),向matlab输入数据,获取结果(数据,图形)。这样既能用vb编出漂亮的windows程 序,又能同时获得matlab在工程辅助设计,仿真等方面的功能。本设计是采用visual basic制作界面,工作时进入visual basic编辑的界面,通过后台算法处理信息,存储数据,共享资源,以保证调用文件的可靠性,实时性和准确性。以visual basic6.0为其支持环境。3.2 调用程序设计原理matlabvb3.2.1 调用图active xactive x3.1调用示意图3.2.2 activex自动化图activex自动化是activex的一个协议,它允许应有用程序或组件控制另一个应用程序或组件的运行。它包括自动化服务器和自动化控制器。matlab可以认为是自动化服务器,可以由其它应用程序编程驱动,自动化服务器定义的特定 的类,而类的实例即自动化对象。matlab提供了一个自动化对象,其外部名称是matlab,app lication。它支持com技术。其它程序通过com技术提供的函数得到自动化对象支持的接口指针,通过调用接口函数便可控制和使用自动化对象。23这里采用vb6.0作为自动化控制器,控制和使用自动化对象(matlab),并通过编程可以生成 ,使用和消除自动化控制器。3.2.3、创建和获取activex自动化对象的过程1.在控制器中创建和获取自动化对象的一般过程1)初始化并创建一个自动化对象:创建后,可以在代码中使用对象变量引用的对象。2)操作方法和属性;获取对象方法和信息,激活属性和方法。3)完成代码编写后释放对象。2.程序实现vb能通过不同的方式实现对自动化对象的使用和操作。要创建一个activex对象,只需将cre atobject函数返回的对象(引用值)赋给一个对象变量。在声明对象变量时使用as object子 句,可创建一个能包含任何类型的变量。不过,经变量访问的对象是后期绑定的,即绑定在程序运行时执行。这就是所谓后期绑定技术。1)声明一个对象变量,然后创建并返回一个对activex对象的引用。dim objectvar as objectset obiectvar=creatobject(progid)其中,progid即类型库信息的字符串标识,就是前述的外部名称(matlab,applicarion),形 式为appname,objectname,含义是 参数 描述 appname 必要,为variant(string)类型,用于提供对象的服务 器应用程序 objectname 必要,为variant(string)类型,用于指定创建的对象类成员 2)操作对象,一旦得到对一个activex对象引用的变量,就可以对此变量进行操作,如同对vb中其它对象的操作(即获取,设置,方法和属性)一样,语法是objectvar,property,object var,method.3)释放对象,操作完成后,用自动化对象提供的close或quit函数来结束并释放对象。 3.2.4 matlab对象的一些属性和方法1.bstr execute(inbstr command)此函数以命令字符串为matlab参数,将其运行结果以字符串返回。所有在matlab命令窗口键 入的可执行的命令行都可在此使用,这样,我们就能在代码中使用命令行,象在matlab窗口 中一样自如。2.void getfullmatix(inbstr name,inbstr workspace,in outsafearray(double)*pr,in outsafearray(double)*pi)该函数从指定的matlab工作空间中获取一维或二维数组。其中,name是提取数组的名称,wo rk space表示包含数组的工作空间,一般指定为“base”,即matlab默认工作空间。pr和pi分 别是包含所提取数组的实部和虚部。3.void getfullmatrix(inbstr name,inbstr workspace,in outsafearray(double)*prin outsafeapray(double).pi)该函数向指定的matlab工作空间中设置一维或二维数组。其中,name是设置输入数组的名称 ,其它同前。4.void minimizeconnandwindow()该函数将未最小化的matlab窗口最小化。5.void maximizeconnandwindow()该函数将未最大化的matlab窗口最大化。6.void quit()该函数关闭并退出matlab。3.3 visual basic调用matlab程序功能介绍3.3.1 初始化界面介绍此界面如(图2.4.1)所示, 为进入visual basic调用matlab程序的初始界面。当打开程序时,此界面会以全屏出现,上面出现“欢迎进入vb调用matlab开发程”序字样。此行自将从左至右在屏幕上方划过。界面设置出现时间为5秒钟,5秒钟后将出现调用程序的主界面。(图3.2)初始化界面3.3.2 初始化界面实现首先在设计窗口上设置一个图像控件,即picture控件。然后再添加三个标签控件即,label1,label2,label3。最后添加三个timer控件,即timer1,timer2,timer3.enable属性为ture,timer1的interval 为7000。timer3的interval为65.timer1的功能为启动下一个窗体,并且控制初始页面的出现时间。timer3的功能为使字体从左到右划过页面顶端。3.3.3 调用程序界面介绍初始化界面结束后紧接着进入调用程序主界面(图2.4.2)。本界面失调用程序的主要界面,在屏幕上方有一个输入程序的窗口,在其下方由显示结果的透明窗口。在工具栏中有新建,保存,打开,查找,运行按钮在工具栏中设有下拉菜单和快捷键,使用户方便的掌握该程序的使用。在调用界面显示屏幕的下方和右侧都有滚动条的设置在程序过长有可能运行到屏幕下方,这时它极大的方便了用户的使用。3.3.4用户应用界面的初步实现我来说明一下在microsoft visual basic下,通过activex自动化接口将matlab作为visual basic语言的一个activex部件调用的方法与应用。 (1) vb下建立一个新窗口,其上有3个控件,其中一个是按钮,其 vb 名称为 command1, 且其标注为 run matlab; 一个是编辑框,用来接收 matlab 命令,其 vb 名称为 text1; 另一个为文本控件,其 vb 名称为 label1。我们的目的是在用户按下 run matlab 按钮时,该程序中运行编辑框中给出的 matlab 语句,并将其结果在 label1 控件中显示出来。 建立一个 vb 窗口,在其变量声明部分申明要调用matlab 的activex dim matlab as object 并在其form_load中给出下面命令来链接matlab 的 activex 部件。给按钮给出下面的响应命令,整个问题就坚决了: private sub command1_click()set matlab = createobject(matlab.application)label1.caption=matlab.execute(text1.text)end sub 值得指出的时,这个程序段不只可以解决计算与文字显示的 matlab 语句,还可以解决图形绘制等问题。例如在编辑框中给出下面带有绘图的命令, a=magic(5); a=inv(a), x,y=meshgrid(-3:0.1:3,-2:0.1:2);z=(x.2-2*x).*exp(-x.2-y.2-x.*y);surf(x,y,z); colorbar;shading interp则将得出如(图3.3)所示的效果 (窗口中框原来应该有白色背景,作透明处理后变成了这样)。 图3.3 调用matlab效果图可见,调用 activex 还是比较简单的。 我们还可以将其中生成的 matlab 变量调至 vb 环境中,由 vb 程序直接使用,或将 vb 中的变量写入 matlab 的工作空间。能解决这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论