LabVIEW动态调用VI及调用路径问题

在LabVIEW程序设计中,调用VI一般分为静态调用和动态调用,静态调用是指被调用VI在VI调用程序的程序框图上直接放置子VI,它与VI调用程序同时加载,而且常驻内存 ,直至调用它的VI运行结束。动态调用VI是指在调用程序运行时动态加载VI,执行完后从内存卸载,自动释放内存,动态调用VI又分为通过引用调用节点(严格类型的VI引用)的动态调用和通用(我这么称呼的)动态调用。通过引用调用VI不仅指向被调用的VI,还指向被调用VI的连线板,这样我们就可以向被调用VI传递参数,并获得被调用VI的输出参数。
在实际应用中,对于需要向其传递参数、进行复杂数据处理、且不需要显示界面的子VI调用,我一般采用通过引用节点的动态调用;如果只是动态调用子VI,显示其界面进行相关操作,我通常采用通用动态调用。下面我们通过示例说明两种动态调用方法。

1. 通过引用调用节点的动态调用

先创建一个子VI,文件名为add.vi,其作用是两个浮点数相加,设置连线板,输入端分别指向两个加数,输出端指向两个加数的和,其前面板和程序框图如下图所示。
这里写图片描述

设计一个调用VI,文件名为CallVIByRef.vi,实现通过引用节点动态调用add.vi(调用时add.vi不显示前面板),其前面板和程序框图如下图所示。
这里写图片描述

2. 通用动态调用

除了通过引用动态调用VI外,还有一种动态调用VI,我叫它通用动态调用VI,以下是其程序框图。
这里写图片描述

上图中,“运行VI”调用节点的“Wait Until Done”属性设置为False,表示被调用VI被执行、显示界面后,调用VI还可以继续去干别的事情,这相当于显示调用了一个无模态对话框。如将“Wait Until Done”属性设置为True,则表示执行模态对话框调用,即被调用VI关闭后,调用VI才能继续干别的事情程序框图如下图所示。
这里写图片描述
以上两种(模态和无模态调用VI)调用方式,被调用VI执行完毕后需要自己关闭前面板,如下图所示。
这里写图片描述

3. 被调用VI的路径问题

在动态调用VI时,经常发生在开发环境下能正常调用VI,一旦打包成执行文件后,调用就出现了异常,原因是打包后LabVIEW会把exe文件看作是一层目录,这样按以前相对路径关系就找不到被调用VI了,所以出现了异常。
读者可以参考网上的解决办法,笔者也提出一种解决办法:先看下面的项目。
这里写图片描述
通过测试分析,不管是开发环境下还是打包成执行文件,如果把LabVIEW项目根目录的Main.vi作为当前VI,那项目下所有VI和main.vi的相对路径关系就确定了(注意必须是磁盘上文件路径关系,不是虚拟文件夹中的文件路径关系)。在程序中,先调用“拆分路径”函数节点得到main.Vi所在文件的绝对路径,再调用“创建路径”函数节点得到所调用VI的路径(含被调用VI文件名),如下图所示。
这里写图片描述
在Main.vi中,如要调用项目中的“VIFromSubPath.vi”文件,则上图中的“调用VI路径及文件名”赋值为“SubPath\VIFromSubPath.vi”,如要调用“VIFromSubVI.vi”,则“调用VI路径及文件名”赋值为“SubPath\SubVI\VIFromSubVI.vi”。这样,不管是打不打包,调用路径关系都是正确的。
撰写此文主要是备忘,也希望对读者有所帮助。

以上示例vi(LabVIEW 2012下设计)放在百度网盘上,有兴趣的读者可以下载使用 。
vi下载地址:DynamicCall.rar

LabVIEW中,可以通过动态调用VI的方式来实现在运行时决定调用哪些VI的功能。动态调用VI可以在不修改代码的情况下,根据不同的条件或用户的输入来选择不同的VI进行调用,从而实现更灵活和可扩展的程序设计。 实现动态调用VI的一种常见方法是使用VI Server功能。VI Server是LabVIEW提供的一种机制,允许通过网络或本地方式对LabVIEW程序的VI进行远程访问和控制。通过VI Server,我们可以在主VI中通过编程的方式调用其他VI。 首先,我们需要将需要动态调用VI保存为独立的子VI,并为其设置适当的输入和输出参数。然后,在主VI中,我们可以使用VI Server的功能来获取所有可用的VI的信息,然后根据条件选择需要调用VI。通过获取VI路径和名称,我们可以使用"Open VI Reference"函数来打开VI引用。然后,我们可以使用"Call By Reference"函数来调用VI,并将输入参数传递给被调用VI。最后,我们可以使用"Close Reference"函数关闭VI引用。 值得注意的是,在动态调用VI时,需要确保被调用VI与主VI具有相同的数据类型和接口,以确保数据的正确传递和处理。此外,动态调用VI还可以配合LabVIEW的事件驱动架构,使程序根据不同的事件触发自动调用不同的VI,从而实现更灵活和智能的程序控制。 总而言之,通过LabVIEWVI Server功能,我们可以实现在运行时动态调用VI的功能,从而使程序更加灵活和可扩展。使用动态调用VI可以根据不同的条件或事件选择不同的VI进行调用,从而实现更智能和适应变化的程序设计。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值