简单而言,动态调用指的是通过程序控制另外一个程序的运行、停止、赋值和获取值等。LabVIEW提供了多种动态调用的方式,从底层而言是通过VI Server技术实现的。
图 31所示为LabVIEW中的Application Control选板,动态调用所使用的节点都位于这个选板。当调用一个在硬盘、内存甚至是网络路径上的vi时,首先要使用Open VI Reference以将该VI载入内存并获取VI的“句柄(Reference)”;然后再使用该句柄进行其它的控制操作;最后再关闭该VI的句柄避免内存泄漏,这就完成了一次对VI的调用。
图 31 Application Control选板
图 32是一个动态调用的具体实现代码,首先使用Open VI Reference获取被动态调用VI的Reference(例子中是C:average.vi);再使用Call By Reference Node节电动态运行该VI;最后关闭VI的Reference。在使用Call By Reference Node时需要事先指定被调用VI的输入输出接口,也就是说这种动态调用的前提是必须知道被调用VI的输入输出接口,否则无法进行动态调用。
图 32 VI的动态调用
Open VI Reference的路径输入是一个多态的输入口,也可以使用String输入,如图 33所示。此时被调用的VI必须在内存中,且输入的是被调用VI的文件名。值得一提的是这种“文件名”调用方式在可执行程序中是无法被调用的,因此建议最好采用路径的调用方式。
图 33 Open VI Reference的多态性
【应用5】
图 34所示为Fibonacci数列在LabVIEW中递归的实现方式。case结构有两个分支,当n<=2时直接输出f(n)=1;当n>=3时,输出f(n)=f(n-1)+f(n-2)。此时需要把VI设置为可重入状态。
图 34 Fibonacci数列
VI本身是有很多的属性和方法的,如图 35所示。使用这些方法就可以动态控制VI的运行、停止和赋值,各个属性节点和方法的具体含义见LabVIEW的帮助文档。使用这种方式动态调用VI时,并不需要知道VI的输入输出接口。
图 35 VI Method
图 36是该使用“属性节点和方法”实现动态调用的一个实例。在大多数应用程序启动时会显示一个启动画面用来显示版权、开发单位、软件版本等信息,等待2秒之后关闭启动界面并启动应用程序主界面。图中使用了动态调用的方式启动主程序(Main.vi)并使主程序独立运行,首先运行程序后设置2秒钟的延时;其次,将启动画面的界面设置为“隐藏”(并没有退出内存,只是隐藏了前面板),并且使用Open VI Reference获取VI的句柄;然后使用FP.Open属性打开主程序的前面板(只是打开了前面板并没有运行);使用Run VI方法运行主程序,将Wait Until Done设置为false,这样就可以保证被调用VI的独立运行;最后,关闭当前VI的前面板。
图 36 VI的动态调用
通过Highlight工具看出该VI的运行是独立的,并没有等待Main.vi运行结束才继续执行。
关键字:LabVIEW 程序设计模式 动态调用
引用地址:LabVIEW程序设计模式(五)—生产者/消费者模式(3)
图 31所示为LabVIEW中的Application Control选板,动态调用所使用的节点都位于这个选板。当调用一个在硬盘、内存甚至是网络路径上的vi时,首先要使用Open VI Reference以将该VI载入内存并获取VI的“句柄(Reference)”;然后再使用该句柄进行其它的控制操作;最后再关闭该VI的句柄避免内存泄漏,这就完成了一次对VI的调用。
图 31 Application Control选板
图 32是一个动态调用的具体实现代码,首先使用Open VI Reference获取被动态调用VI的Reference(例子中是C:average.vi);再使用Call By Reference Node节电动态运行该VI;最后关闭VI的Reference。在使用Call By Reference Node时需要事先指定被调用VI的输入输出接口,也就是说这种动态调用的前提是必须知道被调用VI的输入输出接口,否则无法进行动态调用。
图 32 VI的动态调用
Open VI Reference的路径输入是一个多态的输入口,也可以使用String输入,如图 33所示。此时被调用的VI必须在内存中,且输入的是被调用VI的文件名。值得一提的是这种“文件名”调用方式在可执行程序中是无法被调用的,因此建议最好采用路径的调用方式。
图 33 Open VI Reference的多态性
【应用5】
本例将使用LabVIEW的动态调用方式实现斐波那契数列(Fibonacci数列)。斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21…… 这个数列从第三项开始,每一项都等于前两项之和。在数学上表述为:f(n)=f(n-1)+f(n-2),其中n>=3,f(1)=f(2)=1。
显然这是一个比较熟悉的递归调用,但是在LabVIEW中似乎很难实现。由于LabVIEW不允许同名的VI同时在内存中,因此一个VI是无法VI调用本身的。但是,通过VI的可重入技术和动态调用技术却可以实现VI的递归调用。图 34所示为Fibonacci数列在LabVIEW中递归的实现方式。case结构有两个分支,当n<=2时直接输出f(n)=1;当n>=3时,输出f(n)=f(n-1)+f(n-2)。此时需要把VI设置为可重入状态。
图 34 Fibonacci数列
同理我们也可以使用这种递归的方式实现f(n)=n!的算法,从数学上可以写作f(n)=n*f(n-1),其中n>=1,f(0)=1。具体的实例将不再详述。此外,递归算法的效率比较低,在实际应用中应谨慎使用。
打开Highlight工具,在Call By Reference Node运行时,程序是处于等待状态的,只有被调用的VI运行完毕,主程序才会继续执行。这似乎无法解决在本节开头提到的问题,那么是否存在一种动态调用方式使被调用的VI与主VI之间分别独立运行呢?答案是肯定的。VI本身是有很多的属性和方法的,如图 35所示。使用这些方法就可以动态控制VI的运行、停止和赋值,各个属性节点和方法的具体含义见LabVIEW的帮助文档。使用这种方式动态调用VI时,并不需要知道VI的输入输出接口。
图 35 VI Method
图 36是该使用“属性节点和方法”实现动态调用的一个实例。在大多数应用程序启动时会显示一个启动画面用来显示版权、开发单位、软件版本等信息,等待2秒之后关闭启动界面并启动应用程序主界面。图中使用了动态调用的方式启动主程序(Main.vi)并使主程序独立运行,首先运行程序后设置2秒钟的延时;其次,将启动画面的界面设置为“隐藏”(并没有退出内存,只是隐藏了前面板),并且使用Open VI Reference获取VI的句柄;然后使用FP.Open属性打开主程序的前面板(只是打开了前面板并没有运行);使用Run VI方法运行主程序,将Wait Until Done设置为false,这样就可以保证被调用VI的独立运行;最后,关闭当前VI的前面板。
图 36 VI的动态调用
通过Highlight工具看出该VI的运行是独立的,并没有等待Main.vi运行结束才继续执行。
上一篇:LabVIEW程序设计模式(五)—生产者/消费者模式(4)
下一篇:LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性
推荐阅读最新更新时间:2024-03-30 23:02
Labview生成exe可执行文件后相对路径无法使用的问题解决
在LabVIEW编程过程中,常常用到 当前VI路径 模块,将其和 创建路径 模块结合使用,就可以得到VI所在目录下的任何一个路径。然而当把vi文件打包成exe文件之后,因为labview回把exe视作是额外的一层目录,因此会导致依赖相对路径的各部分功能无法运转。 解决办法: 针对要生成exe的vi文件,将与相对路径相关的部分进行修改,在 当前VI路径 模块后面额外增加一个 拆分路径 模块,即比正常调试时多使用一个 拆分路径 ,如此生成后,只要将依赖相对路径的文件按照原先vi与文件的路径关系放置好,exe即可正常运行。 不过这样改过以后原先的vi中的相对路径就不对了,如果要一劳永逸,可以写一个简单的路径处理的子vi,放在 当前
[测试测量]
利用NI LabVIEW和PXI进行诊断声纳
The Challenge: 创建一个用于快速采集面向高级无损探伤应用的超声相控阵列回波信号的、可伸缩的、低成本系统。 The Solution: 利用NI PXI 控制器与机箱、多通道高速量化仪和可重新配置的I/O FPGA 实时控制器,以及NI LabVIEW 软件,设计一个具有严格定时与同步的可扩展的采集系统,以执行面向实时超声图像处理的相控阵列数据采集。 "PXI-5105 所提供的解决方案可以扩展以满足客户的需求,并具有提供简单的软件移植方式的记录功能。" 背景 超声相控阵列已经在医学图像处理领域内应用多年,但由于成本和复杂度的限制,该技术直到最近才在无损探伤(NDE)领域实现有限的成功应用。诊断声纳有限
[测试测量]
基于Labview的自动化精密阻抗分析系统构架
0 引言 随着科学技术的进步,各类实验研究的对象和方法也越来越复杂,相对应的实验系统及实验平台的复杂度也成几何增长。传统的人工操作在精确度及重复性上已远远不能满足要求。于是仪器设备的高度可集成化和可自动化已成为当代仪器必不可少的特性。但不同实验系统所要求的测量参数和步骤均不同,因此所需要的实验仪器系统同时也应该是可模块化并且可自主集成的。虚拟仪器(VIs)概念的提出使得可以利用传统的仪器设备来搭建不同的实验平台。并且由于VI是可编程和可程控的,这样可以依据不同的实验要求来改变实验平台的设计。基于VI的平台相比较于商业化的集成平台有着显著的优势:a.利用各类传统仪器即可搭建复杂的系统;b.平台的功能可以通过程序的改变而简单地变换;
[测试测量]
基于LabVIEW的多点温度采集实验开发系统设计
摘要:文中运用LabVIEW灵活的图形化可视化编程技术,将单片机课程与虚拟仪器技术相结合,设计了基于LabVIEW的多点温度采集处理演示及实验系统。该系统以DS18B20为温度传感器,利用单片机为核心控制器设计了多点温度数据采集下位机系统;利用LabVIEW设计出具有良好界面的多点温度数据采集上位机控制系统。该系统具有实时数据采集、数据显示、数据处理与分析、超限报警以及数据回放等功能。该系统交互性较好,可激发学生的学习兴趣和创新意识。 在对多类型、多通道信号同时进行检测和控制中,传统的测控系统能力有限。如何将计算机与各种设施、设备结合。简化人工操作并实现自动控制,满足社会的需求,成为一个很迫切的问题。温度检测是现代检测技术的重
[测试测量]
基于labview的烟雾报警系统
[测试测量]
NI盛夏邀你去冰城共享高校电子教学盛宴
盛夏时节,酷暑难耐。美国国家仪器有限公司(National Instruments,简称NI)公司借暑假之际在凉爽的哈尔滨布置好大舞台,邀请全国电子和测试方面的老师和同学们共赴冰城参加一年一度的NI全国高校教师交流会,同时现场观摩第三届全国虚拟仪器大赛决赛的盛况。 两年一届的第三届全国虚拟仪器大赛决赛将于2015年7月13-14日在哈尔滨工业大学举行。全国虚拟仪器大赛始于2011年,由中国仪器仪表学会、教育部高等学校仪器类专业教学指导委员会主办,哈尔滨工业大学承办,美国国家仪器公司(NI)协办。作为由高校、行业协会和全球知名科技公司携手共建的拔尖创新人才的培养载体和卓越工程师的孕育平台,该大赛是全国工科类院校公认的
[测试测量]
CompactRIO和LabVIEW控制心脏模拟器设计
3D模拟器 挑战:开发一个逼真、可靠和可重新配置测试环境,帮助最新的心脏辅助装置进行提高和改善,而无需进行动物试验。 解决方案:利用NI CompactRIO创建一个独立的硬件在环(HIL)测试环境。该测试环境可以把人工机械心脏与循环血流模型相结合,创造一个包含真实血液动力环境的生动的解决方案。 CompactRIO提供了一个坚固、可靠、独立的平台,使我们的团队能够进行持续性测试,这在普通的计算机上是不可能实现的。 由心脏病导致的死亡占发达国家所有死亡人口的将近一半。心脏移植仍然是治疗心脏病最有效的方式,但捐献的器官远远及不上需求。为了解决这种不平衡情况,目前人们正在研究使用。利兹大学正在开发的一种新颖的机械人工心脏
[测试测量]
小广播
热门活动
换一批
更多
最新测试测量文章
更多精选电路图
更多热门文章
更多每日新闻
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位
更多往期活动
11月13日历史上的今天
- 华为Mate 20系列竞争 分析师下调iPhone XR约3000万部预估出货量
- 为人工智能而生,英特尔公布Cascade Lake-AP处理器详细性能数
- 贸易战恐造成苹果供应链的台湾厂商最大规模迁徙
- 中国面板设备需求旺盛,盟立借此纯利润年增207%!
- 苹果承认iPhone X存在屏幕触控问题,用户提出可免费更换
- 前三季汇兑损失超230% 华天科技2018年净利或将减少30%
- 多项目处于研发投入中 长盈精密前三季度净利下降67.21%
- 投资收益大幅下降,上海贝岭前三季度净利同比下降42%
- 元器件涨价成本提升,东软载波前三季度净利下滑44%
- 弘信电子拟定增2080万股募资 用于提高SMT产能自给
厂商技术中心