Matlab与LabVIEW混合编程方法应用研究.docx
《Matlab与LabVIEW混合编程方法应用研究.docx》由会员分享,可在线阅读,更多相关《Matlab与LabVIEW混合编程方法应用研究.docx(11页珍藏版)》请在冰豆网上搜索。
Matlab与LabVIEW混合编程方法应用研究
第10卷第33期2010年11月1671—1815(2010)33-8267-05
科学技术与工程
ScienceTechnologyandEngineering
Vol.10No.33Nov.20102010Sci.Tech.Engng.
Matlab与LabVIEW混合编程方法应用研究
徐
何
李
滔
李
勇
(西北工业大学电子信息学院,西安710129)
摘要对Matlab和LabVIEW混合编程技术进行了讨论。
主要研究MatlabScript节点法、动态链接库(DLL)技术和COM组
件技术,详细介绍了各自的技术优点以及实现方法。
并在此基础上,结合Matlab强大的矩阵运算能力和LabVIEW丰富的面板设计工具,完成了对雷达显示界面的混合编程仿真设计。
关键词
组件对象模型
节点
动态链接库混合编程
雷达界面仿真
中图法分类号
TN955;
文献标志码
A
2010年9月13日收到第一作者简介:
徐
何(1985—),男,羌族,四川省成都市人,硕士
研究生,研究方向:
雷达信号仿真。
E-
mail:
prophetxu@hotmail.com计算机和仪器的密切结合是目前仪器发展的一个重要方向。
这种结合有两种方式,一是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。
另一种方式是将仪器装入计算机,以通用的计算机硬件及操作系统作为依托,实现各种仪器功能,虚拟仪器主要是指这种方式。
LabVIEW是美国NI公司研发的功能强大而且灵活的仪器分析开发软件,是目前应用最为广泛的虚拟仪器开发软件。
其拥有强大的界面开发能力和良好的软硬件接口,但是在对各种算法的支持方面,LabVIEW的工具箱有限,这限制了使用Lab-VIEW对大型应用程序的快速开发。
Matlab拥有强大的矩阵运算、图形处理能力和内容丰富且可扩展的工具箱,但其界面开发能力较差,并且在数据输入、网络通信、硬件控制等方面都比较繁琐。
针对LabVIEW和Matlab两种软件的优势和不足,使用混合编程的方法,可以很好的结合两者的优势,互补不足,开发出更具智能化的虚拟仪器。
本文首先介绍了三种方法实现对Matlab和LabVIEW的混合编程,分别是MatlabScript节点法、动态链接库(DLL)技术和COM组件技术,重点介绍了后两种比较复杂的混合编程方法,并在此基础上
完成了对雷达显示界面的仿真。
(编程环境:
Matlab6.5;LabVIEW8.5;MSVisualC++6.0)
1混合编程方法
在进行混合编程之前,需要对Matlab和MS
VisualC++6.0编程环境进行设置。
这是因为后两种方法都需要借助外部编译器对M文件进行编译,动态链接库(DLL)技术还需要使用MatlabAdd-in插件。
MatlabAdd-in插件能将M文件自动集成到VisualC++的工程中。
安装外部编译器和MatlabAdd-in插件,需要如下几个步骤:
1)
在命令窗口中输入mbuild–setup
或mex–setup;
2)选择MSVisualC++6.0;
3)在Matlab命令窗口中输入如下的命令
cd(prefdir)
mccsavepath
这两个命令将Matlab的路径保存在一个名叫mccpath的文件中。
Add-In需要这个文件来确定Matlab的路径。
当Matlab更换目录时需要重新执行这两个命令以便Add-In获取Matlab的路径。
4)打开MSVisualC++。
5)在MSVisualC++菜单中选择工具->定制。
6)点击附加项和宏文件标签。
7)点击浏览,在Common文件夹中选择Add-ins文件夹中的MatlabAddin.dll文件将MatlabAdd-in安装进MSVisualC++。
1.1
MatlabScript节点法
LabVIEW软件自身提供了MatlabScript节点来调用Matlab语言开发的算法,实际上是使用ActiveX控件与MatlabServer进行通信。
在LabVIEW中调用Matlab的函数算法是把Matlab作为一个ActiveX服务器,LabVIEW将程序发送给Matlab,由Matlab在后台执行,并返回结果。
在MatlabScript节点中,用户可以编辑Matlab程序,也可以直接调入已经存在的Matlab程序,并在LabVIEW环境下运行。
这种方法简单实用,但要求客户机装有Matlab并在后台运行,
程序可移植性不好。
对简单的工程和对实时性要求不高的工程可以使用该方法进行混合编程,
能大大减少LabVIEW程序的复杂程度,提高程序的可读性。
使用该方法有以下几点需要注意:
1)客户机必须安装Matlab。
2)由于LabVIEW是使用ActiveX的方法调用Matlab,所以Matlab脚本节点只能在Windows平台下使用。
3)Matlab与LabVIEW的输入输出类型有很大区别,
在使用Matlab脚本节点时应注意输入输出类型的转换。
可直接右键点击输入输出节点修改数据类型。
1.2DLL(DynamicLinkLibrary)动态链接库技术
1.2.1
动态链接库文件的生成
用MATLABScript节点法所开发出的工程不能够脱离Matlab独立运行,在实际运用中要求客户机都安装有Matlab,这往往是不现实的。
为了增强程序的可移植性,
利用DLL(DynamicLinkLibrary)动态链接库技术,结合Matlab、MicrosoftVisualC++、LabVIEW三种编程软件,可以开发出可独立于Mat-lab而运行的工程。
其流程图如图1所示。
函数文件经Matlab编译器编译后直接生成的动态链接库文件,
其输入输出类型均为mxArray指针。
LabVIEW支持标准C数据类型,但不支持mx-
Array,而Matlab所生成的动态链接库文件要求输入数据为mxArray。
为此需要使用MSVisualC++对函数文件进行包装,使其输入输出类型符合函数文件和LabVIEW的要求
。
图1基于DLL混合编程流程图
我们使用MathWorks公司为MSVisualC++开发的MatlabAdd-in插件将M文件集成入VC++的工程中。
在VC++中使用以下两个函数:
mxSetPr(a,b)———double数据类型的值赋给mxArray的实部、mxGetPr()———将mxArray数据类型转换为double数据类型,完成对函数文件的输入输出类型的转换,编译链接工程后,生成可供LabVIEW调用的动态链接库。
图2为生成的动态链接库的结构图
。
图2动态链接库结构图
1.2.2在LabVIEW中调用DLL
在LabVIEW中有下面两种途径可以调用DLL文件:
1)使用CLF(CallLibraryFunctionNode)实现对DLL的调用
在程序框图窗口中打开函数选板,点击互连接口中的库与可执行程序,选择弹出选项中的调用库函数节点,并将其拖至程序框图窗口。
2)使用LabVIEW自动导入功能导入动态链
接库
在程序框图窗口中,
选择工具条上的工具->导入->共享库(.dll)选项,再对导入的动态链接库文件和其头文件进行正确的配置,
并选择所需导入的函数后,
LabVIEW就可将自动导入的动态链接库文件生成可用的子VI。
1.3
COM组件技术
COM是微软为了计算机工业的软件生产更加符合人类的行为方式开发的一种软件开发技术。
在COM构架下,人们可以开发出各种各样的功能专一的组件,
然后将它们按照需要组合起来,构成复杂的应用系统。
Matlab所包含的MatlabCOMBuild-er能帮助用户将用M语言开发的算法自动快速地转变为独立的COM组件对象,
以供其他支持COM的编程语言调用,实现Matlab和其他编程语言的整合。
LabVIEW也提供了对COM的支持。
1.3.1创建COM组件
在Matlab中创建一个COM组件需要如下几个
步骤:
1)选择start→MATLAB→MATLABCOMBuild-er。
2)在Componentname中填入需要创建的工程名。
3)按编程需要选择使用C或者C++语言进行编译,
再根据Matlab程序决定是否包含图形库。
4)工程建立后,将M文件添加到工程中。
5)工程编译完毕后在distrib文件夹中将生成相应的动态链接库文件并自动地注册到系统中。
6)编译完成后,在MATLABCOMBuilder窗口中选择PackageComponent将COM组件打包并发布。
打包后程序会在distrib文件夹下生成一个后缀为exe的自解压文件,
运行它可实现动态链接库的安装和COM组件的注册。
为了在没有安装Matlab的客户机上使用该COM组件,需要一同发布MCR(MatlabComponentRuntime),可通过MCRInstaller.
exe进行安装。
1.3.2
LabVIEW中调用COM组件
要在LabVIEW中调用COM组件,首先要引用COM对象。
为此,首先在程序框图窗口中调用互连接口→ActiveX→打开自动化,右键点击打开自动化控件,选择ActiveX类,选中已注册类型库中的对象或生成的动态链接库文件,或直接从Matlab文件夹下的work文件夹中选择,这时会生成对应的图标与打开自动化控件相连接。
接下来选择ActiveX选板中的调用节点控件,将此控件与打开自动化相连,并在调用节点控件上点击右键选择方法—
——即Matlab程序中的函数名称。
当方法有输出变量时,第一个变量为nargout,它的数据类型为Long,这个输入参数传递函数输出变量个数给编译函数。
其余变量为函数的输入输出变量。
需要注意的是,虽然输入变量为整型或浮点型,
但调用的函数内部对应的变量为变体型数据,LabVIEW会自动将输入数据转换为变体型数据,满足COM组件要求。
但调用节点控件的输出数据为变体型数据,
在输出数据时需要使用ActiveX选板中的变体至数据转换控件将变体型数据转换为LabVIEW能够显示和处理的数据类型。
1.4
雷达显示界面仿真
下例为基于Matlab与LabVIEW混合编程方法的雷达显示界面仿真。
在仿真中,通过LabVIEW控件编辑功能,使用Photoshop7画出雷达显示器与目标图形,然后将其导入LabVIEW中已有的控件,制作出雷达显示屏和目标模型,并将其设置为严格自定义的输入控件。
图3为雷达显示界面的前面板。
前面板由三个部分组成:
雷达显示器控件与三个目标控件,扫描间隔控制控件(扫描间隔时间t单位为ms),目标坐标显示控件。
图3
雷达显示界面前面板
图4程序框图
0728科学技术与工程10卷
雷达显示器为一个转盘式的数值输入控件,由COM组件控制其扫描线进行扫描,扫描周期为T=360t。
三个目标由Matlabscript节点仿真飞行轨迹。
扫描间隔控件用来控制扫描线的扫描快慢。
在程序框图中由雷达显示器的属性节点提供该控件的边界、尺寸等信息,将这些数据处理后输入While循环框图中,
While循环再根据这些数据对目标位置进行初始化,
每一次循环再通过Matlabscript节点更新目标控件的坐标。
图4为程序框图。
2结语
三种混合编程方法中,
MatlabScript节点法简单实用,可大大简化LabVIEW编程的复杂程度,直接调用Matlab中先进的算法。
但该方法要求Mat-lab在后台运行,提供支持,故可移植性不高,程序运行速度也会受到影响。
使用动态链接库技术进行混合编程,实现起来最为复杂,涉及到Matlab、
Lab-VIEW、MSVC++三个大型软件的接口编程,但其能脱离Matlab被LabVIEW调用,
执行效率高编程灵活,适合大型程序开发。
COM组件法也能脱离Mat-lab使用,但在没有安装Matlab的电脑上需要安装MCRinstaller.exe。
在LabVIEW中恰当的使用混合编程方法可以有效地提高编程效率,简化G语言编程的复杂程度,提高程序的运行速度,用户可根据工程的实际情况选用合适的混合编程方法。
参
考文献
1
裴
锋,汪翠英.利用COM技术的LabVIEW与Matlab的无缝集
成.仪器仪表用户,2005;12
(2):
97—982
苏金明,黄国明,刘波.Matlab与外部程序接口.北京:
电子工业
出版社,20043
NationalInstrumentsCorporation.LabVIEWApplicationBuilderUserGuide,20034
雷振山.LabVIEW7Express实用技术教程.北京:
中国铁道出版社,20045
National
Instruments
Corporation.
Using
External
Code
in
LabVIEW.2000
ResearchandApplicationofMatlabandLabVIEWMixedProgramming
XUHe,LITao,LIYong
(DepartmentofElectronicandInformation,NorthwesternPolytechnicalUniversity,Xi’an710129,P.R.China)
[Abstract]MixedprogrammingofMatlabandLabVIEWisdiscussed.MatlabScriptnode,dynamic-linklibrary(DLL),andCOMcomponenttechnologyaremainlyresearched,andthetechnicalcharacteristicsofeachmethodarefurtherexplained.Onthisbasis,theadvantagesofMatlab’smatrixcomputingcapabilitiesandthebenefitsofLabVIEW’spaneldesigntoolsareincorporatedtocompleteadesignoftheradardisplayinterfaceinoursimulationexperiment.
[Keywords]LabVIEWMatlab
COM
Matlabscript
DLL
mixedprogramming
simula-
tionofradardisplay
1
72833期徐何,等:
Matlab与LabVIEW混合编程方法应用研究