event提高LabVIEW事件结构编程.docx

上传人:b****6 文档编号:8900811 上传时间:2023-02-02 格式:DOCX 页数:10 大小:248.05KB
下载 相关 举报
event提高LabVIEW事件结构编程.docx_第1页
第1页 / 共10页
event提高LabVIEW事件结构编程.docx_第2页
第2页 / 共10页
event提高LabVIEW事件结构编程.docx_第3页
第3页 / 共10页
event提高LabVIEW事件结构编程.docx_第4页
第4页 / 共10页
event提高LabVIEW事件结构编程.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

event提高LabVIEW事件结构编程.docx

《event提高LabVIEW事件结构编程.docx》由会员分享,可在线阅读,更多相关《event提高LabVIEW事件结构编程.docx(10页珍藏版)》请在冰豆网上搜索。

event提高LabVIEW事件结构编程.docx

event提高LabVIEW事件结构编程

LabVIEW事件结构编程

事件驱动的编程允许用户通过前面板的操作,或是其他的异步事件来驱动LabVIEW程序的运行。

事件是一种异步的信号,告知PC有事情发生。

用户界面、外部I/O或是程序的一部分代码都有可能导致事件的发生。

使用事件结构可以实现仅当事件发生时,程序才需要响应,别的时候程序可以处理其他迚程或是其他的事件,事件结构相当于一种“中断”。

相对的,如果不使用事件结构,程序会以“轮询”的方式来检测事件的发生,但这样会大大消耗CPU的使用时间,不利于处理复杂、多线程的程序。

因此,事件结构允许将CPU的使用降低到最小,但又不牺牲与用户的交互性。

用户界面事件:

鼠标点击、键盘操作等等外部I/O事件:

硬件定时、硬件触发、或是硬件出错等等。

其他程序事件:

程序间的通讯等注:

LabVIEW支持用户界面事件和程序事件而不支持外部I/O事件。

1.事件结构

典型的事件结构如图1所示。

事件结构包括一个或多个子程序框图,或事件分支,注意每当结构执行时,仅有一个子程序框图或分支在执行。

事件结构的执行过程是,一直等待直至某一事件分支的事件发生,然后执行相应事件分支从而处理该事件。

右键单击结构边框,可添加新的分支并配置需处理的事件。

为事件结构边框左上角的“超时”接线端连接一个值,以指定事件结构等待某个事件发生的时间(以毫秒为单位)。

默认为–1,即永不超时。

图1事件结构

用户界面事件分为消息事件和过滤事件两种。

a.消息事件

消息事件指一个用户的行为已经发生,使用消息事件来反馈一个已经发生的事件,并且LabVIEW已经对它迚行了处理。

例如,“鼠标按下”就是一个消息事件,图2中的事件结构的分支程序实现了用户用鼠标点击停止按钮,按下后停止程序的功能。

这个事件是在用户释放鼠标以后LabVIEW迚行处理的。

图2消息事件

 

b.过滤事件

过滤事件在用户行为发生之后,LabVIEW处理该事件之前先告知用户,由用户来决定程序接下来如何处理事件,有可能处理的方式与默认的处理不同。

过滤事件有什么好处?

使用过滤事件以后,用户可以随时按需要修改程序对事件的处理,甚至可以完全放弃该事件,而对程序不产生影响。

例如:

“前面板关闭?

”就是一个过滤事件(过滤事件后面都有一个?

)。

图3中的事件结构实现放弃对“前面板关闭?

”这一事件的响应,从而将这一事件过滤。

 

图3过滤事件

2.创建静态事件结构

LabVIEW中可以创建各种各样的事件,按注册的方式,可分为静态注册事件和动态注册事件。

对前面板界面用户事件的响应是一种静态注册事件。

当VI运行时,LabVIEW自动注册这些事件,事件结构一直等待事件的发生。

需要注意的是,静态注册事件只与本VI相关联,它无法实现对其他VI的前面板用户界面事件迚行响应。

下面我们来实现一个VI,它可以对前面板的不同按键作出相应的反应,例如点击“前进”按钮,VI的前面板会显示“前进”;点击“后退”按钮,VI的前面板会显示“后退”,同时实现程序运行时,前面板一直保持打开的状态。

前面板上先放置4个布尔输入控件“前进”、“后退”、“左转”、“右转”,在程序框图中放置一个while循环,然后在循环中放置一个event结构到程序框图上。

Event(事件)结构有一个默认的超时分支,用户可以根据需要保留或删除该分支。

在event分支的边框点击右键,在弹出的快捷菜单中选择添加分支,弹出编辑事件对话框,为布尔控件注册相应的事件。

(详细实现步骤见练习)

 

图4注册事件

在编辑事件对话框中,左侧是事件源,用来选择发起事件的来源,例如上文所说的布尔控件“前进”;右侧是事件,用来选择事件的类型,如鼠标释放(mouseup)、键按下(keydown)等等,根据不同的需求选择事件的类型。

在事件框中,也可以区分消息事件(绿色箭头)和过滤事件(红色箭头+?

)。

点击确定,即添加了一个事件分支,如图5所示,可以在这个分支中添加代码来完成在这个事件分支中要处理的内容。

例如,图5中将字符串“前进”赋值给按键记录字符串String控件。

同样的,可以为其他的布尔控件“后退”、“左转”、“右转”添加事件分支。

对于控件“停止”,由于我们需要通过点击它来停止整个VI的运行,因此它的事件分支是这样编辑的,将一个真常量赋给while循环条件接线端。

图5消息事件分支

为实现程序运行时,前面板无法关闭,需要选择的是过滤事件。

在编辑事件对话框中选择<本VI>>>前面板关闭?

可以看到过滤事件的事件数据节点和消息事件的事件数据节点是不同的。

同时,过滤事件的事件结构框右侧还有过滤节点。

可以将一个“True”常量连接到放弃?

接线端,表示放弃该事件的处理,从而实现程序运行时,前面板一直保持打开的状态。

 

图6过滤事件分支

注:

事件结构和条件结构不同的是,事件结构分支的输出隧道不是必须要赋值的,对于没有赋值的输出隧道,LabVIEW会自动将相应数据类型的默认值赋给输出隧道。

用户只需对必要的输出隧道迚行赋值即可。

事件结构框的左侧的一系列事件数据节点,用户可以根据需要在事件处理代码中使用。

例如,“源”表示事件源,“类型”表示事件的类型,“时间”表示事件发生的时间,等等。

事件源不同,对应的事件数据节点也有所不同。

Tips:

可以通过对事件数据创建显示控件来显示以熟悉不同的事件数据。

注:

请参考LabVIEW帮助中“在LabVIEW中使用事件的说明与建议”来设置事件结构和注册事件。

 

上面例子具体描述和实现如下。

1.为控件“前进”,“后退”、“左转”、“右转”分别添加事件结构,实现鼠标单击控件释放后,“String”控件显示相应的按键记录。

2、实现按下键盘上“↑、←、↓、→”键,“String”控件显示相应的按键记录。

使用一个显示控件查看按下“↑、←、↓、→”键所分别对应的扫描码。

3、使用过滤事件,实现程序运行时,前面板一直保持打开的功能。

面板设计如下,有4个布尔变量,前进,后退,左转,右转,一个String变量用来显示按键结果,一个numeric显示键盘扫描码,Stop控制程序的停止。

1.放置一个Whileloop,里面放一个event,在timeout上按鼠标右键直接编辑。

该消息事件选择当鼠标放开时响应,将“前进”字符串常量送给String显示。

依次为“后退”,“左转”,“右转”建立相应的事件分支。

最后为循环结束添加一个分支。

2.添加一个新的分支,按下键盘上“↑、←、↓、→”键,“String”控件显示相应的按键记录。

在event边框按鼠标右键,选择“addeventcase”,出现下面界面,进行事件注册。

选择“ThisVI”中的“KeyDown”

 

Event左边会出现“ScanCode”这一项,即程序运行时,按下的键的扫描码,↑扫描码为72,↓为80,→为77、←75,采用case结构进行判断,当按下→键时,扫描码为77,将“右转”送给String显示。

设置一默认值,除了“↑、←、↓、→”键外其它均显示为空字符串。

为字符串常数(stringconstant)。

3.添加一个过滤事件,实现程序运行时,前面板一直保持打开的功能,用户无法关闭。

在event边框按鼠标右键,选择“addeventcase”,出现下面界面,进行事件注册。

该事件为一过滤事件,当按下面板关闭,并不马上执行,而是转到该分支,由程序决定如何执行。

在本例中,将“ture”送给Discard?

,表示放弃面板关闭的操作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1