LabVIEW使用一个停止按钮来停止所有循环 点击:442 | 回复:0



fjczd

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:552帖 | 36回
  • 年度积分:703
  • 历史总积分:1294
  • 注册:2008年8月14日
发表于:2023-03-14 19:53:36
楼主

LabVIEW使用一个停止按钮来停止所有循环

LabVIEW中有多个并行while循环,想使用一个停止按钮来停止所有循环。如何执行此操作并使停止按钮恢复到其初始状态?

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

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

通道线Channel Wires

如果使用的是LabVIEW2016,则可以使用通道线通过一个停止按钮来停止多个并行While循环。这是可能的,因为通道线是连接两个并行While循环而不强制执行顺序的异步导线。因此,两个并行While循环之间没有数据依赖关系。

注意:LabVIEW实时模块支持通道线,但LabVIEWFPGA模块不支持通道线。

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

以下列表描述了有关上一个框图的重要详细信息:

1.       循环A包含一个将值写入标记通道的标记编写器终结点。

2.       通道线将标记写入器终结点的通道输出连接到标记读取器终结点。

3.       循环B包含一个标记读取器终结点,该终结点从标记通道读取值。

4.       连接到循环A中编写器终结点的元素参数的停止按钮与循环B通信。如果单击循环A中的停止按钮,循环B也会停止。

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

使用流通道时,连接到循环A中编写器终结点的最后一个元素参数的停止按钮与循环B通信。

标记通道和流通道在用于停止并行While循环时存在重大差异。

使用Tag通道停止并行While循环会导致所有循环尽快停止,因为循环A中的停止按钮值直接与循环B通信。使用流通道停止并行While循环可能会导致循环B比循环A晚停止几次迭代,因为循环A中的停止按钮值通过最后一个元素与循环B通信,这意味着循环A在写入最后一个元素后立即停止。但是,循环B继续读取通道中的其余元素,并且在读取最后一个元素之前不会停止。流通道确保在循环B停止之前处理通过通道通信的所有数据元素。

标记通道允许停止两个或多个并行的While循环,因为标记通道可以分叉到多个写入器和读取器。流通道只允许停止两个并行的While循环,因为流通道只允许一个写入器和一个读取器。

以下框图演示了如何使用Tag通道停止三个并行的While循环。

警告

不能将以前的标记体系结构扩展为具有多个停止按钮。但是,可以使用位于中的共享停止信号VI添加一个或多个停止按钮,这允许使用任何一个停止按钮停止多个并行的WhileLoops

以下VI代码段演示了使用两个停止按钮中的任何一个停止多个并行循环。若要添加更多停止按钮,请遵循相同的体系结构。

局部变量Local Variables

可以使用一个停止按钮停止多个并行While循环,方法是使用每个附加循环的局部变量将布尔停止按钮值从第一个循环的控件传递到所有其他循环。以下框图演示了如何使用局部变量停止两个并行While循环。

以下列表描述了有关上一个框图的重要详细信息:

1.       顶部循环包含一个停止控件。通过右键单击前面板上的停止控件并选择机械动作»按下时切换来配置停止控制的机械动作。这允许所有循环读取停止布尔值,其中按下锁存器将在读取值时重置为true,使一些循环仍在运行。

2.       底部的两个循环包含停止控件的局部变量。通过右键单击停止控件并选择创建»局部变量来创建局部变量。配置局部变量以读取值,方法是右键单击局部变量并选择更改为读取

3.       请务必注意隐式引用停止按钮的ReinitTo默认值调用节点,这会在下次运行开始时将值重置为true

4.       所有这些循环都包含一个Waitms,以突出显示所有循环都停止,无论它们的运行时间如何。

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

属性节点Property Nodes

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

以下列表描述了有关上一个框图的重要详细信息:

1.       顶部循环包含一个停止控件。通过右键单击前面板上的停止控件并选择机械动作»按下时切换来配置停止控制的机械动作。这允许所有循环读取停止布尔值,其中按下锁存器将在读取值时重置为true,使一些循环仍在运行。

2.       底部循环包含停止控件的属性节点。通过右键单击停止控件并选择创建»属性节点»值来创建属性节点。配置“值”属性节点以读取值,方法是右键单击“值”属性节点,然后选择“更改为读取”。

3.       请务必注意隐式引用停止按钮的ReinitTo默认值调用节点,这会在下次运行开始时将值重置为true

4.       所有这些循环都包含一个Waitms,以突出显示所有循环都停止,无论它们的运行时间如何。

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

有关何时使用局部变量与属性节点的详细信息,请参阅控件/指示器、局部变量和值属性节点差异。

通告器Notifiers

对于涉及复杂行为的应用程序,通知程序可用于停止并行运行的多个循环。通知程序函数可从编程»同步»通知程序操作选项板访问。

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

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

以下列表描述了有关上一个VI代码段的重要详细信息:

顶部循环的每次迭代都将停止按钮的状态写入通知程序。

其他两个循环在每次迭代时检查通知程序的状态。

注意:确保在监视通知程序的所有线程停止之前不会释放通知程序。在前面的VI代码段中,合并错误VI保证释放通知程序VI在所有循环停止之前不会执行。

单击停止按钮时,状态将发送到通知程序,这会导致所有循环停止。

队列

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

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

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

一些使用主从架构的应用程序在从线程退出之前释放队列。然后,从已销毁的引用中取消排队时引发的错误将用于停止从循环。与依赖错误条件来停止从循环不同,前面的VI代码段具有离散的停止指令,该指令从主循环传递到从循环。

需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。




楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师