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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:二叉搜索树的底层模拟实现

概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 搜索二叉树的操作: int a[] {8, 3, 1, 10, 6, 4, 7, 14, 13};二叉搜索树需要满足左子树比根小,右子树比根大,…

2024第十六届“中国电机工程学会杯”数学建模A题B题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

SQL注入(sqli-labs第一关)

sqli-labs第一关 方法一:手工注入 来到第一关,图上说我们需要一个数字的参数 于是我们先手工注入?id1 and 11 跟?id1 and 12发现页面没有报错 每张截图上面页面中有select查询语句,这是我在第一关的源码中加上了echo "$sql ";…

若依修改表格滚动条宽度

找到目录ruoyi-ui/src/assets/styles/ruoyi.scss 添加滚动条样式 //修改滚动条的宽度和高度(横向是高度,纵向是宽度)::-webkit-scrollbar {width: 14px;height: 14px;background-color: transparent;}

A计算机上的程序与B计算机上部署的vmware上的虚拟机的程序通讯 如何配置?

环境: 在A计算机上运行着Debian11.3 Linux操作系统;在B计算机上运行着Windows10操作系统,并且安装了VMware软件,然后在VMware上创建了虚拟机C并安装了CentOS 6操作系统 需求: 现在A计算机上的程序需要同虚拟机C上的软…

思维导图在线怎么制作?推荐这些工具

思维导图在线怎么制作?在如今的快节奏时代中,思维导图作为一种高效的信息组织与思考工具,受到了广泛的应用。在线制作思维导图成打破了时间和空间的限制,使得团队协作变得更加便捷,个人创作也更为灵活。以下是四款备受…

如何将一个VPS上的网站全部迁移至另外一个VPS服务器

最近我们老的VPS即将到期,由于近期Hostease的VPS活动力度较大,我们购买了Hostease的VPS,购买后需要将原服务器的所有网站迁移到Hostease提供的VPS中。在Hostease技术人员的帮助下,我们成功进行了迁移,下面我就介绍此次…

信息收集方法合集 第1期

前言 在工作中,经常被问到某个文件怎么下载,原文来自哪里。索性把我知道的所有信息收集方法全部整理一遍,希望对大家有用,如果有帮助到你,非常荣幸,我会坚持分享我的学习、工作经验。 信息种类&#xff1…

JAVA毕业设计138—基于Java+Springboot+Vue的医院预约挂号小程序(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的医院预约挂号小程序(源代码数据库)138 一、系统介绍 本系统前后端分离带小程序和后台 小程序(用户端),后台管理系统&a…

SR3-05S电机保护器 施耐德 EOCR-SR3

EOCR-SR3电机保护器 施耐德 EOCR主要产品有电子式电动机保护继电器,电子式过电流继电器,电子式欠电流继电器,电子式欠电压继电器,其它保护和监视装置,电流互感器。 系列型号: EOCR-SR3-05S EOCR-SR3-30…

C++数据结构之链表树图的存储

本文主要介绍用数组存储,结构只做简单介绍 目录 文章目录 前言 结构体实现 1、链表的存储 2、树的存储 3、图的存储 数组实现 1、链表实现 2、树和图的实现 总结 前言 在正常工程中,我们通常使用结构体或者类,来定义并使用如链表…

老板必读:防数据泄露,保卫您的商业秘密

在信息技术高速发展的今天,数据泄露已成为所有企业都必须正视的风险。对于企业而言,数据不仅仅是一堆数字和信息的集合,更是企业的核心竞争力与商业秘密的载体。一旦数据泄露,不仅会导致经济损失,还可能使企业信誉受损…