Vous êtes sur la page 1sur 0

N

a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
LabVIEW

Core 2
Manual de Curso
ni.com/training
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
LabVIEW
TM

Core 2
Manual de Curso
Versin del software actual 2012
Edicin de Agosto 2012
Nmero de parte 325292D-0154
Manual de Curso LabVIEW Core 2
Copyright
19932012 National Instruments. Todos los derechos reservados.
En virtud de las leyes de copyright y de proteccin de los derechos de autor, esta publicacin no puede reproducirse ni transmitirse
en ninguna forma, electrnica o mecnica, incluidas las fotocopias, grabacin, almacenamiento en un sistema de recuperacin de
informacin, o traduccin, en su totalidad o en parte, sin el consentimiento previo por escrito de National Instruments Corporation.
National Instruments respeta los derechos de propiedad intelectual de otros, y solicitamos a nuestros usuarios que hagan lo mismo.
El software de NI est protegido por el derecho de autor y las normas de la propiedad intelectual. Aunque el software de NI puede
utilizarse para reproducir software u otro material perteneciente a otros, el software de NI slo podr utilizarse para reproducir
material que pueda reproducir conforme a los trminos de cualquier licencia aplicable u otra restriccin legal.
Contrato de licencia de usuario final y avisos legales a terceros
El contrato de licencia de usuario final (EULA) y avisos legales a terceros se puede encontrar en las siguientes localidades:
Los avisos se localizan en los directorios <National Instruments>\_Legal Information y <National
Instruments>.
Contrato de licencia de usuario final se localiza en el directorio <National Instruments>\Shared\MDF\
Legal\License.
Revise <National Instruments>\_Legal Information.txt para ms informacin legal sobre los instaladores
desarrollados con productos de NI.
Marcas comerciales
CVI, LabVIEW, National Instruments, NI, ni.com, el logotipo corporativo de National Instruments, y el logotipo del aguila son
marcas propiedad de National Instruments Corporation. Por favor, consulte Trademark Information en la pgina ni.com/
trademarks para informacin sobre otras marcas de National Instruments.
The mark LabWindows is used under a license from Microsoft Corporation. Windows is a registered trademark of Microsoft
Corporation in the United States and other countries. Otros nombres de productos y de empresas mencionados aqu son marcas o
nombres comerciales de sus respectivas empresas.
Los miembros del National Instruments Alliance Partner Program son entidades comerciales independientes de National
Instruments y no tienen relacin de agencia, asociacin ni empresa conjunta con National Instruments.
Patentes
Para obtener informacin sobre las patentes que protegen los productos o la tecnologa de National Instruments, consulte el
apartado: HelpPatents en su software, el archivo patents.txt en el soporte del mismo, o el Aviso sobre las Patentes de
National Instruments (National Instruments Patent Notice) en ni.com/patents.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Informacin del producto y soporte tcnico mundial
ni.com
Oficinas internacionales
Visite ni.com/niglobal para acceder a las pginas web de las oficinas internacionales, las cuales incluyen informacin
actualizada de contacto, telfonos de soporte tcnico, direcciones de email y eventos actuales.
Oficinas centrales de National Instruments Corporation
11500 North Mopac Expressway Austin, Texas 78759-3504 USA Tel: 512 683 0100
Para obtener informacin adicional de soporte, consulte el apndice Informacin Adicional y Recursos. Para realizar comentarios a
National Instruments sobre la documentacin, consulte la pgina web de National Instruments Web ni.com/info e introduzca
el cdigo de informacin feedback.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
National Instruments | iii
Contenido
Gua del estudiante
A. Certificacin de NI................................................................................................v
B. Descripcin del curso............................................................................................ v
C. Lo que necesita para empezar ...............................................................................vi
D. Instalacin del software del curso......................................................................... vii
E. Objetivos del curso ............................................................................................... vii
F. Convenciones del curso ........................................................................................viii
Leccin 1
Ms all del flujo de datos
A. Comunicacin asncrona....................................................................................... 1-2
B. Colas .....................................................................................................................1-2
C. Programacin orientada a eventos ........................................................................1-5
Leccin 2
Implementando patrones de diseo
A. Patrones de diseo ................................................................................................2-2
B. Patrones de diseo simple.....................................................................................2-2
C. Patrones de diseo de bucles mltiples.................................................................2-8
D. Gestores de errores................................................................................................ 2-15
E. Generando cdigos de error y mensajes ............................................................... 2-18
F. Temporizar un patrn de diseo ........................................................................... 2-20
G. Patrn de diseo variable global funcional..........................................................2-25
Leccin 3
Control de la interfaz de usuario
A. Arquitectura del VI Server....................................................................................3-2
B. Nodos de Propiedad.............................................................................................. 3-3
C. Nodos de Invocacin ............................................................................................3-4
D. Referencias de control .......................................................................................... 3-5
Leccin 4
Tcnicas de E/S de fichero
A. Comparando formatos de archivo......................................................................... 4-2
B. Crear rutas de archivos y carpetas ........................................................................ 4-4
C. Lectura y escritura de archivos binarios ............................................................... 4-6
D. Trabajar con archivos de texto y encabezados multicanal.................................... 4-12
E. Acceso de archivos TDMS en LabVIEW y Excel................................................4-17
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
National Instruments | v
Gua del estudiante
Gracias por comprar el paquete del curso LabVIEW Core 2. Despus de completar el curso, podr
empezar a desarrollar una aplicacin. El manual del curso y el software adjunto se utilizan en el
curso prctico de dos das LabVIEW Core 2.
Puede aplicar la adquisicin completa de este paquete de curso a la cuota de registro
correspondiente, si se inscribe antes de 90 das desde la compra del paquete. Visite
ni.com/training para consultar en lnea la programacin, el contenido, los centros de
formacin y la inscripcin a la clase del curso.
A. Certificacin de NI
El curso LabVIEW Core 2 forma parte de una serie de cursos diseados para dominar LabVIEW y
ayudarle a prepararse para el examen de Desarrollador Asociado Certificado de LabVIEW de NI.
La siguiente ilustracin muestra los cursos que forman parte de la serie de formacin de LabVIEW.
Consulte ni.com/training para obtener informacin adicional acerca de la certificacin de NI.
B. Descripcin del curso
El curso LabVIEW Core 2 le ensea conceptos, tcnicas, caractersticas, VIs y funciones de
programacin de LabVIEW que puede utilizar para crear aplicaciones de prueba y medicin,
adquisicin de datos, control de instrumentos, registro de datos, anlisis de mediciones y
generacin de informes. Este manual del curso supone que est familiarizado con Windows, que
tiene experiencia en escribir algoritmos en forma de diagramas de flujo o diagramas de bloques y
que ha realizado el curso LabVIEW Core 1 o tiene una experiencia equivalente. Los manuales de
ejercicios y del curso estn divididos en lecciones, organizadas de este modo.
Advanced User
LabVIEW Core 1*
LabVIEW Core 2*
Certified LabVIEW
Architect Exam
New User Experienced User
Advanced Architectures
in LabVIEW
*Core courses are strongly recommended to realize maximum productivity gains when using LabVIEW.
Courses
Certifications
Other Courses
Certified LabVIEW
Associate Developer Exam
LabVIEW Instrument Control
Modular Instruments Series
LabVIEW Real-Time 2
LabVIEW FPGA
LabVIEW Real-Time 1
LabVIEW DAQ and Signal Conditioning
Managing Software
Engineering in LabVIEW
LabVIEW Performance
Object-Oriented Design
and Programming
in LabVIEW
LabVIEW Connectivity
Certified LabVIEW
Developer Exam
LabVIEW Core 3*
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Gua del estudiante
vi | ni.com
En el manual del curso, cada leccin consta de lo siguiente:
Una introduccin que describe el objetivo de la leccin y lo que aprender
Una descripcin de los temas de la leccin
Un cuestionario de resumen que prueba conceptos y conocimientos importantes desarrollados
en la leccin
En el manual de ejercicios, cada leccin consta de lo siguiente:
Un conjunto de ejercicios para reforzar esos temas
Algunas lecciones incluyen secciones de ejercicios opcionales y de retos o un conjunto de
ejercicios adicionales para realizar si el tiempo lo permite.
Nota Para ver actualizaciones y correcciones del manual de ejercicios y del curso,
consulte ni.com/info y escriba el Cdigo de Informacin core2.
Varios ejercicios utilizan un dispositivo multifuncin de adquisicin de datos (DAQ) conectado a
un Accesorio de Seales DAQ o BNC-2120 que contiene un sensor de temperatura, un generador
de funciones y LEDs.
Aunque no disponga de este hardware, puede realizar los ejercicios. Se ofrecen otras instrucciones
para realizar los ejercicios sin hardware. Tambin puede sustituir otro hardware por los
mencionados anteriormente. Por ejemplo, puede utilizar otro dispositivo DAQ de National
Instruments conectado a una fuente de seales, como un generador de funciones.
C. Lo que necesita para empezar
Antes de usar este manual del curso, debe tener todos estos elementos:
Ordenador ejecutando Windows 7/Vista/XP
Dispositivo DAQ multifuncin configurado como Dev1 utilizando Measurement &
Automation Explorer (MAX)
Accesorio de seales DAQ o BNC-2120, conectores y cable
LabVIEW Professional Development System 2012 o posterior
DAQmx 9.5.5 o posterior
CD del curso LabVIEW Core 2, desde donde instala las siguientes carpetas:
Directorio Descripcin
Exercises Contiene los VIs utilizados en el curso
Solutions Contiene los ejercicios del curso corregidos
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | vii
D. Instalacin del software del curso
Complete estos pasos para instalar el software del curso.
1. Inserte el CD del curso en el ordenador. Aparecern los cuadros de dilogo de
LabVIEWCore 2 Course Setup
2. Haga clic en Install the course materials.
3. Siga las instrucciones en la pantalla para completar la instalacin y configuracin.
Los archivos de ejercicios se encuentran en la carpeta <Exercises>\LabVIEW Core 2\ .
Nota Los nombres de carpetas entre corchetes angulares, como <Exercises>, hacen
referencia a carpetas del directorio raz de su ordenador.
E. Objetivos del curso
Este curso le prepara para hacer lo siguiente:
Aplicar patrones de diseo comunes que utilicen notificadores, colas y eventos
Usar la programacin de eventos de forma eficaz
Controlar programticamente objetos de la interfaz de usuario
Evaluar formatos de E/S de ficheros binarios y utilizarlos en aplicaciones
Modificar cdigo existente para mejorar la usabilidad
Preparar, crear y desplegar aplicaciones independientes
Este curso no describe nada de lo siguiente:
Mtodos de programacin de LabVIEW tratados en el curso LabVIEW Core 1.
Cada VI, funcin u objeto integrado; consulte la Ayuda de LabVIEW para obtener informacin
adicional acerca de las funciones de LabVIEW no descritas en este curso.
Desarrollar una aplicacin completa para cualquier estudiante de la clase; consulte el
NI Example Finder seleccionando HelpFind Examples, para ver ejemplos de VIs que puede
utilizar e incorporar en los VIs que cree
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Gua del estudiante
viii | ni.com
F. Convenciones del curso
Los siguientes convenios aparecen en este manual del curso:
El smbolo le gua por los elementos de men anidados y las opciones de
cuadros de dilogo a una accin final. La secuencia Tools
InstrumentationFind Instrument Drivers le guia a desplegar men
Tools , seleccionar Instrumentation , y finalmente seleccionar la opcin
Find Instrument Drivers.
Este icono indica un consejo, que le alerta de recomendaciones.
Este icono indica una nota, que le alerta de informacin importante.
Este icono indica una precaucin, para que tome precauciones y evite
lesiones, prdida de datos o una cada del sistema.
negrita El texto en negrita indica que debe seleccionar el software o hacer clic en l,
como elementos de men y opciones del cuadro de dilogo. El texto en
negrita denota tambin las secciones de los cuadros de dilogo y etiquetas
de hardware.
cursiva El texto en cursiva indica variables, nfasis, una referencia cruzada o una
introduccin a un concepto clave. El texto en cursiva tambin indica texto
que es un parmetro de sustitucin para una palabra o un valor que debe
proporcionar.
monospace El texto con esta fuente indica texto o caracteres que debe escribir con el
teclado, secciones de cdigo, ejemplos de programacin y ejemplos de
sintaxis. Esta fuente tambin se utiliza para los nombres propios de unidades
de disco, rutas, directorios, programas, subprogramas, subrutinas, nombres
de dispositivos, funciones, operaciones, variables, nombres de archivos y
extensiones.
monospace bold El texto en negrita con esta fuente indica los mensajes y las respuestas que
el ordenador imprime automticamente en la pantalla. Esta fuente tambin
enfatiza lneas de cdigo distintas de los otros ejemplos.
Platform El texto con esta fuente indica una plataforma concreta y que el texto que le
sigue se aplica slo a esa plataforma.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
National Instruments | 1-1
1
Ms all del flujo de datos
Como usted aprendi en LabVIEW Core 1, LabVIEW es un lenguaje donde el flujo de datos
determina el orden de ejecucin de los elementos de un diagrama de bloques. Un nodo del
diagrama de bloques se ejecuta cuando se reciben todas las entradas requeridas. Cuando se ejecuta
un nodo, produce datos de salida y pasa los datos al siguiente nodo de la ruta del flujo de datos. El
movimiento de los datos a travs de los cables y nodos determina el orden de ejecucin de los VIs
y las funciones del diagrama de bloques. Este tipo de comunicacin entre nodos se denomina
comunicacin sncrona.
Temas
A. Comunicacin asncrona
B. Colas
C. Programacin orientada a eventos
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-2 | ni.com
A. Comunicacin asncrona
Aunque LabVIEW es un lenguaje de flujo de datos que utiliza cables para transferir datos entre
funciones, hay situaciones en las que la comunicacin asncrona, o sin cables, es deseable. En esta
leccin aprenders dos tcnicas importantes para la comunicacin asncronacolas para
comunicacin entre bucles paralelos y eventos para comunicacin entre la interfaz de usuario y el
diagrama de bloques.
B. Colas
Utilice colas para comunicar datos entre los bucles paralelos en LabVIEW. Una cola puede
contener datos de cualquier tipo y adems almacenar mltiples piezas de datos. De forma
predeterminada las colas funcionan con la estrategia primero en entrar, primero en salir, en ingls
First In First Out (FIFO). Por lo tanto, el primer dato de una cola es el primero en salir de ella. Use
una cola cuando desee procesar todos los datos que contenga.
Las variables resultan tiles en LabVIEW para pasar datos entre procesos paralelos. Sin embargo,
cuando se usan variables a menudo es difcil sincronizar la transferencia de datos, que puede causar
leer datos duplicados o perder datos. Adicionalmente, se debe tener cuidado para evitar las
condiciones de carrera. Esta leccin presenta las colas como mtodos alternativos para pasar datos
entre procesos paralelos. Los colas tienen ventajas respecto al uso de variables por la posibilidad
de sincronizar la transferencia de datos.
Operaciones de cola
Utilice las funciones de operacin de cola para crear y utilizar las colas en la comunicacin de datos
entre las distintas secciones del VI y otros VIs.
Tabla 1-1 describe las funciones de operacin de cola a utilizar en este curso.
Tabla 1-1. Funciones de operacin de cola
Funciones Descripcin
Dequeue Element Elimina un elemento de la parte frontal de una cola y retorna
este elemento.
Enqueue Element Aade un elemento en la parte posterior de la cola.
Enqueue Element at Opposite
End
Aade un elemento en la parte frontal de la cola.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-3
Consulte el tema Queue Operations Functions en la Ayuda de LabVIEW para obtener una lista
completa y una descripcin de las operaciones de cola.
Cuando se usa el patrn de diseo productor/consumidor, las colas pasan datos y sincronizan los
bucles como se muestra en la figura 1-1.
Figura 1-1. Patrn de diseo (datos) del productor/consumidor usando colas
Get Queue Status Retorna informacin sobre el estado actual de una cola, tales
como el nmero de elementos actualmente en la cola.
Obtain Queue Retorna la referencia a una cola.
Release Queue Libera la referencia de una cola.
Tabla 1-1. Funciones de operacin de cola (Continuacin)
Funciones Descripcin
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-4 | ni.com
La cola se crea antes de que los bucles empiecen a usar la funcin Obtain Queue. El bucle productor
usa la funcin Enqueue Element para aadir datos a la cola. El bucle consumidor elimina los datos
de la cola utilizando la funcin Dequeue Element. El bucle consumidor no se ejecuta hasta que
haya datos en la cola. Una vez que el VI ha terminado de usar las colas, la funcin Release Queue
las libera. Cuando se libera la cola, la funcin Dequeue Element genera un error, deteniendo
efectivamente el bucle consumidor. As no hay por qu utilizar una variable para detener los bucles.
Estas son las ventajas de usar colas en el patrn de diseo productor / consumidor:
Ambos bucles se sincronizan con el bucle productor. El bucle consumidor slo se ejecuta
cuando haya datos en la cola.
Puede utilizar colas para crear datos en cola disponibles globalmente, eliminando la posibilidad
de prdida de datos en la cola cuando se aadan datos nuevos a ella.
El uso de colas crea cdigo eficaz. No necesita sondear para determinar cundo habr datos
disponibles desde el bucle productor.
Las colas tambin son tiles para albergar solicitudes de estado en una mquina de estados. En la
implementacin de una mquina de estados que ha aprendido, si se solicitan dos estados
simultneamente, puede perder uno de ellos. Una cola almacena la segunda solicitud de estado y
la ejecuta cuando ha terminado la primera.
Caso de Estudio: Proyecto de Estacin Meteorolgica
El proyecto de la estacin meteorolgica adquiere datos de temperatura y de velocidad del viento
y los analiza para determinar si la situacin requiere una alarma. Si la temperatura es demasiado
alta o baja, alerta al usuario de un peligro de golpe de calor o congelacin. Tambin controla la
velocidad del viento para generar una alarma de fuerte viento en su caso.
El diagrama de bloques consta de dos bucles paralelos, que se sincronizan utilizando colas. Un
bucle adquiere datos para la temperatura y la velocidad del viento y el otro analiza los datos. Los
bucles del diagrama funcional usan el patrn de diseo productor / consumidor y pasan los datos a
travs de la cola. Las colas ayudan a procesar cada lectura adquirida con el DAQ Assistant.
El cdigo para adquirir la temperatura y la velocidad del viento se sita en el bucle productor. El
cdigo que contiene la mquina de estados para analizar las condiciones de temperatura-tiempo se
encuentra en el caso sin error del bucle consumidor. El cdigo que utiliza una cola es ms legible
y eficiente que el que usa slo arquitectura de la mquina de estados. La funcin Obtain Queue crea
la referencia de la cola. El bucle productor usa la funcin Enqueue Element para aadir datos
obtenidos del DAQ Assistant a la cola. El bucle consumidor usa la funcin Dequeue Element para
obtener los datos de la cola y suministrarlos a la mquina de estados para su anlisis. La funcin
Release Queue marca el final de la cola destruyndola. El uso de colas tambin elimina la
necesidad de una variable compartida para detener los bucles, porque la funcin Dequeue Element
detiene el bucle consumidor cuando se libera una cola.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-5
La figura 1-2 muestra el diagrama de bloques que consta de un bucle productor y consumidor. Las
funciones de cola permiten la transferencia de datos y la sincronizacin entre los bucles.
Figura 1-2. Transferencia de datos y sincronizacin de bucles paralelos usando colas
C. Programacin orientada a eventos
Programacin orientada a eventos es un mtodo de programacin, donde el programa espera que
se produzca un acontecimiento antes de ejecutar una o varias funciones. Las caractersticas de
programacin orientada a eventos amplan el entorno de flujo de datos de LabVIEW, para permitir
que el usuario interacte directamente con el panel frontal y permitir otra actividad asncrona que
influya ms en la ejecucin del diagrama de bloques.
Eventos
Qu son los eventos?
Un evento es una notificacin asncrona de que algo ha ocurrido. Los eventos pueden provenir de
la interfaz de usuario, E/S externa u otras partes del programa. Los eventos de la interfaz de usuario
son clics del ratn, pulsaciones de teclas, etc. Los eventos de E/S externas son temporizadores o
triggers de hardware que sealan cundo se completa la adquisicin de datos o cundo ocurre una
condicin de error. Otros tipos de eventos pueden generarse programticamente y utilizarse para
comunicarse con distintas partes del programa. LabVIEW admite eventos generados por la interfaz
de usuario o programticamente. LabVIEW tambin admite eventos generados por ActiveX y
.NET, que son eventos de E/S externas.
En un programa orientado a eventos, los eventos que ocurren en el sistema influyen directamente
en el flujo de ejecucin. Por el contrario, un programa de procedimiento se ejecuta en un orden
predeterminado y secuencial. Los programas orientados a eventos suelen incluir un bucle que
espera que ocurra un evento, ejecuta el cdigo para responder al evento y se vuelve a iterar para
esperar al siguiente evento. El modo en que el programa responde a cada evento depende del
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-6 | ni.com
cdigo escrito para ese evento. El orden en que se ejecuta un programa orientado a eventos depende
de qu eventos ocurran y en qu orden ocurran. Algunas secciones del programa podran ejecutarse
con frecuencia porque los eventos que controlan ocurren frecuentemente. Quiz no se ejecuten
otras secciones del programa porque los eventos nunca ocurren.
Sondeo vs estructura evento
Use eventos de interfaz de usuario en LabVIEW para sincronizar acciones del usuario en el panel
frontal con la ejecucin del diagrama de bloques. Los eventos permiten ejecutar un caso de control
de eventos especfico cada vez que un usuario realice una accin concreta. Sin los eventos, el
diagrama de bloques debe sondear el estado de objetos del panel frontal en un bucle, comprobando
si ha ocurrido algn cambio. Sondear el panel frontal requiere una cantidad de tiempo significativa
de la CPU y quiz no detecte cambios si ocurren con demasiada rapidez.
Al usar eventos para responder a acciones especficas del usuario, no necesita sondear el panel
frontal para determinar qu acciones realiz el usuario. LabVIEW notifica activamente al diagrama
de bloques cada vez que ocurre una interaccin que especific. El uso de eventos reduce los
requisitos de CPU del programa, simplifica el cdigo del diagrama de bloques y garantiza que el
diagrama de bloques pueda responder a todas las interacciones que realice el usuario.
Use eventos generados programticamente para comunicarse entre varias partes del programa que
no tengan dependencia del flujo de datos. Los eventos generados programticamente comparten
muchas ventajas con los eventos de la interfaz de usuario y pueden compartir el mismo cdigo de
control de eventos, lo que facilita la implementacin de arquitecturas avanzadas, como las
mquinas de estados con colas que usan eventos.
Componentes de la estructura Event
Use la estructura Event, mostrada a continuacin, para controlar eventos en un VI.
La estructura Event funciona como una estructura Case con una funcin Wait on Notification
integrada. La estructura Event puede tener varios casos, cada uno de los cuales es una rutina de
control de eventos distinta. Puede configurar cada caso para controlar uno o ms eventos, pero slo
uno de estos eventos puede ocurrir a la vez. Cuando se ejecuta la estructura Event, espera hasta que
ocurra uno de los eventos configurados y despus ejecuta el caso correspondiente a ese evento. La
estructura Event completa su ejecucin tras controlar exactamente un evento. No hace
implcitamente un bucle para controlar varios eventos. Como una funcin Wait on Notification, la
estructura Event puede superar su lmite de tiempo mientras espera una notificacin de evento.
Cuando esto ocurre, se ejecuta un caso Timeout especfico.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-7
La etiqueta del selector de evento en la parte superior de la estructura Event indica que eventos
hacen que el caso que se muestra actualmente sea ejecutado.
Vea otros casos de eventos haciendo clic en la flecha abajo junto al nombre del caso y
seleccionando otro caso del men contextual.
El terminal Timeout de la esquina superior izquierda de la estructura Event especifica el nmero
de milisegundos que hay que esperar antes de que un evento supere el tiempo lmite.
El valor predeterminado es -1, que especifica esperar indefinidamente hasta que ocurra un evento.
Si cablea un valor al terminal Timeout, debe proporcionar un caso Timeout.
El Event Data Node acta de igual modo que la funcin Unbundle By Name.
Este nodo se acopla al borde interior izquierdo de cada caso de evento. El nodo identifica los datos
que proporciona LabVIEW cuando ocurre un evento. Puede cambiar el tamao de este nodo
verticalmente para aadir ms elementos de datos y puede configurar stos en el nodo para acceder
a cualquier elemento de datos de evento. El nodo proporciona varios datos en cada caso de la
estructura Event en funcin de qu eventos configure para que controle ese caso. Si configura que
un solo caso controle varios eventos, el Event Data Node proporciona slo los datos de evento que
son comunes para todos los eventos configurados para ese caso.
El Event Filter Node es similar al Event Data Node.
Este nodo se acopla al borde interior derecho de los casos de eventos de filtrado. El nodo identifica
el subconjunto de datos disponibles en el Event Data Node que puede modificar el caso de evento.
El nodo muestra varios datos en funcin de qu eventos configure para que controle ese caso. De
forma predeterminada, estos elementos se encuentran en los elementos de datos correspondientes
del Event Data Node. Si no cablea un valor a un dato de un Event Filter Node, ese dato permanecer
inalterado.
Consulte la seccin Eventos de notificacin y de filtrado de esta leccin para obtener informacin
adicional acerca de los eventos de filtrado.
Puede acceder a los terminales de eventos dinmicos haciendo clic con el botn derecho en la
estructura Event y seleccionando Show Dynamic Event Terminals en el men contextual.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-8 | ni.com
Estos terminales slo se usan para el registro de eventos dinmicos.
Consulte el tema Using Events in LabVIEW de la Ayuda de LabVIEW para obtener informacin
sobre el uso de estas terminales.
Nota Al igual que una estructura Case, la estructura Event admite tneles. Sin embargo,
de forma predeterminada no tiene que cablear tneles de salida de la estructura Event en
cada caso. Todos los tneles sin cablear usan el valor predeterminado para el tipo de dato
de tnel. Haga clic con el botn derecho en un tnel y deseleccione Use Default If
Unwired en el men contextual para volver al comportamiento de la estructura Case
predeterminada en el que debe cablear los tneles en todos los casos. Tambin puede
configurar los tneles para cablear los tneles de entrada y salida automticamente en los
casos sin cablear.
Consulte la Ayuda de LabVIEW para obtener informacin de los valores predeterminados para cada
tipo de datos.
Uso de eventos en LabVIEW
LabVIEW puede generar numerosos eventos distintos. Para evitar generar eventos indeseados, use
el registro de eventos para especificar qu eventos desea que le notifique LabVIEW. LabVIEW
admite dos modelos de registro de eventos: esttico y dinmico.
El registro esttico permite especificar qu eventos del panel frontal de un VI desea controlar en
cada caso de la estructura Event en el diagrama de bloques de ese VI. LabVIEW registra estos
eventos automticamente cuando se ejecuta el VI, por lo que la estructura Event empieza a esperar
eventos en cuanto se ejecuta el VI. Cada evento se asocia con un control del panel frontal del VI,
la ventana del panel frontal del VI en conjunto o la aplicacin de LabVIEW. No puede configurar
estticamente una estructura Event para controlar eventos para el panel frontal de otro VI. La
configuracin es esttica porque no puede cambiar en el tiempo de ejecucin qu eventos controla
la estructura Event.
El registro de eventos dinmico evita las limitaciones del registro esttico integrando el registro de
eventos con el VI Server, que permite usar referencias de aplicacin, VI y control para especificar
en el tiempo de ejecucin los objetos para los que desea generar eventos. El registro dinmico
ofrece ms flexibilidad en el control de qu eventos genera LabVIEW y cundo los genera. Sin
embargo, el registro dinmico es ms complejo que el esttico porque requiere usar referencias de
VI Server con funciones del diagrama de bloques para registrar y desregistrar eventos en lugar de
controlar el registro automticamente usando la informacin que configur en la estructura Event.
Nota En general, LabVIEW genera eventos de interfaz de usuario slo como resultado
de la interaccin directa del usuario con el panel frontal activo. LabVIEW no genera
eventos, como Value Change, cuando usa variables compartidas, variables globales,
variables locales, etc. Sin embargo, puede usar la propiedad Value (Signaling) para
generar un evento Value Change programticamente. En muchos casos, se pueden usar
eventos generados programticamente en lugar de colas.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-9
Los datos de evento que proporciona un evento de LabVIEW siempre incluyen una marca de hora,
una enumeracin que indica qu evento ocurri, as como una referencia de VI Server al objeto que
activ el evento. La marca de hora es un contador de milisegundos que puede usar para calcular el
tiempo transcurrido entre dos eventos o para determinar el orden en que sucedieron. La referencia
al objeto que gener el evento se escribe estrictamente en la clase de VI Server de ese objeto. Los
eventos se agrupan en clases segn el tipo de objeto que genera el evento, como una aplicacin, VI
o control. Si un solo caso controla varios eventos para objetos de distintos tipos de VI Server, el
tipo de referencia es la clase primaria comn de todos los objetos. Por ejemplo, si configura un solo
caso en la estructura Event para controlar eventos en un control numrico y un control de rampa
de color, el tipo de referencia de control del origen del evento es numrico porque los controles
numrico y rampa de color estn en la clase Numeric. Si se registra para el mismo evento en la
clase VI y Control, LabVIEW genera el evento VI primero.
Nota Los clusters son los nicos objetos contenedores para los que puede generar
eventos. LabVIEW genera eventos Control para clusters, antes de generar eventos para
los objetos que contienen, salvo en el caso del evento Value Change. El evento Value
Change genera el evento en un elemento del cluster, despus en el cluster mismo. Si el
caso de la estructura Event de un evento VI o de un evento Control en un objeto de un
contenedor desecha el evento, LabVIEW no generar ms eventos.
Cada estructura Event y funcin Register For Events del diagrama de bloques posee una cola que
usa LabVIEW para almacenar eventos. Cuando ocurre un evento, LabVIEW coloca una copia suya
en cada cola registrada para l. Una estructura Event controla todos los eventos de su cola y los
eventos de la colas de cualquier funcin Register For Events que cable a los terminales de eventos
dinmicos de la estructura Event. LabVIEW usa estas colas para que los eventos se entreguen
correctamente a cada estructura Event registrada en el orden en que ocurren los eventos.
De forma predeterminada, cuando un evento entra en una cola, LabVIEW bloquea el panel frontal
que contiene el objeto que gener ese evento. LabVIEW mantiene bloqueado el panel frontal hasta
que todas las estructuras Event terminen de procesar el evento. Mientras est bloqueado el panel
frontal, LabVIEW no procesa la actividad del panel frontal sino que coloca las interacciones en un
bfer y las controla cuando se desbloquea el panel frontal.
Por ejemplo, un usuario podra prever que un caso de evento lance una aplicacin que requiera
introducir texto. Como el usuario ya sabe que hay que escribir texto, podra empezar a escribir
antes de que la aplicacin aparezca en el panel frontal. Si est habilitada la opcin Lock front
panel (defer processing of user action) until this event case completes, una vez que se lance la
aplicacin y aparezca en el panel frontal, procesar las pulsaciones de teclas en el orden en que
ocurrieron. Si est inhabilitada la opcin Lock front panel (defer processing of user action) until
this event case completes, las pulsaciones de teclas podran procesarse en otra parte del panel
frontal, ya que LabVIEW no pone en cola su ejecucin para que dependa de que termine el caso
de evento.
El bloqueo del panel frontal no afecta a ciertas acciones, como mover la ventana, interactuar con
las barras de desplazamiento y hacer clic en el botn Abort.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-10 | ni.com
LabVIEW puede generar eventos aunque ninguna estructura Event est esperando para
controlarlos. Como la estructura Event controla slo un evento cada vez que se ejecuta, coloque la
estructura Event en un bucle While para que sta pueda controlar todos los eventos que ocurran.
Precaucin Si no se ejecuta una estructura Event para controlar un evento y se habilita
el bloqueo del panel frontal, la interfaz de usuario del VI no responder. Si esto ocurre,
haga clic en el botn Abort para detener el VI. Puede desactivar el bloqueo del panel
frontal haciendo clic con el botn derecho en la estructura Event y desmarcando la casilla
de verificacin Lock front panel (defer processing of user action) until this event case
completes en el cuadro de dilogo Edit Events. No puede desactivar el bloqueo del
panel frontal para eventos de filtrado.
Registro de eventos estticos
El registro de eventos estticos slo se permite para eventos de la interfaz de usuario. Use el cuadro
de dilogo Edit Events para configurar una estructura Event que controle un evento registrado
estticamente. Seleccione el origen del evento, que puede ser la aplicacin, el VI o un solo control.
Seleccione un evento que pueda generar el origen del evento, como Panel Resize, Value Change,
etc. Modifique el caso para controlar los datos de evento conforme a los requisitos de la aplicacin.
LabVIEW registra estticamente eventos de forma automtica y transparente, cuando ejecuta un
VI que contiene una estructura Event. LabVIEW genera eventos para un VI slo mientras se est
ejecutando el VI o cuando otro VI en ejecucin llama al VI como un subVI.
Cuando ejecuta un VI, LabVIEW configura ese VI de alto nivel y la jerarqua de subVIs a los que
llama el VI en su diagrama de bloques para un estado de ejecucin llamado reservado. No puede
modificar un VI ni hacer clic en el botn Run mientras el VI est en estado reservado, porque se
puede llamar al VI como un subVI en cualquier momento mientras su VI primario se ejecuta.
Cuando LabVIEW configura un VI al estado reservado, automticamente registra los eventos que
configur estticamente en todas las estructuras Event del diagrama de bloques de ese VI. Cuando
el VI de alto nivel termina la ejecucin, LabVIEW lo configura (y su jerarqua de subVI) al estado
de ejecucin inactivo y automticamente desregistra los eventos.
Configuracin de eventos
Antes de configurar eventos para que los controle la estructura Event, consulte el tema Caveats and
Recommendations when Using Events in LabVIEW de la Ayuda de LabVIEW.
Siga estos pasos para configurar un caso de estructura Event para controlar un evento.
1. (Opcional) Si desea configurar la estructura Event para que controle el evento de un usuario,
un control booleano de un control de botones de radio o un evento de interfaz de usuario
que se genera basndose en una referencia a una aplicacin, VI o control, primero debe
registrar dinmicamente ese evento. Consulte el tema Dynamically Registering Events de la
Ayuda de LabVIEW para obtener informacin adicional acerca de usar eventos dinmicos.
2. Haga clic con el botn derecho en el borde de la estructura Event y seleccione Edit Events
Handled by This Case en el men contextual para ver el cuadro de dilogo Edit Events y
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-11
modificar el caso actual. Tambin puede seleccionar Add Event Case en el men contextual
para crear un nuevo caso.
3. Especifique un origen de evento en el panel Event Sources.
4. Seleccione el evento que desee configurar para el origen de evento, como Key Down, Timeout
o Value Change en la lista Events. Cuando seleccione un origen de evento dinmico en la lista
Event Sources, la lista Events mostrar ese evento. Es el mismo evento que seleccion cuando
registr el evento. Si ha registrado eventos dinmicamente y ha cableado event reg refnum
out en el terminal de eventos dinmicos, los orgenes aparecern en la seccin Dynamic.
5. Si desea aadir eventos adicionales para que los gestione el caso actual, haga clic en el botn +
y repita los pasos 3 y 4 para especificar cada evento adicional. La seccin Event Specifiers de
la parte superior del cuadro de dilogo muestra todos los eventos que controlar el caso.
Cuando hace clic en un elemento de esta lista, la seccin Event Sources se actualiza para
resaltar el origen de evento que seleccion. Puede repetir los pasos 3 y 4 para redefinir cada
evento o hacer clic en el botn X para eliminar el evento seleccionado.
6. Haga clic en el botn OK para guardar la configuracin y cerrar el cuadro de dilogo. Los casos
de eventos que configur aparecern como opciones de seleccin en la etiqueta del selector de
eventos en la parte superior de la estructura Event y el nodo Event Data mostrar los datos
comunes a todos los eventos controlados en ese caso.
7. (Opcional) Puede usar un evento Timeout para configurar una estructura Event para que espere
un tiempo determinado a que ocurra un evento. Cablee un valor al terminal Timeout en la parte
superior izquierda de la estructura Event para especificar el nmero de milisegundos que debe
esperar la estructura Event a que ocurra un evento antes de generar un evento Timeout. El valor
predeterminado del terminal Timeout es -1, que especifica esperar indefinidamente hasta que
ocurra un evento.
8. Repita los pasos 1 al 6 para cada caso de evento que desee configurar.
Eventos de notificacin y de filtrado
Los eventos de notificacin indican que ya ha ocurrido una accin del usuario, como cambiar el
valor de un control. Use eventos de notificacin para responder a un evento cuando haya ocurrido
y LabVIEW lo haya procesado. Puede configurar cualquier nmero de estructuras Event para
responder al mismo evento de notificacin en un objeto concreto. Cuando ocurre el evento,
LabVIEW enva una copia de sta a cada estructura Event configurada para controlar el evento en
paralelo.
Los eventos de filtrado le informan de que el usuario ha realizado una accin antes de que
LabVIEW la procese, lo que permite personalizar el modo en que el programa responde a
interacciones con la interfaz de usuario. Use eventos de filtrado para participar en el control del
evento, posiblemente invalidando el comportamiento predeterminado del evento. En un caso de
estructura Event de un evento de filtrado, puede validar o cambiar los datos del evento antes de que
LabVIEW termine de procesarlo, o puede desechar el evento totalmente para evitar que el cambio
afecte al VI. Por ejemplo, puede configurar una estructura Event para desechar el evento Panel
Close?, que evitar que el usuario cierre interactivamente el panel frontal del VI.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-12 | ni.com
Los eventos de filtrado tienen nombres que terminan con un signo de interrogacin, como Panel
Close?, para ayudar a distinguirlos de eventos de notificacin. La mayora de los eventos de
filtrado tienen un evento de notificacin asociado con el mismo nombre, pero sin el interrogante,
que genera LabVIEW tras el evento de filtrado si ningn caso de evento desech el evento.
Por ejemplo, puede usar los eventos de filtrado Mouse Down? y Shortcut Menu Activation? para
mostrar un men contextual cuando haga clic con el botn izquierdo en un control. Para realizar
esta accin, modifique los datos que devuelve el campo de datos de evento Button del evento de
filtrado Mouse Down?. El valor del botn izquierdo del ratn es 1 y el valor del botn derecho del
ratn es 2. Para ver el men contextual cuando hace clic con el botn izquierdo en un control,
cambie el campo de datos de evento Button a 2, para que LabVIEW considere el clic con el botn
izquierdo igual que con el derecho.
Al igual que con los eventos de notificacin, puede configurar cualquier nmero de estructuras
Event para responder al mismo evento de filtrado en un objeto concreto. Sin embargo, LabVIEW
enva eventos de filtrado secuencialmente a cada estructura Event configurada para el evento. El
orden en que LabVIEW enva el evento a cada estructura Event depende de en qu orden se
registraran los eventos. Cada estructura Event debe completar su caso de evento para el evento en
concreto, antes de que LabVIEW pueda notificar la siguiente estructura Event. Si una estructura
Event cambia cualquiera de los datos del evento, LabVIEW pasa los datos cambiados a las
siguientes estructuras Event de la cadena. Si una estructura Event de la cadena desecha el evento,
LabVIEW no pasa ste a las estructuras Event que queden en la cadena. LabVIEW completa el
procesamiento de la accin del usuario que activ el evento slo cuando todas las estructuras Event
configuradas controlen el evento sin desecharlo.
Nota National Instruments recomienda usar eventos de filtrado slo cuando desee
intervenir en el control de la accin del usuario, desechando el evento o modificando los
datos del evento. Si slo desea saber que el usuario realiz una accin concreta, use
eventos de notificacin.
Los casos de la estructura Event que controlan eventos de filtrado tienen un Event Filter Node.
Puede cambiar los datos de evento cableando nuevos valores a estos terminales. Si no cablea un
valor al dato del Event Filter Node, el valor predeterminado ser el valor que devuelva el elemento
correspondiente del Event Data Node. Puede desechar completamente cualquier evento cableando
un valor TRUE al terminal Discard?.
Nota Un solo caso de la estructura Event no puede controlar eventos de notificacin y
de filtrado. Un caso puede controlar varios eventos de notificacin, pero solo puede
controlar varios eventos de filtrado si los datos del evento son idnticos para todos los
eventos.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-13
Consulte la seccin Uso de eventos en LabVIEW de esta leccin para obtener informacin adicional
acerca del registro de eventos.
Consejo En el cuadro de dilogo Edit Events, los eventos de notificacin se indican
con una flecha verde, mientras que los eventos de filtrado tienen una roja.
Ejemplo de eventos
La figura 1-3 muestra una estructura Event configurada con el evento Menu Selection (User). Este
VI usa la estructura Event para capturar selecciones de men realizadas con el men definido por
el usuario y llamado sample.rtm. El ItemTag devuelve el elemento del men que se seleccion
y MenuRef devuelve el refnum a la barra de mens. Esta informacin se pasa a la funcin Get
Menu Item Info. Consulte examples\general\uievents.llb para ver ms ejemplos de uso
de eventos.
Figura 1-3. Evento Menu Selection (User)
Nota Si usa la funcin Get Menu Selection con una estructura Event configurada para
controlar el mismo elemento de men, la estructura Event tiene prioridad, y LabVIEW
ignora la funcin Get Menu Selection. En cualquier VI, use la estructura Event o la
funcin Get Menu Selection para controlar eventos de men, no ambas.
Advertencias y recomendaciones
La siguiente lista describe algunas de las advertencias y recomendaciones que hay que considerar
al incorporar eventos en aplicaciones de LabVIEW.
Evite utilizar una estructura Event fuera de un bucle.
LabVIEW puede generar eventos aunque ninguna estructura Event est esperando para
controlarlos. Como la estructura Event controla slo un evento cada vez que se ejecuta, coloque
la estructura Event en un bucle While que se termine cuando el VI ya no est interesado en
eventos y para que sta pueda controlar todos los eventos que ocurran.
Recuerde leer el terminal de un control booleano bloqueado en su caso de evento Value
Change.
Cuando active un evento en un control booleano configurado con una accin mecnica de
bloqueo, el control booleano no se reinicia a su valor predeterminado hasta que el diagrama de
bloques lea el terminal en el control booleano. Debe leer el terminal dentro del caso de evento
para que la accin mecnica funcione correctamente.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-14 | ni.com
Evite colocar dos estructuras Event en un bucle.
National Instruments recomienda que coloque slo una estructura Event en un bucle. Cuando
ocurre un evento en esta configuracin, la estructura Event gestiona el evento, el bucle se itera
y la estructura Event espera a que ocurra el siguiente evento. Si coloca dos estructuras Event
en un solo bucle, ste no puede iterarse hasta que ambas estructuras Event gestionen un evento.
Si ha habilitado el bloqueo del panel frontal para las estructuras Event, la interfaz de usuario
del VI quiz no responda, en funcin de cmo interacte el usuario con el panel frontal.
Consulte el tema Caveats and Recommendations when Using Events in LabVIEW de la Ayuda de
LabVIEW para ver ms advertencias y recomendaciones cuando utilice eventos en LabVIEW.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-15
Autorrevisin: Cuestionario
1. Cul de los siguientes elementos almacena temporalmente datos?
a. Colas
b. Eventos
c. Variables locales
2. Una los siguientes elementos:
3. Cules de los siguientes elementos son tipos de datos vlidos para colas?
a. Cadena de caracteres
b. Numrico
c. Enumerar
d. Array de booleanos
e. Cluster de una cadena de caracteres y un valor numrico
4. La estructura Event gestiona slo un evento cada vez que se ejecuta.
a. Verdadero
b. Falso
Obtain Queue Destruye la referencia de la cola
Get Queue Status Asigna el tipo de datos de la cola
Release Queue Aade un elemento a la parte posterior de la cola
Enqueue Element Determina el nmero de elementos actualmente en cola
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 1-17
Autorrevisin: Respuestas
1. Cul de los siguientes elementos almacena temporalmente datos?
a. Colas
b. Eventos
c. Variables locales
2. Una los siguientes elementos:
3. Cules de los siguientes elementos son tipos de datos vlidos para colas?
a. Cadena de caracteres
b. Numrico
c. Enumerar
d. Array de booleanos
e. Cluster de una cadena de caracteres y un valor numrico
4. La estructura Event gestiona slo un evento cada vez que se ejecuta.
a. Verdadero
b. Falso
Obtain Queue Asigna el tipo de datos de la cola
Get Queue Status Determina el nmero de elementos actualmente en cola
Release Queue Destruye la referencia de la cola
Enqueue Element Aade un elemento a la parte posterior de la cola
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 1 Ms all del flujo de datos
1-18 | ni.com
Notas
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
National Instruments | 2-1
2
Implementando patrones de diseo
Puede desarrollar mejores programas en LabVIEW y en otros lenguajes de programacin si sigue
tcnicas de programacin sistemticas. Los patrones de diseo representan tcnicas que han
resultado siempre tiles. Para facilitar el desarrollo, LabVIEW incluye plantillas para varios
patrones de diseo comunes. Esta leccin describe dos tipos de patrones de diseo de
programacin: bucles simples y bucles mltiples.
Los patrones de diseo de bucle simple incluyen el VI simple, el VI general y la mquina de
estados.
Los patrones de diseo de mltiples bucles son el VI de bucles paralelos, el maestro/esclavo y el
productor/consumidor.
Comprender el uso apropiado de cada patrn de diseo ayuda a crear VIs de LabVIEW ms
eficientes.
Temas
A. Patrones de diseo
B. Patrones de diseo simple
C. Patrones de diseo de bucles mltiples
D. Gestores de errores
E. Generando cdigos de error y mensajes
F. Temporizar un patrn de diseo
G. Patrn de diseo variable global funcional
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-2 | ni.com
A. Patrones de diseo
Los patrones de diseo de aplicaciones representan implementaciones y tnicas de cdigo de
LabVIEW que son soluciones para problemas concretos en el diseo de software. Los patrones de
diseo normalmente evolucionan gracias a los esfuerzos de muchos desarrolladores y se ajustan
para conseguir simplicidad, mantenibilidad y legibilidad. Los patrones de diseo representan las
tcnicas que han resultado siempre tiles. Adems, a medida que gana aceptacin un modelo,
resulta ms fcil de reconocer, lo que le ayuda a leer y realizar cambios en el cdigo.
B. Patrones de diseo simple
Usted aprendi a disear tres tipos distintos de patrones de diseo en el curso LabVIEW Core 1: la
arquitectura simple, la arquitectura general y la mquina de estados.
Patrones de diseo de VI simple
Para realizar clculos o mediciones rpidas en el laboratorio, no necesita una arquitectura
complicada. Su programa podra constar de un solo VI que realice una medicin o un clculo y
muestre los resultados o los grabe en el disco. El patrn de diseo del VI simple normalmente no
requiere una accin de inicio o parada especfica por parte del usuario. El usuario slo hace clic en
el botn Run. Use esta arquitectura para aplicaciones sencillas o para componentes funcionales
dentro de aplicaciones ms grandes. Puede convertir estos VIs simples en subVIs que use como
bloques de construccin para aplicaciones ms grandes.
La figura 2-1 muestra el diagrama de bloques del VI Determine Warnings, que era el proyecto del
curso LabVIEW Core 1. Este VI ejecuta una sola tarea: determina qu alarma generar en funcin
de un conjunto de entradas. Puede utilizar este VI como un subVI cuando tenga que determinar el
nivel de alarma.
Observe que el VI de la figura 2-1 no contiene acciones de inicio o parada por parte del usuario.
En este VI todos los objetos del diagrama de bloques se conectan mediante el flujo de datos. Puede
determinar el orden general de las operaciones siguiendo el flujo de datos. Por ejemplo, la funcin
Not Equal no se puede ejecutar hasta que se hayan ejecutado las funciones Greater Than or Equal,
Less Than or Equal y ambas funciones Select.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-3
Figura 2-1. Arquitectura del VI simple
Patrn de diseo del VI general
Un patrn de diseo de VI general tiene tres fases principales: arranque, aplicacin principal y
cierre. Cada una de estas fases puede contener cdigo que usa otro tipo de patrn de diseo.
Arranque: inicializa el hardware, lee la informacin de configuracin de los archivos o solicita
al usuario ubicaciones de archivos de datos.
Aplicacin principal: consta de al menos un bucle que se repite hasta que el usuario decida
salir del programa o ste termine por otras razones, como la finalizacin de E/S.
Cierre: cierra archivos, escribe informacin de configuracin en el disco o restablece E/S al
estado predeterminado.
La figura 2-2 muestra el patrn de diseo del VI general.
Figura 2-2. Patrn de diseo del VI general
En la figura 2-2, los cables del cluster de error controlan el orden de ejecucin de las tres secciones.
El bucle While no se ejecuta hasta que el VI Start Up termine de ejecutarse y devuelva los datos
del cluster de error. Como consecuencia, el VI Shut Down no puede ejecutarse hasta que termine
la aplicacin principal del bucle While y los datos del cluster de error abandonen el bucle.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-4 | ni.com
Consejo La mayora de los bucles requieren una funcin Wait, especialmente si ese
bucle monitoriza la interaccin del usuario con el panel frontal. Sin la funcin Wait, el
bucle podra ejecutarse continuamente y usar todos los recursos del sistema. La funcin
Wait obliga al bucle a ejecutarse asncronamente aunque especifique 0 milisegundos
como periodo de espera. Si las operaciones del bucle principal reaccionan a las entradas
del usuario, puede aumentar el periodo de espera a un nivel aceptable para los tiempos
de reaccin. Una espera de 100 a 200 ms suele ser buena porque la mayora de los
usuarios no puede detectar ese retardo entre hacer clic en un botn del panel frontal y la
ejecucin del evento siguiente.
Para aplicaciones simples, el bucle de la aplicacin principal es obvio y contiene cdigo que utiliza
el patrn de diseo del VI simple. Cuando la aplicacin incluye interfaces de usuario complicadas
o varias tareas como acciones del usuario, triggers de E/S, etc., la fase de la aplicacin principal se
complica ms.
Patrn de diseo de mquina de estados (Por sondeo)
El patrn de diseo de mquina de estados es una modificacin del patrn de diseo general.
Normalmente tiene una fase de arranque y de cierre. Sin embargo, la fase de la aplicacin principal
consta de una estructura Case embebida en el bucle. Esta arquitectura permite ejecutar cdigo
diferente cada vez que se ejecuta el bucle, en funcin de alguna condicin. Cada caso define un
estado de la mquina, de ah el nombre mquina de estados. Use este patrn de diseo para VIs que
se dividan fcilmente en varias tareas ms simples, como VIs que actan como una interfaz de
usuario.
Una mquina de estados en LabVIEW consta de un bucle While, una estructura Case y un registro
de desplazamiento. Cada estado de la mquina de estados es un caso distinto en la estructura Case.
Debe colocar los VIs y el resto de cdigo que el estado deba ejecutar dentro del caso apropiado.
Un registro de desplazamiento almacena el estado que debe ejecutarse en la siguiente iteracin
del bucle. La figura 2-3 muestra el diagrama de bloques de un VI de mquina de estados con
cinco estados. La figura 2-4 muestra los otros casos, o estados, de la mquina de estados.
Figura 2-3. Mquina de estados con estado de arranque
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-5
Figura 2-4. Estados Idle (predeterminado), Event 1 y Event 2
En el patrn de diseo de mquina de estados, usted disea la lista de posibles tareas, o estados, y
despus los asigna a cada caso. Para el VI del ejemplo anterior, los posibles estados son Startup,
Idle, Event 1 y Event 2. Una constante de enumeracin guarda los estados. Cada estado tiene su
propio caso en la estructura Case. El resultado de un caso determina qu caso ejecutar despus. El
registro de desplazamiento almacena el valor que determina el prximo caso a ejecutar.
El patrn de diseo de mquina de estados puede hacer el diagrama de bloques mucho ms
pequeo y, por lo tanto, ms fcil de leer y de depurar. Otra ventaja de la arquitectura de la mquina
de estados es que cada caso determina el siguiente estado, a diferencia de las estructuras Sequence,
que deben ejecutar cada marco secuencialmente.
Una desventaja del patrn de diseo de mquina de estados es que con el enfoque del ejemplo
anterior, es posible saltar estados. Si se llama a dos estados de la estructura a la vez, este modelo
gestiona slo uno de ellos mientras que el segundo no se ejecuta. Saltar estados puede producir
errores difciles de depurar porque son complicados de reproducir. Versiones ms complejas del
patrn de diseo de la mquina de estados contienen cdigo adicional que crea una cola de eventos,
o estados, para que no se pierda un estado. Consulte la leccin 1, Ms all del flujo de datos, para
obtener informacin adicional acerca de las mquinas de estados basadas en colas.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-6 | ni.com
Patrn de diseo de mquina de estados (Basada en eventos)
El patrn de diseo de la mquina de estados basada en sondeo, monitorea la actividad en el panel
frontal usando tcnicas estndar de flujo de datos. Una mquina de estados basada en eventos,
combina el poder de la interaccin del usuario en una interfaz de usuario de un controlador de
eventos con la flexibilidad de transicin de una mquina de estados. Debido a que esta
combinacin es tan til para una amplia gama de aplicaciones, LabVIEW proporciona una plantilla
basada en proyectos, la mquina de estados simple, para simplificar el proceso de creacin de una
aplicacin basada en este patrn de diseo.
La plantilla de la mquina de estados simple es una aplicacin personalizable que se encuentra en
forma de un archivo .lvproj con soporte de los VIs y los controles de definicin tipo. La
aplicacin se basa en el patrn de diseo de una mquina de estados basada en eventos. La plantilla
incluye una amplia documentacin acerca de cmo modificar el cdigo para crear una aplicacin
personalizada con mquinas de estados.
Utilice el cuadro de dilogo de Crear Proyecto para crear un proyecto a partir de una plantilla o
muestra. Las plantillas proporcionan arquitecturas comunes que se pueden modificar para lograr
metas especficas. Proyectos de ejemplo demuestran cmo una plantilla se puede modificar para
lograr metas especficas.
Consulte el proyecto de ejemplo Single Shot Measurement, disponible en el cuadro de dilogo de
Crear Proyecto, para un ejemplo de la adaptacin de la plantilla de una mquina de estados simple
en una aplicacin de medicin.
Figura 2-5. Diagrama de transicin de estados en una mquina de estados simple.
Despus de la inicializacin, la mquina de estados transiciona al estado Esperar Evento. Este
estado contiene una estructura Event que espera los cambios en el panel frontal. Cuando un usuario
hace clic en un botn, LabVIEW reconoce el evento y cambia al subdiagrama apropiado en la
estructura Event. Este subdiagrama inicia una transicin al estado apropiado.
Slo un estado se ejecuta a la vez, y el nico bucle While ejecuta todas las tareas en un solo ciclo.
Si usted necesita tareas con distintas velocidades o en paralelo, considere un patrn de diseo
multi-bucle. En esta leccin usted aprender sobre el patrn de diseo del productor/consumidor.
Initialize
Wait for
Event
Stop
User
State 2
User
State 1
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-7
En los cursos posteriores se aprender acerca de otros patrones de diseo de otros LabVIEW para
los cuales se dispone de plantillas, como las plantillas Queued Message Handler o Actor
Framework.
El estado Esperar por Evento es el nico que reconoce la entrada del usuario. La mquina de
estados debe estar en este estado para aceptar cualquier entrada del usuario. Por lo tanto, cada
estado debe ser rpido para que el cdigo pueda volver al estado Esperar por Eventos.
Patrn de diseo del controlador de eventos de la interfaz de usuario
El patrn de diseo del controlador de eventos de la interfaz de usuario incluye una arquitectura
potente y eficaz para controlar la interaccin del usuario con LabVIEW. Use el controlador de
eventos de la interfaz de usuario para detectar cundo un usuario cambia el valor de un control,
mueve el ratn, hace clic en l o pulsa una tecla.
La plantilla estndar del controlador de eventos de la interfaz de usuario consta de una estructura
Event contenida en un bucle While, como en la figura 2-6. Configure la estructura Event para tener
un caso para cada categora de evento que desee detectar. Cada caso de evento contiene el cdigo
de control que se ejecuta inmediatamente despus de que ocurra un evento.
Como el bucle del controlador de eventos se activa precisamente cuando ocurre un evento y se
suspende entre eventos, no tiene que sondear ni leer valores de control constantemente para
detectar cundo un usuario hace clic en un botn. El controlador de eventos de la interfaz de
usuario permite minimizar el uso del procesador sin sacrificar la interactividad.
Figura 2-6. Patrn de diseo del controlador de eventos de la interfaz de usuario
Un problema comn al usar el controlador de eventos de la interfaz de usuario es que computa la
condicin de terminacin del bucle While antes de que se ejecute la estructura Event. Esto puede
hacer que el bucle While se itere una vez ms de lo esperado. Para evitar esta situacin, calcule el
final del bucle While en todo el cdigo de control de eventos.
1 Estructura Event
2 Bucle While
3 Terminal Timeout
4 Event Data Node
3
2
1
4
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-8 | ni.com
El cdigo del controlador de eventos debe ejecutarse rpidamente, en general en menos de 200 ms.
Si es ms lento, puede parecer que la interfaz de usuario se bloquea. Asimismo, si el cdigo del
controlador de eventos tarda mucho en ejecutarse, la estructura Event podra bloquearse. De forma
predeterminada, el panel frontal se bloquea mientras se controla un evento. Puede desactivar el
bloqueo del panel frontal para cada caso de evento para que la interfaz de usuario sea ms sensible.
Sin embargo, los nuevos eventos que se generen mientras se est controlando un evento no se
controlarn inmediatamente. Por lo tanto, la interfaz de usuario an parecer que no responde.
Todo cdigo que est en un caso de evento no puede compartirse con otra estructura Event. Debe
utilizar un buen diseo de cdigo al usar la estructura Event. Modularice el cdigo que se
compartir entre varios casos de estructura Event.
La estructura Event incluye un evento Timeout, que permite controlar cundo se ejecuta el evento
Timeout. Por ejemplo, si configura un Timeout de 200 ms, el caso del evento Timeout se ejecuta
cada 200 ms en ausencia de otros eventos. Puede usar el evento Timeout para realizar la
temporizacin crtica de su cdigo.
C. Patrones de diseo de bucles mltiples
Hay varios patrones de diseo de bucles mltiples, algunos de los cuales estn ms all del alcance
de este curso. Este curso se enfoca en el patrn de diseo del productor/consumidor debido a su
versatilidad y flexibilidad .
Patrn de diseo de productor / consumidor
El patrn de diseo de productor / consumidor se basa en el patrn de diseo de maestro / esclavo
y mejora la comparticin de datos entre varios bucles que se ejecutan a distintas velocidades. Al
igual que el patrn de diseo de maestro / esclavo, el patrn de diseo de productor / consumidor
separa tareas que producen y consumen datos a distintas velocidades. Los bucles paralelos en el
patrn de diseo de productor / consumidor estn separados en dos categoras: los que producen
datos y los que consumen los datos producidos. Las colas de datos comunican datos entre los
bucles. Las colas de datos tambin almacenan temporalmente datos en un bfer entre los bucles
productor y consumidor.
Consejo Un bfer es un dispositivo de memoria que almacena datos temporales entre
dos dispositivos o, en este caso, mltiples bucles.
Use el patrn de diseo de productor / consumidor cuando tenga que adquirir varios conjuntos de
datos que deben procesarse en orden. Suponga que desea crear un VI que acepte datos mientras
procesa los conjuntos de datos en el orden en que se recibieron. El patrn de productor /
consumidor es ideal para este tipo de VI, porque poner en cola (producir) los datos se realiza mucho
ms rpidamente que el procesamiento de stos (consumir). Podra colocar al productor y al
consumidor en el mismo bucle para esta aplicacin, pero la cola de procesamiento no podra recibir
ms datos hasta que el primer dato se procesara completamente. El enfoque de productor /
consumidor para este VI pone en cola los datos en el bucle productor y procesa los datos en el bucle
consumidor, como en la figura 2-7.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-9
Consejo Las funciones de manejo de colas permiten almacenar un conjunto de datos
que puede pasarse entre bucles mltiples que se ejecutan simultneamente o entre VIs.
Consulte la leccin 1, Ms all del flujo de datos, para obtener informacin adicional
acerca de colas e implementacin de aplicaciones que utilicen el patrn de diseo
productor / consumidor.
Figura 2-7. Patrn de diseo de productor / consumidor
Este patrn de diseo permite que el bucle consumidor procese los datos a su propio ritmo,
mientras que el bucle productor sigue poniendo en cola datos adicionales.
Tambin puede usar el patrn de diseo de productor / consumidor para crear un VI que analice la
comunicacin de red. Este tipo de VI requiere dos procesos simultneos y a distintas velocidades.
El primer proceso sondea constantemente la lnea de red y captura paquetes. El segundo proceso
analiza los paquetes que captura el primer proceso.
En este ejemplo, el primer proceso acta como productor porque suministra datos al segundo
proceso, que acta de consumidor. El patrn de diseo de productor / consumidor es una
arquitectura efectiva para este VI. Los bucles paralelos productor y consumidor controlan la
captura y el anlisis de datos fuera de la red. La comunicacin en cola entre los dos bucles permite
el almacenamiento temporal de los paquetes de red recuperados. El uso del bfer puede ser
importante si la comunicacin de red es intensa. Mediante el bfer, los paquetes pueden capturarse
y comunicarse ms rpidamente de lo que pueden analizarse.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-10 | ni.com
Patrn de diseo de productor/consumidor (Datos)
El patrn de diseo del productor/consumidor mejora el intercambio de datos entre mltiples
bucles que funcionan a diferentes velocidades. Hay dos categoras de bucles paralelos en el patrn
de diseo productor/consumidorlos que producen los datos y los que consumen los datos. Las
colas de datos comunican datos entre los bucles. Las colas de datos tambin almacenan
temporalmente datos en un bfer entre los bucles productor y consumidor. Utilice el patrn de
diseo productor/consumidor para adquirir varios conjuntos de datos que se deben procesar en
orden, por ejemplo, un VI que acepta datos al procesar los conjuntos de datos en el orden en que
se reciban. Introducir datos en la cola (producir) ocurre mucho ms rpido que el procesamiento
de datos (consumidos). El enfoque de productor/consumidor pone en cola los datos en el bucle
productor y procesa los datos en el bucle consumidor, como en la figura 2-8.
Figura 2-8. Patrn de diseo de productor/consumidor (Datos)
Este patrn de diseo permite que el bucle consumidor procese los datos a su propio ritmo,
mientras que el bucle productor sigue poniendo en cola datos adicionales. Tambin puede utilizar
el productor/consumidor para crear un VI que analice la comunicacin de red en la que dos
procesos operan al mismo tiempo y a diferentes velocidades. El primer proceso sondea
constantemente la lnea de red y captura paquetes. El segundo proceso analiza los paquetes que
captura el primer proceso. El primer proceso acta como productor porque suministra datos al
segundo proceso, que acta de consumidor. Los bucles paralelos productor y consumidor controlan
la captura y el anlisis de datos fuera de la red. La comunicacin en cola entre los dos bucles
permite el almacenamiento temporal de los paquetes de red recuperados.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-11
La figura 2-8 muestra cmo puede usar los VIs de Sincronizacin y las funciones para aadir
funcionalidad al patrn de diseo. Las colas pueden transferir cualquier tipo de datos. El tipo de
datos transferido de la figura 2-8 es una cadena de caracteres. Una cadena de caracteres no es el
tipo de datos ms eficaz para pasar datos en patrones de diseo. Un tipo de datos ms eficaz para
pasar datos en patrones de diseo es un cluster que consta de un estado y elementos de datos.
Demostracin de Productor/consumidor (datos)
El proyecto de productor/consumidor, ubicado en el directorio <Exercises>\LabVIEW
Core 2\Demonstrations\Producer Consumer - Data, demuestra el patrn de diseo. El
panel frontal incluye un botn que controla cuando el valor de la cadena de caracteres es aadido
a la cola. El control deslizante cableado a la funcin Wait (ms) en el del blucle Consumidor simula
el tiempo de procesamiento intensivo dentro del bucle. Esto demuestra el efecto sobre la ejecucin
general del programa. Mientras que el bucle consumidor se ejecuta, el usuario puede poner en cola
ms elementos. La cola retiene cada elemento y los ejecuta en orden despus del procesamiento
simulado del elemento en el bucle consumidor. Con esta implementacin, cuando el bucle
consumidor est ocupado, la interfaz de usuario sigue respondiendo y los comandos de usuario
siguen siendo registrados.
Patrn de diseo Productor/Consumidor (Eventos)
Uno de los patrones de diseo ms verstiles y flexibles combina los patrones de diseo productor/
consumidor y el controlador de eventos de interfaz de usuario. Un VI creado usando el patrn de
diseo productor/consumidor (eventos) responde a la interfaz de usuario asncronamente, para que
la interfaz de usuario pueda responder continuamente al usuario. El bucle consumidor de este
patrn responde cuando ocurren eventos, al igual que el bucle consumidor del patrn de diseo de
(datos) productor / consumidor.
El patrn de diseo productor / consumidor (eventos) usa la misma implementacin que el patrn
de diseo productor / consumidor (datos), salvo que el bucle productor usa una estructura Event
para responder a los eventos de la interfaz de usuario, como se ve en la figura 2-9. La estructura
Event permite la respuesta continua a la interaccin del usuario.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-12 | ni.com
Figura 2-9. Patrn de diseo Productor/Consumidor (Eventos)
Demostracin de productor/consumidor (eventos)
El proyecto de productor/consumidor, ubicado en el directorio <Exercises>\LabVIEW
Core 2\Producer Consumer - Event, demuestra el patrn de diseo. El panel frontal incluye
botones para poner en cola un mensajes con una prioridad normal o bien un mensaje con una
prioridad alta. Cuando un mensaje con prioridad normal es puesto en la cola, el estado del
consumidor se establece a prioridad normal, los datos booleanos se establecen a falso, y el valor
del dato numerico se establece a la cantidad de iteraciones en el bucle While. Cuando un mensaje
con prioridad alta es puesto en la cola, el estado del consumidor se establece a prioridad alta, los
datos booleanos se establecen a verdadero, y el valor del dato numerico se establece a 1000. El
indicador State to Execute muestra el estado actual a ser ejecutado en el bucle del Consumidor.
El bucle consumidor se implementa con una espera de 1 segundo para demostrar el efecto del
tiempo de procesamiento intensivo. Mientras que el bucle consumidor se ejecuta, el usuario puede
poner en cola ms elementos (hacer clic en otros botones). Con esta implementacin, cuando el
bucle consumidor est ocupado, la interfaz de usuario sigue respondiendo y los comandos de
usuario siguen siendo registrados. Debido a que el bucle de productores recurre a una estructura
Event, menos procesamiento se produce debido a que los controles dentro de la estructura Event
son de slo lectura cuando sus valores cambian. La interfaz de usuario es totalmente responsable
de determinar las acciones a ser realizadas en el bucle consumidor. Incluso si hay un retraso
acumulado de elementos con prioridades normales en la cola, un elemento de cola de prioridad alta
se aade en la parte delantera de la cola y se procesa antes que los mensajes de prioridad normal.
Cuando el usuario hace clic en el botn Stop, un mensaje de apagado se enva al bucle consumidor
el cual termina enviando un valor True al terminal condicional del bucle.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-13
Ayuda de Trabajo
Use la tabla 2-1 para determinar la mejor forma de usar los patrnes de diseo descritos en esta
leccin.
Tabla 2-1. Comparacin entre patrones de diseo
Patrones de diseo Uso Ventajas Desventajas
Simple subVIs estndar
Clculos / algoritmos,
procesamiento
modular
Equivalente de
LabVIEW de una
subrutina en otros
lenguajes de
programacin
Permite aplicaciones
modulares
No es adecuado para
el diseo de la
interfaz de usuario o
VIs de alto nivel
General Control de flujo
estndar
Bueno para prototipos
rpidos o aplicaciones
sencillas y directas
que no crecen en
complejidad
Diferencia entre
fases de
inicializacin,
ejecucin y de
parada
No puede retornar a
una fase anterior
Mquina de estados
(sondeo)
Controla la
funcionalidad de un
VI mediante la
creacin de una
secuencia
Secuencias de
control
Mantenimiento del
cdigo es sencillo
porque se pueden
aadir fcilmente
nuevos estados.
Para aplicaciones
simples, no tienen
que manejar ambos
diagramas: eventos y
mquinas de estados.
Una Interfaz de
usuario basada en
sondeo no es
escalable a medida
que la aplicacin
crece
No es apto para el
paralelismo
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-14 | ni.com
Mquina de estados
(Basada en eventos)
Controla la
funcionalidad de un
VI mediante la
creacin de una
secuencia
Secuencias de
control
Mantenimiento del
cdigo es sencillo
porque se pueden
aadir fcilmente
nuevos estados.
El uso de la
estructura de eventos
es ms eficiente que
un control por
sondeo
No es apto para el
paralelismo
Controlador de
eventos de interfaz de
usuario
Procesa mensajes
desde la interfaz de
usuario
Maneja los mensajes
de la interfaz de
usuario
No permite el
procesamiento
intensivo
No es apto para el
paralelismo
Productor/consumidor
(datos)
Procesa o analiza los
datos en paralelo con
otro procesamiento de
datos o anlisis
Comunicacin por
medio de un bfer
entre procesos de una
aplicacin
No proporciona
sincronizacin entre
bucles
Limitado a un tipo de
dato, a menos que los
datos estn
contenidos en un
cluster
Tabla 2-1. Comparacin entre patrones de diseo (Continuacin)
Patrones de diseo Uso Ventajas Desventajas
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-15
D. Gestores de errores
De forma predeterminada, LabVIEW controla automticamente cualquier error cuando un VI se
ejecuta suspendiendo la ejecucin, resaltando el subVI o la funcin donde ocurri el error y
mostrando un cuadro de dilogo de error. La gestin automtica de errores es conveniente para el
desarrollo de prototipos rpidos y pruebas de concepto, pero no se recomienda para el desarrollo
de aplicaciones profesionales. Si confa en la gestin automtica de errores, su aplicacin podra
detenerse en una parte crtica de su cdigo por un cuadro de dilogo de error. Quiz el usuario no
pueda continuar ejecutando la aplicacin o solucionar el problema.
Al implementar manualmente la gestin de errores, usted controla cundo aparecen cuadros de
dilogo emergentes. Si piensa crear una aplicacin independiente, debe incorporar la gestin
manual de errores porque LabVIEW no muestra cuadros de dilogo de gestin automtica de
errores en LabVIEW Run-Time Engine.
Un gestor de errores es un VI o cdigo que cambia el flujo normal del programa cuando ocurre un
error. El VI Simple Error Handler es un ejemplo de un gestor de errores integrado que se utiliza en
LabVIEW. Puede aplicar otros gestores de errores personalizados para su aplicacin. Por ejemplo,
puede elegir registrar informacin del error en un archivo. Otro gestor de errores comn es un VI
que redirecciona cdigo a una rutina de limpieza o cierre cuando ocurre un error, para que su
aplicacin salga correctamente. La figura 2-10 muestra un gestor de errores de mquina de estados
que configura el siguiente estado en Shutdown cuando un error tiene el estado TRUE.
Productor/consumidor
(eventos)
Responde a la interfaz
de usuario con
aplicaciones de uso
intensivo del
procesador
Separa la interfaz de
usuario del cdigo de
procesamiento
intensivo
No integra eventos no
realcionados con la
interfaz de usuario
Variables globales
funcionales
Utilizar como un
subVI que necesita
mantener los datos
globales y realizar
acciones en esos
datos.
Almacena datos
siempre que el VI
est en memoria
Ejecuta operaciones
en funcin de la
seleccin de entrada
Una buena manera
de proteger las
secciones crticas de
cdigo para eliminar
las condiciones de
carrera
No es adecuado para
VIs reentrantes
Problemtico al
duplicar o ampliar los
datos globales con
mltiples copias y
realizar acciones en
dichas copias
Tabla 2-1. Comparacin entre patrones de diseo (Continuacin)
Patrones de diseo Uso Ventajas Desventajas
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-16 | ni.com
Figura 2-10. Gestor de errores de la mquina de estados
Gestin de errores en el patrn de diseo
productor/consumidor (eventos)
El diagrama del productor/consumidor que se muestra en la Figura 2-9 es til para la comprensin
de la arquitectura fundamental del patrn de diseo. Adems de pasar comandos y datos entre los
bucles, el patrn de diseo para ambos bucles cuando el usuario hace clic en el botn Stop. Sin
embargo, si se produce un error en cualquier bucle, no existe ningn mecanismo para comunicar
esta informacin al otro bucle. Por lo tanto, es posible que uno de los bucles se ejecute
indefinidamente despus de que el otro se haya detenido.
Por lo tanto, es necesario aadir el cdigo de gestor de errores con el patrn de diseo para que los
bucles productor y consumidor se detengan elegantemente cuando se produce un error. Hay
muchas tcnicas para comunicar informacin de error entre los dos bucles, algunos de los cuales
estn cubiertos en cursos posteriores. Algunas tcnicas implican la adicin de un canal de
comunicacin adicional, como una cola adicional. Otra tcnica es utilizar el cluster de cola actual
para ejecutar un caso de apagado en el bucle consumidor. Este enfoque se demuestra usando el VI
gestor de errores que se muestra en la figura 2-11 y el productor/consumidor llamando al VI Error
Handler ilustrado en la figura 2-12.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-17
Figura 2-11. VI gestor de errores
Figura 2-12. Productor/Consumidor llamando al VI Error Hander
Si se produce un error en el bucle productor, el VI Error Handler pone en cola el estado de apagado
junto con la informacin de cluster de error. Puesto que se deseara volver a utilizar este VI Error
Handler en el bucle consumidor, es necesario eliminar el error en el cable de error despus de poner
en cola la informacin. De lo contrario, el bucle consumidor terminara antes de que tuviera la
oportunidad de ejecutar el caso de apagado. Si falla la funcin Enqueue en el VI Error Handler, la
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-18 | ni.com
comunicacin entre los bucles se detiene por lo que el nico curso razonable de accin es dar por
terminada la ejecucin del bucle inmediatamente.
Dado que el estado de procesamiento, incluyendo el procesamiento de cierre, se produce en el
bucle consumidor y no en el bucle de productor, todava necesita algn mecanismo en el bucle
consumidor para informar al bucle productor que detenga la ejecucin. Un enfoque, como se
muestra en la figura 2-13, es utilizar una variable local que se sondea en el caso del evento Timeout.
Si se produce un error en el bucle consumidor, el caso de apagado se ejecuta y detiene el bucle. La
variable local Consumer Shutdown? puede entonces detener el bucle productor.
Figura 2-13. Productor/Consumidor usando una variable local
E. Generando cdigos de error y mensajes
La gestin de errores en LabVIEW sigue el modelo de flujo de datos. Al igual que los valores de
datos fluyen por un VI, tambin lo hace la informacin de errores. Mientras se ejecuta el VI,
LabVIEW comprueba si hay errores en cada nodo de ejecucin. Si LabVIEW no encuentra errores,
el nodo se ejecuta con normalidad. Si LabVIEW detecta un error, el nodo pasa el error al siguiente
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-19
nodo sin ejecutar esa parte del cdigo. El siguiente nodo hace lo mismo y as sucesivamente. Al
final del flujo de ejecucin, el error se expresa a travs del Simple Error Handler.vi o a travs de
un cluster de error.
Configurar un error cuando un nodo o VI falla no debera estar limitado a los errores cuyas
funciones y VIs de LabVIEW ya reportan. Como desarrollador de un VI, tambin se deben detectar
las condiciones de error y el reporte de estos errores los subVIs. Hay muchas situaciones en las que
puede que desee reportar una condicin de error que se detect en su cdigo. A continuacin se
presentan algunos ejemplos para configurar o invalidar los cdigos de error y mensajes:
Comprobar las entradas no vlidas a subVIs o algoritmos. Verificar si existen arrays o cadenas
de caracteres vacas antes de procesar. Si una entrada es invlida, se debe configurar un cdigo
de error y mensaje apropiados. Un ejemplo podra ser comprobar si una entrada es un valor
positivo antes de intentar obtener la raz cuadrada del nmero. Si un valor es negativo, se
generar un error con un mensaje apropiado con el fin de notificar al usuario como se podra
arreglar el valor de la entrada.
Verificar salidas invlidas en diferentes algoritmos. Por ejemplo, la funcin Search 1D Array
retorna un valor ndice de -1 si la bsqueda de un elemento no es exitosa en un array. En esta
situacin, es posible que desee informar de un error con un mensaje que indica que el valor del
elemento no se encuentra en el array.
Sobrescribir mensajes de error de LabVIEW con detalles ms especficos. La funcin
Open/Create/Replace devuelve el cdigo de error 7 al intentar abrir un archivo que no existe.
El cdigo de error 7 est asociado al mensaje de error genrico file not found. En lugar del
mensaje de error genrico, es posible que se desee un mensaje de error ms especfico teniendo
en cuenta la ruta del archivo especfico que fall, adems de informacin sobre cmo el usuario
puede corregir el problema y volver a intentar la operacin.
Error Ring
Se utiliza el Error Ring para seleccionar y pasar de forma rpida cdigos de error personalizados a
travs de un VI. Se puede configurar el ring para devolver un mensaje de error integrado, o se
puede crear un mensaje de error personalizado para un solo uso. De forma predeterminada, la
cadena de caracteres de origen del cluster de error contiene la cadena de llamadas del VI de nivel
superior para el VI que se est ejecutando. La figura 2-14 ilustra un Error Ring configurado.
Figura 2-14. Error Ring
Una vez seleccionado el error, puede cambiar el tipo (error o advertencia) e incluir la cadena de
llamada haciendo clic en los iconos del ring. Tambin puede cambiar el tipo de error y las opciones
de llamada de la cadena, haga clic con el botn derecho en en el Error Ring y seleccione: Generate
Error, Generate Warning, Include Call Chain, o Exclude Call Chain, en el men contextual.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-20 | ni.com
Definiendo un codigo de error personalizado
La creacin de un cdigo de error personalizado es til si se desea definir un cdigo de error simple
o sobrescribir uno nico incorporado en el cdigo de error. Si se tienen varios errores
personalizados que se deseen utilizar en el Error Ring, utilice el cuadro de dilogo Error Code
Editor.
F. Temporizar un patrn de diseo
Esta seccin describe dos formas de temporizacin: de ejecucin y control del software. La
temporizacin de ejecucin usa funciones de temporizacin facilitando tiempo al procesador para
completar otras tareas. La temporizacin de control del software temporiza una operacin del
mundo real para realizarla en un periodo de tiempo concreto.
Temporizacin de ejecucin
La temporizacin de ejecucin implica temporizar un patrn de diseo explcitamente o en funcin
de eventos que ocurren en el VI. La temporizacin explcita utiliza una funcin que facilita
especficamente tiempo al procesador para completar otras tareas, como la funcin Wait Until Next
ms Multiple. Cuando la temporizacin se basa en eventos, el patrn de diseo espera a que ocurra
alguna accin antes de continuar y permite que el procesador complete otras tareas mientras espera.
Utilice sincronizacin explcita de los patrones de diseo basados en sondeo, tales como el patrn
de diseo (datos) de productor/consumidor o la mquina de estados basada en sondeo.
Consejo El sondeo es el proceso de realizar solicitudes continuas de datos desde otro
dispositivo. En LabVIEW, esto normalmente significa que el diagrama de bloques
pregunta continuamente si hay datos disponibles, en general desde la interfaz de usuario.
Por ejemplo, el patrn de diseo de productor/consumidor de la figura 2-15 usa un bucle While y
una estructura Case para implementar el bucle productor. El productor se ejecuta continuamente y
sondea un evento de algn tipo, como cuando el usuario hace clic en un botn. Cuando ocurre el
evento, el productor enva un mensaje al consumidor. Se debe temporizar el productor para que no
acapare la ejecucin del procesador. En este caso, normalmente use la funcin Wait (ms) para
regular la frecuencia de sondeo del maestro.
Consejo Use siempre una funcin de temporizacin como Wait (ms) o Wait Until Next
ms Multiple en cualquier patrn de diseo que se ejecute continuamente y deba
regularse. Si no usa una funcin de temporizacin en una estructura que se ejecuta
continuamente, LabVIEW usar todo el tiempo del procesador y quiz no se ejecuten los
procesos en segundo plano.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-21
Figura 2-15. Patrn de diseo de productor / consumidor
Tenga en cuenta que el bucle consumidor no contiene ninguna forma de temporizacin. El uso de
colas para pasar los datos y mensajes proporciona una forma inherente de temporizacin en el
bucle consumidor debido a que el bucle consumidor espera a la funcin Queue para recibir un
elemento de la cola. Despus de que la funcin Queue recibe un elemento de la cola, el bucle
consumidor se ejecuta sobre los datos o mensajes pasados. As se crea un diagrama de bloques
eficiente que no malgasta ciclos del procesador al sondear mensajes. ste es un ejemplo de
temporizacin de ejecucin esperando un evento.
Al implementar patrones de diseo basados en temporizacin de aparicin de eventos, se puede
utilizar los mecanismos de sincronizacin de eventos para la ejecucin temporizada y control
temporizada por software. Funciones de sincronizacin y la estructura Event incluyen una funcin
de Timeout. El valor predeterminado para un Timeout es -1, esto indica una espera infinita. Con un
Timeout infinito, la ejecucin de un patrn de diseo solamente ocurre cuando un evento se
produce.
El VI del patrn de diseo (Eventos) productor/consumidor que se muestra en la figura 2-16 no
requiere funciones de temporizacin porque la sincronizacin es inherente en la ejecucin del
bucle productor y consumidor. La estructura Event en el bucle productor controla cuando el bucle
productor se ejecuta. La funcin Dequeue Element en el bucle consumidor espera hasta que un
elemento es puesto en cola, controlando as la ejecucin en el bucle consumidor. Patrones de diseo
tales como el productor/consumidor (eventos), no requieren temporizacin, debido a que su
temporizacin es controlada por eventos externos.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-22 | ni.com
Figura 2-16. Patrn de diseo Productor/Consumidor (Eventos) con tiempo de espera indefinido
Especificar un valor de Timeout permite la funcionalidad de ser ejecutado a intervalos regulares.
Por ejemplo, el patrn de diseo productor/consumidor (eventos) que se ilustra en la figura 2-17
muestra cmo se puede ejecutar cdigo a intervalos regulares tanto en el bucle productor como en
el consumidor. En la figura 2-17, el bucle productor se ejecuta cada 100ms incluso si no han
ocurrido eventos. Cableando un valor en milisegundos a la terminal de Timeout de una estructura
Event despierta la estructura Event y ejecuta el cdigo en el caso de que el Timeout se agote. El
bucle consumer se ejecuta cada 50 ms incluso si la cola est vaca.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-23
Figura 2-17. Caso de eventos con Timeout en patrones de diseo productor/consumidor con
ejecucin temporizada
Temporizacin de control del software
Muchas aplicaciones que crea deben ejecutar una operacin durante un tiempo especfico. Piense
en la implementacin de un patrn de diseo de mquina de estados para un sistema de adquisicin
de datos de temperatura. Si las especificaciones requieren que el sistema adquiera los datos de
temperatura durante 5 minutos, usted podra permanecer en el estado de adquisicin durante
5 minutos. Sin embargo, durante ese tiempo no puede procesar ninguna accin de la interfaz de
usuario como detener el VI. Para procesar acciones de la interfaz de usuario, debe implementar la
temporizacin, de modo que el VI se ejecute continuamente durante el tiempo especificado.
Implementar este tipo de temporizacin conlleva que la aplicacin se est ejecutando mientras
monitoriza un reloj en tiempo real.
En el curso LabVIEW Core 1 implement temporizacin de control de software para controlar el
tiempo hasta que el VI adquira el siguiente dato, como en la figura 2-18. Observe el uso del
Elapsed Time Express VI para realizar el seguimiento de un reloj.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-24 | ni.com
Figura 2-18. Uso del Elapsed Time Express VI
Si usa las funciones Wait (ms) o Wait Until Next ms Multiple para realizar temporizacin de
software, la ejecucin de la funcin que est temporizando no ocurrir hasta que termine la funcin
de espera. Estas funciones de temporizacin no son el mtodo preferido para realizar la
temporizacin de control de software, sobre todo para VIs en los que debe ejecutarse
continuamente el sistema. Un mtodo mejor para la temporizacin de control de software utiliza la
funcin Get Date/Time In Seconds para obtener el tiempo actual y realizar su seguimiento
mediante registros de desplazamiento.
Figura 2-19. Temporizacin de software usando la funcin Get Date/Time In Seconds
La funcin Get Date/Time In Seconds, conectada al terminal izquierdo del registro de
desplazamiento, inicializa ste con la hora del sistema actual. Cada estado usa otra funcin Get
Date/Time In Seconds y compara la hora actual con la hora de inicio. Si la diferencia entre estas
dos horas es mayor o igual que el tiempo de espera, el estado terminar de ejecutarse y se ejecutar
el resto de la aplicacin.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-25
Consejo Use siempre la funcin Get Date/Time In Seconds en lugar de la funcin Tick
Count (ms) para este tipo de comparacin, porque el valor de la funcin Tick Count (ms)
puede volver a 0 durante la ejecucin.
G. Patrn de diseo variable global funcional
A medida que contine desarrollando sus habilidades en LabVIEW e interactuando con otros
desarrolladores, aprender acerca de los patrones de diseo de otros con nombres como
Maestro/Esclavo y controlador de mensajes de cola. Algunos patrones de diseo, como el actor
Framework, estn bastante avanzados y requieren un conocimiento adicional de caractersticas de
programacin orientados a objetos en LabVIEW. Algunos patrones de diseo son componentes
muy tiles en aplicaciones ms grandes. El patrn de diseo variable global funcional es uno de
estos. Para poder entender este nuevo patrn de diseo, es bueno comprender en profundidad un
tipo de condicin de carrera llamado lectura-modificacin-escritura.
Condiciones de carrera lectura-modificacin-escritura
Una condicin de carrera ocurre cuando la temporizacin de eventos o la programacin de tareas
afecta involuntariamente a un valor de salida o de datos. Las condiciones de carrera suponen un
problema comn en los programas que ejecutan varias tareas en paralelo y comparten datos entre
ellos. Piense en el ejemplo de la figura 2-20.
Figura 2-20. Ejemplo de Condicin de Carrera
Ambos bucles modifican una variable local durante cada iteracin del bucle. Un bucle incrementa
el contador, mientras que el otro decrementa el contador. Si ejecuta este VI, el resultado esperado
despus de hacer clic en el botn Stop es que la variable Running Total es igual a Loop Count
Difference. Dado que los dos bucles estn funcionando a la misma velocidad, el valor debe ser
cero o prximo a cero. Dependiendo de cuando se detiene el VI, es posible que se vea el resultado
esperado. Sin embargo, es tambin probable que la variable Running Total no sea igual a Loop
Count Difference porque este VI contiene una condicin de carrera.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-26 | ni.com
En un ordenador con un solo procesador, las acciones de un programa multitarea como este
ejemplo realmente suceden secuencialmente, pero LabVIEW y el sistema operativo cambian
rpidamente las tareas para que se ejecuten a la vez. La condicin de carrera de este ejemplo se
produce cuando el cambio de una tarea a la otra ocurre en un determinado momento. Observe que
ambos bucles realizan las siguientes operaciones:
Leer la variable local
Aumentar o disminuir el valor a ser ledo
Escribir el valor modificado en la variable local
Qu sucede ahora si las operaciones del bucle se han programado en este orden?:
1. El bucle 1 lee la variable local.
2. El bucle 2 lee la variable local.
3. El bucle 1 incrementa el valor ledo.
4. El bucle 2 incrementa el valor ledo.
5. El bucle 1 escribe el valor incrementado en la variable local.
6. El bucle 2 escribe el valor decrementado en la variable local.
En este ejemplo, el incremento del primer bucle es sobrescrito por el bucle 2 de forma efectiva. Si
la variable local comenz con un valor cero, el valor resultante sera menos uno. Esto genera una
condicin de carrera, lo que puede causar problemas serios si se desea que el programa calculae
una diferencia exacta.
En este ejemplo en particular, existen varias instrucciones que ocurren mientras la variable local es
leda y cuando es escrita. Por lo tanto, el VI tiene menos probabilidad de cambiar entre los bucles
en el momento equivocado. Esto explica por qu este VI se ejecuta con precisin durante cortos
periodos y slo pierde varios recuentos durante periodos ms largos.
Las condiciones de carrera son difciles de identificar y de depurar, porque el resultado depende
del orden en que el sistema operativo ejecuta tareas programadas y la temporizacin de eventos
externos. El modo en que las tareas interactan entre s y el sistema operativo, as como la
temporizacin arbitraria de los eventos externos convierten este orden en esencialmente aleatorio.
A menudo el cdigo con una condicin de carrera puede devolver el mismo resultado miles de
veces en las pruebas, pero aun as puede devolver un resultado distinto, que puede aparecer cuando
se est usando el cdigo.
Para evitar condiciones de carrera, lo mejor es seguir estas tcnicas:
Control y limitacin de recursos compartidos
Identificar y proteger secciones crticas del cdigo
Especificar el orden de ejecucin
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-27
Controlar y limitar recursos compartidos
Las condiciones de carrera son muy comunes cuando dos tareas tienen acceso tanto de lectura
como de escritura en un recurso, como en el caso del ejemplo anterior. Un recurso es cualquier
entidad compartida entre los procesos. Cuando se trata con condiciones de carrera, los recursos
compartidos ms comunes son el almacenamiento de datos, como las variables. Otros ejemplos de
recursos son archivos y referencias a recursos de hardware.
Permitir que un recurso se altere desde varias ubicaciones suele introducir la posibilidad de una
condicin de carrera. Por lo tanto, una forma ideal de evitar condiciones de carrera es minimizar
recursos compartidos y el nmero de escritores en los recursos compartidos restantes. En general,
no es perjudicial tener varios lectores y monitores para un recurso compartido. Sin embargo,
intente usar slo un escritor o controlador para un recurso compartido. La mayora de las
condiciones de carrera slo ocurren cuando un recurso tiene varios escritores.
En el ejemplo anterior, puede reducir la dependencia de recursos compartidos, si cada bucle
mantiene su recuento localmente. A continuacin, comparta los recuentos finales tras hacer clic en
el botn Stop. Esto supone slo una nica lectura y una nica escritura en un recurso compartido
y elimina la posibilidad de una condicin de carrera. Si todos los recursos compartidos tienen slo
un nico escritor o controlador y el VI tiene un orden de instrucciones bien secuenciado, no habr
condiciones de carrera.
Proteccin de secciones crticas
Una seccin crtica de cdigo es cdigo que debe actuar con coherencia en todas las circunstancias.
En los programas multitarea, una tarea puede interrumpir otra que se est ejecutando. En casi todos
los sistemas operativos modernos esto sucede constantemente. Normalmente esto no tiene efecto
en el cdigo que se ejecuta, pero cuando la tarea que interrumpe altera un recurso compartido que
la tarea interrumpida supone que es constante, ocurre una condicin de carrera.
Cada bucle en la figure 2-20 contiene una seccin de cdigo crtico. Si uno de los bucles
interrumpe al otro bucle mientras est ejecutando el cdigo en su seccin crtica, puede ocurrir una
condicin de carrera. Una forma de eliminar las condiciones de carrera es identificar y proteger las
secciones crticas del cdigo. Existen numerosas tcnicas para proteger secciones crticas. Dos de
las ms eficaces son las variables globales funcionales y los semforos.
Semforos
Los semforos son mecanismos de sincronizacin especficamente diseados para proteger
recursos y secciones crticas de cdigo. Puede evitar que las secciones crticas de cdigo se
interrumpan entre s encerrndolas entre un VI Acquire Semaphore y Release Semaphore. De
forma predeterminada, un semforo slo permite que una tarea lo adquiera simultneamente. Por
lo tanto, una vez que una de las tareas entra en una seccin crtica, las otras tareas no pueden entrar
en sus secciones crticas hasta que se complete la primera tarea. Si se hace correctamente, esto
elimina la posibilidad de una condicin de carrera.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-28 | ni.com
Puede usar semforos para proteger las secciones crticas de cdigo mostrado en la figura 2-20.
Para eliminar la condicin de carrera, abra el semforo antes de comenzar cada ciclo. Dentro de
cada bucle, utilice el VI Acquire Semaphore justo antes de la seccin crtica y usar el VI Release
Semaphore despus de la seccin crtica. La figura 2-21 muestra una solucin a la condicin de
carrera usando semforos.
Figura 2-21. Proteccin de secciones crticas utilizando semforos
Variables globales funcionales
Una forma de proteger secciones crticas es colocarlas en subVIs. Puede llamar slo a un subVI no
reentrante desde una ubicacin a la vez. Por lo tanto, si coloca cdigo crtico en un subVI no
reentrante, evitar que otros procesos que llaman al subVI interrumpan el cdigo. Usar la
arquitectura de variables globales funcionales para proteger secciones crticas resulta
especialmente eficaz, ya que los registros de desplazamiento pueden sustituir mtodos de
almacenamiento menos protegidos como las variables compartidas globales o de tipo
single-process. Las variables globales funcionales tambin sirven para crear subVIs
multifuncionales que controlen todas las tareas asociadas con un recurso concreto.
Tras identificar cada seccin de cdigo crtico en su VI, agrupe las secciones por los recursos a los
que acceden y cree una variable global funcional para cada recurso. Las secciones crticas que
realizan distintas operaciones pueden convertirse en un comando para la variable global funcional.
Puede agrupar secciones crticas que realicen la misma operacin en un comando, reutilizando el
cdigo.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-29
Puede utilizar variables globales funcionales para proteger secciones crticas del cdigo de la
figura 2-20. Para eliminar la condicin de carrera, sustituya las variables locales por una variable
global funcional y coloque el cdigo para incrementar el contador de la variable global funcional,
como en la figura 2-22.
Figura 2-22. Uso de variables globales funcionales para la proteccin de secciones de cdigo
Variables globales funcionales
Una variable global funcional es un VI no reentrante que utiliza registros de desplazamiento sin
inicializar para almacenar los datos globales. El VI a menudo permite acciones a realizar sobre los
datos. Cuando un VI es no reentrante, hay un espacio de datos para el VI. Por lo tanto, slo una
llamada puede ejecutar el VI en cualquier momento dado. Otras llamadas tienen que esperar su
turno para usar el VI.
Puede utilizar registros de desplazamiento sin inicializar en bucles For o While para almacenar
datos, siempre que el VI est en la memoria. El registro de desplazamiento retiene el ltimo valor
de los datos. Un bucle con un registro de desplazamiento no inicializado se conoce como una
variable global funcional. La ventaja de este mtodo frente a una variable global es que puede
controlar el acceso a los datos en el registro de desplazamiento. Adems, la variable global
funcional elimina la posibilidad de condiciones de carrera, porque slo una instancia de una
variable global funcional a la vez, puede ser cargada en la memoria. La forma general de un VI de
variable global funcional incluye una estructura Case y un registro de desplazamiento sin
inicializar con un bucle While de una sola iteracin, como en la figura 2-23.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-30 | ni.com
Figura 2-23. Formato de variables globales funcionales
Una variable global funcional normalmente tiene un parmetro de entrada action que especifica
qu tarea realiza el VI. El VI usa un registro de desplazamiento sin inicializar en un bucle While
para retener el resultado de la operacin. La figura 2-24 muestra una variable global funcional
simple con funcionalidad set y get.
Figura 2-24. Variable global funcional con funcionalidad set y get
En este ejemplo, los datos pasan al VI y se almacena en el registro de desplazamiento si el tipo de
datos enumerado est configurado en Set. Los datos se capturan desde el registro de
desplazamiento si el tipo de datos enumerado se configura en Get.
Consejo Antes de utilizar una variable local o global, asegrese de que una variable
global funcional no habra funcionado en su lugar.
Aunque puede usar variables globales funcionales para implementar variables globales simples,
como en el ejemplo anterior, resultan especialmente tiles para implementar estructuras de datos
ms complejas, como una pila o un bfer de puesta en cola. Tambin puede usar variables globales
1 Registro de desplazamiento sin inicializar
Functional Global Variable Code
1
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-31
funcionales para proteger el acceso a recursos globales, como archivos, instrumentos y dispositivos
de adquisicin de datos, que no puede representarse con una variable global.
Uso de variables globales funcionales para la temporizacin
Una aplicacin potente de las variables globales funcionales es realizar la temporizacin en su VI.
Muchos VIs que realizan medicin y automatizacin requieren alguna forma de temporizacin. A
menudo un instrumento o dispositivo de hardware necesita tiempo para inicializarse. Debe crear
temporizacin explcita en su VI para tener en cuenta el tiempo fsico requerido para inicializar un
sistema. Usted puede crear una variable global funcional que mida el tiempo transcurrido entre
cada vez que se llama al VI, como en la figura 2-25.
Figura 2-25. Variable global funcional Elapsed Time
El caso Elapsed Time obtiene la fecha y hora actuales en segundos y lo resta del tiempo que est
almacenado en el registro de desplazamiento. El caso Reset Time inicializa la variable global
funcional con un valor de tiempo conocido.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-33
Autorrevisin: Cuestionario
1. Cul de los siguientes elementos son motivos para utilizar un patrn de diseo de mltiples
bucles?
a. Ejecutar varias tareas a la vez
b. Ejecutar distintos estados en una mquina de estados
c. Ejecutar tareas a distintas velocidades
d. Ejecutar el cdigo de arranque, el bucle principal y el cdigo de cierre
2. Cules de los siguientes son ejemplos de cdigo gestor de errores?
a. Mostrar un cuadro de dilogo que se utiliza para corregir un VI roto.
b. Genera un cdigo de error definido por el usuario
c. Muestra un cuadro de dilogo cuando se produce un error
d. Transicin de un estado de la mquina de estados a un estado de apagado cuando se produce
un error
3. Cul es el valor de tiempo de espera predeterminado de una estructura Event?
a. 0
b. 100 ms
c. Ningn tiempo de espera
d. El valor de entrada de la funcin Wait (ms) que exista en el mismo bucle que la estructura
Event
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 2-35
Autorrevisin: Respuestas
1. Cul de los siguientes elementos son motivos para utilizar un patrn de diseo de mltiples
bucles?
a. Ejecutar varias tareas a la vez
b. Ejecutar distintos estados en una mquina de estados
c. Ejecutar tareas a distintas velocidades
d. Ejecutar el cdigo de arranque, el bucle principal y el cdigo de cierre
2. Cules de los siguientes son ejemplos de cdigo gestor de errores?
a. Mostrar un cuadro de dilogo que se utiliza para corregir un VI roto.
b. Genera un cdigo de error definido por el usuario
c. Muestra un cuadro de dilogo cuando se produce un error
d. Transicin de un estado de la mquina de estados a un estado de apagado cuando se
produce un error
3. Cul es el valor de tiempo de espera predeterminado de una estructura Event?
a. 0
b. 100 ms
c. Ningn tiempo de espera
d. El valor de entrada de la funcin Wait (ms) que exista en el mismo bucle que la estructura
Event
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 2 Implementando patrones de diseo
2-36 | ni.com
Notas
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
National Instruments | 3-1
3
Control de la interfaz de usuario
Al escribir programas, a menudo debe cambiar los atributos de los objetos del panel frontal
programticamente. Por ejemplo, quiz desee hacer un objeto invisible hasta cierto punto de la
ejecucin del programa. En LabVIEW, puede utilizar el VI Server para acceder a las propiedades
y mtodos de los objetos del panel frontal. Esta leccin explica el VI Server, Nodos de Propiedad,
referencias de control y Nodos de Invocacin.
Temas
A. Arquitectura del VI Server
B. Nodos de Propiedad
C. Nodos de Invocacin
D. Referencias de control
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-2 | ni.com
A. Arquitectura del VI Server
El VI Server es una tecnologa independiente de plataforma orientada a objetos que ofrece acceso
programtico a LabVIEW y a aplicaciones de LabVIEW. VI Server realiza muchas funciones; sin
embargo, esta leccin se concentra en el uso del VI Server para controlar objetos del panel frontal
y editar las propiedades de un VI y de LabVIEW. Para entender cmo usar el VI Server, es til
entender la terminologa asociada a l.
Terminologa orientada a objetos
La programacin orientada a objetos se basa en objetos. Un objeto es un miembro de una clase.
Una clase define lo que puede hacer un objeto, qu operaciones puede realizar (mtodos) y qu
propiedades tiene, como color, tamao, etc.
Los objetos pueden tener mtodos y propiedades. Los mtodos realizan una operacin, como
reinicializar el objeto a su valor predeterminado. Las propiedades son los atributos de un objeto.
Las propiedades de un objeto pueden ser su tamao, color, visibilidad, etc.
Clases de control
Los objetos del panel frontal de LabVIEW heredan propiedades y mtodos de una clase. Cuando
crea un control Stop, es un objeto de la clase booleana y tiene propiedades y mtodos asociados
con esa clase, como en la figura 3-1.
Figura 3-1. Ejemplo de clase booleana
Clase VI
Los controles no son los nicos objetos de LabVIEW que pertenecen a una clase. Un VI pertenece
a la clase VI y tiene sus propias propiedades y mtodos asociados a ella. Por ejemplo, puede usar
los mtodos de clase VI para abortar un VI, para ajustar la posicin de la ventana del panel frontal
y para obtener una imagen del diagrama de bloques. Puede usar las propiedades de la clase VI para
cambiar el ttulo de una ventana del panel frontal, para recuperar el tamao del diagrama de bloques
y para ocultar el botn Abort.
Array Sub-Class
Example Property: Number of Rows
Stop Object
Visible: Yes
Reinitialize to Default: No
Boolean Text: Stop
Boolean Sub-Class
Example Property: Boolean Text
Control Class
Example Property: Visible
Example Method: Reinitialize to Default
Boolean
Stop
Array
Control
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-3
B. Nodos de Propiedad
Los Nodos de Propiedad acceden a las propiedades de un objeto. En algunas aplicaciones quiz
desee modificar programticamente el aspecto de objetos del panel frontal como respuesta a ciertas
entradas. Por ejemplo, si un usuario introduce una contrasea no vlida, quiz desee que parpadee
un LED rojo. Otro ejemplo es cambiar el color de un trazo en un grfico tipo chart. Cuando los
puntos de datos superan cierto valor, quiz desee mostrar un trazo rojo en lugar de uno verde. Los
Nodos de Propiedad permiten realizar estas modificaciones programticamente. Tambin puede
usar Nodos de Propiedad para cambiar el tamao de objetos de paneles, ocultar partes del panel
frontal, aadir cursores a grficos, etc.
Los Nodos de Propiedad en LabVIEW son muy potentes y tienen muchos usos. Consulte la Ayuda
de LabVIEW para obtener informacin adicional acerca de Nodos de Propiedad.
Creacin de Nodos de Propiedad
Cuando cree una propiedad desde un objeto del panel frontal haciendo clic con el botn derecho
en el objeto, seleccionando CreateProperty Node y seleccionando una propiedad del men
contextual, LabVIEW crear un Nodo de Propiedad en el diagrama de bloques que est
implcitamente vinculado al objeto del panel frontal. Si el objeto tiene una etiqueta, el Nodo de
Propiedad tendr la misma etiqueta. Puede cambiar la etiqueta tras crear el nodo. Puede crear
varios Nodos de Propiedad para el mismo objeto del panel frontal.
Uso de Nodos de Propiedad
Cuando crea un Nodo de Propiedad, al principio tiene un terminal que representa una propiedad
que puede modificar para el objeto correspondiente del panel frontal. Si usa este terminal en el
Nodo de Propiedad, puede set (escribir) la propiedad o get (leer) el estado actual de esa propiedad.
Por ejemplo, si crea un Nodo de Propiedad para un control numrico digital usando la propiedad
Visible, aparecer una pequea flecha a la derecha del terminal Property Node, indicando que est
leyendo el valor de esa propiedad. Puede cambiar la accin a escribir haciendo clic con el botn
derecho en el terminal y seleccionando Change to Write en el men contextual. Si cablea un valor
booleano False al terminal de la propiedad Visible, el control numrico desaparecer del panel
frontal cuando el Nodo de Propiedad reciba los datos. Si cablea un valor booleano True, el control
reaparecer.
Figura 3-2. Uso de Nodos de Propiedad
Para obtener informacin de la propiedad, haga clic con el botn derecho en el nodo y seleccione
Change All to Read en el men contextual. Para configurar informacin de la propiedad, haga clic
con el botn derecho en el nodo y seleccione Change All to Write en el men contextual. Si una
propiedad es de slo lectura, Change to Write se atenuar en el men contextual. Si la flecha de
direccin del Nodo de Propiedad apunta a la derecha, est obteniendo el valor de la propiedad. Si
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-4 | ni.com
la flecha de direccin del Nodo de Propiedad apunta a la izquierda, est configurando el valor de
la propiedad. Si el Nodo de Propiedad de la figura 3-2 se configura en Read, cuando se ejecute
producir un valor True si el control es visible o False si es invisible.
Consejo Algunas propiedades son slo de lectura, como la propiedad Label, o slo de
escritura, como la propiedad Value (Signaling).
Para aadir terminales al nodo, haga clic con el botn derecho en la zona blanca del nodo y
seleccione Add Element en el men contextual o use la herramienta de posicionamiento para
cambiar el tamao del nodo. A continuacin, puede asociar cada terminal Property Node con otra
propiedad desde su men contextual.
Consejo Los Nodos de Propiedad ejecutan cada terminal en orden de arriba a abajo.
Algunas propiedades usan clusters. Estos clusters contienen varias propiedades a las que puede
acceder usando las funciones del cluster. Para escribir en estas propiedades como grupo necesita la
funcin Bundle y para leer en estas propiedades se necesita la funcin Unbundle. Para acceder a
las propiedades unidas, seleccione All Elements en el men contextual. Por ejemplo, puede
acceder a todos los elementos de la propiedad Position seleccionando PropertiesPositionAll
Elements en el men contextual.
Sin embargo, puede acceder a los elementos del cluster como propiedades individuales, como en
la figura 3-3.
Figura 3-3. Propiedades que usan clusters
C. Nodos de Invocacin
Los Nodos de Invocacin acceden a los mtodos de un objeto.
Use el Nodo de Invocacin para realizar acciones o mtodos en una aplicacin o VI. A diferencia
del Nodo de Propiedad, un solo Nodo de Invocacin ejecuta nicamente un mtodo o una
aplicacin o VI. Seleccione un mtodo utilizando la herramienta de operaciones para hacer clic en
el terminal del mtodo o haciendo clic con el botn derecho en la zona blanca del nodo y
seleccionando Methods en el men contextual. Tambin puede crear un Nodo de Invocacin
implcitamente vinculado haciendo clic con el botn derecho en un objeto del panel frontal,
seleccionado CreateInvoke Node y seleccionando un mtodo del men contextual.
El nombre del mtodo es siempre el primer terminal de la lista de parmetros del Nodo de
Invocacin. Si el mtodo devuelve un valor, el terminal del mtodo muestra el valor devuelto. De
lo contrario, el terminal del mtodo no tendr valor.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-5
El Nodo de Invocacin muestra los parmetros de arriba a abajo con el nombre del mtodo en la
parte superior y los parmetros opcionales, que estn atenuados, en la parte inferior.
Mtodos de ejemplo
Un ejemplo de mtodo comn a todos los controles es Reinitialize to Default. Use este mtodo para
reinicializar un control a su valor predeterminado en algn punto del VI. La clase VI tiene un
mtodo similar llamado Reinitialize All to Default.
La figura 3-4 es un ejemplo de mtodo asociado con la clase Waveform Graph. Este mtodo
exporta la imagen del grfico waveform graph al Portapapeles o a un archivo.
Figura 3-4. Nodo de Invocacin para el mtodo Export Image
D. Referencias de control
Un Nodo de Propiedad creado desde el objeto del panel frontal o el terminal del diagrama de
bloques es un Nodo de Propiedad vinculado implcitamente. Esto significa que el Nodo de
Propiedad est vinculado al objeto del panel frontal. Qu ocurre si usted debe colocar los Property
Nodes en un subVI? Entonces los objetos ya no se encuentran en el panel frontal del VI que
contiene los Property Nodes. En este caso, necesita un Nodo de Propiedad explcitamente
vinculado. Un Nodo de Propiedad explcitamente vinculado se crea cableando una referencia a un
Nodo de Propiedad genrico.
Si est creando un VI que contiene varios Nodos de Propiedad o si est accediendo a la misma
propiedad para varios controles e indicadores distintos, puede colocar el Nodo de Propiedad en un
subVI y usar referencias de control para acceder a ese nodo. Una referencia de control es una
referencia a un objeto concreto del panel frontal.
Esta seccin muestra una forma de usar referencias de control. Consulte el tema Controlling Front
Panel Objects de la Ayuda de LabVIEW para obtener informacin adicional acerca de las
referencias de control.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-6 | ni.com
Creacin de un SubVI con Nodos de Propiedad
Como en la figura 3-5, el modo ms sencillo de crear Nodos de Propiedad explcitamente
vinculados es completar los siguientes pasos:
1. Cree el VI.
2. Seleccione la parte del diagrama de bloques que se encuentre en el subVI, como se muestra en
la primera parte de la figura 3-5.
3. Seleccione EditCreate SubVI. LabVIEW crea automticamente las referencias de control
necesarias para el subVI.
4. Personalice y guarde el subVI. Como puede ver en la segunda parte de la figura 3-5, el subVI
usa el icono predeterminado.
Figura 3-5. Uso de EditCreate SubVI para crear referencias de control
La figura 3-6 muestra el subVI creado. Observe que los controles Control Refnum del panel frontal
se han creado y conectado a un Nodo de Propiedad del diagrama de bloques.
Figura 3-6. SubVI creado usando EditCreate SubVI
Nota Una estrella roja en el control Control Reference indica que el refnum es de tipo
estricto. Consulte la seccin Strictly Typed and Weakly Typed Control Refnums del tema
Controlling Front Panel Objects de la Ayuda de LabVIEW para obtener informacin
adicional acerca de las referencias de control de tipo dbil y estricto.
Objetos seleccionados para crear el subVI EditCreate SubVI utilizado
Panel frontal del subVI creado Diagrama de bloques del subVI creado
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-7
Creacin de referencias de control
Para crear una referencia de control para un objeto del panel frontal, haga clic con el botn derecho
en el objeto o en su terminal del diagrama de bloques y seleccione CreateReference en el men
contextual.
Puede cablear esta referencia de control a un Nodo de Propiedad genrico. Puede pasar la
referencia del control a un subVI usando un terminal de refnum de control.
Uso de referencias de control
Configurar propiedades con una referencia de control resulta til para configurar la misma
propiedad para varios controles. Algunas propiedades se aplican a todas las clases de controles,
como la propiedad Disabled. Algunas propiedades slo se aplican a ciertas clases de control, como
la propiedad Lock Boolean Text in Center.
El siguiente ejemplo muestra cmo crear un VI que use una referencia de control en el subVI para
configurar el estado Enable/Disable de un control en el panel frontal del VI principal.
Figura 3-7. Referencias de control
1 VI principal 2 SubVI
1 2
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-8 | ni.com
El VI principal enva una referencia para el control numrico digital al subVI junto con un valor
cero, uno o dos desde el control enumerado. El subVI recibe la referencia mediante el Ctl Refnum
en su ventana del panel frontal. A continuacin, la referencia se pasa al Nodo de Propiedad. Como
el Nodo de Propiedad ahora se vincula con el control numrico del VI principal, el Nodo de
Propiedad puede cambiar las propiedades de ese control. En este caso, el Nodo de Propiedad
manipula el estado enabled/disabled.
Observe el aspecto del Nodo de Propiedad en el diagrama de bloques. No puede seleccionar una
propiedad en un Nodo de Propiedad genrico hasta que se elija la clase. La clase se elige cableando
una referencia al Nodo de Propiedad. ste es un ejemplo de un Nodo de Propiedad explcitamente
vinculado. No se vincula a un control hasta que el VI se est ejecutando y se pase una referencia al
Nodo de Propiedad. La ventaja de este tipo de Nodo de Propiedad es su naturaleza genrica. Como
no tienen vnculo explcito a un control, puede reutilizarse para varios controles. El Nodo de
Propiedad genrico est disponible en la paleta de Funciones.
Seleccin de la Clase VI Server
Cuando aade un Control Refnum al panel frontal de un subVI, a continuacin debe especificar la
VI Server Class del control. Esto especifica el tipo de referencias de control que aceptar el subVI.
En el ejemplo anterior, se seleccion Control como tipo de VI Server Class, como en la figura 3-7.
Esto permite que el VI acepte una referencia a cualquier tipo de control del panel frontal.
Sin embargo, puede especificar una clase ms concreta para el refnum de manera que el subVI sea
ms restrictivo. Por ejemplo, puede seleccionar Digital como la clase. As, el subVI slo podr
aceptar referencias a controles numricos de la clase Digital. Si selecciona una clase ms genrica
para un refnum de control, permitir que acepte un rango de objetos mayor, pero limitar las
propiedades disponibles que se aplican a todos los objetos que pueda aceptar el Nodo de Propiedad.
Para seleccionar una clase especfica de control, haga clic con el botn derecho en el control y
seleccione Select VI Server ClassGenericGObjectControl en el men contextual. A
continuacin, seleccione la clase concreta de control.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-9
Creacin de propiedades y mtodos con la ventana Class
Browser
Puede utilizar la ventana Class Browser para seleccionar una librera de objetos y crear una nueva
propiedad o mtodo.
Complete los siguientes pasos para crear una nueva propiedad o mtodo utilizando la ventana Class
Browser.
1. Seleccione ViewClass Browser para mostrar la ventana Class Browser.
2. En el men desplegable de la librera Object, seleccione una librera.
3. Seleccione una clase en el men desplegable Class. Use los siguientes botones para navegar
por las clases.
Haga clic en el botn Select View para alternar entre una vista alfabtica y una vista
jerrquica de los elementos del men desplegable Class y la lista Properties y mtodos.
Haga clic en el botn Search para lanzar el cuadro de dilogo Class Browser Search.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-10 | ni.com
4. En la lista Properties and Methods de la ventana Class Browser, seleccione una propiedad o
mtodo. La propiedad o mtodo que seleccione aparecer en el cuadro Selected property or
method.
5. Haga clic en el botn Create o Create Write para aadir un nodo con la propiedad o mtodo
seleccionados al cursor del ratn y aadir el nodo al diagrama de bloques. El botn Create crea
una propiedad para lectura o un mtodo. Este botn se atena cuando selecciona una propiedad
de slo escritura. Para crear una propiedad para escritura, haga clic en el botn Create Write.
Este botn se atena cuando selecciona un mtodo o una propiedad de slo lectura. Tambin
puede arrastrar una propiedad o mtodo desde la lista Properties and Methods directamente al
diagrama de bloques.
6. Repita los pasos 2 al 5 para otras propiedades o mtodos que desee crear y aadir al diagrama
de bloques.
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-11
Autorrevisin: Cuestionario
1. Para cada uno de estos elementos, determine si funcionan en una clase VI o en una clase
Control.
Format and Precision
Visible
Reinitialize to Default Value
Show Tool Bar
2. Usted tiene un refnum de control numrico, se muestra a la izquierda, en un subVI. Cul de
las siguientes referencias de control podra cablear al terminal de refnum de control del subVI?
(varias respuestas)
a. Referencia de control de un mando
b. Referencia de control de un array numrico
c. Referencia de control de un indicador de termmetro
d. Referencia de control de un LED
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Manual de Curso LabVIEW Core 2
National Instruments | 3-13
Autorrevisin: Respuestas
1. Para cada uno de estos elementos, determine si funcionan en una clase VI o en una clase
Control.
Format and Precision: Control
Visible: Control
Reinitialize to Default Value: Control
Show Tool Bar: VI
2. Usted tiene un refnum de control numrico, se muestra a la izquierda, en un subVI. Qu
referencias de control podra cablear al terminal de refnum de control del subVI?
a. Referencia de control de un mando
b. Referencia de control de un array numrico
c. Referencia de control de un indicador de termmetro
d. Referencia de control de un LED
N
a
t
i
o
n
a
l

I
n
s
t
r
u
m
e
n
t
s



N
o
t

f
o
r

d
i
s
t
r
i
b
u
t
i
o
n
Leccin 3 Control de la interfaz de usuario
3-14 | ni.com
Notas

Vous aimerez peut-être aussi