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


【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 共享变量

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot与RSocket实现高效实时数据通信

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目:CSDN主页YAML墨韵 学如逆水行舟&#xff0c…

LeetCode-2960. 统计已测试设备【数组 模拟】

LeetCode-2960. 统计已测试设备【数组 模拟】 题目描述:解题思路一:模拟解题思路二: 一次遍历,简洁写法解题思路三:0 题目描述: 给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages &#xf…

这套英文可视化界面,真的在UI设计上给我很多启发。

设计师在追求高颜值的英文可视化UI界面时,可以从以下几个方面获取启发: 1. 布局与排版: 观察一些知名的英文可视化UI界面,可以启发设计师对于页面布局和文本排版的设计。例如,可以关注页面元素的对齐方式、间距设置、…

2024高安全个人密码本程序源码,贴身密码管家-随机密码备忘录二代密码

项目概述: 在这个网络高度发展的时代,每个人都需要上网,而上网就不可避免地需要使用账号和密码。 在众多账号的情况下,你是否还在为复杂难记的密码感到烦恼?现在只需要记录一次, 就可以随时查看你的密码…

前端笔记-day02

文章目录 01-无序列表02-有序列表03-定义列表04-表格06-表格-合并单元格07-表单-input08-表单-input占位文本09-表单-单选框10-表单-上传多个文件11-表单-多选框12-表单-下拉菜单13-表单-文本域14-表单-label标签15-表单-按钮16-无语义-span和div17-字体实体19-注册登录页面 01…

分布式与一致性协议之一致哈希算法(二)

一致哈希算法 使用哈希算法有什么问题 通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,警告过计算寻址到了编号为1的服务器节点A,如图所示。 但如果服务器数量发生变化&#x…

嵌入式人工智能是一个怎样的概念呢?

嵌入式人工智能将会是未来几年人工智能发展的主要方向之一,并且会伴随着一系列的职位和角色的出现。虽然目前还没有嵌入式人工智能的确切定义,但随着人工智能的不断发展,它势必会延伸到边缘、终端和嵌入式市场。 嵌入式人工智能具有速度快、功…

NSSCTF | [SWPUCTF 2021 新生赛]jicao

打开题目&#xff0c;发现高亮显示了一个 php 脚本 这是脚本的内容 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;…

共享旅游卡免费旅游真实反馈,有图有真相?

新伙伴体验&#xff0c;云南昆大丽6天5晚品质双人游&#xff0c;真实反馈&#xff01;珠海伙伴蔡总&#xff0c;加入千益畅行共享旅游卡团队&#xff0c;自己亲自体验“云南昆大丽6天5晚品质双人游”真实反馈&#xff0c;分享全程内容截图&#xff0c;无半点虚假&#xff01; …

uniapp——点赞、取消点赞

案例 更新点赞状态&#xff0c;而不是每次都刷新整个列表。避免页面闪烁&#xff0c;提升用户体验 代码 <view class"funcBtn zan" click"onZan(index,item.id)"><image src"/static/images/circle/zan.png" mode"aspectFill&…

C# WinForm —— 15 DateTimePicker 介绍

1. 简介 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 dtp 开头Format设置显示时间的格式&#xff0c;包含Long&#xff1a; Short&#xff1a; Time&#xff1a; Custom&#xff1a;采用标准的时间格式 还是 自定义的格式CustomFormat自定…

干货教程【AI篇】| 目前全球最强AI换脸工具swapface详细图文教程及整合包下载

需要这个工具整合包的小伙伴可以关注一下文章底部公众号&#xff0c;回复关键词【swapface】即可获取。 从我们的链接下载&#xff0c;得到这个exe文件 双击运行即可进入安装界面 如下图所示已经在安装中啦 安装好之后我们根据上面的安装路径找到要执行的文件 双击红框中的…

【VTKExamples::Rendering】第五期 环形阵列Rotations

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例环形阵列Rotations,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Rotations

OIDC 与 OAuth2.0学习

OpenID Connect (OIDC) 和 OAuth 2.0 是两种不同的协议&#xff0c;它们通常一起使用&#xff0c;但服务于不同的目的。下面是它们的 主要区别和联系&#xff1a; OAuth 2.0 OAuth 2.0 是一个授权框架&#xff0c;它允许第三方应用代表用户获取对服务器资源的有限访问权限。…

PHP高级教程

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;PHP &#x1f4da;参考教程&#xff1a;菜鸟\编程网❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、PHP 多维数组 二、PHP date&#xff08;&#…

进程间通信(一)

IPC 在之前我们也有涉及到进程间通信的知识点&#xff0c;比如fork或exec或父进程读取子进程的退出码等&#xff0c;但是这种通信方式很有限&#xff0c;今天来学习进程间通信的其他技术——IPC&#xff08;InterProcess Communication&#xff09;。 IPC的方式通常有管道&…

【比邻智选】MF871U模组

&#x1f680;搭载国产芯&#xff0c;严苛测试&#xff0c;稳定可靠 &#x1f6e0;️R16特性加持&#xff0c;5G LAN&#xff0c;纳秒级精度 &#x1f310;超低成本&#xff0c;丰富协议&#xff0c;连接无界限

linux安装配置Docker保姆级教程

Docker到底是什么? Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&#xff0c;相互之间…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目录 关键词平台说明一、ORTI概述二、ORTI文件的生成三、ORTI文件的导入四、Trace 功能4.1 Trace 功能菜单介绍4.2 Trace功能的配置4.3 Trace MCDS 设置4.4 Task Switches断点的设置4.5 Trace 数据的录取4.6 CPU 负载和Task调度的查看 关键词 嵌入式、C语言、autosar、OS、BSW…

智慧公厕建设,打造智慧城市基础设施新亮点

公共厕所是城市基础设施的重要组成部分&#xff0c;而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务&#xff0c;推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标&#xff0c;跨越层级、地域、系统、部门和业务的限制…