4.2 条件结构
条件结构,也称分支结构或选择结构。在C语言中,选择结构有两种语句可以实现,分别是if语句和switch语句[7]。if语句只有两个分支可以选择,而switch语句则是多分支选择语句。当然,利用if语句的嵌套,也可以实现多分支结构,但相比switch语句会显得烦琐。LabVIEW中条件结构的功能与C语言中if、switch语句的功能相类似。
在LabVIEW中,如何创建一个条件结构呢?具体方法是:在“函数”选板→“编程”→“结构”子选板上,选中一个条件结构,将其拖曳到程序框图面板上,创建好的条件结构如图4.6所示。其中,“条件选择器”的输入数据,可以是布尔、整数、字符串、枚举类型或错误簇;而“选择器标签”则用于决定下方显示哪个条件分支下的框图,具体地,可以通过“选择器标签”上的按钮来选择当前显示哪个分支。
4.2.1 条件选择器为布尔型
当条件选择器上接入的是布尔量时,条件结构的功能相当于C语言中的if语句,即只有两个分支(真或假),这也是条件结构的默认情况。图4.6显示的是当条件选择器接入布尔量时的情况,且显示的是真分支下的框图。
图4.6 条件选择器接入布尔量时的条件结构
4.2.2 条件选择器为非布尔型
当条件选择器接入的是非布尔量(整型数值、字符串或枚举型)时,条件结构的功能就相当于C语言中的switch语句,即可以有多个分支。
图4.7所示的条件结构,它的条件选择器接入的是整型数值,且共有4个分支,第一个分支是小于或等于-1的数;第二个分支是等于1、3和4;第三个分支是等于6以及默认的情况;第四个分支是大于或等于7的数。
图4.7 条件选择器接入数值时的条件结构
当条件选择器接入的是非布尔量,使用条件结构时需要注意:要么在条件选择器标签中列出所有可能的情况;要么必须给出一种缺省(默认)的情况。如图4.7所示,就存在一个默认分支,这是因为4个分支并未将所有可能的数据都覆盖掉。
那么,如何为条件结构添加新的分支呢?具体操作如下:将鼠标放在条件结构边框上,右击,弹出其快捷菜单,选择“在后面添加分支”或“在前面添加分支”,即可完成新分支的添加。
常见问题4:设置条件结构选择器接入数据的注意事项。
条件结构选择器默认接入的数据为布尔型的,如图4.6所示,所以其上端的选择器标签默认的是真或假。当在条件选择器接入一个数值型数据时,选择器标签会自动变成数值型,此条件下,可以根据实际需求设置不同的分支。初学者容易犯的一个错误是,在还没有为条件选择器接入具体输入的条件下,就直接去修改上端选择器标签的数据类型,如此操作会导致LabVIEW报错。
4.2.3 输入和输出隧道
在LabVIEW中,条件结构内外之间的数据交换是通过隧道完成的。向条件结构内引入连线或从其内部向外引出连线,均会在其边框上生成隧道;其中,左边边框上的是输入隧道,右边边框上的是输出隧道。输入隧道在每一个分支中都可以使用;而输出隧道必须从每一个分支都得到明确的输入值,否则VI无法运行。如图4.8所示,输出隧道呈空心状态,这表明,这个条件结构中有的分支没有为输出隧道赋值,此条件下,LabVIEW就会报错,具体表现为运行按钮将呈断裂状态。而若如图4.9所示,输出隧道呈实心状态,则表明所有的分支都已为输出隧道赋了值。
图4.8 有的分支没有为输出隧道赋值
图4.9 所有分支都已为输出隧道赋值
有的学习者会提出疑问,LabVIEW中的条件结构要求所有的分支必须为输出隧道赋值,但在实际中会遇到有的分支不需做任何处理的情况。也就是说,利用LabVIEW如何实现无else的if语句呢?这个问题先留给学习者自己思考,在后面的章节中,会做必要的解答。
下面通过两个例子学习一下条件结构的使用。
【例4.3】 编写一个比较两个数大小的VI。即要求输入两个数a和b,判断其大小,并将其中大的那个数输出给变量max。
图4.10 以C语言编写的例4.3的代码
图4.10给出了以C语言实现的例4.3的代码,而图4.11提供的则是利用LabVIEW的条件结构实现的代码。图4.11中,条件选择器连入的是布尔量,有真、假两个状态,相当于C语言中带else的if语句;而且两个分支(真和假)都为输出隧道赋了值。
【例4.4】 编写一个比较两个整数大小的VI。即要求输入x和y,判断其大小。具体地,如果x>y,弹出对话框,显示x>y;如果x=y,弹出对话框,显示x=y;如果x<y,则弹出对话框,显示x<y。
图4.11 以LabVIEW实现的例4.3的代码
与例4.3类似,例4.4也是要实现比较两个数的大小,所不同的在于,例4.4需要三个分支,而例4.3只需要两个分支。对于例4.4,可以通过将一个数值型数据(x与y的差)赋给条件选择器来实现,如此就可实现多分支结构。其实这相当于C语言中的switch语句,实现的代码如图4.12所示,其中共有三个分支。具体地,令x与y相减,将其计算结果赋给条件选择器。当x-y大于0时,显示x>y;当x-y等于0时,显示x=y;而当x-y小于0时,则显示x<y。这个VI在具体编写中,用到了“单按钮对话框”函数,找到它的路径是“函数”选板→“编程”→“对话框与用户界面”子选板。
图4.12 例4.4的LabVIEW实现代码
当然,如果利用选择器接入布尔型数据的条件结构,也可以完成例4.4,只是要利用到条件结构的嵌套,相应VI的具体实现较为烦琐,尤其是在LabVIEW这种图形化编程环境下,VI的结构会显得不够清晰。所以,对于存在多个分支问题的VI,建议使用条件选择器接入非布尔型数据的条件结构来编写。
4.2.4 选择函数
图4.13 利用“选择”函数完成例4.3任务
另外,若仅需要做简单的条件判断,也可利用LabVIEW中提供的“选择”函数来实现。“选择”函数位于“函数”选板→“编程”子选板→“比较”子选板上。对例4.3,利用“选择”函数实现的VI代码如图4.13所示。