1、第五章 结构,学习目的: 学习For 循环、While循环、Case 结构和顺序结构 了解在 LabVIEW 中如何使用定时函数 了解移位寄存器的应用 熟悉公式节点 鉴别常见的结构连线错误本地变量和全局变量,5.1 For 循环,在指定次数的重复操作(例如For循环)完成之前,或当指定条件为True(例如While循环)时, For循环和While循环控制VI执行的重复操作。 For循环和While循环之间的差别是: For循环执行的循环次数是预先指定的,而While循环则一直执行,直到输入条件变为False为止。,For循环用于将某段程序执行指定次数。和While 循环一样,它不会立刻出现在
2、框图中,而是出现一个小的图标,而后您可以修改它的大小和位置。具体的方法是,先单击所有端子的左上方,然后按下鼠标,拖曳出一个包含所有端子的矩形。释放鼠标时就创建了一个指定大小和位置的For循环。,For循环有两个端子:计数端子(输入端子)和重复端子(输出端子),计数端子N:要执行循环的次数 0将不执行 重复端子i:已执行循环的次数 0-N-1次计数端子和重复端子都是0到232-1范围内的长整数。,例:,5.2 While 循环,While 循环可以反复执行循环体的程序,直至到达某个边界条件。While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。
3、 While循环有两个端子:条件端子(输入端子)和重复端子(输出端子)。,该循环有如下特点: 计数从0开始(i=0)。 先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。 循环至少要运行一次。,条件端子输入的是布尔变量,它用于判断循环在什么条件下停止执行。它有两种使用状态:Stop if True和Continue if True 重复端子i为当前循环的次数。,输入端子放在循环外部,只在循环运行前读入一次。,例:产生随机数,5.3 移位寄存器和反馈节点,移位寄存器可以将数据从一个循环周期传递到另外一个周期。在程序设计中,经常要用到它创建一个移位寄存器的方法是,用鼠标右键单击循
4、环的左边或者右边,在快捷菜单中选择 添加移位寄存器。移位寄存器在框图上用在循环边框上相应的一对端子来表示。右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类型的数据数值、布尔数、数组、字符串等等。它会自动适应与它连接的第一个对象的数据类型。下图表示了它的工作过程。,通过设置移位寄存器,可以保留前面多次循环的数据值。添加多个移位寄存器的左端子,只能有一个右端子。,举例:,注:存储在移位寄存器中的数据值直到关闭VI才从内存中消除!,在For循环或While循环中,反馈节点用于将子VI、函数或一组子VI和函数的输出连接到同
5、一个子VI、函数或组的输入上即创建反馈路径。,举例:反馈节点的不同实现,例 求,5.4 分支结构:Case,Case结构含有两个或者更多的子程序(Case),执行那一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。必须选择一个默认的Case以处理超出范围的数值,或者直接列出所有可能的输入数值。Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识:真、假或、。按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。,Case结构可有多个子框图,这些子框图就像一叠卡片,一次只能看到一张。子框图标识符可以是数字、布尔、字符串
6、或枚举类型控件。,改变数据类型时要删除额外分支。使用编辑文本工具可以直接键入和编辑选择器标签。数值列由逗号分开,-1,0,5,10键入范围1020,表示包含从10到20之间的所有数字。键入0,表示小于或等于0的所有数字。键入100,表示大于或等于100的所有数字。分支选择器可以使用引号引起来的字符串值,如“red”和“green”如果将一个浮点型连接到分支端子,那么将自动把浮点数舍入到最接近的整数,并且显示强制点。,1 添加和删除分支指定默认分支。2 连接输入和输出对所有条件分支来说对于输入通道的数据可以使用,也可以不使用。如果任何一个分支提供了输出数据,则所有分支也都必须提供。,条件结构应注
7、意的问题:,在使用选择结构时,控制条件的数据类型必须与图框标识符中的数据类型一致。二者若不匹配,LabVIEW 会报错,图框标识符中字体的颜色将变为红色。 在 LabVIEW 中,对于数值型条件必须包含处理超出范围值的默认分支,对于其它类型的条件可设或不设,但必须明确地列出每一个可能的输入值。,例:利用条件结构编写温度采集报警程序,当采集温度高于设定值时产生报警。,练习:设计一个评分程序,输入不同的分数会得到不同的评论。分数小于60,“警告”指示灯会亮起来,同时显示字符串“你没有通过考试!”;分数在6099之间,“通过”指示灯会亮起来,同时显示字符串“你考试通过了!”;分数为100,“恭喜”指
8、示灯会亮起来,同时显示字符串“你是第一名!”;如果输入为0100以外的数字,会有错误提示,同时显示字符串“错误!”。,5.5 顺序结构(Sequence Structure),在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但LabVIEW中不同,它是一种图形化的数据流式编程语言。在图中,假设有A、B、C、D个节点,其数据流向如图所示。按照数据流式语言的约定,任何一个节点只有在所有的输入数据有效时才会执行,所以图中,当且仅当A、B、C个节点执行完,使得D节点的个输入数据都到达D节点后,D节点才执行。但是你要注意,这里并没有规定A、B、C个节点的执行顺序。在LabVIEW中这种
9、情况下,A、B、C的执行顺序是不确定的,如果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。,平铺式,选择标签,注:顺序结构输出隧道只能有一个数据源。要想节约框图空间选用叠层顺序结构,使用单层顺序结构可以避免使用局部变量。避免过度使用顺序结构。,例:计算生成等于某个给定值的随机数据所用时间,5.6 公式节点(Formula Node),公式节点是一个大小可变的方框,可以利用它直接在流程图中输入公式。从函数选板结构中选择公式节点就可以把它放到流程图中。当某个等式有很多变量或者非常复杂时,这个功能就非常有用。例如等式:y = x2 + x + 1使用公式节点可以表示为:,公式节
10、点的创建通常按以下步骤进行,第一步创建公式节点,第二步添加输入、输出端口,第三步输入程序代码,使用文本编辑工具来输入公式。创建公式节点的输入和输出端子的方法是,从节点边框上弹出快捷菜单中,选择添加输入 (添加输出)。再在节点框中输入变量名称。变量名对大小写敏感。然后就可以在框中输入公式。每个公式语句都必须以分号(;)结尾 。注:公式节点中使用的每一个变量必须声明为输入或输出之一,两个输入或两个输出不能具有相同的名字。中间变量必须声明为输出。例如:y=x+sin(x)z=y2,公式节点的运算符,计算,y=x-esin(x) (0e1),练习:创建一个VI,它用公式节点计算下列等式: y1 = x
11、 3 x 2 + 5 y2 = mx + b x的范围是从0到10。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结果。,5.7 结构连线中的一些常见问题,给顺序结构局部变量多次赋值,顺序结构中不能有两个帧给同一个隧道赋值,未在Case结构的所有分支中连接隧道,隧道重叠,创建隧道,5.8局部变量和全局变量,局部变量和全局变量是LabVIEW用来传递数据的工具。LabVIEW编程是一种数据流编程,它是通过连线来传递数据的。但是如果一个程序太复杂的话,有时连线会很困难甚至无法连线,这时就需要用到局部变量。另外,需要在两个程序之间交换数据时,靠连线的方式是无法实现的,在这种情况下,就需要使
12、用全局变量。,局部变量相当于传统编程语言中的局部变量,可以在同一个程序内部使用。 创建局部变量的方法有两种: (1)直接为前面板对象创建局部变量 (2)通过函数选板创建局部变量,注意:局部变量具有读、写两种属性,例:采集产生一个随机数,大于等于0.5LDE灯亮,局部变量的特点:,(1)局部变量只能在同一个VI中使用。(2)局部变量必须依附在一个前面板对象上。一个前面板对象可以建立多个局部变量,但一个局部变量只能有一个端点与其对应。(3)局部变量就是其相应前面板对象的一个数据拷贝,要占用一定的内存。,全局变量可以在不同的VI之间进行数据传递。全局变量是内置的LabVIEW对象。创建全局变量时,L
13、abVIEW将自动创建一个前面板但无程序框图的特殊全局VI。向该全局VI的前面板添加输入控件和显示控件可定义其中所含全局变量的数据类型。,1.创建全局变量,(1)新建一个VI,从函数选板的结构子选板中选择一个全局变量,将其放置在程序框图中 (2)使用操作工具双击全局变量节点,会自动打开全局变量VI的前面板,然后在前面板上放置所需的控制或显示对象 (3)保存全局变量文件。方法是在主菜单中选择【文件】【保存】。然后关闭全局变量的前面板窗口。 (4)使用操作工具单击第一步所创建的全局变量图标,或在其右击弹出快捷菜单中选择【选择项】,弹出的子菜单列出了全局变量所包含的所有对象的名称,根据需要选择相应的
14、对象。,2. 全局变量的调用,(1)在VI 的功能模板上选择【选择VI】,在弹出的【选择需打开的VI】对话框中,选择所需的全局变量声明文件,单击确定按钮,在程序框图中放置这个全局变量; (2)右击全局变量节点,在弹出的快捷菜单上选取【选择项】,在列出的所有变量对象中选择所需对象; (3)若在一个VI中需要使用多个全局变量,可使用拷贝和粘贴全局变量的方法实现全局变量的复制。,例: 第一个VI测量温度,送至全局变量中,第二个VI显示温度,3.全局变量的特点,(1) LabVIEW 中的全局变量相对于传统编程语言中的全局变量更加灵活。传统编程语言中的全局变量只能是一个变量,一种数据类型。而 LabVIEW 中的全局变量以独立文件的形式存在,并且在一个全局变量中可以包含多个对象,拥有多种数据类型。 (2)全局变量与子VI的不同之处在于它不是一个真正的子VI,不能进行编程,只能用于简单的数据存储与数据传递。 (3)全局变量不能用于两个VI之间的实时数据传递。因为,通常情况下两个VI对全局变量的读写速度不能保证严格一致。,本章小结,例:构建VI,每秒显示一个0到1之间的随机数。与此同时,计算并显示最后产生的4个随机数的平均值。只有产生4个数后才显示平均值,否则显示0。每次随机数大于0.5时产生蜂鸣声。,