请教PCI9114HG的连续采集问题 点击:911 | 回复:9



tresa

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2003年12月04日
发表于:2003-12-19 14:22:00
楼主
我用PCI9114HG采集卡编了一个采集数据、运算和显示的程序。我将采集放在了一个线程里,在采集线程里我又同时创建了运算线程,具体代码如下(Delphi6): procedure SampleThread.Execute; begin datasize:=1024*32; datasize:=datasize div 2; while (not Terminated) do begin n:=0; repeat begin repeat AI_AsyncDblBufferHalfReady(card,HalfReady,StopFlag);//判断缓冲区是否半满 until HalfReady=0; AI_AsyncDblBufferTransfer(card,aiBuffer[0]);//传递数据 for i:=0 to datasize*2-1 do begin aiasyn_Buffer[i]:=aiBuffer[i] and 65535; aidata_Buffer[i]:=aiasyn_Buffer[i]*10/32767.0-10.0; end; for i:=0 to 1023 do begin for j:=0 to 31 do begin SignalDomain[j,i+1024*n]:=aidata_Buffer[j+32*i]; end; end; inc(n); end; until n=SamplePoint div 1024; Calculatethread:=CJCalculateThread.Create(false);//创建运算线程并立即执行 Sleep(1000); end; end; 这段代码每次运行到Sleep前面的时候,数组里的数据还是有的(不全为0),但是每当回到判断While not Terminated do的时候,数据就莫名其妙地全为0 了,所以导致我的运算线程总是接受不到数据,请问这是什么问题呀,是不是我的函数运用不对呀?或者是采集参数错误了吗? 我的采集参数为: Number of Scan:1024 Buffer Allocated(KB):256



tresa

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2003年12月04日
发表于:2003-12-05 08:14:00
1楼
请老师们、高手们多关注呀,谢了!

tresa

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2003年12月04日
发表于:2003-12-10 08:46:00
2楼
工控论坛的老师们,你们给我的回信中提到我的aibuffer数组里的元素应该是32位的整型变量,但是Dask.pas里的要求是Word型,也就是16位整型变量。老师又说那就只取偶数项,这是什么意思呀?

yoyo1101

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 590回
  • 年度积分:0
  • 历史总积分:645
  • 注册:2002年8月30日
发表于:2003-12-10 16:03:00
3楼
查看帮助里面的 AI DATA FORMAT 就可以发现,PCI-9113/9114在单点采集和连续采集时的数据格式是不同的,你使用的是连续采集,那么,数组元素应该是32位整形即U32,其中低16位为真实数据,12~15位为通道号,剩下的高位没有定义,参看例子 SDK9114ADBPreTrg 就可以发现虽然在头文件中定义的数组是U16,例子中使用的是U32。

tresa

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2003年12月04日
发表于:2003-12-15 10:51:00
4楼
对了,还有一个小问题想请问yoyo1101。我看了PCI9114HG卡的说明书,上面写道,此卡采样频率不得超过100KHz,我想请问:这个频率限值是对单通道,还是多通道呢?如果是多通道采集频率不得超过100KHz,那么是不是32通道采集,每一个通道的采集频率不得超过100/32=3.125,也就是3KHz呢?谢谢指点!

yoyo1101

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 590回
  • 年度积分:0
  • 历史总积分:645
  • 注册:2002年8月30日
发表于:2003-12-15 13:40:00
5楼
单通道采集其最高采样速率可以达到100KHz,因为9114是多通道分时复用A/D转换器,所以使用多个通道,采样速率要均分,所以你的理解是对的。

tresa

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2003年12月04日
发表于:2003-12-16 08:45:00
6楼
那在函数AI_ContScanChannels中的采样频率参数到底是单通道的采样频率,还是多通道的频率总和呢? 因为我以前一直以为,我采集32个通道,函数里的采样频率为各通道平均的采样频率,所以我规定的上限值为3KHz,实际采样的速度实在是太慢了;但是我昨天把频率值调到了40KHz,采样速度快多了,而且也没有提示有什么问题,我就觉得很奇怪了。请帮忙解答,到底函数里的采样频率参数应该如何来理解?

yoyo1101

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 590回
  • 年度积分:0
  • 历史总积分:645
  • 注册:2002年8月30日
发表于:2003-12-16 10:59:00
7楼
函数AI_ContScanChannels中的采样频率参数是总的采样频率,你设定为3k的话,就是每通道100Hz了,自然会比较慢。

xxxxxx

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2003年12月18日
发表于:2003-12-18 06:31:00
8楼
用数据采集卡DAQ board 采集数据,使用NI的AT-MIO-16D数据采集卡,用LABVIEW现成的程序实现数据采集。此卡说可以采集100kHz的数据,但是我接信号发生器测试,只能采集到5khz的信号,信号频率再高采集就失真了 ,请教,这是什么原因? 这个卡模拟输入可以接成8通道的差分输入,也可以接成16通道 的单端输入,是不是因为每个通道都分了5khz,约等于100khz 所以才不对的。 我只是怀疑,知道怎么改动卡上的硬件设置才能实现一个通道的100khz的采样? 看了上面的帖子,我觉得我的问题很上面的很相似,请帮确认一下 多谢

yoyo1101

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 590回
  • 年度积分:0
  • 历史总积分:645
  • 注册:2002年8月30日
发表于:2003-12-19 14:22:00
9楼
看看例子采样速率的设定,通常情况下,例子有可能没有设成板卡最高采样频率。

热门招聘
相关主题

官方公众号

智造工程师