我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc

我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc

ID:36011066

大小:243.00 KB

页数:4页

时间:2019-05-02

我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc_第1页
我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc_第2页
我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc_第3页
我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc_第4页
资源描述:

《我和LabVIEWword版——一个NI工程师十年的编程经验1-5029.全局变量.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、全局变量全局变量是一种数据在不同节点,不同VI,不同线程间传递的方式。数据被保存在某一固定的内存空间里,不随数据线流动。在需要读写数据的地方,不需要外部链接的数据线,直接通过某些节点或VI就可以得到目标数据,并对其操作。在LabVIEW中应当尽量避免使用全局变量。全局变量看似方便,但带来的问题也很多。最主要的是它破坏了数据流顺序的逻辑关系,导致程序可读性和可维护性下降。偶尔也有不得不使用全局变量或使用它利大于弊的情况。比如:实现子VI间参数传引用的机制;在不破坏程序可读性的前提下,避免一些过于杂乱的数据连线;对高层用户隐藏某些底层模块内部使

2、用的数据。一、全局变量(GlobalVariable)此处所说的全局变量是特指图标像地球的那个GlobalVariableVI。使用这种全局变量,目标数据被存放在一个只有前面板的特殊VI中,任何需要使用这个数据的地方,把它所在的GlobalVI拖过来即可。如同前面所述,全局变量虽然使用方便,但是缺点也十分明显。首先,它不利于代码的可读性,破坏了数据流顺序的逻辑关系。使用全局变量难以知道数据是否在其它地方被改动过。换言之,代码上的全局变量,不能直观的反映出它的数据来源。其次,它的安全性低。全局变量可以在任何地方被直接读写。即便知道数据在某些地

3、方不应该被改动,也无法对其进行控制。再次,它的效率低下。VI每次读全局变量,LabVIEW都要为读到的数据复制一个新的副本,这毫无疑问影响到VI的效率。此外,全局变量的不合理使用还可能导致竞争状态。比如下图中的VI,假设全局变量Data的值原本为0,运行完下面这个加2减1后的代码后,Data中的值是几呢?可能是1,也有可能是2,还可能是-1,这完全取决于程序的执行顺序。而在这种情况下,这个顺序是不确定的。图1:处于竞争状态的全局变量二、单进程共享变量(Single-ProcessSharedVariable)共享变量有三种:单进程,网络发布

4、,以及时间触发的共享变量。后两种主要应用于不同硬件设备、不同计算机、不同进程程序间的数据交换。在此,我们仅仅介绍与全局变量相关的第一种:单进程共享变量。共享变量的种类可以在它的属性页中进行修改。单进程共享变量,顾名思义就是作用域为单个程序进程的共享变量。它与全局变量的性质是完全相同的。唯一的不同点是单进程共享变量带错误输入/输出端,我们可以利用错误处理连线来控制单进程共享变量的执行顺序。比如下图中的VI,假设共享变量Data的值原本为0,运行完下面这个加2减1后的代码后,Data的值必然为1。图2:共享变量的使用这并不意味着单进程共享变量可

5、以防止出现竞争状态。设想上图的VI只是程序中的一个子VI,在其运行的同时,Data仍然可以在其它子VI中被访问,因此,仍然有可能处于竞争状态。共享变量是LabVIEW8之后的一个新东西,比必须被保存在某个Library内部,不能独立存在。三、功能全局变量(FunctionalGlobal)功能全局变量与前两种全局变量完全不同,它在LabVIEW中就是一个普通的VI。它把需要在全局使用的数据保存在一个没有初始化的移位寄存器中,并实现相关的访问这些数据的方法。功能全局变量的代码结构都是类似的:主体是一个只执行一次的循环结构;内套一个选择结构;一

6、个输入用于选择某种操作;若干用于输入和输出数据的控件。其实,使用循环结构仅是为了利用它的移位寄存器。移位寄存器没有连初始化数据,因此每次执行这个VI时,它里面保存的是上一次VI执行结束时的数据。这样,就可以在程序的全程保存、处理或使用这一数据了。功能全局变量VI不可以被设置为可重入,否则在不同地方,得到的移位寄存器中的数据就不是同一份了。从LabVIEW8.5开始,VI的程序框图增加了反馈节点了。可以使用它来替代仅执行一次的循环,以简化程序。下面两图就是完全等效的功能全局变量。图3:实现加减法功能的功能全局变量图4:等效的加减法功能全局变量

7、与前两种全局变量相比,功能全局变量有两项主要的优点。所以我建议,如果不得不使用全局变量,那就使用功能全局变量。首先,功能全局变量可以防止竞争状态出现。因为功能全局变量的VI是不可重入的,所以把它作为子VI时,绝对不可能出现两个相同功能变量子VI同时执行的情况。因为对全局数据的所有操作都是在这个VI内部完成的,也就意味着,所有对数据的操作都绝对不会被其它操作干扰。图5中的VI,执行结束必然导致全局数据增加1,即便还有其它线程的子VI在同时运行也不会影响这个结果。但需要注意的是,解决了竞争状态不等于全局变量的使用顺序可以乱写,随机的顺序很可能导

8、致错误。设计功能全局变量时可以加入出错处理的连线,以方便使用时确定全局变量的调用顺序。图5:功能全局变量的使用另一优点是,功能全局变量可以封装内部数据、控制对数据的访问权限。例如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。