《虚拟仪器设计程序结构》由会员分享,可在线阅读,更多相关《虚拟仪器设计程序结构(62页珍藏版)》请在金锄头文库上搜索。
1、虚拟仪器设计基础,虚拟仪器设计基础,主要教学内容 程序结构 字符串、数组和簇 局部变量和全局变量 文件操作 图形显示,5.1 程序结构,LabVIEW中的结构是其他基于文本的语言中的循环、判断等结构的图形化体现。 什么是结构? 结构是控制 G程序数据流程的元素,G语言包含的结构有: While loop结构 For Loop结构 条件结构 顺序结构 事件结构 使能结构 公式节点,5.1.1 循环结构,LabVIEW中的循环结构主要有 While循环 For循环 这两种循环结构功能基本相同,但使用上有一些差别。For循环必须指定循环的次数,循环一定的次数后自动退出循环;而While循环则不用指定
2、循环的次数,只需要指定循环退出的条件。,1. For循环,For循环(For Loop)是将某程序段重复执行预先设定的次数. For(i =0;iN;i+) 循环体; ,包含两个端口: 计数端口N 重复端口i,For循环,可以通过两种方法指定循环次数,一种是直接给定,一种是通过输入数组的大小给定,For循环,输入和输出数组 如需将数组一次完整输入,则右击输入点并选择关闭索引 对于二维或多维数组,采用索引的办法输入,则最外层循环按行输入,内层循环按输入行的元素逐个输入,多维数组依次类推。,For循环,当多个数组按索引方式输入时,循环次数以元素最少的数组为准,如下例,循环次数为3,For循环,移位
3、寄存器(Shift Register),一个累加10次的a+程序,通过局部变量实现,通过移位寄存器实现,移位寄存器,在LabVIEW的循环结构中创建移位寄存器的方法是在循环框图的左边或右边单击鼠标右键,在弹出的快捷菜单中选择【添加移位寄存器】,可创建一个移位寄存器 移位积存器的功能是将第i-1, i-2, i-3次循环的计算结果保存在For循环的缓冲区内,并在第i次循环时将这些数据从循环况架左侧的移位寄存器中送出,供循环框架内的节点使用,其中,i=0,1,2,3 。,For循环,隧道和移位寄存器的最大区别就是隧道程序在运行过程中,每次输入控件都是和初值相加,而不是和循环的中间结果相加。 在有索
4、引的隧道数值输出控件中输出的是由每次循环的结果组成的一维数组,在无索引的隧道数值输出控件中输出的是每次的循环结果,在程序框图运行过程中这个数值一直在随每次循环结果变化,最终输出最后一次循环执行的结果。,5.2 For循环,5.2.4 反馈节点(Feedback Node),通过反馈节点实现a+,!同移位寄存器一样,最好指定反馈节点初值。,FOR循环应用举例,例5.1 求,前面板和程序框图,FOR循环应用举例,例5.2 求一组随机数的最大值和最小值。,前面板和程序框图,2. While循环,当循环次数不能预先确定时,就需用到While循环( While Loop )。While循环也是LabVI
5、EW最基本的结构之一,相当于C语言中的While循环和do循环。 While(条件) do 循环体; 循环体; While(条件),Whlie循环结构,Whlie循环包含两个端口:条件端口和重复端口i 条件端口输入的是布尔变量,它用于判断循环在什么条件下停止执行。它有两种使用状态:Stop if True和Continue if True 重复端口i为当前循环的次数。,While循环应用示例,例5.3 求N!,void main() int a ,i, n; a=1;i=0; scanf (“ %d ”, printf (“n! =%d”,a ); ,前面板和程序框图,While循环,Whil
6、e循环,添加定时器,While循环,使用移位寄存器和反馈节点,累加器程序,5.1.2 条件结构,条件结构类似于文本编程语言中的switch语句或if.then.else语句。,选择端口相当于C语言的Switch语句中的“表达式”,框图表示符相当于“表达式n”。编程时,将外部控制条件连接至选择端口上,程序运行时选择端口会判断送来的控制条件,引导选择结构执行相应框架中的内容。,选择端口的外部控制条件的数据类型有整型、布尔型、字符串型和枚举型。,条件结构,If(a%2=0) b=a+2; else b=a+1; end,等价于if.else.语句的条件结构,条件结构,等价于switch语句的条件结构
7、,switch (fruit) case apple: price=9; case banana: price=10; case pear: price=8; default: price=0; ,条件结构应注意的问题,在使用选择结构时,控制条件的数据类型必须与图框标识符中的数据类型一致。二者若不匹配,LabVIEW 会报错,图框标识符中字体的颜色将变为红色。 在 LabVIEW 中,对于数值型条件必须包含处理超出范围值的默认分支,对于其它类型的条件可设或不设,但必须明确地列出每一个可能的输入值。,条件结构的数据输入和输出通道,当由外部节点向结构框架连线时,在结构边框就创建了输入通道,而当由框
8、内内节点与边框连线时,在结构边框就建立了输出通道。 对所有条件分支来说对于输入通道的数据可以使用,也可以不使用。 只要有一个分支提供输出数据,所有分支条件都必须与输出通道连接 。,条件结构应用举例,例5.4 求一个数的平方根,若该数 0,计算该值平方根并将计算结果输出;若该数 0 时,输出错误代码“-999.00”。,框图程序,运行结果,条件结构应用举例,例5.5 利用条件结构编写温度采集报警程序,当采集温度高于设定值时产生报警。,前面板和程序框图,5.1.3 顺序结构(Sequence Structure),5.1.1 LabVIEW程序的执行顺序,数据流式的编程方法,多段代码同时执行,5.
9、1.3 顺序结构,LabVIEW顺序结构的功能是强制程序按一定的顺序执行。顺序结构包含一个或多个按顺序执行的子程序框图或帧。 LabVIEW提供了两种顺序结构: 平铺式顺序结构 层叠式顺序结构,5.1 顺序结构(Sequence Structure),在平铺的帧间传递数据,5.1 顺序结构(Sequence Structure),在层叠的帧间传递数据,顺序结构应用举例,例5.6 计算生成等于某个给定值的随机数据所用时间。,层叠式顺序结构VI的程序框图,5.1.4 事件结构,事件是对活动发生的异步通知。事件可以来自于用户界面、外部I/O或程序的其他部分。用户界面事件包括鼠标点击、键盘按键等动作。
10、 LabVIEW应用程序在没有事件发生时处于休息状态,直到前面板窗口中有一个事件发生为止。,1. 事件结构的组成,事件结构包含超时端口和事件端口,事件选择器标签表明由哪些事件引起了当前分支的执行。,事件超时接线端用于设置事件结构在等待指定事件发生时的超时时间,事件数据节点用于输出事件的参数,端口数目和数据类型根据事件的不同而不同。,2. 事件结构的使用,用户界面事件有两种类型:通知事件 过滤事件,通知事件表明某个用户操作已经发生,比如用户改变了控件的值。,过滤事件将通知用户LabVIEW在处理事件之前已由用户执行了某个操作,以便用户就程序如何与用户界面的交互作出响应进行自定义。,编辑事件对话框
11、,通过编辑事件对话框,可以设定某个事件结构分支响应的事件。,事件结构应用举例,例5.7 利用事件结构演示用鼠标单击前面板窗口时,发生鼠标按下事件并处理鼠标按下事件。,询问对话框,事件结构VI的程序框图,2.4 公 式 节 点 一些复杂的算法如果完全依赖于图形代码实现,框图程序会十分复杂,工作量大,而且不直观,调试和改错也不方便。LabVIEW提供了一种专门用于处理数学公式编辑的特殊结构形式,称为公式节点(Formula Node)。在框架内,可以直接输入数学公式或者方程式,并连接相应的输入、输出端口。,5.1.5 公式节点,公式节点:一种专用于处理数学公式编程的特殊结构形式。在公式节点框架内。
12、LabVIEW允许用户像书写数学公式或方程一样,直接编写数学处理节点,形式与标准C语言类似。 公式节点的创建通常按以下步骤进行,第一步创建公式节点,第二步添加输入、输出端口,第三步输入程序代码,公式节点中使用的每一个变量必须是输入或输出之一,两个输入或输出不能具有相同的名字,但一个输出可以与一个输入有相同的名字。变量名有大小写之分,必须与公式中的变量匹配。输出变量的边框比输入变量宽一些,通过从快捷菜单中选择Change to Output或Change to Input可选择输出或输入,同时也可在公式节点的边框上添加多个变量。 输入公式时,每个公式一定要用分号结束;若有很多公式,可以从公式节点
13、(不是边框)弹出快捷菜单中选择Visible ItemsScrollbar放置滚动条。 公式节点中代码的算法与C语言相同,可以进行各中数学运算。这种兼容性使LabVIEW功能更强大。公式节点中可以直接使用的LabVIEW预定义函数见表2.1。公式节点中可以使用的操作符见表2.2。,表2.1 公式节点中可以使用的函数,续表,续表,表2.2 公式节点中可以使用的操作符,在公式节点中不能使用循环结构和复杂的选择结构,但可以使用条件运算符和表达式,即 ?: 例如:计算两数的比值,框图程序如图2-26所示。,图2-26 计算两数的比值,公式节点的应用,例5.8 输入三角形的三边长,求三角形面积。,基本公
14、式节点框架中出现的所有变量,必须有一个相对应的输入端口或输出端口,否则,LabVIEW会报错。,前面板和程序框图,禁用结构,禁用结构是Labview8中新增功能,用来控制程序是否被执行。 禁用结构分两种 程序框图禁用结构 条件禁用结构,程序框图禁用结构,相当于C语言中的/* */ 注意,禁用一段程序的同时一定要启用一段程序,否则程序无法运行,随意选择程序是否启用,条件禁用结构,通过外界环境变量来控制代码是否执行,此外还可判断当前操作系统的类型来选择执行哪段代码。 环境变量只有工程中才能使用,通过定义整个工程的环境变量,该工程下的所有VI都可以被这些环境变量所控制,如该工程下的VI脱离工程单独运
15、行,将不受环境变量控制。,条件禁用结构,新建一工程,保存后,选择属性选项,在出现的对话框中选择条件禁用符号; 添加条件禁用符号如 Global_Switch1, Global_Switch2,值分别为True和False; 即可使用这些符号控制该工程下所有程序执行。,5.3 局部变量和全局变量,局部变量和全局变量是LabVIEW用来传递数据的工具。LabVIEW编程是一种数据流编程,它是通过连线来传递数据的。但是,在很多情况下需要在同一VI的不同位置或在不同的VI中访问同一个控件对象,这时控件对象之间的连线就无法实现。这时候我们就需要用到局部变量或全局变量,通过局部变量或全局变量你可以在程序框
16、图中的多个地方读写同一个控件。,5.3.1 局部变量,局部变量:只能在同一个VI中使用的变量 创建局部变量的方法有两种: (1)直接为前面板对象创建局部变量 (2)通过函数选板创建局部变量,创建局部变量方式一 创建局部变量方式二,注意:局部变量具有读、写两种属性,5.3.1 局部变量,读写局部变量的方法与读写控件对象的方法完全一样,局部变量的应用举例,例5.15 要求使用局部变量向与它联系的前面板上的电压表控件写数据,也可以从电压表控件读取数据。,局部变量创建VI的前面板和程序框图,局部变量的特点,(1)局部变量只能在同一个VI中使用,其生存期与它所在的VI模块密切相关,VI停止运行,在此VI内定义的局部变量自动消失。 (2)局部变量必须依附在一个前面板对象上。一个前面板对象可以建立多个局部变量,但一个局部变量只能有一