Labview生产者和消费者模式
Labview数据采集常用思路–基于AMC和队列的生产者和消费者编程模式
基于队列与AMC操作的数据采集编程思路。
*本文提供AMC等相关插件安装包
本文详细介绍了在数据采集和工业控制中常用的Labview数据采集模式,基于队列操作的生产者和消费者编程模式及思路,可广泛应用在航空航天、电力能源、轨道交通等多种复杂数据采集管理系统中;
以下主要介绍AMC模块和队列在数据采集时的用法
1.队列
之前写过一篇详细的队列使用文章,如想详细了解可通过该链接查看:
https://blog.csdn.net/m0_52176775/article/details/134960232
首先,该模式基本思路是基于队列操作的,队列可以简单理解为程序向上位机寄存器申请了某部分用于存储数据的内存,该部分类似于一个容器,入队列数据类似于进入容器的水,出队列类似于在从另一端流出的水,进入队列的数据暂存在寄存器中,当出队列数据被取出后,这个数据就在队列中消失,队列中的数据是定量的,不可重复使用,取出后便消失了。
该解析图很好的解释了队列的这点特点,那么队列的基本使用方式可以为两个并行的循环,第一个循环是将数据写进去,第二个循环是将数据拿出来。这时会有朋友问到:为什么不直接将数据往后传递呢?非要绕这么一大圈。因为向后传递的数据流不能返回并且队列可以循环执行并等待下一步系统下达的指令。此时队列就相当于一个随时待命并将命令下达下去的传令者。
2. AMC使用
AMC是Labview VIPM提供的插件中的VI包,常用于数据采集时数据传递、日志保存、用户管理、测试执行等步骤的执行,AMC的使用与队列非常类似,但AMC在内存优化问题上比队列表现更加优秀,AMC详细安装及使用如下。
2.1 AMC模块下载及安装篇
本文提供了AMC等模块的离线安装包,链接如下:
链接:https://pan.baidu.com/s/1QEgh8PLax86Y77jPQ3fhww
提取码:6666
安装包下载完成后,右键打开,系统自动弹出VIPM,此时选择安装版本(PS:与你当前的Labview版本相同即可),
出现英文提示时,选择 I accept 即可,系统会自动打开对应的软件版本并安装。
2.2 AMC功能介绍篇
AMC最常用的有三个主要的函数组成:
①创建AMC队列
其中必填选项为Message queue name ,这一项内容为AMC队列名称,为了更好的理解,我们暂且把这个名称称为名称A,除此之外,还有两项参数,一项为initial message names,一项为initial message values,这是两个默认一维数组,将需要初始化的名称和值输入后,运行程序后,系统会在**“③读取AMC数据”**函数执行时优先逐一执行该一维数组中的项目。
②发送AMC数据
这个指令是写入数据,可以理解为将数据写入电脑的存储器中暂存起来了。Message name 是必填项,这一项内容为AMC队列名称,我们这个名称同样连接并称为名称A,如果连接“message queue in”后,若不在该函数中输入名称A,系统会默认为前面连接的创建的队列名称。
③读取AMC数据
这个指令是读取数据,可以理解为将写入电脑的存储器中的输入读取出来了。读取出来的message name 和message value 是在“②发送AMC数据”中写入的AMC数据函数中的数据。
以上三个函数为AMC使用最多的函数,仅用此函数就可完成几乎所有的简单数据采集框架的搭建。
3.AMC使用实例
题主简单写了一个AMC框架,其基础框架类似于队列操作,如下如所示:
前面板按下“关机”布尔量时,触发事件结构,将,Exit写入到“跑步”和“吃饭”两个AMC队列中,第二第三个while循环中分别跳转Exit分支结构中,执行分支结构中的事件。
此时第二第三个While循环中,输出T到布尔量,程序结束。
拓展
通过以上队列和AMC操作可知,在数据采集系统中,无论队列还是AMC,均可以通过两个或多个while循环并行的方式执行程序。其中,有一个while循环带有事件结构,事件结构触发后,向下传递数据,就类似于上面事件结构生产数据下面while循环消费这些数据,且数据不会有冗余,可以说写入一个字符串数据就仅能读出一个字符串数据,写入一个数组数据就只能读出一个数组数据,这样就能很好的解释什么是“生产者和消费者模式了”。
不知道各位是否对生产者和消费者框架模式更深刻了呢?欢迎各位留言并私聊讨论相关技术问题。
更多Labview及其他工业软件开发文章,请关注题主,后续将持续更新工业软件开发相关的知识点。这期就到这里啦~拜