本节简单讲解队列在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(进阶篇)--队列的使用的更多相关文章

  1. labview从入门到出家6(进阶篇)--移位寄存器的使用

    前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...

  2. labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用

    跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...

  3. labview从入门到出家9(进阶篇)--串口通讯

    ​ Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...

  4. labview从入门到出家8(进阶篇)--简单好用的状态机

    labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...

  5. labview从入门到出家4--用事件结构实现运算功能

    使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...

  6. labview入门到出家10(进阶)——CAN通讯

    ​          讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...

  7. labview从入门到出家3--制作和调用子VI

    当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个VI上面去实现这个功能函数呢?--子VI.好比C语言里面的Main ...

  8. labview从入门到出家1--第一个加法程序

    概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...

  9. labview从入门到出家2--将“加法程序”制作成“exe应用程序”

    1.上一章主要讲了如何跑我们的第一个加法程序(这里向第一个程序的鼻祖"hello world"致敬),这一章我们直接进入主题,将我们写的程序生成exe文件放桌面运行. 2.要生成e ...

随机推荐

  1. 深入浅出聊Taier—大数据分布式可视化DAG任务调度系统

    导读: 上周,袋鼠云数栈全新技术开源规划--DTMO(DTstack Meetup Online)的第一场直播圆满完成.袋鼠云数栈大数据开发专家.Taier项目主导人偷天为大家带来了<Taier ...

  2. Oracle 数据库表删除重复数据

    删除重复数据并保留一条 方法一 1.建立临时表,记录重复的数据 create table 临时表 as select a.字段1,a.字段2,max(a.rowid) as dataid from 原 ...

  3. FreeRTOS --(6)内存管理 heap5

    转载自https://blog.csdn.net/zhoutaopower/article/details/106748308 FreeRTOS 中的 heap 5 内存管理,相对于 heap 4&l ...

  4. 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪. 提到分布式锁,大家一般都会想到 Redis. 想到 Redis,一部分同学会说到 Redisson. 那么说到 Redisson,就不得不掰扯掰扯一下它的"看门狗&quo ...

  5. WSL与Windows环境共享

    Reference 更多cmd.exe帮助参考 cmd_helps WSL备份及windows Docker安装 WSL安装维护 在使用wsl时,总是需要执行windows的cmd,但是windows ...

  6. uniapp中IOS安卓热更新和整包更新app更新

    在App.vue中 onLaunch: function() { console.log('App Launch'); // #ifdef APP-PLUS this.getVersion(); // ...

  7. 【理论积累】C语言基础理论知识【第一版】

    第一个程序 #include <stdio.h> int main(){ printf("Hello World"); } 变量与常量 变量类型:整型[int].字符型 ...

  8. 11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件

    一.RTCDataChannel WebRTC 不但可以让你进行音视频通话,而且还可以用它传输普通的二进制数据,比如说可以利用它实现文本聊天.文件的传输等 WebRTC 的数据通道(RTCDataCh ...

  9. ML第2周学习小结

    本周收获 总结一下本周学习内容: 1.复习了Numpy的一些基础操作,主要是利用numpy来对ndarray数组进行操作 我的博客链接: Numpy的一些操作 2.正在学习<深入浅出Pandas ...

  10. DML数据操作语言

    DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...