LabVIEW重入:允许同时调用同一子VI

简介: LabVIEW重入:允许同时调用同一子VI

LabVIEW重入:允许同时调用同一子VI


默认情况下,LabVIEW配置VI用于不可重入执行。不可重入执行中,VI同时被其他VI调用作为子VI时,一次只可一个调用进入并执行子VI。LabVIEW确保非重入子VI的调用方轮流使用子VI。非重入VI只有单个数据空间存储调用方参数、执行中计算的任何临时值以及调用之间非重入VI保持的状态。但是,如果将VI配置为重入执行,LabVIEW可从所有调用方同时进入和执行重入VI。重入执行中,LabVIEW分配数据空间的多个实例或副本,使得调用方程序框图上每个调用点或子VI使用可并行同时执行,每个调用点使用一个单独的副本。


LabVIEW的重入VI类型如下:


非重入执行-LabVIEW为所有子VI实例分配一个数据空间。


共享副本重入执行-LabVIEW分配一个副本池在调用方之间共享,该副本池最初仅包含一个副本。调用方调用一个共享副本VI时,将从副本池取出一个副本并在调用结束执行后返回该副本。如调用方调用共享副本VI时副本池为空,LabVIEW将为调用新建一个副本,并在执行结束后将副本返回副本池,因此副本池不断增大。


预分配的副本重入执行-LabVIEW为每个子VI使用分配单独的、非共享副本。


关于VI重入设置的详细信息,请参考VI属性对话框的执行页。


选择使用的重入类型

image.png


异步调用重入VI的多个实例


关于异步调用重入VI的详细信息,请参考异步调用VI的多个实例实现并行执行。


查看重入VI实例的前面板


每个副本都有单独的前面板。如要在VI副本不运行时查看VI前面板,双击要查看的子VI。也可将重入VI设置为执行时打开前面板。子VI的标题栏包含(副本)表示该VI是副本,而不是原VI。如要从副本访问原VI,选择查看»浏览关系»可重入项。也可在子VI使用前面板:打开方法,通过程序在副本运行时打开各个副本的前面板。子VI标题栏包含(副本)表示当前VI为副本。


重入VI的前面板与非重入VI的前面板交互方式类似,尤其在以下方面:


配置事件结构处理前面板对象的事件


将前面板作为子面板使用


通过属性和方法配置控件


重入执行的范例


以下部分为重入VI进行等待和不共享数据的示例。


保证子VI实例的同步执行


下列程序框图是用来提醒用户午饭时间和休息时间已到。必须对Alarm Timer VI的重入属性进行设置才能保证有理想的结果。

542fdcc351228615bd2ca3662ad8f507.png

用户指定一个午饭时间和休息时间。假设午饭时间为12:00pm,休息时间为10:00am。


Alarm Timer VI等待指定时间。AlarmTimer VI的实例位于程序框图的并行部分,无法预测哪一个实例先执行。假设午饭时间定时器先运行。


如AlarmTimer VI被配置为不可重入执行,休息时间定时器无法在12:00pm之前开始运行,必须等到午饭时间定时器完成执行。这个延迟机制使休息时间定时器无法在10:00am触发一个提醒。为了保证各个子VI实例在合适的时间被触发,必须配置Alarm Timer VI为重入执行。


在调用子VI实例之间存储数据


如需保持特定调用点子VI调用之间的状态,必须使用预分配副本重入执行。例如,创建一个ExpAvg VI用于计算已传递至VI的最新四个数据点的指数平均。LabVIEW可将最新四个数据点作为状态,保存在单个迭代While循环未初始化的移位寄存器中。


另一个VI用ExpAvg子VI来计算两个数据采集通道的指数平均。这个VI监视采集过程中两个点的电压并将计算的结果显示在带状图表上。这个VI程序框图包括两个ExpAvg子VI的实例。两个调用轮流进行-一个分配给0通道,另一个给1通道。假设0通道先运行。如果ExpAvg不是可重入的,通道1调用时使用了通道0的计算结果,通道0调用时又使用了通道1的计算结果。如果ExpAvg是可重入的,每个调用就可以独立运行而不相互共享数据。


覆盖定时结构中重入设置


(Real-Time,Windows)可将LabVIEW配置为在定时循环或定时顺序结构中预分配或共享重入VI的副本。例如,如在定时循环或定时顺序结构中放置一个重入VI的共享副本,可将结构设置为预分配在结构中调用的重入VI的实例副本。在结构外调用的重入VI实例将继续共享副本。要在定时循环或定时顺序结构中设置VI的分配,右键单击结构选择共享副本分配,从下列选项中选择:


自动-LabVIEW根据结构所在的环境决定是否将结构设置为预分配或按需分配。LabVIEW将把文本添加至快捷菜单项,以表示LabVIEW选择的设置。例如,如LabVIEW选择预分配,菜单项变为自动(预分配)。


预分配-LabVIEW为每个从结构中调用的重入VI创建一个副本VI。定时循环或定时顺序结构将显示一个图标,表示LabVIEW为结构中的任何重入VI分配副本。


按需分配-只有从结构内调用重入VI时,LabVIEW才创建一个副本。定时循环和定时顺序结构将显示一个图标,表示LabVIEW在结构内共享任何重入VI的副本。


调试重入VI


如需调试某个重入VI,可选择文件»VI属性显示VI属性对话框,从下拉菜单中选择执行并勾选允许调试复选框。


如要调试某个预分配副本的实例,打开子VI的相关实例。无法编辑副本VI,但是可以查看VI程序框图。例如,设置断点、创建探针、启用高亮显示执行过程和单步执行。


要调试共享副本的VI实例,需在源VI中使用断点、探针和启用高亮显示执行过程。副本VI无法在调用之间保持上述设置。。


上文中提到的例子和资料,均在word中的附件里,可点击下载。


   需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目问题,可联系我们。

相关文章
|
JavaScript 前端开发 Java
前端开发者眼中的Node.js未来发展趋势
随着互联网的高速发展,前端开发领域的技术也在不断演进,各种各样的前端技术日新月异,前端框架也是层出不穷。在这个变化的过程中,Node.js作为一种强大的服务器端运行环境,已经成为前端开发者的重要技术之一,Node.js以其高效的非阻塞I/O模型和可伸缩性,为前端开发者提供了许多优势,而且Node.js越来越成为全栈工程师比较喜欢的技术栈,Node.js作为一种流行的服务器端运行环境,已经在前端开发领域扮演了重要的角色。在不断变化的技术环境下,在前端开发者眼中的Node.js未来发展趋势是什么呢?它是否有可能在前端领域一家独大?那么本文就来聊聊前端开发者眼中的Node.js未来发展趋势。
545 1
前端开发者眼中的Node.js未来发展趋势
LabVIEW异步调用VI的多个实例实现并行执行
LabVIEW异步调用VI的多个实例实现并行执行
472 1
|
NoSQL Java 关系型数据库
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
521 0
|
安全 测试技术 Windows
LabVIEW版本、硬件驱动和Windows版本之间兼容性
LabVIEW版本、硬件驱动和Windows版本之间兼容性
358 2
|
存储
LabVIEW谨慎使用局部变量和全局变量
LabVIEW谨慎使用局部变量和全局变量
223 1
QML 界面切换的方法
QML 界面切换的方法
759 1
|
大数据 数据处理 计算机视觉
使用LabVIEW进行大数据数组操作的优化方法
使用LabVIEW进行大数据数组操作的优化方法
372 3
|
NoSQL Go API
Redis Hset使用中的小坑
文章讨论了在使用Redis的HSet命令时的一个常见误区,即错误地根据命令的返回值(true/false)来判断数据是否成功插入,而实际上应通过检查错误对象(err)来判断操作是否成功。
172 0
|
安全 开发者
LabVIEW程序退出后线程仍在运行问题
LabVIEW程序退出后线程仍在运行问题
295 2
|
Linux iOS开发 MacOS
LabVIEW配置前面板
LabVIEW配置前面板
396 2