LabVIEW学习记录4-局部变量、全局变量、共享变量

news2024/9/29 3:20:12


【LabVIEW】局部变量、全局变量、共享变量

  • 一、变量定义
  • 二、内存分配
  • 三、竞争状态
  • 四、变量创建及简单使用示例
    • 4.1 局部变量
      • 4.1.1 局部变量的创建
      • 4.1.2 局部变量的编程实例
    • 4.2 全局变量
      • 4.2.1 创建
      • 4.2.2 调用
      • 4.2.3 编程实例
    • 4.3 共享变量

1

一、变量定义

  LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种用于工程应用的图形化编程语言。在LabVIEW中,变量是用于存储和传输数据的元素。下面是对局部变量、全局变量和共享变量的简要说明:

  1. 局部变量(Local Variables)
  • 局部变量只能在其所在的VI文件中使用,用于存储和传输该VI或图形化函数内部的数据。同样,它也具有可读和可写的属性,在局部变量的右键菜单中可更改其读写属性。实际上,使用局部变量可将前面板对象同时用作输入和输出。
  • 局部变量多用于程序复杂或者连线困难的场合
  • 在块图中,局部变量可以通过其名称或标签进行访问。
  1. 全局变量(Global Variables)
  • 全局变量用于在一个工程项目中的多个文件之间进行数据交互。
  • 全局变量保存在一个VI文件中,但这种类型的VI文件和普通的VI文件不一样,它只有前面板,而无程序框图,在前面板上可以放置多个控件,对应着多个全局变量,即在一个VI文件中可以存储多个全局变量。
    全局变量具有可读和可写的属性,在全局变量的右键菜单中可更改其读写属性。
  1. 共享变量(Shared Variables)
  • 共享变量是LabVIEW提供的一种功能,允许在多个VI或实时目标之间共享数据
  • 共享变量是通过LabVIEW的“共享变量引擎”来管理的,该引擎提供了对网络变量、实时变量和I/O变量的支持。
  • 共享变量可以在项目浏览器中进行定义和配置,包括其数据类型、访问权限和更新策略等。
  • 在VI中,可以通过“共享变量”选板来访问和操作共享变量。
  • 共享变量对于在分布式系统、实时系统或网络应用中实现数据共享和通信非常有用。

回到目录

二、内存分配

1. 局部变量

  • 局部变量复制数据缓冲区的数据。从一个局部变量读取数据时,便为相关控件的数据创建了一个新的缓冲区。
  • 局部变量的内存占用与其数据类型和大小直接相关。例如,一个存储大量数据的数组局部变量将占用更多的内存。
  • 局部变量只在定义它们的VI或图形化函数的上下文中存在。当VI停止运行时,这些局部变量的内存会被自动释放。

2. 全局变量

  • 从一个全局变量读取数据时,LabVIEW将创建一个数据的副本,保存于该全局变量中。
  • 操作大型数组和字符串时,将占用相当多的时间和内存来操作全局变量。操作数组时使用全局变量尤为低效,原因在于即使只修改数组中的某个元素,LabVIEW仍对整个数组进行保存和修改。如一个应用程序中的不同位置同时读取某个全局变量,则将为该变量创建多个内存缓冲区,从而导致执行效率和性能降低。

3. 共享变量

  • 共享变量的内存占用取决于其数据类型、大小和配置。共享变量引擎会管理这些变量的内存使用,并在需要时进行优化。
  • 由于共享变量是在多个VI之间共享的,因此它们的内存占用可能会比局部变量更复杂。但是,LabVIEW的共享变量引擎通常能够高效地管理这些变量的内存使用。

  在优化LabVIEW程序的内存使用时,以下几点是值得注意的:

  • 尽量减少不必要的局部变量和全局变量的使用,以减少内存占用。
  • 对于大数据集,考虑使用数据流编程方式或“生产者/消费者”模式来分块处理数据,以降低内存占用。
  • 定期检查程序中的内存使用情况,并找出潜在的内存泄露问题。
  • 使用适当的内存释放节点(如“释放内存”和“清空图例”等)来释放不再使用的内存。
  • 对于自定义的VI,确保在VI结束时释放所有分配的内存。

回到目录

三、竞争状态

  两段或更多代码并行执行并访问同一部分内存时会引发竞争状态。如果代码是相互独立的,就无法判断LabVIEW按照何种顺序访问共享资源。竞争状态会引起不可预期的结果。例如,两段独立的代码访问同一个队列,但是用户未控制LabVIEW访问队列的顺序,这种情况下会引发竞争状态。
  竞争状态随着程序运行的时间因素而改变,因此具有一定的危险性。操作系统、LabVIEW版本和系统中其他软件的改变均会引起竞争状态。 如改动了VI的时间要素(例如,更新操作系统或LabVIEW版本),请检查访问同一部分数据的并行代码,并使用定时条件来控制哪一部分代码首先执行。

回到目录

四、变量创建及简单使用示例

4.1 局部变量

4.1.1 局部变量的创建

  局部变量是依托于前面板上的某个控件存在的,在LabVIEW中可以通过下面两种方式为某个控件创建局部变量:

  1. 在控件对象上面单击鼠标右键,选择“创建”–>“局部变量”;
  2. 在程序框图右键菜单的函数模板上创建,在函数模板中选择“编程”–>“结构”–>“局部变量”,将局部变量放到程序框图中后,鼠标左键单击该图标,选择该局部变量对应的前面板上的某个控件即可,如下图所示:
    1
    回到目录

4.1.2 局部变量的编程实例

  下面是一个简单的例子,该例计算两个数a和b的和,将结果在显示控件c上进行显示,要求程序开始运行时,控件a和控件b的初始值分别设为1和2,其前面板如下图所示:
2

4.2 全局变量

4.2.1 创建

  在LabVIEW中可以通过多种方式创建全局变量。

  1. 第一种:在LabVIEW编程环境中,选择菜单“文件”–>“新建……”,弹出新建文件对话框,如下图所示:

1
在上图中选择全局变量,即可打开一个全局变量的VI程序,当然这个VI程序只有前面板,在前面板上放置你需要的变量控件,每个变量控件即可代表一个全局变量,如下图所示:
2
2. 第二种:如果已经打开了一个普通的VI程序,可以在程序框图右键菜单的函数模板上创建,在函数模板中选择“编程”–>“结构”–>“全局变量”,如下图所示:
3
将全局变量放到程序框图中后,双击该图标,通过这种方法同样可打开一个只包含前面板的VI全局变量程序,后续操作同第一种方法相同。

回到目录

4.2.2 调用

  如果要在一个VI程序中使用全局变量,可通过下面三种方法将全局变量导入到当前VI的程序框图中:

  1. 由函数模板中的“选择VI…”子模板打开选择用户程序对话框,选择已经保存的全局变量VI程序,此时将在框图程序中显示全局变量的数据端口。
  2. 如果已经打开了全局变量的VI文件,可拖动该VI文件前面板右上角的全局变量图标到当前程序框图中,此时将在框图程序中显示全局变量的数据端口。
  3. 若未打开全局变量的VI文件,也可以在存储全局变量VI文件的目录中,拖动该文件到当前程序框图中,此时也会在框图程序中显示全局变量的数据端口。
  4. 如果在全局变量VI文件中建立了多个控件,可通过操作工具在全局变量的图标上单击,在列出的所有变量对象中选择所需的对象进行操作即可。

回到目录

4.2.3 编程实例

  使用上面已经创建的文件“MyGloableVar.vi”文件,在该文件中包含了两个全局变量,分别为“全局变量a”和“全局变量b”,下面写两个简单的VI程序,分别读取和写入这两个全局变量的值,以这种方式验证通过全局变量可以实现不同程序之间的数据交互。

  • 读取全局变量程序“ReadGloableVar.vi”的前面板和框图程序如下图所示:
    4
  • 写入全局变量程序“WriteGloableVar.vi”的前面板和框图程序如下图所示:
    6
      为演示方便,这两个程序中未添加任何控制程序运行的结构,所以可通过点击工具栏上的“连续运行”按钮,同时运行两个程序,修改“WriteGloableVar.vi”前面板上两个控件的值,可以在“ReadGloableVar.vi”的前面板上实时观察到这两个全局变量的值。从运行结果上可以说明,通过全局变量可以实现在不同程序之间实现数据的交互了。

回到目录

4.3 共享变量

参考链接:使用共享变量
回到目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么把图片改成1920*1080的?一键修改图片尺寸小技巧

一张合适尺寸的图片,不仅可以适应不同设备的屏幕尺寸,保证视觉效果的舒适和协调,还可以有效降低图片的存储空间占用,比如我们有时候想要把一张图片改成1920*1080尺寸的,该如何修改图片尺寸呢?其实可以使用图…

【ZZULI数据结构实验】压缩与解码的钥匙:赫夫曼编码应用

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

虚拟化数据恢复—误还原虚拟机快照怎么办?怎么恢复最新虚拟机数据?

虚拟化技术原理是将硬件虚拟化给不同的虚拟机使用,利用虚拟化技术可以在一台物理机上安装多台虚拟机。误操作或者物理机器出现故障都会导致虚拟机不可用,虚拟机中的数据丢失。 虚拟化数据恢复环境: 有一台虚拟机是由物理机迁移到ESXI上面的&a…

继电器测试负载箱的常见故障和解决方法有哪些?

继电器测试负载箱是用于模拟各种电气负载的设备,广泛应用于继电器、接触器等电气元件的测试和校验。在使用过程中,可能会出现一些故障,影响测试的准确性和效率。以下是一些常见的故障及其解决方法: 电源问题:如果电源电…

FMEA助力医疗设备研发制造:领跑未来,实现弯道超车!

医疗设备作为保障人类健康的重要工具,其研发与制造水平直接关系到医疗技术的进步。然而,在激烈的市场竞争中,如何能够让自家医疗设备研发制造实现弯道超车,成为行业佼佼者?答案就在于——FMEA(失效模式与影…

C语言中数组与指针的区别

一. 简介 本文学习了 C语言中数组与指针的区别。这样的话,可以在编写C代码时规避掉出错的问题。 二. C语言中数组与指针的区别 1. 数组 定义字符串数组时,必须让编译器知道需要多少空间。 一种方法是用足够空间的数组存储字符串。例如如下&#xf…

Spring MVC(三) 参数传递

1 Controller到View的参数传递 在Spring MVC中,把值从Controller传递到View共有5中操作方法,分别是。 使用HttpServletRequest或HttpSession。使用ModelAndView。使用Map集合使用Model使用ModelMap 使用HttpServletRequest或HttpSession传值 使用HttpSe…

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工…

python代码学习案例-用turtle库绘制爱心图形效果

Python爱心代码,我们可以使用多种方法,包括使用turtle库来绘制图形,或者使用字符打印来在控制台中显示爱心。 首先,确保你已经安装了Python,并且你的环境支持turtle库(它通常是Python标准库的一部分&#…

Python中批量提取[]括号内第一个元素的四种方法

目录 一、引言 二、方法介绍 使用正则表达式(Regular Expression) 使用字符串分割(String Split) 使用ast模块解析字符串为列表 使用JSON模块解析字符串 三、方法比较与选择 四、总结 一、引言 在Python数据处理过程中&a…

c++游戏小技巧16:实例1(地牢生成算法)

1.前言 (头图) (其实最开始是想写恶魔轮盘的,但没想到它竟然更新了) (等我有时间在更,最近很忙,玩第五玩的) 想法来源:房间和迷宫:一个地牢生成算法https://indienova…

百面算法工程师 | 正则优化函数——BN、LN、Dropout

本文给大家带来的百面算法工程师是正则优化函数,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们将总结一些BN、LN、Dropout的相关知识,并提供参考的回答及其理论基础,以…

redis深入理解之数据存储

1、redis为什么快 1)Redis是单线程执行,在执行时顺序执行 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取(socket 读)、解析、执行、内容返回 (socket 写)等都由一个顺序串行的主线…

网络编程套接字 (二)---udosocket

本专栏内容为:Linux学习专栏,分为系统和网络两部分。 通过本专栏的深入学习,你可以了解并掌握Linux。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:网络 🚚代码仓库:小小unicorn的代…

mikefile函数与实用模板

文章目录 0.概述1.函数调用语法2.字符串处理函数2.1 subst(字符串替换函数)2.2 patsubst(模式字符串替换函数)2.3 strip(去空格函数)2.4 findstring(查找字符串函数)2.5 filter&…

大型模型技术构建本地知识库

使用大型模型技术构建本地知识库是一个复杂的过程,涉及到数据科学、机器学习和软件工程等多个领域的知识。以下是构建本地知识库的一般步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.需求分析: 确定知…

java版数据结构:堆,大根堆,小根堆

目录 堆的基本概念: 如何将一个二叉树调整成一个大根堆: 转成大根堆的时间复杂度 根堆中的插入,取出数据: 堆的基本概念: 堆是一种特殊的树形数据结构,它满足以下两个性质: 堆是一个完全二叉…

常见物联网面试题详解

物联网一直是非常火热的行业,G端如智慧城市、智慧工厂、智慧园区、智慧水利、智慧矿山等行业,都会涉及到物联网,基本都是软硬一体,因此当面试相关企业时,物联网平台是面试企业重点考察的项,小伙伴如果从事相…

网络安全在数字时代的重要性:以近期网络安全事件为镜

在当今这个信息化爆炸的时代,互联网如同一张无形的网,将我们的生活、工作、学习紧密相连。然而,这张网在带来便捷的同时,也暗藏着无数的安全隐患。近年来,网络安全事件频发,从个人隐私泄露到企业数据被盗&a…

中国地图(2024版审图号地图)和地图变化说明

2024版shp格式审图号地图预览图: 新版中国地图的变化(简述) 国土面积的增加:新版中国地图显示,中国的国土面积从960万平方公里增加到1045万平方公里,增加了85万平方公里。 九段线变为十段线:…