labviewcase结构用户事件和事件结构的区别

在LabVIEW中使用事件 - LabVIEW 2011帮助 - National Instruments
您的位置:& &
在LabVIEW中使用事件
LabVIEW可产生多种不同的事件。为避免产生非期望事件,可使用事件注册来指定期望LabVIEW通知的事件。LabVIEW支持和两种事件注册模式。
静态注册可指定VI在程序框图上的的每个分支具体处理该VI在前面板上的哪些事件。LabVIEW将在VI运行时自动注册这些事件,故一旦VI开始运行,事件结构便开始等待事件。每个事件与该VI前面板上的一个控件、整个VI前面板窗口或某个LabVIEW应用程序相关联。不可静态配置一个事件结构来处理前面板上不同VI的事件。配置之所以称为静态是因为无法在运行时改变事件结构所处理的事件。
动态事件注册通过将事件注册与VI服务器相结合,允许在运行时使用应用程序、VI和控件引用来指定希望产生事件的对象。动态注册在控制LabVIEW产生何种事件和何时产生事件方面更为灵活。但是,动态注册比静态注册复杂。动态注册需要将VI服务器引用与程序框图函数配合使用以明确地注册和取消注册事件,而无法通过事件结构的配置信息自动处理注册。
注:  
通常,LabVIEW只有在用户直接与活动前面板交互时才产生用户界面事件。使用、全局变量、局部变量、DataSocket时,LabVIEW不生成等事件。可使用属性来产生一个“值改变”事件。在许多情况下,可使用通过程序产生的事件来代替队列和通知器。
由LabVIEW事件提供的事件数据总是包括一个时间标识、一个已发生事件的枚举型值以及一个触发该事件的对象的引用。时间标识是一个毫秒计数器,用于计算两个事件的间隔时间或确定事件发生的顺序。产生该事件的对象的引用与该对象的VI服务器类必须严格类型一致。根据产生事件的对象,如、或,事件被划分为不同的类。如果单个分支处理多个不同VI服务器类对象的事件,那么该引用类型是所有对象的公共父类。例如,如果将事件结构中某一个分支配置为处理数值控件和颜色梯度控件的事件,由于数值控件和颜色梯度控件都属于数值类,则事件源的控件引用类型为数值型。如果VI类和控件类注册了同样的事件,LabVIEW先产生VI事件。
注:  簇是仅有的可产生事件的容器对象。除“值改变”事件外,LabVIEW一般先为簇产生控件事件,再为簇中的对象产生事件。“值改变”事件先为簇中的元素产生事件,再为簇本身产生事件。如果容器对象上的VI事件及控件事件的事件结构分支放弃该事件,LabVIEW将不再进一步产生事件。
程序框图上的每一个事件结构和函数都具有一个LabVIEW用来存储事件的队列。当事件发生时,LabVIEW会在该事件注册的每一个队列中放置该事件的一个副本。事件结构将处理其队列中的所有事件,以及连接到该事件结构动态事件接线端的所有“注册事件”函数队列中的事件。通过这些队列,LabVIEW可确保事件被可靠地按其发生顺序传输到每个已注册的事件结构。
默认状态下,当一个事件进入队列后,LabVIEW将锁定含有产生该事件的对象的前面板。前面板将一直保持锁定状态直至所有事件结构完成处理该事件。前面板锁定时,LabVIEW将不处理前面板操作而将这些操作放入缓冲区,直至前面板解除锁定后才处理这些操作。
例如,用户可能需要事件分支打开一个需要输入文本的应用程序。由于用户已预计到需要进行文本输入,故可能在前面板上出现该应用程序前用户便开始文本输入。如启用锁定前面板直至本事件分支完成选项,一旦应用程序打开并在前面板上出现,LabVIEW将以按键的发生顺序处理按键。如禁用锁定前面板直至本事件分支完成选项,由于LabVIEW并不按事件分支的完成而对执行进行排序,键按下操作可能在前面板的其它位置被处理。
前面板锁定并不影响某些操作,比如移动窗口、操作滚动条以及单击中止执行按钮。
LabVIEW甚至可以在没有事件结构等待处理事件时产生事件。由于事件结构每次执行时仅处理一个事件,因此可将事件结构放在While循环中以确保事件结构能够处理所有发生的事件。
注意:  如果没有任何事件结构来处理某一事件且前面板被锁定,该VI的前面板将不响应任何操作。如果发生这种情况,单击中止执行按钮停止VI运行。右键单击事件结构并取消勾选编辑事件对话框中的复选框可禁用前面板锁定。过滤事件则不能关闭前面板锁定。
在LabVIEW中使用事件时,请参考相关。静态事件注册
只有用户界面事件可进行静态事件注册。使用对话框可配置事件结构以。选择事件源,事件源可以是程序、VI或某个控件。选择一个事件源可产生的特定事件,如前面板大小调整、值改变等。接着根据应用程序的需求,编辑该分支来处理事件数据。
运行一个含有事件结构的VI时,LabVIEW会自动静态注册事件。仅在VI处于运行状态或另一个处于运行状态的VI以子VI的形式调用该VI时,LabVIEW才产生该VI的事件。
运行一个VI时,LabVIEW将顶层VI及其在程序框图上所调用的子VI的层次结构设置一个称为保留的执行状态。由于VI的父VI在运行时会随时将其作为子VI调用,故当VI处于保留状态时,不能编辑VI或单击运行按钮。当LabVIEW将一个VI设置为保留状态时,它将自动注册该VI的程序框图上所有事件结构中被静态配置的事件。当顶层VI结束运行时,LabVIEW会将该VI及其所有子VI层次结构设置为空闲执行状态并自动将该事件的注册取消。
关于使用静态事件注册的范例见labview\examples\generalvents.llb。
动态事件注册
可完全控制LabVIEW所产生的事件的类型和时间。动态事件可使事件仅在应用程序的某个部分发生,或在应用程序运行时改变产生事件的VI或控件。使用动态注册,可在子VI中处理事件而不是仅在产生事件的VI中处理事件。
处理动态注册事件主要有下列四步:
获取要处理事件对象的VI服务器引用。
将VI服务器引用连接至“注册事件”函数以注册对象的事件。
将事件结构放在While循环中,处理对象事件直至出现终止条件为止。
通过函数以停止事件发生。
要动态注册对象事件,必须先获取该对象的。通过和函数来获取应用程序和VI的引用。要获取控件引用,可使用属性节点查询VI的控件,或右键单击该控件,从快捷菜单中选择创建»引用来创建控件引用常量。
使用函数可动态注册事件。可调整“注册事件”函数的大小以显示一个或多个事件源输入接线端。将应用程序、VI或控件引用连接到每一个事件源输入接线端。右键单击每一个输入接线端,从事件快捷菜单中选择想要注册的事件。所能选择的事件取决于连接到事件源输入端的VI服务器引用类型。事件快捷菜单上的事件与静态注册事件时在对话框出现的事件相同。“注册事件”函数执行时,LabVIEW将对每个事件源输入引用句柄相关联的对象上的事件进行注册。一旦注册了事件,LabVIEW将按事件发生的顺序将事件放入队列,直到事件结构来处理这些事件。除非有另一对象在函数执行前之前注册了事件,否则将不会产生事件。
注:  与属性节点不同,“注册事件”函数不需连接左上角的输入接线端。仅当需要时才使用该输入。
动态事件接线端类似于移位寄存器,可右键单击事件结构并从快捷菜单中选择显示动态事件接线端来获取。左接线端接受事件注册引用句柄或事件注册引用句柄的簇。如果不连接内部的右接线端,右接线端的数据将与左接线端相同。但是,可通过“注册事件”函数将事件注册引用句柄或事件注册引用句柄的簇连接至内部的右接线端并。
“注册事件”函数的输出端是一个事件注册引用句柄,该引用句柄是LabVIEW用于将已注册事件的信息传播给事件结构的严格数据类型。将游标停放在事件注册引用句柄上可在窗口中查看已注册的事件。注册事件函数配置完毕后,将其事件注册引用句柄输出接线端连接至事件结构左侧的动态事件接线端,从而配置事件结构对已注册的事件进行处理。应避免一个事件注册引用句柄的连线分支,因为这将使多个事件结构从队列中拉出事件,产生竞争状态,从而导致不可预见的动作。
要将事件结构配置为可动态处理的注册事件,可使用对话框。该对话框的事件源部分包含一个列出了每个已动态注册的事件源的事件源子标题。事件源的名称与连接至事件结构“注册事件”函数的引用名称相同,且顺序一致。从动态列表中选择所需的事件源。注意,使用“注册事件”函数注册的同一个事件在事件中是高亮显示的。选择事件后,可根据应用程序的需求,编辑该事件分支以处理事件数据。
要停止产生事件,可将事件结构右侧的动态事件接线端连接至的事件注册引用句柄输入端。“取消注册事件”函数位于含有该事件结构的While循环外。“取消注册事件”函数执行时,LabVIEW将把该事件注册引用句柄所指定的一切事件注册取消,销毁与该事件注册引用句柄相关的事件队列,同时放弃任何尚在队列中的事件。如果用户不取消注册事件,而包含事件结构的While循环执行结束后用户又执行了可产生事件的操作,那么LabVIEW将无限地查询事件。如事件已配置为将前面板锁定,则此时VI无响应。在这种情况下,LabVIEW将在VI空闲时销毁事件队列。
LabVIEW也会在顶层VI结束运行时自动取消所有事件注册。建议取消注册事件,尤其在长时间运行的应用程序中,以节省内存资源。动态事件举例
以下程序框图以字符串控件的事件为例,演示了动态事件注册的使用。
关于动态注册事件的范例见labview\examples\general\dynamicevents.llb。
动态修改注册
如果动态地注册事件,可在运行过程中修改注册信息以改变LabVIEW产生事件的对象。如要修改与连接的引用句柄相关的现有注册,而不是创建一个新注册,可连接“注册事件”函数左上角的事件注册引用句柄输入端。连接事件注册引用句柄输入接线端时,该函数会自动调整大小以显示在“注册事件”函数中指定的相同引用类型的相同事件。“注册事件”函数最初创建了事件注册引用句柄。事件注册句柄输入端连线完成后,不能手动改变该函数大小或重新配置该函数。
如将一个对象引用连接到“注册事件”函数的事件源输入接线端,且事件注册句柄输入端已连接,则该函数将替换先前通过原来“注册事件”函数的相应事件源输入接线端完成注册的所有引用。可将常量连接至事件源输入接线端来取消单个事件的注册。如果不连接事件源输入接线端,LabVIEW将不改变该事件的注册信息。如果希望取消与某一事件注册引用句柄相关的所有事件的注册,可使用“取消注册事件”函数。
下列程序框图显示了用户在运行时如何改变LabVIEW生成事件的对象。执行以下程序框图时,LabVIEW将注册数值引用并等待相关数值控件的某个事件的发生。当LabVIEW为该数值控件产生一个“值改变”事件,该“值改变”事件分支将执行“注册事件”函数以把“值改变”事件的注册数值控件从数值改为数值 2。如用户随后更改数值控件的数值,LabVIEW不会产生一个“值改变”事件。但是,数值 2控件改变将产生“值改变”事件。LabVIEW每产生一个数值 2控件的“值改变”事件,“注册事件”函数都将执行,但不产生任何影响,因为数值 2控件已注册了“值改变”事件。
注:  不可动态修改静态注册事件。
您的评价!&
&差&&|&&好&
&文档质量?&
&是否解答了您的问题?&
&|&&|&&|&&&&&&&|&&&labview事件结构的妙用 - LabVIEW论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
labview事件结构的妙用
资深工程师
11:16:33  
19701&查看
本帖最后由 zhihuizhou 于
16:10 编辑
事件结构由——事件选择器、超时接线端、事件数据节点、事件过滤节点和动态事
件接线端5个基本部分组成。
事件结构编程的 3条黄金原则:
在使用 LabVIEW 事件结构迚行编程的时候,我们应该注意:1.不要将事件结构放
置在 while 循环之外,而应该放置在 while 循环的内部;2.不要在事件结构的内部
使用循环处理事件,可选择采用生产者消费者结构,在生产者循环中放置事件结构,
在消费者循环中处理事件;3.记得为事件结构添加一个单独处理停止按钮的分支。
遵守以上三条原则将使我们的程序更加健壮,避免在使用事件结构的时候出现前面
板死锁等问题。 想知道更多请下载哦:
游客,如果您要查看本帖隐藏内容请
了解更多labview事件结构请进入:
本帖被以下淘专辑推荐:
& |主题: 60, 订阅: 78
13:26:37  
关注、、、、、、、、、、、
14:00:01  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
15:09:35  
小白求助,一直不清楚事件和条件两个结构的区别,看各种教材也没得到结果,大大给讲一下吧
资深工程师
15:22:43  
疯晕少侠 发表于
小白求助,一直不清楚事件和条件两个结构的区别,看各种教材也没得到结果,大大给讲一下吧 ...
条件结构是对数据流的执行顺序进行强制规定
事件结构是用以对用户操作作出响应和处理
15:23:40  
好东西赞赞赞
19:22:00  
看看,学习一下!
08:58:24  
haooooooooooooooooooooooooooooooooo
10:59:00  
10:10:12  
18:47:17  
19:54:32  
16:03:05  
15:03:32  
不断学习中
16:51:23  
00:50:06  
助理工程师
12:13:22  
20:47:32  
14:29:46  
04:57:41  
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
下载发烧友APP
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 labview事件结构范例 的文章

 

随机推荐