技术中心
 
 

LabVIEW控制程序流程——LabVIEW事件结构

   日期:2015-09-21    
核心提示:虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入事件结构之前,LabVIEW是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU资源的占用,同时也避免了事件的遗漏。

1 事件结构及它的图形化表示法

事件被用来通知用户有异步活动发生。图形化语言的事件响应包括:用户界面事件、外部I/O事件和程序其它部分的事件。

对事件的处理程序也被称为:事件驱动程序。事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。所以对事件的响应结果也可以控制程序的流程。

事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。

虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入事件结构之前,LabVIEW是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU资源的占用,同时也避免了事件的遗漏。

事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。

 

1.png

图 1 图形化的事件结构

与Case结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case的多帧结构(选择器标签)。

当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。它具有定时延迟的基本功能(不包括While循环),参见下图。

 

2.png

图 2具有定时延迟的基本功能

当然也可以采用另一种表示方法,参见下图。

 

3.png

图 3利用事件结构内部节点获得中止时间

通过这个例子也好理解内部节点中“时间”的含义(是事件响应的停止时间)。

超时事件

超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。如果存在其它事件源时,超时事件完全可以被忽略或取消。看下面一个例子。

 

4.png

图 4仅有的两个事件之一——超时事件

 

5.png

图 5仅有的两个事件之一——“停止”鼠标按下

这个例子运行状况是这样的:程序运行后进入超时事件,等待5秒钟后,在字符串显示器中显示:“嗨。。。5秒钟内,用户没有操作!”(标志超时事件已经结束)。然后一直等待用户操作,当用户点击停止按键后,程序停下来,同时显示:“哈哈,终于响应了。”

为了响应多个事件的请求,所以要求在事件结构外面套加一个While循环。以便能够及时准确的响应每个事件。

5.6.2 事件结构的数据流运行机制

从数据流的运行机制来看,事件可以理解为多个无定序的数据源。事件的响应处理过程是根据事件发生的先后顺序,依次进行处理。而事件的处理过程仍然是依据数据流运行机制的。

所谓多个无定序的数据源是指:事件发生是随机的,它们之间没有固定的时间或先后顺序关系。

事件结构的运行机制是一个一个的处理事件,这样就要求在事件处理程序上要求:简单快速执行,避免事件处理过程中产生不必要的堆积。

下面通过一个例子来进一步理解事件结构中需要注意的一些问题。

例 5-14 事件处理的演示

在例子程序的前面版中,我们放置了四个控件。门——布尔控件表示一个门(鼠标点击相当于敲门);敲门次数——控件用来纪录事件的次数;停止——布尔控件用来停止演示程序的运行;其中还有一个门把手装饰用控件。

下面我们在具体看看它的程序框图。

 

6.png

图 6 例5-14的程序框图(仅包含两个事件源)

该例运行时前面板参见下图。

 

7.png

图 7 例5-14运行状态

该程序运行后,就一直等待事件的发生。此时,如果用鼠标点击门一次,则会弹出一个对话框,显示“对不起,您敲错了!”参见下图。

 

8.png

图 8 第一次敲门

点击对话框中的确定按键,则返回等待事件发生的状态。参见下图。

 

9.png

图 9 第一次敲门后

如果第二次敲门事件发生,将会再次弹出一个新对话框,参见下图。

 

10.png

图 10 第二次敲门

第二次敲门后,弹出一个新的对话框显示“错了,请不要再敲了!”。如果点击对话框中的确定,再次进入事件等待状态。

第三次敲门后,将弹出一个新的对话框显示“如果再敲,我就要报警了!”。参见下图。

 

11.png

图 11 第三次敲门

点击对话框中的确定,再次进入事件等待状态。如果是再敲门,就会弹出对话框显示:“这里是110,我们正前往你那里!”。参看下图。

 

12.png

图 12 第四次敲门

以后再敲门将不断重复上图所示的内容。这就是选择“case 2”作为默认值的结果。

用对话框作为事件的响应并不是一个好的选择,因为对话框需要操作者及时处理,如果没有及时处理,事件一直处于等待状态,这样其它事件源发出的响应就会产生堆积。所以在事件处理程序中应该避免使用对话框。

从另一方面也间接的告诉我们,事件处理程序应该尽可能的简洁、迅速,避免其它事件被堆积。

 

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢