首页 理论教育 LabVIEW事件结构的通知和顺序处理

LabVIEW事件结构的通知和顺序处理

时间:2023-06-18 理论教育 版权反馈
【摘要】:通知事件用于在事件发生且LabVIEW已经对事件进行处理后对事件作出响应。LabVIEW向每个事件结构发送该事件的顺序取决于这些事件的注册顺序。在LabVIEW能够通知下一个事件结构之前,每个事件结构必须执行完该事件的所有事件分支。只有当所有已配置的事件结构处理完事件,且未放弃任何事件时,LabVIEW才能完成对触发事件的用户操作的处理。

LabVIEW事件结构的通知和顺序处理

事件结构是一种多选择结构,能同时响应多个事件,传统的选择结构没有这个能力,只能一次接收并响应一个选择。

事件结构可包含多个分支,一个分支即一个独立的事件处理程序。一个分支配置可处理一个或多个事件。事件结构执行时,将等待一个之前指定的事件发生,待该事件发生后即可执行事件相应的条件分支。一个事件处理完毕后,事件结构的执行也宣告完成,事件结构并不通过循环来处理多个事件。与“等待通知”函数相同,事件结构也会在等待事件通知的过程中超时,若发生超时,将执行相应的超时分支。

事件结构由超时端子、事件数据节点和事件选择标签组成,如图3-21所示。超时端子用于设定事件结构在等待指定事件发生时的超时时间,单位为毫秒(ms)。当值为-1时,事件结构处于永远等待状态,直到指定事件发生为止;当值为大于0的整数时,事件结构会等待相应的时间。当事件在指定的时间范围内发生时,事件接收并响应该事件;若超过指定时间,事件没发生,则事件将停止执行并返回一个超时时间。通常情况下,应该为事件结构指定一个超时时间,否则事件结构一直处于等待状态。事件数据节点由若干个事件数据端子组成,增减数据端子可通过拖拉事件数据节点来进行,也可在事件数据节点上单击鼠标右键,从弹出的快捷菜单中选择“添加/删除元素”进行。事件选择标签用于标识当前显示的子框图所处理的事件源,其增减与层叠式顺序结构和选择结构中的增减类似。

与条件结构一样,事件结构也支持隧道。但在默认状态下,无须为每个分支中的事件结构输出隧道连线。所有未连线的隧道的数据类型将使用默认值。右键单击隧道,从弹出的快捷菜单中取消选择“未连线时使用默认”,可恢复默认的条件结构行为,即所有的条件结构隧道必须连线。

对于事件结构,无论编辑还是添加或复制等操作,都会使用到“编辑事件”对话框,“编辑事件”对话框的建立,可以通过在事件结构的边框上鼠标右键单击,从弹出的快捷菜单中选择“编辑本分支中所处理的事件”命令完成,如图3-22(a)所示。图3-22(b)为一个“编辑事件”对话框,每个事件分支都可以配置为多个事件,当这些事件中有一个发生时,对应的事件分支代码都会得到执行。事件说明符的每一行都是一个配置好的事件,每行分为左、右两部分,左边列出事件源,右边列出该事件源产生事件的名称。

图3-22 “编辑事件”对话框

(a)调出“编辑事件”对话框;(b)“编辑事件”对话框

事件结构能够响应的事件有两种类型:通知事件和过滤事件。在“编辑事件”对话框的“事件”列表中,通知事件左边为绿色箭头,过滤事件左侧为红色箭头。(www.xing528.com)

通知事件表明某个用户操作已经发生,如用户改变了控件的值。通知事件用于在事件发生且LabVIEW已经对事件进行处理后对事件作出响应。可配置一个或多个事件结构对一个对象上同一个通知事件作出响应,事件发生时,LabVIEW会将该事件的副本发送到每个并行处理该事件的事件结构上。

过滤事件将通知用户LabVIEW在处理事件之前已经由用户执行了某个操作,以便用户就程序如何与用户界面的交互作出响应进行自定义。使用过滤事件参与事件处理可能会覆盖事件的默认行为。在过滤事件的结构分支中,可在LabVIEW结束处理该事件之前验证或改变事件数据,或完全放弃该事件以防止数据的改变影响到VI。例如,将一个事件结构配置为放弃前面板关闭事件可防止用户关闭VI前面板。过滤事件的名称以问号结束,如“前面板关闭?”以便与通知事件区分。多数过滤事件都有相关的同名通知事件,但没有问号,该事件在过滤事件之后,如没有事件分支,放弃该事件时由LabVIEW产生相关的同名通知事件。

和通知事件一样,对于一个对象的同一个过滤事件,可配置任意数量与其响应的事件结构。但LabVIEW将按照自然顺序将过滤事件发送给为该事件所配置的每一个事件结构。LabVIEW向每个事件结构发送该事件的顺序取决于这些事件的注册顺序。在LabVIEW能够通知下一个事件结构之前,每个事件结构必须执行完该事件的所有事件分支。如果某个事件结构改变了事件数据,LabVIEW会将改变后的值传递到整个过程中的每个事件结构;如果某个事件结构放弃了事件,LabVIEW便不把该事件传递给其他事件结构。只有当所有已配置的事件结构处理完事件,且未放弃任何事件时,LabVIEW才能完成对触发事件的用户操作的处理。建议仅在希望参与处理用户操作时使用过滤事件,过滤事件可以是放弃事件或修改事件数据,如仅需知道用户执行的某一特定操作,应使用通知事件。

处理过滤事件的事件结构分支有一个事件过滤节点,可将新的数据值连接至这些连线端以改变事件数据。如果不对某一数据项连线,则该数据项将保持不变,可将真值连接至“放弃?”连线端以完全放弃某个事件。

事件结构中的单个分支不能同时处理通知事件和过滤事件。一个分支可处理多个通知事件,但仅当所有事件数据项完全相同时才可处理多个过滤事件。

图3-23展示了两种事件处理代码的实例,图3-23(a)为一个过滤事件“’数值’:键按下?”图3-23(b)为一个通知事件“’数值’:键按下”。

图3-23 事件处理代码的实例

(a)过滤事件;(b)通知事件

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈