0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LabVIEW中的动态事件

华穗科技 来源:华穗科技 2023-05-04 11:53 次阅读

众所周知:LabVIEW中的事件结构可以响应用户操作,并且它会根据发生的事件来决定执行不同事件分支。当发生某个事件时,事件结构会自动捕获,并自动执行对应代码。

使用事件结构克服了以前轮询方式结构的缺点,可以让我们的代码更加高效,极大提升了界面处理的运行效率,同时也降低了CPU占用,提高了用户使用体验。但有时候事件结构中已有的事件种类并不能完全满足我们的需求,这时候应该怎么办呢?其实动态事件就是为此而生,开发人员可以通过自定义注册和使用动态事件,满足各种特殊情况下的事件响应需求。

接下来请大家跟随小编一起学习LabVIEW事件结构以及动态事件的使用!

本文分享:

LabVIEW动态事件

一、 事件结构介绍

事件结构和条件结构比较类似,它们都是通过满足某个条件来选择执行其对应分支代码的一种结构;区别在于条件结构是根据条件接线端的选择来决定执行对应的分支,而事件结构则是根据发生的事件来决定执行对应的分支。

事件结构可以自动捕获所发生的事件,并根据事件选择执行不同的事件分支。事件结构正上方内侧的事件标签可以显示当前分支所对应的事件,除此之外,事件结构还可以捕获有关该事件的一些相关数据,比如事件发生的时间、事件源、类型等。

cfb8803e-e700-11ed-ab56-dac502259ad0.png

二、 事件分类

事件可以根据事件产生的源来区分,LabVIEW中的事件可以分为六大类,它们分别是:<应用程序>、<本VI>、<窗格>、<分隔栏>、<控件>以及<动态>。这六类事件可以在“编辑事件”对话框的“事件源”这一栏中看到,而每一个事件源中对应的具体事件可以在“事件”栏中看到,如下图所示:

cfcaaf16-e700-11ed-ab56-dac502259ad0.png

<应用程序>

这类事件主要反映整个应用程序状态的变化,例如程序是否关闭,书签信息是否有改动,是否超时等。事件结构中默认的超时分支就是该类事件。

cfe73e6a-e700-11ed-ab56-dac502259ad0.png

<本VI>

这类事件主要反映当前VI状态的改变,例如前面板大小以及状态、鼠标、键盘对本VI的操作状态、是否选择了本VI菜单项中的某一个等。

d00a48e2-e700-11ed-ab56-dac502259ad0.png

<窗格>

这类事件包括与前面板中某一窗格有关的事件,比如鼠标进入/离开某一个窗格。一般情况下一个VI的前面板都是默认只有一个窗格,但是如果前面板上使用了“分隔栏”那就可以将一个VI的前面板分隔为多个窗格。每个窗格都可以理解为新的且互相独立的前面板,可以用来放置不同类型的控件。

d02bc06c-e700-11ed-ab56-dac502259ad0.png

<分隔栏>

这类事件主要包括与分隔栏有关的事件,比如鼠标在分隔栏上点击/释放等。分隔栏可以用来划分VI前面板的不同功能区域,让我们的界面设计和布局更加美观且条理分明。

d04d6b04-e700-11ed-ab56-dac502259ad0.png

<动态>

这类事件用于处理在程序中临时注册的事件或者用户自定义的事件,在未注册动态事件之前,该事件源为灰色不可选状态,下面本文将详细介绍动态事件。

d06964d0-e700-11ed-ab56-dac502259ad0.png

二、 动态事件

概述:

动态事件可以分为两种,一种是由LabVIEW本身可以产生的动态事件,比如前面介绍的除了动态事件以外的其他五种分类的事件(也就是说这五种事件可以被注册成为动态事件),还有一种是由用户自己定义的动态事件。

动态事件相关的函数在程序框图面板>>编程>>对话框与用户界面>>事件中。接下来我们先了解一下事件子程序框图中的这些节点。

d081f9c8-e700-11ed-ab56-dac502259ad0.png

所有动态事件在使用之前都需要先注册事件,它的含义其实是将动态事件注册到事件结构中,即声明该动态事件将在这个事件结构中响应。两种动态事件都可以使用“注册事件”节点来注册,注意在程序结束后需要使用“取消注册事件”来关闭注册事件引用句柄。

在使用用户自定义的动态事件时需要先使用“创建用户事件”创建该动态事件,然后再使用“注册事件”将该动态事件注册到一个事件结构中,在需要触发事件的地方使用“产生用户事件”来让事件结构响应该事件,在程序不需要再次响应用户事件时使用“销毁用户事件”来销毁用户事件引用句柄,释放用户事件引用。所有注册为该用户事件的事件结构不再接收该事件。

LabVIEW自产生动态事件:

事件分类中提到的除了“动态”事件之外的那五类静态事件都可以被注册为LabVIEW自产生的动态事件,区别就是静态事件只能是本VI中对象产生的,而动态事件却可以在一个VI中使用其他VI中的对象产生的事件。

设想一个场景:在一个大型项目中,往往会使用大量的子VI,一般情况下我们会有一个VI专门用来响应事件操作,而这个VI经常必须要处理其他VI的控件产生的事件,但是这个控件很明显并不在这个VI中,所以在这个VI的事件结构编辑事件的对话框中是没办法找到这个控件的,LabVIEW中为了应对这种状况专门设计了动态事件。

在注册动态事件时,需要先为产生这个事件的对象(控件、窗格、分隔栏等)创建一个引用,然后将该引用连线至“注册事件”的事件源输入接线端,随后将“注册事件”生成的“注册事件引用句柄”连线至事件结构的“动态事件接线端”完成事件的注册,如下图所示:

d09904f6-e700-11ed-ab56-dac502259ad0.png

d0b48852-e700-11ed-ab56-dac502259ad0.png

上图中的程序框图是子VI的程序框图,一共注册了两个动态事件,一个是主VI窗格的鼠标移动事件,另一个是主VI中“停止”按钮的值改变事件。 这两个事件注册完成后可以在这个事件结构的编辑事件对话框<动态>一栏找到并编辑使用。 上图中前面板为主VI的前面板,功能是在“鼠标坐标”中实时跟随并刷新鼠标在前面板中的位置坐标,按下停止按钮后响应并停止程序运行(示例代码会在后面给出)。

spacer.gif?t=B8DJ5M3用户事件:

假设需要在程序中,在满足其它某种条件时也产生一个事件,而这个条件不是LabVIEW自产生的(如用户按了某个按钮、改变某个控件值等),这时就可以考虑用户自定义事件了。

用户自定义事件灵活性较高,可以让用户自己设计什么时候发生并执行什么事件代码,使用用户事件时需要先定义一个用户事件数据类型,就像建立消息队列时需要定义队列元素的数据类型一样,用户事件数据类型可以是LabVIEW支持的任意数据类型。

和LabVIEW自产生动态事件相同的是创建用户事件之后同样需要在一个事件结构中注册该事件,不同的是事件什么时候发生、在哪个VI中发生我们都是可以自定义的,只需要拿到创建用户事件后的输出句柄使用“产生用户事件”产生一次该事件。

下面这个示例是模拟一个温度采集VI和显示界面VI之间的交互,温度采集VI采集到温度信息后使用用户事件的方式传递给显示界面VI去做对应的处理,显示当前报警信息并且当温度太高时LED灯报警(示例代码会在后面给出)。

d11a5934-e700-11ed-ab56-dac502259ad0.png

示例中注册了两个用户事件,一个是“温度报警”事件,一个是“停止程序”事件。 注册用户事件时有个小技巧就是可以将你要注册的所有用户事件输出句柄捆绑到一个簇中,然后使用“注册事件”节点直接注册这个簇,这样可以方便同时注册多个事件。

spacer.gif?t=B8DJ5M3以上就是关于LabVIEW动态事件的知识分享啦。 本文的演示代码及安装包已存入百度网盘,有需要的小伙伴可以自行取用,演示代码请使用LabVIEW 2020及以后版本打开。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10437

    浏览量

    206524
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    316968
  • 面板
    +关注

    关注

    13

    文章

    1600

    浏览量

    53423
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736
  • 应用程序
    +关注

    关注

    37

    文章

    3133

    浏览量

    56368

原文标题:知识分享 | LabVIEW中的动态事件

文章出处:【微信号:华穗科技,微信公众号:华穗科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    动态数据怎样转化成数组进行比较

    labview 动态数据 怎样 转化成数组进行 比较
    发表于 07-13 22:37

    labview动态创建控件的问题

    如题,labview 有没有动态创建的控件的办法,比如说我在 程序设计之初不知道我运行时候具体有几个LED灯泡,我想根据实际运行情况进行动态创建,类似于C++ 的new
    发表于 03-17 21:03

    【毕业设计求助】大神们求教!

    我的毕业设计的题目是用labview做一个系统界面实现虚拟的3D打印,现在界面做好了。我在想如何实现虚拟打印的过程,我想问有什么插件来实现在labview动态画图吗?如下图在打印显示
    发表于 05-06 12:26

    请问labview动态调用子vi的输入输出怎么和主程序交互

    labview动态调用子vi,子vi的输入输出怎么和主程序交互
    发表于 01-16 20:17

    LabVIEWDLL文件的创建过程和编程结果

    ,他的许多新功能也是通过DLL来实现的。  LabVIEW动态链接库的调用是通过CLF(Call Library Function) 节点实现的,如图1所示。CLF可被用来调用32位的Windows
    发表于 05-15 07:24

    labview动态创建右键自定义快捷菜单

    attach://885619.docx放在附件里面了,大家有需要的可以下载来看。
    发表于 03-19 17:06

    动态链接库在LabVIEW中的高级应用

    LabVIEW 中的提供了调用共享库函数的接口,但是一些现成的函数库却因为接口参数类型不同而不能在LabVIEW 中使用。利用重新编写动态链接库的方法可以建立旧函数库与LabVIEW
    发表于 08-04 10:09 56次下载

    基于LabVIEW的纱线动态张力检测系统

    摘要:纱线动态张力的检测在纺织生产中有着很重要的意义。本文给出了一种基于LabVIEW的纱线动态张力检测系统。它充分利用虚拟仪器技术的优势,方便的实现了信号的采集和数据
    发表于 05-30 16:57 12次下载

    基于LabVIEW的纱线动态张力检测系统

    研制一套基于虚拟仪器技术的纱线动态张力检测系统,在性能得到充分保障的前提下,经济性显著提高,系统灵活性明显增强。 利用LabVIEW 进行虚拟仪器系统的另一个好处在于其强
    发表于 07-01 18:26 30次下载

    Labview动态窗口样式之一

    Labview动态窗口样式之一,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:56 0次下载

    Labview动态窗口样式之二

    Labview动态窗口样式之二,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:56 0次下载

    Labview动态窗口样式之三

    Labview动态窗口样式之三,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:56 0次下载

    基于LabView平台的齿轮箱性能动态测试与诊断_李贵明

    基于LabView平台的齿轮箱性能动态测试与诊断_李贵明
    发表于 03-18 09:41 3次下载

    labview的优势与缺点_LabVIEW类的动态类型处理

    本文主要介绍了labview的优势与缺点及LabVIEW类的动态类型处理。
    发表于 05-07 09:10 4.1w次阅读
    <b class='flag-5'>labview</b>的优势与缺点_<b class='flag-5'>LabVIEW</b>类的<b class='flag-5'>动态</b>类型处理

    C和C++编写环境下LabVIEW如何调用动态库?

    与C语言编写的动态链接库相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 这一导出语句,在C代码中没有”C” ,而在C++代码中多了一个”C”。
    发表于 06-11 09:15 4251次阅读
    C和C++编写环境下<b class='flag-5'>LabVIEW</b>如何调用<b class='flag-5'>动态</b>库?