You are on page 1of 58

Índice general

Índice general 1

1 Programación en Labview 5
1.1. Introducción a la programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1. Principio de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1.1. Flujo de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2. Entorno de Labview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2.1. Panel frontal y diagrama de bloques . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2.2. Ícono y panel de conectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2.3. Ventana context help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2.4. Herramientas comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.3. Tipo de datos y estructura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1.3.1. Numérico, cadena, booleano, path, enum . . . . . . . . . . . . . . . . . . . . 14
1.1.3.2. Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.3.3. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.3.4. Forma de onda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.3.5. Marcas de tiempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.3.6. Tipos de datos dinámicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.3.7. Coerción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.3.8. Conversión y manipulación de datos . . . . . . . . . . . . . . . . . . . . . . . 17
1.1.4. Depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1.4.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2 Estructuras de Control 19
2.1. Bucle while y bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1. Bucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.2. Bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.3. Componentes de bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.4. Autoindexado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.5. Registros de corrimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Estructuras case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.1. Selector de case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2. Tuneles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3. Estructuras secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1. Tipos de estructuras secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4. Estructuras de evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.2. Componentes de la estructura de eventos . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5. Formule node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6. Expression nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1
Índice general

2.7. Formula node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3 Manejo de ficheros 29
3.1. Entrada y salida de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1. Funciones y Vis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2. Gráficos y tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1. Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1.1. Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1.2. Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3. Acciones mecánicas de los booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1. Describir las seis diferentes acciones mecánicas . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.1. Switch when pressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.2. Switch when released . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.3. Switch until released . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.4. Latch when pressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.5. Latch when released . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1.6. Latch until released . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4. Temporización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1. Funciones de temporización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.1. Tick Count (ms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.2. High Resolution Relative Seconds . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.3. Wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.4. Wait Until Next ms Multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.5. Time Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.1.6. Timed elapsed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1.7. Get Date/Time In Seconds Function . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1.8. Get Date/Time String Function . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1.9. Format Date/Time String Function . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1.10. Date/Time To Seconds Function . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4.1.11. Seconds To Date/Time Function . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5. Subvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5.1. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5.2. Pasos para crear un subvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5.2.1. Crear un icono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5.2.2. Panel de conectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5.2.3. Invocar un Subvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4 Programación nivel intermedio 41


4.1. Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1. Comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2. Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.1. Comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Nodos de propiedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4. Gestión de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.1. Gestión manual/automática de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.2. Clusters de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.3. Vis y funciones de manejo de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4.3.1. Simple error handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4.3.2. General error handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4.3.3. Clear error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

2
Índice general

4.4.3.4. Códigos personalizados de error . . . . . . . . . . . . . . . . . . . . . . . . . 46


4.5. Librerias dinámicas (.dll) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5 Protocolo de Comunicación Serial 51


5.1. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2. Descripción y configuración de los Vis para envio y recibo de datos . . . . . . . . . . . . . . . 52
5.2.1. VISA Configure Serial Port VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.2. VISA Write Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.3. VISA Read Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.4. Bytes at Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.5. VISA Close Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.3. Envio y Recepcion de datos utilizando puertos virtuales . . . . . . . . . . . . . . . . . . . . . 53
5.3.1. Configuracion de simulador de puertos virtuales . . . . . . . . . . . . . . . . . . . . . . 53
5.3.2. Envio de datos en Labview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.3.3. Recepcionando datos en Labview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.4. Envio y recibo de datos de una PC a tarjeta Arduino . . . . . . . . . . . . . . . . . . . . . . . 56

3
Capítulo

Programación en Labview

1.1. Introducción a la programación


LabVIEW viene de la abreviatura “Laboratory Virtual Instrument Engineering Workbench”, es una platafor-
ma y entorno de desarrollo para un lenguaje de programación visual desarrollado por la National Instruments.

Inicialmente Labview fue creado para funcionar sobre maquinas Apple Macintosh o también conocidas como
MAC, actualmente está disponible para diversas plataformas como Windows, Unix, Linux y Mac OS X.

LABVIEW se utiliza comúnmente para la adquisición de datos, control de instrumentos, y la automatización


industrial pero hoy en día se ha expandido ampliamente no sólo al control de todo tipo de electrónica sino
también a su programación embebida, comunicaciones, matemáticas, etc.

El lenguaje de programación que utiliza LABVIEW es un lenguaje de programación denominado lenguaje G,


donde G simboliza que es un lenguaje Grafico. Esta es la diferencia principal entre otros tipos de lenguajes de
programación como C, Python o Java donde uno tenía que escribir código para cierta aplicación, en LabVIEW
no ocurre eso ya que al ser un lenguaje grafico lo que se hace es agregar bloques denominado sub vi donde
vi quiere decir Virtual Instrument, interconectamos los bloques agregados a nuestro diagrama de bloques y
generamos una aplicación, si queremos crear una interfaz gráfica para el usuario tendremos que ir al panel
frontal donde se encuentran los controles, indicadores y las herramientas de edición para generar una interfaz
gráfica, Esta facilidad de LabVIEW para programar y crear interfaces graficas de manera rápida y eficiente es
lo que lo hace un software bastante útil para el desarrollo de proyectos, ya que reduce el tiempo de desarrollo
de las aplicaciones al menos de 4 a 10 veces.

LabVIEW no solo cuenta con un entorno amigable para el programador sino que también posee herramientas
potentes para la depuración del código como incluir sonda de prueba, puntos de ruptura, y pasar por encima
de/a y fuera del código. Con estas herramientas se puede sondear datos sobre muchas partes del programa de
manera simultánea, también es posible pausar la ejecución del programa y ver paso a paso como trabaja el
código y verificar verdaderamente si ejecuta lo que se le ha indicado. Si bien esto es posible en otros lenguajes
de programación, es más fácil de visualizar el estado del programa y las relaciones entre las partes paralelas del
código debido a la naturaleza gráfica del lenguaje G. Una de las características de depuración más comunes
utilizados en LabVIEW es siempre en la compilación. Mientras que usted está desarrollando un programa,
el compilador comprueba si ocurre algún problema y proporciona información semántica y sintáctica de la
aplicación. Si existe un error, no se puede ejecutar el programa y en la barra de herramientas se observa al
botón de ejecutar el programa como si estuviera roto. Al pulsar el botón se abre una lista de problemas que
deben ser solucionados por el programador.

Una vez que se han corregido los problemas el compilador de LabVIEW puede compilar su programa a código
máquina. Una vez compilado, el desempeño de los programas G es comparable a la de los lenguajes más tradi-

5
1. Programación en Labview

cionales basados en texto como C. A lo largo del curso aprenderemos a manipular las herramientas de edición
de interfaz gráficas, como agregar controladores, indicadores y a cómo utilizar los bloques de programación
en LabVIEW como son la estructura if, case, for, while y estructuras propia de LabVIEW como el Event
Structure, Flat Sequence y Staqued Sequence. Ahora LabVIEW también me permite implementar protocolos
de comunicación como RS232 y USB para comunicarme con un Microcontrolador y hacer un adquisición
de datos para luego graficarlos en un indicador, la National Instruments también proporciona tarjetas de
desarrollo propias como es la NIDAQ-6008 la cual posee entrada/salidas digitales y analógicas mediante pro-
gramación se puede implementar un generador de señales o hacer un controlador PID. Si queremos hacer
comunicaciones avanzadas vía Red también tenemos bloques de comunicación UDP y TCP con lo cual se
puede comunicar vía LAN de PC a PC de manera cableada o inalámbrica si se cuenta con un Acces point,
la gran versatilidad de LabVIEW permite desarrollar cualquier tipo de proyecto desde el más simple hasta el
más complejo desde comunicar un simple Microcontrolador hasta establecer comunicación vía Ethernet con
un PLC s7-1200 de Siemens utilizando NiOPCserver.

1.1.1. Principio de programación

1.1.1.1. Flujo de datos

LabVIEW sigue un modelo de flujo de datos para ejecutar VIs. Un nodo de diagrama de bloques se ejecuta
cuando recibe todas las entradas requeridas. Cuando el nodo se ejecuta, produce datos de salida y pasa los
datos al siguiente nodo en la trayectoria del flujo de datos. El movimiento de datos a través de los nodos
determina el orden de ejecución de los VIs y las funciones en el diagrama de bloques.

Visual Basic, C++, Java y la mayoría de otros lenguajes de programación basados en texto siguen un modelo
de flujo de control para ejecución del programa. En el flujo de control, el orden secuencial de los elementos
del programa determina el orden de ejecución de un programa.

Para un ejemplo de programación de flujo de datos, considere un diagrama de bloques que suma dos números
y después resta 50.00 del resultado de la suma, como se muestra en la Figura 1. En este caso, el diagrama de
bloques se ejecuta de izquierda a derecha, no porque los objetos están colocados en ese orden, sino porque le
función de Resta no puede ejecutarse hasta que la función de Suma termina ejecutarse y pasa los datos a la
función de Resta. Recuerde que un nodo se ejecuta solamente cuando los datos están disponibles en todas sus
terminales de entrada y proporciona los datos a las terminales de salida solamente cuando el nodo termina
la ejecución.

Figura 1.1: Ejemplo de Programación de Flujo de Datos

En la Figura 1.2, considere cuál segmento de código debe ejecutarse primero—la función de Suma, Número
Aleatorio o División. No se puede saber porque las entradas a las funciones de Suma y División están dis-
ponibles al mismo tiempo y la función de Números Aleatorios no tiene entradas. En una situación donde
un segmento de código debe ejecutarse antes que otro y no existe ninguna dependencia de datos entre las
funciones, use otros métodos de programación como estructuras de secuencia o clusters de error para forzar
el orden de la ejecución.

6
1.1. Introducción a la programación

Figura 1.2: Ejemplo de Flujo de Datos para Múltiples Segmentos de Código

1.1.2. Entorno de Labview


1.1.2.1. Panel frontal y diagrama de bloques
Panel frontal: Cuando abre un VI nuevo o existente, aparece la ventana del panel frontal del VI. La
ventana del panel frontal es la interfaz de usuario para el VI.

(1) Ventana de Panel Frontal


(2) Barra de Herramientas
(3) Paleta de Controles

Barra de herramientas del panel frontal: Cada ventana tiene una barra de herramientas asociada con ella.
Utilice los botones de la barra de herramientas de la ventana del panel frontal para ejecutar y editar el VI.
La siguiente barra de herramientas aparece en la ventana del panel frontal.

7
1. Programación en Labview

Haga clic en el botón Run para ejecutar un VI. LabVIEW compila el VI, si es
necesario. Puede ejecutar un VI si el botón Run aparece como una flecha en blanco,
mostrada a continuación. La flecha blanca también indica que usted puede usar el
VI como subVI si crea un panel conector para el VI.

Mientras el VI se ejecuta, el botón Run aparece como se muestra arriba si el VI es


de alto nivel, lo cual significa que no tiene callers y por consiguiente no es un subVI.

Si el VI que se está ejecutando es un subVI, el botón Run aparece como se muestra


arriba.

El botón Run aparece roto cuando el VI que está creando o editando contiene errores.
Si el botón Run aún aparece roto después de que terminó de cablear el diagrama de
bloques, el VI está roto y no se puede ejecutar. Haga clic en este botón para mostrar
la ventana Error list, la cual enlista todos los errores y advertencias.

Haga clic en el botón Run Continuously para ejecutar el VI hasta que usted finalice o
detenga la ejecución. También puede hacer clic en el botón otra vez para deshabilitar
la ejecución continua.

Hasta que el VI se ejecuta, aparece el botón Abort Execution. Haga clic en este
botón para detener el VI inmediatamente si no hay otra manera de detener el VI.
Si más de uno de los VIs de alto nivel ejecutándose utiliza el VI, el botón está en
color tenue. Precaución: El botón Abort Execution detiene al VI inmediatamente,
antes que el VI termine la actual iteración. Al detener un VI que utiliza recursos
externos, como hardware externo, puede dejar los recursos en un estado desconocido
sin restablecerlos o liberarlos adecuadamente. Diseñe VIs con un botón de paro para
evitar este problema.

Haga clic en el botón Pause para detener un VI ejecutándose. Cuando hace clic en el
botón Pause, LabVIEW resalta en el diagrama de bloques la ubicación donde usted
detuvo la ejecución y aparece en rojo el botón Pause. Haga clic en el botón Pause
otra vez para continuar ejecutando el VI.

Seleccione el menú desplegable Text Settings para cambiar las configuraciones de la


fuente para las porciones seleccionadas del VI, incluyendo tamaño, estilo y color.

Seleccione el menú desplegable Align Objects para alinear los objetos a lo largo de
los ejes, incluyendo vertical, orilla de arriba y así sucesivamente.
Seleccione el menú desplegable Distribute Objects para espaciar los objetos unifor-
memente, incluyendo intervalos, compresión y así sucesivamente.

Seleccione el menú desplegable Resize Objects para cambiar el tamaño de múltiples


objetos del panel frontal al mismo tamaño.

Seleccione el menú desplegable Reorder cuando tiene objetos que se traslapan en-
tre ellos y quiere definir cuál está enfrente o atrás de cada uno. Seleccione uno de
los objetos con la herramienta de Posicionamiento y después seleccione entre Move
Forward, Move Backward, Move To Front y Move To Back.

8
1.1. Introducción a la programación

Seleccione el botón Show Context Help Window para visualizar la ventana de ayuda
contextual.

Enter Text aparece para recordarle que un nuevo valor está disponible para reem-
plazar uno viejo. El botón Enter Text desaparece cuando hace clic en él, presiona la
tecla <Enter> o hace clic en el área del panel frontal o del diagrama de bloques.

Paleta de control

El Controls palette contiene los controles e indicado-


res que se usan para crear el panel frontal. Se puede
acceder al Controls Palette de la ventana del panel
frontal seleccionando View » Controls Palette or click
derecho a cualquier espacio vació dentro de la ventana
del panel frontal. El Controls Palette se divide en va-
rias categorías; usted puede exponer algunas o todas
estas categorías según sea sus necesidades.

En la siguiente Figura se muestra el Controls palette


con todas las las categorías expuestas y la categoría
Modern expuesta.

Diagrama de bloques Los objetos del diagrama de bloques incluyen terminales, subVIs, funciones,
constantes, estructuras y cables, los cuales transfieren datos junto con otros objetos del diagrama de
bloques.

Figura 1.3: Ejemplo de un Diagrama de Bloques y Panel Frontal Correspondiente

(1) Terminales de Indicador (3) Nodos


(2) Cables (4) Terminales de Control

9
1. Programación en Labview

Barra de herramientas del diagrama de bloques

Haga clic en el botón Highlight Execution para mostrar una animación de la ejecución
del diagrama de bloques cuando ejecute el VI. Note el flujo de datos a través del
diagrama de bloques. Haga clic en el botón otra vez para deshabilitar la ejecución
animada.
La ejecución resaltada muestra el movimiento de los datos en el diagrama de bloques
desde un nodo a otro usando burbujas que se mueven a lo largo del cable. Use la
ejecución resaltada con la herramienta single-stepping para ver cómo los valores de
los datos se mueven de nodo a nodo a través del VI.

Haga clic en el botón Retain Wire Values para guardar los valores del cable en cada
punto en el flujo de ejecución para que cuando coloque una punta de prueba en
el cable pueda retener inmediatamente los valores más recientes de los datos que
pasaron a través del cable. Debe ejecutar con éxito el VI por lo menos una vez antes
de que pueda retener los valores del cable.

Haga clic en el botón Step Into para abrir un nodo y hacer pausa. Cuando hace clic
en el botón Step Into otra vez, ejecuta la primera acción y hace pausa en la siguiente
acción del subVI o estructura. También puede presionar el <Ctrl> y la flecha hacia
abajo. Avance a través de los pasos de VI por medio del VI nodo por nodo. Cada
nodo se prende para denotar cuando está listo para ejecutarse.

Haga clic en el botón Step Over para abrir un nodo y hacer pausa al siguiente nodo.
También puede presionar el <Ctrl> y la flecha hacia arriba. Al presionar el nodo,
ejecuta el nodo sin avance simple a través del nodo.

Haga clic en el botón Step Out para terminar de ejecutar un nodo actual y hacer
pausa. Cuando el VI termina de ejecutarse, el botón Step Out está en color tenue.
También puede presionar el <Ctrl> y la flecha hacia arriba. Al presionar un nodo,
completa el avance en el nodo y navega al siguiente nodo.

El botón de Advertencia aparece si un VI incluye una advertencia y si colocó una


marca en la casilla Show Warnings en la ventana Error List. Una advertencia indica
que hay un problema potencial con el diagrama de bloques, pero no detiene al VI.

10
1.1. Introducción a la programación

Use la herramienta Probe para verificar los valores intermedios en un cable mientras
un VI se ejecuta. También use la herramienta de Probe si tiene un diagrama de
bloques complicado con una serie de operaciones y cualquiera de ellas puede regresar
datos incorrectos. Use la herramienta de Probe con la identificación de ejecución,
avance simple y puntos de paro para determinar donde están los datos incorrectos.
Si los datos están disponibles, la punta de prueba se actualiza inmediatamente y
muestra los datos en la Probe Watch Window durante la identificación de ejecución,
avance simple o cuando hace pausa en un punto de paro. Cuando la ejecución hace
pausa en un nodo por avance simple o un punto de paro, también puede medir el
cable que se ejecutó para ver el valor que fluye a través de ese cable.

Paleta de funciones: Paleta de funciones

La paleta de funciones (fig. 1.4) contiene el VIS, fun-


ciones y constantes que se utilizan para crear el dia-
grama de bloques. Se accede a la paleta de funciones
desde el diagrama de bloques, seleccione Ver »Pale-
ta de Funciones. La paleta de funciones se divide en
varias categorías; puede mostrar y ocultar categorías
para adaptarse a sus necesidades.

1.1.2.2. Ícono y panel de conectores


El icono y el panel del conector se utilizan para que
pueda utilizar el VI como un subVI. El panel icono y
conector corresponde al prototipo de función en len-
guajes de programación basados en texto. Cada VI
muestra un icono, como el que se muestra a continua-
ción, en la esquina superior derecha de las ventanas
del panel frontal y del diagrama de bloques.

Figura 1.4: Paleta de funciones

1.1.2.3. Ventana context help


La ventana de Context Help muestra información básica sobre objetos de LabVIEW cuando mueve el cursor
sobre cada objeto. Para activar la visualización de la ventana de Context Help seleccione Help»Show Context
Help, presione las techas <Ctrl-H> o haga clic en el botón de Show Context Help Window en la barra de
herramientas.

11
1. Programación en Labview

Figura 1.5: Ventana Context Help

Cuando mueve el cursor sobre el panel frontal y objetos del diagrama de bloques, la ventana Context Help
muestra el ícono para subVIs, funciones, constantes, controles e indicadores con cables sujetos a cada ter-
minal. Cuando mueve el cursor sobre las opciones de ventana de diálogo, la ventana Context Help muestra
descripciones de esas opciones.

1.1.2.4. Herramientas comunes


Selección de una Herramienta: Se puede crear modificar y depurar Vis usando las herramientas proporcionadas
por LabVIEW. Una herramienta es un especial modo de operación del cursor del mouse. El modo de operación
del cursor corresponde al icono de la herramienta seleccionada. Labview selecciona esta herramienta basada
en la actual localización del mouse.

Figura 1.6: Tools Palette

Se puede elegir manualmente la herramienta que se necesita seleccionando esta del tools palette. Seleccione
View»Tools Palette para mostrar el Tools palette.
Selector Automático de Herramientas

El primer elemento en la paleta Tools es el botón Automatic Tool Selection. Cuando selecciona esto, LabVIEW
automáticamente escoge una herramienta de acuerdo a la ubicación de su cursor. Puede apagar la selección
automática de herramientas al anular la selección de este elemento y seleccionar otro elemento en la paleta.
Si va a comparar las herramientas en LabVIEW con herramientas caseras comunes, las herramientas enlistadas
a continuación podría representar un desarmador, un cuchillo o un sacacorchos y el selector automático de
herramientas podría ser un cuchillo Swiss Army, capaz de realizar todas las tareas.

12
1.1. Introducción a la programación

Figura 1.7: Herramientas Individuales y Selector Automático de Herramientas

Cuando el cursor del mouse cambia al ícono que se muestra arriba, la herramienta
de Operación está en operación. Use la herramienta de Operación para cambiar los
valores de un control. Por ejemplo, en la Figura 2, la herramienta de Operación mueve
el puntero en la Horizontal Pointer Slide. Cuando el mouse está sobre el puntero, el
cursor automáticamente obtiene acceso a la herramienta de Operación

Cuando el cursor del mouse cambia al ícono que se muestra arriba, la herramienta
de Posicionamiento está en operación. Use la herramienta de Posicionamiento para
seleccionar o cambiar el tamaño de los objetos. Por ejemplo, en la Figura 3, la herra-
mienta de Posicionamiento selecciona el control numérico Number of Measurements.
Después de seleccionar un objeto, puede mover, copiar o eliminar el objeto. Cuando
el mouse está sobre el orilla de un objeto, el cursor automáticamente obtiene acceso
a la herramienta de Posicionamiento.

Cuando el cursor del mouse cambia al ícono que se muestra arriba, la herramienta
Etiquetado está en operación. Use la herramienta de Etiquetado para proporcionar
el texto en un control, para editar texto y para crear etiquetas. Por ejemplo, en la
Figura 5, la herramienta de Etiquetado proporciona el texto en el control numérico
Number of Measurements. Cuando el mouse está sobre el interior del control, el
cursor automáticamente obtiene acceso a la herramienta de Etiquetado. Haga clic
para colocar un cursor dentro del control. Después haga doble clic para seleccionar
el texto actual.

Cuando el cursor del mouse cambia al ícono que se muestra arriba, la herramienta
de Cableado está en operación. Use la herramienta de Cableado para cablear objetos
juntos en el diagrama de bloques. Por ejemplo, en la Figura 6, la herramienta de
Cableado cablea la terminal Number of Measurements a la terminal Loop Count del
Ciclo For. Cuando el mouse está sobre la salida o entrada de una terminal o sobre
un cable, el cursor automáticamente obtiene acceso a la herramienta de Cableado.

Use la herramienta de Menú de Acceso Directo de Objetos para tener acceso al menú
de objetos con el botón izquierdo del mouse. Usted también puede tener acceso a
este menú al dar clic con botón derecho en cualquier objeto en LabVIEW.

Use la herramienta de Desplazamiento para desplazarse a través de las ventanas sin


usar barras de desplazamiento.

Use la herramienta de Breakpoint para establecer puntos de pausa en VIs, funciones,


nodos y estructuras para detener la ejecución en esa ubicación.

13
1. Programación en Labview

Use la herramienta de Probe para crear puntos de prueba en el diagrama de bloques.


También úsela para verificar los valores intermedios en un VI que produce resultados
cuestionables o inesperados.

Use la herramienta de Colorear para colorear un objeto. La herramienta de Colorear


también muestra las configuraciones actuales de color en primer plano y el fondo.

Use la Herramienta de Copiar Color para copiar colores y después pegarlos con la
herramienta de Coloreo

1.1.3. Tipo de datos y estructura de datos


1.1.3.1. Numérico, cadena, booleano, path, enum
Numérico: LabVIEW representa datos numéricos como números de punto flotante, números de punto
fijo, números enteros, números enteros sin signo y números complejos. Precisión doble o simple, así
como datos numéricos complejos son representados con el color naranja en LabVIEW. Todos los datos
numéricos enteros son representados con el color azul.

Nota: La diferencia entre los tipos de datos numéricos es el número de bits que usan para almacenar datos y
los valores de datos que representan.
Ciertos tipos de datos también ofrecen opciones de configuración extendida. Por ejemplo, puede asociar
unidades físicas de medida con datos de punto flotante, incluyendo números complejos y usted puede configurar
la codificación y rango para datos de punto fijo.

Cadena: Una cadena es una secuencia de caracteres ASCII visibles o no visibles. Las cadenas de ca-
racteres ofrecen un formato independiente a la plataforma para información y datos. Algunas de las
aplicaciones más comunes de cadena de caracteres incluyen las siguientes:

? Crear mensajes de texto simples.


? Controlar instrumentos al enviar comandos de texto al instrumento y regresar
valores de datos en la forma de ASCII o cadena de caracteres binarias, las cuales
después puede convertir en valores numéricos.
? Almacenar datos numéricos en un fichero. Para almacenar datos numéricos en un
archivo ASCII, primero debe convertir datos numéricos en cadena de caracteres
antes de escribir a un archivo.
? Instruir o advertir al usuario con ventanas de diálogo.
En el panel frontal, las cadenas de caracteres aparecen como tabla, cuadros de texto y etiquetas. LabVIEW
incluye VIs integrados y funciones que puede usar para manipular secuencias, incluyendo formato de cadena
de caracteres, análisis de cadena de caracteres y otras ediciones. LabVIEW representa datos de cadena de
caracteres en color rosa.

14
1.1. Introducción a la programación

Booleano: LabVIEW almacena datos Booleanos como valores de 8 bits. Un Booleano puede ser usado
en LabVIEW para representar un 0 o 1 o un TRUE o FALSE. Si el valor de 18 bits es cero, el valor
Booleano es FALSE. Cualquier valor no igual a cero representa TRUE. Las aplicaciones comunes para
datos Booleanos incluyen representar datos digitales y servir como un control de panel frontal que
actúa como un conmutador que tiene una acción mecánica generalmente usada para controlar una
estructura de ejecución como una estructura de Caso. Un control Booleano generalmente es usado
como la declaración condicional para terminar un Ciclo While. En LabVIEW el color verde representa
datos Booleanos.

Path: Utilice los controles e indicadores de ruta para ingresar o devolver la ubicación de un archivo o
directorio

Enum: Un enum (control, constante o indicador enumerado) es una combinación de tipos de datos. Un
enum representa un par de valores, una cadena de caracteres y un valor numérico, donde el enum puede
ser uno de una lista de valores.

1.1.3.2. Clusters
El cluster es análogo a una estructura en la programación C, combina uno o más tipos de datos en un tipo de
datos. La agrupación puede contener diferentes tipos de datos, tales como booleano, cadena y número entero

1.1.3.3. Arrays
Un array es una coleccion de elementos de datos. Los elementos de datos son como ranuras de almacenamiento
de datos. Los elementos de datos en una matriz puede ser numérica, boolean, string o clúster, pero todos los
datos deben ser del mismo tipo dentro del array. Los array pueden ser uno o dos dimensiones

1.1.3.4. Forma de onda


El tipo de datos de forma de onda es un grupo compuesto de los siguiente Signal, TDMS, y la API de DAQmx
para mostrar y almacenar mediciones de señales periódicas. El tipo de datos de forma:

15
1. Programación en Labview

t0 A Time Stamp representing the time at which the signal measurement starts

dt A double numeric that describes the difference in time in milliseconds


between each sample in the signal

Y A 1D array of doubles that contains the values of the samples of that signal.

1.1.3.5. Marcas de tiempo


La marca de tiempo LabVIEW es un tipo de datos de 128 bits que representa el tiempo absoluto

1.1.3.6. Tipos de datos dinámicos


Un tipo de datos dinámico es un tipo de datos reservado principalmente para funciones Express, pero se
puede convertir en una forma de onda, matriz o valores numéricos.

1.1.3.7. Coerción
Puntos Coerción aparecen en los nodos del diagrama de bloques para avisarle de que LabVIEW convierte el
valor pasado en el nodo a una representación diferente. LabVIEW coloca un punto coerción en la frontera de
la terminal, donde la conversión se lleva a cabo.

Red coercion dots: LabVIEW coloca puntos de coerción rojos en los nodos del diagrama de bloques
cuando se conecta un cable de un tipo numérico a un terminal de un tipo numérico distinto.

Blue coercion dots: El punto de coerción azul indica que LabVIEW no se ajusta el tipo de datos de
salida de forma automática para evitar el desbordamiento y errores de redondeo.

16
1.1. Introducción a la programación

1.1.3.8. Conversión y manipulación de datos


Se utiliza para convertir de un tipo de dato a otro utilizando la función typeCast

1.1.4. Depuración
1.1.4.1. Herramientas
HighLight Execution: Haga clic en el botón Highlight Execution para mostrar una animación de la
ejecución del diagrama de bloques cuando ejecute el VI. Note el flujo de datos a través del diagrama de
bloques. Haga clic en el botón otra vez para deshabilitar la ejecución animada.

Retain wire Values: Haga clic en el botón Retain Wire Values para guardar los valores del cable en cada
punto en el flujo de ejecución para que cuando coloque una punta de prueba en el cable pueda retener
inmediatamente los valores más recientes de los datos que pasaron a través del cable. Debe ejecutar con
éxito el VI por lo menos una vez antes de que pueda retener los valores del cable.

Probe: Use la herramienta Probe para verificar los valores intermedios en un cable mientras un VI se
ejecuta. También use la herramienta de Probe si tiene un diagrama de bloques complicado con una serie
de operaciones y cualquiera de ellas puede regresar datos incorrectos.

17
Capítulo

Estructuras de Control

2.1. Bucle while y bucle for


2.1.1. Bucle while
Similar a un Ciclo Do o a un Ciclo Repeat-Until en los lenguajes de programación basados en texto, un Ciclo
While, que se muestra en la Figura 1, ejecuta el código que contiene hasta que ocurre una condición.

Figura 2.1: Un Ciclo While en LabVIEW, un Diagrama de Flujo equivalente a la Funcionalidad de Ciclo
While y un Código de Ejemplo Pseudo de la Funcionalidad del Ciclo While.

Añada objetos del diagrama de bloques al Ciclo While al arrastrarlos dentro del Ciclo While.

El Ciclo While ejecuta el código que contiene hasta la Conditional Terminal, una terminal de entrada, recibe
un valor Booleano específico.

También puede realizar manejo básico de error usando la terminal condicional de un Ciclo While. Cuando
cablea un cluster de error a la terminal condicional, solamente el valor TRUE o FALSE del parámetro Status
del cluster de error pasa a la terminal. También, los elementos del menú de acceso directo Stop if True y
Continue if True cambian a Stop if Error y Continue while Error.

2.1.2. Bucle for


Un Ciclo For ejecuta un subdiagrama un número de veces establecido. En la imagen siguiente se muestra un
Ciclo For en LabVIEW, un diagrama de flujo equivalente a la funcionalidad de Ciclo For y un Pseudo-Código
de ejemplo de la funcionalidad del Ciclo For.

19
2. Estructuras de Control

Figura 2.2: Un Ciclo For en LabVIEW, un Diagrama de Flujo equivalente a la Funcionalidad de Ciclo For y
un Pseudo-Código de Ejemplo de la Funcionalidad del Ciclo For.

El Ciclo For está ubicado en la paleta Structures. También puede colocar un Ciclo While en el diagrama de
bloques, dar clic con botón derecho en el Ciclo While y seleccionar Replace with For Loop en
el menú de acceso directo para cambiar un Ciclo While a Ciclo For.

2.1.3. Componentes de bucle


La terminal Loop Count es una terminal de entrada cuyos valores indican cuantas veces se repite el subdia-
grama.

La Iteration Terminal es una terminal de salida que contiene el número de iteraciones terminadas. La cantidad
de iteraciones para el Ciclo For siempre comienza en cero.

El Ciclo For difiere del Ciclo While en que el Ciclo For ejecuta un número de veces establecido. Un Ciclo
While detiene la ejecución solamente si existe un valor en la Conditional Terminal.

2.1.4. Autoindexado
El auto indexado es una propiedad de las estructuras loop, cuando un data como un arreglo entra a un túnel
los valores puedes ser pasados como auto indexado o sin indexado, en la siguiente imagen

El túnel izquierdo tiene corchete indicando que tiene Auto Indexación Habilitada mientras que el túnel derecho
es sólido Indicando que la indexación automática está deshabilitada.

20
2.1. Bucle while y bucle for

2.1.5. Registros de corrimiento


Use los registros de desplazamiento (shift register) cuando quiera pasar valores de iteraciones anteriores a
través del ciclo a la siguiente iteración. Un registro de desplazamiento aparece como un par de terminales
directamente opuestas en las partes verticales del borde del ciclo.

La terminal en la parte derecha del ciclo contiene una flecha hacia arriba y almacena datos de la terminación
de una iteración. LabVIEW transfiere los datos conectados en la parte derecha del registro a la próxima
iteración. Después que el ciclo se ejecuta, la terminal en la parte derecha del ciclo regresa al último valor
almacenado en el registro de desplazamiento.
Cree un registro de desplazamiento al dar clic con botón derecho en el borde izquierdo o derecho de un ciclo
y seleccione Add Shift Register en el menú de acceso directo.
Un registro de desplazamiento transfiere cualquier tipo de datos y cambia automáticamente al tipo de datos
del primer objeto cableado al registro de desplazamiento. Los datos que usted cablea a las terminales de cada
registro de desplazamiento deben ser del mismo tipo.
Puede añadir más de un registro de desplazamiento a un ciclo. Si tiene múltiples operaciones que usan valores
de iteraciones anteriores en su ciclo, use múltiples registros de desplazamiento para almacenar los valores de
datos desde esos procesos en la estructura, como se muestra.

Figura 2.3: Registros de desplazamiento Múltiples

Iniciar Registros de Desplazamiento: Al iniciar un registro de desplazamiento se restablece el valor que


el registro de desplazamiento pasa a la primera iteración del ciclo cuando se ejecuta el VI. Inicie un
registro de desplazamiento al cablear un control o constante a la terminal del registro de desplazamiento
en la parte izquierda del ciclo, como se muestra:

Figura 2.4: Registro de Desplazamiento Iniciado

En el Ejemplo anterior el Ciclo For se ejecuta cinco veces, incrementando el valor que el registro de desplaza-
miento contiene por uno cada vez. Después de cinco iteraciones del Ciclo For, el registro de desplazamiento

21
2. Estructuras de Control

pasa el valor final, 5, al indicador y el VI se detiene. Cada vez que ejecuta el VI, el registro de desplazamiento
comienza con un valor de 0. Si usted no inicia el registro de desplazamiento, el ciclo utiliza el valor escrito
en el registro de desplazamiento cuando el último ciclo es ejecutado o el valor pre determinado para el tipo
de datos si el ciclo nunca ha sido ejecutado. Use un registro de desplazamiento no iniciado para conservar la
información del estado entre ejecuciones subsecuentes de un VI.

Figura 2.5: Registro de Desplazamiento No Iniciado

En la figura anterior, el Ciclo For se ejecuta cinco veces, incrementando el valor que el registro de desplaza-
miento contiene por uno cada vez. La primera vez que ejecuta el VI, el registro de desplazamiento comienza
con un valor de 0, el cual es el valor predeterminado para un entero de 32 bits. Después de cinco iteraciones
del Ciclo For, el registro de desplazamiento pasa el valor final, 5, al indicador y el VI se detiene. La próxima
vez que ejecuta el VI, el registro de desplazamiento comienza con un valor de 5, el cual es el último valor de
la ejecución anterior. Después de cinco iteraciones del Ciclo For, el registro de desplazamiento pasa el valor
final, 10, al indicador. Si ejecuta el VI otra vez, el registro de desplazamiento comienza con un valor de 10 y
así sucesivamente. Los registros de desplazamiento no iniciados retienen el valor de la iteración anterior hasta
que usted cierra el VI.
Registros de Desplazamiento Apilados: Con registros de desplazamiento apilados, usted puede tener ac-
ceso a los datos de iteraciones de ciclo anteriores. Los registros recuerdan los valores de múltiples
iteraciones anteriores y llevan esos valores a las próximas iteraciones. Para crear un registro de despla-
zamiento apilado, haga clic con botón derecho en la terminal izquierda y seleccione Add Element en el
menú de acceso directo.
Los registros de desplazamiento apilados pueden ocurrir solamente en la parte izquierda del ciclo porque
la terminal derecha transfiere los datos generados solamente desde la iteración actual a la siguiente
iteración.

Figura 2.6: Registro de Desplazamiento Apilado

Usar Registros de Desplazamiento Apilados: Si añade otro elemento a la terminal izquierda en el dia-
grama de bloques anterior, los valores desde las últimas dos iteraciones se llevan a la siguiente iteración,
con el valor de la iteración más reciente almacenado en el último registro de desplazamiento. La primera
terminal almacena los datos pasados a ella desde la iteración anterior.

22
2.2. Estructuras case

2.2. Estructuras case


Una estructura de Casos tiene dos o más subdiagramas o casos. Solamente un subdiagrama es visible a la
vez y la estructura ejecuta solamente un caso a la vez. Un valor de entrada determina cual subdiagrama se
ejecuta. La estructura de Caso es similar a las instrucciones del interruptor o las instrucciones si...después...
en lenguajes de programación basados en texto.

2.2.1. Selector de case


La etiqueta Case Selector en la parte superior de la Estructura de Casos contiene el nombre del valor del
selector que corresponde al caso en el centro y a las flechas de incremento y reducción a cada lado. Haga clic
en las flechas de Decrement y Increment para desplazarse en los casos disponibles. También puede hacer clic
en la flecha hacia abajo a lado del nombre del caso y seleccionar un caso en el menú desplegable.

Cablee un valor de entrada o selector a la Selector Terminal para determinar qué caso se ejecuta. Debe
cablear un entero, valor Booleano, secuencia o valor de tipo enumerado a la Selector Terminal. Puede colocar
la Selector Terminal en cualquier parte del borde izquierdo de la Estructura de Casos. Si el tipo de datos
de la terminal del selector es Booleano, la estructura tiene un caso TRUE o un caso FALSE. Si la Selector
Terminal es un entero, secuencia o valor de tipo enumerado, la estructura tiene cualquier número de casos.

Nota: Los valores de cadena de caracteres que cablea a la terminal del selector son sensibles a las mayúscu-
las/minúsculas de forma predeterminada. Para mostrar resultados no sensibles a las mayúsculas/minúsculas,
cablee un valor de caracteres a la terminal del selector, haga clic con botón derecho en el borde de la estructura
de Casos y seleccione Case Insensitive Match del menú.
Si no especifica un caso de forma predeterminada para la estructura de Casos para manejar los valores fuera
del rango, debe enlistar de forma explícita cada valor de entrada. Por ejemplo, si el selector es un entero y
usted especifica los casos para 1, 2 y 3, debe especificar un caso de forma predeterminada a ejecutar si el
valor de entrada es 4 o cualquier otro valor entero no especificado.
Nota: Usted no puede especificar un caso de forma predeterminada si cablea un control Booleano al selector.
Si hace clic con botón derecho en la etiqueta del selector de casos, Make This The Default Case no aparece en
el menú de acceso directo. Haga el control Booleano TRUE o FALSE para determinar cuál caso se ejecuta.
Haga clic con botón derecho en el borde de la estructura de Casos para añadir, duplicar, eliminar o reorganizar
casos, así como para seleccionar un caso predeterminado.

2.2.2. Tuneles
Los túneles son los terminales que alimentan los datos dentro y fuera de las estructuras. Los túneles se ubican
en el borde de la estructura.

In tunnels: permiten transferir datos hacia la estructura, generalmente se ubican en el borde izquierdo
de la estructura.

23
2. Estructuras de Control

Out tunnels: permiten transferir datos desde la estructura, generalmente se ubican en el borde derecho
de la estructura

2.3. Estructuras secuenciales


2.3.1. Tipos de estructuras secuenciales
Estructuras secuenciales flat: Consiste de uno o más subdiagramas, o frames, que ejecutan secuencial-
mente. Uso de los estructura Flat Sequence para asegurar que un subdiagrama se ejecute antes o después
de otro subdiagrama. El flujo de datos para la estructura Flat Sequence difiere del flujo de dato de otras
estructuras. Los Frames en una estructura Flat Sequence ejecutan de izquierda a derecha y cuando to-
dos los valores de los datos cableados a un frame son disponibles. Los datos dejan cada frame como el
frame terminado de ejecutar. Esto quiere decir que la entrada de un frame puede depender de la salida
de otro frame.

Estructuras secuenciales staked: Consiste de uno o más subdiagramas o frames que ejecutan secuencial-
mente. Clic derecho al borde de la estructura para añadir y borrar un frame o para crear secuencias
locales o para pasar datos entre frames. Usa la estructura Stacked Sequence para asegurar que un
subdiagrama ejecuta antes o después de otro subdiagrama.
Para desplazarse por los subdiagramas disponibles, haga clic en las flechas decremento e incremento en
la etiqueta del selector. Usted puede agregar, duplicar, reorganizar o eliminar los subdiagramas. Puede
utilizar un terminal local secuencia para pasar datos de un cuadro a cualquier trama posterior.
Utilice la estructura Stacked sequence si quieres ahorrar espacio en el diagrama de bloques. Utilice la
estructura de secuencia plana para evitar el uso secuencia locales y para documentar mejor el diagrama
de bloques.

24
2.4. Estructuras de evento

2.4. Estructuras de evento


2.4.1. Definición
Espera hasta que se produzca un evento, luego ejecuta el caso apropiado para manejar ese evento. La estruc-
tura Event tiene uno o más subdiagramas o casos de evento, uno de los cuales se ejecuta cuando la estructura
se ejecuta para manejar un evento. Esta estructura tiene un tiempo de espera mientras espera la notificación
de un evento. Conecte un valor al terminal de tiempo de espera en la parte superior izquierda de la estructura
de eventos para especificar el número de milisegundos que espera la estructura de eventos para un evento. El
valor predeterminado es -1, lo que indica que nunca se agotará el tiempo.

Puede configurar un solo caso de evento para manejar varios eventos, pero sólo uno de estos eventos dentro
del caso de evento puede ocurrir a la vez. Debe colocar la estructura Evento en un bucle While para manejar
varios eventos.

2.4.2. Componentes de la estructura de eventos


1. La etiqueta del selector de eventos especifica qué eventos hacen que se ejecute el caso que se está
mostrando actualmente. Para ver otros casos de eventos, haga clic en la flecha hacia abajo situada
junto al nombre del caso.

2. El terminal de Tiempo de espera especifica el número de milisegundos que debe esperar un evento
antes de que se produzca el tiempo de espera. Si alinea un valor al terminal de tiempo de espera, debe
proporcionar un caso de evento de tiempo de espera para evitar un error.

3. Los terminales de eventos dinámicos aceptan un refnum de registro de eventos o un grupo de refnums
de registro de eventos para el registro de eventos dinámicos. Si conecta el terminal interior correcto, ese
terminal ya no lleva los mismos datos que el terminal izquierdo. Puede conectar el refnum de registro de
eventos o el grupo de refnums de registro de eventos al terminal interior derecho a través de una función
Register For Events y modificar el evento dinámicamente. Dependiendo de la paleta desde la que se
selecciona la estructura de eventos, es posible que los terminales de eventos dinámicos no aparezcan de
forma predeterminada. Para mostrar estos terminales, haga clic con el botón derecho del ratón en la
estructura Evento y seleccione Mostrar terminales de eventos dinámicos en el menú contextual.

4. El nodo de datos de eventos identifica los datos que LabVIEW devuelve cuando se produce un evento. Al
igual que la función Unbundle By Name, puede cambiar el tamaño del nodo verticalmente y seleccionar
los elementos que necesita. Utilice el nodo de datos de eventos para acceder a elementos de datos de
eventos, como Tipo y hora, que son comunes a todos los eventos. Otros elementos de datos de eventos,
como Char y VKey, por ejemplo, varían según el evento que configure.

5. El nodo de filtro de eventos identifica los datos de eventos que puede modificar antes de que la interfaz
de usuario pueda procesar esos datos. Este nodo aparece en casos de estructura de sucesos que manejan
eventos de filtro. Si desea cambiar los datos de eventos, puede cablear y modificar elementos de datos
del nodo de datos de eventos al nodo de filtro de eventos. También puede cambiar los datos del evento
mediante el cableado de nuevos valores a los terminales del nodo. Para descartar completamente un
evento, cable un valor VERDADERO a la Descartar? terminal. Si no envía un valor a un elemento de
datos del nodo Filtro de eventos, ese elemento de datos permanece sin cambios.

25
2. Estructuras de Control

6. Al igual que una estructura Case, la estructura Event soporta túneles. Sin embargo, de forma predeter-
minada no tiene que conectar los túneles de salida de estructura de eventos en todos los casos. Todos
los túneles sin cable utilizan el valor predeterminado para el tipo de datos del túnel. Haga clic con el
botón derecho del ratón en un túnel y anule la selección de Usar predeterminado si no está cableado en
el menú contextual para volver al comportamiento de estructura de casos predeterminado en el que los
túneles deben estar cableados en todos los casos. También puede configurar los túneles para conectar
los túneles de entrada y salida automáticamente en casos no conectados.

2.5. Formule node


Es un nodo basado en texto que se utiliza para realizar operaciones matemáticas en el diagrama de bloques.
Los Formula Node son útiles para ecuaciones que tienen muchas variables o que sean complicadas de resolver
o para usar código basado en texto ya existente. Es mucho más fácil copiar y pegar el código basado en texto
en un Formula Node que representarlo gráficamente en el diagrama de bloques.
Para crear los terminales de entrada y salida de un Formula Node se puede hacer clic con el botón derecho
sobre el borde del nodo y seleccionar en el menú contextual Add Input o Add Output, y después introducir
la variable para la entrada o para la salida. Cada sentencia debe terminar con un punto y coma (;).

26
2.6. Expression nodes

2.6. Expression nodes


Los Expression Nodes son útiles cuando una expresión sólo tiene una variable, de otra manera es complica-
do. Los Expression Nodes no aceptan ningún tipo de dato numérico complejo. Utilice la sintaxis correcta,
operadores y funciones al crear nodos de expresión.

2.7. Formula node


Un Formula Node en LabVIEW evalúa fórmulas matemáticas y expresiones similares a C en el diagrama
de bloques. De esta manera usted puede usar el código C existente directamente dentro de su código de
LabVIEW. También es útil cuando tiene expresiones matemáticas "complejas".

27
Capítulo

Manejo de ficheros

3.1. Entrada y salida de ficheros

Las operaciones de entrada/salida con ficheros nos permiten almacenar y recuperar información desde un
disco. LabVIEW presenta una gran variedad de funciones para tratar diferentes tipos de operaciones con
ficheros. Estas funciones se encuentran en File I/O (entrada salida de ficheros) del menú de funciones.

3.1.1. Funciones y Vis

Bloques para manipular ficheros Función

Open/Create/Replace File Function Abre un archivo existente, se crea un nuevo archivo, o re-
emplaza un archivo existente, mediante programación o de
forma interactiva utilizando un cuadro de diálogo de archivo.

Build Path Function Crea una nueva ruta añadiendo un nombre (o ruta relativa)
a una ruta existente.

Read from Text File Function Lee un número determinado de caracteres o líneas de un
archivo de flujo de bytes.

Write to Text File Function Escribe una cadena o una matriz de cadenas como líneas en
un archivo.

Close File Function Cierra un archivo abierto especificado por refnum y devuelve
la ruta de acceso al archivo asociado a la refnum.

3.1.2. Aplicación

Estructura de datos

29
3. Manejo de ficheros

Lectura de datos

3.2. Gráficos y tablas


3.2.1. Tipos
3.2.1.1. Graphs
El gráfico de forma de onda muestra una o más gráficas de mediciones de muestreo uniforme. El gráfico de
forma de onda representa sólo funciones de un solo valor, como en y = f (x), con puntos uniformemente
distribuidos a lo largo del eje x, tales como formas de onda adquiridas que varían en el tiempo. El siguiente
panel frontal muestra un ejemplo de un gráfico de forma de onda.

Una sola gráfica: El waveform graph acepta varios tipos de datos para plotear una gráfica. El graph
acepta un solo array de valores, interpreta los datos como puntos en la grafica, e incrementa el índice
x de uno en uno empezando en la posición x = 0.

El graph también acepta un cluster de un valor inicial x, un delta x, y un array de datos en Y.

30
3.2. Gráficos y tablas

El graph también acepta wl tipo de dato waveform, que porta la data, en un tiempo de inico, un delta t de
una forma de onda.

El gráfico de forma de onda también acepta el tipo de datos dinámico, que es para uso con VIs Express. x.

Multiples gráficas: El gráfico de forma de onda acepta varios tipos de datos para mostrar múltiples
gráficos. El gráfico de forma de onda acepta una matriz 2D de valores, donde cada fila de la matriz es
un solo gráfico.

3.2.1.2. Charts
El gráfico de forma de onda es un tipo especial de indicador numérico que muestra una o más gráficas de
datos típicamente adquiridos a una velocidad constante. El siguiente panel frontal muestra un ejemplo de un
gráfico de forma de onda.

31
3. Manejo de ficheros

Multiples gráficas: Es posible dibujar varias gráficas en un mismo chart, uniendo los datos de cada gráfica
en un cluster de escalares numéricos de forma que cada escalar que contiene el cluster se considera como
un punto de cada una de las gráficas para una misma abscisa.

3.3. Acciones mecánicas de los booleanos


3.3.1. Describir las seis diferentes acciones mecánicas
3.3.1.1. Switch when pressed
Cambia el valor de control cada vez que se hace clic con la herramienta de operación. La frecuencia con la
que el VI lee el control no afecta a este comportamiento.

3.3.1.2. Switch when released


Cambia el valor de control sólo después de soltar el botón del mouse durante un clic del mouse dentro del
límite gráfico del control. La frecuencia con la que el VI lee el control no afecta a este comportamiento.

3.3.1.3. Switch until released


Cambia el valor de control cuando hace clic en él y retiene el nuevo valor hasta que suelte el botón del mouse.
En este momento, el control vuelve a su valor predeterminado, similar al funcionamiento de un zumbador de
puerta. La frecuencia con la que el VI lee el control no afecta a este comportamiento. No puede seleccionar
este comportamiento para un control de botones de radio.

3.3.1.4. Latch when pressed


Cambia el valor de control cuando hace clic en él y retiene el nuevo valor hasta que el VI lo lea una vez. En
este punto, el control vuelve a su valor predeterminado incluso si mantiene presionando el botón del mouse.
Este comportamiento es similar a un disyuntor y es útil para detener un While Loop o para que el VI realice
una acción sólo una vez cada vez que establezca el control. No puede seleccionar este comportamiento para
un control de botones de radio.

3.3.1.5. Latch when released


Cambia el valor de control sólo después de soltar el botón del ratón dentro del límite gráfico del control.
Cuando el VI lo lee una vez, el control vuelve a su valor predeterminado. Este comportamiento funciona de
la misma manera que los botones de cuadro de diálogo y los botones del sistema. No puede seleccionar este
comportamiento para un control de botones de radio.

32
3.4. Temporización

3.3.1.6. Latch until released


Cambia el valor de control cuando hace clic en él y retiene el valor hasta que el VI lo lea una vez o suelte
el botón del mouse, dependiendo del último que ocurra. No puede seleccionar este comportamiento para un
control de botones de radio.

3.4. Temporización
3.4.1. Funciones de temporización
3.4.1.1. Tick Count (ms)
Retorna el valor del tiempo en ms

3.4.1.2. High Resolution Relative Seconds


Devuelve el tiempo actual relativo en segundos. Utilice la diferencia entre dos valores sucesivos para medir el
tiempo transcurrido entre las llamadas. Utilice este VI para medir intervalos de tiempo con una resolución
mucho más alta de la que puede obtener de la función tick count. La resolución en tiempo de este VI puede
variar con diferentes sistemas operativos y tipos de CPU.

3.4.1.3. Wait
Espera el número especificado de milisegundos y devuelve el valor del temporizador de milisegundos.

3.4.1.4. Wait Until Next ms Multiple


Espera hasta que el valor del temporizador de milisegundos se convierta en un múltiplo del múltiplo de
milisegundos especificado.

3.4.1.5. Time Delay


Inserta un retardo de tiempo en el VI de llamada.

33
3. Manejo de ficheros

3.4.1.6. Timed elapsed


Especifica cuánto tiempo debe transcurrir antes de que el Elapsed Boolean se establece en TRUE. El valor
predeterminado es 1.000.

3.4.1.7. Get Date/Time In Seconds Function


Devuelve una marca de tiempo de la hora actual. LabVIEW calcula esta marca de tiempo utilizando el
número de segundos transcurridos desde las 12:00 a.m., el viernes 1 de enero de 1904, hora universal.

3.4.1.8. Get Date/Time String Function


Convierte un valor de marca de tiempo o un valor numérico en una cadena de fecha y hora en la zona horaria
configurada para el equipo. La función interpreta la marca de tiempo y los valores numéricos como el número
de segundos independiente de la zona horaria que han transcurrido desde las 12:00 a.m., el viernes 1 de enero
de 1904, hora universal.

3.4.1.9. Format Date/Time String Function


Muestra un valor de marca de tiempo o un valor numérico como hora en el formato que especifique mediante
códigos de formato de hora.

34
3.5. Subvi

3.4.1.10. Date/Time To Seconds Function

Convierte un clúster de valores de tiempo en una marca de tiempo, medida como el número de segundos
transcurridos desde las 12:00 a.m., el viernes, 1 de enero de 1904, hora universal, suponiendo que DST se
establezca en 1.

3.4.1.11. Seconds To Date/Time Function

Convierte un valor de marca de tiempo o un valor numérico en un grupo de valores de tiempo.

3.5. Subvi
3.5.1. Definición
Un SubVi es un VI que puede ser llamado por otros VI. El SubVI es similar a una función individual.

3.5.2. Pasos para crear un subvi


3.5.2.1. Crear un icono

Cree iconos personalizados para reemplazar el icono predeterminado haciendo clic con el botón derecho en el
icono en la esquina superior derecha del panel frontal o diagrama de bloques y seleccionando Editar icono.
También puede hacer esto haciendo doble clic en el icono en la esquina superior derecha del panel frontal.

Si abre el Editor de iconos, tiene muchas herramientas para crear un icono personalizado o importar una
imagen.

35
3. Manejo de ficheros

3.5.2.2. Panel de conectores

Debe crear un panel de conector, que se muestra una continuación, para utilizar el VI como subVI. El panel
conector es una representación visual de cómo las entradas y salidas están conectadas al subVI desde el VI
llamante.

Configuración del panel del conector.


Defina las conexiones asignando un control o indicador del panel frontal a cada uno de los terminales del
panel del conector.

1. Haga clic con el botón derecho en el icono en la esquina superior derecha del panel frontal.

2. Seleccione Mostrar Conector.

3. Puede seleccionar un patrón diferente haciendo clic con el botón derecho en el panel del conector y
seleccionando Patrones.

36
3.5. Subvi

Cada rectángulo en el panel del conector representa un terminal. Utilice los rectángulos para asignar entradas
y salidas.
El panel frontal siguiente tiene cuatro controles y un indicador, por lo que LabVIEW muestra cuatro termi-
nales de entrada y un terminal de salida en el panel del conector.

Asignación de terminales a controles e indicadores.


Después de seleccionar un patrón para usar en el panel del conector, debe asignar un control o indicador
del panel frontal a cada uno de los terminales del panel del conector. En general, es una buena práctica de
programación organizar las entradas a una subVI a la izquierda y las salidas a la derecha.
Para asignar un terminal a un control o indicador del panel frontal:
1. Haga clic en un terminal del panel de conectores.
2. Haga clic en el control o el indicador del panel frontal que desea asignar a ese terminal.

37
3. Manejo de ficheros

Tenga en cuenta que el color del terminal cambia al del tipo de datos al que lo ha conectado. También puede
seleccionar primero el control o el indicador y luego seleccionar el terminal.

3. Haga clic en un espacio abierto en el panel frontal para anular la selección del control.
4. Repita estos pasos para todos los controles e indicadores que utilizará para pasar datos hacia y desde el
VI llamante.

3.5.2.3. Invocar un Subvi

Para colocar un subVI en el diagrama de bloques:


1. Haga clic en el botón Seleccionar un VI de la paleta Funciones.

2. Navegue hasta el VI

38
3.5. Subvi

3. Haga doble clic para ubicarlo en el diagrama de bloques.

39
Capítulo

Programación nivel intermedio

4.1. Variables locales


4.1.1. Comportamiento
Una variable local puede ser leída o escrita para controladores o indicadores en el panel frontal del VI

Útil para comunicar entre estructuras dentro de un VI

Coloque la variable local en el diagrama, selecciona la variable a la que desea vincular y si quiere
leer/escribir

Creando variables locales:


Haga clic con el botón derecho del ratón en un terminal existente del panel frontal o un diagrama de bloques
y seleccione Crear »Variable local en el menú contextual para crear una variable local. En el diagrama de
bloques aparece un icono de variable local para el objeto.

41
4. Programación nivel intermedio

También puede seleccionar una variable local en la paleta Funciones y colocarla en el diagrama de bloques.
El nodo de variable local, mostrado como sigue, aún no está asociado con un control o indicador.

Para asociar una variable local a un control o indicador, haga clic con el botón secundario en el nodo de la
variable local y seleccione
Seleccionar elemento en el menú contextual. El menú de acceso directo ampliado enumera todos los objetos
del panel frontal que tienen etiquetas de propiedad.
LabVIEW utiliza etiquetas propias para asociar variables locales con objetos del panel frontal, por lo que
etiquete los controles del panel frontal y los indicadores con etiquetas descriptivas.

4.2. Variables globales


4.2.1. Comportamiento
Una variable global se utiliza para acceder y pasar Datos entre varios Vis
Una variable global es un VI que tiene su propio Panel frontal, pero sin diagrama

Creando variables locales:


Seleccione una variable global, que se muestra a continuación, en la paleta Funciones y colóquela en el
diagrama de bloques.

Haga doble clic en el nodo de la variable global para mostrar el panel frontal del VI global. Coloque los
controles e indicadores en este panel frontal de la misma manera que lo hace en un panel frontal estándar.

LabVIEW utiliza etiquetas propias para identificar variables globales, por lo que etiquete los controles e
indicadores del panel frontal con etiquetas descriptivas.

42
4.3. Nodos de propiedad

Puede crear varios VIs globales únicos, cada uno con un objeto del panel frontal o, si desea agrupar variables
similares, puede crear un VI global con varios objetos del panel frontal.

Después de terminar de colocar objetos en el panel frontal de VI global, guárdelo y vuelva al diagrama de
bloques del VI original. A continuación, debe seleccionar el objeto en el VI global al que desea acceder. Haga
clic en el nodo de la variable global y seleccione un objeto del panel frontal en el menú contextual. El menú
contextual muestra todos los objetos del panel frontal del VI global que poseen etiquetas. También puede
hacer clic con el botón secundario en el nodo de la variable global y seleccionar un objeto del panel frontal
en el menú contextual Seleccionar elemento.
Si crea una copia de un nodo de variable global, LabVIEW asocia el nuevo nodo de variable global con el VI
global del nodo de variable del que lo copia.

4.3. Nodos de propiedad


Nodos de propiedad permite al usuario editar las propiedades de un control o indicador mientras se ejecuta
el código. La disponibilidad de la propiedad varía dependiendo de un control o indicador en particular.

43
4. Programación nivel intermedio

4.4. Gestión de errores


4.4.1. Gestión manual/automática de errores
Manejo automático de errores:

Cada error tiene un código numérico y un mensaje de error correspondiente. LabVIEW maneja automá-
ticamente, de forma pre determinada, cualquier error cuando se ejecuta un VI al suspender la ejecución,
identificando el subVI o función donde ocurrió el error y mostrando una ventana de diálogo de error.
Para deshabilitar el manejo automático de errores para el VI actual, seleccione File»VI Properties y seleccione
Execution en el menú de acceso directo Category. Para deshabilitar el manejo de errores automático para
cualquier VI en blanco que usted crea, seleccione Tools»Options y seleccione Block Diagram en la lista
Category. Para deshabilitar el manejo automático de errores para un subVI o función en un VI, cablee su
parámetro error out al parámetro error in para otro subVI o función o a un indicador error out.

Manejo manual de errores:

Puede escoger otros métodos de manejo de errores. Por ejemplo, si un VI de E/S en el diagrama de bloques
se multiplica, usted no querrá que la aplicación completa se detenga y muestre una ventana de diálogo de
error. También puede querer que el VI intente nuevamente en un cierto periodo de tiempo. En LabVIEW,
puede realizar estas decisiones de manejo de error en el diagrama de bloques del VI.
Use los VIs del manejo de errores de LabVIEW y las funciones en la paleta Dialog & User Interface y los
parámetros error in y error out de la mayoría de los VIs y las funciones para manejar errores. Por ejemplo, si
LabVIEW encuentra un error, puede mostrar el mensaje de error en diferentes tipos de ventanas de diálogo.
Utilice el manejo de errores con las herramientas de depuración para encontrar y manejar errores.
Cuando realice cualquier tipo de entrada y salida E/S, considere la posibilidad de que pueden ocurrir errores.
Casi todas las funciones de E/S regresan información de error. Incluyendo la verificación de errores en los VIs,
especialmente para operaciones de E/S (archivo, serial, instrumentación, adquisición de datos y comunicación)
y proporciona un mecanismo para manejar errores apropiadamente.
Use los VIs del manejo de errores de LabVIEW, funciones y parámetros para manejar errores. O puede
arreglar el error de forma programática y después borrar el error al cablear la salida error out del subVI
o función a la entrada error in del Clear Errors VI. Utilice el manejo de errores con las herramientas de
depuración para encontrar y manejar errores.

4.4.2. Clusters de error


El manejo de error en LabVIEW sigue el modelo del flujo de datos. Como los valores de datos fluyen a través
de un VI. Cablee la información del error desde el inicio del VI hasta el final. Incluya un VI para manejo de
error, como el Simple Error Handler VI, al final del VI para determinar si el VI se ejecutó sin errores. Use los
clusters error in y error out en cada VI que utilice o construya para pasar la información del error a través
del VI.
Conforme el VI se ejecuta, LabVIEW hace pruebas para errores en cada nodo de ejecución. Si LabVIEW no
encuentra ningún error, el nodo se ejecuta normalmente. Si LabVIEW detecta un error, el nodo pasa el error
al siguiente nodo sin ejecutar la parte del código. El siguiente código hace lo mismo y así sucesivamente. Al
final del flujo de ejecución, LabVIEW reporta el error.
Use los controles e indicadores del clúster de error para crear entradas y salidas de error en los subVIs. Los
clusters error in y error out incluyen los siguientes componentes de información:

Status es un valor Booleano que reporta TRUE si ocurre un error.

44
4.4. Gestión de errores

Code es un entero firmado de 32 bits que identifica el error de forma numérica. Un código de error no
igual a cero unido a un estatus FALSE emite una advertencia más que un error.

Source es una cadena de caracteres que identifica donde ocurrió el error.

4.4.3. Vis y funciones de manejo de error


4.4.3.1. Simple error handler
Indica si se ha producido un error. Si se produjo un error, este VI devuelve una descripción del error y,
opcionalmente, muestra un cuadro de diálogo.
Este VI llama al VI General Error Handler y tiene la misma funcionalidad básica que el General Error Handler
pero con menos opciones.

4.4.3.2. General error handler


Indica si se ha producido un error. Si se produjo un error, este VI devuelve una descripción del error y,
opcionalmente, muestra un cuadro de diálogo.

4.4.3.3. Clear error


Restablece el error status a sin error, código a 0 y la fuente a una cadena vacía. Utilice este VI cuando desee
ignorar un error. De forma predeterminada, este VI ignora todos los errores. Conecte un valor de código de
error a un código de error específico para borrar si sólo desea ignorar un error específico.

45
4. Programación nivel intermedio

4.4.3.4. Códigos personalizados de error


Podemos personalizar mensajes de código de error y también crear nuevos códigos de error como códigos de
error definidos por el usuario. Los códigos de error definidos por el usuario deben definirse en el rango de
5000 a 9999.
User Defined Error code:
1. Los códigos de error personalizados son creados en un archivo de errores personalizado creado por Tools –
> Advanced ->Edit error codes.

2. Se abrirá el cuadro de diálogo, pidiendo crear un nuevo archivo de error o abrir existente. Cree un nuevo
archivo haciendo clic en nuevo, ingrese todos los errores y guarde en el formato como <FileName> -errors.txt
en el directorio <directorio de LabVIEW> \ user.lib \ errors
3. Si se hace clic en un archivo existente, se le pedirá al usuario que seleccione un archivo. A continuación, se
cargará el editor de código de error con todos los errores definidos por el usuario definido en ese archivo.
4. En ese archivo podemos agregar nuevos errores o eliminar errores.

4.5. Librerias dinámicas (.dll)


“Una biblioteca de enlace dinámico o más comúnmente DLL (sigla en inglés de dinamic-link library) es el
término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa
por parte del sistema operativo. Esta denominación es exclusiva a los sistemas operativos Windows siendo
“.dll” la extensión con la que se identifican estos ficheros, aunque el concepto existe en prácticamente todos
los sistemas operativos modernos.”

46
4.5. Librerias dinámicas (.dll)

Básicamente un DLL es un archivo por lo general común en Windows creado para evitar la saturación de
Memoria RAM producto a la demanda de archivos con las mismas funciones por programas diferentes.
Así, si un programa que instalamos demanda a que el sistema tenga que calcular cierta información, y otro
programa totalmente diferente requiere la misma necesidad, todo esto se hace con el mismo archivo y así
ahorrar memoria en el Sistema.
Creando una DLL:
1. Para crear una dll utilizamos el Software, creamos nuevo proyecto seleccionamos la plantilla para creación
de dll.

2. Luego ingresar la ruta donde queremos guardar nuestro proyecto

3. Seleccionamos el compilador y finalizamos

4. Una vez creado el proyecto aparecen dos archivos main.cpp y main.h

47
4. Programación nivel intermedio

5. Editamos el código de main.c y creamos nuestra propia función

6. Luego editamos el prototipo de función en main.h

7. Para finalizar le damos clic en Construir proyecto, la dll se a creado en la carpeta bin de nuestro proyecto.
INVOCANDO UNA DLL
Para invocar una dll utilizamos la función Call Library Function Node

48
4.5. Librerias dinámicas (.dll)

Clic derecho y seleccionamos Configure. . .

En la pestaña Function Seleccionamos la ruta de nuestra dll y seleccionamos la funcion de nuestra dll

Luego vamos a la pestaña Parameters y configuramos a la función con los parámetros con los que se
había creado la dll y luego clic en ok

49
4. Programación nivel intermedio

Una vez editada nuestra dll queda de la siguiente manera

50
Capítulo

Protocolo de Comunicación Serial

5.1. Definición
Serial es un protocolo muy común, que no debe confundirse con Universal Serial Bus (USB), para la comuni-
cación dispositivo que viene de serie en casi todos los PC. La mayoría de las computadoras incluyen puertos
serie basados en RS-232. Serial es también un protocolo de comunicación común que se utiliza por muchos
dispositivos para la instrumentación; numerosos dispositivos compatibles con GPIB también vienen con un
puerto RS-232. Además, la comunicación en serie se puede utilizar para la adquisición de datos en conjunción
con un dispositivo de muestreo remoto.
El concepto de comunicación en serie es simple. El puerto serie envía y recibe bytes de información de un bit
a la vez. Aunque esto es más lento que la comunicación en paralelo, lo que permite la transmisión de un byte
de todo a la vez, es más simple y se puede utilizar en distancias más largas. Por ejemplo, las especificaciones
IEEE 488 para el estado de la comunicación en paralelo que el cableado entre equipos pueden ser no más de
20 metros totales, con no más de 2 metros entre dos dispositivos; Sin embargo, serial puede extender hasta
1.200 metros.
Típicamente, serial se utiliza para transmitir datos ASCII. La comunicación se completa con 3 líneas de
transmisión: (1) tierra, (2) Transmitir, y (3) Recibir. Ya que el serial es asíncrono, el puerto es capaz de
transmitir datos en una línea, mientras que la recepción de datos en otro. Otras líneas están disponibles para
“handshaking”, pero no son necesarios.
Las características de serie importantes son la velocidad de transmisión, bits de datos, bits de parada y la
paridad. Durante dos puertos para comunicarse, estos parámetros deben coincidir:

Baud Rate (Velocidad de transmisión) Es una medida de la velocidad de comunicación. Se indica el


número de transferencias de bits por segundo. Por ejemplo, 300 baudios son de 300 bits por segundo.
Cuando nos referimos a un ciclo de reloj, nos referimos al Bauda rate. Por ejemplo, si el protocolo
trabaja a una tasa de 4.800 baudios, entonces el reloj está funcionando a 4800 Hz. Esto significa que
el puerto serie está muestreando la línea de datos a 4800 Hz. Velocidades de transmisión más comunes
para las líneas telefónicas son 14400, 28800, y 33600. Las velocidades de transmisión mayores que éstas
son posibles, pero estas tasas reducen la distancia en la que los dispositivos se pueden separar. Estas
altas velocidades de transmisión se utilizan para la comunicación del dispositivo donde se encuentran
los dispositivos entre sí, como es típicamente el caso con los dispositivos GPIB.

Data bits (bits de datos) Los bits de datos es una medida de los bits de datos actuales en una transmisión.
Cuando el equipo envía un paquete de información, la cantidad de datos actuales no puede ser un total
de 8 bits.

Los valores estándar para los paquetes de datos son 5, 7, y 8 bits. La configuración que elija dependerá
de la información que está transfiriendo. Por ejemplo, ASCII estándar tiene valores de 0 a 127 (7 bits).

51
5. Protocolo de Comunicación Serial

ASCII extendido utiliza 0 a 255 (8 bits). Si los datos son transferidos son de texto simple (ASCII
estándar), entonces el envío de 7 bits de datos por paquete es suficiente para la comunicación.
Un paquete se refiere a una única transferencia de bytes, incluyendo el arranque / stop bits, bits de
datos y paridad. Dado que el número de bits actuales dependen del protocolo seleccionado, el término
paquete se utiliza para cubrir todos los casos.
Stop bits (bits de parada) Bits de parada se utiliza para indicar el final de la comunicación para un
único paquete. Los valores típicos son 1, 1,5 y 2 bits. Dado que los datos se sincroniza a través de las
líneas y cada dispositivo tiene su propio reloj, es posible que dos dispositivos esten ligeramente fuera de
sincronización. Por lo tanto, los bits de parada no sólo indican el final de la transmisión, sino también
dar a los ordenadores cierto margen de error en las velocidades de reloj. Cuantos más bits se utilizan
para los bits de parada, mayor es la indulgencia en la sincronización de los relojes diferentes, pero es
más lenta la velocidad de transmisión de datos.
RS-232 (ANSI / EIA-232 Standard) es la conexión serie que se encuentra en los ordenadores compatibles con
IBM. Se utiliza para muchos propósitos, tales como la conexión de un ratón, una impresora o un módem,
así como la instrumentación industrial. Debido a las mejoras en los conductores de línea y los cables, las
aplicaciones suelen aumentar el rendimiento de RS-232 más allá de la distancia y la velocidad que aparece
en la norma. RS-232 se limita a punto a punto las conexiones entre los puertos y dispositivos en serie de PC.
Hardware RS-232 se puede utilizar para la comunicación serial hasta distancias de 50 pies. La siguiente figura
detalla la asignación de pines de un conector DB-9 se utiliza para la comunicación RS-232:

Funciones de los pines para RS-232


Data
TXD(pin 3) Serial Data Output
RXD(pin 2) Serial Data Input
HandShake
RTS(pin 7) Request to send
CTS(pin 8) Clear to Send
DSR(pin 6) Data Set Ready
DCD(pin 1) Data Carrier Detect
DTR(pin 4) Data Terminal Ready
Ground
GND(pin 5) Ground
Other
RI (pin 9) Ring Indicator

5.2. Descripción y configuración de los Vis para envio y recibo de datos


5.2.1. VISA Configure Serial Port VI
Inicializa el puerto serie especificado por nombre de recurso VISA a las opciones elegidas.

52
5.3. Envio y Recepcion de datos utilizando puertos virtuales

5.2.2. VISA Write Function


Escribe los datos del buffer de escritura en el dispositivo o interfaz especificada por nombre de recurso VISA.

5.2.3. VISA Read Function


Lee el número especificado de bytes desde el dispositivo o interfaz especificada por nombre de recurso VISA
y devuelve los datos en búfer de lectura

5.2.4. Bytes at Port


Calcula la cantidad de bytes que llegan al puerto.

5.2.5. VISA Close Function


Cierra un objeto de sesión del dispositivo o evento especificado por nombre de recurso VISA.

5.3. Envio y Recepcion de datos utilizando puertos virtuales


5.3.1. Configuracion de simulador de puertos virtuales
Para esta actividad se utilizará un simulador de puertos virtuales, primero se detallará el funcionamiento de
éste:
Paso 1: Instalación del simulador. El simulador lo puede descargar de la siguiente página: http://free-
virtual-serial-ports-emulator.softonic.com/
Paso 2: Abrir y configurar el programa. De clic al ícono que aparece en su escritorio (cuadro rojo) y
aparecerá el programa como se muestra en la siguiente figura.

53
5. Protocolo de Comunicación Serial

Seleccione la opción Device>‌>Create. . . o de clic al ícono encerrado en un cuadrado rojo como se muestra
en la figura. Le aparecerá una pantalla donde en la parte de Device Type tiene configurado por defecto
Connector, seleccione la opción Pair y haga clic en Siguiente.

El seleccionar un par significa que vamos a utilizar un COM para transmitir y otro COM para recibir, por lo
tanto tenemos que escoger los COM a utilizar, en caso tenga puertos físicos estos no aparecerán en la elección.
Para el caso de ésta máquina no cuenta con puertos físicos por la tanto escogeré COM2 y COM3 como se
muestra en la siguiente figura, y luego damos click a finalizar.

Finalmente observará en la pantalla principal del programa que se creó un par de puerto virtuales COM2 y
COM3, debe entender que la transmisión se va a realizar por uno de ellos y la recepción por el otro.

54
5.3. Envio y Recepcion de datos utilizando puertos virtuales

5.3.2. Envio de datos en Labview


Para Comunicar dos dispositivos utilizando Comunicación Serial necesitamos que dichos dispositivos estén
configurados con los mismos parámetros, estos parámetros son elegidos con VISA Configure Serial Port VI.

Por defecto VISA Configure Serial Port VI, viene configurado como se muestra:

Antes de ejecutar la aplicación seleccionamos el puerto a utilizar, si el puerto que hemos de manera virtual
no se visualiza, click en refresh para actualizar la lista de puerto serie.

55
5. Protocolo de Comunicación Serial

CODIGO PARA ENVIO DE DATOS

5.3.3. Recepcionando datos en Labview


Tal y como se hizo en la escritura de datos se configura el puerto serie con los mismos parámetros que se
utilizaron anteriormente, dentro del while Se elige la función Bytes at Port la cual se encarga de calcular la
cantidad de bytes que llegan al puerto serie de esta manera la función VISA Read Function sabe cuántos
datos leer para luego mostrarlos en el indicador tipo String “Mensaje Recibido”.

5.4. Envio y recibo de datos de una PC a tarjeta Arduino


CODIGO ARDUINO PARA ENVIO

56
5.4. Envio y recibo de datos de una PC a tarjeta Arduino

CODIGO ARDUINO RECEPCION DE DATOS

CODIGO LABVIEW PARA ENVIO DE DATOS

CODIGO LABVIEW PARA RECEPCION DE DATOS

57
5. Protocolo de Comunicación Serial

58

You might also like