While循环 是一种用于重复执行代码块直到满足给定条件的结构。当VI运行时,While循环内的代码将执行,然后条件终端将被计算。
本教程将引导您了解如何在 LabVIEW 中构建和配置 While 循环。本介绍材料对于刚接触 LabVIEW 并希望熟悉这种基本编程结构的人来说非常有用。
一. 构建 While 循环
- 启动 LabVIEW 并打开一个新的 VI。您可以通过选择文件»新建VI来打开一个空白VI
- 右键单击程序框图可显示函数选板的临时版本。
可选:您可以单击“函数”选项板左上角的图钉来固定该选项板,使其不再是临时的。 - 导航到 “结构” 并选择“ While 循环”。
要将循环放置在程序框图上,请单击鼠标左键并拖动鼠标,直到循环达到所需的大小。
- 在前面板上添加一个停止按钮。您可以在控制面板»布尔»停止下找到它。
- 在程序框图上,将“停止”按钮图标拖动到 while 循环中。
- 将“停止”按钮连接到条件端子,以便您可以控制 while 循环的执行。
默认情况下,当按下“停止”按钮时,真值将传递到条件终端,导致 while 循环停止执行。
注意:您不仅可以使用“停止”按钮,还可以将任何布尔数据连接到条件端子以控制 while 循环的执行
- 配置条件终端。要在Stop if True和Continue if True之间切换条件终端,请右键单击条件终端并选择所需的设置。
条件终结符定义循环何时停止。条件终端有两种设置:如果为真则停止 和如果为真则继续。
如果条件终端设置为 Stop if True,并且将布尔值 true 发送到条件终端,则循环将停止执行。这是默认设置。
当设置为“True 时继续”时,仅当布尔值 true 发送到终端时,才会运行 while 循环。 - (可选)通过右键单击迭代终端 并选择 创建指示器来监视循环已经历的迭代次数 。
二. 将结构隧道添加到您的 While 循环中
使用结构隧道将数据输入或输出结构,例如 while 循环。如果要将数据发送到 while 循环中,则需要创建结构隧道。
a. 发送到While 循环的数据仅在第一次迭代时发送
b. 从 while 循环中发送的数据仅在最后一次迭代之后发送。
如果您希望前面板数据不断更新,它们的指示器应该位于 while 循环内部
示例:
- 完成构建 while 循环的步骤(见上文)。
- 在前面板上创建一个数字指示器(控件>>数字>>数字指示器)。
(可选)为了避免强制数据类型,请 通过右键单击指示器并选择 Representation >> I32将数字表示形式更改为I32。 - 在框图上,将迭代计数器连接到数字指示器图标
结构隧道显示为 while 循环边界上的实心块。该块是连接到隧道的数据类型的颜色。
循环终止后,数据从循环中传出。
在下面的框图中,迭代终端连接到隧道。在 while 循环执行完毕之前,隧道中的值不会传递给迭代指示器。将代码片段放入您的 LabVIEW 代码中并注意:
a.随机数指示器放置在 while 循环内。该指标的数据随着每次迭代而更新。
b.当代码运行时,迭代计数指示器的值为零。这是因为在 while 循环停止执行之前,隧道不会将信息传递给指示器。
c.当您按停止键时,迭代计数指示器现在将更新。
三. 设置停止条件
通过使用布尔函数,您可以实现多个条件来影响 while 循环条件终端。您可以使用“或”函数来比较错误线状态和停止按钮控件,以便如果其中一个为 TRUE,则条件端子接收 TRUE 信号,并且 while 循环停止。
- 完成构建 while 循环的步骤(见上文)。
- 在前面板上的3D.ctl 控件中放置一个错误(控件调色板»数据容器»3D.ctl 中的错误)
- 在程序框图上,确保 Error In 3D.ctl 图标位于 while 循环之外。
- 拆下停止按钮和条件端子之间的连接线。
- 在 while 循环之外放置一个简单错误处理程序(Functions Palette»Dialog & User Interface»Simple Error Handler.vi)。该函数报告调用时遇到的任何错误。
通过结构隧道通过 while 循环将控制中的错误与简单错误处理程序链接起来。
将控制错误的输出连接到 while 循环的边界。单击边界以创建隧道。
继续从隧道到 while 循环的相对边界并进入简单错误处理程序的输入的错误线。 - 在 while 循环内放置一个Unbundle By Name函数( Functions Palette»Programming»Cluster, Class, & Variant»Unbundle by Name)。您可以使用此函数来分隔错误数据线的布尔部分。
将错误线连接到 Unbundle by Name 功能。
左键单击 Unbundle 函数并选择 状态 以显示错误数据的布尔部分。 - 在 while 循环内放置一个or函数(函数面板»编程»布尔»Or)。
- 连接数据线。
将Stop 按钮控件和 Unbundle by Name状态连接到 Or 函数中 。
将Or函数的输出连接 到条件端子。
如果按下“停止”按钮或在 while 循环内部检测到错误,下面的代码片段将停止执行 while 循环。
四. 移位寄存器:在循环之间传递值
移位寄存器可用于将上一次循环的值传递至下一次循环。如下图所示,移位寄存器以一对接线端的形式出现,分别位于循环两侧的边框上,位置相对。
右侧接线端含有一个向上的箭头,用于存储每次循环结束时的数据。LabVIEW将数据从移位寄存器右侧接线端传递到左侧接线端。循环将使用左侧接线端的数据作为下一此循环的初始值。该过程在所有循环执行完毕后结束。循环执行后,右侧接线端将返回移位寄存器保存的值。
移位寄存器可以传递任何数据类型,并和与其连接的第一个对象的数据类型自动保持一致。连接到各个移位寄存器接线端的数据必须属于同一种数据类型。如果连接一个错误簇到并行For循环的移位寄存器,移位寄存器将转换为错误寄存器 。
循环中可添加多个移位寄存器。如循环中的多个操作都需使用之上一次循环的值,可以通过多个移位寄存器保存结构中不同操作的数据值。如下图所示。
在上一个程序框图中,右上角的移位寄存器接线端将2,即第一次循环中0和2之和传递到左上角的移位寄存器接线端,作为加运算第二次循环的初始值。右下角的移位寄存器接线端将2, 即第一次循环中1和2之积传递到左下角的移位寄存器接线端,作为乘运算第二次循环的初始值。
第二次循环将2和2相加并将结果4传递到左上角的移位寄存器接线端以用于第三次循环。第二次循环将2和4相乘,并将结果8传递到左上角的移位寄存器接线端以用于第三次循环。
十次循环后,右上角的接线端将加运算的最终结果传递到上方的显示控件,右下角的解析那段将乘运算的最终结果传递到下方的显示控件。