本节简单讲解队列在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. Git&Gitee

    目录 Git Git介绍 安装 命令学习 Git的作用 git与svn比较 Git,GitHub,GitLab,Gitee Git工作流程 Git常用命令 在仓库目录终端下 - 设置全局用户 在仓库目 ...

  2. [AcWing 797] 差分

    点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], b[N]; void in ...

  3. Hadoop(二)Hdfs基本操作

    HDFS HDFS由大量服务器组成存储集群,将数据进行分片与副本,实现高容错. 而分片最小的单位就是块.默认块的大小是64M. HDFS Cli操作 官网https://hadoop.apache.o ...

  4. go-micro集成链路跟踪的方法和中间件原理

    前几天有个同学想了解下如何在go-micro中做链路跟踪,这几天正好看到wrapper这块,wrapper这个东西在某些框架中也称为中间件,里边有个opentracing的插件,正好用来做链路追踪.o ...

  5. 操作系统实现-boot.asm实现

    博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们进入操作系统实现的真实编码, 这一次主要是完善对boot.asm文件的全部实现, ...

  6. 如何用好Nginx的gzip指令

    说一段废话 压缩响应数据有什么作用呢?问的好:从用户体验和IT成本两方面回答这个问题: 用户体验上 网速一定的情况下,传输10MB数据比传输5MB数据的时间快了一半.所以传输数据越小用户加载页面就越快 ...

  7. SecureCRT使用SSH链接出现Password Authentication Failed,Please verify that the username and password are correct的解决办法(亲测有效)

  8. C++面向对象-类和对象那些你不知道的细节原理

    一.类和对象.this指针 OOP语言的四大特征是什么? 抽象 封装.隐藏 继承 多态 类体内实现的方法会自动处理为inline函数. 类对象的内存大小之和成员变量有关 类在内存上需要对齐,是为了减轻 ...

  9. 国内访问 git 慢的方法

    在国内访问 git 的时候,总会存在访问慢或者git clone 的时候报下面的错误 这个时候,我们可以使用代理的方式去进行访问 需要注意的是:你必须存在一个国外的,能够让你快速访问到 GitHub ...

  10. 283. Move Zeroes - LeetCode

    Question 283. Move Zeroes Solution 题目大意:将0移到最后 思路: 1. 数组复制 2. 不用数组复制 Java实现: 数组复制 public void moveZe ...