labview引用.docx
- 文档编号:18501094
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:30
- 大小:2MB
labview引用.docx
《labview引用.docx》由会员分享,可在线阅读,更多相关《labview引用.docx(30页珍藏版)》请在冰点文库上搜索。
labview引用
Labview引用(转自北方客栈)
6.2引用——操控对象的钥匙
上一节我们讨论了如何创建应用程序、VI和对象等的属性节点和调用节点,同时也看到了这些节点的丰富程度,当然也非常期待能够在程序设计中使用这些节点。
问题是在LabVIEW中如何操控访问这些节点呢?
大概在LabVIEW4.0中,在仪器控制中就使用了属性节点。
到LabVIEW5.0属性节点被归结到VI服务器部分,并为许多对象提供了属性节点和调用节点。
同时提供了一种对这些节点进行操控的机制,就是通过“引用”来操控访问这些属性节点。
6.2.1引用的基本概念
引用是LabVIEW中的一个非常重要概念,它类似于一个指向对象的指针。
这里所说对象的概念比之前对象的概念得到了延伸。
LabVIEW中的应用程序、VI和对象等等都应该视为图形化语言中的对象,对象不再单单用来针对控件。
也就是说,应用程序、VI和控件等等都可以通过引用来实现操控。
面向对象的Java语言(包括C++)也采用了引用的概念。
尽管LabVIEW并不是纯面向对象的语言,但是引用的概念与面向对象的Java语言基本相同,引用都被用来作为操控对象的钥匙,或者说是操控对象的标识符(一种特殊的数据类型)。
需要注意的是:
面向对象的编程语言,通过程序设计可以创建新的对象或为对象创建新的属性和方法(不断的完善所创建的对象),并通过引用来操控对象。
可是在LabVIEW图形化编程语言中,我们只能通过引用来操控和使用对象所固有的属性和方法。
有人曾这样比喻过[13]:
引用和对象之间的关系,就好比电视机(对象)和遥控器(对象的引用)之间的关系一样。
只要你手上握有遥控器,便可以控制电视机。
若要改变电视机的频道或音量的大小,操纵遥控器即可。
实质上,就是通过引用(遥控器)来间接的控制电视机(对象)并改变它的工作状态。
如果你想在房间里走来走去,又不想失去对电视机的控制,只需携带遥控器就行,不必背着笨重的电视机。
由于建立了这种引用机制,对象中的许多属性和方法就会被我们在程序设计中得到广泛的应用。
而作为图形化语言的提供者NI,只需不断的提供和改进这些对象的属性和方法来提高图形化语言应用程序设计的灵活性和实用性。
6.2.2获得引用的方法之一:
创建
如何获得操控对象的钥匙,也就是如何获得对象的引用。
其实,获得引用的方法之一就是创建。
创建的基本概念是:
所要操控的对象必须存在于当前的程序中,否则不可创建引用。
创建的具体操作是:
在程序框图上,鼠标右键空白区,在弹出的快捷菜单中选择:
》函数
》编程
》应用程序控制
》VI服务器引用
它实际上是一个图形化的通用引用,并没有指向任何对象。
参见下图。
图6-22VI服务器引用
将VI服务器引用拖拽到前面板上,它变成一个指向对象的引用(实例化),它的默认状态是:
本VI。
参见下图。
图6-23连接到其它对象(创建其它对象的引用)
这里请注意:
因为本VI是已经存在的,所以我们可以通过创建获得它的引用。
当然通过快捷菜单还可以选择设定为其它对象的引用,参见上图。
比如也可以选择:
本应用程序的引用或窗格中其它控件的引用,参见下图中的具体引用实例。
需要注意的是:
这些对象必须真正的存在(关于非实例化的引用句柄后面我们会谈到)。
图6-24不同对象的引用实例(都是已存在的对象)
当控件作为对象时,它的引用更容易创建,鼠标右键点击程序框图或前面板上的控件,在弹出的快捷菜单中选择:
》创建
》引用
即可创建一个控件的引用(参见上图中的“数字”引用)。
现在,有了对象的引用就可以通过引用来操控不同的对象了。
参看下面的例子。
例6-3查看本应用程序的多个属性
利用本应用称序引用查看本应用程序的多个属性,程序参见下图。
图6-25通过引用查看本应用程序的多个属性
通过这些属性节点看到我们所使用的操作系统、多核处理器的数量等一些系统特性。
6.2.3获得引用的方法之二:
打开与关闭引用
我们上面所谈的对象都是已经存在当前程序中的对象,所以可以通过创建的方法来获得这些对象的引用。
还有一些对象并没有存在于当前的程序中,获得它们的引用的方法就是采用打开xx引用的函数,包括打开应用程序引用和打开VI引用。
具体操作是:
在程序框图中,鼠标右键单击空白处,在弹出的快捷菜单中选择:
》函数
》编程
》应用程序控制
》打开应用程序引用或打开VI引用,并拖拽到程序框图中,参见下图。
图6-26打开应用程序引用和打开VI引用,最后要关闭引用
关于打开应用程序引用和打开VI引用的具体应用实例后面我们会谈到。
如果我们打开了应用程序或VI的引用,使用后必须关掉该引用。
关闭该引用的方法是使用“关闭引用”函数。
具体操作是:
在程序框图中鼠标右键单击空白处,在弹出的菜单中选择:
》函数
》编程
》应用程序控制
》关闭引用
将关闭引用函数拖拽到程序框图中即可。
打开引用完成对应节点的操作后,关闭该引用是一个良好的编程习惯。
这样可以避免内存的泄露和浪费更多的系统资源。
对于前面谈到的那些所创建的引用,我个人理解是无须关闭的,似乎LabVIEW将会自动关闭这些引用。
比如VI关闭后,这些引用随着对象的消亡会自动消亡,VI导入后会自动获得这些引用。
许多NI所提供的例程也都是这样使用的。
对于打开的引用一定要注意进行关闭操作。
下面我们看一个打开应用程序引用的实际应用例子,参见下图。
图6-27打开和关闭引用
在这个例子中我们应该注意到,如果输入空字符串,该函数将打开本应用程序的引用。
下图中的操作可以给出证明。
图6-28两种引用是相同的
6.2.4引用句柄
上面我们通过两种方法获得了对象的引用。
在图形化程序设计中,仅有这些方法还是不够的。
比如我们有一个主VI的程序,其界面上有一个字符串显示控件,我们需要对字符串文本进行一些设置,通过属性节点可以实现这些操控,参见下图。
图6-29使用属性节点占面积很大
这样的程序代码给我们带来了很多麻烦,至少是占用程序框图中的很大面积。
当然我们可以将这部分代码转换成一个子VI,减少占用面积、简化程序代码。
创建的子VI命名为:
字体设置.vi。
参见下图。
图6-30主VI与字体设置子VI
在字体设置.vi中我们看到使用了一个引用句柄(字符串)。
在主VI中看到了对象的引用代替了引用句柄的使用方法。
引用句柄是一组控件(程序框图上是引用句柄端子),它包括了很多的对象。
在前面板上,鼠标右击空白处,在弹出的快捷菜单中选择:
》控件
》新式(经典)
》引用句柄
参见下图。
图6-31丰富的引用句柄
引用句柄主要用来引导VI之间的引用传递(传引用),它的功能实际上满足了VI层次化、模块化设计的需求。
引用句柄本身并没有什么实际作用,只起到了引用标识符的作用,包括程序框图中引用句柄的端子。
引用句柄最终只有被实例化后,才能真正称为引用。
所以,引用句柄也可以称为:
非实例化的引用。
下面我们就围绕LabVIEW中三个最终要的对象(应用程序、VI、控件)来说明引用的实际应用。
6.3应用程序引用
通过创建的方式所获得的引用是本应用程序的引用(我们称之为:
实例化引用,简称:
引用),它只可以操控本应用程序的属性节点和调用节点。
对于其它应用程序还需采用其它办法。
6.3.1打开应用程序的引用
前面我们也已经看到,VI服务器还可以通过打开应用程序引用函数来操控另一台计算机上的应用程序(注意:
应用程序指的是LabVIEW程序)。
当时,我们对打开应用程序引用函数没有做更多的讨论和说明,下面我们看一下它的实际使用方法。
参见下图。
图6-32打开应用程序引用函数的使用方法
这里:
机器名——待打开应用程序的计算机地址。
如果为空,则打开本应用称序的引用。
端口号或服务器名称(3363)——VI服务器的端口号。
LabVIEW中的默认值为:
3363。
超时等待——默认值为:
1分钟。
采用这种方式所获得的应用程序引用就是应用程序引用的实例化,它所获得的引用就是某应用程序的引用。
实际上若想在本计算机上实现通过引用来操控另一台计算机上的应用程序还要有一些基本工作需要做。
下面就一步一步来操作。
6.3.2获得相关计算机的网络地址
现在我们有两台计算机,一台运行Apple操作系统,并已经安装了苹果版的LabVIEW2009SP1;而另一台计算机则运行Windows操作系统,并安装了LabVIEW2010SP1。
这两台电脑通过WiFi无线网络进行网络连接。
Apple电脑做服务方,Windows电脑做客户方。
现在,首先查看两台电脑的网络参数,Apple电脑的网络参数设置参见下图所示:
图6-33Apple电脑的网络设置(地址=10.0.1.3)
我们需要记住这个地址:
10.0.1.3
下面再查看Windows电脑的网络配置情况。
参见下图。
图6-34Windows电脑的网络设置(地址=10.0.1.25)
我们也需要记住这个地址:
10.0.1.25
下面再查看各计算机VI服务器的设置情况。
6.3.3获得相关计算机VI服务器的设置
下面我们再分别看看两台电脑上的LabVIEWVI服务器的设置情况。
对于Apple电脑,在LabVIEW2009SP1开发环境下,从工具栏选择:
》Tool
》Options
》VIServer参见下图。
图6-35Apple电脑的VIServer的设置情况
这里注意:
TCP/IP的Port=3363
其它无须进行设置(就不截图了)。
点击“OK“完成设置。
下面在看看Windows电脑的设置情况。
同样,在LabVIEW2010SP1开发环境下,从工具栏选择:
》工具
》选项
》VI服务器,参见下图。
图6-36VI服务器的设置情况
端口设置与Apple电脑一样,都是3363。
然后滑动垂直滚动条继续往下查看,参见下图。
图6-37VI服务器的设置情况(续)服务方地址需要设定
需要将Apple电脑的地址设定在这里。
其它无须设定,点击[确定]按键即可完成VI服务器的设定工作。
剩下来的工作就是在Apple电脑上设计一个程序。
6.3.4应用程序引用——实例
下面我们在Apple电脑上设计一个VI,名字为:
AppleLV2009SP1.vi。
程序框图和运行结果参见下图。
图6-38在Apple电脑上查看另一台电脑上的信息(Windows电脑信息)
通过引用我们在Apple电脑上查看到另一台Windows电脑上应用程序的基本信息。
现在我们将上图中的地址设为空,在看看AppleLV2009SP1.vi程序的运行结果,参见下图。
图6-39地址为空时等效打开本应用程序的引用(Apple电脑信息)
当地址为空时,引用指向本应用程序,查看到本应用称序的基本信息。
此时相当于本应用程序的引用,证明如下图所示。
图6-40两个引用是相同的
6.4VI引用
同样,我们通过创建的方法所获得的VI引用,只针对本VI的操控。
使用打开VI引用函数可以打开其它VI的引用(包括本机或其它计算机上VI的引用)。
现在我们就看看打开VI引用函数。
6.4.1打开VI的引用
通过打开VI引用函数,我们就可以操控其它的VI。
具体操作是:
在程序框图中,鼠标右键空白处,在弹出的快捷菜单中选择:
》函数
》编程
》应用程序控制
》打开VI引用
将打开VI引用函数拖拽到程序框图中,参见下图中红色框内的部分。
图6-41通过打开VI属性来打开全局变量.vi的前面板
运行上图中的程序,结果会在桌面上打开一个全局变量(已存在)的前面板,且令打开的前面板居中显示。
通过这个实例是想说明,使用打开VI引用函数不仅可以打开VI,还可以打开全局变量引用以及自定义控件引用(指定自定义控件的路径即可)。
注意:
打开VI引用函数需与关闭引用函数配对使用。
我们再看一个打开另一台计算机上VI的例子。
在Windows计算机的C盘下,已经放置了一个名字为:
OK.vi的VI。
现在我们希望通过另一台Apple电脑来打开它。
Apple电脑下设计的程序框图,参见下图。
图6-42打开另一台计算机上的VI
1、通过打开应用程序引用打开另一台计算机上的应用程序引用
2、通过应用程序的引用再打开VI(OK.vi)的引用
3、通过VI的方法节点,打开OK.vi的前面板,并使其居中
4、关闭引用
程序在Apple电脑上运行,我们会看到另一台Windows电脑上的OK.vi突然被打开,并居中显示。
如果你不断的打开和关闭这个VI,你的同事真的可能会感到莫名奇妙。
这有些象黑客,前提是那台计算机的VI服务器允许你访问(它的LabVIEW必须是打开的)。
6.4.2VI的动态调用
通常在我们编程过程中,放置在程序框图中的VI都属于VI的静态调用。
这些静态调用的VI当我们打开引用程序时,所有静态VI都会导入内存()包括它们所使用的子程序。
如果有的静态VI占用内存很大且又不经常使用,我们可以采用VI动态调用的方法,也就是在该VI使用时调入,执行完成后自动清除该VI。
这样就可以解决内存被大量占用的问题。
现在,我们设计一个程序命名为:
查看内存中的VI.vi。
它的程序框图和前面板以及运行结果,参见下图所示。
图6-43查看内存中的VI.vi的前面板、程序框图和运行结果
从该程序的运行结果来看,内存中只有一个VI,也就是我们现在所使用的查看内存中的VI.vi。
假如我们随便打开一个范例VI,TDMS-快速读取数据(时域),查看结果参见下图所示。
图6-44竟包含169个VI
保留查看内存中的VI.vi这个VI,以后用来查看内存中的VI。
6.4.3动态调用VI方法之一——通过引用节点调用
使用通过引用节点调用VI,可以实现VI的动态调用。
但是,需要注意是它所调用的VI必须是严格类型VI。
关于VI的类型我们在2.6.2节已经做过介绍。
我们还是先看看这种动态调用的方式,假如我们有一个字体设置.vi,参见下图。
图6-45字体设置.vi(我们前面见过)
现在我们通过引用节点来调用这个VI。
参见下图。
图6-46通过引用节点动态调用字体设置.vi(运行后)
我们期待在VI(通过引用节点调用VI)的前面板上显示版本,上图中通过动态调用字体设置.vi来实现。
1、打开VI引用
给出需要被调用字体设定.vi的路径
将字体设定.vi拖拽到“类型说明符VI引用句柄“处,建立连线板关系(会同时出现在通过引用节点调用中)
2、连接通过引用节点调用
创建版本字符串的引用,连接到“通过引用节点调用”的连线端
3、关闭引用
这种动态调用的数据流运行机制将是执行完被调用VI后结束。
这种动态调用可以实现与被调用VI间的数据交换,这种方式更适用于某些数据的计算处理,比如误差拟合计算、滤波器设计、频谱分析等插件。
通过运行查看内存中的VI.vi其结果参见下图所示。
图6-47内存中只有两个VI,动态调用的VI并不在内存中
通过查看,我们发现内存中只有两个VI,而被动态调用的VI并不在于内存之中。
6.4.4动态调用VI方法之二——通过调用节点调用
动态调用的另一种方式就是通过调用(方法)节点来实现VI的动态调用。
我们先看看这种动态调用方式的基本特点。
适合于任何类型的VI
可以用来控制程序的运行流程
实际上在程序设计中这种动态调用方式更常见。
下面我们就分别来进行讨论。
主——从,方式的动态调用
主——从,方式的运行机制是:
首先主VI动态的调用从VI,即打开从VI的前面板并运行从VI,关闭动态调用的参考(从VI一直运行),然后通过方法节点关闭主VI。
这种运行方式意味着整个程序运行的控制权将从主VI通过动态调用后转交给从VI。
这种情况多用于各程序之间的连接调用。
下面看一个例子。
比如我们有一个TopVI.vi,运行时前面板参见下图。
图6-48TopVI.vi运行前面板图(有一个倒数计数器)
下面来看看它的程序框图,参见下图。
图6-49TopVI.vi的程序框图
分析该程序框图:
∙For循环主要为演示所用,与动态调用无关
∙创建被动态调用VI(应用程序.vi)的路径
∙根据路径打开被调用VI的引用
∙设置调用节点FP.Open(前面板有效、标准状态)
∙设置调用节点RunVI(无须等待被调用VI执行结束、自动销毁打开的引用)
∙通过调用节点关闭本VI
∙错误处理
当然,我们还需要有一个应用程序.vi,很简单仅仅用了一个While循环,参见下图。
图6-50应用程序.vi的前面板与程序框图
运行TopVI程序10秒后,它动态调用应用程序.vi,并将TopVI的前面板关闭。
应用程序VI将一直运行,直到按下[演示停止]。
当然,也可以通过动态调用其它的VI,使程序持续执行。
程序运行的前后可以使用查看内存中的VI程序查看内存,实际情况这里就不给出了。
主——从——主,方式的动态调用
这种方式的运行机制与通过引用节点调用的方式类似,动态调用某VI直到它结束后返回主VI。
比如我们有一个应用程序菜单,我们就可以使用这种方式来控制选择不同的应用程序运行。
下面看看TopVI-2.vi的程序框图,参见下图。
图6-51TopVI-2.vi的程序框图
∙For循环主要为演示所用,与动态调用无关
∙创建被动态调用VI(应用程序.vi)的路径
∙根据路径打开被调用VI的引用
∙设置调用节点FP.Open(前面板有效、标准状态)
∙将主VI的前面板隐藏
∙设置调用节点RunVI(等待被调用VI执行结束、自动销毁打开的引用)
∙通过调用节点关闭被调用VI
∙恢复主VI前面板显示
∙演示用对话框
∙错误处理
6.5控件的引用
控件作为前面板上对象,不仅可以纪录保存数据,它自身有许多很丰富的特点。
比如大小、外观形状、色彩等等。
另外LabVIEW开发环境中,还提供了可操控控件对象的一些属性和方法。
这些属性和方法可以在程序设计过程中随时被我们调用。
有时候为了更好的利用这些属性和方法,我们还需要通过控件的引用来操控控件。
6.5.1控件引用的创建方法
通常情况下,创建控件的引用很简单。
三种方法:
1、在程序框图上,用鼠标右键单击控件,在弹出的菜单中选择:
》创建
》引用
参见下图。
图6-52通过控件实例创建它的引用
2、在程序框图上,用鼠标右键单击空白处,在弹出的菜单中选择:
》编程
》应用程序控制
》VI服务器引用
然后在VI服务器引用上右键单击,在弹出的菜单中选择:
》链接至
》窗格
》数值
参见下图。
图6-53通过VI服务器创建,链接到指定控件
3、在前面板上,鼠标右键空白处,在弹出的选项板中选择:
》控件
》新式
》引用句柄
》控件引用句柄
参见下图。
图6-54创建引用句柄
引用句柄用来传递引用,并非是某个控件的引用(引用没有实例化)。
6.5.2控件引用的实际应用
我们首先回顾3.2.2节中所讨论过的问题,在那里我们讨论了状态机与按键开关配合实现应用程序运行控制的基本方法。
采用这种方法控制的应用程序,决不会产生用户误操作现象。
因为在不同状态下,不可使用的按键都被设置为禁用状态。
首先,我们创建5个自定义的控件,也就是我们将使用的按键开关。
参见下图。
图6-55自定义控件
现在,我们创建一个新的VI,命名为:
簇控件的引用.vi。
然后,我们在这个VI的前面板的下方,创建一个簇,命名为:
状态切换。
再按顺序将这些自定义控件拖拽到这个簇中。
参见下图。
图5-56状态切换簇
现在我们就可以通过簇控件的引用和属性来控制按键开关的实际状态。
参见下图。
图6-57通过枚举常量“初始化状态”就可以实现状态切换(目前均为可用)
下面我们就根据状态机的状态分别确定这些按键开关是否可用。
1、初始化后,进入等待测量状态
当应用程序进入初始化状态后,各按键开关所处状态应该是:
即时帮助——可用,此时可以查看即时帮助
开始测量——可用,可以选择开始进行测量
停止测量——禁用,测量还没有开始,停止测量当然不可用
创建报告——禁用,测量还没有进行,当然无法创建测试报告
退出测量——可用,可以选择不进行测量而直接退出测试程序
设置和运行结果参见下图。
图6-58初始化后等待测量状态
2、点击开始测量,进入测量状态
当应用程序进入测量状态后,各按键开关所处状态应该是:
即时帮助——禁用,
开始测量——禁用,
停止测量——可用,测量已经开始,停止测量可用
创建报告——禁用,测量还没有结束,当然无法创建测试报告
退出测量——禁用,测量正在进行中,不可以退出测试程序
设置和运行结果参见下图。
图6-59测量进行状态
3、点击停止测量,再次进入等待测量状态
当应用程序再次进入等待测量状态后,各按键开关所处状态应该是:
即时帮助——可用,
开始测量——可用,
停止测量——禁用,测量还没有开始,停止测量禁用
创建报告——可用,测量已经结束,可以建测试报告
退出测量——可用,可以不再进行测量,而退出测试程序
设置和运行结果参见下图。
图6-60测量结束,可选择多种处理方式
如果此时选择创建报告,应用程序会禁用所有的按键操作,直到报告生成后(时间很短)返回待测量状态。
由此可见,按键开关配合状态机使用,操作是在我们的引导下进行,根本就不会发生误操作现象。
当然我们也可以将部分程序转变为子VI,在不同的状态下调用该子VI。
参见下图。
图6-61在不同状态下,使用子VI进行处理
图6-62簇控件的引用-子VI的前面板图和程序框图
关于状态机部分我们后面会介绍到。
∙
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- labview 引用
![提示](https://static.bingdoc.com/images/bang_tan.gif)