基于COM组件的VB与MATLAB接口编程
摘 要:针对VB和MATLAB接口编程问题,本文提出一种基于COM组件的VB与MATLAB接口编程方法 。并以具体的例子给出了这种方法的应用过程,实现了VB可视化界面和MATLAB信号分析及图形显示。
关键词:COM组件,VB,MATLAB,接口编程
1引言
MATLAB是Mathworks公司开发的科学计算环境,具有强大的计算绘图能力,并提供了大量的函数库,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具 。但它的缺点是界面开发能力差,代码运行效率低。Visual Basic是Microsoft公司推出的一款面向对象的应用程序开发工具。它界面友好,易学易用,执行代码效率相对较快,很适合快速原型开发。
结合MATLAB和VB的特点可以开发一些中小型的专业软件。比如在工业生产线上的监视系统,实现对传感器信号的实时采集和分析。为了解决这样的问题,就可以以VB作为主体程序,以MATLAB作为运算模块和绘图模块进行应用程序开发。现在的问题是如何解决VB和MATLAB的接口编程。
2 VB与MATLAB接口编程方法
VB和MATLAB接口编程的方法已有很多。(1)ActiveX技术即Automation Server技术。在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。但这种方法最大的缺点是不能脱离MATLAB工作环境。(2)动态数据交换(DDE)技术。DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。因此将MATLAB作为服务器端,VB作为客户端进行数据交换实现接口编程。同样这种方法也不能脱离MATLAB工作环境。(3)可执行文件技术。也就是将MATLAB运算模块做成可执行文件形式,然后在VB中进行调用。但这种方法需要单独开发可执行文件。(4)利用MatrixVB。MatrixVB是MathWorks针对VB提供的一个Matlab库,它提供了许多函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等.。MatrixVB虽然能很容易实现VB和MATLAB接口编程,但需要额外安装MatrixVB,而且函数有限 。5)COM组件技术。它是利用MATLAB的一个工具MATLAB COM Builder将M函数文件转换成COM组件,然后在VB集成开发环境中直接调用该组件。生成的COM组件是进程内组件,是以DLL的形式存在的。
3基于COM组件的VB与MATLAB接口编程的实现
3.1 系统要求
使用这种方法对系统的要求:(1)MATLAB 6.5;(2)MATLAB Compiler 3.0;(3)MATLAB COM Builder 1.0 ;(4)Microsoft Visual Basic 6.0;(5) Microsoft Visual C++ 6.0。
3.2接口编程实现步骤
(1) 以函数的形式编写M文件。
(2) MATALB工作环境中执行comtool,进入MATLAB COM Builder界面。
(3) 新建一个工程,填写各项文本框。
(4) 载入M文件,编译即生成M文件所对应的COM组件。
(5) 在VB编程环境中载入COM组件,并调用接口函数即可实现功能。
3.3 接口函数
(1)接口函数以M文件名为函数名。
(2)接口函数的第一个参数表示用于输出的参数的个数。
(3)在接口函数的参数中,作为输入的参数必须是doulbe类型。而作为输出的参数必须是variant类型。
3.4 COM组件注册
由于COM组件和客户程序之间的作用是建立在客户/服务器模型之上,在使用COM组件时客户程序必须通过系统注册表信息才能找到COM组件的位置,以及COM组件的相关信息,所以在使用COM组件之前必须将COM组件在系统进行注册。其实在MATLAB COM Builder生成COM组件时已经在系统的注册表中进行了注册,但是如果将客户程序放到其他的系统中进行运行的话,就必须对COM组件在该系统中进行注册了。
利用Windows操作系统自带的regsrv32.exe就能很方便的对COM组件进行注册。只要在“开始-〉运行”的文本框中输入regsrv32 [Path]\dllName即可注册成功,例如F:\Seting.dll。注册成功后,客户程序就能使用了。否则将出现Active 控件不能创建对象的错误。
4应用举例
从磁盘中读取传感器采集到的数据。设计MATLAB程序,从数据中提取特征值,并对数据作功率谱图。然后设计VB程序,将特征值和功率谱图在界面中显示。
4.1设计MATLAB程序
function [piantai,qiaodu]=ComBld(data)
N=length(data);
piantai=skewness(data); %计算偏态指标
qiaodu=kurtosis(data); %计算峭度指标
m = fft(data); %对数据作FFT变换
Pxx = abs(m).^2/N; %对数据作功率谱
figure(1);
set(gcf,'Visible','off'); %设figure(1)对象为不可见
plot(Pxx); %画功率谱图
print -dmeta; %对图形硬拷贝
close(gcf); %关闭figure(1)对象
4.2设计COM组件
在MATLAB提示行中输入comtool,出现MATLAB COM Builder界面,如图1所示。新建一个工程,出现New Project Settings对话框如图2所示。输入组件名Setting,同样加入类
Setting,并在编译选项中选择使用图形库句柄(Use Handler Graphics Library)。这样设置完成后,单击OK返回主界面。然后激活左栏的M-files文件夹,单击Add File载入ComBld.m文件。最后单击Build,编译ComBld.m生成COM组件。
4.3设计VB主程序
1) 载入COM组件。在VB集成开发环境中选择Project->References菜单项。弹出References对话框后选择Setting组件如图3所示。
2) 在通用声明栏中声明一个Setting组件:Private theMatlab As Seting.Seting。
3) 在Form_Load()模块中为theMatlab指定一个Seting组件:Set theMatlab = New Seting.Seting,并读取文件数据。
4) 在cmdTest_Click()模块中调用接口函数:Call (2, vntPt, vntQd, dblData),并从剪切板中获取图形:imgPxx.Picture = Clipboard.GetData()。
5) 编译,执行。程序主界面如图4所示。
5结束语
本文讨论了基于COM组件的VB与MATLAB接口编程的方法。通过应用实践证明,借助 VB和MATLAB的接口编程,实现了信号的正确、快速分析和图形显示,而且比起M文件来代码的执行效率大大提高。该方法的主要特点有:
(1) 应用程序完全脱离了MATLAB工作环境。
(2) MATLAB数学库和工具箱中包含的各种各样的函数,所以降低了编写算法的难度。
(3) 由于将算法程序做成了COM组件的形式,所以实现了算法的保密。