labview从入门到出家7(进阶篇)--队列的使用
本节简单讲解队列在Labview中的使用,队列你可以认为就是一组先进先出的数据列表,在Labview中常用来缓存和传递数据。用了这么久的队列,个人认为有个方便的地方在于数据传递的把控,不管是局部变量还是全部变量,免不了要考虑到数据先后冲突的问题,但队列可以很好地解决这个问题。其中状态机的生产者消费者模式传递数据的方式大多采用队列,生产者逻辑产生的数据通过队列一一传递到消费者逻辑中,消费者读取队列后,将队列的数据一一处理。在labview中,队列还有一个很方便的地方就是VI之间传递数据,VI之间传递数据可通过接口,全局变量,引用属性节点,还可以通过队列。下面简单讲一下队列在Labview中的用法。
1、右键 编程->同步->队列操作->获取队列引用(队列的相关函数接口都在这)。获取队列引用相当于新建一个队列引用,后续所有函数通过该引用进行数据操作。在Labview中,我们直接在该函数左侧最上方的"名称"接口右键新建一个常量,命名为testque,就新建了一个名为testque的一个队列引用。左侧第二个接口为数据类型,我们可以放一个数值,字符串,数组和簇等,表示该队列传输的数据类型。具体操作和说明可查看函数的帮助。

再 添加“函数入队列”的函数。

下面就是一个基本的队列输入输出的逻辑,具体操作流程看程序中的注释,写完后高亮显示执行看下运行效果。(上面的注释是鼠标左键双击空白处即可添加备注,其他语言一般是双斜杠//,或者是#号进行注释。labview双击空白写入注释后,可通过右下角的箭头指向对应的函数或变量上进行说明)。其中最后的释放队列引用很重要,如果创建队列引用后没有释放掉的话,每新建一次队列引用,都会增加运行内存,不过要传递的数据量大的时候才能看得出来,如果一个Labview程序运行时间越长,labview占用的内存越大,那很可能是没有释放队列,文件等引用导致。

数据入队列左侧的一个“-1”输入到超时毫秒的接口,表示永不超时。也就是如果其他地方想将该队列的数据读取出来,但是队列中没有队列数据,则该读取函数就一直等待。这个在下面的VI之间传递数据的例子可以演示一下。如果输入1000,则表示如果在1000ms后还没有读取该队列的该数据,则放弃本次读取继续执行。

2、VI间传递数据。例子如下,程序未命名1为写入队列数据,程序未命名2为读出队列数据。只要队列名一样,便可创建相同的引用,该引用允许数据在VI间传递数据。现在超时毫秒用的是-1,永不超时,也就是如果运行了程序2,不运行程序1的话,程序2会一直等待,无法执行后面的逻辑,无法退出程序。大家可以高亮显示看一下效果。
先运行程序2。

程序2运行后一直等待。

运行程序1后,程序2执行完成。

3、下面来一个简单的生产者消费者逻辑,上面的while循环写入数据到队列(生产者),下面的while循环读取数据并处理(消费者)。大家一样可以高亮显示查看逻辑

执行效果。

以上就是labview队列的简单运用,一般我常用于vi间,以及多线程传递数据,全局变量存在抢占情况(当然也可以通过信号量锁住变量的方式,不过队列,它香啊!)。
原创不易,一键三连拉!
labview从入门到出家7(进阶篇)--队列的使用的更多相关文章
- labview从入门到出家6(进阶篇)--移位寄存器的使用
前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...
- labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用
跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...
- labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...
- labview从入门到出家8(进阶篇)--简单好用的状态机
labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...
- labview从入门到出家4--用事件结构实现运算功能
使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...
- labview入门到出家10(进阶)——CAN通讯
讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...
- labview从入门到出家3--制作和调用子VI
当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个VI上面去实现这个功能函数呢?--子VI.好比C语言里面的Main ...
- labview从入门到出家1--第一个加法程序
概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...
- labview从入门到出家2--将“加法程序”制作成“exe应用程序”
1.上一章主要讲了如何跑我们的第一个加法程序(这里向第一个程序的鼻祖"hello world"致敬),这一章我们直接进入主题,将我们写的程序生成exe文件放桌面运行. 2.要生成e ...
随机推荐
- 00. 初次使用(系统安装+ssh连接)
效率教程,配置不需要插显示器,一步到位 一.装系统 1. sd卡用读卡器插上电脑,打开软件SD Formatter 4.0,按默认配置,直接格式化. 软件下载链接:https://pan.baidu. ...
- 攻防世界-MISC:pdf
这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...
- 再见 FTP/SFTP!是时候拥抱下一代文件传输利器了!
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 两台电脑之间该如何传送档案,其实方法有超多种的,像是 FTP 或透过 SSH 方式来传送档案, ...
- sqlx操作MySQL实战及其ORM原理
sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持.使用它可以方便的在数据行与Golang的结构体.映射和切片之间进行转换,从这个角度可以说它是一个OR ...
- CSS加载不会阻塞DOM树解析
1.css的加载不会阻塞DOM树解析. 1).css加载不会阻塞DOM树的解析: 2).css加载会阻塞DOM树渲染: 先把DOM树结构先解析完,等CSS加载完后根据最终样式渲染DOM树,免了css加 ...
- '@JvmDefault' is only supported since JVM target 1.8. Recompile with '-jvm-ta
Java 1.8加入了接口默认实现的方式. 那么在kotlin中如何使用呢? 可以在方法上加注解@JvmDefault 但直接加上后会编译会碰到一些错误提示.下面是解决方法. 问题 Logcat 提示 ...
- IX交换中心网络架构分析
拓扑如上 IX功能介绍 IX交换中心,客户接入交换中心只收取端口费用,在交换中心网内的流量不收取任何费用,一个交换中心是否值得接入主要看该ix所接入的用户 假如客户A是做视频网站,用的视频源是IQY的 ...
- Redis集群高频问答,连夜肝出来了
Redis 集群方案 Redis集群方案应该怎么做?都有哪些方案? 使用codis方案:目前用的多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新h ...
- Go中rune类型浅析
一.字符串简单遍历操作 在很多语言中,字符串都是不可变类型,golang也是. 1.访问字符串字符 如下代码,可以实现访问字符串的单个字符和单个字节 package main import ( &qu ...
- 魔改了一下bootstrap-treeview组件,发布个NPM包体验一下
前言 之前在这篇文章 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示 中说到,我为了让文章分类列表支持层级结构,用了一个树形组件,不过这个组件太老了,使用的Boots ...