微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > Labview > labview控制程序流程——labview事件结构

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

时间:10-02 整理:3721RD 点击:

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

    事件驱动机制在图形化操作系统中被广泛使用,因为图形化操作系统需要响应鼠标或键盘等事件。早期的LabVIEW中并没有引入事件驱动机制,事件结构出现在LabVIEW6.1。
    事件结构赋予LabVIEW开发者在设计GUI时具有了更大的灵活性和提高代码的效率及可靠性。在事件结构出现前,LabVIEW GUI 的设计都是基于队列的轮询方式来完成的。轮询方式的缺点在于使用不够灵活和占用较多的CPU资源。



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

    事件被用来通知用户有异步活动发生。图形化语言的事件响应包括:用户界面事件、外部I/O事件和程序其它部分的事件。
    对事件的处理程序也被称为:事件驱动程序。事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。所以对事件的响应结果也可以控制程序的流程。
    事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。
    虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入事件结构之前,LabVIEW是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU资源的占用,同时也避免了事件的遗漏。
    事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。



图 1 图形化的事件结构


    与Case结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case的多帧结构(选择器标签)。
    当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。它具有定时延迟的基本功能(不包括While循环),参见下图。



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


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



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


通过这个例子也好理解内部节点中“时间”的含义(是事件响应的停止时间)。
超时事件
    超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。如果存在其它事件源时,超时事件完全可以被忽略或取消。看下面一个例子。



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



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


    这个例子运行状况是这样的:程序运行后进入超时事件,等待5秒钟后,在字符串显示器中显示:“嗨。5秒钟内,用户没有操作!”(标志超时事件已经结束)。然后一直等待用户操作,当用户点击停止按键后,程序停下来,同时显示:“哈哈,终于响应了。”
    为了响应多个事件的请求,所以要求在事件结构外面套加一个While循环。以便能够及时准确的响应每个事件。



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

    从数据流的运行机制来看,事件可以理解为多个无定序的数据源。事件的响应处理过程是根据事件发生的先后顺序,依次进行处理。而事件的处理过程仍然是依据数据流运行机制的。
    所谓多个无定序的数据源是指:事件发生是随机的,它们之间没有固定的时间或先后顺序关系。
    事件结构的运行机制是一个一个的处理事件,这样就要求在事件处理程序上要求:简单快速执行,避免事件处理过程中产生不必要的堆积。
    下面通过一个例子来进一步理解事件结构中需要注意的一些问题。
例 5-14 事件处理的演示
    在例子程序的前面版中,我们放置了四个控件。门——布尔控件表示一个门(鼠标点击相当于敲门);敲门次数——控件用来纪录事件的次数;停止——布尔控件用来停止演示程序的运行;其中还有一个门把手装饰用控件。
    下面我们在具体看看它的程序框图。



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


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



图 7 例5-14运行状态


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



图 8 第一次敲门


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



图 9 第一次敲门后


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



图 10 第二次敲门


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



图 11 第三次敲门


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



图 12 第四次敲门


    以后再敲门将不断重复上图所示的内容。这就是选择“case 2”作为默认值的结果。
    用对话框作为事件的响应并不是一个好的选择,因为对话框需要操作者及时处理,如果没有及时处理,事件一直处于等待状态,这样其它事件源发出的响应就会产生堆积。所以在事件处理程序中应该避免使用对话框。
    从另一方面也间接的告诉我们,事件处理程序应该尽可能的简洁、迅速,避免其它事件被堆积。



了解更多labview事件结构请进入:http://bbs.elecfans.com/topic-labviewevent.html

学习了

学习中......

顶,,,,好帖子!

学习了

xixi,这个要研究下,不太懂

有没有怎么使用它呀,我现在改不了里面的名字怎么

很棒

学习

值得学习,谢谢

学习了

学习了!

支持一下。

学习学习

好。

一直没有整明白,得好好看看

学习中


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

    事件驱动机制在图形化操作系统中被广泛使用,因为图形化操作系统需要响应鼠标或键盘等事件。早期的LabVIEW中并没有引入事件驱动机制,事件结构出现在LabVIEW6.1。
    事件结构赋予LabVIEW开发者在设计GUI时具有了更大的灵活性和提高代码的效率及可靠性。在事件结构出现前,LabVIEW GUI 的设计都是基于队列的轮询方式来完成的。轮询方式的缺点在于使用不够灵活和占用较多的CPU资源。



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

    事件被用来通知用户有异步活动发生。图形化语言的事件响应包括:用户界面事件、外部I/O事件和程序其它部分的事件。
    对事件的处理程序也被称为:事件驱动程序。事件驱动程序可以分为若干个分支,每个分支处理不同的事件响应。所以对事件的响应结果也可以控制程序的流程。
    事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。
    虚拟仪器借助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入事件结构之前,LabVIEW是借助于轮询的方式来查询用户操作,由于轮询的方式会占用一定的CPU资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU资源的占用,同时也避免了事件的遗漏。
    事件结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序框图中,图形化表示的事件结构,参见下图。



图 1 图形化的事件结构


    与Case结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置事件处理的事件驱动程序代码。如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case的多帧结构(选择器标签)。
    当在程序框图上拖放一个事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。它具有定时延迟的基本功能(不包括While循环),参见下图。



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


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



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


通过这个例子也好理解内部节点中“时间”的含义(是事件响应的停止时间)。
超时事件
    超时事件是一种特殊的事件,当然也可以看成是默认的事件分支。如果存在其它事件源时,超时事件完全可以被忽略或取消。看下面一个例子。



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



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


    这个例子运行状况是这样的:程序运行后进入超时事件,等待5秒钟后,在字符串显示器中显示:“嗨。5秒钟内,用户没有操作!”(标志超时事件已经结束)。然后一直等待用户操作,当用户点击停止按键后,程序停下来,同时显示:“哈哈,终于响应了。”
    为了响应多个事件的请求,所以要求在事件结构外面套加一个While循环。以便能够及时准确的响应每个事件。



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

    从数据流的运行机制来看,事件可以理解为多个无定序的数据源。事件的响应处理过程是根据事件发生的先后顺序,依次进行处理。而事件的处理过程仍然是依据数据流运行机制的。
    所谓多个无定序的数据源是指:事件发生是随机的,它们之间没有固定的时间或先后顺序关系。
    事件结构的运行机制是一个一个的处理事件,这样就要求在事件处理程序上要求:简单快速执行,避免事件处理过程中产生不必要的堆积。
    下面通过一个例子来进一步理解事件结构中需要注意的一些问题。
例 5-14 事件处理的演示
    在例子程序的前面版中,我们放置了四个控件。门——布尔控件表示一个门(鼠标点击相当于敲门);敲门次数——控件用来纪录事件的次数;停止——布尔控件用来停止演示程序的运行;其中还有一个门把手装饰用控件。
    下面我们在具体看看它的程序框图。



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


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



图 7 例5-14运行状态


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



图 8 第一次敲门


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



图 9 第一次敲门后


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



图 10 第二次敲门


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



图 11 第三次敲门


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



图 12 第四次敲门


    以后再敲门将不断重复上图所示的内容。这就是选择“case 2”作为默认值的结果。
    用对话框作为事件的响应并不是一个好的选择,因为对话框需要操作者及时处理,如果没有及时处理,事件一直处于等待状态,这样其它事件源发出的响应就会产生堆积。所以在事件处理程序中应该避免使用对话框。
    从另一方面也间接的告诉我们,事件处理程序应该尽可能的简洁、迅速,避免其它事件被堆积。



了解更多labview事件结构请进入:http://bbs.elecfans.com/topic-labviewevent.html

学习了

学习中......

顶,,,,好帖子!

学习了

xixi,这个要研究下,不太懂

有没有怎么使用它呀,我现在改不了里面的名字怎么

很棒

学习

值得学习,谢谢

学习了

学习了!

支持一下。

学习学习

好。

一直没有整明白,得好好看看

学习中

延时程序中的钟表是哪一种?是时间计数器吗?还有第二个程序中的停止按钮不是应该放到外面吗?

学习了

好东西,学习了

我也是需求知識~~~所以囉~~~加油!

好厉害,学习了、

O看                                                   

学习了。

再看看                    

不错的帖子,学习了

谢谢,好好学习一下。

6666666666666666666

好系统啊,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top