使用labview队列传递数据时造成数据丢失? 30
抱歉还是我,调整数据流速率的问题依然没有得到解决,所以新开一个,希望您不要介意。经过多次尝试,轮询周期在15ms时比较合适。在LabVIEW自带的队列范例(见队列基础.v...
抱歉还是我,调整数据流速率的问题依然没有得到解决,所以新开一个,希望您不要介意。经过多次尝试,轮询周期在15ms时比较合适。在LabVIEW自带的队列范例(见队列基础.vi)中,分别调整进队列和出队列的循环等待时间,将产生的随机数依据先入先出的原则进行处理,可实现"快存慢取"的功能。而现在我是在此基础上通过dll接收VC的连续数据流,经队列调整后送还给vc处理。现在有两个问题:
1.对接收的每50ms1kb的图像数据(大小为226kb),将进队和出队循环时间设为相同且都在20ms以下时,可实现完整接收,而设为不同(如下图所示进队15ms,出队16ms)或者虽相同但大于20ms时都会丢失数据。而我发现采用队列传递数据时,就算没有实际的数据进入队列,只要出队列循环时间大于进队列循环时间,也即出队比入队慢的话,队列里面的数值仍然会涨(可将队列基础.vi的随机数设为空字符尝试)。我觉得这种空的数据对正常的图像数据造成了干扰,造成丢包。您如何认为呢?
2.是否可找到其他替代队列的方法,即构造一个较大的fifo,调整循环写入和循环读出的速度,以实现数据流降速和解决数据丢失的问题
盼望您的回复! 展开
1.对接收的每50ms1kb的图像数据(大小为226kb),将进队和出队循环时间设为相同且都在20ms以下时,可实现完整接收,而设为不同(如下图所示进队15ms,出队16ms)或者虽相同但大于20ms时都会丢失数据。而我发现采用队列传递数据时,就算没有实际的数据进入队列,只要出队列循环时间大于进队列循环时间,也即出队比入队慢的话,队列里面的数值仍然会涨(可将队列基础.vi的随机数设为空字符尝试)。我觉得这种空的数据对正常的图像数据造成了干扰,造成丢包。您如何认为呢?
2.是否可找到其他替代队列的方法,即构造一个较大的fifo,调整循环写入和循环读出的速度,以实现数据流降速和解决数据丢失的问题
盼望您的回复! 展开
2个回答
展开全部
所有的问题主要在于 基本概念理解/基础,以及时间(轮询周期)的应用。
队列或者(生产者消费者结构)等等,都是基于基础而来,换言之,如果你的程序在不加任何架构的情况下可以跑通,那么才是完全理解原理。 直接进入到现成架子中,很多东西会混淆。
当入队和出队循环时间均为15ms时数据可无差错传输 -- 表示已经能正常工作
那么如何 实现你说的逻辑? 写数据 -- 10ms, 读数据--20ms, 将写的数据保存到一个地方
然后,以2倍的时间读取这些数据。
查基础 --- 移位寄存器使用。
队列或者(生产者消费者结构)等等,都是基于基础而来,换言之,如果你的程序在不加任何架构的情况下可以跑通,那么才是完全理解原理。 直接进入到现成架子中,很多东西会混淆。
当入队和出队循环时间均为15ms时数据可无差错传输 -- 表示已经能正常工作
那么如何 实现你说的逻辑? 写数据 -- 10ms, 读数据--20ms, 将写的数据保存到一个地方
然后,以2倍的时间读取这些数据。
查基础 --- 移位寄存器使用。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询