LabVIEW使用VI服务器的调用节点将数据传递到另一个VI
注意第二个:使用调用节点(Invoke Node)与通过引用调用节点(Call by Reference)调用VI时有什么差别?
可以使用按引用节点调用来动态调用VI。允许将值传递给控件并从指示器返回值。此方法是使用VI服务器将数据传递到VI的首选方法。有关更多信息,请参阅通过引用调用VI和通过调用节点调用VI与通过引用节点调用VI之间的区别
还可以使用“设置控件值”和“获取控件值”方法来完成此任务。要使用此方法,必须先使用打开VI引用功能打开对VI的引用,然后在调用运行VI调用节点之前使用单独的调用节点传递数据。该过程需要为将数据传递到的每个控件提供一个调用节点。必须知道控件的名称及其数据类型。可以使用调用节点的“设置控制值”方法或“设置控制值 [变体]”方法来传递数据。必须确保名称和数据类型匹配,否则将收到一条错误消息,指出输入参数无效。如果要从VI中提取信息,则需要为要从中检索信息的每个指标创建一个单独的调用节点。使用获取控件值或获取控件值 [变体] 方法检索信息。
使用调用节点(Invoke Node)与通过引用调用节点(Callby Reference)调用VI时有什么差别?
解决方案
在通过引用调用VI时,使用调用节点和通过引用调用节点的主要差别在于编程的便捷性以及结构的灵活性。当使用通过引用调用节点时,必须连线严格类型引用。严格类型引用中包括含有数据类型的连线板以及指向VI的引用。因此,当使用通过引用调用节点时,LabVIEW已知数据类型并在节点中创建连线板。通过这个方法,能够实现动态加载VI,同时获得简单连线的便捷性。
当使用调用节点时,LabVIEW忽略是否使用严格类型引用。因此能够传递任何VI到调用节点并运行。由于不需要限定类型以及调用具有相同连线板的VI,使用调用节点大大增加了灵活性。但是,如果要传递值,则需要知道控件及其数据类型的名称 ,这需要额外的编程。如果想做的只是打开前面板并运行VI,那么调用节点也是一个简单的方法。考虑到能够传递任何VI路径并且打开加载该VI,这个方法显得更加灵活。
使用调用节点调用VI的另一个好处是它提供了与VI交互的能力。如果VI需要被控制或者输出需要多次读取,调用节点的方法能够与VI交互以实现所需功能。使用通过引用调用节点时,在VI结束执行后连线板会输出结果,但它不提供与运行中VI交互的能力。
如果要异步调用目标VI,请使用开始异步调用节点(Start Asynchronous Call Node)而不是通过引用调用节点(Call by Reference Node)。这将允许目标VI在单独的线程上运行。
使用调用节点的方法可能会在UI线程中运行目标VI,如果希望在调用VI运行时让被调用VI充分执行,则可能会导致一些问题。即使有一个False常量连接到结束前等待(Wait Until Done)终端,也会发生这种情况。对于单独线程中的完整异步调用,需要修改目标VI的执行设置,方法是转到文件»VI属性(File»VI Properties),在对话框中选择执行(Execution),然后选择不同于用户界面或与调用者相同的执行系统。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。