6.2 引用——操控对象的钥匙 上一节我们讨论了如何创建应用程序、VI和对象等的属性节点和调用节点,同时也看到了这些节点的丰富程度,当然也非常期待能够在程序设计中使用这些节点。问题是在LabVIEW中如何操控访问这些节点呢? 6.2.1 引用的基本概念 引用是LabVIEW中的一个非常重要概念,它类似于一个指向对象的指针。这里所说对象的概念比之前对象的概念得到了延伸。LabVIEW中的应用程序、VI和对象等等都应该视为图形化语言中的对象,对象不再单单用来针对控件。也就是说,应用程序、VI和控件等等都可以通过引用来实现操控。 6.2.2 获得引用的方法之一:创建 如何获得操控对象的钥匙,也就是如何获得对象的引用。其实,获得引用的方法之一就是创建。 图 6-22 VI服务器引用 将VI服务器引用拖拽到前面板上,它变成一个指向对象的引用(实例化),它的默认状态是:本VI。参见下图。 图 6-23 连接到其它对象(创建其它对象的引用) 这里请注意:因为本VI是已经存在的,所以我们可以通过创建获得它的引用。当然通过快捷菜单还可以选择设定为其它对象的引用,参见上图。比如也可以选择:本应用程序的引用或窗格中其它控件的引用,参见下图中的具体引用实例。需要注意的是:这些对象必须真正的存在(关于非实例化的引用句柄后面我们会谈到)。 图 6-24 不同对象的引用实例(都是已存在的对象) 当控件作为对象时,它的引用更容易创建,鼠标右键点击程序框图或前面板上的控件,在弹出的快捷菜单中选择: 例6-3查看本应用程序的多个属性 利用本应用称序引用查看本应用程序的多个属性,程序参见下图。 图 6-25 通过引用查看本应用程序的多个属性 通过这些属性节点看到我们所使用的操作系统、多核处理器的数量等一些系统特性。 6.2.3 获得引用的方法之二:打开与关闭引用 我们上面所谈的对象都是已经存在当前程序中的对象,所以可以通过创建的方法来获得这些对象的引用。还有一些对象并没有存在于当前的程序中,获得它们的引用的方法就是采用打开xx引用的函数,包括打开应用程序引用和打开VI引用。具体操作是:在程序框图中,鼠标右键单击空白处,在弹出的快捷菜单中选择: 图 6-26 打开应用程序引用和打开VI引用,最后要关闭引用 关于打开应用程序引用和打开VI引用的具体应用实例后面我们会谈到。 图 6-27 打开和关闭引用 在这个例子中我们应该注意到,如果输入空字符串,该函数将打开本应用程序的引用。下图中的操作可以给出证明。 图 6-28 两种引用是相同的 6.2.4 引用句柄 上面我们通过两种方法获得了对象的引用。在图形化程序设计中,仅有这些方法还是不够的。比如我们有一个主VI的程序,其界面上有一个字符串显示控件,我们需要对字符串文本进行一些设置,通过属性节点可以实现这些操控,参见下图。 图 6-29 使用属性节点占面积很大 这样的程序代码给我们带来了很多麻烦,至少是占用程序框图中的很大面积。当然我们可以将这部分代码转换成一个子VI,减少占用面积、简化程序代码。创建的子VI命名为:字体设置.vi。参见下图。 图 6-30 主VI与字体设置子VI 在字体设置.vi中我们看到使用了一个引用句柄(字符串)。在主VI中看到了对象的引用代替了引用句柄的使用方法。 图 6-31 丰富的引用句柄 引用句柄主要用来引导VI之间的引用传递(传引用),它的功能实际上满足了VI层次化、模块化设计的需求。 6.3 应用程序引用 通过创建的方式所获得的引用是本应用程序的引用(我们称之为:实例化引用,简称:引用),它只可以操控本应用程序的属性节点和调用节点。对于其它应用程序还需采用其它办法。 6.3.1 打开应用程序的引用 前面我们也已经看到,VI服务器还可以通过打开应用程序引用函数来操控另一台计算机上的应用程序(注意:应用程序指的是LabVIEW程序)。当时,我们对打开应用程序引用函数没有做更多的讨论和说明,下面我们看一下它的实际使用方法。参见下图。 图 6-32 打开应用程序引用函数的使用方法 这里: 6.3.2 获得相关计算机的网络地址 现在我们有两台计算机,一台运行Apple操作系统,并已经安装了苹果版的LabVIEW
2009SP1;而另一台计算机则运行Windows操作系统,并安装了LabVIEW
2010SP1。这两台电脑通过WiFi无线网络进行网络连接。Apple电脑做服务方,Windows电脑做客户方。 图 6-33 Apple电脑的网络设置(地址=10.0.1.3) 我们需要记住这个地址:10.0.1.3 图 6-34 Windows电脑的网络设置(地址=10.0.1.25) 我们也需要记住这个地址:10.0.1.25 6.3.3获得相关计算机VI服务器的设置 下面我们再分别看看两台电脑上的LabVIEW VI服务器的设置情况。 图 6-35 Apple 电脑的VI Server的设置情况 这里注意:TCP/IP
的 Port=3363 图 6-36 VI服务器的设置情况 端口设置与Apple电脑一样,都是3363。然后滑动垂直滚动条继续往下查看,参见下图。 图 6-37 VI服务器的设置情况(续)服务方地址需要设定 需要将Apple电脑的地址设定在这里。其它无须设定,点击[确定]按键即可完成VI服务器的设定工作。 6.3.4 应用程序引用——实例 下面我们在Apple电脑上设计一个VI,名字为:AppleLV2009SP1.vi。程序框图和运行结果参见下图。 图 6-38 在Apple电脑上查看另一台电脑上的信息(Windows电脑信息) 通过引用我们在Apple电脑上查看到另一台Windows电脑上应用程序的基本信息。现在我们将上图中的地址设为空,在看看 AppleLV2009SP1.vi程序的运行结果,参见下图。 图 6-39 地址为空时等效打开本应用程序的引用(Apple电脑信息) 当地址为空时,引用指向本应用程序,查看到本应用称序的基本信息。此时相当于本应用程序的引用,证明如下图所示。 图 6-40 两个引用是相同的 6.4 VI引用 同样,我们通过创建的方法所获得的VI引用,只针对本VI的操控。使用打开VI引用函数可以打开其它VI的引用(包括本机或其它计算机上VI的引用)。现在我们就看看打开VI引用函数。 6.4.1 打开VI的引用 通过打开VI引用函数,我们就可以操控其它的VI。具体操作是: 图 6-41 通过打开VI属性来打开全局变量.vi的前面板 运行上图中的程序,结果会在桌面上打开一个全局变量(已存在)的前面板,且令打开的前面板居中显示。 图 6-42 打开另一台计算机上的VI
6.4.2 VI的动态调用 通常在我们编程过程中,放置在程序框图中的VI都属于VI的静态调用。这些静态调用的VI当我们打开引用程序时,所有静态VI都会导入内存()包括它们所使用的子程序。 图 6-43 查看内存中的VI.vi的前面板、程序框图和运行结果 从该程序的运行结果来看,内存中只有一个VI,也就是我们现在所使用的查看内存中的VI.vi。 图 6-44 竟包含169个VI 保留查看内存中的VI.vi这个VI,以后用来查看内存中的VI。 6.4.3动态调用VI方法之一——通过引用节点调用 使用通过引用节点调用VI,可以实现VI的动态调用。但是,需要注意是它所调用的VI必须是严格类型VI。关于VI的类型我们在2.6.2节已经做过介绍。 图 6-45 字体设置.vi(我们前面见过) 现在我们通过引用节点来调用这个VI。参见下图。 图 6-46 通过引用节点动态调用字体设置.vi(运行后) 我们期待在VI(通过引用节点调用VI)的前面板上显示版本,上图中通过动态调用字体设置.vi来实现。 图 6-47 内存中只有两个VI,动态调用的VI并不在内存中 通过查看,我们发现内存中只有两个VI,而被动态调用的VI并不在于内存之中。 6.4.4动态调用VI方法之二——通过调用节点调用 动态调用的另一种方式就是通过调用(方法)节点来实现VI的动态调用。我们先看看这种动态调用方式的基本特点。 图 6-48 Top VI.vi运行前面板图(有一个倒数计数器) 下面来看看它的程序框图,参见下图。 图 6-49 Top VI.vi的程序框图 分析该程序框图:
图 6-50 应用程序.vi的前面板与程序框图 运行Top
VI程序10秒后,它动态调用应用程序.vi,并将Top
VI的前面板关闭。应用程序VI将一直运行,直到按下[演示停止]。当然,也可以通过动态调用其它的VI,使程序持续执行。 图 6-51 Top VI-2.vi的程序框图
6.5 控件的引用 控件作为前面板上对象,不仅可以纪录保存数据,它自身有许多很丰富的特点。比如大小、外观形状、色彩等等。另外LabVIEW开发环境中,还提供了可操控控件对象的一些属性和方法。这些属性和方法可以在程序设计过程中随时被我们调用。有时候为了更好的利用这些属性和方法,我们还需要通过控件的引用来操控控件。 6.5.1 控件引用的创建方法 通常情况下,创建控件的引用很简单。三种方法: 图 6-52 通过控件实例创建它的引用 2、在程序框图上,用鼠标右键单击空白处,在弹出的菜单中选择: 图 6-53 通过VI服务器创建,链接到指定控件 3、在前面板上,鼠标右键空白处,在弹出的选项板中选择: 图 6-54 创建引用句柄 引用句柄用来传递引用,并非是某个控件的引用(引用没有实例化)。 6.5.2 控件引用的实际应用 我们首先回顾3.2.2节中所讨论过的问题,在那里我们讨论了状态机与按键开关配合实现应用程序运行控制的基本方法。采用这种方法控制的应用程序,决不会产生用户误操作现象。因为在不同状态下,不可使用的按键都被设置为禁用状态。 图 6-55 自定义控件 现在,我们创建一个新的VI,命名为:簇控件的引用.vi。 图 5-56 状态切换簇 现在我们就可以通过簇控件的引用和属性来控制按键开关的实际状态。参见下图。 图 6-57 通过枚举常量“初始化状态”就可以实现状态切换(目前均为可用) 下面我们就根据状态机的状态分别确定这些按键开关是否可用。 图 6-58 初始化后等待测量状态 2、点击开始测量,进入测量状态 图 6-59 测量进行状态 3、点击停止测量,再次进入等待测量状态 图 6-60 测量结束,可选择多种处理方式 如果此时选择创建报告,应用程序会禁用所有的按键操作,直到报告生成后(时间很短)返回待测量状态。 图 6-61 在不同状态下,使用子VI进行处理 图 6-62 簇控件的引用-子VI的前面板图和程序框图 关于状态机部分我们后面会介绍到。 6.6 VI 脚本(VI Scripting) VI脚本是LabVIEW中非常重要、且又十分强大的一个功能,VI脚本借助于LabVIEW中的VI
Server技术,可以让用户创建、修改以及了解VI中的一些信息。 6-63 没有启用VI脚本时的数值控件属性 6-63 启用VI脚本时的数值控件属性(部分属性被截断) 6.6.1 启动VI脚本 并不是安装了LabVIEW2010就可以使用VI脚本的功能,通常它还需要进行少许设置后才能够启动。设置方法很简单,就是在开发环境中选择工具拦中: 图 6-64 勾选红框内的VI脚本项即可使用VI脚本功能 点击上图中的[确定]按键,就完成了VI脚本的设置。当然,如果你不希望使用VI脚本的功能在这里也可以取消这些设置。 图 6-65 VI脚本函数 6.6.2使用VI脚本新建VI 我们过去所知道的新建VI是在开发环境的启动界面选择:新建VI,或者在文件菜单中选择:新建VI,实现创建一个新的VI。 图 6-66 使用VI脚本创建一个新的VI(程序框图) 这里我们做了如下工作(包括对新建VI做了一些设置):
图 6-67 通过VI脚本用编程的方法所创建的新VI 因为打开这个VI后,该VI不是连续的运行,所以我们根本看不到属性设置情况执行。如果我们点击“连续运行”按钮,该VI连续运行后我们就会看到属性节点的管控结果,参见下图。 图 6-68 连续运行后,我们们看到属性节点起作用了 现在我们再用VI脚本编程的方法让这个VI能够连续运行起来。 6.6.3使用VI脚本新建VI对象 我们需要新设计一个VI,将其命名为:VI脚本-新建-While循环.vi。具体操作我们就不表述了,程序框图参见下图。 图 6-69 VI脚本-新建-While循环.vi的程序框图 这里:
图 6-70 通过VI脚本新建的一个连续运行的VI VI脚本-新建-While循环.vi的前面板和程序框图参见下图。 图 6-71 由VI脚本创建的连续循环的程序 6.6.4 VI脚本的用途 请注意在上面的程序中,我们使用了新建VI对象的函数,仅仅新建了两个对象(按键和While循环),并通过各自对象的引用将按键和While循环的停止端连线在一起。
6.6.5 VI脚本的第三方应用 其实上我们可以看到许多第三方应用的实例。似乎应用比较成功的、范围比较广泛的是OpenG社团[14],这是有目共睹的事实。
|
|