Você está na página 1de 14

Aprenda 10 Funciones en NI-DAQmx y Resuelva el 80% de sus Aplicaciones de Adquisicin de Datos

Fecha de Publicacin: jun 26, 2012


Contenido

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

NI-DAQmx: Reduzca Tiempo de Desarrollo y Mejore el Rendimiento


DAQ Assistant
NI-DAQmx Create Virtual Channel
NI-DAQmx Trigger
NI-DAQmx Timing
NI-DAQmx Start Task
NI-DAQmx Read
NI-DAQmx Write
NI-DAQmx Wait Until Done
NI-DAQmx Clear Task
NI-DAQmx Properties
Conclusin

La Serie de National Instruments de Gua de Inicio para Comenzar a Trabajar con NI-DAQmx tiene
la finalidad de ayudarle a aprender los fundamentos de la programacin NI-DAQmx. Por medio de
tutoriales en video y texto, esta serie lo gua desde verificar la operacin de su dispositivo en
Measurement and Automation Explorer (MAX) hasta programar aplicaciones de adquisicin de
datos usando NI LabVIEW. Tanto para principiantes que desean aprender cmo usar el DAQ Assistant, as como
usuarios experimentados que desean aprovechar la funcionalidad avanzada de NI-DAQmx.
1. NI-DAQmx: Reduzca Tiempo de Desarrollo y Mejore el Rendimiento

Desde el lanzamiento de NI-DAQmx, los usuarios del hardware de adquisicin de datos (DAQ) de National Instruments han
aprovechado la diferentes caractersticas diseadas para ahorrar tiempo de desarrollo y para mejorar el rendimiento de sus
aplicaciones de adquisicin de datos.
Una caracterstica que ahorra una cantidad considerable de tiempo de desarrollo es la Interfaz de Programacin 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 multifuncin es programada con el mismo juego de funciones (entrada
analgica, salida analgica, E/S digital y contadores). Adems, un dispositivo de E/S digital y un dispositivo de salida analgica
son programados usando este mismo juego de funciones. En NI LabVIEW, esto es posible gracias al polimorfismo. Un VI
polimrfico acepta mltiples tipos de datos para una o ms terminales de entrada y/o salida. El NI-DAQmx API tambin es
consistente en todos sus entornos de programacin aplicables. Usted necesita aprender cmo usar solamente un juego de
funciones para poder programar la mayora del hardware de adquisicin de datos de National Instruments en mltiples entornos
de programacin.
Otra caracterstica de NI-DAQmx que mejora su experiencia de desarrollo es el DAQ Assistant. Esta herramienta le ayuda a crear
sus aplicaciones sin programacin a travs de una interfaz grfica para configurar tareas simples y complejas de adquisicin de
datos. Por otra, la sincronizacin, un proceso que generalmente es difcil de implementar debido a las seales de disparo y/o reloj
deben ser enrutadas manualmente, es fcil con NI-DAQmx, el cual realiza automticamente enrutado de seales entre las
diferentes reas funcionales de un solo dispositivo y entre mltiples dispositivos.
Las aplicaciones de adquisicin de datos que usted construye usando NI-DAQmx se benefician de una arquitectura diseada
para maximizar el rendimiento. Esto comienza con un modelo de estado eficiente que elimina reconfiguracin innecesaria. Al
eliminar estos gastos, se optimizan la configuracin y la adquisicin. Adems, 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 caracterstica importante de la arquitectura NI-DAQmx es Measurement Multithreading. Ya que NI-DAQmx es de mltiples
hilos, mltiples operaciones de adquisicin de datos pueden ocurrir simultneamente, mejorando enormemente el rendimiento de
sus aplicaciones que contienen varias operaciones. Tambin simplifica en gran medida 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 adquisicin. Estas funciones se describen en
detalle para ayudarle a comprender su funcionalidad y los tipos de aplicaciones en las cuales son usados.
NOTA: Los ejemplos referenciados en este documento estn disponibles en las siguientes ubicaciones.
LabVIEW

HelpFind ExamplesHardware Input and OutputDAQmx


1/14

www.ni.com

LabWindows/CVI

HelpFind ExamplesHardware Input and OutputDAQmx

.NET

C:\Documents and Settings\All Users\Documents\National Instruments\NI-DAQ\Examples\DotNET2.0 or


C:\Program Files\National Instruments\MeasurementStudioVS2005\DotNET\Examples

2. DAQ Assistant

ToolsCreate/Edit DAQmx Tasks [CVI]


ProjectAdd New ItemDAQmx Task [.NET]

DAQ Assistant es una interfaz grfica para crear, editar y ejecutar de forma interactiva canales virtuales y tareas NI-DAQmx. Un
canal virtual NI-DAQmx consiste de un canal fsico en un dispositivo DAQ y la informacin de configuracin para este canal fsico,
como rango de entrada y escala personalizada. Una tarea NI-DAQmx es una coleccin de canales virtuales, informacin de
temporizacin, disparos y otras propiedades relacionadas con la adquisicin o generacin. En la siguiente figura, el DAQ
Assistant est configurado para realizar una medida de galgas limitada.

Los siguientes documentos describen el uso del DAQ Assistant en NI LabVIEW, NI 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 tambin puede generar cdigo para configurar y/o realizar la adquisicin o la generacin especificada. Este
procedimiento en NI LabVIEW se describe en la Ayuda de DAQ Assistant y en el documento Usar el DAQ Assistant para Generar
Automticamente Cdigo LabVIEW. La siguiente figura muestra una instancia del DAQ Assistant y la configuracin generada
automticamente que resulta y el cdigo ejemplo de NI LabVIEW.

2/14

www.ni.com

Ciertas aplicaciones de adquisicin de datos requieren ms flexibilidad y/o rendimiento que la que ofrece el DAQ Assistant. Estas
aplicaciones requieren las funciones NI-DAQmx simples y potentes, que se describen a continuacin.
3. NI-DAQmx Create Virtual Channel

LibraryNI-DAQmxChannel Creation/Configuration [CVI]


Task.Channel.CreateChannel Property [.NET]

La funcin NI-DAQmx Create Virtual Channel crea un canal virtual y lo aade a una tarea. Tambin puede ser usada para crear
mltiples canales virtuales y aadirlos a una tarea. Cuando una tarea no est especificada, la funcin crea una tarea. La funcin
NI-DAQmx Create Virtual Channel tiene numerosas instancias. Estas instancias corresponden al tipo de medida o generacin
especfica que realiza el canal virtual.
Crear un Canal en NI LabVIEW
La siguiente figura muestra cuatro ejemplos de diferentes instancias del NI-DAQmx Create Virtual Channel VI.

Las entradas de la funcin NI-DAQmx Create Virtual Channel difieren para cada instancia de la funcin. Sin embargo, ciertas
entradas son comunes para la mayora, sino todas, las instancias de la funcin. Por ejemplo, se requiere una entrada para
especificar los canales fsicos (entrada analgica y salida analgica), lneas (digitales) o contador que usarn los canales
virtuales. Adems, las operaciones de entrada analgica, salida analgica y contador usan entradas de valor mnimo y valor
mximo para configurar y optimizar las medidas y generaciones en base a los valores mnimos y mximos esperados de las
seales. Sin embargo, una escala personalizada puede ser aplicada a varios tipos de canales virtuales. En el siguiente
diagrama de bloques de NI LabVIEW, el NI-DAQmx Create Virtual Channel VI es usado para crear un canal virtual de termopar.

3/14

www.ni.com

Crear un Canal en .NET


La mayora de las clases en la biblioteca NI-DAQmx .NET no puede ser directamente ejemplificado. Estas clases son usadas
como sub-objetos de la clase Task.
Estas clases contienen propiedades que son especficas de un tipo de canal en particular. Por ejemplo, las propiedades como
Count solamente son aplicables a contadores y solamente estn disponibles en las clases CIChannel y COChannel. Usted
puede asociar los siguientes tipos de canales con una Task en la biblioteca de clase NI-DAQmx .NET:
Canales de entrada analgicaclase AIChannel
Canales de salida analgicaclaseAOChannel
Canales de entrada digitalclase DIChannel
Canales de salida digitalclase DOChannel
Canales de entrada de contadorclase CIChannel
Canales de salida de contadorclaseCOChannel
La clase Task tiene una propiedad de coleccin de canales para cada uno de los seis tipos de canales AIChannels,
AOChannels, DIChannels, DOChannels, CIChannels y COChannels. Para crear un canal, usted puede usar uno de los varios
mtodos para crear canales en las colecciones de canales.
Despus de ejemplificar un nuevo objeto Task, crear y asignar un objeto AIChannel se realiza al llamar la funcin adecuada en la
clase Channel. El siguiente snippet crea un simple canal de voltaje de entrada analgica:
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 funcin DAQmxCreateTask() para crear una tarea y DAQmxCreateAIVoltageChan() para crear un canal de voltaje de
entrada analgica. Para informacin sobre crear canales de diferentes tipos de medidas, vea la Ayuda de NI-DAQmx Referencia
C. A continuacin un snippet de cmo 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:
4/14

www.ni.com

LabVIEW

Escriba Dig Port.vi


Cont Acq Thermocouple Samples-Int Clk.vi

CVI

Escriba Dig Port


Cont Thrmcpl Samples-Int Clk

.NET

WriteDigPort
ContAcqThermocoupleSamples_IntClk

4. NI-DAQmx Trigger

LibraryNI-DAQmxTriggering [CVI]
Task.Triggers Property [.NET]

La funcin NI-DAQmx Trigger configura un disparo para realizar una especificacin. Las acciones ms usadas son un disparo en
estrella y un disparo de referencia. Un disparo en estrella inicia una adquisicin o generacin. Un disparo en estrella establece
la ubicacin, en un juego de muestras adquiridas, dnde terminar los datos de pre-disparo y comienzan los datos de post-disparo.
Estos dos disparos pueden ser configurados para ocurrir en un borde digital, un borde analgico o cuando una seal analgica
entra o deja una ventana.
Crear un Disparo en NI LabVIEW
En el siguiente diagrama de bloques de NI LabVIEW, son configurados un disparo en estrella y un disparo de referencia, usando
el NI-DAQmx Trigger VI, para ocurrir en bordes digitales para una operacin de entrada analgica.

Varias aplicaciones de adquisicin de datos requieren sincronizacin de diferentes reas funcionales de un solo dispositivo (por
ejemplo, salida analgica y contadores). Otros requieren que mltiples dispositivos sean sincronizados. Para lograr esta
sincronizacin, las seales de disparo deben ser enrutadas entre las diferentes reas funcionales de un solo dispositivo y entre
mltiples dispositivos. NI-DAQmx realiza este enrutado automticamente. Al usar la funcin NI-DAQmx Trigger, todas las seales
de disparo vlidas estn disponibles como la entrada fuente a la funcin. Por ejemplo, en el siguiente NI-DAQmx Trigger VI, la
seal de disparo en estrella para Device 2 est disponible como la fuente del disparo en estrella para Device 1 sin que ningn
enrutado explcito sea realizado.

Crear un Disparo en .NET


Despus de crear un objeto Task en un Canal, usted puede aadir un disparo a la tarea al llamar los mtodos en la coleccin de
disparos Task. El siguiente snippet de cdigo crea un Disparo en Estrella de Borde Digital:
analogInTask = new Task();
DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.Rising;
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("PFI0", triggerEdge);
En base a los parmetros enviados a la funcin ConfigureDigitalEdgeTrigger el dispositivo se ver en una lnea interna o externa
5/14

www.ni.com

En base a los parmetros enviados a la funcin ConfigureDigitalEdgeTrigger el dispositivo se ver en una lnea interna o externa
para un borde digital de incremento o cada antes de comenzar a adquirir datos. El snippet de arriba configura el dispositivo para
verse en PFO 0 para un disparo de borde digital de incremento.
Crear un Disparo en C/C++
Use la funcin DAQmxCfgDigEdgeStartTrig() para crear un disparo en estrella de borde digital. Para informacin sobre crear
diferentes disparos, vea la Ayuda de NI-DAQmx Referencia C. A continuacin est un snippet que muestra cmo usar la funcin
para un disparo en estrella digital que viene en PFI0 y que busca un borde de incremento en esa lnea.
char
int

startTrigger[256] = "Dev1/PFI0";
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 Caractersticas de Temporizacin y Sincronizacin de NI-DAQmx contiene informacin adicional referente al uso de
la funcin NI-DAQmx Trigger para realizar sincronizacin con NI-DAQmx.
Ejemplos para Examinar:
LabVIEW

Acq&Graph Voltage-Int Clk-Dig Start&Ref.vi


Cont Acq&Graph Voltage-Int Clk-Analog Start.vi

CVI

Acq-Int Clk-Dig Start&Ref


Cont Acq-Int Clk-Anlg Start

.NET

AcqVoltageSamples_IntClkDigStartAndRef
ContAcqVoltageSamples_IntClkAnalogStart

5. NI-DAQmx Timing

LibraryNI-DAQmxTiming [CVI]
Task.Timing Property [.NET]

La funcin NI-DAQmx Timing configura la temporizacin para operaciones de adquisicin de datos temporizadas por hardware.
Esto incluye especificar si la operacin ser continua o limitada, seleccionar el nmero de muestreos para adquirir o generar para
operaciones limitadas y crear un bfer cuando sea necesario.
Para operaciones que requieren temporizacin (entrada analgica, salida analgica y contador), la instancia Sample Clock de la
funcin 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 adquisicin o generacin de un muestreo para cada canal virtual incluido en la tarea.
Configurar Temporizacin de Tareas en NI LabVIEW
El siguiente diagrama de bloques de NI LabVIEW demuestra el uso de la instancia del Reloj de Muestreo del NI-DAQmx Timing
VI para configurar una generacin de salida analgica continua con un reloj de muestreo externo.

6/14

www.ni.com

Para lograr sincronizacin en aplicaciones de adquisicin de datos, as como las seales de disparo deben estar enrutadas entre
las diferentes reas funcionales de un solo dispositivo y entre mltiples dispositivos, las seales de temporizacin tambin deben
estar enrutadas de la misma manera. NI-DAQmx tambin realiza este enrutado automticamente. Todas las seales de
temporizacin estn disponibles como la entrada fuente a la funcin NI-DAQmx Timing. Por ejemplo, en el siguiente DAQmx
Timing VI, la seal de reloj de muestreo de salida analgica del dispositivo est disponible como la fuente del reloj de muestreo
para los canales de entrada analgica, sin que ningn enrutado explcito sea realizado.

El documento Caractersticas de Temporizacin y Sincronizacin de NI-DAQmx contiene informacin adicional referente al uso de
la funcin NI-DAQmx Timing para realizar sincronizacin con NI-DAQmx.
La mayora de las operaciones de contador no requieren temporizacin de muestreo ya que la seal medida ofrece la
temporizacin. La instancia Implicit de la funcin NI-DAQmx Timing debe ser usada para estas aplicaciones. En el siguiente
diagrama de bloques de NI LabVIEW, la instancia implcita del NI-DAQmx Timing VI es usada para configurar una adquisicin de
ancho de pulso a bfer para ser limitada con un nmero especfico de muestreos.

Configurar Temporizacin de Tareas en .NET


Para establecer la fuente del reloj de muestreo, la velocidad del reloj de muestreo y el nmero de muestreos a adquirir o generar
usan la funcin Channel.Timing.ConfigureSampleClock(). El siguiente snippet de cdigo crea una adquisicin 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 Temporizacin de Tareas en C/C++
Use la funcin DAQmxCfgSampClkTiming para configurar temporizacin de tareas en C o C++. El siguiente snippet de cdigo
muestra su uso para un reloj interno que se ejecuta a 10000 hz.
char
float64

clockSource[256] = "";
rate = 10000;

DAQmxCfgSampClkTiming(taskHandle, clockSource, rate, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);


Ciertos dispositivos de adquisicin de datos emplean protocolo de sincronizacin como la temporizacin de sus operaciones de
7/14

www.ni.com

Ciertos dispositivos de adquisicin de datos emplean protocolo de sincronizacin como la temporizacin de sus operaciones de
E/S digital. El Protocolo de Sincronizacin utiliza un intercambio de seales de temporizacin conocidas con un dispositivo
externo para transferir cada muestreo. La instancia Handshaking de la funcin NI-DAQmx Timing configura la temporizacin de
protocolo de sincronizacin para operaciones de E/S digital.
Ejemplos para Examinar:
LabVIEW

Cont Gen Voltage Wfm-Ext Clk.vi


Meas Buffered Semi-Period-Finite.vi

CVI

Cont Gen Volt Wfm-Ext Clk


Buff Semi-Period-Finite

.NET

ContGenVoltageWfm_ExtClk
MeasBuffered_SemiPeriodFinite

6. NI-DAQmx Start Task

LibraryNI-DAQmxTask Configuration/ControlStart Task [CVI]


Task.Start Method [.NET]

Como se mencion en la Introduccin, el modelo de estado usado por NI-DAQmx elimina reconfiguracin 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. Informacin detallada referente a cada uno de estos estados est disponible en la Ayuda de NI-DAQmx
en Key NI-DAQmx ConceptsTasksTask State Model.
La funcin NI-DAQmx Start Task transforma explcitamente una tarea al estado de ejecucin. En el estado de ejecucin, la tarea
realiza la adquisicin o generacin especificada. Una tarea ser transformada implcitamente al estado de ejecucin o iniciada
automticamente, si no es usada la funcin NI-DAQmx Start Task cuabdi la funcin NI-DAQmx Read se ejecuta. Esta transicin
implcita tambin ocurre si la funcin NI-DAQmx Start Task no es usada y la funcin NI-DAQmx Write se ejecuta con su entrada
automtica especificada de acuerdo a esto.
Aunque no siempre se requiere, es preferible usar la funcin NI-DAQmx Start Task para iniciar explcitamente una tarea que
involucra una adquisicin o generacin temporizada por hardware. Adems, si la funcin NI-DAQmx Read o la funcin NI-DAQmx
Write sern ejecutadas varias veces, como en un ciclo, la funcin NI-DAQmx Start Task tambin debe ser usada. De otra manera,
el rendimiento de la tarea ser reducido debido a que ser iniciada y detenida repetidamente. Informacin adicional que describe
cuando usar la funcin NI-DAQmx Start Task est disponible en la Ayuda NI-DAQmx en Key NI-DAQmx ConceptsTasks
Explicitly Starting a Task.
Iniciar una Tarea en NI LabVIEW
El siguiente diagrama de bloques de NI LabVIEW demuestra una situacin donde la funcin NI-DAQmx Start no necesita ser
usada ya que la generacin de salida analgica solamente consiste de un solo muestreo temporizado por software.

Por el contrario, el siguiente diagrama de bloques de NI LabVIEW demuestra una situacin donde la funcin NI-DAQmx Start
debera ser usada ya que la funcin NI-DAQmx Read es ejecutada varias veces para lectura desde el contador.

8/14

www.ni.com

Iniciar una Tarea en .NET


Para iniciar una tarea, use la funcin Start() en el objeto Task. El siguiente snippet de cdigo muestra el uso de la funcin Start().
analogInTask = new Task();
analogInTask.AIChannels.CreateVoltageChannel( ... );
analogInTask.Timing.ConfigureSampleClock( ... );
analogInTask.Start();
Iniciar una Tarea en C/C++
Para iniciar una tarea use la funcin DAQmxStartTask(). Un snippet de cdigo a continuacin.
DAQmxStartTask(taskHandle);
Ejemplos para Examinar:
LabVIEW

Gen Dig Pulse Train-Continuous.vi


Cont Acq 0-20mA Current Samples-Int Clk.vi

CVI

Dig Pulse Train-Cont


Cont 0-20mA Samps-Int Clk

.NET

GenDigPulseTrain_Continuous
ContAcq0_20mACurrentSamples_IntClk

7. NI-DAQmx Read

LibraryNI-DAQmxRead Functions [CVI]


ChannelReader Class [.NET]

La funcin NI-DAQmx Read lee muestreos desde la tarea de adquisicin especificada. Las diferentes instancias de la funcin
toman en consideracin el tipo de adquisicin (analgica, digital o contador), el nmero de canales virtuales, el nmero de
muestreos y el tipo de datos que sern seleccionados. Una vez que el nmero de muestreos ha sido transferido desde el FIFO en
la tarjeta DAQ al Bfer de PC en RAM, la funcin NI-DAQmx Read mueve los muestreos desde le Bfer de PC a la Memoria del
Entorno de Desarrollo de Aplicaciones (ADE).
Leer Datos en NI LabVIEW
Las siguientes figuras muestran cuatro ejemplos de diferentes instancias del NI-DAQmx Read VI.

Las instancias de la funcin NI-DAQmx Read que son capaces de leer mltiples muestreos incluyen una entrada para especificar
el nmero de muestreos por canal para leer cuando la funcin se ejecuta. Para adquisiciones limitadas, al especificar un
nmero de muestreos por canal de -1, la funcin espera todos los muestreos solicitados para ser adquiridos y despus lee
estos muestreos. Especificar un nmero de muestreos por canal de -1 para una adquisicin continua da como resultado todos
los muestreos que estn disponibles en el bfer cuando la funcin se ejecuta. En el siguiente diagrama de bloques de NI
LabVIEW, el NI-DAQmx Read VI ha sido configurado para leer mltiples muestreos desde mltiples canales virtuales de entrada
analgica y regresa los datos como formas de onda. Adems, ya que la entrada del nmero 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.
9/14

www.ni.com

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 patrn de programacin es similar al
patrn usado a en todo el .NET Framework para E/S de archivo y red.
La clase DaqStream tiene propiedades relacionadas con E/S, como CurrentReadPosition y mtodos para E/S original. Para
obtener una instancia de la clase DaqStream que corresponda a una Task en particular, use la propiedad Stream. 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. Despus llame un mtodo 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);
Lectura de datos en C/C++
Use la funcin DAQmxReadAnalogF64() para leer datos analgicos desde una tarea de entrada analgica en C o C++. Para
funciones de lectura adicionales, vea la Ayuda de NI-DAQmx Referencia C. Un snippet de cdigo 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

Acq One Sample.vi


Read Dig Chan.vi

CVI

One Sample
Read Dig Chan

.NET

AcqOneVoltageSample
ReadDigChan

8. NI-DAQmx Write

LibraryNI-DAQmxWrite Functions [CVI]


ChannelWriter Class [.NET]

La funcin NI-DAQmx Write escribe muestreos desde la tarea de generacin especificada. Las diferentes instancias de la funcin
toman en consideracin el tipo de generacin (analgica o digital), el nmero de canales virtuales, el nmero de muestreos y el
tipo de datos que sern seleccionados. La funcin NI-DAQmx Write mueve muestreos desde la Memoria del Entorno de
Desarrollo de Aplicaciones (ADE) al Bfer de PC en RAM. Estos muestreos son transferidos desde el Bfer de PC al FIFO en la
tarjeta DAQ para ser generados.
Cada instancia de la funcin NI-DAQmx Write tiene una entrada de inicio automtico para determinar si la funcin iniciar la tarea
10/14

www.ni.com

Cada instancia de la funcin NI-DAQmx Write tiene una entrada de inicio automtico para determinar si la funcin iniciar la tarea
implcitamente si no ha sido iniciada explcitamente. Como se mencion anteriormente en la seccin NI-DAQmx Start Task de
este documento, la funcin NI-DAQmx Start Task debe ser usada para iniciar explcitamente una tarea de generacin que usa
temporizacin de hardware. Tambin debe ser usada para incrementar el rendimiento si la funcin NI-DAQmx Write ser
ejecutada varias veces.
Escribir Datos en NI LabVIEW
Las siguientes figuras muestran cuatro ejemplos de diferentes instancias del NI-DAQmx Write VI.

El siguiente diagrama de bloques de NI LabVIEW, para una generacin de salida analgica limitada, incluye una constante
Booleana "False" cableada al NI-DAQmx Write VI porque la generacin es temporizada por hardware. El NI-DAQmx Write VI ha
sido configurado para escribir mltiples muestreos de datos de salida analgica para un canal a la tarea como una forma de onda
analgica.

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.
Despus llame un mtodo 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 analgicos use la funcin DAQmxWriteAnalogF64(). Para informacin sobre escribir otras formas de datos,
vea la Ayuda de NI-DAQmx Referencia C. Un snippet de cdigo para escribir 1000 muestreos de datos analgicos.
int written = 0;
DAQmxWriteAnalogF64(taskHandle, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, &written, NULL);
Ejemplos para Examinar
LabVIEW

Gen Voltage Update.vi


Write Dig Chan.vi

CVI

Volt Update
Write Dig Chan

.NET

GenVoltageUpdate
WriteDigChan

9. NI-DAQmx Wait Until Done

LibraryNI-DAQmxTask Configuration/ControlWait Until Task Done [CVI]


11/14

www.ni.com

Task.WaitUntilDone Method [.NET]

La funcin NI-DAQmx Wait Until Done espera la operacin de adquisicin de datos para completar antes de terminar. Esta
funcin debe ser usada para asegurar que la adquisicin o generacin especificada es completada antes que la tarea sea
detenida. Lo ms comn, la funcin NI-DAQmx Wait Until Done es usada con operaciones limitadas. Una vez que la funcin ha
terminado de ejecutarse, la adquisicin o generacin limitada est completa y la tarea puede ser detenida sin alterar la operacin.
Adems, la entrada timeout permite que un tiempo de espera mximo sea especificado. Si la adquisicin o generacin no se
completa en este intervalo de tiempo, la funcin existe y es generado un error correspondiente.
Wait Until Done en LabVIEW
El NI-DAQmx Wait Until Done VI es usado en el siguiente diagrama de bloques de NI LabVIEW para verificar que la operacin de
salida analgica limitada es completada antes que la tarea sea liberada.

Wait Until Done en .NET


Para ms informacin sobre usar esta funcionalidad en .NET, vea el ejemplo GenMultVoltUpdates_IntClk.
Wait Until Done en C/C++
La funcin DAQmxWaitUntilTaskDone() es usada para esperar hasta que todo el muestreo en el bfer ha sido generado. Llmelo
despus de una funcin de escritura o inicio.
Ejemplos para Examinar
LabVIEW

Gen Dig Pulse.vi


Gen Mult Volt Updates-Int Clk.vi

CVI

Dig Pulse
Mult Volt Updates-Int Clk

.NET

GenDigPulse
GenMultVoltUpdates_IntClk

10. NI-DAQmx Clear Task

LibraryNI-DAQmxTask Configuration/ControlClear Task [CVI]


Task.Dispose Method [.NET]

La funcin NI-DAQmx Clear Task libera la tarea especificada. Si la tarea se est ejecutando, primero la funcin detiene la tarea y
despus todos sus recursos. Una vez que la tarea ha sido liberada, no puede ser usada a menos que sea recreada. De esa
manera, si una tarea ser usada otra vez, la funcin NI-DAQmx Stop Task debe ser usada para detener la tarea, pero no para
liberarla.
Para operaciones continuas, la funcin NI-DAQmx Clear Task debe ser usada para detener la adquisicin o generacin actual.
Liberar una Tarea en NI LabVIEW
En el siguiente diagrama de bloques de NI LabVIEW, una serie de pulsos continuos han sido generados con un contador. Las
series de pulsos continan siendo la salida hasta que se termina el Ciclo While y se ejecuta el NI-DAQmx Clear Task VI.

12/14

www.ni.com

Liberar una Tarea en .NET


Una vez que la tarea ha terminado de leer o escribir, simplemente llame el mtodo Task.Dispose.
Liberar una Tarea en C/C++
Una vez que una tarea ha terminado de leer o escribir, use la funcin DAQmxClearTask().
Ejemplos para Examinar
LabVIEW

Cont Gen Voltage Wfm-Int Clk.vi


Count Digital Events.vi

CVI

Cont Gen Volt Wfm-Int Clk


Cnt Dig Events

.NET

ContGenVoltageWfm_IntClk
CountDigEvents

11. NI-DAQmx Properties

Attribute [CVI]
Property [.NET]
NI-DAQmx Properties brinda acceso a todas las propiedades asociadas con una operacin de adquisicin de datos. Estas
propiedades pueden ser establecidas al escribir en NI-DAQmx Properties y los valores actuales de las propiedades tambin se
pueden leer desde el 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 funcin NI-DAQmx
Timing. Sin embargo, a algunas de las propiedades menos usadas solamente se puede tener acceso a travs de NI-DAQmx
Properties.
Usar Propiedades en NI LabVIEW (Nodos de Propiedad)
En LabVIEW, un Nodo de Propiedad de NI-DAQmx puede ser usado para escribir y/o leer desde mltiples propiedades. Por
ejemplo, el siguiente Nodo de Propiedad de Temporizacin de LabVIEW NI-DAQmx establece la fuente del reloj de muestreo.
Despus, se lee la fuente del reloj de muestreo. Finalmente, se establece el flanco activo del reloj.

En el siguiente diagrama de bloques de NI LabVIEW, es usado un Nodo de Propiedad de Canal NI-DAQmx para permitir el filtro
paso bajo del hardware y despus establece la frecuencia de corte del filtro para usarse con una medida de galga
extensiomtrica.

13/14

www.ni.com

Usar Propiedades en .NET


Como se mencion arriba en la seccin de Temporizacin, varias propiedades son establecidas en las subclases y colecciones
dentro del objeto de la tarea. En el siguiente snippet se muestra una propiedad comn 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 "getter and setter" individuales para cada propiedad
individual. Para informacin adicional vea la lista de propiedades y sus funciones en la Ayuda de NI-DAQmx Referencia C en
NI-DAQmx C Properties.
Ejemplos para Examinar
LabVIEW

Cont Acq Strain Samples.vi


Cont Acq Accel Samples-Int Clk-Analog Start.vi

CVI

Cont Strain Samples


Cont Accel Samps-Int Clk-Anlg Start

.NET

AcqStrainSamples
ContAcqAccelSamp_IntClk_AnalogStart

12. Conclusin

NI-DAQmx ahorra tiempo de desarrollo y mejora el rendimiento de las aplicaciones de adquisicin de datos. Una de las maneras
en las que NI-DAQmx ahorra tiempo de desarrollo es al proporcionar un API que requiere solamente un pequeo nmero de
funciones para exponer la mayora de sus funcionalidades. De hecho, el 80% de las aplicaciones de adquisicin de datos pueden
ser resueltas despus de aprender solamente las 10 funciones mencionadas en este documento.

14/14

www.ni.com