您可以通过在TestStand中使用
异步运行 VI步骤类型来实现。这将在一个新线程中运行VI,使您的TestStand序列可以继续执行该步骤。要异步调用VI,请遵循以下步骤。
首先,必须准备好要由LabVIEW中的TestStand启动和停止的VI。
- 在VI的前面板上,从
Controls Palette»Refnum»Automation Refnum
放置一个自动化Refnum Controls Palette»Refnum»Automation Refnum
。 - 接下来,右键单击Automation Refnum,然后选择
Select ActiveX Class»Browse...
- 在从类型库选择对象窗口中,从类型库下拉菜单中找到并选择NI TestStand <year> API版本x.0 。
- 在对象窗口中,选择SequenceContext 。选择确定。自动化Refnum现在应该读取
TS.SequenceContext
。 - 切换到框图。右键单击Sequence Context Refnum控件,然后选择
Create»Property for TS.SequenceContext Class»Parameters
对TestStand中参数的属性引用。 - 右键单击SequenceContext属性节点中的Parameters节点,然后选择
Create»Method for TS.PropertyObject Class»GetValBoolean
。 - 将SequenceContext属性节点和PropertyObject调用节点放置在循环中,您将从TestStand动态停止以停止VI。
- 将序列上下文引用句柄连接到SequenceContext属性节点,并将引用从参数连接到PropertyObject调用节点。
- 指定参数名称,并将布尔值从GetValBoolean连接到循环的条件终端。
- 保存VI。
接下来,需要配置TestStand以异步调用修改后的VI。
- 在序列中添加异步运行 VI步骤。该步骤可在LabVIEW Utility文件夹的插入选板中找到。
- 在步骤设置窗格中,将主机名保留为空白,以便TestStand将默认为本地主机,然后单击LabVIEW图标。
- 在编辑LabVIEW VI调用窗口中,手动输入或使用文件浏览器按钮输入要运行的VI的路径。
- 正确加载VI后,取消选中TS.SequenceContext参数的默认框,并将值设置为
ThisContext
。按确定。 - 在变量窗格中的参数部分下,添加一个新的布尔参数,该名称与您在LabVIEW中定义的lookupString值相同(请参见上文),并将默认值设置为
False
。 - 在异步运行VI设置窗格中,选择要传递的上下文作为VI参数的此上下文,作为调用线程的使用上下文 。
- 要停止VI,添加一个Statement步骤,然后在Expression框中输入
Parameters.Stop = True
。
该方法使TestStand在新线程中执行VI,并使用一个参数(在上例中命名为
Stop ),VI将访问并读取从TestStand传递给它的序列上下文。
此外,在一般情况下运行异步代码时,如果用户终止或中止了TestStand执行,则可以使用
终止监视器来确保VI停止。
附加信息
由于多线程和此方法的并行性质,因此必须注意防止或减轻竞争状况。不鼓励使用该方法在异步VI之间传递数据。该方法只能用于启动和停止没有其他数据依赖关系的VI。异步调用的VI之间的数据传输应通过相关链接中的队列,通知程序或UI消息进行处理。