3.1 For循环结构

3.1.1 For循环的建立

For循环位于结构子模板中,它包含两个端口:循环总数和循环计数,如图3-2所示。

978-7-111-58789-7-Chapter03-5.jpg

图3-2 For循环结构图

计数端口:指定循环执行的次数,除非使用自动索引功能,否则必须在For循环框外为计数端口连接一个整型数,指定循环执行的次数。

重复端口:用以记录已执行循环的次数,可用于For循环内部的重复计数,子程序框图每执行一次,i的值自动加1,直到N-1为止,程序跳出循环(注意:i是从0开始计数)。

3.1.2 移位寄存器

在循环中如果后一次运算要用到前一次循环结果,就需要使用移位寄存器。

1.创建移位寄存器

在循环体边框上,用鼠标右键单击循环的左侧或右侧边框,从快捷菜单中选择“添加移位寄存器”命令,可以创建一个移位寄存器。如图3-3所示,移位寄存器以一对接线端的形式出现,并且以相反的方向分别位于循环两侧的垂直边框上。右侧接线端含有一个向上的箭头,用于存储每次循环结束时的数据。

978-7-111-58789-7-Chapter03-6.jpg

图3-3 移位寄存器

LabVIEW可将连接到右侧寄存器的数据传递到下一次循环中。循环执行后,右侧接线端将返回移位寄存器所保存的值。移位寄存器可以传递任何数据类型,自动与连接到移位寄存器的第一个对象所属的数据类型保持一致。连接到移位寄存器接线端的数据必须属于同一数据类型。在循环中可以添加多对移位寄存器。如果在循环中多次使用之前循环的数据,可以通过多个移位寄存器保存不同操作的数据值,这对求几个数据的平均值很有用。在循环体边框上,用鼠标右键单击循环边框,从快捷菜单中选择“添加元素”命令。

2.初始化移位寄存器

当For循环在执行第0次循环时,For循环的数据缓冲区没有数据存储,所以在使用移位寄存器时,必须根据编程需要对左侧的移位寄存器进行初始化,如图3-4所示。

978-7-111-58789-7-Chapter03-7.jpg

图3-4 移位寄存器的初始化

3.自动索引

框架通道是For循环与循环体外部进行数据交换的数据通道,其功能是在For循环开始运行前,将循环外其他节点产生的数据送至循环体内,供循环体内的节点使用。在For循环运行结束时,将循环体内节点产生的数据送至循环体外,供循环体外其他节点的使用。用连线工具将数据连线从循环体框架内直接拖至循环外,LabVIEW会自动生成一个框架通道。框架通道有两种属性:有索引通道图标是白色空心框,无索引通道图标变成实心框。

用鼠标右键单击循环体边框上的通道,并从快捷菜单中选择启用索引或禁用索引可以启用或禁用自动索引。

3.1.3 For循环应用

【例3-1】 计算一组随机数的最大值和最小值。

1)新建一个VI,在前面板上放置一个波形图表,它位于图形显示控件子模板中,用它来记录产生的随机数。同时在前面板上放置两个数值显示控件“最大值”和“最小值”,用来显示随机数中的最大值和最小值。

2)在流程图编辑窗口中,放置一个For循环,设置循环次数为50次。单击边框选择添加两个移位寄存器,分别初始化为0和1。

3)放置随机数函数和最大值与最小值函数到程序框图中,其中最大值与最小值函数位于比较子模板中选取最大值与最小值函数,然后连线。

4)运行程序。

程序前面板图和流程图分别如图3-5和图3-6所示。

978-7-111-58789-7-Chapter03-8.jpg

图3-5 例3-1程序前面板图

978-7-111-58789-7-Chapter03-9.jpg

图3-6 例3-1流程图

【例3-2】 计算978-7-111-58789-7-Chapter03-10.jpg

1)在前面板上放置一个数值输入控件“阶次n”和一个数值显示控件“求和结果”。

2)在程序框图上放置两个For循环嵌套结构,外层循环的计数端口与“阶次n”连接,输出是各个数的阶乘所组成的一个数组。它的重复端子加1作为内层循环的循环次数,内层循环利用一个移位寄存器实现阶乘运算,移位寄存器的初始值设为1。

3)同样在程序框图的右边再放置一个For循环结构,它的计数端子没有连接任何数据,使用的是自动索引功能。这个循环的作用是对由阶乘所组成的一个数组进行索引,对索引出的各个元素进行求和计算,最后将计算结果输出给“求和结果”。

4)完成连线,设置“阶乘n”为5,程序前面板图和流程图如图3-7所示,运行程序。

978-7-111-58789-7-Chapter03-11.jpg

图3-7 例3-2程序前面板图和流程图