LabVIEW与MATLAB混合编程

2007-03-09 19:03:27来源: 互联网
摘要:结合实例详细介绍了LabVIEW通过ActvieX自动化技术与MATLAB进行混合编程,达到了利用MATLAB优化算法库的目的。将LabVIEW与MATLAB有机结合,是一条开发智能虚拟仪器的有效途径。 关键词:LabVIEW语言 MATLAB ActiveX自动化 虚拟仪器 LabVIEW建立在易于使用的图形数据流编程语言——G语言上,大大简化了过程控制和测试软件的开发。MATLAB以其强大的科学计算功能、大量稳定可靠的算法库,已在为数学计算工具方面事实上的标准。但才者各有欠缺,利用混合编程可以相互补充。 MATLAB是MathWorks公司开发的“演算纸”式的程序设计语言。它提供了强大的矩阵运算和图形处理功能,编程效率高,几乎在所有的工程计算领域都提供了准确、高效的工具箱。但MATLAB也有不足之处,例如界面开发能力较差,并且数据输入、网络通信、硬件控制等方面都比较繁琐。 美国NI公司推出的LabVIEW语言是一种非常优秀的面向对象的图形化编程语言。LabVIEW是实验室虚拟仪器集成环境(Laboratory Virtual Instrument Engineering Workbench)的简称,是一个开放型的开发环境,使用图标代替文本代码创建应用程序,拥有大量与其它应用程序通信的VI库。例如LabVIEW使用自动化ActiveX、DDE和SQL,可与其它Windows应用程序集成;使用DataSocket技术、Web Server、TCP/IP和UDP网络Vis,与远程应用程序通信。在对硬件的支持方面,LabVIEW集成了与GPIB、VXI、PXI、RS-232/485、PLC和插入式数字采集设备等进行数据通信的全部功能。在LabVIEW下开发的程序称为虚拟仪器VI(Virtual Instrument),因为其外形和操作可以模拟实际的仪器。在对各种算法的支持方面,LabVIEW的工具箱非常有限,这就限制了大型应用程序的快速开发。 鉴于LabVIEW和MATLAB的优点,本文介绍了通过ActiveX技术,在LabVIEW(Ver6.1)中调用和操作MATLAB(Ver6.5)的方法,实现LabVIEW和MATLAB的混合编程,充分发挥两者的优势。 图1 1 基本原理 ActiveX自动化是基于组件对象模型COM(Component Object Model)的技术,允许应用程序或组件控制另一个应用程序或组件的运行,它包括自动化服务器和自动化控制器。MATLAB支持ActiveX自动化技术。通过使用MATLAB自动化服务器功能,可以在其它应用程序中执行MATLAB命令,并与MATLAB的工作空间进行数据交换。因此可以借助这一特性,把LabVIEW与MATLAB结合,充分利用MATLAB提供的大量高效可靠的算法和LabVIEW的图形化编程能力,混合开发出功能强大的应用软件。 2 应用举例 在混合编程中,通常用LabVIEW设计用户图形界面,负责数据采集和网络通信;MATLAB在后台提供大型算法供LabVIEW调用。 2.1 方法一:使用MATLAB Script节点 为了简化调用过程,LabVIEW提供了MATLAB Script节点。LabVIEW使用ActiveX技术执行该节点,启动一个MATLAB进程。这样用户就可以很方便地在自己的LabVIEW应用程序中使用MATLAB,包括执行MATLAB命令、使用功能丰富的各种工具箱,如神经网络工具箱(Neural Network Toolbox)、优化工具箱(Optimization Toolbox)。值得注意的是:LabVIEWgn MATLAB之间的数据通信仅支持Real、RealVector、RealMatrix、Complex、VectorComplex、Matrix六种格式的数据,且必须根据具体情况进行选择。 当开发涉及工业控制的应用程序时,常常由于控制参数的非线性变化,而无法建立合适的模型。由于此类问题,神经网络提供了一条有效的解决途径。 在LabVIEW开发环境下新建一个三层BP神经网络的VI程序,程序框图见图1。网络结构部分主要设置隐层(Hidelay)神经元的个数、传递函数(Transfer Function)以及网络训练算法(Algorithm)。经过样本数据(Training Data)训练过的网络,即可进行仿真测试了。MATLAB脚本程序可以在MATLAB环境下调试,再使用MATLAB Script节点导入MATLAB脚本;也可以直接在MATLAB Script节点中编写。位于Function>>Mathematics>>Formula模板中的MATLAB Script节点可以导入MATLAB脚本。图1中的脚本程序使用CASE语句进行传递函数和训练算法的选择。MATLAB Script节点中神经网络的输入层和隐层之间的权值矩阵inweight应指定为RealMatrix,在LabVIEW中对应的数据类型是二维实数据组Net.I-Weight。各变量数据类型见表1。 表1 MATLAB Script节点输入、输出变量的数据类型 变量名 LabVIEW数据类型 MATLAB数据类型 size of algorithm Double floating point numeric Real t outweight hideb outb result 1D array double floating numeric Real Vector p data inweight Multidimensional array double floating point numeric Real Matrix 在此程序中,得到的BP网络各层的权值矩 阵、阈值向量和传递函数三类参非常有用的,它们决定了神经网络的结构与特性。因此当神经网络训练好后,可以直接使用这些参数处理新的数据,得到预测值,而不必重新调用MATLAB。这样程序的运行效率会更高。另一方面,将调试好的神经网络VI创建成一个子VI,作为模块保存,当需要更新网络时,可以随时调用。 虽然通过MATLAB Script节点进行通信比较易于实现,但以这种方式调用MATLAB时,在任务栏中将出现一个MATLAB图标,单击该图形会打开MATLAB窗口,在其中可以任意输入。通常,这会干扰前台程序的运行,甚至造成程序的崩溃。另一方面,当MATLAB Script节点中的脚本执行完后,MATLAB也不能自动关闭。 2.2 方法二:使用ActiveX函数模板 在LabVIEW中使用引用(Refnum,也称“参考”)作为某个对象的唯一标识符,对象可以是文件、设备、网络连接等。由于引用是指向某一对象的临时指针,因此它仅在对象被打开时有效,一旦对象被关闭,LabVIEW就会自动断开连接。为了获得对MATLAB更多的控制,可以在框图程序中使用LabVIEW提供的相关子VI创建和获取自动化对象,然后在代码中调用对象拥有的方法和属性。当不再需要对象时,可以随时释放。 LabVIEW可以调用MATLAB(Ver6.5)ActiveX接口提供的8个方法和1个属性: (1)BSTR Execute([in]BSTR Command):Execute方法调用MATLAB执行一个合法的MATLAB命令,并将结果以字符串的形式输出。其输入参数Command为字符串类型变量,表示一个合法的MATLAB命令。 (2)void GetFullMatrix([in] BSTR Name,[in]BSTR Workspace,[in,out]SAFEARRAY(double)*pr,[in,out]SAFEARRAY(double)*pi):使用GetFullMatrix方法,LabVIEW从指定的MATLAB工作空间中获取一维或二维数组。Name为数组名,Workspace标识包含数组的工作空间,其默认值是“base”。Pr了所提取数组的实部,pi包含了所提取数组的虚部,它们在LabVIEW中为变体(Variant_数据类型。 (3)void PutFullMatrix([in]BSTR Name,[in]BSTR Workspace,[in]SAFEARRAY(double)*pr,[in]SAFEARRAY(double)*pi);此方法向指定的MATLAB工作空间中设置一维或二维数组。如果传递的数据为实数型,pi也必须传送,不过其内容可以为空。 (4)BSTR GetCharArray([in]BSTR Name,[in]BSTR Workspace):此方法从指定的MATLAB工作空间中获取字符数组。 (5)void PutCharArray([in]BSTR Name,[in]BSTR Workspace,[in]BSTR charArray):此方法向指定的工作空间中的变量写入一个字符数组。 (6)void MinimizeCommandWindow():此方法使MATLAB窗口最小化。 (7)void MaximizeCommandWindow():此方法使MATLAB窗口最大化。 (8)void Quit():用于MATLAB退出。 (9)属性Visible:当Visible为1时,MATLAB窗口显示在桌面上;当Visible为0时,隐含MATLAB窗口。 举例说明:LabVIEW程序中有二维数组A、B,通过MATLAB计算表达式B=A.*3(即A的每个元素均乘以3),得到的结果保存在LabVIEW的数组B中,并显示在前面板上。其MATLAB Window为枚举量,值为Lnvisible或Visible,目的是用于控制任务上是否出现MATLAB图标。数组A为控制量,用于输入二维数组数据。数组B为指示量,用于显示经MATLAB计算后返回的结果。框图程序见图2。此程序较完整地描述了调用MATLAB过程的总体框架,至于复杂的算法可以在MATLAB中实现。 首先必须引用自动化对象。为此在LabVIEW的Controls>>ActiveX>>Automation Refnum模板中选择自动化引用(Automation Refnum)控制量,将其放置在前面板上,设置控件的Visible属性为False,从对象列表中选择Matlab Application(Version6.5)Type Library Version1.0。这样MATLABr的引用就添加到程序中,其对应的图标为MLApp.DIMLApp。为了简化访问自动化服务器的过程,LabVIEW在其Function>L>Communication>>ActiveX模板中提供了一组与ActiveX操作相关的子VI,其中Automation Open.vi打开引用,启动MATLAB自动化服务器,并将引用传递给其它节点,如属性节点(Property Node)、调用方法节点(Invoke Node)。程序中LabVIEW调用PutFullMatrix方法,将二维组A通过参数pr传到MATLAB的“base”工作空间。虽然A为双精度浮点型数组,pr和pi的数据类型为变体(Variant),数据类型不同,但LabVIEW会自动将输入数据的类型转换为变化,以满足输入要求。程序中A为实数数组,无虚部,所以给pi赋空值。接着LabVIEW调用MLApp.DIMLApp提供的Execute方法,向MATLAB传送一条命令“B=A.*3”,于是MATLAB将数组A的每个元素与3相乘,计算后的结果保存在数组B中。再调用GetFullMatrix方法,从“base”工作空间中获取数组B的实部。这里必须使用Variant to Data.vi,将变体类型的输出转化为LabVIEW中的二维数组。最后用Quit方法退出MATLAB,Automation Close.vi随即断开引用。运行程序,可以看到MATLAB一经启动,任何标上底图标例立即消失,计算结果返回到LabVIEW的前面板上。这里仅介绍了ActiveX函数模板的基本使用以及调用MATLAB过程的总体框架,读者可以根据需要进行扩充。 图2 2.3 两种调用方法的比较 (1)MATLAB Script节点具有多输入、多输出的特点,一次处理的信息量要以很大。MATLAB脚本可以先在MATLAB下调试。无误后再导入到MATLABSeript节点中。MATLAB Script节点对输入、输出数据的类型有明确的要求。只有LabVIEW中的数据类型与MATLAB中的数据型相匹配,才能进行数据传输。使用MATLAB Script节点的方法,快捷方便,但不利于较大的应用程序开发。当需要使用时,可将其模块化,采用主程序动态加载。 (2)使用ActiveX函数模的方法,具有对MATLAB更强的控制能力。如随时打开和关闭MATLAB,隐藏在务栏中的MATLAB图标,与MATLAB进行字符数组传输,这些都是MATLAB Script节点都不具有的。使用ActiveX函数模板时,经常 会遇到数据类型的转换,尤其是变体(Variant)与其他类型的转换。当高用大型算法时,必须明确输入、输出数据的具体类型,而且要尽量减少数据传输量和启动MATLAB自动化服务器的次数ActiveX函数模板,适于较大的应用程序开发。在LabVIEW顺序结构中,不提供使用。原因是顺序结构妨碍了作为LabVIEW优点之一的程序并行运行机制,而且MATLAB自动化服务器启动也需要一定时间,这会使整个程序不能及时处理其它的用户操作。总之,两种调用方法其自身的优势和不足。在开发一个大的复杂应用程序时,综合不同的应用要求,合理选择可以显著提高开发效率。 采用虚拟仪器技术,通过LabVIEW构建测试仪器开发效率高、可维护性强、测试精度、稳定性和可靠性能够得到充保证;具有很高的性价比,节省投资,但于设备更新和功能扩充。如果能利用MATLAB功能强大的算法库,可望开发出更具智能化的虚拟仪器,将会在诸如故障诊断、专家系统、复杂过程控制等方面大有用武之地。

关键字:labview  matlab  混合  混合编程

编辑: 引用地址:http://www.eeworld.com.cn/Test_and_measurement/zhzx/200703/1842.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
labview
matlab
混合
混合编程

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved