labview大神为你解读Picture Control 物件(4)
发现关于Event Structure的介绍文章并不多,一些细部的功能比较没被介绍到,因此会在接下来的文章做Event Structure的介绍,主要会分成三个主题。
1. Event Structure基础
2. Dynamic Event的使用技巧
3. User Event的应用
LabVIEW 所撰写出来的程式是给人使用的,所以拥有强大的人机介面,那我们要如何取得使用者在程式运作时,使用滑鼠、键盘去对程式做出的各种动作,就是要透过Event Structure,Event Structure 的位置在Programming => Structure => Event Structure,可以点选后再Block Diagram 中展开如下图所示。
将Event Structure展开后上方可以看到Label,Labe l显示现在所在的事件是哪一个触发事件,在预设的选出Event Structure时候Label是在Timeout事件上。 先解释何谓Timeout,当你在一个空的VI上拉出一个新的Event Structure直接执行时,你发现程式卡住了,卡在Event Structure上面,这是因为Event Structure的特性是当程式流程执行到他的时候会暂定住,等待事件的发生,若是没有事件发生则会一直等待下去。但若是你在Event Structure的左上角Timeout Terminal上面接上一个Numeric ,给予一个Timeout的时间(单位是ms ),程式在等待事件发生的时候会开始计时,若是在这个设定的时间内都没有发生事件,就会触发Timeout这个Label内的事件,此时就会执行Timeout页面所放置的程式。下方是一个简单的Timeout范例。
接着我们开始设计键盘或滑鼠所触发的Event ,最简单的范例是在Front上摆置一个OK Button,我们设计当这个按钮被按下的时候,会跳出一个对话框让使用者按下确定(这表示你可以设计各种动作),步骤如下:
1.在Front Panel上放置一个OK Button,在Modern=>Boolean => OK Button。
2.在Block Diagram放一个Event Structure。
3.如下图左,在Event Structure上方Label按滑鼠右键,选择Add Event Case。
4.如下图右,Event Source选择OK Button,右方的Events选择Value Change。(因为按下OK Button后会将Boolean值改变,你也可以Events选择Mouse Down)
5. 如下图在Event Structure 的”OK Button”: Value Change 中放置Programming => Dialog&Interface => One Button Dialog,将其message 接上一个String Constant,自行输入内容。
照以上的步骤操作后,Event Structure就添加一个OK Button Value Change的Events,执行这个VI的时候,当按下OK Button时,就会执行内部的程式内容,而跳出一个Dialog视窗。
在还没有学会使用Event Structure之前,大多数的人也都有办法去写出类似的功能,而他们的程式码大致上会使用下图的方法去建构。这样的程式码主要观念是利用回圈去不断的读取OK Button的状态,当OK Button的值为True的时候才执行Case Structure内的程式。
若是有其他的手段可以达到一样的功能,那我们为什么要学习Event Structure的使用呢?主要的原因有两个:
1. Event Structure可以侦测按按钮之外其他的动作,例如键盘的Key Down,Numeric的数值改变等其他行为。
2.若是使用Case Structure来侦测按钮,当按钮的数量变多的时候,Block Diagram会放满下图的程式码,占满整个画面,造成程式难以阅读以及难以修改。
而使用Event Structure 可以收纳这些程式码,提高程式的阅读性和维护性。所以通常使用Event Structure 建构的程式会如下图所示,可以利用Event Structure 收纳大量的OK Button,每一页代表当那个按钮被按下时要触发的行为,在Event Structure 的外面加上一个While Loop ,Loop Condition 给予False (代表不离开回圈),这样每次执行完一个行动后会回到Event Structure 的等待动作,等待下一个事件的触发,当触发的按钮式Stop Button 时,如右下图,给予Loop Condition True 来结束回圈,以结束这个程式。
另外再Event Structure 的左方有一个Event Data Node,在不同的Events中,会因为选择不同的触发模式而给予不同的资料。举个例子来说,在Events中选择Mouse Down 时Event Data Node 会输出滑鼠点击的座标(Coords)以及是点击滑鼠的左键还是右键(Button);而选择Key Down 时Event Data Node 会输出键盘的按键的代号(Char)。利用这些讯息就可以写出一些富灵活度的程式。
在介绍完Event Structure 的基本使用后,最后还要介绍一个特别的功能,在选择Events 的时候,某些Events 的动作会有重复的选项但是有两个颜色可以选择。举个例子来说,在Event Source 选择,可以在右边的Events上看到两种颜色。
绿色的Event 叫做Notify Event ,红色的叫做Filter Event 。简单来说,当你去触发Events 时,有一些触发动作是可以被取消的,例如说当你按下Word 右上角的叉叉时,你已经点选了关闭Word 的按钮,但是通常会跳出一个讯息问你,”档案尚未储存,是否要离开程式”。也就是说关闭的这个动作是可以被中断的,这个叫做Filter Event ,因此当你选择Filter Event 时,右边会出现一个Data Node ,当你给予Discard一个True ,你就可以去中断这个触发本身的行为。
瞅瞅
小编很给力啊
顶一个。学习了。。
讲解的很不错,学习了。