热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

labview事件结构的使用

事件结构,是labview编程结构的精髓所在。它类似于单片机的中断功能,优点在于不占用CPU资源。比如按键按下串口发送数据,以及设置键盘快捷键等等功能,事件结构比查询结构要节省很多

事件结构,是labview编程结构的精髓所在。它类似于单片机的中断功能,优点在于不占用CPU资源。比如按键按下串口发送数据,以及设置键盘快捷键等等功能,事件结构比查询结构要节省很多系统资源。下面我介绍一下利用事件结构的关键点,基础的自己去看帮助吧。

1,关于事件结构超时连线的问题:事件结构有一个超时事件的输入,当不连接时代表永不超时。这点要十分注意,因为有时候你的事件就够会和其他结构放在一个while循环里,比如下图:

《labview事件结构的使用》

 

我们理想的情况是,其他服务程序正常循环运行(小灯闪烁),而鼠标按下后,处理事件结构。但是如果这样写的话,由于事件结构永不超时,while循环只会运行一次,只有当鼠标按键按下后,才会开始第二次循环。这个程序的运行结果是,按一下鼠标,小灯变化一次。

要解决这个问题有两个办法:一个是给事件结构的延时输入处添加延时时间,比如5ms,这样循环就会5ms运行一次,不会影响其他服务程序的正常运行。二个就是把其他服务程序放到另外一个while循环中,事件结构单独一个循环。个人建议选择第二个方法。

2,关于事件结构软触发的问题:前面板有一个按钮,按下后触发很简单,也很常用。不过有时候要涉及到软触发的问题,就是利用程序(而不是前面板的控件)去触发一个事件。先看下面这个例子:

《labview事件结构的使用》

“服务程序“软件改变软触发的值,我们的理想目标是,每次改变服务程序的值为真时,标志小灯会改变一次。但是实际程序运行结果是,无论按多少次,小灯都不变。因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。

解决办法就是:要软件触发事件,必须对变量右键->创建->属性节点->值(信号)进行赋值,这样才能触发事件结构。例如下图:

《labview事件结构的使用》

(事件结构设置时要把锁定前面板勾掉)程序运行结果:当服务程序弹起时,小灯不变,但是事件会一直触发,用高亮模式可以看见,连续两次给软触发F,事件同样会触发,换句话说,只要赋值,就会触发事件,而不是值改变才会触发。所以在事件结构里加了一个条件结构。当服务程序按下时,不停的给软触发T,事件结构不停运行,小灯闪烁。

再次强调,事件结构是labview的精髓,用好事件结构是编写复杂程序的基础。

labview事件大致可以分为三部分:用户界面、外部I/O、程序的其他部分:

《labview事件结构的使用》

接下来举一个例子:

《labview事件结构的使用》
一个简单的事件结构的程序面板

上面的程序,如果选择波形,则进入事件结构,处理波形,至此事件结构执行完毕,在改变波形,由于事件结构不在循环里,则不会再次触发事件。

一个很好的解决方法是将事件结构放在循环里面,循环的次数由事件发生的次数决定。如下图:

《labview事件结构的使用》

循环结构工作原理:若事件并不发生,循环也不再继续,无法检测循环条件,只有当事件发生后,循环继续时,才会检测到循环条件端子,停止程序。

一般这种情况,我们往往在事件结构中添加“结束”或者是“停止”按钮,方便用事件结束整个程序的运行。

《labview事件结构的使用》

另外值得注意的是,尽量不要把循环嵌套在事件结构中,一旦这样做了,会产生生产者消费者循环,导致事件触发以后,循环一直在执行,无法响应其他事件。

下面再举一个例子说明:

《labview事件结构的使用》

《labview事件结构的使用》

《labview事件结构的使用》

其中事件0是超时,在这个程序中,一旦点击开始处理,则计数器开始计数,无论怎么点击其他按钮程序都不会响应。如果高亮执行程序,你会发现程序一直在内层循环里面。究其原因,可以右击事件,编辑本事件所处理的分支,发现有一项“锁定前面板”被勾选了,因此在事件循环中的执行没有结束之前,无论如何触发前面板控件,都是无效的,取消勾选则可以解决这个问题。

《labview事件结构的使用》

附上三个例程:链接:https://pan.baidu.com/s/1eyuyBZYXlqQl-MV1EAIc6w 密码:qonn

三个程序的前面板和程序框图完全相同,但运行结果不完全一样。如果你运行”007 事件结构中的循环1.vi“和”008 事件结构中的循环2.vi”,你会很抓狂,运行”009 事件结构中的循环1.vi”,你会获得意外惊喜。

  程序操作步骤是:

    1、运行程序,点击“开始处理”,计数器和指示灯会不断变化;

    2、点击“结束处理”,计数器和指示灯会停止变化;

    3、点击“退出系统”,VI退出。

(区别在于事件的编辑设置上,是否锁定前面板,2个事件都是如此)

综上所述,事件结构最好放在循环结构中,但是循环结构最好不要放在事件结构中。另外动态事件注册也是灵活运用事件结构的一种方法,有兴趣可以再深入了解一下,有时间会仔细研究一下总结一篇博客。

 

参考资料:http://bbs.elecfans.com/jishu_370514_1_1.html

 


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
author-avatar
順俟自嘫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有