第9章 全局变量和局部变量文档格式.docx

上传人:b****1 文档编号:15396510 上传时间:2022-10-30 格式:DOCX 页数:9 大小:369.35KB
下载 相关 举报
第9章 全局变量和局部变量文档格式.docx_第1页
第1页 / 共9页
第9章 全局变量和局部变量文档格式.docx_第2页
第2页 / 共9页
第9章 全局变量和局部变量文档格式.docx_第3页
第3页 / 共9页
第9章 全局变量和局部变量文档格式.docx_第4页
第4页 / 共9页
第9章 全局变量和局部变量文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

第9章 全局变量和局部变量文档格式.docx

《第9章 全局变量和局部变量文档格式.docx》由会员分享,可在线阅读,更多相关《第9章 全局变量和局部变量文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

第9章 全局变量和局部变量文档格式.docx

这时如果程序中已经创建了一些对象,那么在局部变量节点上弹出菜单时,在SelectItem选项下,就会出现所有已经创建的前面板对象的名称,如图9-2(b)所示。

为局部变量节点选择对象的另一个方法是使用操作工具,单击鼠标左键,可以直接弹出包括所有已经创建的前面板对象名称的菜单。

当选中其中一个对象,例如温度,这个节点就成为被选中对象的局部变量,如图9-2(c)所示。

(a)(b)(c)

图9-2通过结构子模板建立局部变量

2.直接为前面板对象建立局部变量

这是一种建立局部变量的简单方法。

在前面板控件或它的端口上弹出菜单,然后选择Create>

>

LocalVariable命令,如图9-3所示。

这个对象的局部变量节点将自动出现在图形代码中。

可以看出,无论用哪一种方法建立局部变量,它都是通过前面板控件的标签label与前面板控件相联系的。

因此必须明确为前面板控件填写标签。

可以为一个前面板控件建立多个局部变量。

图9-3直接为前面板控件建立局部变量

9.1.2局部变量的使用方法

用局部变量既可以向与之联系的前面板控件写数据,也可以从与之联系的前面板控件读数据,而不必考虑这个控件是显示件还是控制件。

需要做的只是改变这个局部变量的读写状态,方法是从弹出菜单上选ChangetoWrite或ChangetoRead。

图9-4改变局部变量的读写属性

例如,在图9-4(a)中有一个前面板控制件温度,为它建立了一个局部变量。

这个局部变量在默认情况下是write状态,即可以向它写数据。

因此尽管它是一个控制件,却给它输入了一个数据58.6。

类似于其它前面板显示件,它的图标边框比较窄。

如果在程序中某个位置需要由它读数据,则要将它改为read状态,如图9-4(b)所示。

在图9-4(c)中,它已经改变为读的状态,图标的边框也变宽了。

由这里读出的温度值,送到一个显示件。

一个前面板控件的多个局部变量可以其中一些是写模式,另一些是读模式。

这样由于引用了局部变量,可以使用前面板控件既做输入量又做输出量。

在这种情况下要注意访问各个局部变量的顺序。

如果把图9-4(a)和图9-4(c)放在同一个程序中,如图9-5(a)所示,则将不能保证写入温度值的动作一定发生在读取温度值的动作之前。

也就是说有可能读取了没有意义的数据。

要防止这种情况,可以用顺序结构,或者建立人为的数据依从关系,如图9-5(b)所示。

在图9-5(b)的程序中,两个顺序结构各自只有一个顺序框Frame。

这种使用顺序结构的方式,只是为了将程序的某一部分划分为一个单独执行的单元。

(a)(b)

图9-5访问局部变量的顺序

9.1.3局部变量应用示例

1.使用局部变量进行控制方式转换

图9-6使用局部变量进行控制方式转换

在图9-6的程序中,电机转速有两种控制方式。

在手动控制方式下,操作者可以任意调节滑槽的位置选择电机转速。

在自动控制方式下,电机转速将在500-1000转之间变化。

由图形代码窗口中可以看到,在Case结构的True选框中为电机转速这个控件建立了一个局部变量,并设置为Write状态。

这样当选择了自动控制方式时(控制方式选择拨动开关的值为True),按照程序控制要求设定的电机转速值就可以在前面板控件上显示出来。

2.使用局部变量控制两个并行的While循环同时停止

在图9-7中,同一个程序中的两个While循环中分别调用了Waveform>

WaveformGeneration函数子模板中的SineWaveformVI和SquareWaveformVI,产生的正弦波与方波显示在两个Graph中。

左边一个While循环中用一个滑动开关控制循环的终止;

右边一个While循环中为这个滑动开关建立了一个局部变量,控制循环的终止

图9-7使用局部变量控制两个While循环同时停止

3.初始化前面板控件

图9-8使用局部变量进行前面板控件初始化

图9-9用户信息确认

图9-8的程序用于确认用户对一个软件系统的访问权限。

用户在前面板上输入用户名和口令,如果图9-9的子程序在数据库中找到相应的信息,就对访问给予确认,并根据数据库中的信息返回访问的权限。

但是如果不对前面板控件进行初始化,一位用户登录后,下一位用户登录时,面板上还保留着上一位用户的登录信息。

因此程序中为用户名和口令两个前面板控件创建了局部变量,并在程序开始运行时先给它们用一个空字符串赋值。

9.2全局变量

由上一节我们已经知道,局部变量与前面板上已有的某一个控件相联系,用于在一个程序的不同位置访问同一个控件,实现一个程序内的传递数据。

而全局变量是用于在不同的程序之间传递数据,这些程序可以是并行的;

也可以是不便于通过接口传递数据的主程序和子程序。

全局变量的控件是独立的,它需要一个特殊的程序作为自己的容器。

因此可以说全局变量是一个内置的G语言对象。

9.2.1全局变量的建立

建立全局变量的方法与通过函数模板建立局部变量的方法类似,在结构子模板上局部变量节点左边就是全局变量节点(见图9-1)。

图9-10建立全局变量

全局变量节点放入图形代码窗口后如图9-10(a)所示。

双击这个全局变量节点或在这个全局变量节点上击右键弹出菜单选OpenFrontPanel,都可以打开一个全局变量程序前面板。

全局变量程序是一种特殊的程序,它只有前面板而没有图形代码,其用途就是一个保存全局变量的容器。

在这个程序的前面板上可以放一个控件,也可以放多个控件,每个控件就是一个全局变量。

在图9-10(b)中放了3个控件。

注意一定要为每个控件添加意义明确的标签,LabVIEW是通过变量名访问全局变量的。

如果所开发的应用程序中需要多个全局变量,可以建立多个程序,每个程序包含一个全局变量;

也可以建立一个包含多个全局变量的程序,这种方法效率更高,因为它把有关的全局变量组合在一起。

在全局变量程序前面板上放入所需要的控件以后,关闭这个程序并保存为一个VI。

在全局变量程序前面板上放入所需要的控件以后,如果用操作工具点击全局变量节点或在全局变量节点上击右键弹出菜单选SelectItem,就会出现所有放入全局变量程序前面板的控件的名称,如图9-10(c)所示,这时可以选择所需要的全局变量。

在程序其它位置需要访问已经建立的全局变量时,由函数模板的SelectaVI…子模板打开选择用户程序对话框,选择已经保存的全局变量程序,就调出了全局变量节点并带有一个默认的全局变量名。

如果这个全局变量条目不是需要的全局变量,可以按上一段所讲的方法进行改变。

如同局部变量一样,既可以向全局变量写数据也可以从全局变量读数据,而不必管它所对应的当初放入全局变量程序前面板的控件是控制件还是显示件。

向全局变量写数据意味着改变全局变量的值,从全局变量读数据意味着把全局变量作为一个数据源来访问。

向全局变量写数据或从全局变量读数据时,如果它的读写状态不匹配,就从全局变量节点上弹出菜单,选择ChangetoWrite或ChangetoRead选项。

全局变量可以被内存中任何LabVIEW程序读或写,但是必须知道程序中所有读写都发生在那里,以免全局变量值意外改变。

G语言程序可以同时执行许多操作,要想知道在多个并行的图形代码中一个全局变量什么时候被访问有时是比较困难的。

在多线程软件中,对全局变量这样的共享数据源的竞先访问使这个问题变得更加突出。

因此任意滥用全局变量会带来程序调试的困难。

9.2.2全局变量应用示例

1.利用全局变量传递波形数据

图9-11应用全局变量发送数据图9-12应用全局变量接受数据

图9-11的程序产生正弦波数据显示在前面板上,并写入全局变量波形数据。

这个程序停止时还把停止按钮的值写入全局变量停止。

图9-12的程序从全局变量波形数据读出正弦波数据,显示在前面板上。

同时读出全局变量停止的值。

一旦传递数据的程序停止,它也随之停止。

这两个程序中,While循环的条件端口都设置为StopifTrue(条件为True时停止)。

先让发送数据的程序运行,然后让接收数据的程序运行。

两个程序都显示出正弦波波形。

按下发送数据的程序的停止按钮,两个程序一起停止。

接受数据的程序中延时设置为100毫秒,即While循环每100毫秒执行一次。

这时如果发送数据的程序延时设置也是100毫秒,那么可以看到两个程序显示的正弦波频率是一样的。

但是如果发送数据的程序延时设置为50毫秒,象图9-11那样,那么将会看到接受数据的程序中显示的正弦波频率提高了一倍。

发送数据的程序产生的正弦波每个周期的数据点数是固定的。

这是因为计算正弦波数据用的Numeric>

Trigonometric函数子模板中的Sine函数输入值单位为弧度,当循环数i=63时,连接到Sine函数输入端口的值为63/10≡2π;

即63个数据点产生一个周期的正弦波。

在以后的循环中,总是按这个倍数产生正弦波。

如果两个程序中的延时一致,那么发送数据的程序产生的每一个数据都会被接受到,两者看上去频率就一样了。

如果发送数据的程序延时小,即它比接受数据的程序运行快,那么就会有一些数据被丢掉,正弦波一个周期内的数据点数少了,在用数据点序号做横坐标的情况下,看上去就是频率提高了。

反之,如果发送数据的程序延时大,即它比接受数据的程序运行慢,那么就会有一些数据被读了多次,正弦波一个周期内的数据点数多了,看上去就是频率降低了。

因此发送数据的程序中的延时设置决定了全局变量数据多长时间被读一次,它影响到描绘到波形图上的数据。

这个例子说明,使用全局变量时如果不加注意,会多次读取一个值,或总也读不到这个值。

如果必须处理每一次的数据刷新,则需要特别注意采取措施,保证前一个值没被读取之前,不要向全局变量写进新数据;

并保证全局变量被读取一次之后,只要没有新值写入,就不会被再次读取。

2.液位控制

图9-13是一个简单的液位控制程序,它通过全局变量容器收到容器液位的当前值pv,并将该值与液位设定值sp进行比较,然后按照比例控制算法计算出控制液位增减量的输出值output,写入全局变量液位增减。

Output=(sp-pv)×

k。

k为比例因子。

当这个程序停止时,将TRUE值传递给全局变量停止。

图9-13液位控制程序

图9-14是一个简单的容器仿真程序,作为液位控制程序的受控对象。

这个程序为泄漏量和液位值分别设置了初始值0.5和5。

它通过全局变量液位增减接收到对容器液位的控制信息后,将该值与泄漏量的变化量和当前容器液位值相加,作为新的容器液位值传递给全局变量容器。

当全局变量停止的值为TRUE时,这个程序停止。

图9-14容器仿真程序

 

9.3使用局部变量和全局变量应注意的其它一些问题

NI公司为LabVIEW提供了局部变量和全局变量这两种传递数据的工具,但是NI公司却并不提倡过多的使用它们。

很多使用LabVIEW开发应用程序的人也认为,局部变量和全局变量的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1