0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

讲解一下LabVIEW中常见的变量

jf_V8z5L4Nx 来源:传感测控物联网 2023-07-10 08:53 次阅读

变量,有别于LabVIEW图形化编程环境所倡导的数据流(连线)形式,看似简单,其实在LabVIEW编程中是一个高级的话题。使用变量,如果理解不透,处理不好,轻则影响程序执行效率,重则产生一些意想不到的后果。

这篇推送里我们讲解一下LabVIEW中常见的变量,它们各自的作用范围、使用方法和使用时的注意事项。相信你认真看完后一定会有所收获。

LabVIEW里常见的变量类型:局部变量、全局变量、移位寄存器、反馈节点。

1.局部变量Local Variable 局部变量作用范围为当前VI内,必须在前面板上有对应的控件。 在程序框图里局部变量用一个带小房子的图标表示。

119ad2a0-1e37-11ee-962d-dac502259ad0.png

创建/使用局部变量的方法:

1)程序框图界面下从Structure分类里选择Local Variable,放置到代码框图里,选择需要关联的控件。

2)选中前面板或程序框图中的控件,右键弹出快捷菜单,选择Create->Local Variable,移动鼠标把创建的局部变量放置到需要的位置。

11bc70cc-1e37-11ee-962d-dac502259ad0.png

2.全局变量Global Variable

全局变量作用范围为本地计算机,可在多个VI、多个LabVIEW设计的应用程序之间共享数据。 在程序框图里全局变量用一个带地球的图标表示,global variable。

11d9746a-1e37-11ee-962d-dac502259ad0.png

创建/使用全局变量的方法:

1)程序框图界面下从Structure分类里选择Global Variable,放置到代码框图里,选择需要关联的控件。如果没有可关联控件,则双击全局变量打开全局变量前面板,在前面板上放好全局变量对应的控件(完成了全局变量的创建)。

2)对于已经创建好的全局变量,选择保存全局变量的VI即可选择调用。

不同于局部变量,全局变量需要一个单独的VI保存。多个全局变量可以保存在一个VI中。

这个VI只有前面板(没有程序框图),用于保存全局变量对应的控件。 我们设计两个独立运行的VI,一个给全局变量写数据,另一个可以把全局变量的数据读取出来。这就通过全局变量实现了在两个小程序之间进行数据传递。

11fac160-1e37-11ee-962d-dac502259ad0.png

121ef40e-1e37-11ee-962d-dac502259ad0.png

3.移位寄存器Shift Register

移位寄存器用于循环结构多次循环之间传递数据,将上一次循环更新的数据传递到下一次循环,在程序框图中以上下两个箭头表示。

123d543a-1e37-11ee-962d-dac502259ad0.png

移位寄存器的作用范围为所在循环结构。 创建/使用移位寄存器的方法: 在循环结构的边框上单击鼠标右键,选择Add Shift Register就创建了一对移位寄存器,循环结构的左右侧各一个。

在左侧移位寄存器放置一个数值常量/控件,为移位寄存器设定初始值,同时LabVIEW会根据输入值的类型自动设定移位寄存器的数据类型。

1268ae3c-1e37-11ee-962d-dac502259ad0.png

例如下面这个代码,通过移位寄存器实现N+(N-1)+(N-2)+...+2+1。

12923db0-1e37-11ee-962d-dac502259ad0.png

4.反馈节点Feedback Node

反馈节点保存上一次执行更新的数据,可以用于循环结构,也可以用于其它代码。反馈节点作用范围为当前VI。 在程序框图中反馈节点用下面这个图标表示,*那里的接线端用于给反馈节点设置初始值。与移位寄存器一样,反馈节点通过初始值自动确定数据类型。

12c36138-1e37-11ee-962d-dac502259ad0.png

例如下面这个代码,通过反馈节点实现N+(N-1)+(N-2)+...+2+1。

12edf538-1e37-11ee-962d-dac502259ad0.png

反馈节点和移位寄存器的功能和本质完全相同,但是反馈节点有以下几个特点:

1、反馈节点有启用输入端,可以设置启用条件。 2、反馈节点可以设置延时次数,规定每多少次迭代反馈一次数据。 3、反馈节点相当于为所在VI创建了移位寄存器;而移位寄存器只是为所在循环结构创建。

5.使用注意事项

1)局部/全局变量必须有控件与之对应;全局变量的控件需要保存在单独的VI文件中。

2)无论哪种形式的变量,使用前都必须初始化。

3)必须考虑竞争对局部/全局变量的影响。

对局部变量来说,要处理好VI内可能的并发访问。

对全局变量来说,既要处理好VI内可能的并发访问,也要处理好多线程可能的并发访问。

处理的基本方法就是要么避免并发访问,设法改为顺序访问;要么使用信号量等同步机制。

4)考虑内存使用量

每次对变量的读取,LabVIEW都会创建内存缓冲区保存读取的数据。多次、不同位置、大容量数据在使用变量保存时,应由其注意。

5)反馈节点初始化和未初始化差异 下面这个代码,VI首次运行时会初始化反馈节点。所以无论这个VI自身执行多少次,N等于5的时候结果都是15。

131084c2-1e37-11ee-962d-dac502259ad0.png

132f3ef8-1e37-11ee-962d-dac502259ad0.png

下面这个代码,反馈节点没有进行初始化。第一次执行该VI,反馈节点使用数据类型默认初始值0作为初始值,VI执行完之后反馈节点的值为10,加上N(5)后作为本次VI执行后的输出值15。第二次执行该VI,反馈节点使用上一次VI执行后的反馈节点值10作为初始值,循环执行完之后反馈节点的值为20,加上N(5)后作为第二次VI执行后的输出值25。

1358d5e2-1e37-11ee-962d-dac502259ad0.png

1379f6b4-1e37-11ee-962d-dac502259ad0.png

6)多次调用含有反馈节点的VI 注意这里说的是“多次调用”,不是含有反馈节点的VI自身多次执行(Ctrl+R)。

131084c2-1e37-11ee-962d-dac502259ad0.png

上面这个VI,执行一次后反馈节点等于10。这个10就作为下次该VI被调用时反馈节点的初始值。所以这个VI被调用两次后,输出的值为25,三次后输出的值为35。

13dbe4fa-1e37-11ee-962d-dac502259ad0.png

13fb0326-1e37-11ee-962d-dac502259ad0.png

相比之下,Shift Register因为针对的是所在循环结构,所以使用Shift Register就不存在这样的问题。

7)嵌套循环中Shift Register和Feedback Node的不同

下面这个代码,都是计算5+4+3+2+1,多次执行后的终值却是不一样的。 使用ShiftRegister的,执行三次后终值是15,和单次执行一样。因为Shift Register作用范围为所在循环结构,内部For循环每次执行前移位寄存器都被初始化为0,所以三次执行后终值还是15。 使用Feedback Node的,执行三次后终值是35(你是不是认为应该是15或者45?)。

因为Feedback Node作用范围为整个VI,前面说过相当于为VI创建了移位寄存器。VI每次执行时都使用上一次执行后的反馈节点值作为初始值。所以执行三次后,10+10+10+5 = 35。

1428e7a0-1e37-11ee-962d-dac502259ad0.png

8)如何改变6)和7)中反馈节点的“异常”表现

Feedback Node之所以会有上面讲述的那些“异常”表现,主要是因为它只在首次执行VI时执行初始化,之后多次调用都是使用同一块内存区域保存数据。我们改变Feedback Node所在VI的可重入执行设置,让其变为Preallocated clone reentrant execution,这样每次调用这个VI都使用的是不同的内存,多次调用之间就不会再有影响(但是反馈节点在多次VI调用之间反馈数据的功能也丢失了)。

144e418a-1e37-11ee-962d-dac502259ad0.png

更改之后无论执行多少次,结果都是15。

14734444-1e37-11ee-962d-dac502259ad0.png

6.查看当前VI全局/局部变量使用情况

Tools->Profile->VI Metrics,勾选Globals/locals。LabVIEW会自动统计当前VI及其调用的子VI中全局/局部变量使用情况。

14aafbc8-1e37-11ee-962d-dac502259ad0.png

以上是一些关于局部变量、全局变量、Shift Register、Feedback Node的知识共享,希望能够引起大家的思考。有些莫名其妙的Bug就是隐藏在对变量不透彻的理解和运用中。感兴趣的朋友可以去试一试,一定能够对以后的开发工作有所帮助。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LabVIEW
    +关注

    关注

    1970

    文章

    3654

    浏览量

    323240
  • 缓冲器
    +关注

    关注

    6

    文章

    1921

    浏览量

    45473
  • 移位寄存器
    +关注

    关注

    3

    文章

    258

    浏览量

    22265
  • labview编程
    +关注

    关注

    2

    文章

    8

    浏览量

    14114

原文标题:LabVIEW常见变量类型及使用注意事项

文章出处:【微信号:传感测控物联网,微信公众号:传感测控物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    linux系统中常见注册函数的使用方法

    大家好,今天给大家分享一下,linux系统中常见的注册函数register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()的使用方法。
    发表于 10-19 09:28 601次阅读
    linux系统<b class='flag-5'>中常见</b>注册函数的使用方法

    我想问一下labview使用变量库与opc连接 与plc的通讯方式

    我想问一下labview使用变量库与opc连接 与plc的通讯方式
    发表于 12-13 09:31

    求助一下大神讲解一下图中的电路原理 谢谢

    如题,求助一下大神讲解一下图中的电路原理 谢谢,有报酬
    发表于 06-14 21:42

    求大神讲解一下labview程序

    附近有labview程序,不难,比较简单,这个循环次数i/2的余数,i/4的余数的选择程序框是什么意思,求大神详细讲解一下,感激不尽!
    发表于 05-12 18:34

    讲解一下HarmonyOS中的几个自定义组件用到的知识

    开发自定义组件目前还不是很丰富,在开发过程中常常会有些特殊效果的组件,这就需要我们额外花些时间实现,这里给大家提供了个 BottomSheet 上拉抽屉的组件,同时通过这个组件
    发表于 03-16 16:05

    视频监控系统中常见故障及其排除

    视频监控系统中常见故障及其排除讲解
    发表于 11-11 17:53 149次下载
    视频监控系统<b class='flag-5'>中常见</b>故障及其排除

    LabVIEW局部变量与全局变量

    LabVIEW 是以数据流决定程序框图元素的执行顺序,但在某些程序框图中需要消除数据流的依赖性,这时可以考虑使用变量LabVIEW 中的变量是程序框图中的元素,通过它可以在另
    发表于 09-12 10:46 54次下载

    Labview之全局变量

    Labview之全局变量,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:56 0次下载

    LabVIEW课程要点讲解(2)

    LabVIEW的重点课程讲解
    的头像 发表于 06-25 10:11 1940次阅读
    <b class='flag-5'>LabVIEW</b>课程要点<b class='flag-5'>讲解</b>(2)

    文了解PCB中常见14大错误

    文了解PCB中常见14大错误,具体的跟随小编一起来看一下
    的头像 发表于 07-22 11:29 5918次阅读

    机电行业中常见的英文缩写及其含义分享

    机电行业中常见的英文缩写及其含义分享,具体的跟随小编起来了解一下
    的头像 发表于 07-23 14:17 1.3w次阅读

    简单讲解一下时控开关手动如何打开或者关闭

    时控开关直都是按照设置好时间自动定时控制,如果因为需求需要手动提前开关或者提前关闭时控开关,怎么操作呢?今天简单讲解一下时控开关手动怎么打开/关闭? 根据当前市场上主要使用的两种时控开关(分别
    发表于 11-19 16:15 1.6w次阅读

    详解LABVIEW中的局部变量和全局变量

    本文档的主要内容详细介绍的是LABVIEW初级教程之局部变量与全局变量的详细资料说明。
    发表于 03-29 15:00 26次下载

    基于LabVIEW的虚拟示波器设计讲解

    基于LabVIEW的虚拟示波器设计讲解说明。
    发表于 05-25 11:34 120次下载

    基于LabVIEW的温控系统讲解

    基于LabVIEW的温控系统讲解
    发表于 05-27 15:22 61次下载