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.mzph.cn/news/835607.shtml

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

相关文章

【Web后端】servlet基本概念

1.ServletAPI架构 HttpServlet继承GenericServletGenericServlet实现了Servlet接口,ServletConfig接口,Serializable接口自定义Servlet继承HttpServlet 2.Servlet生命周期 第一步:容器加载Servlet第二步:调用Servlet的无参构造方法&#xf…

【生信技能树】数据挖掘全流程

R包的安装,每次做分析的时候先运行这段代码把R包都安装好了,这段代码不需要任何改动,每次分析直接运行。 options("repos""https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packag…

TFS(淘宝分布式存储引擎

TFS(淘宝分布式存储引擎) 什么是TFS? ​ 根据淘宝2016年的数据分析,淘宝卖家已经达到900多万,有上十亿的商品。每一个商品有包括大量的图片和文字(平均:15k),粗略估计下,数据所占的…

IaC实战指南:DevOps的自动化基石

基础设施即代码(Infrastructure as Code,IaC)是指利用脚本、配置或编程语言创建和维护基础设施的一组实践和流程。通过IaC,我们可以轻松测试各个组件、实现所需的功能并在最小化停机时间的前提下进行扩展。更值得一提的是&#xf…

ETLCloud中如何执行Java Bean脚本

ETLCloud中如何执行Java Bean脚本 在ETLCloud这一强大的数据集成和转换平台中,执行Java Bean脚本的能力为其增添了更多的灵活性和扩展性。Java Bean脚本不仅仅是一段简单的代码,而是一种强大的工具,可以帮助用户定制和优化数据处理的每一个环…

按键配合LDO实现开关功能

今天给大家分享一个学到的按键开关电路,适合没有足够空间给自锁开关的场景,既可以用于USB供电控制也可以用于电池供电控制。话不多说上电路图先。 核心任务就是通过按键控制LDO芯片的使能管脚的电平状态,这枚NCP芯片高电平使能,VB…

代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 (进阶) 思路: 我们之前做的 爬楼梯 是只能至多爬两个台阶。 这次改为:一步一个台阶,两个台阶,三个台阶,.......,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢&a…

Q1季度空气净化器行业线上市场(京东天猫淘宝)销售数据分析

随着人们对健康生活方式的追求,以及消费升级的推动,空气净化器市场正在逐步恢复增长态势。 根据鲸参谋数据显示,今年Q1季度空气净化器在线上市场(京东天猫淘宝)综合销量超90万件,同比去年增长4%&#xff1…

【Java orm 框架比较】十一 新增 原生jdbc对比

迁移到(https://gitee.com/wujiawei1207537021/spring-orm-integration-compare) orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db、原生jdbc…

1055: 邻接矩阵到邻接表

解法&#xff1a; #include<iostream> using namespace std; int arr[100][100]; int main() {int n;cin >> n;for (int i 0; i < n; i) {for (int j 0; j < n; j) {cin >> arr[i][j];}}for (int i 0; i < n; i) {for (int j 0; j < n; j) …

中东电商Noon测评Hepsiburada贺百狮,Souq,Temu,Nice One,MEIG如何自己养号补单?

养买家号进行中东跨境电商测评&#xff0c;是一个需要细心和技术的过程&#xff0c;特别是在不同的电商平台上Noon&#xff08;Namshi&#xff09;、Hepsiburada&#xff08;贺百狮&#xff09;、Souq&#xff08;亚马逊&#xff09;、Nice One、MEIG、Wadi、Temu。需要搭建完整…

洁净环境微生物监测的解决方案

药品污染控制 Manufacturing 无菌药品生产污染控制意义 01 CCS策略 无菌药品生产污染控制策略&#xff08;CCS) &#xff1a;来自于现行产品和工艺理解&#xff0c;为确保工艺性能和产品质量&#xff0c;所计划的一套体系&#xff0c;针对微生物、热原/内毒素和微粒的控制方…

图论(洛谷刷题)

目录 前言&#xff1a; 题单&#xff1a; P3386 【模板】二分图最大匹配 P1525 [NOIP2010 提高组] 关押罪犯 P3385 【模板】负环 P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; SPFA写法 Dij写法&#xff1a; P3385 【模板】负环 P5960 【模板】差分约束…

Docker 容器中 PHP 使用 Curl 访问本地服务异常

在 Docker 环境中&#xff0c;将应用程序和服务容器化是常见的做法&#xff0c;但是有时会遇到一些网络通信方面的问题。其中一个常见的问题是 PHP 容器无法使用 Curl 访问本地服务&#xff0c;这可能导致开发和调试过程中的困扰。 问题描述 通常情况下&#xff0c;我们会将 …

系统代理开启时,钉钉页面加载失败等问题处理

若Windows端钉钉点击工作台/文件提示“页面加载失败”&#xff0c;可先将钉钉升级到7.1.10及以上版本&#xff1b;若依旧报错&#xff0c;可通过以下方法操作&#xff1a; 1、【电脑端钉钉】-【登录页面】-【切换到密码登录页面】-【网络设置】-切换为【不使用代理】&#xff…

mysql NDBcluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…

UE5 重定向时 APose和TPose 问题

我用了这个解决↓ IK Rig Animation Retargeting in Unreal Engine | Unreal Engine 5.0 Documentation | Epic Developer Community (epicgames.com) 这个可以参考↓ 虚幻引擎中的重定向管理器 |虚幻引擎 5.0 文档 |Epic开发者社区 (epicgames.com)

AI伦理和安全风险管理终极指南

人工智能&#xff08;AI&#xff09;正在迅速改变各个领域的软件开发和部署。驱动这一转变的两个关键群体为人工智能开发者和人工智能集成商。开发人员处于创建基础人工智能技术的最前沿&#xff0c;包括生成式人工智能&#xff08;GenAI&#xff09;模型、自然语言处理&#x…

ASP.NET网上鲜花销售系统的设计

摘 要 本系统实现了一般电子商务所具备的功能&#xff0c;如商品浏览、用户登录注册、网上与购物、结算、后台数据库管理等&#xff0c;利用这些功能可以对鲜花销售信息进行较好的管理。 网上鲜花销售系统的使用者主要是客户和销售管理者&#xff0c;对于客户来说&#xff0…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序&#xff0c;第一段程序要求如下&#xff1a; 判读字符串里面是否含有特殊字符&#xff0c;这里说的特殊字符不包括键盘上能够输入的字符&#xff0c;如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…