labview事件结构浅析
使用LabVIEW图形化语言开发的应用程序界面是图形化用户操作界面,也称为:GUI(graphical user interface),它的作用是与操作者实现人机对话形式的互动操作。这种对界面操作的互动响应在LabVIEW 6.1发布之前,只能是通过“轮询(polling)”的方式来实现。轮询的方式的缺点是:需占用一定的CPU资源(在没有事件发生时)和灵活性不好。在LabVIEW6.1引入事件结构(Event Structure)后,采用事件结构来设计、实现的GUI操作则变得更加灵活、方便,并且不占用CPU的资源,这与先前采用轮询的方式来查询事件的方式相比要合理的多。下面结合应用项目中的设计实例来介绍GUI设计中的事件驱动。
有关事件结构的一些基本概念、原理及使用方法在LabVIEW Help及许多中文书中都作了详细的讲解,这里我就不作更多地介绍了。
事件结构通常包括以下部分:
1、Event cases——包含有若干个注册的事件源及同等数目的Event case层,在每个Event case层中包含对该事件响应的处理程序。
2、While循环 ——用来检测连续不断产生的事件
事件结构中的While循环,是用来确保检测到连续不断发生的事件。如果没有这个While循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。
菜单选项事件结构实例
NI USB-9219是一款4通道通用C系列模块,专为多功能测试而设计。USB-9219能够测量传感器中的多种信号,如压力计、RTD、热电偶、测压元件和其他需要供电的传感器。由于通道接受单独选择,4条通道可以分别进行不同类型的测量。测量范围随测量类型而异,包括±60 V最大电压范围和±25 mA最大电流范围。
第1步、创建一个项目:综合参数测量仪
按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。
此后,在“项目浏览器”就可以看到一个新建的项目:"未命名项目1"。单击项目浏览器:文件》保存,并将该项目命名为:“综合参数测量仪”后,存放到桌面上的《综合参数测量仪》文件夹中。
此时,项目创建完毕。
打开刚刚新建的“综合参数测量仪”项目,然后用鼠标右击该项目中的”我的电脑“选择:新建》VI,即创建了一个新的vi。
用鼠标点击新vi的:文件》保存( 命名为:综合参数测量仪.vi)。
主vi即宣告创建完毕。如例图所示。
第3步、设置 “综合参数测量仪.vi”的属性
打开刚刚创建的“ 综合参数测量仪.vi”,用鼠标点击:文件》VI属性,该vi的属性对话框弹出,如例图所示。
也就是设置主vi的属性。
在“类别”窗口选择属“窗口外观”,设定:“窗口标题”和“自定义”选项,见例图。
用鼠标点击上图中的“自定义”按键,进入“自定义窗口外观“对话框。按例所示的方式选择各单元参数设定后,连续点击”确定“按键后,退出”VI属性“设定对话框。
“综合参数测量仪.vi“的属性基本设定完毕,在该vi的程序框图上,先创建一个While循环,并放置“停止”按键来控制这个While循环。然后,点击前面版上的运行按钮,程序开始运行,如例图所示。
此时看到“ 综合参数测量仪”的前面版的上部保留了一个菜单栏,但内容不是我们所期望的。现在,按我们所要求的菜单栏来进行新的设计。
第4步、编辑设计菜单栏
在该vi的前面板选择:编辑》运行时菜单,此时系统弹出“菜单编辑器”对话框,选择“自定义”、“用户项”则可以进行自定义的菜单设计。
下面就来设计运行时菜单,首先在上图所示的“菜单项名称”一栏添入第一个菜单项目:“直流电压测量”,然后,点击“+”按键。
项目菜单创建完成,在预览栏目中显示出第一个菜单项“直流电压测量”。
下面添置该项目下的子菜单(如果没有子菜单,那么重复上述步骤进入下一个项目菜单的设计)。
点击“右移”键,进入子菜单选项,在“菜单项名称”一栏添入:
“60V电压测量”,点击“+”
“15V电压测量”,点击“+”
“4V电压测量”, 点击“+”
“1V电压测量”, 点击“+”
“125mV电压测量”,点击“+”。
然后点击“左移”按键,准备下一个项目菜单的设计。如例图所示。
在“菜单项名称”一栏添入:“直流电流测量”。然后点击“+”键以及“右移”键,继续 在“菜单项名称”一栏添入子菜单名:“25mA电流测量”。如图所示。
点击“+”键及“左移键”后,在“菜单项名称”一栏添入:“电阻测量”。然后, 点击“+”键及“左键”, 在“菜单项名称”一栏添入子菜单名:
“两线电阻测量”
“四线电阻测量”两个子菜单。
同样,设定主菜单为:RTD温度测量,子菜单为:
三线RTD温度测量
四线RTD温度测量
同样,设定主菜单为:热电偶温度测量,子菜单为:
K型热电偶温度测量
J型热电偶温度测量
S型热电偶温度测量
同样,设定主菜单为:应变测量,子菜单为:
1/4桥应变测量
半桥应变测量
全桥应变测量
至此,菜单设计完成,见例图。
关闭“菜单编辑器”试运行一下程序,状态见例图。
第5步、结合事件结构设计菜单选项的程序
首先,在“ 综合参数测量仪”的程序框图中的While循环里,添加一个”事件“结构。
从图中可以看出,目前该事件结构只有一个事件源:”超时“。
用鼠标右键点击事件结构的边框,在弹出的快捷菜单上,选择:“添加事件分支…”,
在编辑事件对话框中,事件源选择“控件、停止,鼠标按下事件”。
单击“确定”按键,这时就多了一个“停止”事件源。
此时,我们可以将“超时”事件删除。并该程序进行修改,首先将“停止”按键的图标移动到While循环外,然后在该事件结构中放入一个“真”的布尔常量,连接到While循环的停止端子上,如下图所示。
此时,在运行该程序后,用鼠标点击“停止”按钮,程序将会停止下来。看来程序已经响应了这个停止运行的“事件”发生。下面我们来设计有关”菜单事件“的程序单元。
用鼠标右键单击事件结构的边框,会弹出一个快捷菜单,选择:添加事件分支...后会弹出一个新的“事件编辑”对话框。在此对话框中:
事件源选择:本VI;
事件选择:菜单选择(用户),则创建了用户菜单的事件分支。
在用户菜单的事件分支放置一个case结构,并将所有的子菜单名字写入case选择器标签中。同时,将“分支选择器”与“项标识符”相连。
此后,只要在子菜单的相应分支中放置事件处理程序(动态调用相应的子vi)既可实现菜单的事件处理。下面给出调用“60V电压测量“的简单例子。
这里动态调用的子vi,与上一节中介绍的动态调用子vi相同。动态调用的过程也一致。就不多谈了。
调用“60V电压测量“子vi。该子vi的程序框图见例图(示意图,只有一个While循环和停止按键)。
所有这些项目和子项目vi,都应保存在项目的目录下。
结合应用项目的设计,运行时菜单事件设计方法已经基本示意完成了(包括子vi的动态调用),只是所有子菜单中的测量程序框图都没有给出,需要读者自行设计(如果有机会可能后边还会继续介绍)。
事件结构注意事项:事件结构最适合人机对话界面的设计,不适合在事件处理过程中运行复杂的程序。比如:我们通过事件结构来进行动态调用复杂的运行程序,此时主程序前面版被“关闭”,直到复杂应用程序运行完成后,返回到主程序才可以响应新的事件发生(事件响应和处理的“握手”关系,换句话说,程序处理时也同时屏蔽了其它菜单事件的响应)。这样可以避免事件的“记忆”和“堆积”。
了解更多labview事件结构请进入:http://bbs.elecfans.com/topic-labviewevent.html
学习一下
菜鳥,學習來的
回顾下关于菜单的设置
学习了,谢谢小编
非常感谢这么详细的讲解步骤
非常感谢这么详细的讲解步骤
不错,顶一个,继续
mark!.
受教了 不错。感谢小编。
非常感谢这么详细的讲解步骤
十分感谢小编,深受启发!
想请教下各位高手,倒数第二个图中,那个蓝色的 动态调用 图标具体是怎么做成的,怎么用呢,希望高手们能指点下,这一点对于做 软件界面很有帮助
受益匪浅 对于新手很实用
不错,顶一个
感谢小编
好辛苦的说
谢谢点拨,但是最后的注意还是有些不明白,请教一下和条件结构的深入区别有什么,望赐教
谢谢分享
谢谢
xiexie louzhu
学习了!
很车不错 学习了
万分感谢
小白学习了,谢谢
学习了,初学者
为什么当输入控件的值改变时,会进入事件结构,而显示控件值改变时事件结构不响应
小编的讲述很是详尽
好。
菜鸟,学习下。顶!
好东西。
谢谢。看了有帮助
谢谢分享
好好学习一下
顶一下。。
辛苦了,谢谢您的总结
谢谢小编分享!
Thanks!LZ辛苦了
ddddddddddddddddddddddddddddddddddddddd
小编说得很详细啊 我喜欢 小编辛苦了
谢谢小编分享!
还好还好还好还好好好好
正在学习labview
学习了,谢谢!
小编写的很清楚,我有个问题请教下,自定义菜单字体怎么改变呢?
来学习来了
看过之后认为相当于labview里的中断子程序,非常受教
非常详尽,谢谢了。
看不懂啊。请问如何在事件结构中添加新的事件源?为什么我右键事件结构后,没有“值改变”这个选项?
学习了。谢谢
找了好长时间终于找到了这个资料
!
多谢小编,非常好
要是有视频就更好了!
好文章 值得学习 谢谢分享
动态调用子VI什么意思啊?还有小编能不能把电压测量VI上传一下啊?才学这个,苦逼得很!
受用了。不过如何从头到尾按顺序看小编发的帖?因为你上一章介绍的动态调用vi,我不会,找不到函数。
看完后,对事件结构更了解了一点