logo资料库

labview与matlab接口.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
labview与matlab接口(zz)
labview 与 matlab 接口(zz) (2007-11-16 09:43:13) 转载▼ 标签: 知识/探索 cited from chinavib.com 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 基本原理
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.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 功能强大的算法库,可 望开发出更具智能化的虚拟仪器,将会在诸如故障诊断、专家系统、复杂过程控制等方面大有用武之地。
分享到:
收藏