微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > 虚拟仪器 > 循环采集波形的疑问?

循环采集波形的疑问?

时间:12-13 整理:3721RD 点击:

开两个线程.一个不停的读数据.另外一个起timer,更新界面.Windows下timer是不准的.不
要用它来算时间.多媒体时钟精度要高些.
.70

大侠意思说除了NI的 卡其他的卡一般没有半满缓冲区了?
这样实现连续采集有困难么?
.197

这么说来,不可能实现实时显示,就是50Hz的信号不能以50Hz的频率显示?
你最后提到的那个方法应该就是实现这个目的的吧?
.68

timer的那个也要另开线程吗?
我现在做的是在启动按钮下 SetTimer,应该是马上就启动了吧?
然后响应WM_TIMER消息,在OnTimer函数里重绘波形。
时间定的100ms,我看VC版精华区说SetTimer定时的最小精度是55ms
我想100ms还是可以接受的吧?
现在我的方案是 缓存区 3200, 采样率 1600/s, 然后每0.1s读数160出来显示,
正好1s显示完采进来的数据。当然有一点偏差也是可以允许的,因为我是先让它
采1s,然后才开始读数,我想总体上始终可以避免覆盖数据和等待采样的事情发生吧?
谢谢大家的讨论!
我受益匪浅,希望大家继续帮助,中秋快乐!
.68

我用的凌华的卡也支持double buffer的。很好用,不会掉点的。
.122

可以的.但是你要保证计算机足够快.
.70

现在我的方案是 缓存区 3200, 采样率 1600/s, 然后每0.1s读数160出来显示,
正好1s显示完采进来的数据。当然有一点偏差也是可以允许的,因为我是先让它
采1s,然后才开始读数,我想总体上始终可以避免覆盖数据和等待采样的事情发生吧
.68

回头看了一下你的原帖,好像我回的都有点跑题耶. :)
我不知道你的缓存区域是怎么读取的.假设是每次1600/s.你的方案应该可行的.当然你的显
示要延迟数据一秒.如果你想缩小这个时间,你也可以在缓冲区设置两个指针.一个指到读入
的点,一个指到显示的点.显示的中断可以设频繁些,比如10ms一次.但是只在检查到读入的
点大于已经显示的点160后才更新显示.
.70

不跑题,呵呵,学到很多东西,谢谢大家讨论了!
我是这样的:
缓冲区3200个点;
一个独立的线程只管采集数据,采集的就是工频信号,每个周波32点。
这是用数据采集卡上的定时器8253实现的,这样1s就能采集进来1600个数据;
另外在测试程序里设置了SetTimer 100ms,因为都说要55ms以上才准确。
每100ms显示160个数据,这样1s正好也显示1600个数据。
我先打开数据采集卡,此时采集数据的线程就开始工作了,然后我延时900ms,
再SetTimer 100ms。我的想法就是先采集1s的数据(900ms+100ms=1s),然后
相当于同速率追赶显示。按理如果定时都准确的话,应该无论如何都不会出现
丢数和读错数的情况。现在已经可以显示数了,:) 但问题在:
1)频率好像很不稳定,一会大一会小,但实际上应该始终是50Hz,是不是有些
因素没有考虑到?
2)如果先开VC6的程序,再开测试信号的电源,那么显示正常;但如果反一个
顺序,则刚开始有三次间断的没有显示波形的情况,是不是缓冲区的数据还有
问题?
请你和其他朋友再帮我出出主意,好吗?
.68

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top