Error -200279: No se puede continuar con la adquisición en DAQmx

Actualizado el Nov 14, 2023

Reportado en

Hardware

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

Software

  • LabVIEW

Controlador

  • NI-DAQmx

Detalles del problema

Cuando ejecuto una aplicación de  DAQmx en LabVIEW utilizando DAQmx Read para adquirir datos continuamente, obtengo el siguiente error:

Error -200279 occurred at DAQmx Read (Analog 1D Wfm NChan NSamp).vi

Possible reason(s):
The application is not able to keep up with the hardware acquisition.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.


¿Qué causa este error y cómo lo resuelvo?

Solución

Este error es causado por un desbordamiento de buffer de la PC. Por lo general, los datos se sobrescriben en el Buffer de PC de DAQmx por una de dos razones:
  • La velocidad de lectura para la aplicación de DAQmx continuamente muestreada es más lenta que la frecuencia de muestreo, lo que hace que las muestras se acumulen en el buffer de PC de DAQmx hasta que se produzca una sobrescritura.
  • El Buffer de PC de DAQmx es demasiado pequeño para contener la cantidad de datos requeridos por la tarea, lo que provoca una sobrescritura en el buffer de PC de DAQmx  antes de que se hayan adquirido los datos.


La velocidad de lectura para la aplicación DAQmx continuamente muestreada es más lenta que la frecuencia de muestreo, lo que hace que las muestras se acumulen en el buffer de PC de DAQmx hasta que se produzca una sobrescritura.

El error -200279 es a menudo el resultado de que la velocidad de lectura anterior sea más lenta que la frecuencia de muestreo de la tarea en DAQmx, que es la frecuencia especificada a través de la propiedad VI de sincronización de DAQmx a continuación:

Al solucionar este error, el primer paso debe ser asegurarse de que la velocidad de lectura y la frecuencia de muestreo para su aplicación sean las mismas.

Como la velocidad de lectura de su aplicación de DAQmx depende de la cantidad de muestras que solicita por lectura de DAQmx, así como del número de veces que se llama a la función de lectura de DAQmx en un segundo, puede ajustar la velocidad de lectura controlando explícitamente la la cantidad de muestras requeridas por el DAQmx Read, o controlando explícitamente la cantidad de veces que el ciclo while contiene las ejecuciones de su DAQmx Read en un segundo usando nodos como Wait(ms):

Nota: DAQmx Read esperará automáticamente hasta que la cantidad solicitada de muestras esté disponible, por lo que generalmente solo es necesario controlar uno de estos factores en una aplicación en particular.

Si el ciclo while se está ejecutando más lentamente de lo esperado, es posible que deba implementar una arquitectura de Productor / Consumidor para mover otros procesos, como el registro, el posprocesamiento, el análisis y la funcionalidad de interfaz de usuario (UI, por sus siglas en inglés) fuera del ciclo de adquisición. 

Revise patrones de diseño de aplicaciones: Productor / Consumidor (en inglés) para obtener más información sobre cómo implementar una arquitectura básica de productor / consumidor.

Si incrementar el rendimiento del ciclo while no es una opción, es posible que deba reducir la frecuencia de muestreo para su aplicación.

No use Highlight Execution con código que contenga un DAQmx Read VI, ya que ralentizará la ejecución y provocará un desbordamiento del buffer.


El Buffer de PC de DAQmx es demasiado pequeño para contener la cantidad de datos requeridos por la tarea, lo que provoca una sobrescritura en el Buffer de PC de DAQmx antes de que se hayan adquirido los datos.

Ocasionalmente, este error se puede resolver simplemente aumentando el tamaño del buffer de datos del lado del host manualmente. Sin embargo, tenga en cuenta que si el error se produce es porque los datos no se leen del buffer de DAQmx lo suficientemente rápido (vea el motivo 1), aumentar el tamaño del buffer solo retrasará la aparición del error, no lo eliminará por completo. .

Para obtener información sobre cómo aumentar el tamaño del buffer, consulte DAQmx Buffer Size Allocation para Adquisición Finita o Continua (en inglés)

Información adicional

La velocidad de lectura para su aplicación de NDAQmx está determinada por dos factores: el número de muestras obtenidas por lectura y el número de lecturas por segundo:

Incluso si establece que la velocidad de lectura y la frecuencia de muestreo sean iguales, es posible que su programa no pueda ejecutarse a la velocidad que espera. Esto puede ocurrir cuando suceden muchas cosas dentro del ciclo while, lo que hace que cada iteración tome más tiempo del esperado. Esto hará que la lectura de DAQmx no se realice con la frecuencia esperada y que las muestras se acumulen en el buffer. Puede usar técnicas de evaluación comparativa de ciclos, como las que se muestran a continuación, para verificar que el ciclo while se está ejecutando realmente a la velocidad que espera:

Consideraciones adicionales para la resolución de problemas:

Muestreo Finito vs. Muestreo Continuo
Es posible que algunas aplicaciones no requieran un muestreo continuo y solo necesiten un número finito de muestras para que estén disponibles en la lectura. Si este es el caso, puede considerar configurar el modo de muestra del VI de DAQmx Timing en Finite Samples en lugar de Continuous Samples . En esta configuración, cada ciclo esperará algún tiempo antes de que las muestras estén disponibles (es decir, leer 100 muestras a 1 kHz significaría que esperar 0.1 segundos en la lectura). Esto significaría que las muestras se pierden entre las lecturas y que las muestras no estarán disponibles tan pronto como se llame la lectura. Sin embargo, esto debería mitigar el error a menos que esté experimentando el escenario 2 mencionado anteriormente.

Monitoreo de Buffer con Property Nodes en DAQmx
Durante una adquisición continua en el buffer, el buffer puede ser monitoreado para obtener más información sobre cómo la configuración actual afecta al buffer. Si el número de elementos disponibles aumenta continuamente durante la adquisición, realice una de las acciones enumeradas anteriormente para evitar el desbordamiento del buffer. Para monitorear la cantidad de datos disponibles en el buffer, use un nodo de propiedad de lectura de DAQmx para leer la propiedad Status:Available Samples Per Channel .

Controlando el flujo de datos de LabVIEW para evitar errores de sobrescritura
LabVIEW es un lenguaje de flujo de datos, lo que significa que un VI o estructura puede ejecutarse tan pronto como haya recibido todas sus entradas, independientemente de su posición en el diagrama de bloques. A menudo es útil usar cables de error como entrada para asegurar que un VI o estructura no se ejecutará antes que otro. Si un cable de error conecta el VI A  a el VI B, entonces B no tendrá todas sus entradas requeridas hasta después de que A se ejecute y el grupo de errores pase de A a B. Para obtener más información sobre el flujo de datos en LabVIEW, consulte la Ayuda de LabVIEW: Bloquear Diagrama de flujo de datos (en inglés).

En una adquisición continua de DAQmx, los datos se escriben en el buffer desde el momento en que se ejecuta el VI de DAQmx Start Task hasta que se ejecuta el VI de DAQmx Stop Task o el VI de DAQmx Clear Task. Entre el momento en que se ejecuta el VI  de DAQmx Start Task y cuando se ejecuta la primera lectura de DAQmx, el buffer de PC de DAQmx se llena de datos. Si este intervalo es demasiado largo, entonces el buffer puede estar completamente lleno y los datos iniciales se sobrescribirán antes de que el VI de DAQmx Read lo saque del buffer, lo que causa el error -200279.

Los fragmentos de código a continuación muestran un escenario común en el que la ejecución del flujo de datos puede causar un error de desbordamiento del buffer. En el primer fragmento, puede ver que no hay garantía de que el VI de DAQmx Start Task se ejecutará después del VI de Open / Create / Replace file (que generará un cuadro de diálogo emergente), por lo que las mediciones llenarán el buffer mientras selecciona un archivo, lo que significa que existe el peligro de que se sobrescriba el buffer de la PC.

Para evitar este problema, conecte los terminales de entrada y salida de error de cada función para asegurarse de que el VI de DAQmx Start Task se ejecute después de que el VI Open / Create / Replace File haya terminado de ejecutarse, como muestra el segundo fragmento:

Tasas de muestreo con dispositivos de adquisición dinámica de señal (DSA)
Los dispositivos DSA de National Instruments usan un convertidor de analógico a digital delta-sigma de 24 bits (ADC) que maximiza la integridad de la señal al dar forma al ruido y reducir la distorsión. Estos ADC especializados utilizan una base de tiempo maestra que se divide por múltiplos enteros discretos para lograr varias tasas de muestreo disponibles; como resultado, todos los dispositivos DSA tienen un número limitado de frecuencias de muestreo disponibles.

Por ejemplo, el NI 9234 tiene un total de 31 posibles frecuencias de muestreo, con un mínimo de muestreo de 1.652 kS / s. El número y el valor de las frecuencias de muestreo disponibles varían según el dispositivo DSA y se deben especificar en el manual de especificaciones de su dispositivo.

Si la frecuencia de muestreo para el dispositivo 9234 se establece por debajo de la frecuencia mínima utilizando un VI de sincronización de DAQmx o un nodo de propiedad, la frecuencia de muestreo real será forzada hasta la frecuencia mínima disponible para el dispositivo en el fondo de la API de DAQmx. En consecuencia, es posible que haya diseñado una aplicación con una velocidad de lectura adecuada para una frecuencia de muestreo mucho menor que la que realmente está ocurriendo, lo que podría llevar al Error -200279.

Si está utilizando un dispositivo DSA para su adquisición, siempre considere las posibles tasas de muestreo y diseñe su aplicación adecuadamente.

Nota: considere la posibilidad de usar un Property Node de sincronización de DAQmx y leer la propiedad Sample Clock:Rate para verificar qué frecuencia de muestreo está utilizando realmente el dispositivo, independientemente de la frecuencia establecida en el DAQmx Timing VI.