添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

根据所使用的LabVIEW版本,从以下方法中进行选择,用以使用一个停止按钮停止LabVIEW中的多个并行While循环。

注意: 下面列出的方法并不是停止并行While循环的方法的详尽介绍。这些方法是最常见的方法。

如使用LabVIEW 2016,可使用通道线通过一个停止按钮停止多个并行的While循环。这是可能的,因为通道线是异步线,它们在不强制执行顺序的情况下连接两个并行的While循环。因此,两个并行的While循环之间没有数据相关性。

注意: LabVIEW Real-Time模块支持通道线,但LabVIEW FPGA模块不支持。

以下框图演示了使用 Tag 通道停止并行While循环:

以下列表描述了有关上图程序框图的重要细节:

  1. 循环A 包含一个 Tag写入 端点,该端点将值写入 Tag 通道。
  2. 通道线将 Tag 写入端点的通道输出连接到 Tag 读取端点。
  3. 循环B 包含一个 Tag 读取端点,该端点从 Tag 通道读取值。
  4. 连接到 循环A中 写入端点的 元素 参数的 停止 按钮与 循环B 通信。如果单击 循环A中 的停止按钮, 循环B 也将停止。

以下框图演示了使用 串流 通道停止并行While循环:

当使用 串流 通道,连接到在 循环A 中的作家端点的 最后一个元素 参数 停止 按钮与 循环B 通信。

当用于停止并行While循环时, Tag 通道和 串流 通道具有主要区别。

  • 使用 Tag 通道停止并行While循环会导致所有循环尽快停止,因为 循环A 中的 停止 按钮值直接与 循环B 通信。使用 串流 通道停止并行While循环可能导致 循环B 循环A 早停止若干次迭代 因为从 循环A 中的 停止 按钮值与通过 循环B 最后一个元素? 参数进行通信,这意味着 循环A 在写入最后一个元素后立即停止。但是, 循环B 继续读取通道中的其余元素,直到读取完最后一个元素,它才会停止。所谓 串流 通道确保通过该通道传送的所有数据元素 循环B 停止之前得到处理。
  • Tag 通道允许您停止两个或更多并行的While循环,因为 Tag 通道可以分叉到多个编写器和读取器中。 串流 通道仅允许您停止两个并行的While循环,因为 串流 通道仅允许一个写入器和一个读取器。
下面的框图演示了如何使用 Tag 通道停止三个并行的While循环。

您不能将以前的 Tag 架构扩展为具有多个停止按钮。但是,您可以使用 labview\vi.lib\ChannelSupport 的“ Share Stop Signal” VI添加一个或多个停止按钮,使用任意一个停止按钮可以停止多个并行的While循环。

以下VI片段演示了使用两个停止按钮之一来停止多个并行的While循环。要添加更多停止按钮,请遵循相同的体系结构。

您可以使用一个停止按钮停止多个并行的While循环,方法是使用每个其他循环的局部变量,将第一个循环控件中的布尔停止按钮值传递给所有其他循环。下面的程序框图演示了使用局部变量停止两个并行的While循环。

以下列表描述了有关上图程序框图的重要细节

  1. 顶部循环包含一个 停止 控件。通过右键单击前面板上的 停止 控件并选择“ 机械动作»单击时转换” ,配置 停止 控件的 机械动作。 这允许所有循环读取 停止 布尔值,当按下该值时,锁存器将在读取值时重置为真,从而使某些循环仍在运行。
  2. 底部的两个循环包含 停止 控件的局部变量。通过右键单击 停止 控件并选择 创建»局部变量 来创建局部变量。通过右键单击局部变量并选择“ 转换为读取”, 将局部变量配置为读取值
  3. 重要的是要注意“ Reinit To Default” 调用节点是隐式地引用了停止按钮 这将在下一次运行开始时将值重置为真。
  4. 所有这些循环都包含一个 等待(ms), 以突出显示所有循环都将停止,而不论它们的运行时间如何。

要停止三个以上的并行While循环,请遵循相同的体系结构,添加更多局部变量以从初始 停止 控件中读取。

您可以使用属性节点将布尔型 停止 按钮值从第一个循环的控件传递到所有其他循环。下面的框图演示了使用属性节点停止两个并行的While循环。

以下列表描述了有关先前框图的重要细节:

  1. 顶部循环包含一个 停止 控件。通过右键单击前面板上的 停止 控件并选择“ 机械动作»单击时转换” ,配置 停止 控件的 机械动作。 这允许所有循环读取 停止 布尔值,当按下该值时,锁存器将在读取值时重置为真,从而使某些循环仍在运行。
  2. 底部循环包含 停止 控件的属性节点。通过右键单击 停止 控件并选择 创建»属性节点»值 来创建属性节点。通过右键单击值属性节点并选择“ 转换为读取”, 将值属性节点配置为读取值。
  3. 重要的是要注意“ Reinit To Default” 调用节点是隐式地引用了停止按钮 这将在下一次运行开始时将值重置为真。
  4. 所有这些循环都包含一个 等待(ms), 以突出显示所有循环都将停止,而不论它们的运行时间如何。

要停止两个以上的并行While循环,请遵循相同的体系结构,方法是添加更多值属性节点以从初始 停止 控控件中读取。

有关何时使用局部变量和属性节点的更多信息,请参阅 局部变量与值属性节点之间的区别

对于涉及复杂行为的应用程序,可以使用通知器来停止并行运行的多个循环。可从“ 编程”»“同步”»“通知器操作” 面板访问通知器功能。

注意: 通知器的使用可以轻松扩展到多个线程,但并不总是与现有程序体系结构很好地集成。

以下VI代码段演示了一种通知器可用于停止多个While循环的方式。

以下列表描述了有关先前框图的重要细节:

  • 顶部循环的每次迭代都会将 停止 按钮的状态写入通知器。
  • 其他两个循环在每次迭代时检查通知器的状态。
  • 注意: 确保在停止监视通知器的所有线程之前,不释放该通知程序。在上图的VI片段中, 合并错误 VI保证 释放通知器 VI将在所有循环停止之前不执行。
  • 单击 停止 按钮时,状态将发送到通知器,这将导致所有循环停止。
  • 队列

对于涉及更复杂行为的应用程序,您可以使用队列来停止并行运行的多个循环。可从“ 编程”»“同步”»“队列操作”选项 板访问队列功能。

注意: 许多较大的应用程序已经有一个队列系统,可以在并行循环之间交换数据。在这些设置中,可以修改或增强现有队列,以此包括用于并行循环的停止指令。

以下VI片段演示了如何使用队列来停止多个While循环:

一些使用主从结构的应用程序在从线程退出之前释放队列。从被破坏的引用调用出队列引发的错误后用于停止从循环。代替依赖错误条件来停止从属循环,上图的VI片段具有离散的停止指令,该指令从主循环传递至从循环。

相关链接