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

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

各位前辈,请帮我分析一下我这两个方案哪个好

已解决!
转到解答

各位前辈,

我现在有两种生产者消费者的结构,但我分析了一下无法确定其优劣,谢谢

我的目的是:

当我对采集卡进行操作时,要同时 或者说接近于实时完成以下三项任务:

1、采集保存

2、显示

3、分析

采样率大约10k-100K左右

我知道生产者消费是多对一关系

请帮我分析一下,这两种结构哪种更合理,哪种更能满足我 的要求,非常感谢

 

 

 

 

0 项奖励
1 条消息(共 8 条)
5,511 次查看
如果三种分析方法按顺序执行的话速度不一定行,如果给三个队列同样的数据,也就是把同样数据分发到三个队列中,我觉得这样再分别用独立的消费者循环处理是不是会快点?各种书上也说了,数据入队非常快,所以我就这样想当然的用了,但还不是很确定,请各位给点意见
0 项奖励
2 条消息(共 8 条)
5,484 次查看
解答
已被主题作者 gangzi 接受

看完了你的需求目的,我得遗憾的告诉你:生产/消费者结构不能达到“同时”的效果,但是可以实现“实

 

时”的效果。

 

我们知道,“The Producer / Consumer pattern is commonly used when acquiring multiple sets

 

of data to be processed in order”。in order这个特性注定了不能实现“同时”。

 

在实时系统中,一个应用通常由一组任务构成,每个任务完成应用中的一部分功能,组合后为用户提供特定的

 

服务。实时任务的分类方法有多种。根据是否允许任务超时,及时超时后对系统造成的影响,任务又分为以下

 

4类:

 

强实时任务(Hard Real-Time Task):通常是指那些必须在规定的时间内完成的任务,不允许它的任何任

 

务实例超时。若有任务实例未在截止期限内完成,则会对系统造成不可估量的损失。一般采用在最坏情况下任

 

务的响应时间对强实时任务进行可调度性分析。如果存在最大响应时间大于截止时限的任务,则认为该系统不

 

可调度。

 

准实时任务(Firm Real-Time Task):通常是指允许任务超时,但若任务超时,该任务的计算结果没有任

 

何意义。

 

弱实时任务(Soft Real-Time Task):通常是指允许任务超时,但超时后的计算结果仍有一定的意义,并

 

且其意义随着超时时间的增加而下降。

 

弱—强实时任务(Weakly Hard Real-Time Task):弱—强实时任务通常是周期任务,并且具有允许周期

 

任务的一些任务实例超时,但这些超时的任务实例的分布应满足一定的规律的特性。将这种要求称为超时分布

 

约束。若不满足超时分布约束,则会造成系统动态失效。

 

所以,我建议你做一个准实时任务的系统。你消费者的while循环框个数可以有3个,分别是保存、分析和显

 

示。也可以把它们并入一个消费者的while循环框,然后用Case结构区分开。我觉得用后者就能满足你的要

 

求,而且程序的可读性要好一点。另外,队列组只需要一组就行了,不需要搞3组。

 

 

Best Recards,

Shade
3 条消息(共 8 条)
5,457 次查看

Hi gangzi,

 

- 对于数据采集和分析系统来说,我们首先要保证的是实时性,也就是说不能因为你显示和处理的开销导致采集丢帧。

- 另外,如果是在线监控程序,那么你的处理过程也要尽可能快,不希望出现异常发生1分钟了,你还没有报警。

- 至于保存,我想不出对他有什么实时性的要求。

- 所以,我建议你可以用第一种模式。如果你对在线监控有实时要求,你可以把处理也单独列为一个消费者。

- 但是,尽量避免建立多个队列传递重复的消息。这回造成同一份数据的多个拷贝。

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

谢谢你们的精彩回答,虽然我还是有点模糊,不过对于任务的处理的理解又加深了

 

 

0 项奖励
5 条消息(共 8 条)
5,424 次查看
我有三个采集卡要同时工作,那么我是把三个daqmax 放到一个生产者中呢,还是把他们放到三个生产者中?三个卡的数据类型不同
0 项奖励
6 条消息(共 8 条)
5,420 次查看

Queue data can be any type i.e. Cluster

 

PS: You may queue in a cluster of three different data types

Message Edited by ian fung on 02-02-2010 05:15 PM
Ian F
Since LabVIEW 5.1... 7.1.1... 2009, 2010, 2014
依恩与LabVIEW
LVVILIB.blogspot.com
0 项奖励
7 条消息(共 8 条)
5,414 次查看

- 你可以用一个express VI来同时采集3个DAQ卡的数据, 配置不同的通道到不同的卡就可以。

- 你的程序如果是一直跑着很长时间,那么你的logging也要足够快,否则内存就被耗光了。这样看起来,你还是得选用第一种模式,但是从queue里面取出数据之后你把他分三根线引入显示,logging和processing,LV会帮你做并行。程序跑到一定时间之后必须达到动平衡,否则你的内存资源肯定不够。多个consumer解决不了问题。

-  显示可以降采样,没必要显示那么精确,反正眼睛分辨不出来。

0 项奖励
8 条消息(共 8 条)
5,403 次查看