分享

Labview引用

 昵称822536 2020-06-02

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-22 VI服务器引用

   将VI服务器引用拖拽到前面板上,它变成一个指向对象的引用(实例化),它的默认状态是:本VI。参见下图。
 

图 6-23 连接到其它对象(创建其它对象的引用)

   这里请注意:因为本VI是已经存在的,所以我们可以通过创建获得它的引用。当然通过快捷菜单还可以选择设定为其它对象的引用,参见上图。比如也可以选择:本应用程序的引用或窗格中其它控件的引用,参见下图中的具体引用实例。需要注意的是:这些对象必须真正的存在(关于非实例化的引用句柄后面我们会谈到)。

图 6-24 不同对象的引用实例(都是已存在的对象)

  当控件作为对象时,它的引用更容易创建,鼠标右键点击程序框图或前面板上的控件,在弹出的快捷菜单中选择:
》创建
》引用
   即可创建一个控件的引用(参见上图中的“数字”引用)。


   现在,有了对象的引用就可以通过引用来操控不同的对象了。参看下面的例子。

63查看本应用程序的多个属性

   利用本应用称序引用查看本应用程序的多个属性,程序参见下图。
 

图 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操作系统,并已经安装了苹果版的LabVIEW 2009SP1;而另一台计算机则运行Windows操作系统,并安装了LabVIEW 2010SP1。这两台电脑通过WiFi无线网络进行网络连接。Apple电脑做服务方,Windows电脑做客户方。

   现在,首先查看两台电脑的网络参数,Apple电脑的网络参数设置参见下图所示:

图 6-33 Apple电脑的网络设置(地址=10.0.1.3)

   我们需要记住这个地址:10.0.1.3

   下面再查看Windows电脑的网络配置情况。参见下图。

图 6-34 Windows电脑的网络设置(地址=10.0.1.25)

   我们也需要记住这个地址:10.0.1.25

   下面再查看各计算机VI服务器的设置情况。


6.3.3获得相关计算机VI服务器的设置

   下面我们再分别看看两台电脑上的LabVIEW VI服务器的设置情况。
   对于Apple电脑,在LabVIEW 2009SP1开发环境下,从工具栏选择:
》Tool
》Options
》VI Server 参见下图。

图 6-35 Apple 电脑的VI Server的设置情况

   这里注意:TCP/IP 的 Port=3363

   其它无须进行设置(就不截图了)。点击“OK“完成设置。

下面在看看Windows电脑的设置情况。

   同样,在LabVIEW 2010SP1开发环境下,从工具栏选择:
》工具
》选项
》VI服务器,参见下图。

图 6-36 VI服务器的设置情况

   端口设置与Apple电脑一样,都是3363。然后滑动垂直滚动条继续往下查看,参见下图。

图 6-37 VI服务器的设置情况(续)服务方地址需要设定

   需要将Apple电脑的地址设定在这里。其它无须设定,点击[确定]按键即可完成VI服务器的设定工作。

   剩下来的工作就是在Apple电脑上设计一个程序。


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。具体操作是:
   在程序框图中,鼠标右键空白处,在弹出的快捷菜单中选择:
》函数
》编程
》应用程序控制
》打开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.2 VI的动态调用

   通常在我们编程过程中,放置在程序框图中的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。这种情况多用于各程序之间的连接调用。

下面看一个例子。
   比如我们有一个Top VI.vi,运行时前面板参见下图。

图 6-48 Top VI.vi运行前面板图(有一个倒数计数器)

   下面来看看它的程序框图,参见下图。

图 6-49 Top VI.vi的程序框图

   分析该程序框图:

  • For循环主要为演示所用,与动态调用无关

  • 创建被动态调用VI(应用程序.vi)的路径

  • 根据路径打开被调用VI的引用

  • 设置调用节点FP.Open(前面板有效、标准状态)

  • 设置调用节点Run VI(无须等待被调用VI执行结束、自动销毁打开的引用)

  • 通过调用节点关闭本VI

  • 错误处理


   当然,我们还需要有一个应用程序.vi,很简单仅仅用了一个While循环,参见下图。

图 6-50 应用程序.vi的前面板与程序框图

   运行Top VI程序10秒后,它动态调用应用程序.vi,并将Top VI的前面板关闭。应用程序VI将一直运行,直到按下[演示停止]。当然,也可以通过动态调用其它的VI,使程序持续执行。
   程序运行的前后可以使用查看内存中的VI程序查看内存,实际情况这里就不给出了。

————主,方式的动态调用

   这种方式的运行机制与通过引用节点调用的方式类似,动态调用某VI直到它结束后返回主VI。比如我们有一个应用程序菜单,我们就可以使用这种方式来控制选择不同的应用程序运行。

   下面看看Top VI-2.vi的程序框图,参见下图。

图 6-51 Top VI-2.vi的程序框图

  • For循环主要为演示所用,与动态调用无关

  • 创建被动态调用VI(应用程序.vi)的路径

  • 根据路径打开被调用VI的引用

  • 设置调用节点FP.Open(前面板有效、标准状态)

  • 将主VI的前面板隐藏

  • 设置调用节点Run VI(等待被调用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的前面板图和程序框图

   关于状态机部分我们后面会介绍到。

6.6 VI 脚本(VI Scripting

   VI脚本是LabVIEW中非常重要、且又十分强大的一个功能,VI脚本借助于LabVIEW中的VI Server技术,可以让用户创建、修改以及了解VI中的一些信息。
   VI中的所有东西都可以被认为是一种VI对象,包括前面板和程序框图上的任何对象、连线板、图标以及几乎所有保存在VI中信息。所有对VI对象的修改都可以在编辑时期利用属性节点和调用节点来完成,并且这些都可以在编辑时期得到应用或修改。

   通过前面几章的内容中,我们已经初步认识、使用了一些属性节点和调用节点。而现在我们所要介绍的VI脚本则提供了更丰富的内容。实质上,是拓宽了属性节点和调用节点的应用范围。

   在LabVIEW8.6之前,VI脚本是不提供给用户使用的,它只作为NI内部员工的开发使用工具。此后NI对用户的使用权进行了有限度开放,即获得NI许可的用户才可以使用VI脚本。在LabVIEW2010中,NI已经对所有用户开放了VI脚本的使用。如果你已经是LabVIEW2010版以后的用户,现在就可以使用VI脚本的功能了。

   为了更好的了解VI脚本,我们将同一控件在没有启用VI脚本时的属性节点和启用VI脚本后的属性节点展示给大家。参见下图。

6-63 没有启用VI脚本时的数值控件属性

6-63 启用VI脚本时的数值控件属性(部分属性被截断)


6.6.1 启动VI脚本

   并不是安装了LabVIEW2010就可以使用VI脚本的功能,通常它还需要进行少许设置后才能够启动。设置方法很简单,就是在开发环境中选择工具拦中:
》工具
》选项
》VI服务器
   参见下图。

图 6-64 勾选红框内的VI脚本项即可使用VI脚本功能

   点击上图中的[确定]按键,就完成了VI脚本的设置。当然,如果你不希望使用VI脚本的功能在这里也可以取消这些设置。

   设置完成后,我们在程序框图中,鼠标右键单击空白处,选择:
》函数
》编程
》应用程序控制
》VI脚本
   就可以看到它的5个函数,参见下图。

图 6-65 VI脚本函数


6.6.2使用VI脚本新建VI

   我们过去所知道的新建VI是在开发环境的启动界面选择:新建VI,或者在文件菜单中选择:新建VI,实现创建一个新的VI。
   现在利用VI脚本的功能,我们可以通过编程的方法来新建一个VI。该程序被命名为:VI脚本-新建VI.vi,参见下图。

图 6-66 使用VI脚本创建一个新的VI(程序框图)

   这里我们做了如下工作(包括对新建VI做了一些设置):

  • 使用新建VI创建了一个新VI的引用(因为我们是通过VI服务器来管控新VI的)

  • 通过引用属性节点使前面板打开、给定前面板的标题、禁用前面板菜单栏、禁用前面板工具栏、禁止调节前面板大小。

  • 通过引用调用节点使打开后的前面板居中显示

  • 运行该VI

  • 关闭引用


   现在我们运行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的程序框图

   这里:

  • 新建一个VI包括它的引用,前面部分与“VI脚本-新建.vi”相同

  • 新建一个停止按键对象包括它的引用

  • 新建一个While循环对象包括它的引用

  • 通过属性节点设置While循环“T”停止

  • 通过按键的属性节点创建接线端的引用控制按键开关的位置

  • 通过While循环的属性节点创建接线的尾端的引用,控制按键与While循环停止端的连线

  • 关闭所有打开的引用


   我们只是在原来的“VI脚本-新建.vi”基础上做了些添加,添加了一个While循环和一个停止按键,看起来还是相当复杂的。主要注意关闭所有打开的引用。

   运行“VI脚本-新建-While循环.vi”,我们在屏幕上看到一个新的连续运行的前面板图,点击停止按键,该程序会停下来。下图是它的运行情况。

图 6-70 通过VI脚本新建的一个连续运行的VI

   VI脚本-新建-While循环.vi的前面板和程序框图参见下图。

图 6-71 由VI脚本创建的连续循环的程序


6.6.4 VI脚本的用途

   请注意在上面的程序中,我们使用了新建VI对象的函数,仅仅新建了两个对象(按键和While循环),并通过各自对象的引用将按键和While循环的停止端连线在一起。
   这样简单的程序用VI脚本实现起来确如此的复杂,甚至是十分难以读懂。如果使用LabVIEW设计这样一个VI,分分种种就可以实现,简直是手到擒来,根本无需费这样的劲,为何非要采用VI脚本来设计实现呢?它究竟对我们有什么用?

   实际上,VI脚本并不是提供给初学者使用的,从它的复杂度就可以看出这点。VI脚本的使用者应该是较高级的开发者,比如象OpenG、MGI社团等等。对我们来说这是一门高级开发技术,需要在实践中慢慢去掌握和渐渐的应用。

   如果我们需要设计多个相似的VI,采用VI脚本技术相对就比较合理。特别是容易风格统一和批量改动,这对团队开发无疑好处是巨大的。回顾过去我们在开发过程中所采用VI的模板来拷贝生成多个类似的VI,其实道理是一样的。不同之处,要想批量修改实现起来可就困难的多了。

   即便我们永远都不会使用VI脚本来设计程序,但是VI脚本中所提供那些丰富的、开放的属性和方法也不会去使用吗?

VI脚本的作用域:

  • 创建若干类似的VI

  • 对齐和布局控件

  • 显示和隐藏控件的标签

  • 连接程序框图对象


6.6.5 VI脚本的第三方应用

   其实上我们可以看到许多第三方应用的实例。似乎应用比较成功的、范围比较广泛的是OpenG社团[14],这是有目共睹的事实。

   OpenG社团除了提供了VIPM软件之外,还设计开发了适用于LabVIEW编程处理的“右键单击框架”(Right-Click Framework for LabVIEW)。它的特点是:

  • 扩展和自动执行重复性的LabVIEW开发环境中的任务

  • 下载并安装由其他人创建的LabVIEW功能

  • 根据自己的需要创建新的LabVIEW功能

  • 享受积极和充满活力的LabVIEW Scripting社团的支持

  • 使用VI软件包管理器(VIPM),快速,轻松地安装框架(和许多插件)


   我们在LabVIEWpro网站[15]看到fine11网友提出的这样一个问题:

“請問除了在物件上點右鍵選擇reference外,還有其他辦法可以建造出reference嗎?因為有大量物件需要建立reference,想說有沒有辦法簡單右快速建立。
不然要點右鍵點到手酸...”

   解决的方法就是使用“右键单击框架”,详细内容可参考上面的参考文献[15]。遗憾的是我的电脑目前还无法使用“右键单击框架”这个功能,所以只能在日后补上这部分内容。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多