第8章LabVIEW程序设计技巧第8章LabVIEW程序设计技巧8.1局部变量和全局变量8.2属性节点8.3VI属性设置习题8第8章LabVIEW程序设计技巧本章将介绍LabVIEW编程中的一些技巧,包括局部变量、全局变量、属性节点和VI属性设置。第8章LabVIEW程序设计技巧8.1局部变量和全局变量局部变量和全局变量是LabVIEW为改善图形化编程灵活性局限而专门设计的两个特殊节点,主要解决数据和对象在同一VI程序中的复用和在不同的VI程序中的共享问题。8.1.1局部变量局部变量只是在同一个程序内部使用,每个局部变量都对应前面板上的一个控件,一个控件可以创建多个局部变量。局部变量位于Functions→Structures子模板中,如图8-1所示。第8章LabVIEW程序设计技巧图8-1局部变量节点第8章LabVIEW程序设计技巧1.局部变量的创建局部变量的创建有两种方法。第一种方法是选中LocalVariable节点,将其添加到程序框图中,这时由于局部变量还没有和相应的输入或显示控件相关联,故图标上显示一个问号。用操作工具单击图标,会出现一个下拉选单,选单列出了前面板上所有控制或指示的名称,选择所需要的名称,就完成了前面板对象的一个局部变量的创建,如图8-2(a)所示。也可以在图标的右键弹出选单中选择SelectItem,会出现一个与图8-1(a)同样的下拉选单,功能完全相同,如图8-2(b)所示。第二种方式是在前面板或程序框图中右击需要创建局部变量的控件,选择Creat→LocalVariable选项创建该控件的局部变量,如图8-3所示。第8章LabVIEW程序设计技巧图8-2第一种创建局部变量的方法(a)(b)第8章LabVIEW程序设计技巧图8-3第二种创建局部变量的方法第8章LabVIEW程序设计技巧在默认情况下,新创建的局部变量都是只能写入的端子,在局部变量上弹出快捷菜单,选择ChangeToRead即可把局部变量变为读端子。与控件的框图端子相似,局部变量为读端子时的边框要比为写端子时的边框粗一些。再次弹出快捷菜单,选择ChangeToWrite,将把局部变量变回写端子。2.局部变量的特点(1)局部变量只能在同一个VI中使用,其生存期与它所在的VI模块密切相关,VI停止运行,在此VI内定义的局部变量自动消失。(2)局部变量必须依附在一个面板对象上。一个面板对象可以建立多个局部变量,但一个局部变量只能有一个端点与其对应。第8章LabVIEW程序设计技巧(3)局部变量就是其相应前面板对象的一个数据拷贝,要占一定的内存。在程序中要控制局部变量的数量,特别是对于那些包含大量数据的数组,若在程序中使用多个这种数组的局部变量,将会占用大量的内存,从而降低程序运行的效率。(4) LabVIEW是一种并行处理语言,只要节点的输入有效,节点就会执行。当程序中有多个局部变量时,要特别注意这一点。因为这种并行执行可能造成意想不到的错误,例如,在程序的某一处,用户从一个控制的局部变量中读出数据,在另一处,根据需要又为这个控制的另一个局部变量赋值。如果这两个过程是并行发生的,就有可能使读出的数据不是前面板对象原来的数据,而是赋值后的数据。这种错误不是明显的逻辑错误,很难发现,因此在编程中要特别注意,尽量避免这种情况发生。第8章LabVIEW程序设计技巧3.局部变量的使用下面是一个利用局部变量在顺序结构不同帧之间传递数据的例子。顺序结构局部变量是用于堆叠顺序结构不同帧之间传递数据的变量。2.3.1小节已经提到,在结构边框上弹出快捷菜单选择AddSequenceLocal为当前帧添加局部变量。添加的局部变量最初是一个小的浅黄色方框,并且可以拖拽到边框上任意未被占用的位置。若将数据连接到局部变量上,该帧端子中出现一个桔黄色的向外指的箭头,表示该帧是向外输出数据的数据源,称为数据源帧。在以后的各帧中,局部变量端子包含一个向内指的箭头,表示数据源帧向本帧传送数据。注意,在数据第8章LabVIEW程序设计技巧源帧前面的帧中不能使用局部变量。要删除局部变量端子,从端子上弹出快捷菜单选择Remove即可。图8-4显示了一个4帧的堆叠的顺序结构。 帧1中的局部变量传递随机函数加5的值给帧2,该值可以在帧2中使用,将该值与2相乘后使用局部变量将数据传递给帧3,通过波形显示出来。在帧0中不能使用局部变量的数据。第8章LabVIEW程序设计技巧图8-4顺序结构中局部变量传递数据第8章LabVIEW程序设计技巧8.1.2全局变量LabVIEW中的全局变量是以独立的VI文件形式存在的,这个VI文件只有前面板,没有程序框图,不能进行编程。通过全局变量可以在不同的VI之间进行数据传递,一个全局变量的VI文件可以包含多个不同数据类型的全局变量。与全局变量一样,全局变量位于Functions→Structures子模板中,如图8-5所示。1.全局变量的创建全局变量的创建较为复杂。首先从Structures子模板中选中GlobalVariable节点,并将其添加到程序框图中;然后双击全局变量图标,打开其前面板,在Controls模板中选择需要的前面板对象放入全局变量的前面板,添加对象的类型和数量第8章LabVIEW程序设计技巧没有限制;最后在菜单栏中选择File→Save,保存这个全局变量为一个独立的VI,如图8-6所示。这样就完成了一个全局变量的创建。创建并保存全局变量VI后,将鼠标切换至数据操作工具状态,单击程序框图中创建好的全局变量图标或右键单击该图标,从快捷菜单中选择SelectItem,弹出子选单列出了全局变量包含的所有对象名称,根据需要选择相应的对象,如图8-7所示。第8章LabVIEW程序设计技巧图8-5全局变量节点第8章LabVIEW程序设计技巧图8-6创建全局变量第8章LabVIEW程序设计技巧图8-7选择全局变量第8章LabVIEW程序设计技巧2.全局变量的使用全局变量的使用方法如下:(1)在VI的框图程序中,选择Functions→SelectaVI,在弹出的ChoosetheVItoOpen对话框中选择所需的全局变量文件(*.gbl),在框图程序放置一个默认的全局变量,该全局变量与第一个放入全局变量文件中的前面板的对象相关。(2)右键单击全局变量节点,在SelectItem项的弹出选单中选择所需对象。(3)若在一个VI中需要使用多个全局变量,可以使用拷贝和粘贴全局变量的方法。第8章LabVIEW程序设计技巧【例8.1】利用全局变量在VI之间传递数据。本例创建了一个全局变量和两个VI。全局变量中包含两个对象,即数组和数值指示器。第一个VI利用快速VI产生一个带噪声的三角波,送至全局变量的数组中,并测量该波形的最大值,然后送至全局变量的数值指示器中。第二个VI从全局变量中将波形数据和该波形的最大值读出,并在前面板中显示。全局变量和两个VI的程序框图如图8-8所示。第8章LabVIEW程序设计技巧(a)全局变量前面板(b)第一个VI框图程序第8章LabVIEW程序设计技巧(c)第二个VI的前面板和框图程序图8-8利用全局变量在VI之间传递数据第8章LabVIEW程序设计技巧8.2属性节点LabVIEW提供了各式各样的前面板对象,应用这些前面板对象,可以设计出仪表化的人机交互界面。但是,仅仅提供丰富的前面板对象是不够的,在实际运用中,还经常需要实时地改变前面板对象的颜色、大小和是否可见等属性,达到最佳的人机交互功能。LabVIEW引入属性节点(PropertyNode)概念,通过改变前面板对象属性节点中的属性值,可以在程序运行中动态地改变前面板对象的属性。8.2.1属性节点的创建属性节点的创建方法是在前面板对象或其端口的右键弹出选单中选择Create→PropertyNode项,即在控件端子旁边创建一个新的属性节点,如图8-9所示。第8章LabVIEW程序设计技巧图8-9属性节点的创建第8章LabVIEW程序设计技巧创建的属性节点带有标签,为最初标签,可以对原标签进行修改。用操作工具直接单击属性节点的图标,或在图标的右键弹出选单中选择Properties,会出现一个下拉选单,选单列出了前面板对象的所有属性,可根据需要选择相应的属性。属性节点最初创建时仅显示一个默认属性。若需要同时改变前面板对象的多个属性,一种方法是创建多个属性节点,另一种方法是在一个属性节点的图标上添加多个端口。添加多个端口的方法是使用位置工具拖动属性节点图标的下边缘或上边缘,也可在属性节点图标右键弹出的选单中选择AddElement,如图8-10所示。添加了新的属性节点后,使用操作工具单击新添项或在新添项单击鼠标右键选择Properties项, 弹出该对象所有属性的列表,从中选择新的属性节点。第8章LabVIEW程序设计技巧图8-10属性节点的添加第8章LabVIEW程序设计技巧属性节点有Read和Write两种属性,在属性节点图标某一端口的弹出选单中选择ChangetoRead或ChangetoWrite可以改变该端口的读、写属性,选择ChangeAlltoRead或ChangeAlltoWrite可以改变属性节点图标中所有端口的读、写属性,如图8-11所示。注意:在读、写属性节点的图标上,小箭头的位置和方向是有区别的。当属性节点设置为读属性时,小箭头在节点右侧,方向向外;当属性节点设置为写属性时,小箭头在节点左侧,方向向内。第8章LabVIEW程序设计技巧图8-11两种属性节点(a)写属性(b)读属性第8章LabVIEW程序设计技巧8.2.2基本属性从某种意义上说,属性节点与局部变量是否有效使用,是衡量使用LabVIEW编程好坏的标准,因此在编程应用中会经常使用属性节点。不同类型前面板对象的属性种类繁多,各不相同,比如WaveGragh显示控件,其节点属性最复杂,可控属性多达33个。有效地使用属性节点可以添加很多实用的功能,使用户设计的图形化人机交互界面更加友好、美观,操作更加方便。下面以字符串控件为例,介绍一些前面板对象共有且常用属性的用法。1.VisibleVisible属性用来控制前面板对象在前面板窗口中是否可视,其数据类型为布尔型。当Visible值为True时,前面板对象在前面板上处于可视状态;当Visible值为False时,前面板对象在前面板上处于隐藏状态,如图8-12所示。第8章LabVIEW程序设计技巧图8-12Visible属性的使用第8章LabVIEW程序设计技巧2.Disabled当VI处于运行状态时,通过Disabled属性的设置,可以控制是否允许用户访问一个前面板对象,其数据类型为整型。前面板对象处于可视状态(Visible)时,当输入值为0或1时,用户可以访问该前面板对象;当输入值为2时,前面板对象处于Disable状态,此时用户不可以访问该前面板对象。该属性的设置如图8-13所示。3.KeyFocusKeyFocus属性用于控制前面板对象是否处于键盘焦点状态,其数据类型为布尔型。当输入为True时,前面板对象处于键盘焦点状态;当输入为False时,前面板对象处于失去键盘焦点状态,如图8-14所示。第8章LabVIEW程序设计技巧图8-13Disabled属性的使用第8章LabVIEW程序设计技巧图8-14KeyFocus属性的使用第8章LabVIEW程序设计技巧5.PositionPosition 属性用于设置和读取前面板对象左上角在前面板窗口中的位置(这个位置以像素点为单位,是相对于窗口左上角坐标原点而言的),其数据类型为簇,包含两个不带符号的长整型数。第一个整数(Left)定位前面板对象图标左边缘的位置,第二个整数(Top)定位前面板对象图标上边缘的位置,如图8-17所示。6.BoundsBounds属性为只读属性,用于获得前面板对象图标的大小,包括高度和宽度。其数据类型为簇,包含两个整型元素,一个为前面板对象的宽度,另一个为高度。Bounds属性的使用如图8-18所示。第8章LabVIEW程序设计技巧图8-17Position属性