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 ...
随机推荐
- zookeeper的linux安装
wget下载(很慢):wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz 或者 ...
- windows下的操作
1.java -jar启动war包 将打好的war包丢到tomcat的webapps目录,然后进入tomcat的bin目录双击运行startup.bat会自动解压war包,在浏览器直接可访问web项目
- IOC容器--1.12. 基于 Java 的容器配置
用Java的方式配置Spring ,不使用Spring的XML配置,全权交给Java来做 JavaConfig是Spring的一个子项目,在Sring 4 之后成为核心功能 这种纯Java的配置方式 ...
- TCP 协议灵魂 12 问,巩固你的网路底层基础!
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一 ...
- 翻译:使用 CoreWCF 升级 WCF 服务到 .NET 6
翻译:使用 CoreWCF 升级 WCF 服务到 .NET 6 原文地址:https://devblogs.microsoft.com/dotnet/upgrading-a-wcf-service-t ...
- Linux Troubleshooting 超实用系列 - Disk Analysis
笔者历史文章: https://github.com/CarlJi/words 关于磁盘的使用,实际生产中以下问题会较为常见: No space left on device - 空间不足 Disk ...
- 数仓选型必列入考虑的OLAP列式数据库ClickHouse(中)
实战 案例使用 背景 ELK作为老一代日志分析技术栈非常成熟,可以说是最为流行的大数据日志和搜索解决方案:主要设计组件及架构如下: 而新一代日志监控选型如ClickHouse.StarRocks特别是 ...
- 个人作业——体温上报app(二阶段)
Code.java package com.example.helloworld; import android.graphics.Bitmap; import android.graphics.Ca ...
- CF1580E Railway Construction
CF1580E Railway Construction 铁路系统中有 \(n\) 个车站和 \(m\) 条双向边,有边权,无重边.这些双向边使得任意两个车站互相可达. 你现在要加一些单向边 \((u ...
- 【SpringSecurity系列3】基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/02-springsecurity-state ...