?????????????????????????????????????????????????????????????????? 从说明中我们可以知道当采样率为20KHz时,NI–DAQmx将把100K作为缓冲区的大小,因 此N=100K。 由于缓冲区是环形的,程序在执行的过程中不断的从缓冲区读取数据,每当读取一部分 数据后缓冲区中读取之前的该部分将在读取后变为可写,便于数据采集卡不断的从外部采集 数据存储到环形缓冲区中。当缓冲区中的数据被填满即没有可写的部分后将发生溢出从而导 致上述错误。我们假设在发生错误之前程序运行之后的任意时刻程序运行时间为t,那么在 这t时间内数据采集卡一共采集的数据点数为 1 =×t 1 在t时间内DAQmx读取.vi一共读取的数据点数为 2 =×t 2 要想使环形缓冲区不溢出,就必须满足如下条件: -由于在实际的程序中,、n、T、N都是确定的值,这就意味着-的结果是关于t的一 12 次函数,令K=-,则当K>0时,随着t的增加,最终会存在一个临界值使得K×=N, 00 虽然我不能阻止缓冲区的溢出,但是我们可以使程序出错时的t足够大。当K=0时,- 数据点数和DAQmx读取.vi从环形缓冲区中读取的数据点数相等,当K<0时,-也是永远成立!但是这种情况一般不采用。现在我们把前面演示示例程序的参数数值带入上 述公式: 200 20000t-=100000 0.1 解出时间t=5.556s=5556ms。这说明程序运行5556毫秒后缓冲区溢出,程序弹出错误,这 与我们前面观察到的5610毫秒非常接近。现在我们假设改变参数n和T,并且保证程序在3 个小时内不发生上述错误,那么n和T应满足如下关系: 19990.7407<<20000 考虑到n是一个整数,并且T的小数点后三位有效,经过实际的计算,我们发现这个n和T 的具体指的确很难选取,比如我们取n=1000,那么T的范围是(0.05,0.050023158),由于 T是以秒为单位,转换为毫秒后T就只能取50毫秒,n取其它值时的情况也是如此,那么这 样一来就是K=0的情况,即永远不会出现缓冲区溢出的情况。本文的探讨到此为止。 |
|