2010年10月29日,第一稿
2011年6月26日,第二稿
2011年6月26日,第二稿
3.3 控件与LabVIEW中变量间的关系
变量是所有高级编程语言对数据存储地址高度抽象的具体体现,变量在程序中最主要的作用是进行数据传递(数据交换)。
虚拟仪器中前面板的对象——控件,其自身虽然也包含对数据存储地址的高度抽象,但控件确并不具备变量自由数据交换的功能。控件最基本的数据传递方式依赖于图形化语言中的连线,也就是图形化语言的数据流运行机制,这点在例2-1中我们已经看得很清楚。事实上,通过属性节点也可以传递数据,但传递方式和性质也与变量还是不同的。
数据流运行机制是可视化的,我们通过连线可以清楚的看到这种运行机制的存在,由于变量放置位置的不确定性,从而导致可能产生数据竞争会破坏图形化语言的这种数据流运行机制。所以,尽管控件也包含数据和数据类型,但它的确不是图形化语言中的变量。
那么LabVIEW中是否存在着变量?它与控件间会有什么关系吗?
毫无疑问,图形化程序本身也需要数据自由的传递和交换。所以,LabVIEW中也必然会有变量存在,某种LabVIEW中不存在变量的说法是不正确的。其实在LabVIEW中,为了适用不同的需求,已经提供了几种不同形式的变量。这就是函数选板上的:局部变量、全局变量和共享变量。
可是我们在前面板的控件选版上,根本看不到这三种变量的存在。这是因为它们并不是前面板对象,它们是属于程序框图中的对象。
局部变量、全局变量和共享变量本应该在程序框图对象一节做说明,可是我们为什么要在这里讨论这些变量呢?这是因为这三种变量它都离不开前面板上的对象——控件。这也是我们在这里讨论变量的根本原因。也可以这样说,变量中的数据是控件中数据的拷贝,没有控件将根本无法创建变量。从这个意义上讲,控件可以看成是变量的内核。
这里仅讨论创建方法及如何实现数据的关联,不涉及使用中的其它问题。
LabVIEW中设立多种变量主要是避免更多的破坏图形化语言数据流的运行机制。因为变量的不恰当的使用会使得数据流的运行机制不确定性增加。
关于数据流运行机制我们后面会谈到。
虚拟仪器中前面板的对象——控件,其自身虽然也包含对数据存储地址的高度抽象,但控件确并不具备变量自由数据交换的功能。控件最基本的数据传递方式依赖于图形化语言中的连线,也就是图形化语言的数据流运行机制,这点在例2-1中我们已经看得很清楚。事实上,通过属性节点也可以传递数据,但传递方式和性质也与变量还是不同的。
数据流运行机制是可视化的,我们通过连线可以清楚的看到这种运行机制的存在,由于变量放置位置的不确定性,从而导致可能产生数据竞争会破坏图形化语言的这种数据流运行机制。所以,尽管控件也包含数据和数据类型,但它的确不是图形化语言中的变量。
那么LabVIEW中是否存在着变量?它与控件间会有什么关系吗?
毫无疑问,图形化程序本身也需要数据自由的传递和交换。所以,LabVIEW中也必然会有变量存在,某种LabVIEW中不存在变量的说法是不正确的。其实在LabVIEW中,为了适用不同的需求,已经提供了几种不同形式的变量。这就是函数选板上的:局部变量、全局变量和共享变量。
可是我们在前面板的控件选版上,根本看不到这三种变量的存在。这是因为它们并不是前面板对象,它们是属于程序框图中的对象。
局部变量、全局变量和共享变量本应该在程序框图对象一节做说明,可是我们为什么要在这里讨论这些变量呢?这是因为这三种变量它都离不开前面板上的对象——控件。这也是我们在这里讨论变量的根本原因。也可以这样说,变量中的数据是控件中数据的拷贝,没有控件将根本无法创建变量。从这个意义上讲,控件可以看成是变量的内核。
这里仅讨论创建方法及如何实现数据的关联,不涉及使用中的其它问题。
LabVIEW中设立多种变量主要是避免更多的破坏图形化语言数据流的运行机制。因为变量的不恰当的使用会使得数据流的运行机制不确定性增加。
关于数据流运行机制我们后面会谈到。
3.3.1 局部变量
局部变量的作用是对前面板上指定的控件进行数据读写操作。顾名思义,局部变量的作用域仅限于控件所在的VI。
创建局部变量有两种方法:
如果程序框图中如果没有任何接线端(控件),我们将无法创建一个局部变量,程序运行按钮也是断裂的。可见局部变量与控件间的某种必然关系。参见下图。
创建局部变量有两种方法:
- 通过函数选板创建局部变量
如果程序框图中如果没有任何接线端(控件),我们将无法创建一个局部变量,程序运行按钮也是断裂的。可见局部变量与控件间的某种必然关系。参见下图。
如果程序框图中已经有了接线端,用鼠标点击全局变量就可以选择指定的接线端,参见下图。或者鼠标右键在快捷菜单:选择项》指定接线端。
可以看出,局部变量的创建依赖于确定性接线端的存在;局部变量也具有指向性,但与控件的指向性不同,输入控件和显示控件是两个不同的对象,有着各自独立的数据和数据类型。而局部变量则是针对指定控件(接线端)中数据的读或写。比如上图中的旋钮数据的读或写,而这里的旋钮是一个显示控件(具有独立的数据存储地址)。同理,如果是量表的局部变量,则是量表中数据的读或写,而这里的量表是一个输入控件(具有独立的数据存储地址)。所以说,局部变量的指向性与控件的指向性没有任何必然的联系,局部变量的指向性是针对确定接线端中数据的读或写(数据地址是唯一的)。
2. 通过控件或接线端创建局部变量
在前面板或程序框图上,鼠标右键点击以创建的对象在快捷菜单中选择》创建》局部变量,参见下图。
2. 通过控件或接线端创建局部变量
在前面板或程序框图上,鼠标右键点击以创建的对象在快捷菜单中选择》创建》局部变量,参见下图。
通过局部变量的创建就可以深刻领会到它与控件的关系。
3.3.2 全局变量
局部变量仅限于控件所在VI中使用,如果要想在多个VI之间进行数据传递就需要使用全局变量。
全局变量可以包含前面板上的多个控件。
创建全局变量略复杂些,可以在程序框图上鼠标右键,在快捷菜单中选择:编程》结构》拖拽“全局变量”内置函数到前面板上。参见下图。
全局变量可以包含前面板上的多个控件。
创建全局变量略复杂些,可以在程序框图上鼠标右键,在快捷菜单中选择:编程》结构》拖拽“全局变量”内置函数到前面板上。参见下图。
这个全局变量还不能使用,运行小箭头也是断裂的,图标中的问号是因为它与任何数据源没有建立关连。鼠标双击这个全局变量,开发系统会弹出一个新的窗口,在窗口内放置不同的控件以后,这些控件中的数据为全局变量的数据(包括数据类型),参见下图。
全局变量只有前面板,没有程序框图。全局变量也是以.vi的形式保存。它是一种极特殊形式的VI。
全局变量在使用时具体操作是:在程序框图上,选择:函数》选择VI》在对话框中指定保存全局变量的路径和文件名,点击[确定]按键。在程序框图上,就可以看到这个全局变量。
更改全局变量所关联的控件,鼠标左键点击全局变量,在快捷菜单内选择所对应的控件即可,参见下图。
全局变量在使用时具体操作是:在程序框图上,选择:函数》选择VI》在对话框中指定保存全局变量的路径和文件名,点击[确定]按键。在程序框图上,就可以看到这个全局变量。
更改全局变量所关联的控件,鼠标左键点击全局变量,在快捷菜单内选择所对应的控件即可,参见下图。
另一种方法是:鼠标左键点击全局变量,在快捷菜单内选择》选择项》选择对应的控件即可,参见下图。
显然,全局变量也是与前面板对象——控件挂钩的。实质上就是将指定控件中的数据设定为全局变量数据。这些数据可以在多个VI中使用。
从上图中也可以看出:全局变量中可以包括多个控件,这在使用中会很方便。
从上图中也可以看出:全局变量中可以包括多个控件,这在使用中会很方便。
3.3.3 共享变量
局部变量解决了VI内部数据传递的问题,全局变量解决了VI之间的数据传递的问题。共享变量可以用来解决网络中多个计算机上VI间的数据传递问题。这对分布式网络应用程序是非常有益的。
共享变量的创建必须在项目中进行,后面会介绍到。










