如何才能提高组态软件的数据采集速度? 点击:4460 | 回复:9



canfly

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 195回
  • 年度积分:0
  • 历史总积分:321
  • 注册:2005年5月12日
发表于:2006-08-29 21:43:00
楼主
  我要采集一个变化较快的模拟量,采用研华数据采集卡。用组态软件采集数据的时,发现采集速度比较慢,20多毫秒,满足不了需要,不知通过什么方法能提高采集速度?
  用VB编写程序时,不到1ms就可以采集9个通道的数据,不知可不可以通过DDE的方式将数据传给力控,不知DDE方式的通讯速度怎么样?
  有人能回答吗?谢谢!



如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-08-30 09:27:00
1楼
力控软件受整体架构的限制,肯定达到不了1ms,包括市面上多数组态软件也是达不到。
用dde的方式会有一定的改进,但是也达不到1ms。
不知道您需要的速度是多少?

canfly

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 195回
  • 年度积分:0
  • 历史总积分:321
  • 注册:2005年5月12日
发表于:2006-08-30 10:47:00
2楼
今天我试了一下用VB和DDE通讯,发现速度更慢,力控I/O驱动显示的为40多ms,而且只是一个点,比用数据采集卡直接采集还要慢。
    我需要的采集速度应该在10ms以内采集一遍PCI-1713的数据,直接采集时I/O在力控I/O服务器显示的为20多毫秒,但从实时曲线中看,好像还没有达到这个速度。不知有什么方法可以解决?

万有引力

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 40回
  • 年度积分:0
  • 历史总积分:243
  • 注册:2005年9月26日
发表于:2006-09-15 13:06:00
3楼
曲线看肯定不会这么快,要设定的,在曲线组态时有个刷新周期的不知道你有没有设定,另外你要这么快的速度采,你送到卡里的数据是1ms变化一次?你能确定?这太牛B 了吧,有这样的采集卡吗?兄弟20ms采一次,但是下面的数据有没有攺变呢?如果下面的数据没有攺变你要这么快采做啥?首先看下面的是不是这么快变化,如果不是这么快,你上面再快有什么意思?

bupianren

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 163回
  • 年度积分:0
  • 历史总积分:252
  • 注册:2006年4月03日
发表于:2006-10-11 11:35:00
4楼
顶,楼上的!
采集速度,不光是由软件决定的,而且大部分因素是硬件决定

TO canfly:您用VB编的采集速度能达到1毫秒,能不能发过来,让我看看阿,haidongqing88@163.com

bupianren

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 163回
  • 年度积分:0
  • 历史总积分:252
  • 注册:2006年4月03日
发表于:2006-10-11 11:36:00
5楼
DDE本来速度就慢,呵呵

那还不如用OPC吧

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2006-10-20 15:38:00
6楼
不知此仁兄为什么要这么快的采集速度,但是我给你介绍一下为什么采集速度上不去的原因,板卡本身的采集是通过直接读写板卡完成的,它的读写速度相当快,1ms那就是太慢了,当然,这也要看具体板卡的性能了.假如你要1ms的采集速度的话,那么你就要单独写一个程序,使用While来循环采集,当然,你会发现你的cpu占用率高高在上了。计算机本身提供的Timer就是大约30-40ms,所以你发现力控采集速度大约是30-40了。所以对于高频采集的话,你要找力控单独给你订做驱动,当然对于显示来说这是太快了,100ms你就看不过来数字的变化了。

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2006-10-20 15:38:00
7楼
不知此仁兄为什么要这么快的采集速度,但是我给你介绍一下为什么采集速度上不去的原因,板卡本身的采集是通过直接读写板卡完成的,它的读写速度相当快,1ms那就是太慢了,当然,这也要看具体板卡的性能了.假如你要1ms的采集速度的话,那么你就要单独写一个程序,使用While来循环采集,当然,你会发现你的cpu占用率高高在上了。计算机本身提供的Timer就是大约30-40ms,所以你发现力控采集速度大约是30-40了。所以对于高频采集的话,你要找力控单独给你订做驱动,当然对于显示来说这是太快了,100ms你就看不过来数字的变化了。

plink

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 24回
  • 年度积分:0
  • 历史总积分:40
  • 注册:2002年2月26日
发表于:2006-10-22 22:28:00
8楼
unix、windows等非实时性操作系统下,时钟是无法精确到毫秒级的.
win32的timer相关的api,很难提供精确的时钟(仅仅是任务时间)
至于基于windows消息机制的ontimer方式(相信很多组态软件,也都是这么干的),更是如此。
因此质疑楼上所说的“计算机本身提供的Timer就是大约30-40ms,所以你发现力控采集速度大约是30-40了”。

下面的做法时间是不可控的,使进程更多的占用cpu软中断调度,没有任何实际意义
while(1){
  clect();
}
如果目的仅仅是为了在单位时间内采集更多的点,而不是要求相对时间的适时性。可以的办法是采用外部高速缓存电路,将数据缓存,然后输入计算机,当然这样时间上滞后了,但是达到了采集更多点的目的。这种应用在类似开关冲击试验应用中已有成熟先例。

万有引力

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 40回
  • 年度积分:0
  • 历史总积分:243
  • 注册:2005年9月26日
发表于:2007-02-06 11:05:00
9楼
1ms采集上来了,下面会变化吗?质疑?

热门招聘
相关主题

官方公众号

智造工程师