VB与MATLAB接口技术的分析与应用

2022-09-12

Visual Basic是Microsoft公司推出的一种可视化, 面向对象和采用事件驱动方式的结构化高级程序设计语言, 可用于开发Windows环境下的各类应用程序。它简单易学, 效率高, 功能强大, 可与Windows的专用开发工具SDK相媲美, 而且程序开发人员不必具有C/C++编程基础, 避开了C++编程过分繁琐和抽象的缺点。但是VB在运行复杂运算和图形图像处理时, 计算繁琐运算速度慢, 使其在一些专业领域方面不能得到充分利用[3]。

Matlab语言是MathWorks公司推出的计算机软件, 它起源于矩阵运算, 经过多年的逐步发展与不断完善, 现已成为国际公认的最优秀的科学计算与数学应用软件之一。Matlab语言具有语法结构简单, 数值计算高效, 图形图像功能完备等特点, 因此Matlab语言已成为科学计算, 系统仿真, 信号和图像处理的主流软件[1]。

工业生产中经常遇到复杂的数据信息处理问题, 需要大运算量的矩阵计算及对分析结果进行实时、直观的图形图像化显示。Matlab是集数值分析、矩阵运算、信号处理和图形图像显示于一体的高性能数学软件, 将其强大的计算功能与VB在可视化用户界面开发方面的优势结合起来, 实现应用系统的无缝链接, 对于有效缩短开发周期、优化系统性能是十分有意义的。

1 分析VB与MATLA接口技术

1.1 DDE技术

动态数据交换DDE (Dynamic Data Exchange) 是允许Windows各应用程序间交换数据的通信机制。应用程序间实现彼此通信应先建立一个DDE对话, 请求建立对话的应用程序成为客户 (Client) , 而响应对话请求的应用程序成为服务器 (Server) 。

在VB中调用Matlab时, 则VB为客户Matlab为服务器, 客户应用程序 (VB) 是通过DDE函数与MatlabDDE服务器模块进行通信, 客户DDE函数可以由客户应用程序提供, 也可由Matlab引擎库提供。当客户应用程序创建DDE对话时, 必须识别被叫服务器的两个DDE参数:服务器名 (Service name) , 即被请求对话的应用程序名;话题 (Topic) , 即对话主题。DDE的对话内容由一组预先规定的参数名称构成。

1.2 ActiveX技术

ActiveX技术是一种非常有价值且有前途的技术, 借助ActiveX, 开发商和终端用户就能把来自不同开发商ActiveX组件无缝地集成在自己的应用程序当中从而完成特定的目的, 不仅能缩短开发时间, 而且有效地低水平的重复开发。

Matlab提供了ActiveX自动化服务支持, 在VB中通过ActiveX自动化接口可将Matlab作为VB语言的一个ActiveX部件来调用。Mtalab ActiveX自动化服务器的功能包括:在Matlab空间中执行指令;与Matlab空间交换数据。下面就Matlab ActiveX所提供的3种方法作如下说明。

BSTR Execute ([in]BSTR Command) 。

BSTR表示宽字符串类型, 它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行, 将结果以字符串形式返回。

void GetFullMatrix ([in]BSTR Name, [i n]B S T R W o r k s p a c e, [i n, o u t]S A F E A R R A Y (d o u b l e) *p r, [i n, o u t]SAFEARRAY (double) *pi) ;

该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray, 其实部和虚部被分别存放到两个单独的Double型数组中。

void PutFullMatrix ([in]BSTR Name, [in]BSTR Workspace, [in]SAFEARRAY (double) pr, [in]SAFEARRAY (double) pi) ;

该方法将一个mxArray放入指定的工作空间。各参数的含义及调用方法与GetFu llMatrix方法类似。

ActiveX技术的应用有些像DDE链接, 但比DDE链接更强大。DDE Matlab服务器能够工作的前提条件是Matlab本身已经开启, 否则, DDE对话无法建立。这是DDE Matlab服务器与Mtalab ActiveX自动化服务器的主要不同表现之一。

2 应用

智能型异性纤维检测装置的研究是陕西省自然科学基金项目, 在这个项目中需要对采集来的大量数据进行矩阵运算和图像的显示, 这些均可用Matlab简单的完成。但是由于本项目的数据采集软件系统均采用VB6.0开发而成, 为了保证最终装置的界面统一, 就涉及到一个如何在VB中调用Matlab的问题。前面就此问题的理论笔者已经阐述了四种方法, 因此在本项目中笔者采用的是在计算机领域如日中天的ActiveX技术来解决此问题。下面就以本项目中的一个细节—显示采集数据的直方图作为例子来阐述应用ActiveX技术, 实现了在VB中调用Matlab函数。主要的代码及运行结果如下。

D i m m a t l a b A s O b j e c t'声明一个Mtalab类型的对象

Private Sub Command1_Click ()

Dim result As String'生命变量

···

Set matlab=CreateObject ("Matlab.Application") 'VB通过ActiveX启动Matlab自动化服务器,

'Matlab.Application是Matlab的ActiveX对象在注册表中的名字

···

C a l l m a t l a b.P u t F u l l M a t r i x ("b", "b ase", wa, ha) '将在VB中采集的数据wa和ha以数组的形式送到Matlab中的一个矩阵变量b中

result=matlab.execute ("imhist (b) ;") '调用Matlab函数绘制采集数据的直方图[4]

r e s u l t=m a t l a b.e x e c u t e ("p r i n tdbitmap") '将Matlab产生的图形以bitmap文件格式存入剪切板中

Image1.Picture=clpboard.GetData () '将图形从剪切板中读出

···

Call matlab.quit'结束退出Matlab

End Sub

3 结语

基于ActiveX技术, 实现了在VB开发系统界面中利用Matlab进行矩阵运算和图形图像的绘制及显示, 不仅能缩短开发时间而且提高了软件的性能。利用本文介绍的几种方法就可以方便地在用户自己开发的应用软件中嵌入如:VB、VC、JAVA等软件的功能, 从而大大简化软件的开发过程的同时提供给使用者更为专业、可靠的软件界面。

摘要:本文详细介绍了VB与Matlab两者间的接口技术, 并应用Axtibvex技术实现了在VB中调用和操作Matlab。通过两者的混合编程实现了VB的可视化界面与Matlab强大的数值分析和图形图像处理能力的结合。

关键词:ActiveX,无缝链接,DDE,MatrixVB

参考文献

[1] 张志勇, 等.精通MATLAB6.5版[M].北京:北京航空航天大学出版社, 2003:559~576.

[2] 王颖, 等.ActiveX:从VB6.0调MATLAB的实现方法[J].机电工程, 1999 (5) :172~174.

[3] Evangelos Petroutsos.VB6.0从入门到精通[M].北京:电子工业出版社, 1999.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:语文素养之花在课堂悄然绽放下一篇:双黄连颗粒治疗小儿上呼吸道感染合并糖尿病效果的临床研究