2008年9月23日星期二

在VB5.0中使用和操作MATLAB

  摘 要 本文介绍在VB5.0中利用ActiveX自动化技术使用和操作MATLAB的方法。它以VB作为自动化控制器。MATLAB作为自动化服务器,在使用VB进行Windows编程中,充分发挥MATLAB在系统分析。仿真等方面的优势。
  关键词 Visual Basic MATLAB ActiveX自动化

一、前言

  MATLAB自1984年由美国MathWorks公司推向市场以来,已成为国际公认的最优秀的科技应用 软件。它具有强大的数值、符号计算,离线和在线计算,矩阵计算能力,计算结果和编程可 视化,界面友好,语言自然,是功能强大的计算辅助解决具体工程问题的标准软件。
  Microsoft公司推出的Visual Basic(简称VB)是目前被广泛使用的,开发应用程序的可视化 开发工具。由于它功能强大,易学易用,越来越多的人将它作为开发Windows应用程序的工具。
  本文介绍在VB中使用MATLAB的方法,尽可能发挥其各自的优势,而且编程简单。

二、基本原理

  MATLAB也是支持ActiveX自动化技术的软件,能够被任何可作为ActiveX利制程序的Microsof t Programs所控制,包括Excel Access,Visual Basic,VisualC++.利用这一特性,用户可以 非常方便地在自已的程序中使用MATLAB,包括执行MATLAB命令,使用其功能丰富的工具箱(T oolbox),向MATLAB输入数据,获取结果(数据,图形)。这样既能用VB编出漂亮的Windows程 序,又能同时获得MATLAB在工程辅助设计,仿真等方面的功能。

三、ActiveX自动化

  ActiveX自动化是ActiveX的一个协议,它允许应有用程序或组件控制另一个应用程序或组件 的运行。它包括自动化服务器和自动化控制器。
  MATLAB可以认为是自动化服务器,可以由其它应用程序编程驱动,自动化服务器定义的特定 的类,而类的实例即自动化对象。MATLAB提供了一个自动化对象,其外部名称是Matlab,App lication。它支持COM技术。其它程序通过COM技术提供的函数得到自动化对象支持的接口指 针,通过调用接口函数便可控制和使用自动化对象了。
  这里采用VB5.0作为自动化控制器,控制和使用自动化对象(MATLAB),并通过编程可以生成 ,使用和消除自动化控制器。

四、创建和获取ActiveX自动化对象的过程

  1.在控制器中创建和获取自动化对象的一般过程
  1)初始化并创建一个自动化对象:创建后,可以在代码中使用对象变量引用的对象。
  2)操作方法和属性;获取对象方法和信息,激活属性和方法。
  3)完成代码编写后释放对象。
  2.程序实现
  VB能通过不同的方式实现对自动化对象的使用和操作。要创建一个ActiveX对象,只需将Cre atObject函数返回的对象(引用值)赋给一个对象变量。在声明对象变量时使用As Object子 句,可创建一个能包含任何类型的变量。不过,经变量访问的对象是后期绑定的,即绑定在 程序运行时执行。这就是所谓后期绑定技术。
  1)声明一个对象变量,然后创建并返回一个对ActiveX对象的引用。
  Dim ObjectVar As Object
  Set ObiectVar=CreatObject(ProgID)
  其中,ProgID即类型库信息的字符串标识,就是前述的外部名称(Matlab,Applicarion),形 式为Appname,ObjectName,含义是


参数 描述
Appname 必要,为Variant(String)类型,用于提供对象的服务 器应用程序
ObjectName 必要,为Variant(String)类型,用于指定创建的对象类成员

 2)操作对象,一旦得到对一个ActiveX对象引用的变量,就可以对此变量进行操作,如同对V B中其它对象的操作(即获取,设置,方法和属性)一样,语法是ObjectVar,Property,Object Var,Method.  3)释放对象,操作完成后,用自动化对象提供的Close或Quit函数来结束并释放对象。
五、对MATLAB对象的操作

  下面是MATLAB对象的一些属性和方法,了解后就能自如地对它进行编程操作 。
  1.BSTR Execute([in]BSTR Command)
  此函数以命令字符串为MATLAB参数,将其运行结果以字符串返回。所有在MATLAB命令窗口键 入的可执行的命令行都可在此使用,这样,我们就能在代码中使用命令行,象在MATLAB窗口 中一样自如。
  2.VOID GetFullMatix([in]BSTR Name,[in]BSTR Workspace,
  [in out]SAFEARRAY(double)*Pr,
  [in out]SAFEARRAY(double)*pi)
  该函数从指定的MATLAB工作空间中获取一维或二维数组。其中,Name是提取数组的名称,Wo rk space表示包含数组的工作空间,一般指定为“base”,即MATLAB默认工作空间。Pr和Pi分 别是包含所提取数组的实部和虚部。
  3.VOID GetFullMatrix([in]BSTR Name,[in]BSTR Workspace,
  [in out]SAFEARRAY(double)*pr
  [in out]SAFEAPRAY(double).pi)
  该函数向指定的MATLAB工作空间中设置一维或二维数组。其中,Name是设置输入数组的名称 ,其它同前。
  4.VOID MinimizeConnandWindow()
  该函数将未最小化的MATLAB窗口最小化。
  5.VOID MaximizeConnandWindow()
  该函数将未最大化的MATLAB窗口最大化。
  6.VOID Quit()
  该函数关闭并退出MATLAB。

六、应用举例

  由于MATLAB拥有许多工具箱(Toobox),在自动控制,系统边式,信号处理,系统优化等方面 功能强大,下面是使用MATLAB的控制系统工具箱对某工业系统典型二阶环节进行阶跃响应信仿真的例子,在VB中得到仿真曲线。
  在主窗体(Forml)中,设置两个命令按钮,分别是开始按扭Commandl和结束按钮Command2,安 置在窗体的左侧。窗体右侧加入一个Image控件,用于容纳MATLAB中产生的图象,特别地, 建议把Image控件的Strench属性设为False,则Image控件自动调整为被加载图象的大小。
  为在VB中获得MATLAB中产生的图象,这里采用的方法是利用系统剪贴板Clipboard作为“中 转站”,先将MATLAB中的图象以bitmap文件格式存入系统剪贴板Clipboard,然后。在VB中将 图象从剪贴板读取,用Clipboard Getdata()函数。以下是主要程序代码,已经通过VB5.0 调试。
  Private Sub Commandl-Click()
  Dim Matlab As Obyect
  Dim result As String
  Set Matlab=CreateObject("Matlab,application")
  输入系统的传递函数
  result=Matlab,execute("wn=143;ipsol=0.6")
  result=Matlab,execute("num=[wn^2]")
  result=Matlab,execute("den=[12*ipsol*wn wn^2]")
  进行阶跃响应仿真,画阶跃响应曲线
  result=Matlab execute("t=0;0,002;015")
  result=Matlab execute("[y,x]=step(num,den,t)")
  result=Matlab execute("plot(t.y),grid,xlabel(Time(see s)') ylabel('Amplitude)")
  求取并显示超调量
  result=Matlab execute("peak=max(y)-1;peak1=[peak,3]")
  result=Matlab execute("chrl=[超调量peak=,num2str(peak*100)%']")
  result=Matlab execute("text(o.04,1.25,chrl)")
  传递和获取曲线图象
  retult=Matlab,execute("print-bditmap;delete(gct)")
  Image1 Picture=Clipboard GetData()
  Call Matlab quit
  End Sub

七、结束语

  因篇幅所限,这里只举了一个最简单的例子,但我们仍然能体会到在VB中使用和操作 MATLA B所带来的便捷和强大的功能。这种多种语言混合编程,能相互取和补短,提高了软件的整 体性能,又节约了宝贵的开发时间和精力。

肖志权(北京科技大学机械工程学院机电研究所,讲师,硕士,北京,100083)

参考文献

[1]张志涌等,掌握和精通MATLAB,北京航空航天出版社,1998
[2]李罡,Visual Basic5.0中文版编程例实例实祥解,电子工业出版社,1998
[3]Loren D Eidahl等著,骆丽等译,金版Visual Basic5.0电子工业出版社,1999

没有评论: