LabVIEW中的执行结构

本节内容包含

执行结构内部包含图形化的代码段,并能控制代码段运行的时间和方式。常见的执行结构有While循环、For循环和条件结构。如需要多次运行同一段代码或需要按不同的条件执行不同代码,可考虑使用这些结构。

循环结构

 

视频:在LabVIEW中创建循环结构

While循环

While循环与文本编程语言中的Do循环或Repeat-Until循环类似,循环地执行所包含的代码直到满足某个条件为止(如图1所示)。

(1)LabVIEW While循环  |  (2)流程图  |  (3)伪码示例

图1显示了LabVIEW中的While循环、While循环的流程图
和While循环功能的伪码示例。

While循环在结构选板上。在选板上选中While循环后,在程序框图上用鼠标在需重复执行的代码周围拖曳出一个矩形。释放鼠标后,选中的代码部分即被While循环的边框包围。

请通过拖放将程序框图中的对象放进While循环。

While循环重复执行所包含的代码,直到条件接线端(一个输入接线端)接收到特定的布尔值为止。

While循环的条件接线端也可用于进行基本的错误处理。此时可将错误簇连接到条件接线端,错误簇的“状态”参数的TRUE或FALSE值将传递到该接线端。同时,“真(T)时停止”和“真(T)时继续”快捷菜单将自动转换为“错误时停止”和“错误时继续”。


循环计数接线端是一个输出接线端,输出已完成的循环次数。

While循环计数总是从0开始。

注:While循环将至少执行一次。

无限循环

无限循环是一个常见的编程错误,指循环永不停止。

假设用户将条件接线端设置为“真(T)时停止”,同时在While循环外部放置了一个布尔控件,如控件的值在循环开始时为FALSE,那么就造成了一个无限循环。

图2. 布尔控件在While循环外部

上例中布尔控件的值只能被读取一次(循环开始前),因此改变控件的值并不能停止循环。如要通过控件来停止循环,应将控件接线端放置在循环内部。要停止一个无限循环,只能单击工具栏上的“中止执行”按钮中止整个VI。

图3中,While循环将一直执行,直至“随机数”函数的输出大于等于10.00且“Enable”控件的值为True。其中的“与”函数只有在两个输入都为真时,才返回真,否则函数返回值为假。

图3是一个无限循环,因为“随机数”函数永远不会生成大于10.0.0的值。

图3. 无限循环

结构隧道

隧道用于接收和输出结构中的数据。隧道显示为While循环边框上的实心方块。方块的颜色和取决于连至隧道的数据类型的颜色。循环中生成的数据要等循环中止后才输出循环。如有隧道向循环输入数据,数据到达隧道后循环才开始执行。

图4中,循环计数接线端与隧道相连。隧道中的值要等While循环循环停止后才向“Iterations”显示控件传递。

图4. While循环隧道

因此,“Iterations”控件只会显示循环计数接线端最后的值。

For循环

released with niBCVideo v1.1

视频:在LabVIEW中使用For循环

For循环按既定的次数执行子程序框图。图5显示了LabVIEW中的For循环、For循环的流程图和For循环功能的伪码示例。

(1)LabVIEW For循环  |  (2)流程图  |  (3)伪码示例

图5. For循环

For循环在结构选板上。While循环也可转换为For循环,只需右键单击While循环的边框,然后从快捷菜单中选择“替换为For循环”,即可实现。


循环总数接线端是一个输入接线端,表示重复执行子程序框图的总次数。


循环计数接线端是一个输出接线端,输出已完成的循环次数。

For循环计数总是从0开始。

For循环与While循环的区别在于:For循环只执行指定的次数,而While循环会重复执行,直至条件接线端接收到特定的值才停止。

图6中的For循环每秒产生一个随机数,共执行100秒,并在数值显示控件中显示产生的随机数。

图6. For循环示例

为循环添加定时

当循环结构执行一次循环后,会立刻开始执行下一次循环,除非满足停止条件。通常情况下,您需要控制循环的频率或为循环定时。例如,如果希望每10秒钟采集一次数据,就需要将循环的时间间隔定为10秒钟。即使循环不需要满足特定的频率,处理器也需要一定时间来完成其他任务,如响应用户界面事件等。

等待函数

在循环结构内部放置一个“等待”函数,可以使VI在指定的时间段内处于睡眠状态。在这段等待时间内,处理器可以处理其他任务。“等待”函数使用的是操作系统的毫秒时钟。


“等待(ms)”函数使循环保持等待状态,直至毫秒计数器的值等于预先指定的值。该函数可保证循环的执行速率至少等于指定值。

条件结构

released with niBCVideo v1.1

视频:在LabVIEW中使用条件结构


条件结构包括两个或两个以上子程序框图(也称“条件分支”)。

条件结构每次只能显示一个子程序框图、执行一个条件分支。执行哪个子程序框图由输入值决定。条件结构类似于文本编程语言中的switch语句或if...then...else语句。


分支选择器标签位于条件结构顶部,中间是当前分支在选择器中的名称,左右两边是递增和递减箭头。

单击递减和递增箭头可浏览所有条件分支。也可单击分支名旁边的向下箭头,在下拉菜单中选择一个条件分支。


将一个输入值或选择器连接至选择器接线端,即可决定将执行的条件分支。

选择器接线端支持的数据类型有整型、布尔型、字符串型和枚举型。选择器接线端可放在条件结构左边框的任意位置。如选择器接线端的数据类型是布尔型,则条件结构包含真和假两个条件分支。如选择器接线端的数据类型是整型、字符串型或枚举型,则条件结构可以有任意个条件分支。

注:默认情况下,连接至选择器接线端的字符串区分大小写。如要让选择器不区分大小写,将字符串连接至选择器接线端后,右键单击条件结构的边框,从快捷菜单中选择“不区分大小写匹配”即可。

如不为条件结构创建一个处理范围外输入值的默认条件分支,则应穷举所有可能输入值的条件分支。例如,如果选择器的数据类型是整型,并且只有1、2、3三个条件分支,则必须创建一个默认分支来处理输入值为4或其他整型的情况。

注:如将布尔控件连接至选择器,则不能指定默认分支。此时右键单击分支选择器标签,快捷菜单中将不会出现“本分支设置为默认分支”选项。条件结构将根据布尔控件输出的TRUE或FALSE值来决定执行的分支。

右键单击条件结构的边框可添加、复制、删除或重新排列分支,以及选择默认条件分支。

条件分支的选择

图7中的VI使用了条件结构,根据用户选择的温度单位的不同(摄氏或华氏)而执行不同的代码。最上方的程序框图显示了条件分支“True”的代码。中间的程序框图显示了如何选择“False”分支。要选择分支,可在条件选择器标签内输入值或使用标签工具编辑值。选择完分支后,该分支会显示在程序框图上,如图7底部程序框图底部所示。

图7. 改变条件结构显示的条件分支

如输入选择器的值与连接到选择器接线端的对象不是同一类型,则选择器值变成红色,表示只有编辑或删除该值后VI才可运行。此外,选择器标签值不能为浮点数,因为浮点运算可能存在四舍五入误差。如连接一个浮点数到条件分支,LabVIEW会对其进行舍入到最近的整数值。如在分支选择器标签中输入浮点数,数值将变成红色,表示在执行条件结构前必须删除或编辑该值。

输入和输出隧道

条件结构可拥有多个输入输出隧道。所有输入均可为各分支所用,但每个分支不需要使用所有输入。但是,各分支必须定义其输出隧道。

假设程序框图上有这样一个条件结构:它有一个输出隧道,但其条件分支中至少有一个没有连接输出值到该隧道。如运行该分支,LabVIEW将无法判断应返回什么输出值。如输出隧道为空心,则说明存在上述错误。需注意的是,未连线的分支可能并非是当前程序框图显示的分支。

要解决上述错误,您需找到未连接输出值的条件分支,给输出隧道连接一个输出值。此外,也可右键单击输出隧道,选择“未连线时使用默认”,为所有未连接的输出隧道使用隧道数据类型的默认值。当所有分支的输出均已连线时,输出隧道显示为实心。

应避免使用“未连接时使用默认”选项,因为使用该选项无法详细呈现程序框图,使代码难以理解,此外,该选项还增加了调试代码的难度。需注意的是,如选择了该选项,输出默认值是与隧道相连的数据类型的默认值。例如,如果隧道是布尔数据类型,则默认值为FALSE。

数据类型 默认值
数值 0
布尔 FALSE
字符串 空值("")

表1. 各数据类型的默认值

其他结构

LabVIEW中还有其他更高级的执行结构,例如事件结构(用于处理用户界面交互等中断驱动任务)和顺序结构(用于强制指定执行顺序)。这些内容并不包含在本入门教程内,如需了解这些结构,请参阅相应的LabVIEW帮助主题。

交互式LabVIEW入门课程

体验全新交互式LabVIEW入门课程,掌握LabVIEW基础概念。

继续学习

上一篇数据结构
在循环间传递数据下一篇