天天看点

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

本节书摘来自华章计算机《arduino开发实战指南:labview卷》一书中的第3章,第3.5节,作者:余崇梓著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

labview的程序执行结构包含图形化代码及控制内部代码运行的方式和时间。最常见的执行结构为while循环、for循环和条件结构,可以用来多次运行相同的代码或基于某些条件执行不同的代码。

3.5.1 while循环结构

与文本编程语言的do循环或repeat-until循环类似,while循环将执行其包含的代码直到满足某一条件为止。

while循环位于结构选板。从选板中选择while循环,用鼠标拖曳出一个矩形,将程序框图中需要重复执行操作的部分框入该矩形。松开鼠标时,while循环的边框将包围选中部分。只需将对象拖放到while循环内部即可为其添加程序框图对象。

while循环执行其中的代码,直到条件接线端(输入端)接收到某一特定的布尔值。

使用while循环的条件接线端也可以执行基本的错误处理。当将错误簇连接到条件接线端时,只有错误簇status参数的true或false值被传递到该接线端。同时,为true时停止和为true时继续快捷菜单项也相应地改变成为false时停止和为false时继续。计数接线端是一个输出接线端,表示已完成的循环次数。

1.无限循环

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

如条件接线端是true时循环停止,可在while循环外放置一个布尔控件。将控件设为false时循环开始,这样便创建了一个无限循环,如图3-31所示。由于输入控件的值只在循环开始前被读取一次,因此改变控件的值并不能停止无限循环。为了使用控件将while循环停止,应该将控件接线端放在循环内。要停止一个无限循环,必须单击工具栏上的中止执行按钮中止整个vi。

如图3-32所示,while循环将一直执行,直至随机函数输出大于等于8.0,该程序为无限循环,因为随机函数生成的值将永远不超过8.0。

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

2.结构隧道

隧道用于接收和输出结构中的数据。while循环边框上的实心小方块就是隧道。实心小方块的颜色和与隧道相连的数据类型的颜色一致。循环中止后,数据才能输出。数据输入循环时,只有在数据到达隧道后循环才开始执行。

如图3-33所示,计数接线端与隧道相连。直至while循环停止执行后,隧道中的值才被传送至计数显示控件。计数显示控件只显示计数接线端最后的值。

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

3.5.2 for循环结构

for循环按设定的次数执行子程序框图。for循环位于结构选板。在程序框图上放置while循环,然后右键单击while循环的边框,从快捷菜单中选择替换为for循环,将while循环转变为for循环。

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

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

for循环迭代计数总是从零开始。for循环与while循环的不同之处在于:for循环只执行指定的次数,而while循环会一直执行,直至条件接线端接收到某一特定的值时才停止执行。图3-34中的for循环每秒产生一个随机数,共执行200s,并用数字显示控件显示产生的随机数。

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

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

“等待”函数保持等待状态直至毫秒计数器的值等于预先输入的指定值。该函数保证了循环的执行速率至少是预先输入的指定值。

3.5.3 条件结构

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

条件结构如图3-35所示。条件结构包括两个或两个以上子程序框图(也称“条件分支”)。每次只能显示一个子程序框图,并且每次只执行一个条件分支。输入值将决定执行的子程序框图。条件结构类似于文本编程语言中的switch语句或if...then...else语句。在条件结构顶部的case选择器标签中,含有对应于中间各个选框选择器值的名称,以及递减和递增箭头。

单击递减或递增箭头可以滚动浏览已有条件分支;也可以单击条件分支名称旁边的向下箭头,并在下拉菜单中选择一个条件分支。将一个输入值或选择器连接至选择器接线端,即可选择要执行的条件分支。选择器接线端支持的数据类型包括整型、布尔型、字符串型和枚举型。可以将选择器接线端定位到条件结构左边框的任意位置。如果选择器接线端的数据类型是布尔型,则该结构将包括true和false两个条件分支。如果选择器接线端的数据类型为整型、字符串型或枚举型,该结构可以有任意个条件分支。

注:默认情况下,连接至选择器接线端的字符串值是区分大小写的。

右键单击条件结构的边框,可从快捷菜单中选择启用不区分大小写匹配。如未指定用于处理范围外数值条件分支的默认条件结构,则必须列出所有可能的输入值。例如,如果选择器的数据类型是整型,并且指定了1、2、3选框,这时必须指定一个默认选框以便在输入数据为4或任何其他未指定的整数值时执行。

注:如将一个布尔控件连接至选择器,则不能指定默认分支。如右键单击分支选择器标签,快捷菜单中不出现设置本分支为默认分支的选项。将布尔控件设置为true或false,确定执行的分支。

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

(1)条件分支的选择

如图3-36和图3-37所示,vi使用条件结构是根据输入控件select的不同(true或false)而执行不同的代码。图3-36的程序框图显示了select为“true”的条件分支;

图3-37的程序框图显示了select为“false”的条件分支。通过在分支选择器标识符中输入相应值或者使用标签工具编辑该值,可以实现对条件分支的选择。

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

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

(2)输入和输出隧道

可以为条件结构创建多个输入和输出隧道。所有输入都可供条件分支选用,而条件分支不一定要使用所有输入。但是,必须为每个条件分支定义各自的输出隧道。

3.5.4 顺序结构

通常情况下,labview的程序在执行的时候,是按照数据流的方式根据数据在连线上的流动方向执行,整个过程就是一个从左向右的顺序执行过程。

如果有两个并行放置并且之间没有任何连线的程序单元,那么labview会把它们放到不同的线程中并行执行。

如果希望将没有互相连线的程序部分按照一定先后顺序执行的话,就可以使用顺序结构(sequence structure)来实现。当程序运行的时候,会按照顺序结构的帧框架一个接一个依次顺序执行。

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

labview中有两种顺序结构:层叠式顺序结构和平铺式顺序结构。平铺式顺序结构如图3-38所示,层叠式顺序结构如图3-39所示。这两种顺序结构的功能是一样的。不同点在于层叠式顺序结构的每个帧是重叠的,在同一时刻只能有一个帧在程序框图上直接显示出来,平铺式顺序结构是把所有的顺序帧按照从左到右的顺序展开在程序框图上。

《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

3.5.5 其他结构

labview还有其他更高级的执行结构,如事件结构(用来处理中断驱动任务,如用户界面交互)和序列结构(用于强制执行顺序)。要了解这些结构的更多信息,请参考相应的labview help主题。