1、虚拟仪器虚拟仪器设计基础设计基础 第第5 5章章 虚拟仪器设计基础虚拟仪器设计基础主要教学内容程序结构程序结构字符串、数组和簇字符串、数组和簇局部变量和全局变量局部变量和全局变量 文件操作文件操作 图形显示图形显示 5.1 程序结构nLabVIEW中的结构是其他基于文本的语言中的循中的结构是其他基于文本的语言中的循环、判断等结构的图形化体现。环、判断等结构的图形化体现。 n什么是结构什么是结构? 结构是控制结构是控制 G程序数据流程的元素,程序数据流程的元素,G语言包含语言包含的结构有:的结构有: While loop结构结构 For Loop结构结构 条件结构条件结构 顺序结构顺序结构 公式
2、节点公式节点 事件结构事件结构 5.1.1 循环结构 nLabVIEW中的循环结构主要有中的循环结构主要有 While循环循环 For循环循环 这两种循环结构功能基本相同,但使用这两种循环结构功能基本相同,但使用上有一些差别。上有一些差别。For循环必须指定循环的次循环必须指定循环的次数,循环一定的次数后自动退出循环;而数,循环一定的次数后自动退出循环;而While循环则不用指定循环的次数,只需要循环则不用指定循环的次数,只需要指定循环退出的条件。指定循环退出的条件。 图图4-1 “4-1 “结构结构”子选板界面子选板界面 找到找到For循环后,用鼠标左键单击循环后,用鼠标左键单击For循循环
3、后会发现鼠标箭头变成一个表示环后会发现鼠标箭头变成一个表示For循环的循环的小图标,此时用户可在程序框图上用鼠标拖小图标,此时用户可在程序框图上用鼠标拖放一个任意大小和位置的放一个任意大小和位置的For循环边框,如图循环边框,如图4-2所示。所示。For循环相当于循环相当于C语言中的下列程序代码:语言中的下列程序代码: for(i=0;iN;i+) 图图4-2 For4-2 For循环界面循环界面 最基本的最基本的For循环由循环框架、总数接线循环由循环框架、总数接线端(输入端)、计数接线端(输出端)组成。端(输入端)、计数接线端(输出端)组成。 与其他语言相比,与其他语言相比,LabVIEW
4、中的中的For循循环除具有一般环除具有一般For循环共有的特点外,还具有循环共有的特点外,还具有一般一般For循环没有的独特之处。循环没有的独特之处。 LabVIEW中没有类似与其他编成语言中中没有类似与其他编成语言中的的goto之类的转移的语句,一旦确立了之类的转移的语句,一旦确立了For循环执行的次数并开始执行后,只有达到输循环执行的次数并开始执行后,只有达到输入的循环次数才能终止其运行。如果确实要入的循环次数才能终止其运行。如果确实要跳出此循环,可以用跳出此循环,可以用While循环来代替循环来代替For循循环。环。5.1.2 简单简单For循环应用示例循环应用示例图图4-3 4-3 简
5、单简单ForFor循环示例循环示例4.1.3 自动索引在自动索引在For循环内的应循环内的应用用 自动索引的功能是使循环框外面的数组自动索引的功能是使循环框外面的数组成员逐个进入循环框内,或使循环框内的数成员逐个进入循环框内,或使循环框内的数据累加成一个数组输出到循环框外面。据累加成一个数组输出到循环框外面。 For循环的索引可通过鼠标右键单击循环循环的索引可通过鼠标右键单击循环边框的数据通道来启动。边框的数据通道来启动。 尽管尽管For循环和循环和While循环都支持自动索循环都支持自动索引功能,但其主要区别在于:引功能,但其主要区别在于:For循环的数组循环的数组默认为能自动索引,如不需要
6、索引,可在数默认为能自动索引,如不需要索引,可在数组进入循环的通道上单击鼠标右键弹出快捷组进入循环的通道上单击鼠标右键弹出快捷菜单选择菜单选择“禁用索引禁用索引”选项;而选项;而While循环循环中的数组默认为不能自动索引,如果需要索中的数组默认为不能自动索引,如果需要索引,可在循环的通道上单击鼠标右键弹出快引,可在循环的通道上单击鼠标右键弹出快捷菜单选择捷菜单选择“启用索引启用索引”选项。另外,在创选项。另外,在创建二维数组时一般使用建二维数组时一般使用For循环而不使用循环而不使用While循环。循环。图图4-4 For4-4 For循环自动索引示例循环自动索引示例5.1.4 移位寄存器在
7、移位寄存器在For循环内的应用循环内的应用 移位寄存器是移位寄存器是LabVIEW的循环结构中的的循环结构中的一个附加对象,其功能是将当前循环完成的一个附加对象,其功能是将当前循环完成的某个数据传递给下一个循环开始。某个数据传递给下一个循环开始。 一般来说,移位寄存器可以存储任何类一般来说,移位寄存器可以存储任何类型的数据,但是连接在同一个寄存器两个端型的数据,但是连接在同一个寄存器两个端子上的数据必须是同一类型的。移位寄存器子上的数据必须是同一类型的。移位寄存器的类型与第一个连接到其端子之一的对象数的类型与第一个连接到其端子之一的对象数据的类型相同。据的类型相同。n在在LabVIEWLabV
8、IEW的循环结构中创建移位寄存器的方法是的循环结构中创建移位寄存器的方法是在循环框图的左边或右边单击鼠标右键,在弹出的在循环框图的左边或右边单击鼠标右键,在弹出的快捷菜单中选择快捷菜单中选择【添加移位寄存器添加移位寄存器】,可创建一个,可创建一个移位寄存器移位寄存器 n移位积存器的功能是将第移位积存器的功能是将第i-1, i-2, i-3i-1, i-2, i-3次循环次循环的计算结果保存在的计算结果保存在ForFor循环的缓冲区内,并在第循环的缓冲区内,并在第i i次次循环时将这些数据从循环况架左侧的移位寄存器中循环时将这些数据从循环况架左侧的移位寄存器中送 出 , 供 循 环 框 架 内
9、的 节 点 使 用 , 其 中 ,送 出 , 供 循 环 框 架 内 的 节 点 使 用 , 其 中 ,i=0,1,2,3i=0,1,2,3 。 图图4-5 For4-5 For循环移位寄存器示例循环移位寄存器示例图图4-6 For4-6 For循环中不添加移位寄存器的结果循环中不添加移位寄存器的结果FOR循环应用举例例例5.1 求求 前面板和程序框图前面板和程序框图1001nn5.1.5 反馈节点在反馈节点在For循环内的应循环内的应用用 和移位寄存器一样,反馈节点也是用来和移位寄存器一样,反馈节点也是用来实现数据在前后两次循环中的传递。但与移实现数据在前后两次循环中的传递。但与移位寄存器相
10、比,使用反馈节点有时能让程序位寄存器相比,使用反馈节点有时能让程序更加简洁易懂。更加简洁易懂。 循环中一旦连线构成反馈,就会自动出循环中一旦连线构成反馈,就会自动出现反馈节点的符号。反馈节点符号由两部分现反馈节点的符号。反馈节点符号由两部分构成,分别为初始化端子和反馈节点箭头。构成,分别为初始化端子和反馈节点箭头。 初始化端子初始化端子 既可位于既可位于For循环框图循环框图内,也可位于内,也可位于For循环框图外,默认为位于循环框图外,默认为位于For循环框图内。循环框图内。 反馈节点箭头反馈节点箭头 表示连线上的数据流表示连线上的数据流动方向,它可以是正向的,也可以是反向的。动方向,它可以
11、是正向的,也可以是反向的。图图4-7 For4-7 For循环中使用反馈节点示例循环中使用反馈节点示例FOR循环应用举例例例5.2 求一组随机数的最大值和最小值。求一组随机数的最大值和最小值。 前面板和程序框图前面板和程序框图 2. While循环n当循环次数不能预先确定时,就需用到当循环次数不能预先确定时,就需用到While循环循环( While Loop )。While循环也是循环也是LabVIEW最基本最基本的结构之一,相当于的结构之一,相当于C语言中的语言中的While循环和循环和do循循环。环。 While(条件)(条件) dodo 循环体;循环体; 循环体;循环体; While(条
12、件)(条件)Whlie循环结构nWhlie循环包含两个端口:条件端口和重复循环包含两个端口:条件端口和重复端口端口i n条件端口条件端口输入的是布尔变量,它用于判断循环在什输入的是布尔变量,它用于判断循环在什么条件下停止执行。它有两种使用状态:么条件下停止执行。它有两种使用状态:Stop if True和和Continue if True n重复端口重复端口i为当前循环的次数。为当前循环的次数。 条件端口 重复端口 图图4-9 4-9 条件端子变换后的条件端子变换后的WhileWhile循环界面循环界面 与与For循环是在执行前检查是否符合条件循环是在执行前检查是否符合条件不同,不同,Whil
13、e循环是在执行后再检查条件端循环是在执行后再检查条件端子。因此,子。因此,While循环至少执行一次。循环至少执行一次。n该循环有如下特点:该循环有如下特点:n计数从计数从0开始(开始(i=0)。)。n先执行循环体,而后先执行循环体,而后i+1,如果循环只执行,如果循环只执行一次,那么循环输出值一次,那么循环输出值i=0。n循环至少要运行一次。循环至少要运行一次。 4.2.2 简单简单While循环应用实例循环应用实例图图4-10 4-10 简单简单WhileWhile循环示例循环示例While循环应用示例例例5.3 求求N! void main() int a ,i, n; a=1;i=0;
14、 scanf (“ %d ”, &n); do i=i+1; a=a*i; while(in); printf (“n! =%d”,a ); 前面板和程序框图前面板和程序框图 n创建一个可以产生并在图表中显示随机数的创建一个可以产生并在图表中显示随机数的VI。 前面板有一个控制旋钮可在前面板有一个控制旋钮可在0到到10秒之秒之间调节循环时间,还有一个开关可以中止间调节循环时间,还有一个开关可以中止VI的运行。学习怎样改变开关的动作属性,以的运行。学习怎样改变开关的动作属性,以便不用每次运行便不用每次运行VI时都要打开开关。时都要打开开关。 n选择选择FileNew,打开一个新的前面板。,打开一
15、个新的前面板。n选择选择ControlsBoolean,在前面板中放置一个开关。设置开关的标签为控制,在前面板中放置一个开关。设置开关的标签为控制开关。开关。n使用标签工具创建使用标签工具创建 ON 和和 OFF 的标签,放置于开关旁。的标签,放置于开关旁。n选中选中ControlsGraph,在前面板中放置一个波形图表(是,在前面板中放置一个波形图表(是chart,而不是,而不是graph)。设置它的标签为随机信号。这个图表用于实时显示随机数。)。设置它的标签为随机信号。这个图表用于实时显示随机数。n把图表的纵坐标改为把图表的纵坐标改为0.0 到到 1.0。方法是用标签工具把最大值从。方法是
16、用标签工具把最大值从10.0改为改为1.0。n选择选择ControlsNumeric,在前面板中放置一个旋钮。设置旋钮的标签为循,在前面板中放置一个旋钮。设置旋钮的标签为循环延时。这个旋钮用于控制环延时。这个旋钮用于控制While 循环的循环时间。循环的循环时间。n执行该执行该 VI。While循环的执行次数是不确定的,只要设置的条件为真,循环循环的执行次数是不确定的,只要设置的条件为真,循环程序就会持续运行。在这个例子中,只要开关打开(程序就会持续运行。在这个例子中,只要开关打开(TRUE),框图程序就会),框图程序就会一直产生随机数,并将其在图表中显示。一直产生随机数,并将其在图表中显示。
17、n单击垂直开关,中止该单击垂直开关,中止该VI。关闭开关这个动作会给循环条件端子发送一个。关闭开关这个动作会给循环条件端子发送一个FALSE值,从而中止循环。值,从而中止循环。n用鼠标右键单击图表,选择数据操作用鼠标右键单击图表,选择数据操作/清除图表,清除显示缓存,重新设置图清除图表,清除显示缓存,重新设置图表。表。创建一个可以在图表中显示运行平均数的创建一个可以在图表中显示运行平均数的VI。 可以令移位寄存器记忆前面的多个周期的数值。这个功能对于计算数据均值非常有用。还可以创建其他的端子访问先前的周期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷菜单中选择“增加移位寄存器”。例如,
18、如果某个移位寄存器左边的端口含有三个元素,那么就可以访问前三个周期的数据。移位寄存器的初值:移位寄存器的初值:上面的练习中对移位寄存器设置了初值上面的练习中对移位寄存器设置了初值0.5。如果不设这个。如果不设这个初值,默认的初值是。在这个例子中,一开始的计算结果是不初值,默认的初值是。在这个例子中,一开始的计算结果是不对的,只有到循环完次后移位寄存器中的过去值才填满,即第对的,只有到循环完次后移位寄存器中的过去值才填满,即第次循环执行后可以得到正确的结果次循环执行后可以得到正确的结果。5.1.2 条件结构n条件结构类似于文本编程语言中的条件结构类似于文本编程语言中的switch语句或语句或if
19、.then.else语句语句。 选择端口相当于选择端口相当于C C语言的语言的SwitchSwitch语句中的语句中的“表达式表达式”,框图表示符相当于框图表示符相当于“表达式表达式n n”。编程时,将外部控制条。编程时,将外部控制条件连接至选择端口上,程序运行时选择端口会判断送来件连接至选择端口上,程序运行时选择端口会判断送来的控制条件,引导选择结构执行相应框架中的内容。的控制条件,引导选择结构执行相应框架中的内容。 选择端口的外部控选择端口的外部控制条件的数据类型制条件的数据类型有整型、布尔型、有整型、布尔型、字符串型和枚举型。字符串型和枚举型。 条件结构应注意的问题n在使用选择结构时,在
20、使用选择结构时,控制条件的数据类型必控制条件的数据类型必须与图框标识符中的数据类型一致须与图框标识符中的数据类型一致。二者若。二者若不匹配,不匹配,LabVIEW 会报错,图框标识符中会报错,图框标识符中字体的颜色将变为红色。字体的颜色将变为红色。n在在 LabVIEW 中,对于数值型条件必须包含中,对于数值型条件必须包含处理超出范围值的默认分支,对于其它类型处理超出范围值的默认分支,对于其它类型的条件可设或不设,但必须明确地列出每一的条件可设或不设,但必须明确地列出每一个可能的输入值。个可能的输入值。 条件结构的数据输入和输出通道 n当由外部节点向结构框架连线时,在结构边框就创当由外部节点向
21、结构框架连线时,在结构边框就创建了输入通道,而当由框内内节点与边框连线时,建了输入通道,而当由框内内节点与边框连线时,在结构边框就建立了输出通道。在结构边框就建立了输出通道。n对所有条件分支来说对于输入通道的数据可以使用,对所有条件分支来说对于输入通道的数据可以使用,也可以不使用。也可以不使用。n只要有一个分支提供输出数据,所有分支条件都必只要有一个分支提供输出数据,所有分支条件都必须与输出通道连接须与输出通道连接 。条件结构界面条件结构界面 如果要将分支选择器的端口数据类型从如果要将分支选择器的端口数据类型从数字型改成布尔型,则对应的数字型改成布尔型,则对应的0和和1分支会分分支会分别改变成
22、假和真。别改变成假和真。 选择器标签中也可以输入单个值、数值选择器标签中也可以输入单个值、数值列或数值范围。列或数值范围。4.3.1 添加、删除与排序分支添加、删除与排序分支 在条件结构框架上单击鼠标右键,在弹在条件结构框架上单击鼠标右键,在弹出的快捷菜单中选择出的快捷菜单中选择“在后面添加分支在后面添加分支”菜菜单项用户就可以为条件结构添加新的分支,单项用户就可以为条件结构添加新的分支,如图所示。如图所示。分支的添加和排序分支的添加和排序 添加完新分支后可在快捷菜单中选择添加完新分支后可在快捷菜单中选择“重排分支重排分支”菜单项打开重排分支对话框,菜单项打开重排分支对话框,在对话框的分支列表
23、中用鼠标拖动列表项可在对话框的分支列表中用鼠标拖动列表项可以对分支重新排序。通常,排序按钮以第一以对分支重新排序。通常,排序按钮以第一个选择值为基准对选择器标签值进行排序。个选择值为基准对选择器标签值进行排序。删除分支的操作与添加分支相同。删除分支的操作与添加分支相同。 创建新的分支后可以为新分支添加分支创建新的分支后可以为新分支添加分支名。名。 4.3.2 连接数据的输入与输出连接数据的输入与输出 Case条件结构的所有输入端子(包括条件结构的所有输入端子(包括隧道和选择端子)的数据对所有分支都可以隧道和选择端子)的数据对所有分支都可以通过连线使用,甚至不用连线也可使用。隧通过连线使用,甚至
24、不用连线也可使用。隧道即是指结构上的数据出入口,表现为以矩道即是指结构上的数据出入口,表现为以矩形框出现在结构的边框上。分支不一定要使形框出现在结构的边框上。分支不一定要使用输入数据或提供输出数据,但是如果任一用输入数据或提供输出数据,但是如果任一分支有输出数据,则其他所有的分支也必须分支有输出数据,则其他所有的分支也必须在该数据通道有数据输出,否则将可能导致在该数据通道有数据输出,否则将可能导致编程中的代码错误。编程中的代码错误。 (a a)不正确的连接)不正确的连接边框上的数据通道为中空状态边框上的数据通道为中空状态(b b)正确的连接)正确的连接边框上的数据通道为实心状态边框上的数据通道
25、为实心状态图图4-13 4-13 连接数据的输入与输出连接数据的输入与输出4.3.3 Case条件结构示例条件结构示例图图4-14 4-14 执行两个数相乘或相加运算的执行两个数相乘或相加运算的CaseCase条件结构示例条件结构示例图图4-15 4-15 执行两个数相乘或相加运算的执行两个数相乘或相加运算的CaseCase条件结构示例条件结构示例条件结构应用举例例例5.4 求一个数的平方根,若该数求一个数的平方根,若该数 0,计算该值平,计算该值平方根并将计算结果输出;若该数方根并将计算结果输出;若该数 0 时,输出错误时,输出错误代码代码“-999.00”。 框图程序框图程序运行结果运行结
26、果 条件结构应用举例例例5.5 5.5 利用条件结构编写温度采集报警程序,利用条件结构编写温度采集报警程序,当采集温度高于设定值时产生报警。当采集温度高于设定值时产生报警。 前面板和程序框图前面板和程序框图 5.1.3 顺序结构nLabVIEW顺序结构的功能是强制程序按一定的顺顺序结构的功能是强制程序按一定的顺序执行。顺序结构包含一个或多个按顺序执行的子序执行。顺序结构包含一个或多个按顺序执行的子程序框图或帧。程序框图或帧。nLabVIEW提供了两种顺序结构:提供了两种顺序结构: 平铺式顺序结构平铺式顺序结构 层叠式顺序结构层叠式顺序结构 层叠式顺序结构层叠式顺序结构 顺序结构顺序地执行子框图
27、,而这些子顺序结构顺序地执行子框图,而这些子框图看起来就像一帧帧的电影胶片,因此称框图看起来就像一帧帧的电影胶片,因此称之为帧。层叠式顺序结构和平铺式顺序结构之为帧。层叠式顺序结构和平铺式顺序结构都位于都位于“函数函数”选板下的选板下的“结构结构”子选板中。子选板中。 与创建其他数据结构的方法类似,用户与创建其他数据结构的方法类似,用户可以从结构选板中选择顺序结构,然后用鼠可以从结构选板中选择顺序结构,然后用鼠标在程序框图上任意位置拖放任意大小的顺标在程序框图上任意位置拖放任意大小的顺序结构图框,此时的顺序结构只有一帧,如序结构图框,此时的顺序结构只有一帧,如图图4-16(a)所示。在层叠式顺
28、序结构的边)所示。在层叠式顺序结构的边框上单击鼠标右键,从弹出的快捷菜单中选框上单击鼠标右键,从弹出的快捷菜单中选择择“在后面添加帧在后面添加帧”菜单项就可以添加新的菜单项就可以添加新的帧。每一个帧都有一个帧编号,编号从帧。每一个帧都有一个帧编号,编号从0开始。开始。 图图4-16 4-16 层叠式顺序结构界面层叠式顺序结构界面 层叠式顺序结构中的数据要借助于顺序层叠式顺序结构中的数据要借助于顺序结构变量来传递。结构变量来传递。 (a a)未赋值的局部变量)未赋值的局部变量 (b b)连接数据)连接数据 (c c)赋值后的局部变量)赋值后的局部变量 (d d)结果)结果 图图4-17 4-17
29、 顺序局部变量的创建与使用顺序局部变量的创建与使用图图4-18 4-18 顺序结构中的数据通道顺序结构中的数据通道4.4.2 平铺式顺序结构平铺式顺序结构图图4-19 4-19 平铺式顺序结构界面平铺式顺序结构界面 多框架平铺式顺序结构的一个鲜明的特多框架平铺式顺序结构的一个鲜明的特点是它的多个框架不是层叠在一起,而是自点是它的多个框架不是层叠在一起,而是自左至右平铺,并按从左至右的顺序执行。左至右平铺,并按从左至右的顺序执行。 层叠式顺序结构与平铺式顺序结构的功层叠式顺序结构与平铺式顺序结构的功能完全相同。他们的主要区别在于平铺式顺能完全相同。他们的主要区别在于平铺式顺序结构的所有框架在一个
30、平面上,视觉上较序结构的所有框架在一个平面上,视觉上较为直观,不需要用户在框架之间的切换;当为直观,不需要用户在框架之间的切换;当在编写项目程序时通常使用层叠式顺序结构,在编写项目程序时通常使用层叠式顺序结构,使框图中程序更加简洁。层叠式顺序结构和使框图中程序更加简洁。层叠式顺序结构和平铺式顺序结构之间是可以互相切换的。在平铺式顺序结构之间是可以互相切换的。在顺序框架的右键选单中按需要选择相应选项顺序框架的右键选单中按需要选择相应选项即可。即可。 相比于层叠式顺序结构,平铺式顺序结相比于层叠式顺序结构,平铺式顺序结构各帧之间同样可以传输数据,而且平铺式构各帧之间同样可以传输数据,而且平铺式顺序
31、结构传递数据的方式与层叠式顺序结构顺序结构传递数据的方式与层叠式顺序结构相比较而言更加简单和直观,只需直接在两相比较而言更加简单和直观,只需直接在两帧间连线就可以自动创建一个循环隧道传输帧间连线就可以自动创建一个循环隧道传输数据,如图数据,如图4-20所示。所示。图图4-20 4-20 平铺式顺序结构的数据传输平铺式顺序结构的数据传输顺序结构应用举例例例5.6 计算生成等于某个给定值的随机数据所计算生成等于某个给定值的随机数据所用时间。用时间。 层叠式顺序结构层叠式顺序结构VIVI的程序框图的程序框图 作业:利用顺序结构和循环结构写一个跑马灯, 3个灯从左到右不停的轮流点亮,闪烁间隔由滑动条调
32、节5.1.4 事件结构事件结构 n事件是对活动发生的异步通知。事件可以来事件是对活动发生的异步通知。事件可以来自于用户界面、外部自于用户界面、外部I/O则指诸如数据采集则指诸如数据采集完毕或发生错误时硬件触发器或定时器发出完毕或发生错误时硬件触发器或定时器发出信号。信号。或程序的其他部分。用户界面事件包或程序的其他部分。用户界面事件包括鼠标点击、键盘按键等动作。括鼠标点击、键盘按键等动作。nLabVIEW应用程序在没有事件发生时处于应用程序在没有事件发生时处于休息状态,直到前面板窗口中有一个事件发休息状态,直到前面板窗口中有一个事件发生为止。生为止。 其他方式的事件可通过编程生成并与程其他方式
33、的事件可通过编程生成并与程序的不同部分进行通信。序的不同部分进行通信。LabVIEW支持用户支持用户界面事件和通过编程生成的事件,但不支持界面事件和通过编程生成的事件,但不支持外部外部I/O事件。事件。 LabVIEW中的事件结构也是一种能改变中的事件结构也是一种能改变数据流执行方式的一种结构,使用事件结构数据流执行方式的一种结构,使用事件结构可以实现用户在前面板的操作(事件)与程可以实现用户在前面板的操作(事件)与程序执行的互动。序执行的互动。 5.1.4.1 事件结构的创建与简单示例事件结构的创建与简单示例 一个标准的事件结构由框架、超时端子、一个标准的事件结构由框架、超时端子、事件数据节
34、点、递增事件数据节点、递增/减按钮、选择器标签组减按钮、选择器标签组成,如图成,如图4-21所示。和条件结构相似,事件所示。和条件结构相似,事件结构也可以由多层框架组成,但与条件结构结构也可以由多层框架组成,但与条件结构不同的是,事件结构虽然每次只能运行一个不同的是,事件结构虽然每次只能运行一个框图,但可以同时响应几个事件。框图,但可以同时响应几个事件。图图4-21 4-21 事件结构的基本构成事件结构的基本构成 超时端子用来设定超时时间,其接入数超时端子用来设定超时时间,其接入数据是以毫秒为单位的整数值。据是以毫秒为单位的整数值。 事件数据节点由若干个事件数据端子构事件数据节点由若干个事件数
35、据端子构成,数据端子的增减可以通过拖拉事件数据成,数据端子的增减可以通过拖拉事件数据节点来进行,也可以通过单击鼠标右键从弹节点来进行,也可以通过单击鼠标右键从弹出的快捷菜单中选择出的快捷菜单中选择“添加添加/删除元素删除元素”选项选项进行。进行。 事件结构同样支持隧道。事件结构同样支持隧道。 图图4-22 4-22 添加事件分支添加事件分支图图4-23 4-23 编辑事件对话框编辑事件对话框 在编辑事件对话框中首先要选择一个事在编辑事件对话框中首先要选择一个事件处理分支作为对象,然后在事件源中选择件处理分支作为对象,然后在事件源中选择合适的事件源。合适的事件源。 编辑事件对话框中的事件列表中放
36、置的编辑事件对话框中的事件列表中放置的是选中事件源对应的所有可能的事件名称,是选中事件源对应的所有可能的事件名称,使用鼠标左键选择希望的动作选项就可以为使用鼠标左键选择希望的动作选项就可以为事件源创建事件。事件源创建事件。 在编辑事件对话框中还有一个添加事件在编辑事件对话框中还有一个添加事件按钮,它可以在一个事件框中添加多个事件,按钮,它可以在一个事件框中添加多个事件,当事件框中某个事件发生时,事件框中的程当事件框中某个事件发生时,事件框中的程序就会运行。事件的删除则通过单击添加事序就会运行。事件的删除则通过单击添加事件按钮下方的删除事件按钮来操作。件按钮下方的删除事件按钮来操作。图图4-24
37、 4-24 事件结构示例事件结构示例4.5.2 过滤事件和通知事件过滤事件和通知事件 事件结构能够响应的事件有两种类型:事件结构能够响应的事件有两种类型:过滤事件和通知事件。过滤事件和通知事件。 过滤事件用于过滤掉该事件将触发的操过滤事件用于过滤掉该事件将触发的操作。作。图图4-25 4-25 事件结构框架事件结构框架0 0(过滤事件)(过滤事件)图图4-26 4-26 事件结构框架事件结构框架1 1(通知事件)(通知事件)(a a)“确定确定”按钮动作前按钮动作前 (b b)选择)选择“是是”的计算结果的计算结果 (c c)选择)选择“否否”的计算结果的计算结果图图4-27 4-27 静态事
38、件结构运行结果静态事件结构运行结果 事件结构分为静态和动态两种。如果只事件结构分为静态和动态两种。如果只需对前面板对象进行操作判断,使用静态事需对前面板对象进行操作判断,使用静态事件结构就完全可以实现;但如果需要实时改件结构就完全可以实现;但如果需要实时改变注册内容或将程序中的数据作为事件的发变注册内容或将程序中的数据作为事件的发生条件等特殊情况时就要用到动态事件结构。生条件等特殊情况时就要用到动态事件结构。 动态事件结构的创建就需要使用注册事动态事件结构的创建就需要使用注册事件节点注册事件(指定事件结构中事件的事件节点注册事件(指定事件结构中事件的事件源和事件类型的过程称为注册事件),再件源
39、和事件类型的过程称为注册事件),再将结果输出到事件结构动态事件注册端子上。将结果输出到事件结构动态事件注册端子上。若要创建一个事件动态注册端子,可以在事若要创建一个事件动态注册端子,可以在事件结构框图上单击鼠标右键,在弹出的快捷件结构框图上单击鼠标右键,在弹出的快捷菜单中选择菜单中选择“显示动态事件接线端显示动态事件接线端”选项即选项即可。可。图图4-28 4-28 事件函数选板事件函数选板 事件结构应用举例 利用事件结构演示用鼠标单击前面板窗口时,利用事件结构演示用鼠标单击前面板窗口时,发生鼠标按下事件并处理鼠标按下事件。发生鼠标按下事件并处理鼠标按下事件。 询问对话框询问对话框 事件结构事
40、件结构VIVI的程序框图的程序框图 5.1.5 公式节点公式节点 n公式节点公式节点:一种专用于处理数学公式编程的特殊结:一种专用于处理数学公式编程的特殊结构形式。在公式节点框架内。构形式。在公式节点框架内。LabVIEWLabVIEW允许用户像允许用户像书写数学公式或方程一样,直接编写数学处理节点,书写数学公式或方程一样,直接编写数学处理节点,形式与标准形式与标准C C语言类似。语言类似。n公式节点的创建通常按以下步骤进行公式节点的创建通常按以下步骤进行 第一步创建公式节点第一步创建公式节点 第二步添加输入、输出端口第二步添加输入、输出端口 第三步输入程序代码第三步输入程序代码 公式节点公式
41、节点除接受文本方程表达式外,公式节点除接受文本方程表达式外,公式节点还接收为还接收为C语言编程者所熟悉的语言编程者所熟悉的if语句、语句、while循环、循环、for循环和循环和do循环。需要注意的循环。需要注意的是出现在公式节点中的所有变量必须声明为是出现在公式节点中的所有变量必须声明为输入或输出。输入或输出。公式节点的创建公式节点的创建 在如图在如图4-1所示的所示的“结构结构”选板中选择选板中选择公式节点选项,把鼠标移动到程序框图上,公式节点选项,把鼠标移动到程序框图上,用鼠标左键单击框图空白处的任何一点,鼠用鼠标左键单击框图空白处的任何一点,鼠标移动时框图中会出现一个矩形虚线框,此标移
42、动时框图中会出现一个矩形虚线框,此矩形虚线框的形状就是将要创建的公式节点矩形虚线框的形状就是将要创建的公式节点框图的形状,调整线框到合适的大小后再单框图的形状,调整线框到合适的大小后再单击鼠标左键,程序框图中就会出现公式节点击鼠标左键,程序框图中就会出现公式节点框图。框图。 也可以在程序框图中单击鼠标右键选择也可以在程序框图中单击鼠标右键选择“函数函数数学数学脚本与公式脚本与公式公式节点公式节点”并并将其拖放至程序框图中。将其拖放至程序框图中。公式节点界面公式节点界面公式节点的使用公式节点的使用 在公式节点框图的左边或者右边的边框在公式节点框图的左边或者右边的边框上单击鼠标右键,用户从弹出的快
43、捷菜单中上单击鼠标右键,用户从弹出的快捷菜单中选择选择“添加输入添加输入”或者或者“添加输出添加输出”,就可,就可得到所示的带有输入输出变量端口的公式节得到所示的带有输入输出变量端口的公式节点框图。点框图。图图4-42 4-42 带有输入输出变量端口的公式节点框图带有输入输出变量端口的公式节点框图 用户可以在公式节点中输入需要运算的用户可以在公式节点中输入需要运算的公式,然后在输入端口和输出端口中输入相公式,然后在输入端口和输出端口中输入相应的输入变量和输出变量的变量名。当把鼠应的输入变量和输出变量的变量名。当把鼠标放在相应的端口上变成小箭头时,用户双标放在相应的端口上变成小箭头时,用户双击鼠
44、标左键,就可以往端口中输入相应标签击鼠标左键,就可以往端口中输入相应标签了。了。 为了可以方便的操作和显示输入变量和为了可以方便的操作和显示输入变量和输出变量的值,用户可以创建数值输入控件输出变量的值,用户可以创建数值输入控件和数值输出控件。和数值输出控件。 创建显示控件创建显示控件在公式节点中实现多个计算公式在公式节点中实现多个计算公式公式节点的应用 输入三角形的三边长,求三角形面积。输入三角形的三边长,求三角形面积。 n基本公式节点框架中出现的所有变量,必须有一个相对基本公式节点框架中出现的所有变量,必须有一个相对应的输入端口或输出端口,否则,应的输入端口或输出端口,否则,LabVIEWL
45、abVIEW会报错。会报错。前面板和程序框图前面板和程序框图 n创建一个VI,它用公式节点计算下列等式:ny1 = x 3 x 2 + 5ny2 = m* x + bnx的范围是从的范围是从0到到10。可以对这两个公式使用。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结同一个公式节点,并在同一个图表中显示结果。果。Build Array (FunctionsFunctionsArrayArray)在这个例子中,它用于将两个数据构成数组形式提供给一个多曲线的图形中。通过用变形工具拖拉边角就可以创建两个输入端子。实例:模拟温度采集监控系统实例:模拟温度采集监控系统 5.2 字符串、数组
46、和簇n字符串、数组和簇是字符串、数组和簇是LabVIEW中的三种中的三种数据类型。数据类型。n字符串是字符串是ASCII码集合码集合n数组与其他编程语言中的数组概念是相同的数组与其他编程语言中的数组概念是相同的n簇相当于簇相当于C语言中的结构数据类型。语言中的结构数据类型。 5.2.1 数组n数组是相同类型数据元素的有序集合。数组是相同类型数据元素的有序集合。n一个数组可以是一维或者多维,如果必要,每维最一个数组可以是一维或者多维,如果必要,每维最多可有多可有2 23131-1-1个元素。可以通过数组索引访问其中的个元素。可以通过数组索引访问其中的每个元素。每个元素。n索引的范围是索引的范围是
47、0 0到到n n 1 1,其中,其中n n是数组中元素的个是数组中元素的个数。数。 1.2 3.2 8.0 6.0 4.801234index5个元素数组1. 数组的创建有有2种方法:种方法: 前面板上创建数组前面板上创建数组 程序框图上创建数组程序框图上创建数组 一般说来,创建一个数组有两件事要做,首先一般说来,创建一个数组有两件事要做,首先要建一个数组的要建一个数组的“壳壳”(shell),然后在这),然后在这个壳中置入数组元素(数或字符串等)。个壳中置入数组元素(数或字符串等)。 (1)前面板上创建数组n方法是:在前面板上放置一个数组框架,然后将一方法是:在前面板上放置一个数组框架,然后
48、将一个数据对象或元素拖曳到该数组框架中。数据对象个数据对象或元素拖曳到该数组框架中。数据对象或元素可以是数值、布尔、字符串、路径、引用句或元素可以是数值、布尔、字符串、路径、引用句柄、簇输入控件或显示控件。柄、簇输入控件或显示控件。 图图3-10 3-10 在前面板上创建数组在前面板上创建数组图图3-11 3-11 创建的数值型一维数组创建的数值型一维数组(a a)拖曳边角添加数组元素)拖曳边角添加数组元素 (b b)拖动外边框添加数组元素)拖动外边框添加数组元素图图3-12 3-12 数组元素的添加方式数组元素的添加方式(a a)二维数组)二维数组 (b b)显示更多的数组成员)显示更多的数
49、组成员 图图3-13 3-13 增加数组维数及成员增加数组维数及成员数组初始化 n利用操作工具,对元素赋值。利用操作工具,对元素赋值。(2)程序框图上创建数组n首先在数组函数子选板上选择首先在数组函数子选板上选择“数组常量数组常量”,在程,在程序框图上创建一个数组外壳,然后可以在数组外壳序框图上创建一个数组外壳,然后可以在数组外壳里选择放入数值型常量、字符串型常量、布尔型常里选择放入数值型常量、字符串型常量、布尔型常量以及枚举等。量以及枚举等。 2 数组函数数组函数 数组函数用于对一个数组进行操作,主数组函数用于对一个数组进行操作,主要包括求数组的长度、替换数组中的元素、要包括求数组的长度、替
50、换数组中的元素、取出数组中的元素、对数组排序或初始化数取出数组中的元素、对数组排序或初始化数组等各种运算,组等各种运算,LabVIEW的数组选板中有丰的数组选板中有丰富的数组函数可以实现对数组的各种操作。富的数组函数可以实现对数组的各种操作。函数是以功能函数节点的形式来表现的。函数是以功能函数节点的形式来表现的。 数组函数位于函数选板中数组函数位于函数选板中“编程编程”子选子选板下的板下的“数组数组”选板内,如图选板内,如图3-14所示。所示。图图3-14 3-14 数组函数选板数组函数选板 常用的数组函数如下所示。常用的数组函数如下所示。 (1)数组大小)数组大小图图3-15 3-15 数组