1、第第4 4章章 LabVIEWLabVIEW的程序结构的程序结构第第4 4章章 LabVIEWLabVIEW的程序结构的程序结构 熟练掌握循环结构、条件结构、顺序结 构的使用方法 理解移位寄存器和反馈节点的概念 掌握公式节点与事件结构的用法 理解局部变量与全局变量的作用,掌握这二种变量的操作方法第第4 4章章 LabVIEWLabVIEW的程序结构的程序结构 程序结构对任何一种计算机编程语言来说都是十分重要的,它控制整程序结构对任何一种计算机编程语言来说都是十分重要的,它控制整个程序语言的执行过程,一个好的程序结构,可以大大提高程序的执行效率。个程序语言的执行过程,一个好的程序结构,可以大大提
2、高程序的执行效率。LabVIEWLabVIEW作为一种图形化的高级程序开发语言,执行的是数据流驱动机制,作为一种图形化的高级程序开发语言,执行的是数据流驱动机制,在程序结构方面除支持循环、顺序、条件等通用编程语言支持的结构外,还在程序结构方面除支持循环、顺序、条件等通用编程语言支持的结构外,还包含一些特殊的程序结构,如事件结构、使能结构、公式节点等等。包含一些特殊的程序结构,如事件结构、使能结构、公式节点等等。由于由于LabVIEWLabVIEW是图形化编程语言,它的代码以图形形式表现,因此各种是图形化编程语言,它的代码以图形形式表现,因此各种结构的实现也是图形化的。每种结构都含有一个可调整大
3、小的清晰边框,用结构的实现也是图形化的。每种结构都含有一个可调整大小的清晰边框,用于包围根据结构规则执行的程序框图部分。于包围根据结构规则执行的程序框图部分。1.For1.For循环的构成循环的构成ForFor循环由循环框架、总数接线端循环由循环框架、总数接线端N N和计数接线和计数接线端端i i组成组成该循环结构类似于以下该循环结构类似于以下C C语言:语言:forfor(i=0i=0;iNiN;i+i+)循环体循环体 4.1 4.1 循环结构循环结构4.1.1 For4.1.1 For循环循环ForFor循环的执行流程:循环的执行流程:在开始执行前,从循环总数接线端读入循环执行次数,在开始
4、执行前,从循环总数接线端读入循环执行次数,然后循环计数接线端输出当前已经执行循环次数的数值,接着执行循环框架然后循环计数接线端输出当前已经执行循环次数的数值,接着执行循环框架中的程序代码,当循环框架中的程序执行完后,如果执行循环次数未达到设中的程序代码,当循环框架中的程序执行完后,如果执行循环次数未达到设定次数,则继续执行,否则退出循环。定次数,则继续执行,否则退出循环。如果循环总数接线端子的初始值为如果循环总数接线端子的初始值为0 0,则,则ForFor循环内的程序一次都不执行。循环内的程序一次都不执行。在循环执行过程中,改变循环总数接线端的值将不改变循环执行次数,循环在循环执行过程中,改变
5、循环总数接线端的值将不改变循环执行次数,循环按执行前读入的循环总数接线端所确定的次数执行。按执行前读入的循环总数接线端所确定的次数执行。2.For循环的执行过程循环的执行过程ForFor循环的执行中止方式有两种:其一是执行完成循环的执行中止方式有两种:其一是执行完成N N次循环;其二是添加条件次循环;其二是添加条件接线端,当满足条件时停止循环。接线端,当满足条件时停止循环。添加条件接线端的方法是,在添加条件接线端的方法是,在ForFor循环结构边框单击右键,从快捷菜单循环结构边框单击右键,从快捷菜单中选择中选择“条件接线端条件接线端”。将停止循环的布尔数据(如布尔控件或比较函数的输出值)连至条
6、件接将停止循环的布尔数据(如布尔控件或比较函数的输出值)连至条件接线端,则可以通过条件接线端的输入中止循环的执行。线端,则可以通过条件接线端的输入中止循环的执行。条件接线端条件接线端 3.For3.For循环的执行中止循环的执行中止 并行并行ForFor循环可为一个循环可为一个ForFor循环分配多个线程,利用多个处理器提高循环分配多个线程,利用多个处理器提高ForFor循环的执行速度,特别是对于处理大量计算,能大大提高执行效率。循环的执行速度,特别是对于处理大量计算,能大大提高执行效率。右键单击右键单击ForFor循环外框,在快捷菜单中选择循环外框,在快捷菜单中选择“配置循环并行配置循环并行
7、”,打开,打开ForFor循环并行迭代对话框,启用并行循环。循环并行迭代对话框,启用并行循环。4并行并行For循环循环 当循环次数不能确定时,就需要用到当循环次数不能确定时,就需要用到WhileWhile循环。它相当于循环。它相当于C C语言中的语言中的DoDo循环。循环。dodo 循环体;循环体;While While(条件)(条件)4.1.2 While4.1.2 While循环循环 基本的基本的WhileWhile循环由循环框架、计数循环由循环框架、计数接线端接线端i i和条件接线端组成。和条件接线端组成。条件接线端是一个布尔变量,接入布尔条件接线端是一个布尔变量,接入布尔值用于控制循环
8、执行。条件接线端有两种值用于控制循环执行。条件接线端有两种使用状态。使用状态。与与ForFor循环是在执行前检查是否符合条件不同,循环是在执行前检查是否符合条件不同,WhileWhile循环是在执行后再检查条循环是在执行后再检查条件端子,因此,在件端子,因此,在WhileWhile循环的执行流程中,循环框架中的代码至少执行一次。循环的执行流程中,循环框架中的代码至少执行一次。4.1.3 4.1.3 循环结构的循环隧道与自动索引循环结构的循环隧道与自动索引 循环结构(包括循环结构(包括ForFor循环和循环和WhileWhile循环)通过循环)通过循环循环隧道与外部代码进行数隧道与外部代码进行数
9、据交换,当直接把循环结构内的对象和外部对象连接起来时,在连线所经过据交换,当直接把循环结构内的对象和外部对象连接起来时,在连线所经过的循环结构的边框上出现一个小方格,这就是数据隧道。它的作用是确认数的循环结构的边框上出现一个小方格,这就是数据隧道。它的作用是确认数据在循环结构内外的传递。数据隧道分为据在循环结构内外的传递。数据隧道分为输入输入隧道隧道和和输出输出隧道隧道,输入隧道用,输入隧道用于从外部向内部传递数据,输出隧道用于从内部向外部传递数据。隧道的数于从外部向内部传递数据,输出隧道用于从内部向外部传递数据。隧道的数据类型和输入的数据类型相同,颜色也和输入数据类型的颜色相同。据类型和输入
10、的数据类型相同,颜色也和输入数据类型的颜色相同。1.1.循环循环隧道隧道循环结构的所有输入数据都是在循环结构的所有输入数据都是在进入循环之前进入循环之前被读取的,循环开始后便不再读被读取的,循环开始后便不再读取输入数据;而输出数据只有在循环取输入数据;而输出数据只有在循环执行完毕执行完毕才输出,循环过程中不输出数据。才输出,循环过程中不输出数据。For For循环和循环和WhileWhile循环的数据隧道还有自动索引功能。当把一个数组连循环的数据隧道还有自动索引功能。当把一个数组连接到循环结构的边框上生成隧道后,可以选择是否打开自动索引功能接到循环结构的边框上生成隧道后,可以选择是否打开自动索
11、引功能。如果。如果自动索引功能被打开,则自动索引将自动计算数组的长度并根据数组长度决自动索引功能被打开,则自动索引将自动计算数组的长度并根据数组长度决定循环次数,数组将在每次循环中按顺序取出一个值,该值在原数组中的索定循环次数,数组将在每次循环中按顺序取出一个值,该值在原数组中的索引与当次循环的重复端子值相同,就是说数组在循环内部将会降低一维,比引与当次循环的重复端子值相同,就是说数组在循环内部将会降低一维,比如二维数组变为一维数组,一维数组变为标量元素等。如二维数组变为一维数组,一维数组变为标量元素等。2 2隧道模式与自动索引隧道模式与自动索引(1 1)。如果输入隧道的索引功能被启用,则索引
12、功能将自动计。如果输入隧道的索引功能被启用,则索引功能将自动计算数组的长度并根据数组长度决定循环次数,数组将在每次循环中按顺算数组的长度并根据数组长度决定循环次数,数组将在每次循环中按顺序取出一个值。序取出一个值。数组长度为数组长度为4,循环进行循环进行4次次数组长度为数组长度为4,循环总数为循环总数为3,循环进行循环进行3次次 输入二维数组,则输入二维数组,则ForFor循环的循环次数由数组的行数与循环的循环次数由数组的行数与N N值共同决定,值共同决定,而每次循环时将以而每次循环时将以“行行”为单位将数据顺序输入循环框架进行运算。为单位将数据顺序输入循环框架进行运算。多个数组同时按照启用索
13、引方式输入时,循环的次数以元素最少的数组为准多个数组同时按照启用索引方式输入时,循环的次数以元素最少的数组为准 当循环结构输入隧道当循环结构输入隧道禁用索引禁用索引功能后,循环执行次数由循环总数端子接功能后,循环执行次数由循环总数端子接入数据决定。在每次循环时,数组整体传入循环框架进行运算。入数据决定。在每次循环时,数组整体传入循环框架进行运算。(2 2)。配置循环输出隧道,以返回数组的索引值、最终值或连。配置循环输出隧道,以返回数组的索引值、最终值或连接值。右键单击循环的输出隧道,从快捷菜单中选择接值。右键单击循环的输出隧道,从快捷菜单中选择“隧道模式隧道模式”“最最终值终值”、“索引索引”
14、或或“连接连接”。索引:每循环一次,输出数组中就增加一个元素。因此,自动索引的输索引:每循环一次,输出数组中就增加一个元素。因此,自动索引的输出数组的大小等于循环的次数。出数组的大小等于循环的次数。最终值:输出隧道只返回最后一次循环的元素值。最终值:输出隧道只返回最后一次循环的元素值。连接:连接:LabVIEWLabVIEW按顺序连接所有输入,形成与连接的输入数组相同维度的按顺序连接所有输入,形成与连接的输入数组相同维度的输出数组。连接隧道模式下,连接数组的方式和创建数组函数的方输出数组。连接隧道模式下,连接数组的方式和创建数组函数的方式相同。式相同。循环对数组的索引作用在输入隧道与输出隧道的
15、表现是不同的,一维循环对数组的索引作用在输入隧道与输出隧道的表现是不同的,一维数组进入循环时,隧道提取其中的标量值;二维数组进入循环时,隧道提数组进入循环时,隧道提取其中的标量值;二维数组进入循环时,隧道提取其中的一维数组。输出隧道的情况正好相反,标量元素在输出隧道上按取其中的一维数组。输出隧道的情况正好相反,标量元素在输出隧道上按顺序累积形成一维数组,一维数组累积形成二维数组,以此类推。顺序累积形成一维数组,一维数组累积形成二维数组,以此类推。For For循环和循环和WhileWhile循环都支持自动索引功能,但其主要区别在于:循环都支持自动索引功能,但其主要区别在于:ForFor循循环的
16、数组默认为能自动索引,如不需要索引,可在数组进入循环的通道上单环的数组默认为能自动索引,如不需要索引,可在数组进入循环的通道上单击鼠标右键弹出快捷菜单选择击鼠标右键弹出快捷菜单选择“禁用索引禁用索引”选项;而选项;而WhileWhile循环中的数组默循环中的数组默认为不能自动索引,如果需要索引,可在循环的通道上单击鼠标右键弹出快认为不能自动索引,如果需要索引,可在循环的通道上单击鼠标右键弹出快捷菜单选择捷菜单选择“启用索引启用索引”选项。选项。4.1.4 4.1.4 移位寄存器和反馈节点移位寄存器和反馈节点 为了实现将前几次循环完成时的某个数据传递到下一次循环的开始,为了实现将前几次循环完成时
17、的某个数据传递到下一次循环的开始,LabVIEWLabVIEW在循环结构中引入了移位寄存器。移位寄存器的功能是将在循环结构中引入了移位寄存器。移位寄存器的功能是将i-1i-1、i-2i-2、i-3i-3次循环的计算结果保存在循环的缓冲区中,并在第次循环的计算结果保存在循环的缓冲区中,并在第i i次循环时将这些数次循环时将这些数据从循环框架左侧的移位寄存器中送出,供循环框架内的节点使用。据从循环框架左侧的移位寄存器中送出,供循环框架内的节点使用。在循环结构中创建移位寄存器的方法是在循环框图的边在循环结构中创建移位寄存器的方法是在循环框图的边框上框上单击鼠标右键,单击鼠标右键,在弹出的快捷菜单中选
18、择在弹出的快捷菜单中选择“添加移位寄存器添加移位寄存器”命令,便可以为循环结构创建命令,便可以为循环结构创建一个移位寄存器。一个移位寄存器。移位寄存器听执行过程如下:当每次循环结束时,移位寄存器的右端子移位寄存器听执行过程如下:当每次循环结束时,移位寄存器的右端子保存传入其中的数据,并在下一次循环开始前传给左端子,这样就可以从左保存传入其中的数据,并在下一次循环开始前传给左端子,这样就可以从左端子得到前一次循环结束的输出值,该值可以用于进行下一次的循环。端子得到前一次循环结束的输出值,该值可以用于进行下一次的循环。要要为移位寄存器的左端子指定初始值,其初始化值将在循环开始前读入一为移位寄存器的
19、左端子指定初始值,其初始化值将在循环开始前读入一次,循环执行后就不再读取该初始值。移位寄存器的值通过右端子输出到循次,循环执行后就不再读取该初始值。移位寄存器的值通过右端子输出到循环结构外,输出的值是移位寄存器右端子的最终值。环结构外,输出的值是移位寄存器右端子的最终值。一个移位寄存器可以有一个移位寄存器可以有多个多个左端子左端子,但只能有,但只能有一个右端子一个右端子。右击移位寄存器,在弹出的快右击移位寄存器,在弹出的快捷菜单中选择捷菜单中选择“添加元素添加元素”命命令,就可以添加一个元素;用令,就可以添加一个元素;用鼠标将左端子向下拖动,好可鼠标将左端子向下拖动,好可以添加多个元素。以添加
20、多个元素。移位寄存器的左端子元素分别对应前几次循环的输出数据,其能保存的移位寄存器的左端子元素分别对应前几次循环的输出数据,其能保存的数目与左端子数目相同。第数目与左端子数目相同。第i i次循环结束时,其数据便进入最上面的左端子;次循环结束时,其数据便进入最上面的左端子;而第而第i-1i-1次循环的数据被挤到第次循环的数据被挤到第2 2个端子上;第个端子上;第i-2i-2次循环的数据被挤到第次循环的数据被挤到第3 3个个端子上;依次类推,最后一个端子上原来的数据被抛弃。端子上;依次类推,最后一个端子上原来的数据被抛弃。一个一个ForFor循环或循环或WhileWhile循环可以建立多个移位寄存
21、器循环可以建立多个移位寄存器 反馈节点位于反馈节点位于“函数函数”“结构结构”子选板上,其功能和只有一个左端子选板上,其功能和只有一个左端子的移位寄存器完全相同,它同样用于将数据从一次循环传递到下一次子的移位寄存器完全相同,它同样用于将数据从一次循环传递到下一次循环,但和移位寄存器相比,反馈节点是一种在两次循环之间传递数据循环,但和移位寄存器相比,反馈节点是一种在两次循环之间传递数据更简洁的表示形式。更简洁的表示形式。反馈节点由两部分组成,分别为反馈节点和初始化接线端。反馈节反馈节点由两部分组成,分别为反馈节点和初始化接线端。反馈节点的箭头点的箭头表示连线上的数据流动方向,可以通过右键的快捷菜
22、单中选择表示连线上的数据流动方向,可以通过右键的快捷菜单中选择“修改方向修改方向”项来项来改变改变。初始化端子既可位于循环框图内,也可位于循。初始化端子既可位于循环框图内,也可位于循环框图外,默认为位于循环框图内。若要把初始化接线端移动到循利框环框图外,默认为位于循环框图内。若要把初始化接线端移动到循利框图外,可在初始化端子上单击鼠标右键,从弹出的快捷菜单中选择图外,可在初始化端子上单击鼠标右键,从弹出的快捷菜单中选择“将将初始化器移出一个循环初始化器移出一个循环”项来完成操作。项来完成操作。移位寄存器和反馈节点可以互相转换,在移位寄存器的右键快捷菜单移位寄存器和反馈节点可以互相转换,在移位寄
23、存器的右键快捷菜单中选择中选择“替换为反馈节点替换为反馈节点”项,即可将移位寄存器转换为反馈节点。反之,项,即可将移位寄存器转换为反馈节点。反之,移位寄存器也同样可替换为反馈节点。移位寄存器也同样可替换为反馈节点。用用For循环和循环和While循环分别实现循环分别实现100以内的奇数之和,即以内的奇数之和,即1+3+5+99。【实训练习实训练习】4.2 4.2 条件结构条件结构分支选择器选择器标签减量按钮增量按钮当前显示分支当前分支程序子框架条件结构位于条件结构位于“函数函数”“结构结构”子选板中子选板中相当于相当于C C语言中的语言中的switchswitch语句:语句:switchswi
24、tch(表达式)(表达式)case case 常量表达式常量表达式1 1:语句:语句1 1;case case 常量表达式常量表达式2 2:语句:语句2 2;case case 常量表达式常量表达式n n:语句:语句n n;default default :语句:语句n+1n+1;条件结构是用来控制在不同条件下执行不同程序块的功能条件结构是用来控制在不同条件下执行不同程序块的功能,基本条件结基本条件结构由条件结构分支程序子框架、分支选择器端子、选择器标签及减量增量按构由条件结构分支程序子框架、分支选择器端子、选择器标签及减量增量按钮组成。钮组成。分支选择器选择器标签减量按钮增量按钮当前显示分支
25、当前分支程序子框架 分支选择器分支选择器端子相当于端子相当于C C语言语言switchswitch语句中的语句中的“表达式表达式”每个分支的每个分支的标签标签相当于相当于“常量表达式常量表达式i i”分支选择器的值可以是分支选择器的值可以是布尔型布尔型、字符串型字符串型、整型整型或者或者枚举枚举类型,其颜色类型,其颜色会随连接的数据类型而改变,同时根据分支选择接入的数据类型不同,选择会随连接的数据类型而改变,同时根据分支选择接入的数据类型不同,选择器标签的设置也有差异,其默认数据类型为布尔型,同时自动生成两个选择器标签的设置也有差异,其默认数据类型为布尔型,同时自动生成两个选择器标签分别为器标
26、签分别为“真真”和和“假假”的子框架。的子框架。分支程序子框架用来放置不同分支对应的程序分支程序子框架用来放置不同分支对应的程序 LabVIEWLabVIEW中的条件结构,必须指定一种默认情况或者列出所有可能的情中的条件结构,必须指定一种默认情况或者列出所有可能的情况。设置默认分支的方法是,在该分支程序的标签上单击鼠标右键,在弹出况。设置默认分支的方法是,在该分支程序的标签上单击鼠标右键,在弹出的快捷菜单中选择的快捷菜单中选择“本分支设置为默认分支本分支设置为默认分支”即可。即可。条件结构内部与外部之间的数据也是通过条件结构内部与外部之间的数据也是通过隧道隧道来交换传递的。来交换传递的。向条件
27、结构边框内输入数据时,各个子程序框图连接或不连接这个数向条件结构边框内输入数据时,各个子程序框图连接或不连接这个数据的隧道都可以。从条件结构边框据的隧道都可以。从条件结构边框向外输出向外输出数据时,各个子程序框图都必数据时,各个子程序框图都必须为这个隧道连接数据,否则隧道图标是须为这个隧道连接数据,否则隧道图标是空空的,程序的,程序也也不能不能运行运行。如果允许没有连线的子程序框图输出默认值,可以在数据隧道上右击,如果允许没有连线的子程序框图输出默认值,可以在数据隧道上右击,在弹出的快捷菜单中选择在弹出的快捷菜单中选择“未连线时使用默认未连线时使用默认”命令,在这种情况下,程命令,在这种情况下
28、,程序执行到没有为输出隧道连线的子程序框图时,就输出相应数据类型的默序执行到没有为输出隧道连线的子程序框图时,就输出相应数据类型的默认值。认值。用条件结构来实现两个数的加、减、乘、除四则运算,要求用组合框作为条件结构的选择器。【实训练习】【实训练习】4.3 4.3 顺序结构顺序结构 LabVIEWLabVIEW作为一种图形化的编程语言,有其独特的程序执行顺序作为一种图形化的编程语言,有其独特的程序执行顺序数据数据流执行方式,数据流经节点的动作决定了程序框图上流执行方式,数据流经节点的动作决定了程序框图上VIVI和函数的执行顺序。和函数的执行顺序。但在实际中希望节点按一定的次序执行,这就需要引入
29、顺序结构执行。但在实际中希望节点按一定的次序执行,这就需要引入顺序结构执行。LabVIEWLabVIEW顺序结构的功能是强制程序按一定的顺序执行。顺序结构的功能是强制程序按一定的顺序执行。LabVIEWLabVIEW提供了两种顺序结构:平铺式顺序结构和层叠式顺序结构,这两提供了两种顺序结构:平铺式顺序结构和层叠式顺序结构,这两种结构的功能是相同的,只是外观和用法略有差别。种结构的功能是相同的,只是外观和用法略有差别。平铺式顺序结构位于平铺式顺序结构位于“函数函数”“编程编程”“结构结构”子选板中。顺序结构子选板中。顺序结构包含一个或多个按顺序执行的子程序框图或帧。包含一个或多个按顺序执行的子程
30、序框图或帧。新建的平铺式顺序结构只有一帧,为单框顺序结构,它只执行一步操新建的平铺式顺序结构只有一帧,为单框顺序结构,它只执行一步操作,可以通过右键快捷菜单添加或者删除帧。作,可以通过右键快捷菜单添加或者删除帧。通过拖动帧四周的方向箭头可以改变其大小。通过拖动帧四周的方向箭头可以改变其大小。平铺式顺序结构将所有的帧按照平铺式顺序结构将所有的帧按照0 0,1 1,22的顺序自左至右平铺,的顺序自左至右平铺,并按从左至右的顺序执行,能够确保子程序框图按一定顺序执行。平铺并按从左至右的顺序执行,能够确保子程序框图按一定顺序执行。平铺式顺序结构的数据流不同于其他结构的数据流,当所有连线至帧的数据式顺序
31、结构的数据流不同于其他结构的数据流,当所有连线至帧的数据都可用时,平铺式顺序结构的帧按从左至右的顺序执行。每帧执行完毕都可用时,平铺式顺序结构的帧按从左至右的顺序执行。每帧执行完毕后会将数据通过连线直接穿过帧壁(隧道)传递至下一帧,即帧的输入后会将数据通过连线直接穿过帧壁(隧道)传递至下一帧,即帧的输入可能取决于另一帧的输出。可能取决于另一帧的输出。层叠式顺序结构在选板上不可用。如果要创建层叠式顺序结构,先在层叠式顺序结构在选板上不可用。如果要创建层叠式顺序结构,先在程序框图上创建平铺式顺序结构,然后右键单击该结构并选择程序框图上创建平铺式顺序结构,然后右键单击该结构并选择“替换为替换为层叠式
32、顺序层叠式顺序”。当层叠式顺序结构的帧超过当层叠式顺序结构的帧超过2 2个时,所有个时,所有帧的程序框图会堆叠在一起,将由顺序框架、帧的程序框图会堆叠在一起,将由顺序框架、选择器标签、和递增选择器标签、和递增/递减按钮组成。递减按钮组成。在层叠式顺序结构上右键单击结构边框,可选择在层叠式顺序结构上右键单击结构边框,可选择“在后面添加帧在后面添加帧”、“在前面添加帧在前面添加帧”、“复制帧复制帧”及及“删除本帧删除本帧”来在当前帧上添加或删除帧。来在当前帧上添加或删除帧。当程序运行时,顺序结构会按照选择器材标签当程序运行时,顺序结构会按照选择器材标签0 0,1 1,2 2的顺序逐步执的顺序逐步执
33、行各个框图中的程序。行各个框图中的程序。层叠式顺序结构的帧间数据层叠式顺序结构的帧间数据传递传递需要通过需要通过局部变量局部变量的机制来实现。的机制来实现。(1 1)添加局部变量。在层叠式顺序结构的边框上单击右键弹出快捷)添加局部变量。在层叠式顺序结构的边框上单击右键弹出快捷菜单,选择菜单,选择“添加顺序局部变量添加顺序局部变量”选项,在顺序结构边框上出现一个小选项,在顺序结构边框上出现一个小方块(所有帧程序框的同一位置都有),表示添加了一个局部变量,颜方块(所有帧程序框的同一位置都有),表示添加了一个局部变量,颜色由传输数据类型决定。添加的局部变量只可以在当前帧后面的各个帧色由传输数据类型决
34、定。添加的局部变量只可以在当前帧后面的各个帧中作为输入数据使用。用数据线连接局部变量后,局部变量小方块中的中作为输入数据使用。用数据线连接局部变量后,局部变量小方块中的箭头表明了数据的流动方向。箭头表明了数据的流动方向。(2 2)删除局部变量删除局部变量。在局部变量的小方块上单击鼠标右键,在弹出的在局部变量的小方块上单击鼠标右键,在弹出的快捷菜单中选择快捷菜单中选择“删除删除”命令,即可删除选中的局部变量。命令,即可删除选中的局部变量。层叠式顺序结构层叠式顺序结构与与平铺式顺序结构可以通过右键快捷菜单中的平铺式顺序结构可以通过右键快捷菜单中的“替替换为平铺式换为平铺式/层叠式顺序层叠式顺序”选
35、项可以相互转换。选项可以相互转换。顺序结构外部与内部之间的数据传递是通过建立隧道来实现的。隧道有顺序结构外部与内部之间的数据传递是通过建立隧道来实现的。隧道有输入隧道和输出隧道。在顺序执行前,输入隧道上得到输入值,在执行过程输入隧道和输出隧道。在顺序执行前,输入隧道上得到输入值,在执行过程中,此值保持不变,且每帧都能读取此值。输出隧道上的值只能在整个顺序中,此值保持不变,且每帧都能读取此值。输出隧道上的值只能在整个顺序结构执行完后才会输出。结构执行完后才会输出。将随机产生的数值与给定的数值比较,计算达到两数相等时所需时间。【实训练习】【实训练习】4.4 4.4 事件结构事件结构 所谓事件,是指
36、对活动发生的异步通知。事件可以来自于用户界面、外部所谓事件,是指对活动发生的异步通知。事件可以来自于用户界面、外部I/OI/O或其他方式。用户界面事件包括鼠标点击(单击、双击)、键盘按键、窗或其他方式。用户界面事件包括鼠标点击(单击、双击)、键盘按键、窗口(关闭、缩小窗口)等动作;外部口(关闭、缩小窗口)等动作;外部I/OI/O事件则指诸如数据采集完毕或发生错事件则指诸如数据采集完毕或发生错误时硬件触发器或定时器发出信号;其他方式的事件可通过编程生成并与程误时硬件触发器或定时器发出信号;其他方式的事件可通过编程生成并与程序的不同部分进行通信。序的不同部分进行通信。LabVIEWLabVIEW支
37、持用户界面事件和通过编程生成的事件,支持用户界面事件和通过编程生成的事件,但不支持外部但不支持外部I/OI/O事件。事件。LabVIEWLabVIEW中的事件结构也是一种能改变数据流执行方式的一种结构,使用中的事件结构也是一种能改变数据流执行方式的一种结构,使用事件结构可以实现用户在前面板的操作(事件)与程序执行的互动。事件结构可以实现用户在前面板的操作(事件)与程序执行的互动。事件结构位于事件结构位于“函数函数”“编程编程”“结构结构”子选板子选板 4.4.1 4.4.1 事件结构的构成事件结构的构成 事件结构由框架、超时端子、事件数据节点、递增事件结构由框架、超时端子、事件数据节点、递增/
38、减按钮、选择器标减按钮、选择器标签组成签组成。事件结构可以由多层框架组成,每次只能运行一个框图,但可以事件结构可以由多层框架组成,每次只能运行一个框图,但可以同时响应几个事件。同时响应几个事件。超时端子超时端子用来设定超时时间,其接入数据是以毫秒为单位的整数值。用来设定超时时间,其接入数据是以毫秒为单位的整数值。在等待其他类型事件发生的时间超过设定的超时时间后,将自动触发超在等待其他类型事件发生的时间超过设定的超时时间后,将自动触发超时事件。时事件。如果超时端子接入值为如果超时端子接入值为-1,则事件结构处于永远等待状态,直,则事件结构处于永远等待状态,直到指定的事件发生为止。到指定的事件发生
39、为止。事件数据节点事件数据节点用于输出事件的参数,端口数目和数据类型根据事件的不同用于输出事件的参数,端口数目和数据类型根据事件的不同而不同。数据端子的增减可以通过拖拉事件数据节点来进行,也可以通过而不同。数据端子的增减可以通过拖拉事件数据节点来进行,也可以通过快捷菜单进行。快捷菜单进行。在事件选择器标签上单击鼠标右键,在事件选择器标签上单击鼠标右键,在在弹出的快捷菜单中弹出的快捷菜单中可以做可以做“删除删除事件结构事件结构”、“编辑本分支所处理的事件编辑本分支所处理的事件”、“添加事件分支添加事件分支”、“删除本删除本事件分支事件分支”等操作等操作。事件结构同样支持隧道。事件结构同样支持隧道
40、。4.4.2 4.4.2 事件结构的设置事件结构的设置“事件分支事件分支”列出所有列出所有事件分支的序号和名称事件分支的序号和名称“事件说明符事件说明符”列出列出“事事件分支件分支”中当前事件配置中当前事件配置的所有事件的名称的所有事件的名称事件源事件源列出事件源(例列出事件源(例如,应用程序、如,应用程序、VI、动态、动态事件或控件)事件或控件)事件事件列出当前分支处列出当前分支处理的所有事件的名称理的所有事件的名称 添加事件添加事件在当前结构在当前结构中添加新的事件。中添加新的事件。删除删除在事件说明符列在事件说明符列表中删除选定的事件表中删除选定的事件“事件源事件源”列出按类排列出按类排
41、列的事件源,对其进行列的事件源,对其进行配置以生成事件配置以生成事件“事件事件”列出对话框的事件源和事件列出对话框的事件源和事件栏中选定事件源的可用事件。栏中选定事件源的可用事件。通知事件通知事件用用绿色绿色符号表示,符号表示,过滤事件过滤事件用用红色红色符号表示。符号表示。本页为本页为“事件分支事件分支00超时超时”指定了一个事件,事件源是指定了一个事件,事件源是“应用程序应用程序”,事件名称是事件名称是“超时超时”,即由应用程序本身产生的超时事件。,即由应用程序本身产生的超时事件。4.4.3 4.4.3 通知事件和过滤事件通知事件和过滤事件 通知事件用于通知程序代码某个用户界面事件发生了,
42、并且通知事件用于通知程序代码某个用户界面事件发生了,并且LabVIEWLabVIEW已经进已经进行了最基本的处理。例如修改一个数值控件的数值时,行了最基本的处理。例如修改一个数值控件的数值时,LabVIEWLabVIEW会先进行默认的会先进行默认的处理,即把新数值显示在数值控件中。此后,如果已经为这个控件注册了处理,即把新数值显示在数值控件中。此后,如果已经为这个控件注册了“值值改变改变”事件,该事件的代码将得到执行。事件,该事件的代码将得到执行。过滤器事件用于告诉程序代码某个事件发生了,过滤器事件用于告诉程序代码某个事件发生了,LabVIEWLabVIEW还未对其进还未对其进行任何处理,从而
43、便于用户就程序如何与用户界面的交互作出自己相应行任何处理,从而便于用户就程序如何与用户界面的交互作出自己相应的定制。使用过滤事件参与事件处理可能会覆盖事件的默认行为。在过的定制。使用过滤事件参与事件处理可能会覆盖事件的默认行为。在过滤事件的事件结构分支中,可在滤事件的事件结构分支中,可在LabVIEWLabVIEW结束处理该事件之前验证或改变结束处理该事件之前验证或改变事件数据,或完全放弃该事件以防止数据的改变影响到事件数据,或完全放弃该事件以防止数据的改变影响到VIVI。处理过滤事件的事件结构分支有一个事件过滤节点,可将新的数据值处理过滤事件的事件结构分支有一个事件过滤节点,可将新的数据值连
44、接至这些接线端以改变事件数据。如果不对某一数据项连线,那么该数连接至这些接线端以改变事件数据。如果不对某一数据项连线,那么该数据项将保持不变。可将真值连接至据项将保持不变。可将真值连接至“放弃放弃?”?”接线端已完全放弃某个事件。接线端已完全放弃某个事件。事件结构分为事件结构分为静态静态和和动态动态两种。如果只需对前面板对象进行操作判断,两种。如果只需对前面板对象进行操作判断,使用静态事件结构就完全可以实现;如果需要实时改变注册内容或将程序使用静态事件结构就完全可以实现;如果需要实时改变注册内容或将程序中的数据作为事件的发生条件等特殊情况时就要用到动态事件结构。中的数据作为事件的发生条件等特殊
45、情况时就要用到动态事件结构。动态事件结构的创建就需要使用注册事件节点注册事件,再将结果输动态事件结构的创建就需要使用注册事件节点注册事件,再将结果输出到事件结构动态事件注册端子上。若要创建一个事件动态注册端子,可出到事件结构动态事件注册端子上。若要创建一个事件动态注册端子,可以在事件结构框图上单击鼠标右键,在弹出的快捷菜单中选择以在事件结构框图上单击鼠标右键,在弹出的快捷菜单中选择“显示动态显示动态事件接线端事件接线端”选项即可。选项即可。注册事件节点位于注册事件节点位于“函数函数”“编程编程”“对话框与用户界面对话框与用户界面”“事事件件”子选板内。子选板内。直接在事件动态注册端子上单击鼠标
46、右键从弹出的快捷菜单中选择直接在事件动态注册端子上单击鼠标右键从弹出的快捷菜单中选择“事件选板事件选板”,则弹出注册事件界面。,则弹出注册事件界面。4.4.4 4.4.4 事件结构的应用举例事件结构的应用举例 在前面板放置两个确认按钮,分别取名为在前面板放置两个确认按钮,分别取名为“按钮按钮1”1”和和“按钮按钮2”2”,再放置一个停止按钮,然后放置两个数值显示控件,取名为再放置一个停止按钮,然后放置两个数值显示控件,取名为“计数器计数器1”1”和和“计数器计数器2”2”,能实现以下功能:,能实现以下功能:(1)(1)鼠标单击按钮鼠标单击按钮1 1时,计数器时,计数器1 1中的值增加中的值增加
47、1 1;(2)(2)鼠标单击按钮鼠标单击按钮1 1或按钮或按钮2 2时,计数器时,计数器2 2中的值均增加中的值均增加1 1;(3)(3)鼠标单击单击停止按钮时,程序自动退出运行。鼠标单击单击停止按钮时,程序自动退出运行。利用事件结构实现数字的自动累加,即在数值输入控件中,每当用利用事件结构实现数字的自动累加,即在数值输入控件中,每当用户输入一个数字后,累加值就及时发生变化。例如,依次输入户输入一个数字后,累加值就及时发生变化。例如,依次输入1 1、2 2时,时,累加值为累加值为3 3,再按下,再按下5 5时,累加值为时,累加值为8 8。【实训练习实训练习】4.5 4.5 公式节点公式节点 公
48、式节点也是一种程序结构,是便于在程序框图上执行数学运算的文本公式节点也是一种程序结构,是便于在程序框图上执行数学运算的文本节点。适用于含有多个变量或较为复杂的方程。节点。适用于含有多个变量或较为复杂的方程。公式节点可以使用算术表达式来实现算法过程,公式节点可以使用算术表达式来实现算法过程,C C语言的语言的IfIf语句、语句、WhileWhile循环和循环和ForFor循环等都可以在公式节点中使用。公式节点也适用于已有文本代码,循环等都可以在公式节点中使用。公式节点也适用于已有文本代码,通过复制、粘贴的方式将已有的文本代码移植到公式节点中。通过复制、粘贴的方式将已有的文本代码移植到公式节点中。
49、1.1.公式节点的建立公式节点的建立 公式节点位于公式节点位于“函数函数”“编程编程”“结构结构”子选板子选板 及及“函数函数”“数学数学”“脚本与公式脚本与公式”子选板子选板通过边框上右键快捷菜单添加通过边框上右键快捷菜单添加输入、输出变量。输入、输出变量。输入变量和输出变量可以互相转换,输入变量和输出变量可以互相转换,也可删除变量,方法是在变量上单也可删除变量,方法是在变量上单击鼠标右键的快捷菜单中选择。击鼠标右键的快捷菜单中选择。每个赋值中赋值运算符(每个赋值中赋值运算符(=)的左侧仅可有一个变量。每个赋值必须以)的左侧仅可有一个变量。每个赋值必须以分号分号(;)(;)结束。注释内容可通
50、过结束。注释内容可通过/*/封闭起来。封闭起来。LabVIEWLabVIEW公式节点主要有以下几种语句:变量声明语句、赋值语句、条公式节点主要有以下几种语句:变量声明语句、赋值语句、条件语句、循环语句、件语句、循环语句、SwitchSwitch语句、控制语句。语句、控制语句。2.2.公式节点的语法公式节点的语法3.3.应用举例应用举例完成完成y1=2x2+3x+1,y2=a*x+b的运算,其中,的运算,其中,x的取值为的取值为020的整数值的整数值 使用公式节点实现使用公式节点实现y=y=cos(xcos(x),并将输出用图形显示。,并将输出用图形显示。【实训练习】【实训练习】4.6 4.6