第二章程序结构 2.1循环结构 2.1.1 While循环 While循环可以反复执行循环体的程序,直至到达某个边界 条件。它类似于普通编程语言中的Do循环和 Repeat-Unti1循 环。 While循环的框图是一个大小可变的方框,用于执行框中的 程序,直到条件端子接收到的布尔值为 FALSE 该循环有如下特点 计数从0开始(i=0)。 先执行循环体,而后i+1,如果循环只执行一次,那么 循环输出值i=0。 循环至少要运行一次。 条件端子 循环变量 图2-1Whle循环示意图 练习2-1使用 While循环和图表 目的:用 While循环和图表获得数据,并实时显示。 创建一个可以产生并在图表中显示随机数的Ⅵ。前面板有 个控制旋钮可在0到10秒之间调节循环时间,还有一个开关 可以中止ⅥI的运行。学习怎样改变开关的动作属性,以便不用 每次运行Ⅵ时都要打开开关。操作步骤如下: 前面板 随机信号 循环延时 4.06.0 0.8 0.6 0.0 0.4 0.2 控制开关 1023 OFF 图2-2练习2-1的前面板 1.选择File)NeW,打开一个新的前面板。 2.选择 Controls》 Boolean,在前面板中放置一个开关
第二章程序结构 2.1 循环结构 2.1.1 While 循环 While 循环可以反复执行循环体的程序,直至到达某个边界 条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循 环。While 循环的框图是一个大小可变的方框,用于执行框中的 程序,直到条件端子接收到的布尔值为 FALSE。 z 该循环有如下特点: z 计数从 0 开始(i=0)。 z 先执行循环体,而后 i+1,如果循环只执行一次,那么 循环输出值 i=0。 z 循环至少要运行一次。 循环变量 条件端子 图2-1 While 循环示意图 练习 2-1 使用 While 循环和图表 目的:用 While 循环和图表获得数据,并实时显示。 创建一个可以产生并在图表中显示随机数的 VI。 前面板有 一个控制旋钮可在 0 到 10 秒之间调节循环时间,还有一个开关 可以中止 VI 的运行。学习怎样改变开关的动作属性,以便不用 每次运行 VI 时都要打开开关。操作步骤如下: 前面板 控制开关 1.0 0.0 0.2 0.4 0.6 0.8 0 1023 随机信号 0.0 10.0 2.0 4.0 6.0 8.0 循环延时 ON OFF 图2-2 练习2-1的前面板 1. 选择 File»New,打开一个新的前面板。 2. 选择 Controls»Boolean,在前面板中放置一个开关
设置开关的标签为控制开关。 3.使用标签工具创建0N和OFF的标签,放置于开关旁。 4.选中 Controls》 Graph,在前面板中放置一个波形图(是 art,而不是 graph)。设置它的标签为随机信号。这个图表 用于实时显示随机数 5.把图表的纵坐标改为0.0到1.0。方法是用标签工具 把最大值从10.0改为1.0。 6.选择 Controls》 Numeric,在前面板中放置一个旋钮。 设置旋钮的标签为循环延时。这个旋钮用于控制Wie循环的 循环时间。 流程图 7.开流程图,按照下图创建流程图。 随机信号 DBL DBL 控制开为 TF 图2-2练习2-1的流程图 a.从 Functions)Structures中选择 While循环,把它 放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。 b.从 Functions》№ meric中选择随机数(0-1)功能函 数放到循环内 C.在循环中设置 Wait unti1 Next ms Multiple函数 ( Functions》Time& Dialog),该函数的时间单位是毫秒,按 目前面板旋钮的标度,可将每次执行时间延迟0到10毫秒。 d.照上面所示的流程图连线,把随机数功能函数和随机 信号图表输入端子连接起来,并把启动开关和 While循环的条 件端子连接。 8.返回前面板,调用操作工具后单击垂直开关将它打开。 9.把该Ⅵ保存为 LabVIEW\Activity目录中的 Random 10.执行该ⅥI。 While循环的执行次数是不确定的,只要 设置的条件为真,循环程序就会持续运行。在这个例子中,只要 开关打开(TRUE),框图程序就会一直产生随机数,并将其在图 表中显示。 11.单击垂直开关,中止该Ⅵ。关闭开关这个动作会给循 环条件端子发送一个 FALSE值,从而中止循环。 12.用鼠标右键单击图表,选择Data0 perations>clear
设置开关的标签为控制开关。 3. 使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。 4. 选中 Controls»Graph,在前面板中放置一个波形图(是 chart,而不是 graph)。设置它的标签为随机信号。这个图表 用于实时显示随机数。 5. 把图表的纵坐标改为 0.0 到 1.0。方法是用标签工具 把最大值从 10.0 改为 1.0。 6. 选择 Controls»Numeric,在前面板中放置一个旋钮。 设置旋钮的标签为循环延时。这个旋钮用于控制 While 循环的 循环时间。 流程图 7. 开流程图,按照下图创建流程图。 随机信号 循环延时 控制开关 图2-2 练习2-1的流程图 a. 从 Functions»Structures 中选择 While 循环,把它 放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。 b. 从 Functions» Numeric 中选择随机数(0-1)功能函 数放到循环内。 c. 在循环中设置 Wait Until Next ms Multiple 函数 (Functions»Time & Dialog),该函数的时间单位是毫秒,按 目前面板旋钮的标度,可将每次执行时间延迟 0 到 10 毫秒。 d. 照上面所示的流程图连线,把随机数功能函数和随机 信号图表输入端子连接起来,并把启动开关和 While 循环的条 件端子连接。 8. 返回前面板,调用操作工具后单击垂直开关将它打开。 9. 把该 VI 保存为 LabVIEW\Activity 目录中的 Random Signal.vi。 10. 执行该 VI。While 循环的执行次数是不确定的,只要 设置的条件为真,循环程序就会持续运行。在这个例子中,只要 开关打开(TRUE),框图程序就会一直产生随机数,并将其在图 表中显示。 11. 单击垂直开关,中止该 VI。关闭开关这个动作会给循 环条件端子发送一个 FALSE 值,从而中止循环。 12. 用鼠标右键单击图表,选择 Data Operations»Clear
Chart,清除显示缓存,重新设置图表。 练习2-1结束 附注与说明 布尔开关的机械动作 布尔开关有6种机械动作属性可供选择。在前面板上用鼠标右键单击开关,在快捷菜单 中选择 Mechanical Action就可以看到这些可选的动作。LabⅥIEW还提供了一个范例示范这 些动作,它是位于 Examples\ General\Controls\ booleans.11b的 Mechanical action of 2.1.2移位寄存器( Shift register) 移位寄存器可以将数据从一个循环周期传递到另 外一个周期。在程序设计中,经常要用到它.创建 个移位寄存器的方法是,用鼠标右键单击循环的左边 Visible items 或者右边,在快捷菜单中选择 Add Shift register。如 Description and Tip 右图所示。 Set Breakpoint 移位寄存器在流程图 上用在循环边框上相应的 Remove While Loop 一对端子来表示。右边的 I Add Shift Register 端子中存储了一个周期完 成后的数据,这些数据在 √ Continue if true 这个周期完成之后将被转 移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类 型的数据一一数值、布尔数、数组、字符串等等。它会自动适应 与它连接的第一个对象的数据类型。下图表示了它的工作过程 Betore Loco Eons Fir lennon 图2-3 Shift register的工作过程 可以令移位寄存器记忆前面的多个周期的数值。这个功能对
Chart,清除显示缓存,重新设置图表。 练习 2-1结束 附注与说明 布尔开关的机械动作: 布尔开关有 6 种机械动作属性可供选择。在前面板上用鼠标右键单击开关,在快捷菜单 中选择 Mechanical Action 就可以看到这些可选的动作。LabVIEW 还提供了一个范例示范这 些动作,它是位于 Examples\General\Controls\booleans.llb 的 Mechanical Action of Booleans.vi。 2.1.2 移位寄存器(Shift Register) 移位寄存器可以将数据从一个循环周期传递到另 外一个周期。在程序设计中,经常要用到它.创建一 个移位寄存器的方法是,用鼠标右键单击循环的左边 或者右边,在快捷菜单中选择 Add Shift Register。如 右图所示。 移位寄存器在流程图 上用在循环边框上相应的 一对端子来表示。右边的 端子中存储了一个周期完 成后的数据,这些数据在 这个周期完成之后将被转 移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类 型的数据--数值、布尔数、数组、字符串等等。它会自动适应 与它连接的第一个对象的数据类型。下图表示了它的工作过程. 图2-3 Shift Register 的工作过程 可以令移位寄存器记忆前面的多个周期的数值。这个功能对
于计算数据均值非常有用。还可以创建其他的端子访问先前的周 期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷 菜单中选择 Add Element。例如,如果某个移位寄存器左边的端 口含有三个元素,那么就可以访问前三个周期的数据。 练习2-2使用移位寄存器 目的:创建一个可以在图表中显示运行平均数的Ⅵ 前面板 1.打开一个新的前面板,按照下图所示创建对象。 2.把波形图表的坐标范围改为00到20。 3.在添加竖直坐标之后,用鼠标右键单击它,在快捷菜单中选择 Mechanical Actiony latch when Pressed,再选择 Operate Make Current Values Default,把ON状态设 置为默认状态。 Boolean 随机数 缺省值:OM 机械动竹 Latch When Pressed 1.0 0.0 图2-4练习2-2的前面板 流程图 4.按下图创建流程图。 通机数 DBL olean 图2-4练习2-2的流程图
于计算数据均值非常有用。还可以创建其他的端子访问先前的周 期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷 菜单中选择 Add Element。例如,如果某个移位寄存器左边的端 口含有三个元素,那么就可以访问前三个周期的数据。 练习 2-2 使用移位寄存器 目的:创建一个可以在图表中显示运行平均数的VI。 前面板 1.打开一个新的前面板,按照下图所示创建对象。 2.把波形图表的坐标范围改为 0.0 到 2.0。 3.在 添 加 竖 直 坐 标 之 后 , 用 鼠 标 右 键 单 击 它 , 在 快 捷 菜 单 中 选 择 Mechanical Action»Latch When Pressed,再选择 Operate»Make Current Values Default,把 ON 状态设 置为默认状态。 2.0 0.0 0.5 1.0 1.5 0 50 随机数 Boolean ON OFF 缺省值:ON 机械动作 Latch When Pressed 图2-4 练习2-2的前面板 流程图 4.按下图创建流程图。 0.5 随机数 4.00 500 Boolean 图2-4 练习2-2的流程图
5.在流程图中添加 While循环( FunctionsStructures),创建移位寄存器。 a.用鼠标右键单击Whle循环的左边或者右边,在快捷菜单中选择 Add Shift register b.用鼠标右键单击寄存器的左端子,在快捷菜单中选择 Add element,添加一个寄存 器。用同样的方法创建第三个元素 Random Number(0-1)函数( Functions Numeric)一产生0到1之间的某个随机数。 7. Compound Arithmetic函数( Functions> Numeric)—在本练习中,它将返回两个周期 产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中 选择 Add Input 8.除法函数( Functions numeric)—在本练习中,它用于返回最近四个随机数的平均 值 9.数值常数( Functions> Numeric)—在Whle循环的每个周期, Random Number(0-1) 函数将产生一个随机数。ⅥI就将把这个数加入到存储在寄存器中的最近三个数值中 Random Number(0-1)再将结果除以4,就能得到这些数的平均值(当前数加上以前的 三个数)。然后再将这个平均值显示在波形图中。 10. Wait Until Next ms Multiple函数( Functions> Time& Dialog)——它将确保循环 的每个周期不会比毫秒输入快。在本练习中,毫秒输入的值是500毫秒。如果用鼠标右 键单击图标,从快捷菜单中选择Ⅴ isible label,,就可以看到 Wait Until Next ms Multiple 的标签。 11.用鼠标右键单击 Wait Until Next ms Multiple功能函数的输入端子,在快捷菜单中 选择 Create Constant。出现一个数值常数,并自动与功能函数连接 12.将 Constant设置为500。这样连接到函数的数值常数设置了500毫秒的等待时间。 因此循环每半秒执行一次。注意,ⅥI用一个随机数作为移位寄存器的初始值。如果没 有设置移位寄存器端子的初始值,它就含有一个默认的数值,或者上次运行结束时的数 值,因此开始得到的平均数没有任何意义 13.执行该Ⅵl,观察过程。 14.把该Ⅵ保存为LabⅤ EW\Activity目录下的 Random Average. vi 练习2-2结束。 附注:移位寄存器的初值 上面的练习中对移位寄存器设置了初值0.5。如果不设这个初值,默认的初值是0 在这个例子中,一开始的计算结果是不对的,只有到循环完3次后移位寄存器中的过去值才 填满,即第4次循环执行后可以得到正确的结果。 2.1.3For循环 For循环用于将某段程序执行指定次数。和 While循环一样, 它不会立刻出现在流程图中,而是出现一个小的图标,而后您可 以修改它的大小和位置。具体的方法是,先单击所有端子的左上 方,然后按下鼠标,拖曳出一个包含所有端子的矩形。释放鼠标 时就创建了一个指定大小和位置的For循环
5.在流程图中添加 While 循环(Functions»Structures),创建移位寄存器。 a. 用鼠标右键单击 While 循环的左边或者右边,在快捷菜单中选择 Add Shift Register。 b. 用鼠标右键单击寄存器的左端子,在快捷菜单中选择 Add Element,添加一个寄存 器。用同样的方法创建第三个元素。 6.Random Number (0–1)函数(Functions»Numeric)——产生 0 到 1 之间的某个随机数。 7.Compound Arithmetic 函数(Functions»Numeric)——在本练习中,它将返回两个周期 产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中 选择 Add Input。 8.除法函数(Functions»Numeric)——在本练习中,它用于返回最近四个随机数的平均 值。 9.数值常数(Functions»Numeric)——在 While 循环的每个周期,Random Number (0–1) 函数将产生一个随机数。VI 就将把这个数加入到存储在寄存器中的最近三个数值中。 Random Number (0–1)再将结果除以 4,就能得到这些数的平均值(当前数加上以前的 三个数)。然后再将这个平均值显示在波形图中。 10. Wait Until Next ms Multiple 函数 (Functions»Time & Dialog)——它将确保循环 的每个周期不会比毫秒输入快。在本练习中,毫秒输入的值是 500 毫秒。如果用鼠标右 键单击图标,从快捷菜单中选择 Visible»Label,就可以看到 Wait Until Next ms Multiple 的标签。 11. 用鼠标右键单击 Wait Until Next ms Multiple 功能函数的输入端子,在快捷菜单中 选择 Create Constant。出现一个数值常数,并自动与功能函数连接。 12. 将 Constant 设置为 500。这样连接到函数的数值常数设置了 500 毫秒的等待时间。 因此循环每半秒执行一次。注意,VI 用一个随机数作为移位寄存器的初始值。如果没 有设置移位寄存器端子的初始值,它就含有一个默认的数值,或者上次运行结束时的数 值,因此开始得到的平均数没有任何意义。 13. 执行该 VI,观察过程。 14. 把该 VI 保存为 LabVIEW\Activity 目录下的 Random Average.vi。 练习 2-2 结束。 附注:移位寄存器的初值: 上面的练习中对移位寄存器设置了初值0.5。如果不设这个初值,默认的初值是0。 在这个例子中,一开始的计算结果是不对的,只有到循环完3次后移位寄存器中的过去值才 填满,即第4次循环执行后可以得到正确的结果。 2.1.3 For 循环 For循环用于将某段程序执行指定次数。和While 循环一样, 它不会立刻出现在流程图中,而是出现一个小的图标,而后您可 以修改它的大小和位置。具体的方法是,先单击所有端子的左上 方,然后按下鼠标,拖曳出一个包含所有端子的矩形。释放鼠标 时就创建了一个指定大小和位置的 For 循环