My Blog! blog.gkong.com   

Tip of my blog

新年快乐!


阅读(2664) 评论(758)
标签(TAG):

剑心:

我用vb编了一个数据采集程序,用的是winapi下的QueryPerformaceFrequency()和QueryPerformaceCount()这两个函数,我查资料发现有人是用borland c++ builder调用这两个程序,达到了50um采集一个数据,并且说最高能够达到1.8um,可是我用vb只能达到1秒钟采集100至200个数据,离我要求的相差甚远(要求25um).我用的采集卡是中泰pc6311,转换速率可以达到10us,采集卡应该完全可以达到要求,不过调试程序时我是在定时时间内循环产生随机数的办法来实现数据的模拟采集的,我想这个应该不会比实际采集得到数据慢吧,如果您有更好的意见,还请您多多指教!

我说一下我的想法吧:
  (1)不要太相信板卡中说的10us转换速度,因为这是在理想情况下才达到的,而且,这只是相对于一个通道进行全速采集,如果你要开16个通道,那就是采集一个通道要160us。而且因为VB本身的原因吧(慢)所以用定时器的方法来进行数据采集只
是在低速采集时才用。你查的资料在我的经验中我觉得1.8uS是不可能的。
     因为你用上面的两个API函数构成一个采集流程时你也要不断地进行数据处理,这样子会“当机”的。所以,在WIND0WS中用VB包装“高精度计数器API”的方法
进行数据采集最理想的速度是100ms,10ms - 50ms也可以,但再小就不现实了,除非
你的“数据处理”工作很小很小,不然!!!!!!
  (2)再有就是,现在一般进行数据采集的一般方法我想是这样的:
      第一种:用中断来进行数据采集,然后把“高精度计数器”封装为一个类,用这个类的实例来进行定时,在定时中进行“人机对话”,显示数据,画波形,运行各种控制算法(如用模糊算法进行恒温的控制等)。
      第二种:用板卡所带的FIFO进行数据采集,当采集到一半的FIFO时,板卡会
触发中断,然后在中断处理程序中把采集到的数据保存在“实时数据库”中。
      第三种:用DMA来进行数据采集。
      总之,复杂一点的测控系统不会直接在“高精度计数器”实例中进行数据采集。
   说了这些,不知道你觉得怎样,不一定对,你可以说说你的想法,当然了,如果你的试验对于数据采集的速度要求不高你的想法还是可行的,
   但请不要有用API来实现us级的数据采集,那是“天方夜谈”。这个我可以肯定。

   是了,你不应该用定时随机数来采集,而应在连续采集到N(一般要看你的采集对象,如果是水流量等比较慢的N=6)次,然后取算术平均值,如果是干扰比较大时可以用加权平均法。要记住的是:要对数据进行滤波,而不是随机读取数据

by 进化中的兔子 发表于:2006/1/31 0:59:01
My subject | 我的主题

New entries | 新发表

Messages Board | 留言板


Guest Comments | 新评注


Blogger Login | 登陆栏
Blog Infomation | 信息栏
博客名称:嵌入式系统&虚拟仪器 日志总数:450 评论数量:277 访问次数:1781245 建立时间::2005年10月25日
Blog Infomation | 搜索栏
Blog Infomation | 收藏栏

XML RSS 2.0

嵌入式系统&虚拟仪器
© COPYRIGHT 2004 ALL RIGHTS RESERVED http://www.gkong.com

中华工控网 | 联系我们 | 工控论坛首页 | 工控博客首页 | 博客注册 | 博客登陆

工控博客管理联系邮箱:工控博客服务邮箱

中华工控网 © Copyright 2013. All rights reserved.