文档详情

labview_顺序结构剖析

今***
实名认证
店铺
PPT
1.22MB
约38页
文档ID:106476893
labview_顺序结构剖析_第1页
1/38

四、顺序结构,LabVIEW_数据流运行机制,传统的编程语言,程序运行是基于程序编码的顺序,是指令驱动的代码流LabVIEW 的运行机制是基于数据流的也就是说:当程序中的可执行元素(节点)在收到所有必须的输入数据时才开始执行当该元素内的所有代码执行完成后,数据才流出该执行元素并流向其他元素 数据流的概念源于电子表格的数据处理思路例如,在电子表格中你可以指定一个公式与某些单元格建立数据关联,当这些单元格的所有数据都有效时,公式才会给出最终的计算结果当任一单元的数据发生变化时,将会按公式重新进行计算 数据流机制更适合图形化编程语言,在图形化编程语言中,它起着数据传递和图形化程序运行控制的双重作用而且数据流机制具有并发性,可以使程序并行执行,大大提高运行效率必须牢记:LabVIEW 采用的数据流运行机制是依赖数据来驱动的这是初学者要认真注意的问题,忽略这个问题将会给程序设计带来麻烦乃至灾难数据流编程机制为用户带来了方便,但同时也在某些方面存在不足比如,程序框图中如果两个节点同时满足执行条件,则会同时执行但在实际问题中往往需要二者按一定先后顺序执行的话,则数据流编程将不能满足要求为此 LabVIEW 引入了顺序结构,强行规定程序的执行顺序。

为什么要引入顺序结构?,顺序结构将按照既定的顺序依次执行,它可以包含多个代码子框图,这些子框图看起来就像是多帧电影一样,所以把每个子框图称为一帧 顺序结构分为平铺式和层叠式两种,二者表现形式不同,但其基本功能则完全相同1. 功能和作用,2.所在位置 函数→编程→结构→平铺式\层叠式顺序结构,,,,,基本特性:,3.基本结构,①. 平铺式:按左右顺序依次排列,右击右边框,向后添加一帧,右击内边框,可向后插入一帧或合并帧,右击左边框,向前插入一帧,,,,顺序不变性:平铺式结构各框架之间的顺序不能改变,但可以先变换成层叠式再还原成平铺式进行改变 传输特性:由于该结构各帧都是平铺可见的,因此各帧之间的数据可以直接传输,无须借助局部变量进行基本操作:,添加空白帧:右击相应边框,通过快捷菜单添加、插入空白帧或合并帧增量按钮: 向后翻页,②.层叠式:按上下顺序层叠排列,选择器标签: 以序号的形式标示各子框页的基本信息减量按钮: 向前翻页,,LabVIEW,顺序可变性:层叠式结构各框图由各自的序号进行区别,按照从小到大的顺序执行顺序(号)可通过右击边框的【本帧设置为】进行调整改变 传输特性:由于该结构各帧是向下层叠不可见的,因此各帧之间的数据必须借助局部变量进行传输。

基本操作:,添加空白帧:右击边框,可通过快捷菜单向前、向后添加帧 添加局部变量:右击边框,【添加顺序局部变量】,所添加的变量为蓝色箭头标记 数据源、 传入端应用举例:产生随机数直到等于给定数时显示所需时间与执行次数,采用平铺式顺序结构,LabVIEW,采用层叠式:,⑴.新建 VI,在前面板上放置数值输入控件“给定数据”和两个数值显示控件“执行次数”,“所需时间”⑵.在程序框图上放置一个层叠式顺序结构,在右击结构框图边框的快捷菜单中执行两次“在后面添加帧”,创建 帧 1和帧2⑶.选取第 0 帧,记录程序运行初始时间 右击结构框图边框 — “添加顺序局部变量”,将在下边框出现黄色小方框,这就是顺序局部变量,用来在层叠顺序结构中各帧之间传递数据 放置时间计数器到顺序结构内记录程序运行时的初始时间,并与顺序局部变量相连,此时黄色框内将会出现一个指向顺序结构外部的箭头用以向外传递数据时间计数器位于:函数→编程→定时→时间计数器⑷.选取第 1 帧,实现等于给定值的匹配运算程序如图:,⑸.选取第 2 帧,同样放置一个时间计数器用于返回当前时间,将它减去顺序局部变量传递过来的第 0 帧初始时间即可得到花费的时间,如图:,⑹.运行结果:,,注意:Labview 编程的主要特点是数据流形式,这便于VI大量的按照并行方式运行,优化了程序的计算性能。

而顺序结构却趋向于中断数据流编程,禁止程序的并行操作,顺序结构还掩盖了部分代码,所以用户在编程时应尽量不用或少用顺序结构在实际应用中,经常用人为的数据依从关系来确定程序先后执行的顺序,在前面簇的章节中,我们就提到过 Error簇可以控制程序执行的先后顺序,但并不是每一个控件都有 Error簇的输入和输出端口,这时还有另一种方法能实现顺序执行的功能如图,从第一个 While 循环结构中的布尔开关上连了一根线到第二个 While 循环结构的边框上,可以看到,第二个 While 循环结构中没有一个对象需要这个数据,只是起到顺序执行程序的目的五、局部变量和全局变量,局部变量和全局变量是 LabVIEW用来传递数据的工具 LabVIEW 编程是一种数据流编程,它是通过连线来传递数据的但是如果一个程序太复杂的话,有时连线会很困难甚至无法连接,这时就需要用变量进行数据传递 另外,也会经常遇到这样一种情况,对程序中一个控件对象,希望既能写入数据,又能读出数据,这在数据流编程中是无法实现的,这也需要用局部变量或全局变量代替该控件来实现 局部变量主要用于本VI内不同位置之间的数据传递,而全局变量主要是针对不同VI程序之间的数据通信。

谈到局部变量,其实在介绍顺序结构时就已经接触过了,当时是添加顺序局部变量来传递程序初始时间,以便计算程序所执行的时间目的是在不同选择分支中都能够对指示器进行赋值另一种方法是:在右 击控件对象的快捷菜 单中执行 “创建—局 部变量”,如图,1.局部变量,建立局部变量:建立局部变量的方法有两种 一种方法是:在程序框图中直接添加,如图:,,如此创建的变量属于裸变量,必须在 右击图标的快捷菜单中,与前面板相 应控件进行关联方可有效局部变量的应用 该例的目的在于使用局部变量向它联系的前面板上的电流控件写数据,也可以从电流控件读取数据程序框图如图所示:,程序的目的是检验电流量,如果电流大于5A时,则限定电流量为上限5A,这时电流局部变量为写入状态,可以向它写入数据5A;如果电流小于5A时,则将电流通过一个 “电流显示器” 来显示,这时就需要将电流局部变量改变为读取状态,方法是在快捷菜单上执行 “转化为读取” 命令作业,全局变量与局部变量不同,它是在不同的程序之间进行通信LabVIEW 的全局变量是一个独立的VI,它是一种特殊的程序,没有程序框图只有前面板,功能是保存一个或多个全局变量,所以也把全局变量程序称为容器。

建立全局变量: 它的建立和局部变量类似,将全局变量拖放到程序框图中,在它的快捷菜单中执行 “打开前面板 ”,或双击全局变量图标,打开全局变量程序前面板,然后在前面板中添加所需要的全局变量控件,如图,添加了 3个全局变量,并保存VI2.全局变量:,全局变量的应用:建立了全局变量以后就可以在其他程序里调用它,方法是在程序框图上选中“选择VI.”,如图:,在打开的对话框窗体中为程序选择想要放置的全局变量如果最先放置的不是想要的全局变量,可以像对局部变量那样操作,在快捷菜单上选取“选择项”子选项,在列出的所有变量对象中进行选择,或者用操作工具来选择注意:使用全局变量时必须特别小心,因为它对所有的 LabVIEW 程序都是通用的,稍有不慎就可能互相干扰,用户必须清楚的知道全局变量的读写位置LabVIEW 语言编程是一种数据流,全局变量和局部变量提供了一种违反严格数据流的程序设计方式大家有必要了解竞态条件的缺陷,当两个或两个以上的事件可以按任何顺序发生时就产生了竞态条件用户要想知道再多个并行的程序中一个全局变量什么时候被访问是比较困难的特别是再多线程编程中,对这种共享数据变量的竞态条件问题要求更加苛刻,使用全局变量会带来意想不到的错误。

如果用户的应用程序中有全局变量,那么就存在大量的数据复制的危险,因为用户要想在不同的地方对数据进行处理,最终就有许多的数据备份,造成内存的巨大开销和系统资源的浪费,所以建议初学者尽量不要使用全局变量 如果程序中使用了全局变量或者是局部变量,那么在程序运行之前,必须首先要确定它的初始值是否满足执行要求,如果不满足的话,就要对它们进行初始化,使用全局变量和局部变量的注意事项:,作业,1.问题的提出 面对 LabVIEW 基于数据流驱动的编程机制,在某些情况下,希望改变这种运行方式,赋予人为控制或程序控制的因素,这就需要借助于事件结构来实现 所谓事件是活动(动作)发生的异步通知,它将打破数据流驱动的模式,引入事件驱动的编程机制事件的触发来自用户控制、外部 I/O或程序控制事件结构是面向对象编程的基础六、事件结构,2. 事件结构的基本组成(程序—结构—事件结构),事件选择标签,,超时端子,,事件数据节点,,超时端子:用于设定一个超时时限,以毫秒为单位 其值为-1时将永远处于等待状态,直至指定事件触发为止 该值为0的整数时,指定事件在等待期间内若触发则已,否则若超时,将终止事件触发,并返回一个超时事件。

事件数据节点:由若干个事件数据端子组成,用来设计事件过程,完成具体的事件,实现特定功能与操作事件选择标签:用于标识当前显示子框图所处理的事件源,以折叠方式进行切换说明:如果单独使用一个事件过程,只能响应一次事件,为了能够持续响应多个事 件,常将其嵌套在 While 循环中事件结构执行时,将等待一个事前指定事件的触发,一旦该事件触发,将执行相应的条件分支一个事件处理完毕后,事件结构的执行即告完成 如果在等待事件触发的过程中超时,将转去执行特定的超时分支事件的执行:,工作原理:事件结构的工作原理犹如具有内置等待通知函数的条件结构事件结构可包含多个分支,一个分支即一个独立的事件处理程序 一个分支配置可处理一个或多个事件,但每次只能触发(发生)这些事件中的一个事件事件触发:一般事件只能通过外在用户的动作来触发,如单击鼠标、按键等如果需要内部数据触发事件(如当 ab 条件满足时触发一个事件),就需要用户自定义事件—通过编程来实现事件驱动:事件驱动程序通常包含在一个条件循环中,该循环等待事件的触发并执行代码来响应事件,然后不断重复以等待下一个事件的触发 程序如何响应事件取决于为该事件所编写的代码事件驱动程序的执行顺序取决于具体所发生的事件及事件发生的顺序。

程序中的某些部分可能因其所处理的事件的频繁发生而频繁执行,而其它部分也可能由于相应事件从未发生而根本不执行3、事件结构的建立,⑴.摆放框图(程序—结构—事件结构),⑵.调出编辑事件对话框:右击边框—【编辑本分支所处理事件】,⑶.构造事件:一般面对前面板对象构造事件,事件源:将列出前面板所有对象,供用户选择事件源事件:给出事件列表,供用户选择事件事件说明符:事件编辑,进行事件的增、删操作事件类型:,通知事件和过滤事件两种分别用绿色与红色箭头进行区别通知事件用于通知某个事件的触发,过滤事件用来控制在执行某个动作后,系统尚未响应之前进行提醒当事件发生时,用户可以过滤掉甚至完全放弃事件所触发的活动4、应用举例:,前面板,后面板,LabVIEW,⑴. 点击不同按钮,显示不同内容,作业,前面板:,⑵ 密码控制进行图片显示,后面板:,七、定时结构-定时循环和定时顺序结构,在程序框图上使用定时循环或定时顺序结构,可实现需要限时和延时的操作定时循环将重复执行,直到停止条件被满足为止 定时顺序结构以特定结构执行代码一次多帧定时循环用于在限时及延时条件下按特定顺序重复执行代码定时循环是以指定的时间间隔执行一个子程序或帧。

定时循环结构可用于开发重复执行且包括其它功能的VI,如多速率定时功能、精确定时、循环执行时反馈、动态改变定时功能或者多种执行优先级 与 While 循环不同,定时循环的条件接线端不一定 要连线但是,如定时循环的条件接线端未进行任何 连线,循环将无限运行下去1.定时循环结构,① 输入节点 ② 左侧数据。

下载提示
相似文档
正为您匹配相似的精品文档