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

2019-07-17 15:39发布

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

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

程序框图前后是有移位寄存器的,并且在开始有用数组初始化。
前面板显示.jpg
程序框图 .jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
老蜗牛
2019-07-19 08:33
DDOF 发表于 2017-9-28 11:31
我也不能控制缓冲区的数据全部采完呀,采样的那部分完全是硬件在做,它自己有个缓冲区,满了1000个数倒出来一次,我结束采样时间就算精准控制为0.1秒的整数倍,这个缓冲区也可能放进去了几个数据,在下一轮采样被读出来。
            而且我试过每通道读取数设为-1,这个模式是不停的读缓冲区的数据,可以看 ...

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

一周热门 更多>