Desde el lanzamiento de NI-DAQmx, los usuarios del hardware de adquisición de datos (DAQ) de NI han aprovechado la diferentes características diseñadas para ahorrar tiempo de desarrollo y para mejorar el rendimiento de sus aplicaciones de adquisición de datos.
Una característica que ahorra una cantidad considerable de tiempo de desarrollo es la Interfaz de Programación de Aplicaciones (API) de NI-DAQmx, la cual es la misma tanto en toda la funcionalidad del dispositivo y como en las familias de dispositivos. Esto significa que toda la funcionalidad de un dispositivo multifunción es programada con el mismo juego de funciones (entrada analógica, salida analógica, E/S digitales y contadores). Además, un dispositivo de E/S digital y un dispositivo de salida analógica son programados usando este mismo juego de funciones. En LabVIEW, esto es posible gracias al polimorfismo. Un VI polimórfico acepta múltiples tipos de datos para una o más terminales de entrada y/o salida. El API de NI-DAQmx también es consistente en todos sus entornos de programación aplicables. Usted necesita aprender a usar solamente un juego de funciones para poder programar la mayoría del hardware de adquisición de datos de NI en múltiples entornos de programación.
Otra característica de NI-DAQmx que mejora su experiencia de desarrollo es el DAQ Assistant. Esta herramienta le ayuda a crear sus aplicaciones sin programación a través de una interfaz gráfica para configurar tareas simples y complejas de adquisición de datos. Además, la sincronización, un proceso que generalmente es difícil de implementar debido a las señales de disparo y/o reloj deben ser enrutadas manualmente, es fácil con NI-DAQmx, el cual realiza automáticamente enrutado de señales entre las diferentes áreas funcionales de un solo dispositivo y entre múltiples dispositivos.
Las aplicaciones de adquisición de datos que usted construye usando NI-DAQmx se benefician de una arquitectura diseñada para maximizar el rendimiento. Esto comienza con un modelo de estado eficiente que elimina reconfiguración innecesaria. Al eliminar estos gastos, se optimizan la configuración y la adquisición. Además, usted puede alcanzar velocidades de E/S de un solo punto mayores de 50 kS/s. Este nivel de rendimiento es posible debido a los registros mapeados a memoria.
Otra característica importante de la arquitectura NI-DAQmx es Measurement Multithreading. Ya que NI-DAQmx es de múltiples hilos, múltiples operaciones de adquisición de datos pueden ocurrir simultáneamente, mejorando enormemente el rendimiento de sus aplicaciones que contienen varias operaciones. También simplifica significativamente dichas aplicaciones.
Para comenzar a aprovechar estos beneficios, usted solamente necesita aprender algunas funciones. De hecho, 10 funciones de NI-DAQmx ofrecen la funcionalidad de resolver el 80% de las aplicaciones de adquisición. Estas funciones se describen en detalle para ayudarle a comprender su funcionalidad y los tipos de aplicaciones en las cuales son usadas.
NOTA: Los ejemplos a los que se hace referencia en este documento se pueden encontrar en las ubicaciones a las que se hace referencia: Ubicaciones del ejemplo de NI-DAQmx para LabVIEW y basado en texto en Windows.
Tools»Create/Edit DAQmx Tasks [CVI]
Project»Add New Item»DAQmx Task [.NET]
DAQ Assistant es una interfaz gráfica para crear, editar y ejecutar canales virtuales y tareas NI-DAQmx de manera interactiva. Un canal virtual NI-DAQmx consiste de un canal físico en un dispositivo DAQ y la información de configuración para este canal físico, como rango de entrada y escala personalizada. Una tarea NI-DAQmx es una colección de canales virtuales, información de temporización, disparos y otras propiedades relacionadas con la adquisición o generación. En la siguiente figura, el DAQ Assistant está configurado para realizar una medida de tensión limitada.
Los siguientes documentos describen el uso del DAQ Assistant en LabVIEW, LabWindows/CVI y .NET:
Tutorial sobre NI-DAQmx Express VI
Usar el DAQ Assistant en NI LabWindows/CVI
Usar el DAQ Assistant en NI Measurement Studio
DAQ Assistant también puede generar código para configurar y/o realizar la adquisición o la generación especificada. Este procedimiento en LabVIEW se describe en la Ayuda de DAQ Assistant y en el documento Usar el DAQ Assistant para generar automáticamente código LabVIEW. La siguiente figura muestra una instancia del DAQ Assistant y la configuración generada automáticamente que resulta y el código ejemplo de LabVIEW.
Library»NI-DAQmx»Channel Creation/Configuration [CVI]
Task.Channel.CreateChannel Property [.NET]
La función NI-DAQmx Create Virtual Channel crea un canal virtual y lo añade a una tarea. También se puede usar para crear múltiples canales virtuales y añadirlos a una tarea. Cuando una tarea no está especificada, la función crea una tarea. La función NI-DAQmx Create Virtual Channel tiene numerosas instancias. Estas instancias corresponden al tipo de medida o generación específica que realiza el canal virtual.
Crear un canal en LabVIEW
La siguiente figura muestra cuatro ejemplos de diferentes instancias del NI-DAQmx Create Virtual Channel VI.
Las entradas de la función NI-DAQmx Create Virtual Channel difieren para cada instancia de la función. Sin embargo, ciertas entradas son comunes para la mayoría, sino todas, las instancias de la función. Por ejemplo, se requiere una entrada para especificar los canales físicos (entrada analógica y salida analógica), líneas (digitales) o contador que usarán los canales virtuales. Además, las operaciones de entrada analógica, salida analógica y contador usan entradas de valor mínimo y valor máximo para configurar y optimizar las medidas y generaciones en base a los valores mínimos y máximos esperados de las señales. Sin embargo, una escala personalizada puede ser aplicada a varios tipos de canales virtuales. En el siguiente diagrama de bloques de LabVIEW, el NI-DAQmx Create Virtual Channel VI es usado para crear un canal virtual de termopar.
Crear un canal en .NET
La mayoría de las clases en la biblioteca NI-DAQmx .NET no puede ser directamente ejemplificado. Estas clases son usadas como sub-objetos de la clase.
Estas clases contienen propiedades que son específicas de un tipo de canal en particular. Por ejemplo, las propiedades como Count
solamente son aplicables a contadores y solamente están disponibles en las clases CIChannel y COChannel. Usted puede asociar los siguientes tipos de canales con una en la biblioteca de clase NI-DAQmx .NET:
Canales de entrada analógica— clase
Canales de salida analógica— clase
Canales de entrada digital— clase
Canales de salida digital— clase
Canales de entrada de contador— clase
Canales de salida de contador— clase
La clase Task tiene una propiedad de colección de canales para cada uno de los seis tipos de canales— , , , , , y . Para crear un canal, usted puede usar uno de los varios métodos para crear canales en las colecciones de canales.
Después de ejemplificar un nuevo objeto Task, crear y asignar un objeto AIChannel se realiza al llamar la función adecuada en la clase Channel. El siguiente snippet crea un simple canal de voltaje de entrada analógica:
analogInTask = new Task();
AIChannel myChannel;
myChannel = analogInTask.AIChannels.CreateVoltageChannel(
"dev1/ai1", //The physical name of the channel
"myChannel", //The name to associate with this channel
AITerminalConfiguration.Differential, //Differential wiring
-10, //-10v minimum
10, //10v maximum
AIVoltageUnits.Volts //Use volts
);
Crear una tarea en C/C++
Use la función DAQmxCreateTask() para crear una tarea y DAQmxCreateAIVoltageChan() para crear un canal de voltaje de entrada analógica. Para información sobre crear canales para diferentes tipos de medidas, vea la Ayuda de Referencia NI-DAQmx C. A continuación un snippet de cómo usar las dos funciones:
TaskHandle taskHandle=0;
char chan[256] = "Dev1/ai0";
float64 min = -10, max = 10;
DAQmxCreateTask("",&taskHandle);
DAQmxCreateAIVoltageChan(taskHandle ,chan ,"", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);
Ejemplos para examinar:
LabVIEW | Digital - Finite Output.vi |
---|---|
Thermocouple - Continuous Input.vi | |
CVI | Write Dig Port |
Cont Thrmcpl Samples-Int Clk | |
.NET | WriteDigPort |
ContAcqThermocoupleSamples_IntClk |
Varias aplicaciones de adquisición de datos requieren sincronización de diferentes áreas funcionales de un solo dispositivo (ej., salida analógica y contadores). Otros requieren que múltiples dispositivos sean sincronizados. Para lograr esta sincronización, las señales de disparo deben ser enrutadas entre las diferentes áreas funcionales de un solo dispositivo y entre múltiples dispositivos. NI-DAQmx realiza este enrutado automáticamente. Al usar la función NI-DAQmx Trigger, todas las señales de disparo válidas están disponibles como la entrada fuente para la función. Por ejemplo, en el siguiente NI-DAQmx Trigger VI, la señal de disparo de inicio para Device 2 está disponible como la fuente del disparo de inicio para Device 1 sin que se realice ningún enrutado explícito.
Crear un disparo en .NET
Después de crear un objeto Task en un canal, usted puede añadir un disparo a la tarea al llamar los métodos en la colección Task.Triggers. El siguiente snippet de código crea un disparo en de inicio de borde digital:
analogInTask = new Task();
DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.Rising;
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("PFI0", triggerEdge);
En base a los parámetros enviados a la función ConfigureDigitalEdgeTrigger el dispositivo se verá en una línea interna o externa para un borde digital de incremento o caída antes de comenzar a adquirir datos. El snippet de arriba configura el dispositivo para verse en PFI 0 para un disparo de borde digital de incremento.
Crear un disparo en C/C++
Use la función DAQmxCfgDigEdgeStartTrig() para crear un disparo de inicio de borde digital. Para información sobre crear diferentes disparos, vea la Ayuda de Referencia NI-DAQmx C. A continuación está un snippet que muestra cómo usar la función para un disparo de inicio digital que está entrando en PFI0 y que busca un borde de incremento en esa línea.
char startTrigger[256] = "Dev1/PFI0";
int startEdge = 0; // rising edge
DAQmxCreateTask("",&taskHandle));
DAQmxCreateAIVoltageChan(taskHandle, chan, "", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);
DAQmxCfgDigEdgeStartTrig(taskHandle, startTrigger, startEdge);
El documento Características de temporización y sincronización de NI-DAQmx contiene información adicional referente al uso de la función NI-DAQmx Trigger para realizar sincronización con NI-DAQmx.
Ejemplos para examinar:
LabVIEW | Voltage - Finite Input.vi |
---|---|
Voltage - Continuous Input.vi | |
CVI | Acq-Int Clk-Dig Start&Ref |
Cont Acq-Int Clk-Anlg Start | |
.NET | AcqVoltageSamples_IntClkDigStartAndRef |
ContAcqVoltageSamples_IntClkAnalogStart |
Library»NI-DAQmx»Timing [CVI]
Task.Timing Property [.NET]
La función NI-DAQmx Timing configura la temporización para operaciones de adquisición de datos temporizadas por hardware. Esto incluye especificar si la operación será continua o limitada, seleccionar el número de muestreos para adquirir o generar para operaciones limitadas y crear un búfer cuando sea necesario.
Para operaciones que requieren temporización (entrada analógica, salida analógica y contador), la instancia Sample Clock de la función NI-DAQmx Timing establece la fuente del reloj de muestreo, el cual puede ser una fuente interna o externa y su velocidad. El reloj de muestreo controla la velocidad a la cual los muestreos son adquiridos o generados. Cada pulso del reloj inicia la adquisición o generación de un muestreo para cada canal virtual incluyendo en la tarea.
Configurar la temporización de tareas en LabVIEW
El siguiente diagrama de bloques de LabVIEW demuestra el uso de la instancia del Sample Clock del NI-DAQmx Timing VI para configurar una generación de salida analógica continua con un reloj de muestreo externo.
El documento Características de temporización y sincronización de NI-DAQmx contiene información adicional referente al uso de la función NI-DAQmx Timing para realizar sincronización con NI-DAQmx.
La mayoría de las operaciones de contador no requieren temporización de muestreo ya que la señal medida ofrece la temporización. La instancia Implicit de la función NI-DAQmx Timing debe ser usada para estas aplicaciones. En el siguiente diagrama de bloques de LabVIEW, la instancia implícita del NI-DAQmx Timing VI es usada para configurar una adquisición de ancho de pulso a búfer para ser limitada con un número específico de muestreos.
Configurar temporización de tareas en .NET
Para establecer la fuente del reloj de muestreo, la velocidad del reloj de muestreo y el número de muestreos a adquirir o generar usan la función Channel.Timing.ConfigureSampleClock(). El siguiente snippet de código crea una adquisición continua basada en un reloj de muestreo externo conectado a PFI 0 en el dispositivo.
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Timing.ConfigureSampleClock(
"/Dev1/PFI0", // external clock source line or use "" for internal clock
10000, // expected rate of external clock or actual rate of internal clock
SampleClockActiveEdge.Rising, // acquire on rising or falling edge of ticks
SampleQuantityMode.ContinuousSamples, // continuous or finite samples
1000 // number of finite samples to acquire or used for buffer size if continuous
);
Configurar temporización de tareas en C/C++
Use la función DAQmxCfgSampClkTiming para configurar temporización de tareas en C o C++. El siguiente snippet de código muestra su uso para un reloj interno que se ejecuta a 10000 hz.
char clockSource[256] = "";
float64 rate = 10000;
DAQmxCfgSampClkTiming(taskHandle, clockSource, rate, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
Ciertos dispositivos de adquisición de datos emplean protocolo de sincronización como la temporización de sus operaciones de E/S digital. Handshaking utiliza un intercambio de señales de temporización conocidas con un dispositivo externo para transferir cada muestreo. La instancia Handshaking de la función NI-DAQmx Timing configura la temporización de protocolo de sincronización para operaciones de E/S digital.
Ejemplos para examinar:
LabVIEW | Voltage - Continuous Output.vi |
---|---|
Counter - Read Pulse Width and Frequency (Finite).vi | |
CVI | Cont Gen Volt Wfm-Ext Clk |
Buff Semi-Period-Finite | |
.NET | ContGenVoltageWfm_ExtClk |
MeasBuffered_SemiPeriodFinite |
Library»NI-DAQmx»Task Configuration/Control»Start Task [CVI]
Task.Start Method [.NET]
Como se mencionó en la Introducción, el modelo de estado usado por NI-DAQmx elimina reconfiguración innecesaria para obtener un alto nivel de eficiencia e incrementar el rendimiento. Este modelo de estado consiste de cinco estados en los cuales puede residir una tarea. Información detallada referente a cada uno de estos estados está disponible en la Ayuda de NI-DAQmx en NI-DAQmx Key Concepts»Channels y tareas en NI-DAQmx»Tasks in NI-DAQmx»Task State Model.
La función NI-DAQmx Start Task transforma explícitamente una tarea al estado de ejecución. En el estado de ejecución, la tarea realiza la adquisición o generación especificada. Una tarea será transformada implícitamente al estado de ejecución o iniciada automáticamente, si no es usada la función NI-DAQmx Start Task cuando la función NI-DAQmx Read se ejecuta. Esta transición implícita también ocurre si la función NI-DAQmx Start Task no es usada y la función NI-DAQmx Write se ejecuta con su entrada automática especificada de acuerdo a esto.
Aunque no siempre se requiere, es preferible usar la función NI-DAQmx Start Task para iniciar explícitamente una tarea que involucra una adquisición o generación temporizada por hardware. Además, si la función NI-DAQmx Read o la función NI-DAQmx Write serán ejecutadas varias veces, como en un ciclo, la función NI-DAQmx Start Task también debe ser usada. De otra manera, el rendimiento de la tarea será reducido debido a que será iniciada y detenida repetidamente. Información adicional que describe cuándo usar la función NI-DAQmx Start Task está disponible en el artículo Uso de DAQmx Start Task y Stop Task VIs en LabVIEW.
Iniciar una tarea en LabVIEW
El siguiente diagrama de bloques de LabVIEW demuestra una situación donde la función NI-DAQmx Start no necesita ser usada ya que la generación de salida analógica solamente consiste de un solo muestreo temporizado por software.
Por el contrario, el siguiente diagrama de bloques de LabVIEW demuestra una situación donde la función NI-DAQmx Start debería ser usada ya que la función NI-DAQmx Read es ejecutada varias veces para lectura desde el contador.
Iniciar una tarea en .NET
Para iniciar una tarea, use la función Start() en el objeto Task. El siguiente snippet de código muestra el uso de la función Start().
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Timing.ConfigureSampleClock( ... );
analogInTask.Start();
Iniciar una tarea en C/C++
Para iniciar una tarea use la función DAQmxStartTask(). A continuación, se muestra un snippet de código de su uso.
DAQmxStartTask(taskHandle);
Ejemplos para examinar:
LabVIEW | Counter - Continuous Output.vi |
---|---|
Current - Continuous Input.vi | |
CVI | Dig Pulse Train-Cont |
Cont 0-20mA Samps-Int Clk | |
.NET | GenDigPulseTrain_Continuous |
ContAcq0_20mACurrentSamples_IntClk |
Library»NI-DAQmx»Read Functions [CVI]
ChannelReader Class [.NET]
La función NI-DAQmx Read lee muestreos desde la tarea de adquisición especificada. Las diferentes instancias de la función toman en consideración el tipo de adquisición (analógica, digital o contador), el número de canales virtuales, el número de muestreos y el tipo de datos que serán seleccionados. Una vez que el número de muestreos ha sido transferido desde el FIFO en la tarjeta DAQ al búfer de PC en RAM, la función NI-DAQmx Read mueve los muestreos desde el búfer de PC a la memoria del entorno de desarrollo de aplicaciones (ADE).
Leer datos en LabVIEW
Las siguientes figuras muestran cuatro ejemplos de diferentes instancias del NI-DAQmx Read VI.
Las instancias de la función NI-DAQmx Read que son capaces de leer múltiples muestreos incluyen una entrada para especificar el número de muestreos por canal para leer cuando la función se ejecuta. Para adquisiciones limitadas, al especificar un número de muestreos por canal de -1, la función espera todos los muestreos solicitados para ser adquiridos y después lee estos muestreos. Especificar un número de muestreos por canal de -1 para una adquisición continua da como resultado todos los muestreos que están disponibles en el búfer cuando la función se ejecuta. En el siguiente diagrama de bloques de LabVIEW, el NI-DAQmx Read VI ha sido configurado para leer múltiples muestreos desde múltiples canales virtuales de entrada analógica y regresa los datos como formas de onda. Además, ya que la entrada del número de muestreos por canal ha sido cableada a un valor constante de 10, cada vez que el VI lo ejecuta leerá 10 muestreos desde cada canal virtual.
Leer datos en .NET
Para leer con la biblioteca NI-DAQmx .NET, use el lector y los objetos de transferencia. Este patrón de programación es similar al patrón usado a en todo el .NET Framework para E/S de archivo y red.
La clase tiene propiedades relacionadas con E/S y métodos para E/S sin formato. Para obtener una instancia de la clase DaqStream que corresponda a una en particular, use la propiedad. Usted no puede ejemplificar una instancia de la clase DaqStream directamente.
Para realizar una lectura en la biblioteca NI-DAQmx, cree una instancia de un lector y pase una instancia de la clase DaqStream en el constructor. Después llame un método en la clase del lector y lea los datos, como se muestra en el siguiente snippet:
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
//Create the reader and attach it to the stream
AnalogSingleChannelReader reader = new AnalogSingleChannelReader(analogInTask.Stream);
//Perform the read
double[] data = reader.ReadMultiSample(100);
Leer datos en C/C++
Use la función DAQmxReadAnalogF64() para leer datos analógicos desde una tarea de entrada analógica en C o C++. Para funciones de lectura adicionales, vea la Ayuda de Referencia NI-DAQmx C. Un snippet de código lee 1000 muestras desde un solo canal.
int numRead = 0;
DAQmxReadAnalogF64(taskHandle, 1000, 10.0, DAQmx_Val_GroupByScanNumber, data, 1000, &numRead, NULL);
Ejemplos para examinar:
LabVIEW | Voltage - SW-Timed Input.vi |
---|---|
Digital - Finite Input.vi | |
CVI | Una muestreo |
Read Dig Chan | |
.NET | AcqOneVoltageSample |
ReadDigChan |
Library»NI-DAQmx»Write Functions [CVI]
ChannelWriter Class [.NET]
La función NI-DAQmx Write escribe muestreos desde la tarea de generación especificada. Las diferentes instancias de la función toman en consideración el tipo de generación (analógica o digital), el número de canales virtuales, el número de muestreos y el tipo de datos que serán seleccionados. La función NI-DAQmx Write mueve muestreos desde la memoria del Entorno de Desarrollo de Aplicaciones (ADE) al búfer de PC en RAM. Estos muestreos son transferidos desde el búfer de PC al FIFO en la tarjeta DAQ para ser generados.
Cada instancia de la función NI-DAQmx Write tiene una entrada de inicio automático para determinar si la función iniciará la tarea implícitamente si no ha sido iniciada explícitamente. Como se mencionó anteriormente en la sección NI-DAQmx Start Task de este documento, la función NI-DAQmx Start Task debe ser usada para iniciar explícitamente una tarea de generación que usa temporización de hardware. También debe ser usada para incrementar el rendimiento si la función NI-DAQmx Write será ejecutada varias veces.
Escribir datos en LabVIEW
Las siguientes figuras muestran cuatro ejemplos de diferentes instancias del NI-DAQmx Write VI.
El siguiente diagrama de bloques de LabVIEW, para una generación de salida analógica limitada, incluye una constante Booleana "False" cableada al NI-DAQmx Write VI porque la generación es temporizada por hardware. El NI-DAQmx Write VI ha sido configurado para escribir múltiples muestreos de datos de salida analógica para un canal a la tarea como una forma de onda analógica.
Escribir datos en .NET
Para escribir con la biblioteca NI-DAQmx .NET, use el escritor y los objetos de transferencia. Este proceso es similar a los datos de lectura que se mencionaron arriba.
Para realizar una escritura, cree una instancia de un escritor y pase una instancia de la clase DaqStream en el constructor. Después llame un método en la clase del escritor para escribir los datos, como se muestra en el siguiente snippet:
analogOutTask = new Task();
analogOutTask.AOChannels.CreateVoltageChannel( ... );
//Create the writer and attach it to the stream
AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogOutTask.Stream);
//Perform the write
double[] data = writer.WriteMultiSample(100);
Escribir datos en C/C++
Para escribir datos analógicos use la función DAQmxWriteAnalogF64(). Para información sobre escribir otras formas de datos, vea la Ayuda de Referencia NI-DAQmx C. A continuación, se muestra un snippet de código para escribir 1000 muestras de datos analógicos.
int written = 0;
DAQmxWriteAnalogF64(taskHandle, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, &written, NULL);
Ejemplos para examinar
LabVIEW | Voltage - Finite Output.vi |
---|---|
Digital - Finite Output.vi | |
CVI | Volt Update |
Write Dig Chan | |
.NET | GenVoltageUpdate |
WriteDigChan |
Library»NI-DAQmx»Task Configuration/Control»Wait Until Task Done [CVI]
Task.WaitUntilDone Method [.NET]
La función NI-DAQmx Wait Until Done espera la operación de adquisición de datos para completar antes de terminar. Esta función debe utilizarse para garantizar que la adquisición o generación especificada se complete antes de que se detenga la tarea. La función NI-DAQmx Wait Until Done se usa con mayor frecuencia en operaciones finitas. Una vez que la función ha terminado de ejecutarse, la adquisición o generación limitada está completa y la tarea puede ser detenida sin alterar la operación. Además, la entrada timeout permite que un tiempo de espera máximo sea especificado. Si la adquisición o generación no se completa en este intervalo de tiempo, la función existe y se genera un error correspondiente.
Wait Until Done en LabVIEW
El NI-DAQmx Wait Until Done VI es usado en el siguiente diagrama de bloques de LabVIEW para verificar que la operación de salida analógica limitada es completada antes que la tarea sea liberada.
Wait Until Done en .NET
Para más información sobre usar esta funcionalidad en .NET, vea el ejemplo GenMultVoltUpdates_IntClk.
Wait Until Done en C/C++
La función DAQmxWaitUntilTaskDone() es usada para esperar hasta que todo el muestreo en el búfer ha sido generado. Llámelo después de una función de escritura o inicio.
Ejemplos para examinar
LabVIEW | Digital - Finite Output.vi |
---|---|
Voltage - Finite Output.vi | |
CVI | Dig Pulse |
Mult Volt Updates-Int Clk | |
.NET | GenDigPulse |
GenMultVoltUpdates_IntClk |
Library»NI-DAQmx»Task Configuration/Control»Clear Task [CVI]
Task.Dispose Method [.NET]
Para operaciones continuas, la función NI-DAQmx Clear Task debe ser usada para detener la adquisición o generación actual.
Liberar una tarea en LabVIEW
En el siguiente diagrama de bloques de LabVIEW, una serie de pulsos continuos han sido generados con un contador. Las series de pulsos continúan siendo la salida hasta que se termina el Ciclo While y se ejecuta el NI-DAQmx Clear Task VI.
Liberar una trarea en .NET
Una vez que la tarea ha terminado de leer o escribir, simplemente llame el método Task.Dispose.
Liberar una tarea en C/C++
Una vez que una tarea ha terminado de leer o escribir, use la función DAQmxClearTask().
Ejemplos para examinar
LabVIEW | Voltage - Continuous Output.vi |
---|---|
Counter - Count Edges (Continuous Clock).vi | |
CVI | Cont Gen Volt Wfm-Int Clk |
Cnt Dig Events | |
.NET | ContGenVoltageWfm_IntClk |
CountDigEvents |
Attribute [CVI]
Property [.NET]
NI-DAQmx Properties brinda acceso a todas las propiedades asociadas con una operación de adquisición de datos. Estas propiedades se pueden establecer en NI-DAQmx Properties y los valores actuales de las propiedades también se pueden leer desde NI-DAQmx Properties.
Varias propiedades se pueden establecer usando las funciones NI-DAQmx que se mencionaron anteriormente. Las propiedades Sample Clock Source y Sample Clock Active Edge, por ejemplo, pueden ser establecidas usando la función NI-DAQmx Timing. Sin embargo, a algunas de las propiedades menos usadas solamente se puede tener acceso a través de NI-DAQmx Properties.
Usar propiedades en LabVIEW (Nodos de Propiedad)
En LabVIEW, un Nodo de Propiedad de NI-DAQmx puede ser usado para escribir y/o leer desde múltiples propiedades. Por ejemplo, el siguiente Nodo de Propiedad de Temporización de LabVIEW NI-DAQmx establece la fuente del reloj de muestreo. Después, se lee la fuente del reloj de muestreo. Finalmente, se establece el borde activo del reloj de muestreo.
En el siguiente diagrama de bloques de LabVIEW, se usa un Nodo de Propiedad de Canal NI-DAQmx para permitir el filtro paso bajo del hardware y después establece la frecuencia de corte del filtro para usarse con una medida de galga extensiométrica.
Usar propiedades en .NET
Como se mencionó arriba en la sección de temporización, se establecen varias propiedades en las subclases y colecciones dentro del objeto de la tarea. En el siguiente snippet se muestra una propiedad común usada en NI-DAQmx:
//Create a new NI-DAQmx Task
Task t = new Task();
//Access the subobject properties of the Task class
t.Timing.SamplesPerChannel = 1000;
Usar propiedades en C/C++
Para obtener o establecer propiedades para una tarea, existen funciones individuales para cada propiedad individual. Para información adicional vea la lista de propiedades y sus funciones en la Ayuda de Referencia NI-DAQmx C en Propiedades de NI-DAQmx C.
Ejemplos para examinar
LabVIEW | Strain - Continuous Input.vi |
---|---|
Thermocouple (with OTCD) - Continuous Input.vi | |
CVI | Cont Strain Samples |
Cont Accel Samps-Int Clk-Anlg Start | |
.NET | AcqStrainSamples |
ContAcqAccelSamp_IntClk_AnalogStart |
NI-DAQmx ahorra tiempo de desarrollo y mejora el rendimiento de las aplicaciones de adquisición de datos. Una de las maneras en las que NI-DAQmx ahorra tiempo de desarrollo es proporcionando una API que requiere solamente un pequeño número de funciones para exponer la mayoría de sus funcionalidades. De hecho, se puede resolver el 80% de las aplicaciones de adquisición de datos después de aprender solamente las 10 funciones mencionadas en este documento.