NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

请问我这样使用生产者消费者结果有没有问题

我正在用数据采集卡做在线检测分析,需要即时保存数据、显示原始波形、分析结果,

数据采样率为100K,每次读10000个数据,我知道一个或多个生产者只能有一个消费者,

但我对消费者这个概念还是有点模糊,

请问,在下面的消费者结构图中,

 

我想实现的功能有:

1、实时存储数据tdms

2、显示波形图

3、对读取的数据进行变换

 

请问

1、我这个结构有什么问题

2、是不是存在数据错位的问题,也就是说,tdms存储时从队列中读出一个数据,这个数据是不是能够同时被2、3使用,会不会出现1可以用2、3不能用,或者2能用1、3不能用,或者3能用1、2不能用的现象 

3、这样的消费者结构是不是太耗时,导致队列负担重

 

 

非常感谢

 

0 项奖励
1 条消息(共 5 条)
4,674 次查看

hi gangzi,

 

please read this article for the Producer/ Consumer pattern. Take note of how the Consumer loop is consuming the data... 

Ian F
Since LabVIEW 5.1... 7.1.1... 2009, 2010, 2014
依恩与LabVIEW
LVVILIB.blogspot.com
0 项奖励
2 条消息(共 5 条)
4,635 次查看

1.生产/消费者结构的关键是“队列”的应用。“生产者”产生的数据也好,“消费者”消耗的数据也好,这个数据都是指“队列元素”,而不是你认为的数据采集卡采集到的数据。所以你程序中的TDMS保存的数据是“队列元素”,而不是你想得到的采集卡采集的数据;

2. “队列元素”怎么用?队列元素连接到case结构的选择器(就是那个“?”号),可以选择不同的case分支,而每个case分支都写好代码能实现相应的功能。比如,你的case分支有"measure"、“save data”、“show waveform”三个分支,(顾名思义)你在三个分支里写好实现测量、数据保存和波形显示的代码,然后你就可以用队列元素来控制什么时候测量、什么时候数据保存、什么时候波形显示;

3. 另外,阅读下状态机的结构,也许你能构建个更满意的软件构架。

 

帖子被Shade Nie在 01-26-2010 08:18 PM
时编辑过了
帖子被Shade Nie在 01-26-2010 08:20 PM
时编辑过了
Best Recards,

Shade
0 项奖励
3 条消息(共 5 条)
4,597 次查看

谢谢您的回答,

另:

 

我想同时实现保存、分析、显示,如果用case结构能实现吗,

 

能否给个结构框图,

 

谢谢

0 项奖励
4 条消息(共 5 条)
4,553 次查看

用case结构,实际上就是运用状态机。再加上灵活使用寄存器(Register),可以解决你的问题。你所需要的结构框图,可以在LabVIEW 新建>> 基于模板的vi中找到

Best Recards,

Shade
0 项奖励
5 条消息(共 5 条)
4,507 次查看