




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.3 LabVIEW设计模式用户接口事件处理程序(LabVIEW Design Patterns - User Interface Event Handler)版本 5 创建于: 2011-1-24 下午5:42 作者 jwdz - 最后修改: 2011-2-3 下午8:29 作者 jwdz 在第 4.3.2 节,简单的介绍了事件驱动设计模式的特点。下面针对LabVIEW中所提供的设计模式之一用户接口事件处理程序(user interface event handler)进行讨论。5.3.1 用户接口事件处理程序(user interface event handler) 顾名思义,用户接口事件处理程序就是用来处理应用程序中的GUI事件。也就是说,现在的GUI用户响应是通过用户接口事件处理机制来实现的。 过去,在事件处理机制没有引入之前(LabVIEW 6.1发布之前),处理这类响应通常采用的是轮询技术(包括队列)。关于轮询与事件结构之间的优缺点前面已经谈到过,这里就不在进行相关的讨论了。 用户接口事件处理程序的设计模式比较简单,示意性的。程序框图和前面版图参见下面。 图 5.3.1-1 设计模式用户接口事件处理程序框图 图 5.3.1-2 设计模式用户接口事件处理程序前面版图 通常的用户接口事件处理程序设计,有一定LabVIEW编程基础的用户基本上都能够完成这些简单的设计任务。下面再给出几个实际应用中事件处理的例子。例:5.3.1-1 鼠标双击事件 在前面版设计中,有时候我们希望通过鼠标双击某控件来显示该控件的Context Hlep中的内容,利用事件中的鼠标双击事件就可以达到这个目的。 首先,我们用一个Numeric控件(Voltage)代替图 5.3.1-2中的Command 1控件,参见下图。 图 5.3.1-3 鼠标双击事件的前面版 然后,设计事件驱动程序。具体的设计步骤就不谈了,相信大家都会。下面给出这几个事件分支处理的程序框图。0“stop” Mouse Down 事件处理程序代码 图 5.3.1-4 0“stop” Mouse Down 事件处理程序代码 代码注释:鼠标单击“stop”控件,本程序停止运行。1“Voltage” Mouse Down 事件处理程序代码 图 5.3.1-5 1“Voltage” Mouse Down 事件处理程序代码 代码注释:1、创建鼠标双击事件,用鼠标右击“Event Date Node”选择Select itemModsDouble Click。2、鼠标单击 “Voltage” 控件,关闭Context Hlep窗口;鼠标双击 “Voltage” 控件,打开Context Hlep窗口。2“Pane” Mouse Down 事件处理程序代码 图 5.3.1-6 2“Pane” Mouse Down 事件处理程序代码 代码注释:鼠标单击前面版的任意位置, 关闭Context Hlep窗口。例:5.3.1-2 While循环中长时间定时的迅速退出 前面曾讨论过,在While循环中存在长时间定时过程中,如何快速退出While循环已经给出了多个方法,这里给出一个用事件结构来迅速退出的方法。 假如有一个定时1分钟的While循环,参见下图。 图 5.3.1-7 含定时1分钟的While循环 它的问题想必大家都是清楚的,按动Stop按键它不会马上停下来(最长需要两个定时周期)。即便是按下图设计也不会马上停下来(最长需要一个定时周期)。 图 5.3.1-8 利用一般的事件处理长定时的While循环 实际上,可以巧妙的利用事件结构本身来处理这种情况,并且可以立刻退出长定时的While循环。参见下图。注:0Timeout 1“Stop” Mouse Down 图 5.3.1-9 立刻退出长定时的While循环5.3.2 GUI接口事件处理程序(按键操作) 一般的应用项目架构如下图所示(个人的喜好不同会有些差别)。 图 5.3.2-1 通用应用程序基本架构下面先注解这几个vi:Top VI.vi每个应用程序都会有一个顶级vi,程序开始运行时首先运行它。它相当于C语言中的“Main”函数。在这个顶级vi中程序中可以进行初始化操作,包括:用 户信息输入、全局变量初始化等等。Call_Subvi.vi动态调用App.vi,打开、运行App.vi,然后关闭Top VI.vi(Top VI.vi退出,显示App.vi的前面版)。实际上是程序的控制权转交,所以在架构图中用单箭头表示。App.vi控制程序运行的新领导者。这里采用事件结构处理来自Test_1、Test_2、Test_3、Test_4以及退出测试等按键的响 应。Call_Subvi_Do.vi动态调用 Test_1.vi( 或Test_2.vi、 Test_3.vi、 Test_4.vi)。其中根据按键每次只调用其中的一个,并在在该子vi运行结束后返回App.vi,进一步等待其它按键按下。 所以在架构图中用双箭头表示。如果退出测试按下,整个应用程序退出。Test_1.vi( 或Test_2.vi、 Test_3.vi、 Test_4.vi)不同的测试程序,每个测试程序中可能包含状态机、生产者消费者等结构。 按照这样的思路,创建一个项目,命名为:GUI_Event_Key。在Mac版的labview2010下,项目的结构参见下图。 图 5.3.2-2 GUI_Event_Key项目结构 程序的具体设计很简单这里就不谈了,后面我们会给出全部的程序代码供下载。 运行Top VI如下图所示: 图 5.3.2-3 Top VI的运行窗口 当进度条执行满,意味着引导程序初始化完成,程序自动关闭Top VI的运行窗口(退出内存),并自动导引出App应用程序的界面,参见下图。 图 5.3.2-4 App应用程序运行界面 在这个界面中可以选择4个不同的测试项目(通过事件结构进行动态调用)以及退出应用程序。每个测试程序(如:Test_1)运行完成后,都将返回图 5.3.2-4 App所示的应用程序运行界面。最终在这里退出应用程序。 这里在给出动态调用使用的两个子vi的程序框图。请注意它们之间程序代码的不同之处。 图 5.3.2-5 Call_Subvi.vi程序框图 图 5.3.2-6 Call_Subvi_Do.vi程序框图 其它几个VI的程序框图。 图 5.3.2-7 Top VI.vi程序框图 图中的While循环(仅运行一次)没有任何实际意义,仅仅为了保证图形化代码分布、排列清晰。 图 5.3.2-8 App.vi程序框图(事件处理) 这种通过按键开关切换选择不同测试程序的方法,对于只有少量测试分支的应用程序设计是简单而有效的。当测试项目类别多于一个,测试分支较多的的情况就显得不适用了。解决 这类问题的方法就是选择菜单形式的事件处理方式。下载:LabVIEW8.6(GUI_Event_Key).zip5.3.3 GUI接口事件处理程序(菜单操作) GUI接口事件处理程序(菜单操作)的应用程序架构与图 5.3.2-1 通用应用程序基本架构基本相同,只是将其中的App.vi进行了一些改动,其它的子vi保持不变。所以,本节中我们仅讨论App.vi的程序设计问题。 由于我Mac电脑上的LabVIEW好像有Bug存在,无法设计运行菜单,所以下面的程序设计是在Windows版LabVIEW2010上完成。 与上节相同,首先创建一个新的项目,名称为:GUI_Event_Menu。然后,分别将原来 GUI_Event_Key项目中的所有vi和控件都通过下图所示的方式另存到桌面后(这样可以保证这些文件与原来的项目脱离链接关系)。 图 5.3.3-1 所有vi和控件另存在桌面上 进一步,重新整理这些文件并将它们拖放到新建的GUI_Event_Menu项目中。这样新创建完成的GUI_Event_Menu项目结构如下图所示。 图 5.3.3-2 GUI_Event_Menu项目结构(后面会介绍运行菜单App.rtm)下面我们就来开始设计菜单式GUI事件处理程序。 首先,打开GUI_Event_Menu.lvproj项目中的App.vi。修改该vi的属性,选择前面版的菜单栏可视。勾选选项。参见下图。 图 5.3.3-3 修改App.vi的属性勾选 现在开始设计运行菜单,打开GUI_Event_Menu.lvproj项目中的App.vi。首先清除掉原有的按键开关Test_1至Test_4,然后选择文件栏中 的“编辑”“运行时菜单”,参见下图。 图 5.3.3-4 编辑运行时菜单 在上图中用鼠标点击“运行时菜单”,开发系统会弹出一个“菜单编辑器”见下图。 图 5.3.3-5 菜单编辑器 如何操作设计菜单,这里就不谈了。按上图设计好菜单,关闭菜单编辑器,将App.rtm文件保存在App文件夹下,菜单编辑完成。运行App.vi,可以看到下图所示的 界面。可见原来的按键切换方式已经用菜单的方式来代替了。 图 5.3.3-6 菜单方式的测试项目选择 这种菜单方式的测试项目选择方法也是基于事件驱动的,现在按下图修改事件结构中的程序代码。 图 5.3.3-7 菜单事件驱动的程序代码 前面我们谈到过,程序代码的变化不大,子vi基本不用重新编写。需要修改的仅仅是App.vi,但代码的改动量不大。参见上图。 试运行一下程序,感觉如何?如果测试项目分类较多选择这种方式还是相对好些。 回顾本章中前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家教班教师管理制度
- 应急局保密管理制度
- 录播室设备管理制度
- 彼得德鲁克管理制度
- 德品佳水饺管理制度
- 心脏病临床管理制度
- 快递寄递点管理制度
- 急诊科物价管理制度
- 总授信额度管理制度
- 情报研判室管理制度
- 医院负面清单管理制度
- 11.3 一元一次不等式组 课件 2024-2025学年人教版初中数学七年级下册
- DZ/T 0220-2006泥石流灾害防治工程勘查规范
- 2025四川泸州交通物流集团有限公司及下属公司招聘12人笔试参考题库附带答案详解析
- 2025英语ab级考试试题及答案
- 2025届江苏省徐州市名校七下数学期末达标检测试题含解析
- 广东省广州市越秀区2020-2021学年七年级下学期期末英语试题(含答案)
- GB/T 45577-2025数据安全技术数据安全风险评估方法
- 2025年人教版七年级下册生物期末检测试卷及答案
- 2025年中国直接结合镁铬砖数据监测研究报告
- 少年军校协议合同
评论
0/150
提交评论