本节简单讲解队列在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. FileNotFoundError: [Errno 2] No such file or directory: 'image/1.jpg'问题解决

    FileNotFoundError: [Errno 2] No such file or directory: 'image/1.jpg'问题 最近在学习爬虫,想爬一些图片并保存到本地,但是在下载图片 ...

  2. Odoo 服务器搭建备忘

    前提 OS:Ubuntu 20.04LTS Odoo:14旗舰版 数据库:Postgres13.0 *数据库和Odoo安装在一台服务器 系统设置 为了Log日志时间好看,进行系统时区设置 # 查看可用 ...

  3. Unity制作一个小星球

    制作过程 在场景中新建一个球体(Planet)和一个胶囊(Player),适当缩放并添加材质,这里胶囊会被视为玩家 然后将摄像机设为胶囊(Player)的子物体 自行调整合适的摄像机视角 新建脚本Gr ...

  4. 阿里CBU技术面试小结

    一个执着于技术的公众号 前言 今天给大家分享一篇胡文兴同学阿里CBU技术面试的自我总结,希望通过本篇文章也让正在准备求职面试的你有所帮助. 本篇文章已经征得原作者同意转载至本公众号,并且征得他的同意标 ...

  5. DH问题汇总

    本节内容主要转载于:弄清楚DL,D-H,CDH problem,CDH assumption,DDH,BDDH,BCDH. DLP(Discrete Logarithm Problem) 在乘法群\( ...

  6. Markdown基础语法(上)

    前言 按照官方文档,和根据自己所用和所理解所写 一.标题语法 一级标题最大,六级标题最小 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标 ...

  7. 【题解】2021CSP-J2T3网络连接

    目录 题目链接 题目分析 是否重复 读入提取数 非法情况判断 参考代码 题目链接 题目分析 map不会冲突!!不一定要like代码中那样加-号! 模拟,算不上大, 首先,我们想想整个流程: 现在,我们 ...

  8. 【mq】从零开始实现 mq-09-消费者拉取消息 pull message

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  9. python常用内置函数和关键字

    常用内置方法 在Python中有许许多多的内置方法,就是一些Python内置的函数,它们是我们日常中经常可以使用的到的一些基础的工具,可以方便我们的工作. 查看所有的内置类和内置方法 # 方法一 bu ...

  10. MAC系统下破解WIFI密码(亲测可用,含wifi密码字典)

    出差第二天,住的小区因为疫情被封,宿舍又没有wifi,看着附近满满的WIFI信号列表,wifi万能钥匙却一个都连接不上,心中一万匹CNM...于是电脑连上手机热点,然后各种折腾,终于破解了一个隔壁的w ...