- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
LABVIEW的深入探索之已链接控件引用与未链接控件引用
是否可以这样说:在控件所属的vi中,使用属性、方法节点不需要创建引用;而在子vi中如果需要向该控件传值,则必须使用该控件的引用
控件的引用与引用控件的确理解起来很困难,用语言描述经常会出现误解。今天我们首先明确控件的引用和引用控件这两个不同的概念。
一、已链接控件的引用、属性节点、方法节点与未链接的控件的引用、属性节点和方法节点
1、已链接控件的引用、属性和方法。
对于前面板中创建的控件,通过控件的快捷菜单创建的控件的引用、属性和方法,我们称他们为已链接控件的引用、属性和方法。对于已连接控件的引用、属性和方法,我们知道它们已经指向一个特定的控件,这样的引用、属性和方法是不能随意更改它们的指向的。
图中,高老师和CSXCS_366数字控件分别各自创建了引用和属性节点。高老师的引用是指向高老师数字控件的。高老师的可见属性也是指向高老师数字控件的。我们称高老师引用和高老师属性已链接到高老师控件。
由于各自指向(链接)到不同的控件,所以对高老师的引用、属性和方法的操作是针对高老师控件的,绝对不会影响到CSXCS_366控件。
是否可以这样说:在控件所属的vi中,使用属性、方法节点不需要创建引用;
从上图看高老师的说法是正确的
2、未链接控件的引用、属性和方法
我过去的文章中称未链接控件的引用、属性和方法为通用引用、属性和方法,这里采用未链接控件的引用、属性和方法,更容易区分已链接控件的引用、属性和方法。
由于LV中文版出现的很晚,即使现在中文帮助文件中,很多翻译方法很难反映原来的意思,这也造成我们沟通理解的困难。所以我们能理解清楚,我特意强调了这两个概念的不同。
在上图中,高老师数字控件和CSXCS_366数字控件,所代表的数值类型是完全一致的,具有很多共同的属性、方法。
-------------------------------------------------------------------------------------------------
二、为什么要用未链接控件的属性节点和方法节点?
假设我们要解决下面的问题,将高老师输入控件和CSXCS_366控件修改为显示控件,这两个控件用来显示随机数,当随机数大于0.7时,控件闪烁。首先我们在一个主VI中解决这个问题。
上图中我们使用两个属性节点,分别是已链接到控件的闪烁属性,假设我们有很多的这样的随机数显示,那么按照上图中的编程方法,将会有大量的重复工作。
首先我们考虑如何能消除多个同样性能的闪烁属性节点,自然我们会考虑,避免大量重复工作最好的办法是FOR循环。我们设想在FOR循环中只放置一个闪烁的属性节点,很显然循环中是不能放置已链接的控件属性节点,因为那样只会多次修改同一个控件。所以循环中要放置一个为链接控件的闪烁属性节点,然后利用高老师和CSXCS_366显示控件的引用来调用这个未链接的属性节点。
假设我们有100个显示随机数的控件,那么之需要创建100个控件的引用,把这些引用创建成数组,FOR循环中不需要任何改动。从上图中我们可以知道,对于已链接控件的属性节点,在运行过程中是无法再次链接到其它同类型的控件中。而未连接(通用)属性节点可以在运行中通过不同的控件引用,动态链接到其它同类型的控件中,这是我们使用未链接控件属性节点关键所在。 [p]
是否可以这样说:在控件所属的vi中,使用属性、方法节点不需要创建引用;
从上图看高老师的说法有局限性,在控件所属VI中,也可能需要创建引用来使用属性、方法节点。
三、为什么要用为链接控件的引用(通用引用)
任何编程软件都强调模块化的重要性,为了简化上图中的程序框图,我们希望把上图中的FOR循环容封装在一个子VI中。
主VI的程序框图简化为:
下面我们增加一个“李老师”显示控件,子VI不需要任何改动。程序框图和运行效果图如下所示:
从上面两个程序框图中,我们可以领会到这个子VI功能是非常强大的,子VI是如何实现的那?下图是子VI的前面板和程序框图。
子VI的输入端子为未链接的数字控件引用数组,输出为双精度数组。我们通过未链接控件的引用成功地操作了调用VI中的三个数字控件:高老师、李老师、CSXCS_366.
而在子vi中如果需要向该控件传值,则必须使用该控件的引用
高老师实际的意思应该是这样的,如果在“在子VI中操作主VI中的控件,则必须使用该控件的引用”,高老师的这个说法是完全正确的。
LV有关引用有几个重要的特点:
1、数据流意味着是传值方式而不是传引用(地址)方式,在C语言中,值传递和引用传递都是支持的。
2、链接到特定控件的引用代表一个地址,因此同一控件的多个引用,它们的值(地址)肯定是相同的。
3、未链接到特定控件的引用(通用引用),它的值为0,相当于C语言中空指针。
4、运行时,未链接到特定控件的引用可以指向同类型(严格类型)的特定控件。
引用无处不在,应用程序引用、VI引用、窗格引用、控件引用,如果我们获得了一个控件的引用,我们就可以控制这个控件的一切。如果在控件所属VI中控制这个控件,我们自然不需要未链接控件的引用,但是如果需要在子VI中控制,则必须在主VI中先获取这个控件的引用,并把这个引用(地址值)按照值传递的方式传递到子VI中,这样子VI直接获得的是主VI中控件的引用(地址值)。
上一篇:labview的深入探索-----状态机的基本概念
下一篇:labview的深入探索-----状态机的基本类型顺序结构