Sie sind auf Seite 1von 87

UNIVERSIDAD TECNOLOGICA DE CHILE

INSTITUTO PROFESIONAL CENTRO DE FORMACION TECNICA

LabVIEW Core 1 y 2 para Certificacion CLAD

Relator: Eduardo Camilo Latorre Cardenas


Ingeniero Civil Electronico Mencion Control e Instrumentacion

JULIO-2017
Indice general

1. Explorando LabVIEW 6
1.1. Que es LabVIEW? . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1. Grafico y Compilado . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2. Flujo de Datos y Programacion Orientada a Eventos . . . . . 8
1.1.3. Crear Proyecto y VIs . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Explorador de Proyectos . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1. Panel de Icono y Conectores . . . . . . . . . . . . . . . . . . 11
1.2.2. Tipos de Cables Segun Tipos de Datos . . . . . . . . . . . . . 13
1.2.3. Paleta de Controles e Indicadores . . . . . . . . . . . . . . . 13
1.2.4. Paleta de Funciones . . . . . . . . . . . . . . . . . . . . . . . 14
1.3. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Resolucion de Problemas y Depuracion de VIs 16


2.1. Correccion de VIs Rotos . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2. Buscar Causas de VIs Rotos . . . . . . . . . . . . . . . . . . . . . . 17

3. Implementacion de un VI 26
3.1. Panel Frontal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2. Controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.1. Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2. Opciones de Controles . . . . . . . . . . . . . . . . . . . . . 28
3.3. Tipos de Datos de LabVIEW . . . . . . . . . . . . . . . . . . . . . . 28

2
3.3.1. Menus Contextuales . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2. Cuadro de Propiedades . . . . . . . . . . . . . . . . . . . . . 30
3.3.3. Tipos de Datos Numericos . . . . . . . . . . . . . . . . . . . 30
3.4. Documentacion de Codigo . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.1. Ayudas y Descripciones . . . . . . . . . . . . . . . . . . . . 38
3.4.2. Programacion Grafica . . . . . . . . . . . . . . . . . . . . . 38
3.5. Bucles While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5.1. Tuneles a traves de Estructuras . . . . . . . . . . . . . . . . . 39
3.5.2. Usando bucles While para chequeo y manejo de errores . . . 40
3.6. Bucles For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.7. Temporizacion de VIs . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.7.1. Funciones de Espera . . . . . . . . . . . . . . . . . . . . . . 42
3.8. Retroalimentacion de Datos en los Bucles . . . . . . . . . . . . . . . 43
3.9. Graficando Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.10. Estructuras Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.10.1. Tuneles de Entrada y Salida . . . . . . . . . . . . . . . . . . 48
3.10.2. Ejemplo Condicion Booleana . . . . . . . . . . . . . . . . . 48
3.10.3. Ejemplo Condicion String . . . . . . . . . . . . . . . . . . . 49
3.10.4. Ejemplo Condicion Enum . . . . . . . . . . . . . . . . . . . 50

4. Desarrollo de Aplicaciones Modulares 51

5. Creando y Aprovechando Estructuras de Datos 57


5.1. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2. Funciones de Array . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3. Polimorfismos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3.1. Polimorfismo para Funciones Aritmeticas . . . . . . . . . . . 62
5.3.2. Polimorfismos para Funciones Boleanas . . . . . . . . . . . . 63
5.4. Autoindexado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.4.1. Entradas de Array y Autoindexado . . . . . . . . . . . . . . . 63

3
5.4.2. Arrays Bidimensionales . . . . . . . . . . . . . . . . . . . . 64
5.5. Autoindexado Condicional . . . . . . . . . . . . . . . . . . . . . . . 65
5.5.1. Graficos Waveform Graph . . . . . . . . . . . . . . . . . . . 66
5.6. Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.6.1. Creacion de Controles e Indicadores de Cluster . . . . . . . . 68
5.6.2. Crear Constantes Cluster . . . . . . . . . . . . . . . . . . . . 68
5.6.3. Orden en clusters . . . . . . . . . . . . . . . . . . . . . . . . 68
5.6.4. Funciones de Cluster . . . . . . . . . . . . . . . . . . . . . . 69
5.7. Definiciones Tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6. Administrando Archivos y Recursos de Hardware 72


6.1. Entendiendo Recursos de Hardware y Software . . . . . . . . . . . . 72
6.1.1. Crear el Recurso . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1.2. Leer o Escribir . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.1.3. Cerrar Recurso y Revisar Errores . . . . . . . . . . . . . . . 74
6.2. Numeros de Referencia REFNUM . . . . . . . . . . . . . . . . . . . 74
6.3. E/S de Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.3.1. Formatos de Ficheros . . . . . . . . . . . . . . . . . . . . . . 75
6.3.2. E/S de Ficheros Alto Nivel . . . . . . . . . . . . . . . . . . . 76
6.3.3. Ficheros de Bajo Nivel . . . . . . . . . . . . . . . . . . . . . 77

7. Maquinas de Estado y Secuenciales 79


7.1. Programacion Secuencial . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2. Programacion de Estado . . . . . . . . . . . . . . . . . . . . . . . . 81
7.3. Maquinas de Estado . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.3.1. Aplicacion de Maquinas de Estados . . . . . . . . . . . . . . 81
7.3.2. Infraestructura de la Maquina de Estados . . . . . . . . . . . 82
7.3.3. Control de Maquinas de Estados . . . . . . . . . . . . . . . . 82
7.3.4. Transiciones . . . . . . . . . . . . . . . . . . . . . . . . . . 83

4
8. Resolviendo Desafos de Flujo de Datos con Variables 84
8.1. Comunicacion entre Bucles Paralelos . . . . . . . . . . . . . . . . . 84
8.1.1. Metodo 1 (Incorrecto) . . . . . . . . . . . . . . . . . . . . . 85
8.1.2. Metodo 2 (Incorrecto) . . . . . . . . . . . . . . . . . . . . . 85
8.1.3. Metodo 3 (Solucion) . . . . . . . . . . . . . . . . . . . . . . 86
8.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.3. Condiciones de Carrera . . . . . . . . . . . . . . . . . . . . . . . . . 87

5
Captulo 1

Explorando LabVIEW

Laboratory Virtual Instrument Engineering Workbench (LabVIEW). Este captulo


muestra como navegar por el entorno LabVIEW. Describe el uso de menus, barras
de herramientas, paletas, herramientas, ayuda y cuadros de dialogo comunes de Lab-
VIEW. Tambien incluye como a ejecutar un VI y conceptos generales de un panel
frontal y diagrama de bloques.

1.1. Que es LabVIEW?


LabVIEW es un entorno de programacion grafico

LabVIEW utiliza flujo de datos grafico y eso determina el orden de ejecucion

Se pueden crear interfaces de usuario eficientemente

El panel frontal es la interfaz de usuario

El diagrama de bloques es el programa detras de la interfaz de usuario.

LabVIEW imita la apariencia y operacion deinstrumentos fsicos (oscilosco-


pios, multmetros, analizadores de espectro, etc)

Instrumentos Virtuales VIs

6
1.1.1. Grafico y Compilado

A pesar de que LabVIEW sea un lenguaje de programacion grafica, el codigo


contiene los conceptos de programacion conocidos de lenguajes tradicionales.

Tipos de Datos

Bucles o Ciclos Iterativos

Gestion de Eventos

Variables y Constantes

Programacion Orientada a Objetos

Figura 1.1: Panel Frontal y Diagrama de Bloques

7
1.1.2. Flujo de Datos y Programacion Orientada a Eventos

Es importante mencionar que LabVIEW permite la ejecucion del diagrama de blo-


ques mediante flujo de datos y tambien permite la ejecucion de actividades asncronas
mediante eventos.

Figura 1.2: VI - Ejemplo de Flujo de Datos

s
A (A + 1)
Result = (1.1)
(B + C)2

Figura 1.3: VI - Panel Frontal de Ejemplo

8
1.1.3. Crear Proyecto y VIs

Figura 1.4: Como Crear un Proyecto

9
Figura 1.5: Como Crear un Proyecto

10
Figura 1.6: Como Crear un Proyecto

1.2. Explorador de Proyectos


Dependences: Incluye los elementos que requieren los VIs de un destino (Des-
tino: cualquier dispositivo que pueda ejecutar un VI)

Build Specifications: Incluye configuraciones para distribuciones de codigo y


otros tipos de toolkits. Sirve para configurar aplicaciones independientes

Barra de herramientas intuitiva y navegador intuitivo para crear y eliminar VIs,


SubVIs, Variables de red, etc.

1.2.1. Panel de Icono y Conectores

El Panel de iconos y conectores muestra como ver un VI desde otro VI

Icono: Representacion Grafica de un VI

11
Conectores: Terminales que muestran los controles e indicadores (Inputs/Out-
puts) del VI

Figura 1.7: Editar Icono

Figura 1.8: Icono y Conectores

12
1.2.2. Tipos de Cables Segun Tipos de Datos

Figura 1.9: Tipos de Cables

1.2.3. Paleta de Controles e Indicadores

En el Panel frontal se encuentra la paleta de controladores e indicadores que se


pueden utilizar como inputs/outputs del VI en desarrollo. Existen varios tipos de con-
troles e indicadores segun los distintos tipos de datos existentes en LabVIEW, como
tambien distintos tipos de controles e indicadores segun como se desee la visualiza-
cion en la HMI.

13
Figura 1.10: Paleta de Controles y Paleta de Herramientas

1.2.4. Paleta de Funciones

En el diagrama de bloques se encuentra la paleta de funciones. Esta contiene todos


los bloques que estan disponibles para la programacion del diagrama de bloques.

Figura 1.11: Paleta de Funciones

14
1.3. Ejemplos
Ver Ejemplo 1 y 2, Grafico de Senoidal Tablas y Archivo txt

15
Captulo 2

Resolucion de Problemas y
Depuracion de VIs

Para la correcta ejecucion de un VI es necesario cablear correctamente cada una


de las partes que lo conforman, respetando el correcto uso de los tipos de datos de
entrada y salida. De lo contrario no se podra realizar la ejecucion o el programa entre-
gara resultados indeseados.

2.1. Correccion de VIs Rotos


Un VI roto es un instrumento virtual que posee algun error en su programacion,
por lo que no es ejecutable. En este caso el boton de ejecucion muestra su cono
(flecha) rota.

16
Figura 2.1: VI Roto, conexion incorrecta de tipo de datos

2.2. Buscar Causas de VIs Rotos


Un VI esta roto cuando posee errores dentro de su programacion. Las advertencias
(warnings) no impiden que ejecute un VI. Por lo tanto, se deben resolver todos los
errores antes de ejecutar un VI. Entonces, la pregunta que surge es Como identificar
el VI o SubVI que contiene el error?, Como saber que error es? Para esto LabVIEW
tiene una serie de herramientas que nos ayudan a responder estas preguntas. En primer
lugar analizaremos las causas.

Causas Habituales de VIs Rotos

El diagrama de bloques contiene un cable roto por un desajuste de tipos de datos


o un extremo suelto o desconectado. Consulte el tema Correcting Broken VIs
de la Ayuda de LabVIEW para obtener informacion acerca de corregir cables
rotos

Un terminal obligatorio del diagrama de bloques no esta cableado. Consulte el

17
tema Using Wires to Link Block Diagram Objects en la Ayuda de LabVIEW
para obtener informacion acerca de configurar entradas y salidas obligatorias

Un subVI esta roto o modifico su panel de conectores tras colocar su icono en


el diagrama de bloques del VI. Consulte el tema Creating SubVIs de LabVIEW
Help para obtener informacion acerca de subVIs

Tecnicas de Depuracion

Cablee los parametros de salida y entrada de error en la base de la mayora de


los VIs

Para eliminar todas las advertencias del VI, seleccione View))Error List y mar-
que la casilla de verificacion Show Warnings para ver todas las advertencias
del VI

Haga triple clic en el cable con la herramienta de posicionamiento

Use la ventana Context Help para comprobar los valores predeterminados de


cada funcion y subVI en el diagrama de bloques

Seleccione View))VI Hierarchy para buscar subVIs sin cablear

Resalte las ejecuciones para ver el movimiento de datos por el diagrama de


bloques

Ejecute paso a paso el VI para ver cada accion suya en el diagrama de bloques

Use la herramienta de sonda para observar valores de datos intermedios y para


comprobar la salida de errores de VIs y funciones, en especial las que realizan
E/S

Haga clic en el boton Retain Wire Values en la barra de herramientas del dia-
grama de bloques para conservar los valores del cable que utilizara con sondas

18
Use puntos de interrupcion para pausar la ejecucion

Determine si los datos que pasa una funcion o subVI estan sin definir

Suspenda la ejecucion de un subVI para modificar valores de controles e indica-


dores, para controlar el numero de veces que se ejecuta o para volver al principio
de la ejecucion del subVI. La ventana VI Hierarchy, que se abre seleccionando
View))VI Hierarchy, indica si un VI esta pausado o suspendido.

Error List

Figura 2.2: Lista de Errores

19
Figura 2.3: Show Error

Resaltar Ejecucion

Figura 2.4: Resaltar Ejecucion

20
Ejecucion Paso a Paso

Figura 2.5: Ejecucion Paso a Paso

Herramienta de Sonda

Figura 2.6: Herramienta de Sonda

21
Puntos de Interrupcion

Figura 2.7: Puntos de Interrupcion

Suspender Ejecucion de VI

Figura 2.8: Suspender Ejecucion de VI

Gestion de Errores

Aunque confe mucho en el VI que cree, no puede predecir todos los problemas
que puede encontrar un usuario. Sin un mecanismo para comprobar los errores, solo

22
sabe que el VI no funciona correctamente. La comprobacion de errores indica donde
y por que se generan los errores. National Instruments recomienda encarecidamente
usar tecnicas de gestion de errores. Existen dos formas de gestion de errores:

Gestion de Errores Automatica: LabVIEW por defecto controla los errores cuan-
do ejecuta los VIs, suspendiendo la ejecucion y resaltando el VI con errores

Gestion Manual de Errores: Se puede elegir la gestion manual de errores para el


caso de que no se requiera la suspension de la ejecucion del programa

Figura 2.9: Gestion Manual de Errores

El control de errores manual en LabVIEW se puede implementar mediante los


siguientes metodos:

Use el VI gestor de errores de LabVIEW y las funciones de la paleta Dialog


and User Interface

Utilizar Cluster de Error y los parametros Error In y Error Out de la mayora


de los VIs y funciones

23
Cluster de Error

Las funciones y VIs generalmente producen codigos de errores, los cluster de error
sirven para poder interpretar esos codigos. Incluyen los siguientes componentes de
informacion:

Status: valor booleano que produce TRUE si ocurrio un error

Code: Es un numero entero con signo, de 32 bits que identifica el error de


forma numerica. (Codigo de error distinto de cero, mas status FALSE, indica
una advertencia)

Source: Es un String (Cadena de caracteres) que identifica donde ocurrio el


error

Figura 2.10: Slub 3D con Cluster de Error

24
Figura 2.11: Slub 3D (Funcion Merge Errors - Context Help)

25
Captulo 3

Implementacion de un VI

Esta leccion le ensena como implementar codigo en LabVIEW.

Se explica como disenar una interfaz de usuario

Utilizar los distintos tipos de datos

Documentar su codigo

Estructuras de Bucles y Temporizacion

Graficar Datos

Condicionales utilizando estructura Case

3.1. Panel Frontal


Es el panel donde se definen y configuran las entradas y salidas del programa o VI
a ser disenado.
Los inputs/outputs pueden venir de tres acciones diferentes:

Adquiriendo desde un dispositivo de adquisicion de datos o un multmetro

Leyendo directamente desde un fichero (archivo)

26
Manipulando controles en el panel frontal

IMPORTANTE: No todas las entradas y salidas deben aparecer necesariamente


en el panel frontal.

3.2. Controles

3.2.1. Etiquetas

La idea es etiquetar los controles e indicadores con nombres acordes a la funcion


que realizan.

Figura 3.1: Controles y Elementos Visibles

27
3.2.2. Opciones de Controles

Se pueden setear los valores por defecto de cada control o reinicializar dichos
valores.

Figura 3.2: Inicializacion y Reinicializacion

3.3. Tipos de Datos de LabVIEW


Los terminales del diagrama de datos indican visualmente el tipo de datos que
representan.

Figura 3.3: Tipo de datos visualmente representado en terminales

28
3.3.1. Menus Contextuales

Intuitivamente podemos analizar las opciones de los menus contextuales de cada


uno de los bloques que se utilizan en LabVIEW. (Click Derecho).

Figura 3.4: Menu contextual de Control Numerico

29
3.3.2. Cuadro de Propiedades

Al igual que en Windows OS intuitivamente podemos analizar las propiedades de


bloques, controles e indicadores con Click Derecho.

Figura 3.5: Cuadro de Propiedades de Control Numerico

3.3.3. Tipos de Datos Numericos

El tipo de dato numerico representa numeros de varias clases. Para cambiar el


tipo de representacion de un numero, haga clic con el boton derecho en el control,
indicador o constante y seleccione Representation.

30
Figura 3.6: Representacion de un Control Numerico

IMPORTANTE Cuando se producen operaciones con tipos de datos numericos


con diferente Representacion, las funciones o bloques obligan a representar el nume-
ro a la representacion mas alta.
Ejemplo: En la multiplicacion entre Double (DBL) y Unsigned Int 8 (U8) bits, el
bloque multiplicar obligara a representar los dos numeros como Double (DBL) Antes
de su ejecucion. Punto de Coercion en el terminal donde toma lugar la transforma-
cion.

31
Figura 3.7: Punto de coercion donde sucede la transformacion

Numeros en punto flotante

Precision Simple (SGL): los numeros en coma flotante de precision simple tienen
un formato de precision simple de 32 bits IEEE. Use numeros de precision simple
punto flotante cuando el ahorro de memoria es importante y no sobrecargara el rango
de los numeros.
Doble precision (DBL): los numeros en coma flotante de doble precision tienen
un formato de precision doble de 64 bits IEEE. La doble precision es el formato prede-
terminado para objetos numericos. Use los numeros punto flotante de doble precision
para la mayora de las situaciones.
Precision Extendida (EXT): Cuando guarda numeros de precision extendida al
disco, LabVIEW los almacena en una plataforma independiente con formato de 128-
bit format. En memoria, el tamano y precision varan dependiendo de la plataforma.
Use numeros punto flotante de precision extendida solo cuando sea necesario. El ren-
dimiento de la aritmetica de precision extendida vara entre plataformas.
Punto Fijo: numero racional representado por medio de dgitos binarios. El de-
nominador del racional debe ser potencia de dos. Sirve configurar su largo en bits
para plataformas que no aceptan la aritmetica en punto flotante, como FPGA. Largo
Maximo 64 LabVIEW.

32
Numeros enteros

Recomendacion: Enteros pueden ser positivos o negativos. Usar los tipos de datos
Unsigned es recomendable cuando este seguro de que el numero es siempre positivo.
Byte (I8): los numeros enteros Byte tienen 8 bits de almacenamiento y un intervalo
de -128 a 127.
Word (I16): los numeros enteros Word tienen 16 bits de almacenamiento y un
intervalo de -32.768 a 32.767.
Long (I32): los numeros enteros Long tienen 32 bits de almacenamiento y un
intervalo de -2.147.483.648 a 2.147.483.647. En la mayora de los casos es mejor
utilizar un numero entero de 32 bits.
Quad (I64): los numeros enteros Quad tienen 64 bits de almacenamiento y un
intervalo de -1xe19 a 1xe19.
Byte (U8): los numeros enteros sin signo Byte tienen 8 bits de almacenamiento y
un intervalo de 0 a 255.
Word (U16): los numeros enteros sin signo Word tienen 16 bits de almacenamien-
to y un intervalo de 0 a 65.535.
Long (U32): los numeros enteros sin signo Long tienen 32 bits de almacenamiento
y un intervalo de 0 a 4.294.967.295.
Quad (U64): los numeros enteros sin signo Quad tienen 64 bits de almacenamien-
to y un intervalo de 0 a 2xe19.

Numeros Complejos

Los numeros complejos son versiones concatenadas de numeros en punto flotante


con una parte real e imaginaria. En LabVIEW, como los numeros complejos son un
tipo de numero en punto flotante, los numeros complejos tambien se representan con
el color naranja. Existen tres partes en los numeros complejos:

33
Complejo simple (CSG): los numeros complejos de coma flotante de precision
simple constan de valores reales e imaginarios y tienen un formato de precision simple
de 32 bits IEEE.
Complejo Doble (CDB): los numeros complejos de coma flotante de doble pre-
cision constan de valores reales e imaginarios y tienen un formato de doble precision
de 64 bits IEEE.
Complejo Ampliado (CXT): los numeros complejos de coma flotante de preci-
sion ampliada constan de valores reales e imaginarios y tienen un formato de precision
ampliada IEEE. En la memoria, el tamano y la precision de numeros de precision am-
pliada varan en funcion de la plataforma. En Windows tienen un formato de precision
ampliadade 128 bits IEEE.

Valores Booleanos

IMPORTANTE!! LabVIEW almacena datos booleanos como valores de 8 bits.


Si el valor de 8 bits es cero, el valor booleano es FALSE. Cualquier valor que no sea
cero representara TRUE. En LabVIEW, el color verde representa datos booleanos.
Los controles booleanos tienen una accion mecanica asociada a ellos, especfica-
mente al comportamiento del boton.

Switch when pressed: cambia el valor del control cada vez que hace clic en el
con la herramienta de operaciones

Switch when released: cambia el valor del control solo despues de soltar el
boton del raton mientras hace clic dentro del lmite grafico del control

Switch until released: cambia el valor del control cuando hace clic en el y
conserva el nuevo valor hasta que suelte el boton del raton. En este momento, el
control vuelve a su valor predeterminado

Latch when pressed: cambia el valor del control cuando hace clic en el y con-
serva el nuevo valor hasta que el VI lo lea una vez. En este momento, el control

34
vuelve a su valor predeterminado, aunque siga pulsando el boton del raton. Este
comportamiento es similar al de un disyuntor y es util para detener un bucle
While o para que el VI realice una accion solo una vez cada vez que ajuste el
control

Latch when released: cambia el valor del control solo despues de soltar el
boton del raton dentro del lmite grafico del control. Cuando el VI lo lee una
vez, el control vuelve a su valor predeterminado. Este comportamiento funciona
del mismo modo que los botones de los cuadros de dialogo y del sistema

Latch until released: cambia el valor del control cuando hace clic en el y con-
serva el valor hasta que el VI lo lea una vez o suelte el boton del raton, en
funcion de loque ocurra en ultimo lugar

Figura 3.8: Accion Mecanica de Controles Booleanos

35
Cadena de Caracteres

Una cadena de caracteres es una secuencia de caracteres ASCII visualizables y


no visualizables. Las cadenas de caracteres tienen un formato independiente de las
plataformas para la informacion y los datos.

Figura 3.9: Visualizacion de Cadena de Caracteres

Enums

Un enum (indicador, constante o control enumerado) es una combinacion de tipos


de datos. Un enum representa una pareja de valores, una cadena de caracteres y un
numerico, donde el enum puede ser uno de una lista de valores.

36
Figura 3.10: Editando campos de constante tipo Enum

Figura 3.11: Editando campos de constante tipo Enum

37
Dinamicos

El tipo de datos dinamico almacena la informacion que genera o adquiere un VI


Express. El tipo de datos dinamico aparece como un terminal azul oscuro, mostrado
abajo. La mayora de VIs Express aceptan o devuelven el tipo de datos dinamico.
NOTA: Existe la forma de convertir datos dinamicos a numeros flotantes o enteros,
dado que no todas las funciones los aceptan como entrada.

3.4. Documentacion de Codigo

3.4.1. Ayudas y Descripciones

Para solicitar ayudas o descripciones se puede mover el cursor sobre un control o


indicador mientras ejecuta un VI. Tambien se puede utilizar el recurso Context Help
(ctrl+H).

3.4.2. Programacion Grafica

LabVIEW es un lenguaje de programacion grafica, por lo tanto conviene comentar


partes importantes del diagrama de bloques segun su funcion o los datos que circulan
por los cables. Functions, Programming, Structures, Decorations.

38
3.5. Bucles While
Al igual que un bucle Do o un bucle Repeat-Until en lenguajes de programacion
basados en texto, un bucle While ejecuta un subdiagrama hasta que ocurra una condi-
cion o sentencia.

Figura 3.12: Reutilizando Imagen - Analizar Casos Patologicos (CORE 1)

3.5.1. Tuneles a traves de Estructuras

Los tuneles suministran datos hacia dentro y hacia fuera de las estructuras como
bucles While. El tunel aparece como un bloque solido en el borde del bucle While. El
bloque es del color del tipo de datos cableado al tunel.

39
Figura 3.13: Tuneles en Estructura While (Entero y String)

3.5.2. Usando bucles While para chequeo y manejo de errores

Puede cablear un cluster de error al terminal condicional de un bucle While o un


bucle For con un terminal condicional para detener la iteracion del bucle. Cuando
cablea un cluster de error al terminal condicional, solo pasa al terminal el valor TRUE
o FALSE del parametro status del cluster de error. Si ocurre un error, el bucle se
detendra.

Figura 3.14: Cableando Cluster de Error a Terminal Condicional)

40
3.6. Bucles For
Un bucle For ejecuta un subdiagrama cierto numero de veces. Resolvamos el mis-
mo problema anterior pero esta vez con un Bucle For.
La terminal de contaje (N) es una terminal de entrada cuyo valor indica cuantas
veces debe repetir el subdiagrama.
La terminal de iteracion (i) es una terminal de salida que contiene el numero de
iteraciones completadas. IMPORTANTE!!! La cuenta comienza en cero.

Figura 3.15: Bucle For para mismo problema

1000 es un numero suficientemente grande para que se produzca el match, aunque


no asegura que suceda.
Tambien se le puede anadir una terminal condicional al Bucle For, tal como en el
caso del Match, cuando el numero al azar iguala al numero definido, el Bucle For se
detiene.

41
Figura 3.16: Bucle For con terminal condicional

3.7. Temporizacion de VIs


Cuando un bucle termina de ejecutar una iteracion, inmediatamente empieza a
ejecutar la siguiente, a menos que llegue a una condicion de parada. Normalmente
tendra que controlar la frecuencia o temporizacion de la iteracion. Por ejemplo, si
esta adquiriendo datos y desea hacerlo cada 10 segundos, necesita poder temporizar
las iteraciones del bucle para que ocurran cada 10 segundos. En otras palabras, poder
controlar la frecuencia de muestreo.

3.7.1. Funciones de Espera

Wait Until Next ms Multiple: controla un contador de milisegundos y espera


hasta que este alcance un multiplo de la cantidad que especifique (OJO: Tiempo
de ejecucion del bucle menor al tiempo de la funcion).

Wait (ms): espera hasta que el contador de milisegundos cuente una cantidad

42
igual a la entrada que especifique (OJO: Tiempo de ejecucion del bucle menor
al tiempo de la funcion).

Elapsed Time: a veces es util determinar cuanto tiempo transcurre durante la


ejecucion de algun VI. Elapsed Time mide el tiempo transcurrido tras el instante
de inicio especificado.

Figura 3.17: Fibonacci con temporizacion

3.8. Retroalimentacion de Datos en los Bucles


Al programar con bucles, a menudo debe acceder a datos de iteraciones anterio-
res. Para poder hacer esto, en LabVIEW existen los registros de desplazamiento. Estos
registros funcionan de forma similar a las variables estaticas en los lenguajes de pro-
gramacion basados en texto.
Se agregan al final del bucle seleccionando Add Shift Register en el menu con-
textual del mismo bucle.
OJO!!! el tipo de datos debe ser el mismo para los registros de desplazamiento.

43
Figura 3.18: Mismo ejemplo con enfasis en los Registros de Desplazamiento

Figura 3.19: Fibonacci Panel Frontal

3.9. Graficando Datos


En esta seccion se utilizara el grafico waveform chart, tipo especial de indicador
numerico que muestra una o mas graficas de datos ya sea adquiridos o generados a
una velocidad constante.
IMPORTANTE!!! un punto importante del waveform chart es el modo de actua-
lizacion del mismo.

44
Figura 3.20: Random number en waveform chart

Figura 3.21: Seleccionar Advance y Update Mode en menu contextual

45
Strip Chart: muestra los datos moviles desplazandose continuamente de iz-
quierda a derecha por el grafico con los datos antiguos a la izquierda y con los
nuevos a la derecha (hoja de registro sismos)

Figura 3.22: Strip Chart

Scope Chart: muestra un elemento de datos, como un impulso o una onda,


desplazandose parcialmente por el grafico de izquierda a derecha. Para cada
nuevo valor, el grafico traza el valor a la derecha del ultimo valor. Cuando la
curva llega al borde derecho de la zona de trazado, LabVIEW borra la curva y
empieza a trazar de nuevo desde el borde izquierdo (Osciloscopio)

Figura 3.23: Scope Chart

46
Sweep Chart: funciona de modo parecido a un scope chart salvo que muestra
los datos antiguos a la derecha y los nuevos a la izquierda separados por una
lnea vertical (Electrocardiograma)

Figura 3.24: Sweep Chart

3.10. Estructuras Case


Una Estructura Case posee el mismo concepto de las sentencias switch/case en los
lenguajes de programacion basados en texto.

Figura 3.25: Estructura Case

Solo se ve un subdiagrama a la vez y la estructura ejecuta solo un caso cada vez.


Un valor de entrada determina que subdiagrama ejecutar.
La etiqueta del selector de caso en la parte superior de la estructura Case contiene
en el centro el nombre del valor de seleccion que se corresponde con el caso actual y
las flechas de incremento y decremento a cada lado.

47
La estructura Case acepta como entrada de seleccion un numero entero, un valor
booleano, una cadena de caracteres o una variable compuesta enum.
IMPORTANTE: cuando se cablea variable string, se puede configurar que no re-
conozca entre mayusculas y minusculas Case Insensitive Match.
Se puede setear un caso por defecto con Make This The Default Case.

3.10.1. Tuneles de Entrada y Salida

Puede crear varios tuneles de entrada y salida para una estructura Case. Las en-
tradas estan disponibles en todos los casos, pero los casos no necesitan utilizar cada
entrada. No obstante, debe definir un tunel de salida para cada caso.
Tambien puede hacer clic con el boton derecho en el tunel de salida y seleccionar
Use Default If Unwired en el menu contextual para utilizar el valor predeterminado
para el tipo de datos del tunel en todos los tuneles sin cablear.

3.10.2. Ejemplo Condicion Booleana

Figura 3.26: Suma o Resta Condicion Booleana

48
Figura 3.27: Suma o Resta Condicion Booleana

3.10.3. Ejemplo Condicion String

Figura 3.28: Suma o Resta Condicion String

Figura 3.29: Suma o Resta Condicion String

49
3.10.4. Ejemplo Condicion Enum

Figura 3.30: Maquina de Estado Simple (Semaforo)

Figura 3.31: Maquina de Estado Simple (Semaforo)

50
Captulo 4

Desarrollo de Aplicaciones Modulares

Al igual que en los lenguajes de programacion basados en texto, se puede modu-


larizar un programa. En este caso mediante el uso de SubVIs.
Un VI dentro de otro VI se denomina subVI. Un subVI corresponde a una subru-
tina en lenguajes de programacion basados en texto. Cuando hace doble clic en un
subVI, aparece un panel frontal y un diagrama de bloques en lugar de un cuadro de
dialogo donde poder configurar opciones.
Existe mas de una opcion para crear los SubVIs en LabVIEW. La primera consiste
en abrir un VI en blanco, programar su diagrama de bloques, setear en el panel de
conectores los controles e indicadores que corresponde y luego guardar con un nombre
asociado a su funcion.
Otra forma es programar en la aplicacion principal el modulo que sera posterior-
mente un SubVI, seleccionarlo y transformarlo en SubVI.

51
Figura 4.1: Crear SubVI desde aplicacion principal - Seleccionar

Figura 4.2: Crear SubVI desde aplicacion principal - Edit - Crear SubVI

52
Figura 4.3: Diagrama de Bloques con SubVI

Posteriormente a crear el SubVI, es conveniente asociar una figura que ilustre la


funcionalidad del SubVI. Para esto, hacer doble click en el bloque SubVI, dirigirse al
icono en el panel frontal, hacer click derecho en dicho icono y editar.

Figura 4.4: Editar Icono del SubVI

53
Figura 4.5: Apariencia Inicial de SubVI

Figura 4.6: Apariencia Editada del SubVI

Luego de editar la apariencia, se puede mover o reasignar los terminales de conec-


tores del SubVI.

54
Puede designar que entradas y salidas son obligatorias, recomendadas y opcionales
para evitar que los usuarios olviden cablear terminales del subVI.
Haga clic con el boton derecho en un terminal del panel de conectores y seleccio-
ne This Connection Is en el menu contextual. Una marca de verificacion indica la
configuracion del terminal. Seleccione Required, Recommended u Optional. Tam-
bien puede seleccionar Tools))Options))Front Panel y activar la casilla de verificacion
Connector pane terminals default to required. Esta opcion configura los terminales
del panel conector en Required en lugar de Recommended.

Figura 4.7: Editar en panel de Terminales

Una vez realizado todo el procedimiento, se guarda y se puede utilizar como un


bloque independiente varias veces en la misma aplicacion principal.

55
Figura 4.8: Aplicacion principal y SubVI

Para gestionar errores en SubVIs es conveniente setear clusters de error como


entrada y salidas, complementado con una estructura case para gestionar si el VI debe
ejecutarse normalmente (Caso sin error) o debe ejecutar una accion especial (Caso
con error/es).

56
Captulo 5

Creando y Aprovechando Estructuras


de Datos

En ocasiones es conveniente agrupar datos relacionados entre s. Use arrays y clus-


ters para agrupar datos relacionados en LabVIEW. Los arrays combinan datos del mis-
mo tipo en una estructura de datos; los clusters combinan datos de diferente tipo en
una estructura de datos.

5.1. Arrays
Un array consta de elementos y dimensiones. Los elementos son los datos que
conforman el array. Una dimension es la longitud, altura o profundidad de un array.
Un array puede tener una o mas dimensiones y un maximo de 231 - 1 elementos por
dimension, si lo permite la memoria.
Se puede crear arreglos de cualquier tipo de datos, numericos, booleanos, de ca-
dena de caracteres, formas de onda y clusters.
IMPORTANTE: Los ndices de arrays parten en cero (0), en todas las dimensio-
nes.

57
Restricciones

No se puede crear arrays de arrays. Se puede crear arrays de cluster, donde cada
cluster posee una cantidad de arrays.

Controles del Tipo Array

Cree un control o indicador de array en el panel frontal anadiendo una estructura


array al panel frontal, como se muestra en el siguiente panel frontal, y arrastrando un
objeto o elemento de datos, que puede ser un control o indicador numerico, booleano,
de cadena de caracteres, de ruta, de refnum o de cluster, en la estructura array. Debe
insertar un objeto en la estructura array antes de usar el array en el diagrama de blo-
ques. De lo contrario, el terminal del array aparecera negro, con un parentesis vaco y
no tendra tipos de datos asociados a el.

Figura 5.1: Panel frontal - Control Array

Figura 5.2: Control numerico insertado

Crear Constantes Tipo Array

Para crear una constante de array en el diagrama de bloques, seleccione una cons-
tante de array en la paleta de Funciones, coloque la estructura array en el diagrama

58
de bloques y coloque una constante de cadena de caracteres, una constante numerica,
una constante booleana o una constante de cluster en la estructura array.

Figura 5.3: Array en Paleta de Funciones

Figura 5.4: Constante de Array

Agregar Dimensiones (arreglo bidimensional)

Para anadir un array multidimensional al panel frontal, haga clic con el boton
derecho en la pantalla del ndice y seleccione Add Dimension en el menu contextual.
Tambien puede cambiar el tamano del ndice hasta que tenga tantas dimensiones como
desee.

59
Figura 5.5: Multidimensiones - Add Dimension

Inicializacion

Puede inicializar un array o dejarlo sin inicializar. Para inicializar un array, debe
definir el numero de elementos de cada dimension y el contenido de cada elemento.
Un array sin inicializar contiene un numero fijo de dimensiones pero ningun elemento.

5.2. Funciones de Array

Figura 5.6: Array Size

60
Figura 5.7: Initialize Array

Figura 5.8: Array Subset

Figura 5.9: Build Array

61
Figura 5.10: Index Array

5.3. Polimorfismos
Polimorfismo es la habilidad de VIs y funciones de adaptarse automaticamente
para aceptar diferentes tipos de datos. Las funciones son polimorficas en diferentes
grados, ninguna, algunas o todas sus entradas pueden ser polimorficas.

5.3.1. Polimorfismo para Funciones Aritmeticas

Las funciones aritmeticas aceptan entrada de datos numericos. Con algunas excep-
ciones detalladas en la descripcion de las funciones, la salida predeterminada tiene la
misma representacion que la entrada o si las entradas tienen diferentes representacio-
nes,la salida predeterminada sera igual a la representacion mas larga de las entradas.
Diferentes combinaciones para la funcion Add:

Figura 5.11: Polimorfismos posibles para Add

62
5.3.2. Polimorfismos para Funciones Boleanas

Figura 5.12: Polimorfismos posibles para AND

5.4. Autoindexado
Si cablea un array hacia o desde un bucle For o While, puede vincular cada ite-
racion del bucle en un elemento de ese array habilitando el autoindexado. La imagen
del tunel cambia de un cuadrado relleno a la imagen para indicar el autoindexado.
Haga clic con el boton derecho en el tunel y seleccione Enable Indexing o Disable
Indexing desde el menu contextual para cambiar el estado del tunel.

5.4.1. Entradas de Array y Autoindexado

Si habilita el autoindexado en un array cableado a un terminal de entrada de un bu-


cle For, LabVIEW configurara el terminal de contaje en el tamano del array, por lo que
no tiene que cablear el terminal de contaje. Dado que puede utilizar bucles For para
procesar arrays elemento por elemento, LabVIEW habilita el autoindexado de forma
predeterminada para todos los arrays que cablee a un bucle For. Puede desactivar el
autoindexado si no necesita procesar arrays elemento por elemento.

63
Figura 5.13: Autoindexado de Entrada y Salida

IMPORTANTE: En el ejemplo, estan cableados dos arreglos de entrada de 10 y


20 elementos. A pesar de que el terminal de contaje tiene un valor de 15 iteraciones,
el bucle For solo se ejecutara 10 veces, procesando todos los elementos del primer
arreglo, pero solo la mitad de los elementos del segundo.
IMPORTANTE: El tamano del arreglo de salida de un tunel con autoindexado,
es siempre igual al numero de iteraciones del bucle correspondiente.

5.4.2. Arrays Bidimensionales

Puede usar dos bucles For, anidados uno dentro del otro, para crear un array 2D.
El bucle For externo crea los elementos de la fila, mientras que el interno crea los
elementos de la columna.

64
Figura 5.14: Creando Array Bidimenional

Figura 5.15: Ejemplo - Sumando a cada coeficiente de matriz

5.5. Autoindexado Condicional


Usted puede determinar que valores LabVIEW escribe a la salida de un tunel de un
bucle basado en una condicion que especifica haciendo clic con el boton derecho en la
salida del tunel y seleccionando Tunnel Mode - Conditional en el menu contextual.

65
Figura 5.16: Indexado Con Estructura Case

Figura 5.17: Indexado con Tunel Condicional

5.5.1. Graficos Waveform Graph

Los VIs con un grafico normalmente acumulan los datos en un array y despues los
trazan en el grafico.
El grafico tipo waveform graph acepta varios tipos de datos para mostrar varias
curvas. Acepta un array 2D de valores, donde cada fila de esta es una sola curva. El
grafico interpreta los datos como puntos del mismo e incrementa el ndice x en uno,
empezando por x= 0. Cablee un tipo de datos de array 2D al grafico tipo graph, haga
clic en este con el boton derecho y seleccione Transpose Array en el menu contextual
para tratar cada columna del array como una curva.

66
Figura 5.18: Waveform Graph

IMPORTANTE: Un Waveform Graph grafica un cierto numero de puntos alma-


cenados en un buffer, cuando este se llena, comienza a sobreescribir mientras sigue
mostrando.
Un Waveform Graph acepta como entrada arreglos de datos en varias formas,
ejemplo array, waveform o dynamic data. Luego grafica todos los puntos recibidos
a la vez.

5.6. Clusters
Los clusters agrupan elementos de datos de tipos mixtos. Un ejemplo de un cluster
es el cluster de error de LabVIEW que combina un valor booleano, uno numerico
y una cadena de caracteres. Un cluster es similar a un registro o una estructura en
lenguajes de programacion basados en texto.
Unir varios elementos de datos en clusters elimina el abarrotamiento de cables en
el diagrama de bloques y reduce el numero de terminales del panel de conectores que
necesitan los subVIs. El panel de conectores tiene como mucho 28 terminales.

67
5.6.1. Creacion de Controles e Indicadores de Cluster

Cree un control o indicador de clusters en el panel frontal anadiendo una estruc-


tura cluster, y arrastrando un objeto o elemento de datos que puede ser un control o
indicador numerico, booleano, de cadena de caracteres, de ruta, refnum o cluster, en
la estructura cluster.

Figura 5.19: Crear Control o Indicador tipo Cluster

5.6.2. Crear Constantes Cluster

Desde la paleta de funciones se puede crear una estructura cluster y asignarle cons-
tantes del tipo numerico, string, booleano, cluster.
Tambien se puede copiar un control tipo cluster y transformarlo en constante me-
diante la opcion Create - Constant en el menu contextual.

5.6.3. Orden en clusters

Se puede reordenar cada elemento de un cluster por medio del menu contextual en
la opcion Reorder Controls In Cluster.

68
Figura 5.20: Reordenar elementos de un Cluster

Ademas de reordenar, existen opciones de ajuste de tamano y alineamiento del


cluster en el panel frontal, tomando en cuenta las opciones del panel frontal Autosi-
zing.

5.6.4. Funciones de Cluster

Bundle

Figura 5.21: Funcion Cluster Bundle

69
Unbundle

Figura 5.22: Funcion Cluster Unbundle

5.7. Definiciones Tipo


Puede usar definiciones tipo para definir clusters y arrays personalizados. Una
definicion tipo es una copia maestra de un tipo de dato personalizado (control perso-
nalizado, indicador o constante) que multiples VIs pueden usar.

70
Figura 5.23: Definicion Tipo de Control Tipo Cluster

Todas las copias de una definicion tipo o de una definicion tipo estricta se vinculan
con el archivo original desde donde las creo.
Puede realizar cambios en todas las copias del control o indicador personalizado
modificando solo el archivo de control o indicador personalizado, lo cual resulta util
si usa el mismo control o indicador personalizado en varios VIs.
La diferencia entre typedef y strict typedef es que para el primero solo se nor-
malizan el tipo de datos de los elementos del typedef. Para la segunda, el tipo de
datos, representacion, rango de controles numericos, nombres de los elementos, etc.
permanecen invariables entre copias del mismo typedef.

71
Captulo 6

Administrando Archivos y Recursos


de Hardware

En esta seccion es donde se exploraran los topicos relacionados con el almacena-


miento de datos. Dado que para esta capacitacion no contamos con el hardware de NI
asociado a la adquisicion, nos saltaremos algunos topicos por el momento.

6.1. Entendiendo Recursos de Hardware y Software


Un recurso es un archivo direccionable, dispositivo de hardware, objeto o conexion
de red disponible en el sistema. El sistema identifica recursos usando rutas, nombres,
puertos u otros identificadores.

72
Figura 6.1: Operacion Tpica Con Recursos

6.1.1. Crear el Recurso

Para poder adquirir datos o importar archivos con datos, primero es necesario crear
el recurso de hardware o software, setear su directorio en el caso de ficheros y setear
el nombre del canal, velocidad, registros etc. cuando hablamos de hardware.

Figura 6.2: Crear y Configurar el Recurso

6.1.2. Leer o Escribir

Luego, con el recurso creado es posible leer datos o escribirlos segun lo determine
la aplicacion a realizar.

73
Figura 6.3: Leer o Escribir en Recursos

6.1.3. Cerrar Recurso y Revisar Errores

Una vez realizada la operacion de lectura y escritura, se debe cerrar el recurso y


revisar los posibles errores que hayan surgido debido a las distintas operaciones.

Figura 6.4: Cerrando el Recurso

6.2. Numeros de Referencia REFNUM


Un numero de referencia, o refnum, es un identificador unico para un recurso.
Cuando abre un fichero, dispositivo o conexion de red, LabVIEW crea un refnum aso-
ciado a ellos. Todas las operaciones que realice en ficheros, dispositivos o conexiones

74
de red abiertos usan los refnums para identificar cada objeto.
Debido a que el refnum es un apuntador temporal a un recurso abierto, es so-
lamente valido por el periodo mientras este abierto. Si cierra el recurso, LabVIEW
desasocia el refnum del recurso y el refnum se vuelve obsoleto. Si vuelve a abrir el
recurso, LabVIEW crea un nuevo refnum que es diferente del primer refnum.

6.3. E/S de Ficheros


Las operaciones de E/S de ficheros pasan datos desde y hacia un archivo. Use los
VIs y funciones de E/S de ficheros para manejar todos los aspectos de E/S de archivos.

6.3.1. Formatos de Ficheros

Binario: los ficheros binarios son el formato de fichero subyacente del resto de
formatos de fichero

ASCII: un fichero ASCII es un tipo especfico de fichero binario y es un estandar


que utilizan la mayora de los programas. Tambien se denominan ficheros de
texto

LVM: el fichero de datos de medicion de LabVIEW (.lvm) es un fichero de


texto delimitado con tabulaciones que puede abrir con una aplicacion de hoja
de calculo o un editor de texto. El fichero .lvm incluye informacion sobre los
datos, como la fecha y la hora en que se generaron

TDMS: este formato de ficheros es un tipo especfico de un fichero binario


creado para productos de NI. Consta de dos ficheros distintos: uno binario que
contiene datos y almacena propiedades sobre los datos y un fichero de ndice
binario que ofrece informacion consolidada sobre todos los atributos y punteros
del fichero binario

75
6.3.2. E/S de Ficheros Alto Nivel

Write Delimited Spreadsheet

Figura 6.5: Write Delimited Spreadsheet

Read from Delimited Spreadsheet

Figura 6.6: Read from Delimited Spreadsheet

76
Write to Measurement File

Figura 6.7: Write to Measurement File

Read from Measurement File

Figura 6.8: Read from Measurement File

6.3.3. Ficheros de Bajo Nivel

Los VIs y funciones de E/S de fichero de bajo nivel realizan solo una parte del
proceso de E/S de fichero cada uno. Por ejemplo, existe una funcion para abrir un
fichero ASCII, otra para leerlo y otra para cerrarlo. Use funciones de bajo nivel cuando
la E/S de fichero este realizandose en un bucle.

77
Ejemplo

Figura 6.9: Ejemplo Ficheros Bajo Nivel

78
Captulo 7

Maquinas de Estado y Secuenciales

Existen numerosos modelos de diseno para VIs de LabVIEW. La mayora de las


aplicaciones usan al menos uno. En esta seccion se disenara una maquina de estados.

7.1. Programacion Secuencial


Hay tareas o aplicaciones que necesitan ser secuenciales, es decir, ejecutar dife-
rentes partes de un diagrama de bloques en un orden predefinido por el programador.
(Recordar que el orden en que se ejecuta el codigo depende del flujo de datos).

Figura 7.1: Flat Sequence Structure

Puede usar una estructura Sequence para forzar el orden de operaciones de los ob-
jetos del diagrama de bloques. Una estructura Sequence contiene uno o mas subdia-

79
gramas, o marcos, que se ejecutan en orden secuencial. Un marco no puede empezar
la ejecucion hasta que se haya completado la ejecucion de todo el codigo del marco
anterior.

Figura 7.2: Programacion Secuencial Usando Flat Secuence

La estructuras Sequence garantizan el orden de ejecucion, pero prohben operacio-


nes paralelas. Otra desventaja de usar estructuras Sequence es que no puede detenerse
la ejecucion en medio de la secuencia.

80
7.2. Programacion de Estado
Que sucede si debe cambiar el orden de la secuencia?

Que sucede si debe repetir un paso de la secuencia mas que otros?

Que sucede si algunos elementos de la secuencia se ejecutan condicionalmen-


te?

Que ocurre si debe detener el programa inmediatamente?

7.3. Maquinas de Estado


El modelo de diseno de la maquina de estados es comun y muy util en LabVIEW.
Puede usar el modelo de diseno de maquina de estados para implementar cualquier
algoritmo que pueda describir explcitamente un diagrama de estado o un diagrama de
flujo.
Una maquina Mealy realiza una accion para cada transicion. Una maquina Moore
realiza una accion concreta para cada estado del diagrama de transicion de estados.

7.3.1. Aplicacion de Maquinas de Estados

Use maquinas de estados en aplicaciones donde se distingan los estados. Cada


estado puede llevar a uno o mas estados o finalizar el flujo del proceso. Una maquina
de estados depende de la entrada del usuario o del resultado del estado actual para
determinar que estado ira despues.

81
7.3.2. Infraestructura de la Maquina de Estados

Bucle While: ejecuta continuamente los estados

Estructura Case: contiene un caso para cada estado y el codigo para ejecutar
en cada estado

Registro de desplazamiento: contiene la informacion de transicion de estados

Codigo de Estado: implementa la funcion del estado

Codigo de transicion: determina el siguiente estado de la secuencia

Figura 7.3: Estructura Basica Maquina de Estados

7.3.3. Control de Maquinas de Estados

El mejor metodo para controlar la inicializacion y transicion de maquinas de es-


tados es el control de tipo enumerado. Los enums se utilizan ampliamente como se-
lectores de caso en maquinas de estados. Sin embargo, si el usuario intenta anadir
o eliminar un estado del control de tipo enumerado, se rompen los cables restantes
conectados a las copias de este control de tipo enumerado.

82
IMPORTANTE!!! cuando se implementan maquinas de estados con tipo de datos
Enum, es recomendable construir el control de estados mediante un typedef, por si la
cantidad o nombre de los estados cambia.

7.3.4. Transiciones

Es necesario recordar que la transicion entre estados puede estar predeterminada o


ser condicional. En el segundo caso lo mas logico es incluir el codigo de la transicion
en la estructura case del mismo estado.
VER EJEMPLO SEMAFORO REAJUSTADO

83
Captulo 8

Resolviendo Desafos de Flujo de


Datos con Variables

En algunas situaciones, como al comunicarse entre bucles paralelos, debe romper


el modelo de ejecucion de flujo de datos pasando informacion entre ubicaciones en el
codigo que no puede conectar con un cable.
Para comunicar partes del codigo donde no es posible cablear directamente, se
utilizan variables.

8.1. Comunicacion entre Bucles Paralelos


LAbVIEW es un lenguaje donde se pueden ejecutar varias tareas en paralelo.
Si pensamos en comunicar dos bucles que deben funcionar en paralelo, no pode-
mos cablear, debido a que esto obliga a que ambos sigan el flujo de datos.

84
8.1.1. Metodo 1 (Incorrecto)

Figura 8.1: Metodo 1 Incorrecto

El Loop Control es una entrada de datos de ambos bucles, por lo que el terminal
Stop Button se lee solo una vez, antes de que cualquier bucle While empiece a ejecu-
tarse. Si False pasa a los bucles, los bucles While se ejecutan indefinidamente. Hacer
clic en el boton Stop no detendra el VI, porque el clic en el boton no se lee durante la
iteracion de cada bucle.

8.1.2. Metodo 2 (Incorrecto)

Figura 8.2: Metodo 2 Incorrecto

85
Aunque el Loop 1 termina correctamente, el Loop 2 no se ejecuta hasta que recibe
todas sus entradas de datos. El Loop 1 no pasa los datos fuera del bucle hasta que se
detenga el bucle, por lo que el Loop 2 debe esperar al valor final del Stop Button, dis-
ponible cuando termine el Loop 1. Por lo tanto, los bucles no se ejecutan en paralelo.
Asimismo, el Loop 2 se ejecuta solo para una iteracion porque su terminal condicional
recibe un valor True del interruptor Stop Button del Loop 1.

8.1.3. Metodo 3 (Solucion)

Buscar la ubicacion donde los datos de control del bucle esten almacenados en la
memoria y leer esa ubicacion de memoria directamente. Una variable local permite
hacer esto al leer del mismo control del panel frontal en mas de una ubicacion en el
diagrama. Luego en esta leccion usted aprendera como crear y usar una variable local
que se comunica entre dos bucles paralelos.

Figura 8.3: Metodo 3 Solucion

IMPORTANTE: El cable crea una dependencia de datos, porque el segundo bucle


no se inicia hasta que termine el primero y pase los datos por su tunel. Para que los
dos bucles se ejecuten a la vez, retire el cable. Para pasar datos entre los subVIs, use
otra tecnica, como una variable.

86
8.2. Variables
Variables Locales: Las variables Locales transfieren datos dentro de un solo
VI. Leen datos de controles e indicadores del panel frontal

Variable Globales: Una variable global tambien comparte datos, pero entre
varios VIs. Por ejemplo, suponga que tiene dos VIs ejecutandose simultanea-
mente. Cada VI contiene un bucle While y escribe puntos de datos en un grafico
tipo waveform chart. El primer VI contiene un control booleano para terminar
ambos VIs. Puede usar una variable global para terminar ambos bucles con un
solo control booleano

Variable Compartidas: Debe utilizar un archivo de proyecto para usar una va-
riable compartida. Para crear una variable compartida tipo single-process, haga
clic con el boton derecho en My Computer en la ventana Project Explorer
y seleccione New-Variable. Aparecera el cuadro de dialogo Shared Variable
Properties

IMPORTANTE!! El uso excesivo de variables disminuye el rendimiento de las


aplicaciones.

8.3. Condiciones de Carrera


Una condicion de carrera ocurre cuando la temporizacion de eventos o la progra-
macion de tareas afecta involuntariamente a un valor de salida o de datos. Las condi-
ciones de carrera suponen un problema comun en los programas que ejecutan varias
tareas en paralelo y comparten datos entre ellos.
Para evitarlas se debe:

Controlar y Limitar el uso de Recursos Compartidos (Variables)

Secuencias correctamente las instrucciones (Video de Condiciones de Carrera)

87

Das könnte Ihnen auch gefallen