在使用DAQmx采集数据时,有时会发生缓冲区溢出现象,通常的表现为采集数据不正确,并出现200279错误。下面分析缓冲区原理及溢出原因:
外部的信号进入数据采集卡后,经过各种处理转换,先进入数据采集卡自身的缓冲区里面,缓冲区是先进先出(FIFO,First In First Out)的,NI的数据采集卡应该是都有板载的缓冲区,区别在于缓冲区的大小而已。
然后当板载缓冲区中的数据量到了一定的条件时,数据采集卡将缓冲区的数据上传到计算机内存中,一般是以DMA(直接内存访问)方式传入的,但也可以设置为其它方式,比如中断等。上传数据的方式和时机可以通过DAQmx的属性节点进行设置或查看,DAQmx中默认是使用DMA传输方式,传输条件是板载内存非空。
数据传输方式包括直接内存访问(DMA),中断请求(IRQ)和可编程I/O。DMA是一种DAQ板卡和PC内存间直接通讯的传输方式,不再需要处理器的干预。NI"MITE"芯片可以处理与PCI总线间的所有总线协议。IRQ传输方式会置高信号并中断处理器,然后由处理器处理数据传输。IRQ传输通常很低,只有150kb/s而DMA可以高达20Mb/s.IRQ传输速率与使用的系统设备相关,如处理器速度等。
数据到了内存后,再由程序中的DAQmxRead.vi从内存中读入到计算机中去。这里计算机的内存要和板载缓冲区区分开来,板载缓冲区是厂商固定死的,改变不了,不会出现溢出的情况,它的空间可以很小,比如1Kbit以下,但计算机中为数据采集开辟的内存建议是采样率的10左右,即是说即使DAQmx Read.vi在10秒钟都没有执行一次的话