首页 理论教育 控制程序运行时间和方式的执行结构详解

控制程序运行时间和方式的执行结构详解

时间:2023-06-21 理论教育 版权反馈
【摘要】:执行结构内部包含图形化的代码段,并能控制代码段运行的时间和方式。常见的执行结构有While循环、For循环和条件结构。如需多次运行同一段代码或需要按不同的条件执行不同代码,可考虑使用上述执行结构。图3-32无限循环示例图451 制作流程图01使用“圆角矩形工具”绘制圆角矩形,如图452所示图3-33While循环隧道结构隧道隧道用于接收和输出结构中的数据。该函数可保证循环的执行速率至少等于指定值。

控制程序运行时间和方式的执行结构详解

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

1)循环结构

(1)While循环

While循环与文本编程语言中的Do循环或Repeat-Until循环类似,循环执行所包含的代码直到满足某个条件为止。图3-31所示即为Lab VIEW中的While循环、While循环的流程图和While循环功能的伪码示例。

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

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

图3-31 Lab VIEWWhile循环示例

①Lab VIEW While循环;②流程图;③伪码示例

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

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

注意:While循环计数总是从0开始,While循环至少执行一次。

(2)无限循环

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

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

图3-32所示即为一个无限循环,因为“随机数”函数永远不会生成大于10的值。

图3-32 无限循环示例

图3-33 While循环隧道

(3)结构隧道

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

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

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

(4)For循环

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

图3-34 For循环

①Lab VIEW For循环;②流程图;③伪码示例

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

循环总数接线端“”是一个输入接线端,表示重复执行子程序框图的总次数。(www.xing528.com)

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

For循环计数总是从0开始。For循环与While循环的区别在于:For循环只执行指定的次数,而While循环会重复执行,直至条件接线端接收到特定的值。

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

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

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

图3-35 For循环示例

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

2)条件结构

条件结构包括两个或两个以上子程序框图(也称“条件分支”)。条件结构每次只能显示一个子程序框图,执行一个条件分支。执行哪个子程序框图由输入值决定。条件结构类似于文本编程语言中的switch语句或“if...then...else”语句。

分支选择器标签“”位于条件结构顶部,中间是当前分支在选择器中的名称,左右两边是递增和递减箭头。单击递减和递增箭头可浏览所有条件分支。也可单击分支名旁边的向下箭头,在下拉菜单中选择一个条件分支。

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

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

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

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

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

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

(1)条件分支的选择

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

图3-36 改变条件结构显示的条件分支

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

(2)输入和输出隧道

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

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

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

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

表3-2 各数据类型的默认值

3)其他结构

Lab VIEW中还有其他高级的执行结构,例如事件结构(用于处理用户界面交互等中断驱动任务)和顺序结构(用于强制指定执行顺序)。如需了解相关内容,请参阅相应的Lab VIEW帮助主题。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈