LabVIEW-生产者消费者
来源:网络收集 点击: 时间:2024-04-03循环1进行0~1随机数采样,循环2读取循环1的随机数局部变量,当两者的采样间隔一样均为1ms的时候,出现了循环次数和总数不一致的现象;1)当循环1的次数大于循环2的次数,表示循环2丢掉了一些数据;2)当循环1的次数小于循环2的次数,表示循环2重复读取了一些数据;


循环1进行0~1随机数采样(采用间隔为10ms),循环2读取循环1的随机数(采用间隔为1ms;循环1的循环次数和数据数组大小远小于循环2的循环次数和数组数组大小,说明循环2采样的数据大部分是重复数据;


循环1进行0~1随机数采样(采用间隔为1ms),循环2读取循环1的随机数(采用间隔为10ms;循环1的循环次数和数据数组大小远大于循环2的循环次数和数组数组大小,说明循环2采样的数据大部分被遗漏了;


将整个生产者和消费者过程与蓄电系统进行类比,在生产者产生数据后,数据不直接送到消费者,因为生产者和消费者的速率不同【供电局并不直接向终端用户供电,因为供电局产生电的速率与用户消耗电的速率并不相同】,此时需要搭建一个放生产者数据的缓冲区域【此时需要建造蓄电池将供电局产生的电输送到蓄电池中】。当消费者需要数据的时候,直接从缓冲区域取【当终端用户需要用电时,直接从蓄电池中获取就可以了】。同理在进行数据显示和分析时直接从数据缓冲区中获取就可以了。
2/8生产者与消费者之间传递的数据是一个连续的sine交流电波形,二者靠大小为20个点的缓冲区连接。右下角是“停止”按钮,用户控制程序的停止执行。例程提供了操作方式控件控制生产者和消费者的数据传递速率,包含五种状态:不生产,只消费、生成快于消费、生成速率等于消费速率、生成慢于消费、只生产,不消费。
3/8LabVIEW代码由3个循环组成,依上而下分别是生产者循环(产生sine数据)、消费者循环(获取sine数据)和状态循环(获得缓存区中数据的数据量)。
4/81)运行该VI,速度选择“生产者=消费者”,从下图 中可以看出生产者循环和消费者循环的数据是同步的,此时缓冲区内没有数据,也就是说产生的数据都被实时地消耗了。


2)如果再将操作方式设置为“生成者消费者”,可以看出数据缓冲区内将逐渐变满并保持为20个元素。此时生产者的波形将会比消费者多20个数据点(这些点保存在数据缓冲区中),如下图所示。


3)当将操作方式变为“不生产,只消费”时,生产者循环将停止生产,而消费者循环将消耗掉缓冲区中的数据直至数据全部消耗完,如下图所示。


4)当将操作方式变为“只消费,不生产”时,生产者循环产生20个数据后将停止生产,如下图所示。


5)当将操作方式变为“生成消费”时,消费者一直在等待生产者的数据,只要生产者产生了数据消费者立刻消费然后等待下一个生产者数据,如下图所示。


将生产者的【枚举+条件结构】改成【枚举+事件结构】,即变成了消费者生产者(事件模式);
2/4见LabVIEW范例;


生产者消费者(事件模式);


生产者消费者(数据模式,见上蓄电池系统);


生产者消费者速率
队列的各个函数以及接线端意义
LABVIEW事件结构生产者消费者队列条件结构版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_415193.html