当前位置:
文档之家› LabVIEW_顺序结构分析
LabVIEW_顺序结构分析
事件类型: 通知事件和过滤事件两种。分别用绿色与红色箭头进行区别。通知事件
用于通知某个事件的触发,过滤事件用来控制在执行某个动作后,系统尚未响应之 前进行提醒。当事件发生时,用户可以过滤掉甚至完全放弃事件所触发的活动。
4、应用举例:
⑴. 点击不同按钮,显示不同内容
前面板
后面板
作业
LabVIEW
顺序结构将按照既定的顺序依次执行,它可以包含 多个代码子框图,这些子框图看起来就像是多帧电影 一样,所以把每个子框图称为一帧。 顺序结构分为平铺式和层叠式两种,二者表现形式 不同,但其基本功能则完全相同。
2.所在位置
函数→编程→结构→平铺式\层叠式顺序结构
3.基本结构
①. 平铺式:按左右顺序依次排列
3、事件结构的建立
⑴.摆放框图(程序—结构—事件结构) ⑵.调出编辑事件对话框:右击边框—【编辑本分支所处理事件】 ⑶.构造事件:一般面对前面板对象构造事件 事件说明符:事件
编辑,进行事件的 增、删操作。 事件源:将列出前 事件:给出事件 面板所有对象,供 列表,供用户选 用户选择事件源。 择事件。
使用全局变量和局部变量的注意事项:
LabVIEW 语言编程是一种数据流,全局变量和局部变量 提供了一种违反严格数据流的程序设计方式。大家有必要 了解竞态条件的缺陷,当两个或两个以上的事件可以按任 何顺序发生时就产生了竞态条件。用户要想知道再多个并 行的程序中一个全局变量什么时候被访问是比较困难的。 特别是再多线程编程中,对这种共享数据变量的竞态条件 问题要求更加苛刻,使用全局变量会带来意想不到的错误。 如果用户的应用程序中有全局变量,那么就存在大量的 数据复制的危险,因为用户要想在不同的地方对数据进行 处理,最终就有许多的数据备份,造成内存的巨大开销和 系统资源的浪费,所以建议初学者尽量不要使用全局变量。 如果程序中使用了全局变量或者是局部变量,那么在程 序运行之前,必须首先要确定它的初始值是否满足执行要 求,如果不满足的话,就要对它们进行初始化
五、局部变量和全局变量
局部变量和全局变量是 LabVIEW用来传递数据的工具。
LabVIEW 编程是一种数据流编程,它是通过连线来传 递数据的。但是如果一个程序太复杂的话,有时连线会很 困难甚至无法连接,这时就需要用变量进行数据传递。 另外,也会经常遇到这样一种情况,对程序中一个控件 对象,希望既能写入数据,又能读出数据,这在数据流编 程中是无法实现的,这也需要用局部变量或全局变量代替 该控件来实现。
基本操作: 添加空白帧:右击相应边框,通过快捷菜单添加、插 入空白帧或合并帧。
②.层叠式:按上下顺序层叠排列
减量按钮: 向前翻页
选择器标签: 以序号的形式标 示各子框页的基 本信息。 增量按钮: 向后翻页
基本特性:
顺序可变性:层叠式结构各框图由各自的序号进行区别,按照 从小到大的顺序执行。顺序(号)可通过右击边框的【本帧设 置为】进行调整改变。 传输特性:由于该结构各帧是向下层叠不可见的,因此各帧之 间的数据必须借助局部变量进行传输。
作业
六、事件结构
1.问题的提出
面对 LabVIEW 基于数据流驱动的编程机制, 在某些情况下,希望改变这种运行方式,赋予人 为控制或程序控制的因素,这就需要借助于事件 结构来实现。
所谓事件是活动(动作)发生的异步通知,它 将打破数据流驱动的模式,引入事件驱动的编程 机制。事件的触发来自用户控制、外部 I/O或程 序控制。事件结构是面向对象编程的基础。
在打开的对话框窗体中为程序选择想要放置的全局变量。 如果最先放置的不是想要的全局变量,可以像对局部变量 那样操作,在快捷菜单上选取“选择项”子选项,在列出 的所有变量对象中进行选择,或者用操作工具来选择。
注意:使用全局变量时必须特别小心,因为它对所有的 LabVIEW 程序都是通用的,稍有不慎就可能互相干扰,用户必须清楚的知道 全局变量的读写位置。
四、顺序结构
LabVIEW_数据流运行机制
传统的编程语言,程序运行是基于程序编码的顺序,是指令驱 动的代码流。LabVIEW 的运行机制是基于数据流的。也就是说: 当程序中的可执行元素(节点)在收到所有必须的输入数据时才 开始执行。当该元素内的所有代码执行完成后,数据才流出该执 行元素并流向其他元素。 数据流的概念源于电子表格的数据处理思路。例如,在电子表 格中你可以指定一个公式与某些单元格建立数据关联,当这些单 元格的所有数据都有效时,公式才会给出最终的计算结果。当任 一单元的数据发生变化时,将会按公式重新进行计算。
一种方法是:在程序框图中直接添加,如图: 如此创建的变量属于裸变量,必须在 右击图标的快捷菜单中,与前面板相 应控件进行关联方可有效。 另一种方法是:在右 击控件对象的快捷菜 单中执行 “创建—
局 部变量”,如图
局部变量的应用
该例的目的在于使用局部变量向它联系的前面板上的 电流控件写数据,也可以从电流控件读取数据。程序框 图如图所示:
说明:如果单独使用一个事件过程,只能响应一次事件,为了能够持续响应多个事 件,常将其嵌套在 While 循环中。
工作原理:事件结构的工作原理犹如具有内置等待通知函数的 条件结构。事件结构可包含多个分支,一个分支即一个独立的事 件处理程序。 一个分支配置可处理一个或多个事件,但每次只能触发(发生) 这些事件中的一个事件。 事件触发:一般事件只能通过外在用户的动作来触发,如单击 鼠标、按键等。如果需要内部数据触发事件(如当 a>b 条件满足 时触发一个事件),就需要用户自定义事件—通过编程来实现。 事件驱动:事件驱动程序通常包含在一个条件循环中,该循环 等待事件的触发并执行代码来响应事件,然后不断重复以等待下 一个事件的触发。 程序如何响应事件取决于为该事件所编写的代码。事件驱动程 序的执行顺序取决于具体所发生的事件及事件发生的顺序。程序 中的某些部分可能因其所处理的事件的频繁发生而频繁执行,而 其它部分也可能由于相应事件从未发生而根本不执行。
基本操作: 添加空白帧:右击边框,可通过快捷菜单向前、向后添加帧。 添加局部变量:右击边框,【添加顺序局部变量】,所添加的 变量为蓝色箭头标记 数据源、 传入端。
LabVIEW
应用举例:产生随机数直到等于给定数时显示所需时间与执行次数
采用平铺式顺序结构
通过数据通道传递数据
LabVIEW
事件的执行:
事件数据节点 事件结构执行时,将 等待一个事前指定事件 的触发,一旦该事件触 发,将执行相应的条件 分支。一个事件处理完 毕后,事件结构的执行 即告完成。 如果在等待事件触发 的过程中超时,将转去 执行特定的超时分支。
事件数据节点:由若干 个事件数据端子组成,用 来设计事件过程,完成具 体的事件,实现特定功能 与操作。
采用层叠式:
⑴.新建 VI,在前面板上放置数值输入控 件“给定数据”和两个数值显示控件 “执行次数”,“所需时间”。 ⑵.在程序框图上放置一个层叠式顺序结 构,在右击结构框图边框的快捷菜单中 执行两次“在后面添加帧”,创建 帧 1 和帧2。 ⑶.选取第 0 帧,记录程序运行初始时间。 右击结构框图边框 — “添加顺序局部变量”,将在下边框出 现黄色小方框,这就是顺序局部变量,用来在层叠顺序结构中各 帧之间传递数据。 放置时间计数器到顺序结构内记录程序运行时的初始时间,并 与顺序局部变量相连,此时黄色框内将会出现一个指向顺序结构 外部的箭头用以向外传递数据。时间计数器位于:函数→编程→ 定时→时间计数器。
⑵ 密码控制进行图片显示
前面板:
后面板:
七、定时结构-定时循环和定时顺序结构
在程序框图上使用定时循环或定时顺序结构,可实 现需要限时和延时的操作。定时循环将重复执行,直 到停止条件被满足为止。 定时顺序结构以特定结构执行代码一次。多帧定时 循环用于在限时及延时条件下按特定顺序重复执行代 码。
1.定时循环结构
定时循环是以指定的时间间隔执行一个子程序或帧。定 时循环结构可用于开发重复执行且包括其它功能的VI,如 多速率定时功能、精确定时、循环执行时反馈、动态改变 定时功能或者多种执行优先级。 与 While 循环不同,定时循环的条件接线端不一定 要 连线。但是,如定时循环的条件接线端未进行任何 连线, 循环将无限运行下去。
程序的目的是检验电流量,如果电流大于 5A时,则限 定电流量为上限5A,这时电流局部变量为写入状态,可 以向它写入数据5A;如果电流小于5A时,则将电流通过 一个 “电流显示器” 来显示,这时就需要将电流局部 变量改变为读取状态,方法是在快捷菜单上执行 “转 化为读取” 命令。
作业
2.全局变量:
全局变量与局部变量不同,它是在不同的程序之间进行 通信。LabVIEW 的全局变量是一个独立的VI,它是一种 特殊的程序,没有程序框图只有前面板,功能是保存一个 或多个全局变量,所以也把全局变量程序称为容器。
⑷.选取第 1 帧,实现等于给定值的
匹配运算程序如图:
⑸.选取第 2 帧,同样放置一个时间计 数器用于返回当前时间,将它减去顺 序局部变量传递过来的第 0 帧初始时 间即可得到花费的时间,如图:
⑹.运行结果:
注意:Labview 编程的主要特点是数据流形式,这便于VI 大量的按照并行方式运行,优化了程序的计算性能。而 顺序结构却趋向于中断数据流编程,禁止程序的并行操 作,顺序结构还掩盖了部分代码,所以用户在编程时应 尽量不用或少用顺序结构。 在实际应用中,经常用人为的 从第一个 While 循环结构中的 数据依从关系来确定程序先后执 布尔开关上连了一根线到第二个 行的顺序,在前面簇的章节中, While 循环结构的边框上,可以 我们就提到过 Error簇可以控制 看到,第二个 While 循环结构中 程序执行的先后顺序,但并不是 没有一个对象需要这个数据,只 每一个控件都有 Error簇的输入 是起到顺序执行程序的目的。 和输出端口,这时还有另一种方 法能实现顺序执行的功能。如图