相关信息
DAQmx应用程序的读取速率取决于两个因素 - 每次采集的样本数和每秒读取数:
即使您将读取速率和采样率设置为相同,您的程序也可能无法以您期望的速度执行。当while循环中需要处理很多任务时会发生这种情况,导致每次迭代花费的时间比预期的要长。这将导致DAQmx读取不像预期的那样进行,并且样本堆积在缓冲区中。您可以使用循环基准测试技术(如下所示)来验证while循环实际上是否以您期望的速度执行:
其他故障排除注意事项有限采样与连续采样某些应用可能不需要连续采样,并且在读取时可能只需要有限数量的样本。如果是这种情况,您可以考虑将
DAQmx Timing vi的采样模式设置为
Finite Samples而不是
Continuous Samples 。在此配置中,每个循环周期将在样本可用之前等待一段时间(即,以1 kHz读取100个样本意味着您在读取时等待0.1秒)。这意味着在读取之间丢失样本,并且一旦调用读取,样本将不可用。但是,除非您遇到上面提到的方案2,否则这应该可以缓解错误。
使用DAQmx属性节点进行缓冲区监测在连续缓冲采集期间,可以监
测缓冲区以获取有关当前配置如何影响缓冲区的更多信息。如果在采集期间可用元素的数量不断增加,请执行上面列出的操作之一以避免最终溢出缓冲区。要监视缓冲区中可用的数据量,请使用DAQmx读取属性节点来读取“
Status:Available Samples Per Channel
属性。
控制LabVIEW数据流以避免覆盖错误LabVIEW是一种数据流语言,这意味着VI或结构只要接收到所有输入就可以执行,无论它在程序框图中的位置如何。通常,使用错误线作为输入来确保VI或结构不会在另一个之前执行是有用的。如果错误导线将VI A连接到VI B,那么B将不会具有所有必需的输入,直到A执行并且错误簇从A传递到B.要了解有关LabVIEW中数据流的更多信息,请参考
LabVIEW帮助:程序框图数据流 。
在连续DAQmx采集中,数据从DAQmx启动任务VI执行之时写入缓冲区,直到执行DAQmx停止任务VI或DAQmx清除任务VI。在执行DAQmx启动任务VI和执行第一个DAQmx读取之间,DAQmx PC缓冲区正在填充数据。如果此间隔太长,则缓冲区可能会被完全填满,并且在DAQmx读取VI将其从缓冲区中取出之前将覆盖初始数据,从而导致错误-200279。
下面的代码片段显示了一种常见的情况,其中数据流执行可能导致缓冲区溢出错误。在第一个片段中,您可以看到无法保证在打开/创建/替换文件VI(将生成弹出对话框)后执行DAQmx启动任务VI,因此当你选择一个文件时测量将填满缓冲区,这意味着存在PC缓冲区覆盖的危险。
要避免此问题,请连接每个函数的错误输入和输出终端,以确保在打开/创建/替换文件VI完成执行后执行DAQmx启动任务VI,如第二个代码段所示:
动态信号采集(DSA)设备的采样率NI的DSA器件使用24位delta-sigma模数转换器(ADC),通过降低噪声和减少失真来最大化信号完整性。这些专用ADC使用主时基,该主时基按离散整数倍进行分频,以实现几种可用的采样率; 因此,所有DSA设备都具有有限数量的可用采样率。
例如,NI 9234总共有31种可能的采样率,最小采样率为1.652 kS / s。可用采样率的数量和值因DSA设备而异,在您的设备规格手册中有所说明。
如果使用DAQmx定时VI或属性节点将9234设备的采样率设置为低于最小速率,则实际采样率将被强制转换为DAQmx API后台中设备可用的最小速率。因此,您可能设计了一个应用,其读取速率适合于比实际发生的采样率低得多的采样率,这可能导致错误-200279。
如果您正在使用DSA设备进行采集,请始终考虑可能的采样率并适当地设计您的应用。
注意:考虑使用DAQmx Timing属性节点并读取
Sample Clock:Rate
属性以验证设备实际使用的采样率,无论DAQmx Timing VI设置的速率如何。