网站大量收购独家精品文档,联系QQ:2885784924

我和LabVIEW——一个NI工程师十年的编程经验29全局变量.doc

我和LabVIEW——一个NI工程师十年的编程经验29全局变量.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全局变量 全局变量是一种数据在不同节点,不同VI,不同线程间传递的方式。数据被保存在某一固定的内存空间里,不随数据线流动。在需要读写数据的地方,不需要外部链接的数据线,直接通过某些节点或VI就可以得到目标数据,并对其操作。 在LabVIEW 中应当尽量避免使用全局变量。全局变量看似方便,但带来的问题也很多。最主要的是它破坏了数据流顺序的逻辑关系,导致程序可读性和可维护性下降。 偶尔也有不得不使用全局变量或使用它利大于弊的情况。比如:实现子 VI 间参数传引用的机制;在不破坏程序可读性的前提下,避免一些过于杂乱的数据连线;对高层用户隐藏某些底层模块内部使用的数据。 一、全局变量(Global Variable) 此处所说的全局变量是特指图标像地球的那个 Global Variable VI。使用这种全局变量,目标数据被存放在一个只有前面板的特殊VI中,任何需要使用这个数据的地方,把它所在的 Global VI 拖过来即可。如同前面所述,全局变量虽然使用方便,但是缺点也十分明显。 首先,它不利于代码的可读性,破坏了数据流顺序的逻辑关系。使用全局变量难以知道数据是否在其它地方被改动过。换言之,代码上的全局变量,不能直观的反映出它的数据来源。 其次,它的安全性低。全局变量可以在任何地方被直接读写。即便知道数据在某些地方不应该被改动,也无法对其进行控制。 再次,它的效率低下。VI每次读全局变量,LabVIEW 都要为读到的数据复制一个新的副本,这毫无疑问影响到VI的效率。 此外,全局变量的不合理使用还可能导致竞争状态。比如下图中的VI,假设全局变量 Data 的值原本为 0,运行完下面这个加2减1后的代码后,Data 中的值是几呢?可能是1,也有可能是2,还可能是-1,这完全取决于程序的执行顺序。而在这种情况下,这个顺序是不确定的。 图1:处于竞争状态的全局变量 二、单进程共享变量(Single-Process Shared Variable) 共享变量有三种:单进程,网络发布,以及时间触发的共享变量。后两种主要应用于不同硬件设备、不同计算机、不同进程程序间的数据交换。在此,我们仅仅介绍与全局变量相关的第一种:单进程共享变量。共享变量的种类可以在它的属性页中进行修改。 单进程共享变量,顾名思义就是作用域为单个程序进程的共享变量。它与全局变量的性质是完全相同的。唯一的不同点是单进程共享变量带错误输入/输出端,我们可以利用错误处理连线来控制单进程共享变量的执行顺序。比如下图中的VI,假设共享变量 Data 的值原本为 0,运行完下面这个加2减1后的代码后,Data 的值必然为1。 图2:共享变量的使用 这并不意味着单进程共享变量可以防止出现竞争状态。设想上图的VI只是程序中的一个子VI,在其运行的同时,Data 仍然可以在其它子VI中被访问,因此,仍然有可能处于竞争状态。 共享变量是 LabVIEW 8 之后的一个新东西,比必须被保存在某个 Library 内部,不能独立存在。 三、功能全局变量(Functional Global) 功能全局变量与前两种全局变量完全不同,它在 LabVIEW 中就是一个普通的 VI。它把需要在全局使用的数据保存在一个没有初始化的移位寄存器中,并实现相关的访问这些数据的方法。 功能全局变量的代码结构都是类似的:主体是一个只执行一次的循环结构;内套一个选择结构;一个输入用于选择某种操作;若干用于输入和输出数据的控件。 其实,使用循环结构仅是为了利用它的移位寄存器。移位寄存器没有连初始化数据,因此每次执行这个VI时,它里面保存的是上一次 VI 执行结束时的数据。这样,就可以在程序的全程保存、处理或使用这一数据了。功能全局变量 VI 不可以被设置为可重入,否则在不同地方,得到的移位寄存器中的数据就不是同一份了。 从 LabVIEW 8.5 开始,VI 的程序框图增加了反馈节点了。可以使用它来替代仅执行一次的循环,以简化程序。下面两图就是完全等效的功能全局变量。 图3:实现加减法功能的功能全局变量 图4:等效的加减法功能全局变量 与前两种全局变量相比,功能全局变量有两项主要的优点。所以我建议,如果不得不使用全局变量,那就使用功能全局变量。 首先,功能全局变量可以防止竞争状态出现。因为功能全局变量的VI是不可重入的,所以把它作为子 VI 时,绝对不可能出现两个相同功能变量子 VI 同时执行的情况。因为对全局数据的所有操作都是在这个 VI 内部完成的,也就意味着,所有对数据的操作都绝对不会被其它操作干扰。图5中的VI,执行结束必然导致全局数据增加1,即便还有其它线程的子V

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档