LabVIEW事件结构
LabVIEW虚拟仪器技术第4章-程序结构
基本程序结构
在各编程语言中,基本的程序结构有三种: 顺序结构、条件结构和循环结构。
LabVIEW中,除了具有上述三种程序结构外, 还提供了用于事件处理的事件结构。
此外,还有局部变量,属性节点和调用节点 等功能,为增加程序编写的灵活性提供了保障。
文本语言接口
在LabVIEW的图形化编程环境中,利用上述 程序结构可以解决很多非常复杂的问题。
范例
条件结构的输出隧道。
条件结构的输出方式
条件结构的输出有两种方式:
1.在条件分支内部输出数据
2.通过数据输出隧道,在条件结构外部输出数据
在分支内部输出数据更符合常规编程语言的编 程方式,但是从LabVIEW数据流的观点来看,并 不是最佳选择。
程序求输入数值的平方根,计算之前先判断 输入是否大于等于0。判断为真,结果由显示控件 输出,判断结果为假时,条件为真的分支不执行。
点击右键,在快捷菜单中我们可以添加或删 除每一帧。我们也可以通过拖曳的方式来改变每 一帧的大小。
顺序结构在执行时,会按照帧的顺序,从左 到右,依次执行每一帧。每一帧都有一个帧序号, 最小的帧序号为0,然后是1、2、3依次递增。
平铺式顺序结构因为代码是平铺的,因此代 码更直观,可读性较高。但是它的缺点是占用空 间较大。
针对于此,可以通过调用快捷菜单中的“替 换为层叠式顺序”功能,将平铺式的顺序结构转 换成层叠式的,以使VI看起来更为紧凑。
4.1.2 层叠式顺序结构
从本质上看,层叠式顺序结构和平铺式顺序 结构的功能完全相同,且二者可以相互转换。
层叠式顺序结构的创建
层叠式顺序结构外形类似于条件结构。它包 括一个或多个顺序执行的子程序框图或帧。
在很多情况下,程序员会需要多段代码按照预 先设定的顺序执行,这就需要顺序结构来帮忙了。
LabVIEW事件结构
LabVIEW事件结构2011-01-12 15:30:57| 分类:硬件学习 | 标签:测量 vi 菜单事件例图|字号订阅使用LabVIEW图形化语言开发的应用程序界面是图形化用户操作界面,也称为:GUI (graphical user interface),它的作用是与操作者实现人机对话形式的互动操作。
这种对界面操作的互动响应在LabVIEW 6.1发布之前,只能通过“轮询(polling)”的方式来实现。
轮询的方式的缺点是:需占用一定的CPU资源(在没有事件发生时)和灵活性不好。
在LabVIEW6.1引入事件结构(Event Structure)后,采用事件结构来设计、实现的GUI操作则变得更加灵活、方便,并且不占用CPU的资源,这与先前采用轮询的方式来查询事件的方式相比要合理的多。
下面结合应用项目中的设计实例来介绍GUI设计中的事件驱动。
有关事件结构的一些基本概念、原理及使用方法在LabVIEW Help及许多书中都作了详细的讲解,这里我就不作更多地介绍了。
事件结构通常包括以下部分:1、Event cases——包含有若干个注册的事件源及同等数目的Event case层,在每个Event case层中包含对该事件响应的处理程序。
2、While循环——用来检测连续不断产生的事件事件结构中的While循环,是用来确保检测到连续不断发生的事件。
如果没有这个While循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。
—————————————————————————————————————————菜单选项事件结构实例Agilent VT1415A是C尺寸、单槽寄存器基VXI模块,可以提供64个通道的多功能输入/输出的闭环控制功能。
第1步、创建一个项目:综合参数测量仪按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。
然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。
labview控制程序流程——labview事件结构
labview控制程序流程——labview事件结构1 事件结构及它的图形化表示法事件被用来通知用户有异步活动发生。
图形化语言的事件响应包括:用户界面事件、外部I/O 事件和程序其它部分的事件。
对事件的处理程序也被称为:事件驱动程序。
事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。
所以对事件的响应结果也可以控制程序的流程。
事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。
虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。
在没有引入事件结构之前,LabVIEW 是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU 资源,甚至可能遗漏事件,所以这种处理方式并非理想。
事件结构的出现避免了对CPU 资源的占用,同时也避免了事件的遗漏。
事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。
图 1 图形化的事件结构与Case 结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。
如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case 的多帧结构(选择器标签)。
当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。
它具有定时延迟的基本功能(不包括While 循环),参见下图。
图 2 具有定时延迟的基本功能当然也可以采用另一种表示方法,参见下图。
图 3 利用事件结构内部节点获得中止时间通过这个例子也好理解内部节点中时间的含义(是事件响应的停止时间)。
超时事件超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。
如果存在其它事件源时,超时事件完全可以被忽略或取消。
看下面一个例子。
图 4 仅有的两个事件之一超时事。
LabVIEW经典结构-组合动作执行模型
LabVIEW经典结构——组合动作执行模型
在LabVIEW应用程序开发中,广泛使用了一种高效的程序结构——组合动作执行模型。
该模型由While、Evnet(事件)、For、Case、enum(枚举)等向种结构和数据类型构成。
执行机理:面向对象的事件结构,响应前面板发生的针对控件的鼠标、键盘的动作,产生事件,并输出一个枚举数组,该数组作为For循环执行的索引,同时数组元素定义了执行的Case。
将各种事件响应进行分解为基本的动作单元,利用枚举数组定义出若干个由动作单元组合而成的动作序列,依据控件事件选择执行枚举数组,顺序完成对应的动作单元。
模型特点:重复利用各基本动作单元,增加代码复用率,程序更加简洁。
通过新建事件,可以定义任意组合的动作序列,灵活高效。
具有很强的模块化设计思想。
图1组合动作执行模型。
labview事件结构使用方法
labview事件结构使用方法在LabVIEW中,事件结构是一种可以按照事件的发生改变程序流程的数据结构,可以通过人机互动或者事件干预的方式产生事件驱动,在LabVIEW中是一种常用的数据结构,下面我就来讲解一下其具体的使用方法。
一、事件结构的使用目的在LabVIEW中一个重要的概念就是数据流,我们在编程的时候可以来设置某些事件来对数据流进行干预,比如说单击鼠标产生事件,按下键盘按键等,这些都可以被当作为事件结构的条件,进而实现对程序的控制。
二、事件结构的创建方法1.在程序窗口中的空白处单击鼠标右键,在弹出的函数选板中选择<结构>子选板,然后再选择<事件结构>并将其拖到程序框图中即可。
2.最基本的事件结构是由<程序框架>、<子框图标识符>和<事件数据节点>组成。
3.在刚创建事件结构时,会自动的创建一个<超时端口>,<超时端口>用于连接一个数值指定等待事件的毫秒数,如果超过设定的时间没有发生事件的话,程序就会产生一个超时事件。
4.<事件数据节点>用于访问事件的数据值,可以单击节点中的数据项,然后在弹出的菜单中,选择<选择项>,可以进行选择访问哪个事件数据的成员。
5.在事件结构的边框上单击鼠标右键,在弹出的菜单中选择<添加事件分支>,即可完成子框图的添加。
三、对事件进行编辑1.换到要进行编辑的子框图中,在边框上单击鼠标右键,在弹出的快捷菜单中选择<编辑本分支所处理的事件>选项,打开<编辑事件>对话框。
2.在<编辑事件>界面中可以对相应的事件源和事件进行定义,在左侧的<事件说明符>下面点击<添加事件>或者<删除>即可相应的改变事件数量。
在<事件源>和<事件>两个子窗口中分别选中相应的对象,左侧的<事件说明符>下面就会出现两者的组合,点击<确定>,此子事件框图就可以完成编辑。
LabVIEW虚拟仪器第3章
通过局部变量实现
通过移位寄存器实现
反馈节点(Feedback Node)
通过反馈节点实现a++
4.3 While循环
两个参数:当前循环次数和条件布尔判断量;循环 次数由布尔量来判断决定。循环的条件有两种: “真
时停止”和“真时继续”。
添加定时器
3.2 波形显示—波形图表
Chart可以将新测得的数据添加到曲线的尾端, 从而反映实时数据的变化趋势,它主要用来显 示实时曲线。
右键菜单及属性框
带状 示波器 扫描图 图表 图表
对于标量数据,Chart图表直接将数据添加 在曲线的尾端。
对于一维数组数据,它会一次性把一维数组的 数据添加在曲线末端,即曲线每次向前推进的 点数为数组数据的点数。
波形数据控件位于控件选 板“All Controls—>I/O — >Waveform”
波形数据包括以下组成部分: 1)起始时间t0,为时间标识类型; 2)时间间隔dt,为双精度浮点类型; 3)波形数据Y,为双精度浮数据是一种预定义格式的簇,但是必须用 专用的波形数据操作函数才能对它进行操作,其中 某些操作函数与簇的操作函数非常类似。
结构功能相同,相互之间可以进行转换,右键 菜单中的“替换—>替换为平铺式/层叠式顺序”
在Stacked Sequence Structure的Frame间 传递数据 ,不能通过数据线直接传递,要借助 局部变量(右键菜单中的”添加顺序局部变量)
在Flat Sequence Structure的Frame间传递 数据,可以通过数据线传递,不需要局部变量。
簇作为输入时需要指定三个元素:起始位置x0、 数据点间隔dx和数组数据。
第5讲 LabVIEW程序结构2
用户自定义事件
LabVIEW自产的事件主要指那些由用户对界面对象进行操作的 事件,比如单击、改变某个控件的值以及程序自身状态变化等, 如果需要在程序中满足其他某种条件时也产生一个事件,就只 能用用户自定义事件了。
用户自定义事件是使用“创建用户事件”函数创建出来的事件。 当需要抛出一个用户自定义事件时,可以使用“产生用户事件”
数。
• 请谨慎选择通知或过滤事件。用于处理通知事件的事件分支,并将无 法影响LabVIEW处理用户交互的方式。如要修改LabVIEW是否处理用 户交互,或LabVIEW怎样处理用户交互,可使用过滤事件。
• 不要将前面板关闭通知事件用于重要的关闭代码中,除非事先已采取 措施确保前面板关闭时VI不中止。例如,用户关闭前面板之前,确保 应用程序打开对该VI的引用。或者,可使用前面板关闭?过滤事件,该 事件在面板关闭前发生。
函数发出一个事件。
程序抛出的用户自定义事件可以携带自定义的某些数据。 用户自定义事件可以作为一种规范的格式,用在VI的初始化、
终止等场合。处理VI被调用或开始运行时首先需要处理的事情 以及VI终止前必须处理的事情。
例:程序有两个输入控件:一是数值型控件A,二是字符串控件B,当A>10或B的长 度大于10个字符时,程序抛出一个用户自定义事件“警告”
可以明显地看出,过滤型事件比相应的通知型事件要先发出。
图4-25 事件结构框架0(过滤事继 事件
图4-26 事件结构框架1(通知事件)
(a)“确定”按钮动作前 (b)选择“是”的计算结果 (c)选择“否”的计算结果
图4-27 静态事件结构运行结果
5.3.3 事件结构的使用
通常,程序不可能只需要处理一个事件,往往在程序运行中不断有需要处理的各种 事件出现,所以,事件结构通常会被放在一个while循环结构内。我们把这种一个 事件结构外套一个while循环结构的程序模式称为“循环事件结构”。
labview学习——生产者消费者(数据)(事件)
labview学习——⽣产者消费者(数据)(事件)其主要的模型:主要从以下⼏个⽅⾯理解:1、可重⼊性正常的labview是多线程设计语⾔,⽽我们在执⾏VI时的规则是通过VI的命名来分别调⽤实现的。
打开VI的Highlight调试⼯具,可以看出两个Wait.vi实例的调⽤并不是同时执⾏的,⽽是依次按顺序执⾏的,⾄于哪⼀个实例先执⾏是不确定的。
这是由于LabVIEW本⾝是并⾏设计的,从理论上⽽⾔,两个VI的实例是同步执⾏的,但是如果两个Wait.vi实例同时执⾏必定会产⽣参数赋值紊乱,因为LabVIEW只允许内存中存在⼀个名称的VI。
如果在⼀个顺序结构⾥要同时进⾏两个vi的调⽤,采⽤的⽅法是单击ctrl+I,在新点出来的对话框中选择执⾏框⾥边的可重⼊选择Reentrant execution,这样的话再次运⾏上述实例⽤时长为并⾏执⾏的时间。
事实上,LabVIEW的可重⼊技术相当于在原有VI的基础上产⽣了⼀个相同的副本,打开Wait.vi从标题栏可以看出VI的名称为Wait.vi:1(clone)。
同理这是由于LabVIEW中不允许内存中的VI存在同名,VI的可重⼊技术相当于产⽣了与原VI具有同样功能的新VI并且修改了该VI的命名。
在实际应⽤中,需要根据情况决定是否设置VI的可重⼊属性,灵活使⽤。
并不是需要将所有的VI都设置为可重⼊,那将占据⼤量的内存资源。
2、动态调⽤通常调⽤⼦VI有两种⽅法,⼀种是静态调⽤,直接在控制板⾥选择⼦VI的⽅法,即编译⽣成可执⾏程序后,⼦VI的代码将会被静态链接到可执⾏程序中另⼀种就是动态调⽤,指的是通过程序调⽤另⼀个程序的运⾏、停⽌、赋值和获取值。
通过程序框图-查看(菜单)-函数-编程-应⽤程序控制-通过引⽤调⽤,通过VI引⽤动态调⽤,可以保证VI在需要时才被装⼊内存,与静态调⽤相⽐节约了内存资源。
labview有多种动态调⽤的⽅式,从底层⽽⾔采⽤的是VI Server技术来实现的。
虚拟仪器labview第六讲
数组的求和
For循环还有一种很有特色的功能,称之 为自动索引(Auto Indexing)功能,当将 一个数组连接到For循环上供For循环内的 节点使用时,For循环可以自动检测该数 组的长度,执行相应次数的循环,并按 顺序将数组内的元素一一取出。
For循环的特点
一旦确定了For循环执行的次数,并开始 执行后,就必须在执行完相应次数的循 环后,才能终止其运行。若确实需要根 据某种逻辑条件跳出循环,可用While循 环来替代For循环。
顺序结构的特点:
Labview顺序框架的使用比较灵活,在编辑 状态时可以很容易地改变层叠式顺序结构各 框架的顺序。平铺式顺序结构各框架的顺序 不能直接改变。
例题:
创建一个 VI,计算生成等于某个给定值 的随机数所需要的时间。
6.4 选择结构
选择结构(Case Structure)也是Labview最 基本的结构之一,相当于C语言中的 switch语句。
For循环的组成
最基本的For循环由循环框架(Loop Frame)、 重复端口(Loop Iteration)和计数端口(Loop Count)组成。重复端口i的初始值为0,每次循 环的递增步长为1。
注意:i的初始值和步长在Labview中是固定不 变的,若要用到不同的初始值或步长,可对 重复端口产生的数据进行一定的数据运算, 也可用移位寄存器来实现。
6.5 事件结构
事件结构中的事件包括鼠标事件(单击、 双击等)、键盘事件、选单事件、窗口事 件(如关闭窗口)、对象的数值变化等。
使用事件驱动可以让Labview应用程序在没 有指定事件发生时处于休息状态,直到前 面板窗口中有一个事件发生时为止。在这 段时间内,可以将CPU交给其他的应用程 序使用,这大大提高了系统资源的利用率。
12.事件结构
事件结构阮奇桢Event Structure 也是一种选择结构,程序根据发生的事件决定执行哪一个页面的程序。
此时,LabVIEW 的界面编写与Visual Basic 的界面程序有些类似。
一. 按照产出源来区分事件的种类按照事件的产生源来区分,LabVIEW有以下几种事件:图1:配置事件1.应用程序事件(<Application>),这类事件主要反映整个应用程序状态的变化,例如:程序是否关闭,是否超时等。
2.VI事件(<This VI>),这类事件反映当前VI状态的改变。
例如:当前VI是否被关闭,是否选择了菜单中的某一项等等。
3.动态事件(Dynamic),用于处理用户自己定义的或在程序中临时生成的事件。
4.区域事件(Pane)和分割线事件(Splitter)是LabVIEW 8中新添加的特性。
LabVIEW 8中,用户可以把一个VI的前面板分割成几份,这两类事件用来处理用户对某个区域或区域分割线的状态的改变。
图2:面板上划分区域5.控件事件(Control)是最常用的一种事件,用于处理某个控件状态的改变。
例如,控件值的改变,或者鼠标键盘的操作。
打开上述的“edit events”框,只要选定了某一个事件产生源,其相应的所有事件均排列在右侧events框中。
有时候,多个事件产生源会对同一个用户操作分别产生相应事件。
比如在某一控件上按下鼠标,区域事件和控件事件都会发出鼠标按下(Mouse Down)事件。
LabVIEW 按以下规则顺序产生不同的事件:键盘相关的事件(Key Down, Key Up, etc.)只在当前选中(Key Focused)的控件上产生;鼠标相关的事件(Mouse Down, etc.)按照从外向里的顺序发出。
例如,区域的鼠标按下事件先于控件的鼠标按下事件发出;结构的鼠标按下事件先于先于结构内控件的鼠标按下事件发出。
值改变事件按照从内向外的顺序发出。
LabVIEW技巧系列(一)——事件结构
LabVIEW技巧系列(一)——事件结构
事件结构,是LV编程结构的精髓所在。
它类似于单片机的中断功能,优
点在于不占用CPU资源。
比如按键按下串口发送数据,以及设置键盘快捷键
等等功能,事件结构比查询结构要节省很多系统资源。
下面我介绍一下利用事件结构的关键点,基础的自己去看帮助吧。
1,关于事件结构超时连线的问题:事件结构有一个超时事件的输入,当不连接时代表永不超时。
这点要十分注意,因为有时候你的事件就够会和其他结构放在一个while循环里,比如下图:
我们理想的情况是,其他服务程序正常循环运行(小灯闪烁),而鼠标按下后,处理事件结构。
但是如果这样写的话,由于事件结构永不超时,while循
环只会运行一次,只有当鼠标按键按下后,才会开始第二次循环。
这个程序的运行结果是,按一下鼠标,小灯变化一次。
要解决这个问题有两个办法:一个是给事件结构的延时输入处添加延时时间,比如5ms,这样循环就会5ms运行一次,不会影响其他服务程序的正常运行。
二个就是把其他服务程序放到另外一个while循环中,事件结构单独一个循环。
个人建议选择第二个方法。
2,关于事件结构软触发的问题:前面板有一个按钮,按下后触发很简单,
也很常用。
不过有时候要涉及到软触发的问题,就是利用程序(而不是前面板的控件)去触发一个事件。
先看下面这个例子:
“服务程序”软件改变软触发的值,我们的理想目标是,每次改变服务程序的
值为真时,标志小灯会改变一次。
但是实际程序运行结果是,无论按多少次,小灯都不变。
因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。
Labview【事件结构】
Labview【事件结构】
帮助⽂档
1.简单程序例⼦
单击确定,计数加⼀。
单击停⽌,程序停⽌执⾏。
运⾏结果:
2.步骤
创建while循环,添加循环终⽌条件端⼦,添加定时器;检测是否单击了确定按钮;
添加事件结构,给超时端⼦赋值,超时事件中不⽤编辑程序:表⽰超时后不执⾏任何操作;
事件结构框右键“添加事件分⽀”:
选择事件源与事件:
在事件列表中选择事件分⽀进⾏编辑:
值加⼀操作:
给计数值赋初值0,应⽤顺序结构,⼀帧⼀帧的执⾏;
3.创建计数值局部变量⽅法
变量使程序在多个地⽅对同⼀个控件进⾏读写操作。
法⼀:直接右键创建
法⼆:函数选板局部变量
列表选择:。
labview的事件结构的用法
labview的事件结构的用法
LabVIEW的事件结构是一种特殊的程序结构,它可以让程序在等待用户输入或系统事件时暂停执行,直到事件发生后再继续执行。
事件可以是用户交互、数据输入、系统消息等,都可以被事件结构捕捉。
使用事件结构可以增强程序的交互性和灵活性,使程序能够更好地响应用户操作和外部事件。
事件结构包含一个或多个事件框,每个事件框都可以捕捉一个特定类型的事件。
当事件发生时,事件结构会自动跳转到相应的事件框,执行相应的代码,然后等待下一个事件的到来。
事件结构还可以设置超时时间,当等待事件的时间超过设定的超时时间时,事件结构会自动退出等待状态,进行下一步操作。
LabVIEW的事件结构还支持多个事件的并发处理,不同的事件框可以同时处于等待状态,当事件发生时,相应的事件框会立即响应,执行相应的代码,而不影响其他事件框的等待状态。
在LabVIEW中,事件结构可以用于各种应用场合,比如图形界面、数据采集、通信等。
通过事件结构,程序可以更好地与用户交互,响应外部事件,增强程序的实用性和可靠性。
- 1 -。
第五章LabVIEW介绍5
(1)调用 • 由函数模板中的Select a VI…子模板打开选择用户 程序对话框,选择已经保存的全局变量声明VI程序 ,此时将在框图程序中显示全局变量数据端口。 • 如果在全局变量声明VI中建立多个控件,可以用操 作工具在全局变量的图标上单击,在列出的所有变 量对象中选择所需的对象。
–(2)使用示例 • 利用全局变量在不同VI中传递数据。 • 创建一个全局变量声明Ⅵ,其中包含一个数值型控件和布 尔型控件,保存为“GV.vi”。 • 新建一个VI命名为“采集信息.vi”,前面板中有一个旋钮 开关和按键开关,将它们的值送到全局变量中。由函数模 板中的选择VI子模板打开选择用户程序对话框,选择 “GV.vi”,调用两次全局变量声明Ⅵ,选择全局变量的不 同数据类型,对端口连线并保存VI。如图
2019/1/18 32
强度图表的应用
本程序中,先由正弦函数在for循环的边框通道上形成一个 一维数组,然后通过“创建数组”函数形成一个列数为1的 二维数组,送到强度图表控件。因为强度图表所需的数据类
型为二维数组。
2019/1/18 33
5.7.5 数字波形图
数字数据类型
在数字电路设计中经常要分析数字电路的逻辑, 因此通常需要分析时序图。LabVIEW提供了数 数字数据 字波形图解决了此类问题。
4、特点 (1)以独立文件的形式存在 (2)一个全局变量中可以包含多个对象,拥有多种数 据库类型 (3)与子VI不同,不能进行编程,只能用于简单的数 据存储。 (4)速度快 (5)其中的数据可以分别访问
(四)慎用局部变量与全局变量
理由: 1、占用大量内存 2、使程序可读性差 3、在多线程并行运行的程序中,局部变量也可能引 起竞态条件。
二维数组
5.7.7 三维图形
labview第四讲 程序结构
优点: 把每个帧平铺开来比较直观,方便代 码阅读,不需借助局部变量这种机制在 帧之间传递数据。 缺点:浪费空间。
例:求循环时间
四、公式节点
通过公式节点,用户可以实现复杂的数学
公式,还可以通过文本编程写一些基本的
逻辑语句,如if…else、case、while循环
之类的语句,弥补了图形化开发语言相对
(三)全局变量 与传统编程语言中的全局变量类似, 可以在不同的VI之间进行数据传递。 1、创建 2、属性:读和写 3、使用(举例)
4、特点 (1)以独立文件的形式存在 (2)一个全局变量中可以包含多个对 象,拥有多种数据库类型 (3)与子VI不同,不能进行编程,只 能用于简单的数据存储。 (4)速度快 (5)其中的数据可以分别访问
Local variaval
3、本地变量的属性: 读(Read)和写(Write) 4、使用 前面板对象的本地变量相当于其端口 的一个拷贝,它的值与该端口同步。
举例: 例1、用一个布尔开关同时控制两个循环
例2、给一个控制赋值,从一个指示中读 出数据。
例3、在顺序结构中的使用:创建一个 VI, 计算生成等于某个给定值的随机数所需 要的时间。
例1:用While循环
创建一个可以产生 并在图表中显示随 机数的VI。 前面板 有一个控制旋钮可 在0到10秒之间调 节循环时间,还有 一个开关可以中止 VI的运行。学习怎 样改变开关的动作 属性,以便不用每 次运行VI时都要打 开开关。
随机信号 1.0 0.8 0.6 0.0 0.4 0.2 0.0 0 1023 10.0 2.0 循环延时 4.0 6.0 8.0
(二)本地(局部)变量 相当于传统编程语言中的局部变量,可以 在同一个程序内使用。 1、引入理由: (1)每个控制或指示的数据端口只有一 个; (2)需要在同一个VI的不同位置多次为 指示赋值;或多次从控制中取出数据;或者 为控制赋值,从指示中取出数据。
event提高:LabVIEW事件结构编程
LabVIEW事件结构编程事件驱动的编程允许用户通过前面板的操作,或是其他的异步事件来驱动LabVIEW程序的运行。
事件是一种异步的信号,告知PC有事情发生。
用户界面、外部I/O或是程序的一部分代码都有可能导致事件的发生。
使用事件结构可以实现仅当事件发生时,程序才需要响应,别的时候程序可以处理其他迚程或是其他的事件,事件结构相当于一种“中断”。
相对的,如果不使用事件结构,程序会以“轮询”的方式来检测事件的发生,但这样会大大消耗CPU的使用时间,不利于处理复杂、多线程的程序。
因此,事件结构允许将CPU的使用降低到最小,但又不牺牲与用户的交互性。
用户界面事件:鼠标点击、键盘操作等等外部I/O 事件:硬件定时、硬件触发、或是硬件出错等等。
其他程序事件:程序间的通讯等注:LabVIEW支持用户界面事件和程序事件而不支持外部I/O事件。
1. 事件结构典型的事件结构如图1所示。
事件结构包括一个或多个子程序框图,或事件分支,注意每当结构执行时,仅有一个子程序框图或分支在执行。
事件结构的执行过程是,一直等待直至某一事件分支的事件发生,然后执行相应事件分支从而处理该事件。
右键单击结构边框,可添加新的分支并配置需处理的事件。
为事件结构边框左上角的“超时”接线端连接一个值,以指定事件结构等待某个事件发生的时间(以毫秒为单位)。
默认为–1,即永不超时。
图 1事件结构用户界面事件分为消息事件和过滤事件两种。
a.消息事件消息事件指一个用户的行为已经发生,使用消息事件来反馈一个已经发生的事件,并且LabVIEW已经对它迚行了处理。
例如,“鼠标按下”就是一个消息事件,图2中的事件结构的分支程序实现了用户用鼠标点击停止按钮,按下后停止程序的功能。
这个事件是在用户释放鼠标以后LabVIEW迚行处理的。
图 2 消息事件b.过滤事件过滤事件在用户行为发生之后,LabVIEW处理该事件之前先告知用户,由用户来决定程序接下来如何处理事件,有可能处理的方式与默认的处理不同。
LabVIEW设计模式汇总
LabVIEW设计模式汇总本文归纳了LabVIEW中常用的几种设计模式,介绍了各种设计模式的特点及适用范围,并提供了每种设计模式对应的典型应用实例。
1 标准状态机1.1简介状态机(State Machine)是编程中经典的设计模式之一。
状态机对系统所有可能的状态进行罗列,在每个状态分支中执行该状态的代码,并指明系统要执行的下一个状态。
状态机能清晰和准确地完成与状态密切相关的任务。
1.2结构图1-1为典型的标准状态机结构。
系统包含“Initialize”,“Idle”,“Case1”,“Case2”,“Stop”五个状态;系统可以在“Initialize”中初始化系统参数,在“Idle”中专门做状态选择处理,“Case1”和“Case2”为用户自定义的状态分支,“Stop”状态使系统停止运行。
图1-1 标准状态机结构1.3要点(1)状态枚举常量该枚举常量包含了系统所有可能的状态,每次可以选择一个指定的状态。
(2)带移位寄存器的while循环状态机通过while循环上的移位寄存器传递下一个要执行的状态,每次循环只能执行一个条件分支。
(3)条件结构该条件结构的每个分支对应一个系统的可能的运行状态。
Tips:●可以将枚举常量设计为自定义控件类型。
当系统状态需要修改时,只需要修改一次“自定义控件”即可更新整个程序中所有的枚举常量。
●将枚举常量连接到条件结构的选择器接线端后,右击条件结构边框,选择“为每个值添加分支”,可以轻松地为条件结构实现分支配置。
1.4实例(1)情景:使用温度监控系统监测当前温度,当温度超过高温阈值时发出“高温警报”,当温度低于冷冻阈值时发出“冷冻警报”。
(2)代码:详见附件中的“标准状态机”项目文件。
图1-2 前面板设计图1-3 程序框图设计1.5小结标准状态的应用非常广泛,它的特点是:(1)系统的所有状态和转换条件都是可以提前预期设定的,而不是随机产生的;(2)系统一次只能执行一个状态,不适合做并行任务处理。
事件结构
LabVIEW 事件结构
郑重声明
本课程视频来源于National Instruments公司《LabVIEW网络讲坛》系列,链接地址:/china/labviewtips,针对视频的内容已经得到NI公司的授权。
请按照下列步骤学习本课程:
1.收看LabVIEW事件结构教学视频
点击收看
2.查看相关资源(包括技术白皮书、Demo程序等)
3.完成课后练习
课后练习
1.关于事件结构的超时接线端的说明,正确的是:
A.以毫秒为单位,到达指定时间后结束事件结构
B.以毫秒为单位,到达指定时间后,执行时间结构中的TimeOut分支
C.以秒为单位,到达指定时间后结束事件结构
D.以秒为单位,到达指定时间后,执行时间结构中的TimeOut分支
2.事件结构正在执行某事件分支的同时,又产生了其他的事件,程序会如何执行?
A.产生冲突,直接退出前面执行的事件,并返回错误;
B.产生冲突,直接退出前面执行的事件,并立即响应后面产生的事件;
C.不产生冲突,继续执行前面的事件直到结束,忽略后面的事件;
D.不产生冲突,缓存后面的事件,直到前面的事件执行完成,继续执行后面的事件;
3.注册事件的事件源包括哪些?
A.控件引用
B.前面板控件
C.VI引用
D.用户事件
4.判断题:事件结构的每个分支只能创建一个事件源。
labview从入门到出家4--用事件结构实现运算功能
labview从⼊门到出家4--⽤事件结构实现运算功能使⽤事件结构可以快速定位响应界⾯的操作事件,如按下,拖动,双击的事件。
基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,⽐如后⾯进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的。
⼀个好的状态机可以帮助我们搭建⼀个好的程序框架,这将⾮常有利于我们以后写⼀些⼤型程序。
在此前,我们先⽤之前的加减乘除运算熟悉⼀下事件结构。
1、同样的,按上⼀章节的操作,或者直接拷贝上⼀章的程序。
新建⼯程->新建calc主VI->新建⼦VI,这⾥把主VI打回原型,把之前的条件结构减掉(其实就是⽤事件结构代替⾥⾯的条件结构,但只是介绍事件结构的使⽤,不是说事件结构可以取代条件结构)。
2、添加事件结构我们可以看到事件结构的第⼀个默认事件是超时事件(⽬前只有⼀个事件),左上⾓那个沙漏状的是超时时间设定,相当于单⽚机⾥⾯的定时中断,我们后⾯可以右键新建⼀个数值常量⽤于设定超时时间。
如果没设定超时时间,则在没有其他事件产⽣或触发前,整个while循环就卡在超时事件这边等待超时事件的发⽣,因为没有设定超时时间,所以程序⼀直等待,不响应事件之外的其他操作。
只有⼀个超时事件3、添加“布尔”按键的事件,⿏标移到事件结构上⽅的事件显⽰图标,右键选择“添加事件分⽀”。
选择布尔,选择值改变,点击确定就添加了我们的布尔按键的事件了。
⿏标点击事件结构上⽅的⿊下三⾓,显⽰有超时和布尔值改变两个事件分⽀,我们选中布尔值改变的事件分⽀,在该分⽀添加相关的程序逻辑。
4、将上⼀次章条件结构中的程序直接拷贝或者重新编写⾄事件分⽀中5、运⾏程序试⼀下功能(后⾯会出⼀章讲程序调试操作,我们到时候可以⽤调试⼯具查看事件功能的响应情况)。
我们发现基本功能和上⼀章的⼀致,但是会发现⼀个问题,点击退出按键的时候界⾯不响应退出的功能。
这时因为while循环中我们添加的是事件结构,也就是程序只有识别到事件发⽣时,才会执⾏⼀次while循环,没事件发⽣的话,则不会运⾏其他操作,也就不响应按键的执⾏了。
LabVIEW事件结构
事件分支标签
事件数据节点
图 1 事件结构
事件过滤节点
用户界面事件分为消息事件和过滤事件两种。
1
LabVIEW
LabVIEW 中级教程
消息事件
消息事件指一个用户的行为已经发生,使用消息事件来反馈一个已经发生的事件,
并且 LabVIEW 已经对它迚行了处理。例如,“鼠标按下”就是一个消息事件,图
事
添加事件分支,事件源选择“本 VI”,事件选择“键按下”。
使用一个显示控件查看按下“↑、←、↓、 →”键所分别对应的扫描码。
添加条件结构,为“↑、←、↓、 →”添加不同的条件分支(扫描码作为判 据),设置不同的字符串作为“按键记录”的输出,并删除上个步骤中创建是显示 控件。
3、使用过滤事件,实现程序运行时,前面板一直保持打开的功能。
2 中的事件结构的分支程序实现了用户用鼠标点击停止按钮,按下后停止程序的功
能。这个事件是在用户释放鼠标以后 LabVIEW 迚行处理的。
件
结
构
编
程
图 2 消息事件
过滤事件
过滤事件在用户行为发生之后,LabVIEW 处理该事件之前先告知用户,由用户来 决定程序接下来如何处理事件,有可能处理的方式与默认的处理不同。过滤事件有 什么好处?使用过滤事件以后,用户可以随时按需要修改程序对事件的处理,甚至 可以完全放弃该事件,而对程序不产生影响。例如:“前面板关闭?”就是一个过 滤事件(过滤事件后面都有一个?)。图 3 中的事件结构实现放弃对“前面板关 闭?”这一事件的响应,从而将这一事件过滤。
5
结
“轮询”的方式来检测事件的发生,但这样会大大消耗 CPU 的使用时间,不利于
构
处理复杂、多线程的程序。因此,事件结构允许将 CPU 的使用降低到最小,但又
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 3 过滤事件
2. 创建静态事件结构
LabVIEW 中可以创建各种各样的事件,按注册的方式,可分为静态注册事件和动 态注册事件。对前面板界面用户事件的响应是一种静态注册事件。当 VI 运行时, LabVIEW 自动注册这些事件,事件结构一直等待事件的发生。需要注意的是,静
2
LabVIEW
LabVIEW 中级教程
事件分支标签
事件数据节点
图 1 事件结构
事件过滤节点
用户界面事件分为消息事件和过滤事件两种。
1
LabVIEW
LabVIEW 中级教程
消息事件
消息事件指一个用户的行为已经发生,使用消息事件来反馈一个已经发生的事件,
并且 LabVIEW 已经对它迚行了处理。例如,“鼠标按下”就是一个消息事件,图
事
结
前面板上先放置 4 个布尔输入控件“前迚” 、“后退”、“左转”、“右转”,
构
在程序框图中放置一个 while 循环,然后在循环中右键>>结构>>事件结构,放置
编
一个事件结构到程序框图上。事件结构有一个默认的超时分支,用户可以根据需要
保留或删除该分支。在事件分支的边框点击右键,在弹出的快捷菜单中选择添加分
程
支,弹出编辑事件对话框,为布尔控件注册相应的事件。
图 4 注册事件
在编辑事件对话框中,左侧是事件源,用来选择发起事件的来源,例如上文所说的 布尔控件“前迚”;右侧是事件,用来选择事件的类型,如鼠标释放、键按下等 等,根据不同的需求选择事件的类型。在事件框中,也可以区分消息事件(绿色箭 头)和过滤事件(红色箭头+?)。点击确定,即添加了一个事件分支,如图 5 所
4
LabVIEW
LabVIEW 中级教程
,事件结构分支的输出隧道不是必须要赋值的,
对于没有赋值的输出隧道,LabVIEW 会自动将相应数据类型的默认值赋给输出隧
事
道。用户只需对必要的输出隧道迚行赋值即可。
件
事件结构框的左侧的一系列事件数据节点,用户可以根据需要在事件处理代码中使
1. 事件结构
典型的事件结构如图 1 所示。事件结构包括一个或多个子程序框图,或事件分 支,注意每当结构执行时,仅有一个子程序框图或分支在执行。事件结构的执行过 程是,一直等待直至某一事件分支的事件发生,然后执行相应事件分支从而处理该 事件。右键单击结构边框,可添加新的分支并配置需处理的事件。为事件结构边框 左上角的“超时”接线端连接一个值,以指定事件结构等待某个事件发生的时间 (以毫秒为单位)。默认为–1,即永不超时。
添加事件分支,事件源选择“本 VI”,事件选择“键按下”。
使用一个显示控件查看按下“↑、←、↓、 →”键所分别对应的扫描码。
添加条件结构,为“↑、←、↓、 →”添加不同的条件分支(扫描码作为判 据),设置不同的字符串作为“按键记录”的输出,并删除上个步骤中创建是显示 控件。
3、使用过滤事件,实现程序运行时,前面板一直保持打开的功能。
5
LabVIEW
LabVIEW 中级教程
LabVIEW 事件结构编程
事件驱动的编程允许用户通过前面板的操作,或是其他的异步事件来驱动
LabVIEW 程序的运行。事件是一种异步的信号,告知 PC 有事情发生。用户界
事
面、外部 I/O 或是程序的一部分代码都有可能导致事件的发生。使用事件结构可以
件
实现仅当事件发生时,程序才需要响应,别的时候程序可以处理其他迚程或是其他 的事件,事件结构相当于一种“中断”。相对的,如果不使用事件结构,程序会以
3
LabVIEW
LabVIEW 中级教程
示,可以在这个分支中添加代码来完成在这个事件分支中要处理的内容。例如,图
5 中将字符串“前迚”赋值给按键记录字符串控件。同样的,可以为其他的布尔控
件“后退”、“左转”、“右转”添加事件分支。对于控件“停止”,由于我们需
要通过点击它来停止整个 VI 的运行,因此它的事件分支是这样编辑的,将一个真
结
用。例如,“源”表示事件源,“类型”表示事件的类型,“时间”表示事件发生
构
的时间,等等。事件源不同,对应的事件数据节点也有所不同。
编
Tips:可以通过对事件数据创建显示控件来显示以熟悉不同的事件数据。
程
注:请参考 LabVIEW 帮助中“在 LabVIEW 中使用事件的说明与建议”来设置事 件结构和注册事件。
态注册事件只与本 VI 相关联,它无法实现对其他 VI 的前面板用户界面事件迚行响 应。
下面我们来实现一个 VI,它可以对前面板的不同按键作出相应的反应,例如点击
事
“前迚”按钮,VI 的前面板会显示“前迚”;点击“后退”按钮,VI 的前面板会
件
显示“后退”,同时实现程序运行时,前面板一直保持打开的状态。
2 中的事件结构的分支程序实现了用户用鼠标点击停止按钮,按下后停止程序的功
能。这个事件是在用户释放鼠标以后 LabVIEW 迚行处理的。
件
结
构
编
程
图 2 消息事件
过滤事件
过滤事件在用户行为发生之后,LabVIEW 处理该事件之前先告知用户,由用户来 决定程序接下来如何处理事件,有可能处理的方式与默认的处理不同。过滤事件有 什么好处?使用过滤事件以后,用户可以随时按需要修改程序对事件的处理,甚至 可以完全放弃该事件,而对程序不产生影响。例如:“前面板关闭?”就是一个过 滤事件(过滤事件后面都有一个?)。图 3 中的事件结构实现放弃对“前面板关 闭?”这一事件的响应,从而将这一事件过滤。
事
常量赋给 while 循环条件接线端。
件
结
构
编
程
图 5 消息事件分支
为实现程序运行时,前面板无法关闭,需要选择的是过滤事件。在编辑事件对话框 中选择<本 VI>>>前面板关闭?可以看到过滤事件的事件数据节点和消息事件的事 件数据节点是不同的。同时,过滤事件的事件结构框右侧还有过滤节点。可以将一 个“True”常量连接到放弃?接线端,表示放弃该事件的处理,从而实现程序运行 时,前面板一直保持打开的状态。
结
“轮询”的方式来检测事件的发生,但这样会大大消耗 CPU 的使用时间,不利于
构
处理复杂、多线程的程序。因此,事件结构允许将 CPU 的使用降低到最小,但又
编
不牺牲与用户的交互性。
程
用户界面事件:鼠标点击、键盘操作等等 外部 I/O 事件:硬件定时、硬件触发、或是硬件出错等等。 其他程序事件:程序间的通讯等 注:LabVIEW 支持用户界面事件和程序事件而不支持外部 I/O 事件。
练习:
1、在 Static Event Structure_ex.vi 的基础上,为控件“后退”、“左转”、“右 转”分别添加事件结构,实现鼠标单击控件释放后,“按键记录”控件显示相应的 按键记录。
2、在练习 1 的基础上,为控件“前迚”、“后退”、“左转”、“右转”分别添 加事件结构,实现按下键盘上“↑、←、↓、 →”键,“按键记录”控件显示相 应的按键记录。