如何在Teststand中异步启动和停止VI?当我使用Action步骤调用带有while循环的VI时,TestStand将挂起,直到该VI完成执行。我想在TestStand的后台启动并运行我的VI,然后进行编程

更新 Apr 12, 2024

环境

软件

  • TestStand
  • LabVIEW

当我使用一个动作步骤调用一个带有while循环的VI时,TestStand将挂起,直到该VI完成执行。我想在TestStand中在后台启动并运行我的VI,然后在以后的序列中以编程方式将其停止。我怎样才能做到这一点?

您可以通过在TestStand中使用异步运行 VI步骤类型来实现。这将在一个新线程中运行VI,使您的TestStand序列可以继续执行该步骤。要异步调用VI,请遵循以下步骤。

首先,必须准备好要由LabVIEW中的TestStand启动和停止的VI。
  1. 在VI的前面板上,从Controls Palette»Refnum»Automation Refnum放置一个自动化Refnum Controls Palette»Refnum»Automation Refnum
  2. 接下来,右键单击Automation Refnum,然后选择 Select ActiveX Class»Browse...
  3. 在从类型库选择对象窗口中,从类型库下拉菜单中找到并选择NI TestStand <year> API版本x.0
  4. 对象窗口中,选择SequenceContext 。选择确定。自动化Refnum现在应该读取TS.SequenceContext
  5. 切换到框图。右键单击Sequence Context Refnum控件,然后选择Create»Property for TS.SequenceContext Class»Parameters对TestStand中参数的属性引用。
  6. 右键单击SequenceContext属性节点中的Parameters节点,然后选择Create»Method for TS.PropertyObject Class»GetValBoolean
  7. 将SequenceContext属性节点和PropertyObject调用节点放置在循环中,您将从TestStand动态停止以停止VI。
  8. 将序列上下文引用句柄连接到SequenceContext属性节点,并将引用从参数连接到PropertyObject调用节点。
  9. 指定参数名称,并将布尔值从GetValBoolean连接到循环的条件终端。
  10. 保存VI。
      接下来,需要配置TestStand以异步调用修改后的VI。
      1. 在序列中添加异步运行 VI步骤。该步骤可在LabVIEW Utility文件夹的插入选板中找到。
      2. 在步骤设置窗格中,将主机名保留为空白,以便TestStand将默认为本地主机,然后单击LabVIEW图标。
      3. 编辑LabVIEW VI调用窗口中,手动输入或使用文件浏览器按钮输入要运行的VI的路径。
      4. 正确加载VI后,取消选中TS.SequenceContext参数的默认框,并将值设置为ThisContext 。按确定
      5. 变量窗格中的参数部分下,添加一个新的布尔参数,该名称与您在LabVIEW中定义的lookupString值相同(请参见上文),并将默认值设置为False
      6. 异步运行VI设置窗格中,选择要传递的上下文作为VI参数的此上下文,作为调用线程的使用上下文 。
      7. 要停止VI,添加一个Statement步骤,然后在Expression框中输入Parameters.Stop = True
      该方法使TestStand在新线程中执行VI,并使用一个参数(在上例中命名为Stop ),VI将访问并读取从TestStand传递给它的序列上下文。

      此外,在一般情况下运行异步代码时,如果用户终止或中止了TestStand执行,则可以使用终止监视器来确保VI停止。

      附加信息

      由于多线程和此方法的并行性质,因此必须注意防止或减轻竞争状况。不鼓励使用该方法在异步VI之间传递数据。该方法只能用于启动和停止没有其他数据依赖关系的VI。异步调用的VI之间的数据传输应通过相关链接中的队列,通知程序或UI消息进行处理。