当前位置:文档之家› Labview执行结构:详细说明

Labview执行结构:详细说明

执行结构:详细说明While循环与文本编程语言中的Do循环或Repeat-Until循环类似,必须满足特定条件之后,While循环才会执行其内的程序代码,如图1所示。

图1. LabVIEW中的While循环;具备While循环功能的流程图;还有While循环功能的伪码范例While 循环位于Structures面板上。

从面板上选择While Loop之后,针对所要重复的代码区块,可用鼠标拖拽出矩形并将之圈住。

放开鼠标之后,即会有While循环圈住用户所选的区块。

只要将对象拖拽至While循环中,即可将其新增至While循环中。

只要条件接线端接收特定的布尔值之后,While循环随即执行代码也可通过While 循环的条件接线端来处理基本错误。

若将错误簇连接至条件接线端,则只有Status参数的真或假值传送至接线端。

同样,Stop if True和Continue if True快捷菜单项目,将分别变更为Stop if Error和Continuewhile Error。

计数接线端属于输出端点,其中包含已完成的循环次数。

While循环的循环计数均从零开始。

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

无限循环无限循环为常见的程序错误,即无法停止的循环。

若条件接线端 i为True时停止,而用户又在While循环外部放置布尔控件接线端。

一旦循环开始,控件值即成为FALSE,就会形成无限循环。

图2.While循环之外的布尔控件因为在循环开始之前,仅读取该值一次,所以改变控件的值并无法停止无限循环。

若要通过控件停止While循环,则必须在循环中配置控件接线端。

若要停止无限循环,则按下工具栏上的Abort Execution按钮,即可终止该VI。

在图3中的While 循环将不断执行,直到随机数函数的输出大于或等于10.00,且Enable控件为TRUE时才会停止。

当且仅当“与”函数的两个输入都为真时,函数的返回值才为真。

否则,与函数将回传FALSE。

在图3中,只要随机函数不产生10.00以上的值,就会成为无限循环。

图3.无限循环结构隧道隧道负责为结构传送数据。

While循环边框上的实心区块即为隧道。

此区块的颜色与隧道所连接的数据类型的颜色相同。

在循环终止之后,随即有数据送回循环。

当隧道传送数据进入循环时,只有数据抵达隧道之后,才会执行循环。

图4即以计数接线端连至隧道。

直到While 循环执行完毕,隧道中的数值才会传送至Iterations显示控件。

计数接线端在Iterations显示控件中只会显示最后的数值。

图4. While循环的隧道For循环如下图所示,For循环按规定次数执行子程序框图。

下图显示了LabVIEW中的For循环、For循环的相应流程图和实现For循环功能的伪码范例。

图5. LabVIEW中的For循环;具备For循环功能的流程图;还有For循环功能的伪码范例For 循环位于Structures面板上。

还可在程序图上放置While循环,然后对While循环的边框按下鼠标右键,再选择快捷菜单中的Replace with For Loop,即可将While循环变更为For循环。

计数接线端属于输入端点,其数值表明子程序图所应重复的次数。

计数接线端则为输出端点,显示已完成循环的次数。

For循环的循环计数均从零开始起算。

For循环与While循环的不同之处在于:For循环只执行指定的次数,而While 循环必须执行达条件接线端满足特定数值,才会停止。

图6中的For 循环将于每秒产生1组随机数字,总计100秒,并于数字显示控件中显示这些随机数字。

图6. For循环范例为循环增加定时当循结构环完成当前循环之后,随即开始执行下一次的循环,直到满足停止条件为止。

而用户往往需要控制循环的频率或定时。

以采集数据为例,若要每10秒获取数据1次,则必须为循环迭代进行定时,使其能每10秒发生一次。

即使不需要以特定的频率执行循环,也需要给处理器时间完成其它任务,如处理用户界面事件。

等待函数可在循环内放置Wait函数,让VI可休眠特定时间。

在这段等待时间之内,处理器可以处理其它任务。

Wait函数将使用操作系统的毫秒计数器。

Wait(ms)函数将等待,直到毫秒计数器达到用户所指定的输入。

此函数将确保循环的执行速率,至少等于用户所指定的输入总数。

条件结构条件结构具备超过两组的子程序图或条件。

一次仅能看到一组程序图,则此结构将单次仅执行一组条件。

输入值将决定执行的子程序框图。

条件结构近似于文本编程语言的Switch,或if…then…else结构。

在条件结构顶端的Case Selector 标签,将包含该选择器的名称。

此名称将对应至中间的条件,以及两边的增量或减量箭头。

选择Decrement 与Increment箭头,就可以滚动可用的条件。

另可选择条件名称旁边的向下箭头,再从下拉菜单中选择条件。

将输入值或条件选择器连接至Selector Terminal,即可决定所要执行的条件。

Selector Terminal必须连接整数、布尔值、字符串,或枚举类型的值。

另外,可将Selector Terminal置于条件结构的左侧边框任何一处。

若选择元端点为布尔数据类型,则结构将具备TRUE与FALSE条件。

若Selector Terminal为整数、字符串或枚举类型的值,则结构可能为任何条件。

注意:默认情况下,连接至选择器端点的字符串值,属于大小写敏感度的条件。

若仅需不对大小写敏感度的条件,可将字符串值连接至选择器端点,再对条件结构的边框按下鼠标右键,然后在快捷菜单中选择Case Insensitive Match。

若并未针对条件结构指定默认条件,以处理范围以外的数值,则必须详细列出所有可能的输入值。

以整数的选择器为例,用户指定1、2、3的条件,若输入值为4或其它未指定的整数值,则用户必须指定默认的执行条件。

注意:若选择器连接Boolean输入控件,则将无法指定默认条件。

若对条件选择器标签按下鼠标右键,则快捷菜单将不会显示Make This The Default Case。

Boolean控制元可为TRUE或FALSE,直接决定是否执行条件。

对条件结构的边框按下鼠标右键,即可add、duplicate、remove、rearrange cases,也可选择默认条件default case。

选择条件图7中的VI使用了条件结构,可根据用户所选“C”或“F”的温度单位,执行不同的程序代码。

程序图上方为前置的TRUE条件。

程序图中央则选了FALSE条件。

若要选择条件,则可在Case Selector 中输入数值,或通过Labeling 工具编辑数值。

在选择任何条件之后,此条件将显示在程序图上,即如图7下方的程序图。

图7.改变条件结构的条件视图如果用户输入的控件数值与连接至选择器端点的对象为不同的数据类型,则数值显示为红色。

这代表无法执行该VI,直到使用者删除或编辑该数值。

同样的,由于浮点运算可能发生四舍五入的错误,因此浮点数值无法作为条件选择器的数值。

如果将浮点数值接至条件,则LabVIEW会将数值舍近为最接近的整数。

若在条件选择器中键入浮点数值,则数值将显示红色,直到删除或编辑该数值才能执行该结构。

输入与输出隧道条件结构可能有多个输入或输出隧道。

输入可用于所有条件,但并非每个都条件都需要所有输入。

但各项条件均需定义一个输出隧道。

请参考以下建议:程序图上的条件结构具备一个输出隧道,且至少有一个条件并无任何输出值接至隧道。

若执行没有输出值的条件,则LabVIEW将不知道应回传何项数值至输出。

LabVIEW会在遂道中央显示为白色代表错误。

未连接的条件,可能并非是当前显示在程序图上的条件。

纠正错误时,需找到未连接输出值的条件分支,然后在该条件分支下给隧道连接一个输出值。

也可对输出隧道按下鼠标右键,并选择快捷菜单的Use Default If Unwired,即可让所有为接线隧道使用隧道数据类型的默认值。

当输出接至所有条件后,输出隧道即显示为实心的颜色。

应避免使用Use Default If Unwired选项。

此选项将无法详细呈现程序框图,并可能影响使用相同此段程序的其他工程师。

Use Default If Unwired也可能影响程序代码调试。

如果选择了该选项,使用的默认值是与隧道相连接的数据类型的默认值。

例如,如果隧道是布尔数据类型,默认值为假。

Numeric 0Boolean FALSEString empty ("")表1. 数据类型默认值其它结构LabVIEW具备更高级的执行结构,如事件结构(可处理如用户界面交互等中断任务)与顺序结构(可强制执行顺序),但是这部分内容超出了本文的范围。

若要进一步了解这些结构,可参阅LabVIEW 帮助文件中的相关主题。

在LabVIEW的循环迭代间传输数据当在LabVIEW中设计循环时,往往需要获取前一次循环的数据。

举例来说,若必须从每次循环中获取一组数据,且每五组数据又要平均一次,则必须从前一次循环获取数据。

移位寄存器当要将数值从前一次循环传至下次循环时,即可使用移位寄存器。

移位寄存器均为成对的接线端,并置于循环框的左右两边相互对应。

右侧接线端含有一个向上的箭头,用于存储每次循环结束时的数据。

LabVIEW接着将连接至寄存器右接线端的数据传送至下一次循环。

在循环执行过后,循环右边的接线端随即传回最新值,并将之储存在寄存区中。

对循环左或右侧边框按下鼠标右键,再选择Add Shift Register即可建立移位寄存器。

寄存器可传送任何数据类型,可自动变更连接寄存器的第一组对象的数据类型。

连接各寄存器端点的数据,均必须为相同类型。

单一循环可新增超过一组移位寄存器。

如循环中的多个操作都需使用前面循环的值,可以通过多个移位寄存器保存结构中不同操作的数据值。

如下图所示。

图8. 使用多个移位寄存器初始化移位寄存器初始化移位寄存器,即重设VI运行时移位寄存器传递给第一次循环的值。

如图9所示,将输入控件或常数接至循环左边的寄存器接线端,即可初始化移位寄存器。

图9. 初始化移位寄存器在图9中,For 循环将执行5次,且逐次提高寄存器所储存的数值在For循环执行5次之后,寄存器随即传送最终值5至显示控件,且VI随即退出。

每次只要执行VI,寄存器均以0开始。

若不要初始化寄存器,则循环将使用最近一次执行时写入至寄存器的值;如果尚未执行过循环,则将使用该数据类型的默认值。

使用未初始化的移位寄存器可以保留VI连续执行期间的状态信息。

图10.未初始化的移位寄存器在图10中,For循环将执行5次,且逐次提高寄存器所储存的数值。

当首次执行VI时,寄存器即从0开始,也为32位整数的默认值。

相关主题