由于LabVIEW图形化编程特点,某些情况下要在同一VI的不同位置或在不同VI中访问同一控件,这时控件对象之间的连线就无法实现了。此时,需要用到局部变量或全局变量,通过局部变量或全局变量可以在程序框图中的多个地方读/写同一个控件。LabVIEW的变量可以分为三类:局部变量、全局变量和共享变量。本节只对局部变量和全局变量进行讲解。
局部变量
局部变量主要用于在程序内部传递数据,它既可以作为控制量向其他对象传递数据,也可以作为显示量接收其他对象传递过来的数据。
下面介绍利用局部变量制作一个计时器的实例。本例的计时器可以暂停,暂停后还可继续计时。用“已用时间”对象获取计时时间,单位为秒,然后通过获取的时间计算其时、分、秒的数据。暂停后的计时值、“已用时间”对象的重置控制、显示控件初始化可通过局部变量实现。
步骤一:新建一个VI。在前面板上添加四个“数值显示”控件,分别命名为“时”、“分”、“秒”、“毫秒”,将数据显示类型更改为“I32”(具体方法为用鼠标右键单击控件,在“表示法”中选择“I32”)。打开“时”、“分”和“秒”的属性对话框,在“显示格式”选项卡中,设置相关参数。“毫秒”只是将“使用最小域宽”设置为“3”,其余设置均相同。
步骤二:在前面板中添加两个数值显示控件,分别命名为“计时数”和“暂停前计数值”;在“控件”下“经典”选项中的“经典布尔”子面板中选择“带标签方形按键”控件,将其放置到前面板上,命名为“开始/暂停”,并打开其属性对话框的“外观选项卡”,设置“开时文本”为“开始”,“关时文本”为“暂停”。添加一个“停止”按钮和一个布尔型的“方形指示灯”控件命名为“重置”。
步骤三:切换到程序框图,添加一个条件结构,并将“开始/暂停”对象的输出端连接分支选择器。在整个条件结构外添加一个While循环结构,设置时间间隔为10ms,并将停止按钮连接循环条件端子。
步骤四:在条件结构的“真”分支中添加一个平铺式顺序结构,并将顺序结构、前后各添加一帧。从“函数”下“编程”选项中的“定时”子面板中选择“已用时间”对象,将其添加到顺序结构的中间帧内,“重置”对象放置在第一帧中,并与“已用时间”对象的重置端口连接;创建一个“重置”对象的局部变量,放置在第三帧中,并在输入端连接一个布尔“假”常量。这样做的目的是实现暂停计时并在重新计时后,将“已用时间”对象在暂停时的计时数清零,因为只要程序不停,“已用时间”对象就会一直计数。
步骤五:用鼠标右键单击“计时数”对象,在快捷菜单中选择“创建”下的“局部变量”选项,创建一个计时数对象的局部变量并添加到“假”分支中,将其转换为读取状态。同时,创建该局部变量的显示控件,命名为“暂停前计数值”,这一步的作用是保存暂停时的计时数并与“重置”对象一起完成暂停后累加计时的功能。同样创建“重置”对象的局部变量,放置到“假”分支中,并向其输入端连接布尔型的“真”常量。
步骤六:在While循环的外侧创建一个平铺式顺序结构,在其前方添加一帧,把“时”、“分”、“秒”、“毫秒”等对象以及“计时数”和“暂停前计数值”局部变量放置到第一帧中,并初始化为“0”。
步骤七:创建时”、“分”、“秒”、“毫秒”和“暂停前计数值”等对象的局部变量,添加“加”、“乘”、“商与余数”对象,并将它们放置到“真”分支中顺序结构的中间帧,按图中所示进行连接,即可完成计时器功能的主要程序设计。
步骤八:运行程序。
全局变量
局部变量通常用于程序内部的数据传递,对于程序间的数据传递就无能为力了,而全局变量则可以解决这个问题。LabVIEW中的全局变量是以独立的VI文件形式存在的,这个VI文件只有前面板,没有程序框图,不能进行编程。通过全局变量可以在不同的VI之间进行数据交换,一个全局变量的VI文件中可以包含多个不同数据类型的全局变量。
下面通过一个用全局变量在不同VI之间传递数据的实例,来说明全局变量的使用方法。首先创建两个VI和一个全局变量,其中一个VI产生正弦波形,通过全局变量传递后,在另一个VI中显示。创建程序的步骤如下:
步骤一:创建一个全局变量。打开全局变量编辑框后,在其中放置一个“波形图”显示控件,命名为“波形全局变量”,如图所示。保存该VI,命名为“波形全局变量.vi”。
步骤二:创建信号产生VI。创建一个VI,保存VI名为“信号产生”。在前面板上放置一个“波形图”控件,命名为“信号产生波形显示”。切换到程序框图,选择“编程”→“波形”→“模拟波形”→“波形生成”选项,在“波形生成”子面板中选择“仿真信号”并放置到程序框图上,使用默认设置,用于产生一个正弦信号,输出端与“信号产生波形显示”连接。在“函数”面板上单击“选择VI”,在打开的对话框中选择第一步中创建的“波形全局变量”,将其与“仿真信号”的输出端相连。在“仿真信号”的频率输入端口创建一个“输入控件”。创建一个While循环将所有程序框图上的对象框到其中,设置时间间隔为100ms,程序框图如图所示。
步骤三:创建信号显示VI。创建一个VI,命名为“信号显示”。在前面板中放置一个“波形图”控件,命名为“变量传递后波形显示”。切换到程序框图,从“编程”下的“波形”子面板中选择“创建波形”并添加到框图上,拉伸后,使用鼠标右键单击各个端口,在弹出的快捷菜单中的“选择项”分别选择“Y”、“t0”、“dt”。在“函数”面板上单击“选择VI”,在打开的对话框中选择第一步中创建的“波形全局变量”,单击鼠标右键选择“转换为读取”,与“创建波形”对象的“Y”相连。在“t0”端口创建一个时间常量,在“dt”端口创建一个常量“0.001”。创建一个While循环将所有程序框图上的对象框到其中,设置时间间隔为100ms,程序框图如图所示。
步骤四:运行“信号产生”和“信号显示”两个VI,结果如图所示,改变不同的信号频率,比较显示结果是完全一致的。