在工程实际中,有时需要并行调用同一个子VI,这时就需要我们在异步调用的同时,将目标子VI设置为可重入。
一 在重入VI上启用同步调用
选项标签设置为0x40,可同时调用目标VI的多个实例,实例之间并行运行。如果在For循环中通过配置循环并行来使用“开始异步调用”节点,该选项标签可以启用并行运行,使得各个节点均可访问目标VI副本的数据空间,如不使用该选项标签,对同一目标VI的调用每次只执行一次,其他调用必须等待才能访问该数据空间。
二 范例讲解
将一个VI引用传递至多个开始异步调用节点时,LabVIEW默认情况下按顺序依次执行。要实现并行执行,首先将被调VI设置为重入VI,然后打开被调VI的引用时使用0x40选项。
在下图范例中,目标VI运行100毫秒,使用For循环将该目标VI异步调用10次,通过是否设置为0x40标签,对运行时间进行对比。
结果可以看出,设置为0x40标签后,目标VI并行执行,运行时间也大大降低。
在这个范例中,有几点需要注意:
1. 选项设为0x40,可对重入VI启用同步调用。如不传递0x40选项,则各个调用将串行执行;
2. 开始异步调用函数总是立即返回。只有传递0x40参数至“打开VI引用”函数,目标VI才会并行执行;
3. 当所有VI调用开始后,调用等待异步调用。本范例不收集输出,也不指定由哪个循环来处理某个异步调用;
4.如下图,调用填充异步调用池方法,可使异步调用的比较指标中不包括创建数据空间所花费的时间。
三 注意点
1.目标可重入VI是共享副本的;
2. 如包括了0x40选项,VI服务器属性和方法无法修改被调VI副本。这是因为一开始调用的就是目标VI的副本,而不是被调VI本身。因此,如在“打开VI引用”函数返回的VI引用上使用VI服务器属性或方法,则不能对实际调用的VI副本起作用。如要执行VI服务器任务(例如,打开或定位实际调用VI的前面板),必须在原重入VI中调用属性或方法。
本文所用范例资源随文附上,大家可自行查看测试。