连续采集用波形图显示的时候,总会在波形图最前面显示出上一次采样的数据,怎么清空缓存。

2019-07-17 15:39发布

本帖最后由 DDOF 于 2017-9-26 15:25 编辑

           连续采集用波形图显示的时候,总会在波形图最前面显示出上一次采样的数据,数据的量是每通道读取数。应该是前一次关闭采样的时候没来得及读出来的数据,我想知道怎么能把它删掉呢。
           前面板和程序框图见图片。
           为了观察全部特征我才这样做的,后面会优化。
           我参数设置是采样率10000,每通道读取数1000,所以前面板显示的前1000个点就是上一次采样没来得及读出来的。导致当前采样还保留了上一轮的数据。我想做到把这1000个点删掉,也就是清空缓冲区。
           属性节点的几个看起来相近的功能都试了没用,望赐教。

程序框图前后是有移位寄存器的,并且在开始有用数组初始化。
前面板显示.jpg
程序框图 .jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
老蜗牛
1楼-- · 2019-07-18 17:35
那就每次把缓冲区的数据采集完之后再结束该轮采样。
jsw410923
2楼-- · 2019-07-18 20:52
DDOF 发表于 2017-9-26 20:33
还没有,应该是要调用属性节点,在下一轮采样前请假清空缓存,但是还没找到方法。

你是正版的Labview 吗   如果是可以电话售后,我这里的Labview过期了
xkzt1352310113
3楼-- · 2019-07-18 21:58
DDOF 发表于 2017-9-26 18:17
我的连续采样是这样的,采样率=10000,每通道读取1000,缓冲区满1000个点了,相当于采0.1秒数据就显示出来,然后上次采样最后

把采样的东西放到队列里面 另外 你是用的生产者消费者模式吗
xkzt1352310113
4楼-- · 2019-07-19 02:22
 精彩回答 2  元偷偷看……
DDOF
5楼-- · 2019-07-19 07:48
老蜗牛 发表于 2017-9-27 16:57
那就每次把缓冲区的数据采集完之后再结束该轮采样。

            我也不能控制缓冲区的数据全部采完呀,采样的那部分完全是硬件在做,它自己有个缓冲区,满了1000个数倒出来一次,我结束采样时间就算精准控制为0.1秒的整数倍,这个缓冲区也可能放进去了几个数据,在下一轮采样被读出来。
            而且我试过每通道读取数设为-1,这个模式是不停的读缓冲区的数据,可以看到读出来的数据长度是不固定的,也就是说采出每个点的时间并不是精准的1/Rate,所以LABVIEW的连续采样才有一个缓冲区去稳定数据。
            所以解决方式应该是在当前采样完之后要清空缓冲区,但是找不到方法。
老蜗牛
6楼-- · 2019-07-19 08:33
DDOF 发表于 2017-9-28 11:31
我也不能控制缓冲区的数据全部采完呀,采样的那部分完全是硬件在做,它自己有个缓冲区,满了1000个数倒出来一次,我结束采样时间就算精准控制为0.1秒的整数倍,这个缓冲区也可能放进去了几个数据,在下一轮采样被读出来。
            而且我试过每通道读取数设为-1,这个模式是不停的读缓冲区的数据,可以看 ...

首先,结束采样的时刻有两种,一种是手动停止(比如你按下前面板上的停止布尔按钮),一种是发送数据结束后自动停止。假设你用的是串口通讯,那么前者在串口硬件缓冲区中可能会残留部分已经采集但尚未传输的数据,你可以尝试使用“VISA清空I/O缓冲区”这个函数来达到你的目的;若是后者,你需要发送端在数据的发送的同时,也发送一个是否结束发送的标志位(比如每一帧含一个标志位:F表示不是最后一帧,T表示为最后一帧),这样采集到一帧数据并解码后,就知道是否是最后一帧,从而判断采集循环是否结束。
其次,每通道读取数设为-1是可行的—你可以先用一个队列采集数据(不要求数据的长短,有数据就采集),然后用另一个队列按照每一帧的字节数来获取、处理完整的一帧数据。

一周热门 更多>