错误-200279:DAQmx采集速度无法满足

更新 Nov 14, 2023

适用于

硬件

  • USB-6009
  • PXI Multifunction I/O Module
  • PXI Analog Input Module
  • PXI Sound and Vibration Module

软件

  • LabVIEW

驱动

  • NI-DAQmx

问题详述

当我在LabVIEW中使用DAQmx Read来连续采集数据时,我收到以下错误:


在DAQmx Read(Analog 1D Wfm NChan NSamp).vi上发生错误-200279

可能的原因:
该应用程序无法匹配上硬件采集速度。
增加缓冲区大小,增加读取数据的速度,或指定读取的固定数量的样本而不是读取所有可用样本可能会纠正问题。


导致此错误的原因是什么,我该如何解决?

解决方案

此错误是由PC缓冲区溢出引起的。通常,数据在DAQmx PC缓冲区中被覆盖,原因有两个:
  • 连续采样的DAQmx应用程序的读取速率低于采样率,导致样本在DAQmx PC缓冲区中累积,直到发生覆盖。
  • DAQmx PC缓冲区太小,无法容纳任务所需的数据量,导致在获取数据之前在DAQmx PC缓冲区中进行覆盖。


连续采样的DAQmx应用程序的读取速率低于采样率,导致样本在DAQmx PC缓冲区中累积,直到发生覆盖。

错误-200279通常是上述读取速率低于DAQmx任务的采样率的结果,DAQmx任务的采样率是通过下面的DAQmx Timing VI属性指定的速率:

在对此错误进行故障排除时,第一步应该是确保应用程序的读取速率和采样率相同。

由于DAQmx应用程序的读取速率取决于每个DAQmx读取请求的样本数量,以及一秒钟内调用DAQmx读取函数的次数,因此可以通过控制读取速率来调整读取速率。 DAQmx Read所需的样本数,或者使用Wait(ms)等节点控制包含DAQmx Read的while循环在一秒内执行的次数:

注意: DAQmx Read将自动等待直到所请求的样本数量可用,因此通常只需要在特定应用程序中控制其中一个参数。

如果while循环的执行速度低于预期,则可能需要使用生产者/消费者体系结构,以便在采集循环之外移动其他进程,例如日志记录,后处理,分析和用户界面(UI)功能。

有关如何实现基本生产者/消费者体系结构的更多信息,请查看应用程序设计模式:生产者/消费者

如果不能提高while循环性能,则可能需要降低应用程序的采样率。

不要将高亮执行与包含DAQmx Read VI的代码一起使用,因为它会降低执行速度并导致缓冲区溢出。


DAQmx PC缓冲区太小,无法容纳任务所需的数据量,导致在获取数据之前在DAQmx PC缓冲区中进行覆盖。

有时,只需手动增加主机端数据缓冲区的大小即可解决此错误。但是,请记住,如果发生错误是因为没有足够快地从DAQmx缓冲区中读取数据(参见原因1),增加缓冲区大小只会延迟错误的发生 - 它不会完全消除它。

有关如何增加缓冲区大小的信息,请参阅DAQmx缓冲区大小分配以进行有限或连续采集

相关信息

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设置的速率如何。