Apuntes del curso
Tópicos Selectos de Ingeniería Básica: Programación por Flujo de Datos Catedrático: Dr. Gerardo Trujillo Schiaffino
Universidad Autónoma de Chihuahua Facultad de Ingeniería Ingeniería en Sistemas Computacionales
Enero 2012
Programa de la Materia: Tópicos Selectos de Ingeniería Básica (Programación por Flujo de Datos)
Objetivo General. Proporcionar al alumno conocimientos teórico-prácticos en el paradigma de la programación por flujo de datos utilizando el lenguaje de programación LabVIEW como una alternativa en el desarrollo de programas de aplicación.
Unidad I. Fundamentos de LabVIEW. Objetivo Particular. Conocer y aplicar el ambiente de programación de LabVIEW y su paradigma de programación por flujo de datos para el desarrollo de programas de aplicación.
Contenido. 1.1. 1.2. 1.3. 1.4. 1.5. 1.6.
Ambiente Ambiente de programación programación grafica grafica P aradigma aradigma de programación programación por flujo de datos. Opciones Opciones de ayuda Técnicas Técnicas de de depuración de errores Documentación Documentación del VI Sub-instrumentos ub-instrumentos virtuales virtuales
Unidad II. Estructuras de Programación. Objetivo Particular. Conocer y aplicar las principales estructuras de programación de LabVIEW para el desarrollo de estructuras de control en programas de aplicación.
Contenido. 2.1. 2.2. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
Ciclo Ciclo While Ciclo F or Registros de corrimiento corrimiento Nodos de retroaliment retroalimentación ación Case Secuencias Nodos de formula formula
Programa de la Materia: Tópicos Selectos de Ingeniería Básica (Programación por Flujo de Datos)
Objetivo General. Proporcionar al alumno conocimientos teórico-prácticos en el paradigma de la programación por flujo de datos utilizando el lenguaje de programación LabVIEW como una alternativa en el desarrollo de programas de aplicación.
Unidad I. Fundamentos de LabVIEW. Objetivo Particular. Conocer y aplicar el ambiente de programación de LabVIEW y su paradigma de programación por flujo de datos para el desarrollo de programas de aplicación.
Contenido. 1.1. 1.2. 1.3. 1.4. 1.5. 1.6.
Ambiente Ambiente de programación programación grafica grafica P aradigma aradigma de programación programación por flujo de datos. Opciones Opciones de ayuda Técnicas Técnicas de de depuración de errores Documentación Documentación del VI Sub-instrumentos ub-instrumentos virtuales virtuales
Unidad II. Estructuras de Programación. Objetivo Particular. Conocer y aplicar las principales estructuras de programación de LabVIEW para el desarrollo de estructuras de control en programas de aplicación.
Contenido. 2.1. 2.2. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
Ciclo Ciclo While Ciclo F or Registros de corrimiento corrimiento Nodos de retroaliment retroalimentación ación Case Secuencias Nodos de formula formula
Unidad III. Funciones de Programación. Objetivo Particular. Conocer y aplicar las principales funciones de programación de LabVIEW para el desarrollo de programas de aplicación.
Contenido. 3.1. 3.2. 3.3. 3.4.
Arreglos Clusters Cadenas de caracteres. Archivos
Unidad IV. Graficación de Datos. Objetivo Particular. Conocer y aplicar las principales gráficas de LabVIEW para la graficación de datos en el desarrollo de programas de aplicación.
Contenido. 4.1. R egistrador de Formas ormas de Onda 4.2. Graficador Graficador de F ormas ormas de Onda 4.3. Gráfica XY
Unidad V. Herramientas de Programación. Objetivo Particular. Conocer y aplicar las principales herramientas de programación de LabVIEW para el desarrollo de programas de aplicación. 5.1. Variables locales 5.2. Variables globales globales 5.3. Nodos de propiedad
Unidad VI. Arquitecturas de Programación. Objetivo Particular. Conocer y aplicar las principales arquitecturas de programación de LabVIEW para el desarrollo de programas de aplicación.
Contenido. 6.1. VI simple 6.2. VI general 6.3. Maquina de estados
Bibliografía. 1. LabVIEW 8 Student Edition Robert H. Bishop, Pearson Prentice Hall; (2007), ISBN: 0131999184 2. LabVIEW GUI: Essential Techniques David J . Ritter, McGraw-Hill Professional; (2001), ISBN: 0071364935 3. A Software Engineering Approach to LabVIEW J on Conway, Prentice Hall PTR; (2003), ISBN: 0130093653
Evaluación. Primer Parcial Segundo Parcial Tercer Parcial
30% 30% 40%
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
Unidad I. FUNDAMENTOS DE LABVIEW. 1.1 AMBIENTE DE PROGRAMACION GRAFICA (LABVIEW).
LabVIEW es el acrónimo para Laboratory Virtual Instrument Engineering Workbench y representa en la actualidad una poderosa y flexible plataforma de desarrollo de software. LabVIEW se basa en el paradigma de la programación por flujo de datos, pero también puede ser aplicado bajo los paradigmas de programación por maquinas de estados, programación por eventos y programación orientada a objetos. En general, también se le conoce como lenguaje G por ser un lenguaje esencialmente grafico. Los programas en LabVIEW son llamados instrumentos virtuales (VIs). Cada VI contiene tres partes principales: • • •
Panel frontal Diagrama de bloque Icono/Conector
Fig. 1.1. Panel frontal de un instrumento virtual
El panel frontal, como el mostrado en la figura 1.1, es utilizado para interaccionar con el usuario cuando el programa está corriendo. El usuario puede controlar el programa, cambiar entradas, y ver datos actualizados en tiempo real.
Facultad de Ingeniería UACH
5
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
Fig. 1.2. Diagrama a bloques de un instrumento virtual
Cada control o indicador del panel frontal tiene una terminal correspondiente en el diagrama de bloques, como se muestra en la figura 1.2. Cuando un VI se ejecuta, los valores de los controles fluyen a través del diagrama de bloques, en donde estos son usados en las funciones del diagrama, y los resultados son pasados a otras funciones o indicadores. El tercer elemento del VI es su icono conector, tal como se muestra en la figura 1.3, este se encuentra localizado en la esquina superior derecha del panel frontal y del diagrama a bloques, su función es representar al VI cuando se utiliza como subVI (sub-programa) dentro otro VI y proporcionar las terminales de conexión adecuadas, pero esto será a tratado a detalle más delante.
Fig. 1.3. Icono - Conector de un instrumento virtual
Facultad de Ingeniería UACH
6
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.2 Panel Frontal.
El panel frontal es la interfaz del usuario con el VI. El panel frontal se construye con controles e indicadores, que son las entradas y salidas que interactúan con las terminales del VI, respectivamente. Los controles son usados como entradas, por ejemplo, ajustando controles de deslizamiento para colocar un valor de alarma, encendiendo o apagando un interruptor, o deteniendo un programa. Los controles son interruptores, botones, perillas, cajas de texto y otros componentes de entradas. Los controles simulan dispositivos de entrada de equipos y suministra datos al diagrama de bloques del VI. Los indicadores son usados como salidas, por ejemplo, termómetros, luces, y otros indicadores indican valores del programa. Esto puede incluir datos, estados de programa y otra información.Los indicadores son las graficas, luces y otros dispositivos. Los indicadores simulan salidas de instrumentos y suministra datos que el diagrama de bloques adquiere o genera. Barra de herramientas del panel frontal
Icono
Control Booleano
Leyenda del gráfico
Gráfico de Forma de onda Leyenda de la escala
Leyenda de la gráfica
Fig. 1.4. Ejemplo de un panel frontal sencillo
La figura 1.4 muestra un ejemplo de panel frontal, en esta imagen, el interruptor de encendido es un control booleano. Un valor booleano contiene ambos un valor verdadero o falso. El valor es falso hasta que el interruptor se presione. Cuando el interruptor se presiona, el valor se convierte en verdadero. El indicador del historial de temperatura es una grafica de forma de onda. Esta muestra valores múltiples. En este caso, la grafica indica grados Fahrenheit vs. Tiempo. El panel frontal también contiene una barra de herramientas, y sus funciones serán discutidas más delante. Facultad de Ingeniería UACH
7
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.3 Diagrama de Bloque.
El diagrama de bloque contiene el código fuente grafico. Los objetos del panel frontal aparecen como terminales en el diagrama de bloque. Adicionalmente, el diagrama de bloque contiene funciones y estructuras incorporadas en las bibliotecas de LabVIEW VI. Los cables conectan cada uno de los nodos en el diagrama de bloques, incluyendo controles e indicadores de terminal, funciones y estructuras, estableciendo un flujo de datos que representa la lógica del programa.
Barra de herramientas del diagrama a bloques
Función de dividir
SubVI Terminal gráfica Cableado de datos
Estructura de ciclo While
Constante numérica
Función Retardo tiempo
Terminal de control booleano
Fig. 1.5. Ejemplo de un diagrama a bloques sencillo
La figura 1.5 muestra un ejemplo de un diagrama de bloque. En este diagrama de bloque, el subVI Temp llama a una subrutina, la cual obtiene una temperatura desde una tarjeta de adquisición de datos (DAQ). Esta temperatura es graficada junto con el valor promedio de la temperatura en la grafica de forma de onda Temperature History. El interruptor de encendido (Power ) es un control booleano en el panel frontal el cual va a detener la ejecución de la estructura de ciclo While. La estructura de ciclo While también contiene una función de tiempo para controlar que tan frecuentemente la estructura se repite. Además de las terminales de controles e indicadores y funciones propias de LabVIEW, el diagrama puede contener sub-instrumentos virtuales (subVIs) que en realidad son programas independientes que fueron encapsulados para ser utilizados como funciones dentro de un programa principal, los subVIs pueden ser de dos tipos esenciales: subVIs express, o subVIs estándar.
Facultad de Ingeniería UACH
8
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.3.1. SubVI express
A partir de LabVIEW 7.0 se introduce un nuevo tipo de sub-instrumento virtual llamado VIs Express. Estos son VIs interactivos que tienen como medio de configuración una ventana de dialogo que permite al usuario personalizar la funcionalidad del VI Express seleccionando los distintos parámetros y argumentos. LabVIEW entonces genera un subVI de funcionalidad específica basado en estos argumentos. La figura 1.6 muestra un ejemplo de un VI Express con su ventana de configuración abierta.
Fig. 1.6. Ejemplo de un subVI express
Cuando se coloca por primera vez un subVI express en el diagrama a bloques de un programa de LabVIEW, su ventana de configuración se abre automáticamente para permitir la configuración inicial del subVI; una vez finalizada la configuración inicial el subVi se recompila quedando con la funcionalidad seleccionada. Si fuera necesario realizar cambios en la configuración de un subVI express, es necesario hacer un doble clic sobre el subVI para abrir de nuevo la ventana de configuración. Su rápida reconfiguración hace de estos sub-instrumentos una herramienta muy efectiva para economizar tiempo de desarrollo del programa, es conveniente recordar que uno de los propósitos principales de LabVIEW es precisamente el ahorrar tiempo en la implementación de los programas. Sin embargo, esta ventaja en velocidad de desarrollo se contrapone con la flexibilidad ya no es posible tener acceso el código interno de estos subVis ni hacer cambios o modificaciones en funcionalidad fuera de las características configurables desde su ventana. Una vez colocados en el diagrama a bloques los subVIs express se pueden reconocer por el recuadro azul cielo que rodea el icono del SubVI. Para efectos de ahorro de espacio en el diagrama este recuadro puede ser removido.
Facultad de Ingeniería UACH
9
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.3.2. SubVI estándar
Por otro lado los sub-instrumentos estándar, que son un concepto clásico desde las primeras versiones de LabVIEW, son en realidad programas hechos en LabVIEW con su propio panel frontal y diagrama a bloques que son encapsulados dentro de un icono conector para ser usados adentro de otro VI. La figura 1.7 muestra un ejemplo de un VI estándar.
Fig. 1.7. Ejemplo de un subVI estándar
Estos sub-instrumentos no son tan rápidamente reconfigurables como los express, sin embargo haciendo doble clic sobre su icono se abre la ventana de su panel frontal y se tiene acceso a su diagrama a bloques, el cual de ser necesario puede ser modificado. Una vez colocados en el diagrama a bloques los subVIs estándar se pueden reconocer por el recuadro amarillo que rodea el icono del SubVI. Para efectos de ahorro de espacio en el diagrama este recuadro puede ser removido. En secciones posteriores los subVis estándar serán tratados a detalle.
1.1.3.3. Funciones
Las funciones son los bloques de construcción básicos de todos los VIs. Las funciones no tienen un panel frontal o un diagrama de bloque, fueron desarrollados en lenguaje C y constituyen las funciones primitivas de LabVIEW. La figura 1.8 muestra el ejemplo de una función aritmética de multiplicación.
Fig. 1.8. Ejemplo de una función
Facultad de Ingeniería UACH
10
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.4 Paleta de Controles.
La paleta de controles (Controls) se utiliza para colocar los controles e indicadores en el panel frontal. La paleta de controles está disponible solamente en el panel frontal. Para acceder a la paleta de controles, seleccione View» Controls Palette en la barra de menú principal, esto activa de manera fija la paleta de controles o haga clic derecho en el espacio de trabajo en el panel frontal esto la activa de manera temporal. Para desaparecer la paleta de controles fija presione el botón de cerrar, característico de Windows, en la parte superior derecha de la paleta, para cerrar la paleta temporal haga clic izquierdo sobre el panel o clic derecho sobre la misma paleta de controles. Para fijar la paleta temporal haga clic sobre el sujetador de la esquina superior izquierda.
a)
b)
Fig. 1.9. Paleta de controles a) fija, b) temporal.
En esta paleta los controles e indicadores están agrupados de acuerdo al tipo de variable o aplicación correspondiente: controles e indicadores numéricos, controles e indicadores booleanos, controles e indicadores de texto, indicadores de gráficos, entradas / salidas, etc. También es tan clasificados en diferentes categorías como modernos, de sistema, clásicos, express, .NET & ActiveX o selección del usuario. Las distintas categorías contienen un sin número de grupos de controles e indicadores diferentes en funcionalidad o en presentación. Aunque por default cuando se llama a la paleta de funciones aparece seleccionada la categoría de controles e indicadores modernos, es posible cambiar esta selección y utilizar los elementos de cualquier otra categoría, e incluso es posible activarlas todas para mostrar simultáneamente todos los grupos y tipos de controles disponibles tal como se muestra en la figura 1.10. Para lograr esto se parte de la paleta fija y se van seleccionado una a una las distintas categorías. Si esto mismo se intenta con la paleta temporal, solo se podrá tener acceso a una categoría a la vez. Facultad de Ingeniería UACH
11
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
Fig. 1.10. Despliegue simultáneo de todas las categorías de controles e indicadores en la paleta de controles.
Para colocar un control o indicador en el panel primero se selecciona la categoría, luego el grupo y finalmente el elemento deseado, el cual se arrastra y se coloca en la posición que tendrá sobre el panel. La figura 1.11 muestra el ejemplo de colocación de un control numérico tipo dial sobre el panel frontal
1) clic
4) clic
3) Arrastre
2) clic
Fig. 1.11. Colocación de un control sobre el panel frontal.
Facultad de Ingeniería UACH
12
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.5 Paleta de Funciones.
La paleta de funciones (Functions), se utiliza para construir un diagrama de bloque. La paleta de funciones está disponible solamente en el diagrama de bloque. Seleccione View» Functions Palette en la barra de menú esto activa de manera fija la paleta de funciones o haga clic derecho en el espacio de trabajo del diagrama esto la activa de manera temporal. Para desaparecer la paleta de funciones fija presione el botón de cerrar, característico de Windows, en la parte superior derecha de la paleta, para cerrar la paleta temporal haga clic izquierdo sobre el diagrama o clic derecho sobre la misma paleta de controles. Para fijar la paleta temporal haga clic sobre el sujetador de la esquina superior izquierda.
a)
b)
Fig. 1.12. Paleta de funciones a) fija, b) temporal.
Al igual que en la paleta de controles, en la paleta de funciones, estas están ordenadas en grupos dentro de diferentes categorías: programación, instrumentos de entrada/salida, visión y movimiento, matemáticas, procesamiento de señales, comunicación de datos, conectividad y express. Esta paleta opera de manera muy similar a la paleta de controles del panel, tanto en su forma fija como temporal. La figura 1.13 muestra el ejemplo de la colocación de una función numérica de generación de un número aleatorio en el diagrama a bloques.
Facultad de Ingeniería UACH
13
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
3) Arrastre
4) clic
1) clic
2) clic
Fig. 1.13. Colocación de una función sobre el diagrama a bloques.
1.1.6. Paleta de Herramientas.
Por ser LabVIEW un lenguaje gráfico, la mayor parte del manejo del ambiente de programación se hace a través del ratón o dispositivo de señalización de la computadora, esto implica entonces la necesidad poder cambiar la funcionalidad del apuntador para ejecutar tareas muy diversas. La paleta de herramientas es una paleta flotante que permite cambiar la funcionalidad del cursor. Esta paleta contiene herramientas de edición y depuración Generalmente se encuentra activada por default, sin embargo, de no ser así se le puede activar manualmente seleccionando Window»Show Tools Palette en la barra de menú principal. Para desaparecer la paleta de funciones presione el botón de cerrar, característico de Windows, en la parte superior derecha de la paleta. Esta paleta permite seleccionar entre 11 herramientas diferentes. La figura 1.14 muestra la apariencia que tiene la paleta de herramientas.
Fig. 1.14. Paleta estándar de herramientas
Facultad de Ingeniería UACH
14
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.6.1. Herramienta automática
Si la herramienta de selección automática está habilitada y usted mueve el cursor sobre un objeto en el panel frontal o en el diagrama de bloque, LabVIEW automáticamente selecciona la herramienta correspondiente de la paleta de controles. Cambie a la herramienta de selección automática tecleando el botón de Selección de Herramienta Automática en la paleta de Herramientas. 1.1.6.2. Herramienta de operación
Utilice la herramienta de operación para cambiar valores o para seleccionar texto de un control. 1.1.6.3. Herramienta de posición / selección
Utilice la herramienta de posicionamiento para seleccionar, mover o redimensionar objetos. La herramienta de posicionamiento cambia las formas cuando se mueve sobre una esquina de un objeto reajustable permitiendo cambiar su tamaño. 1.1.6.4. Herramienta de Etiquetado
Utilice la herramienta de etiquetado para editar textos y crear etiquetas libres. La herramienta de etiquetado se convierte en cursor cuando usted crea etiquetas libres. 1.1.6.5. Herramienta de cableado
Utilice la herramienta de cableado para cablear objetos juntos en el diagrama de bloque y establecer el flujo de los datos en el programa. 1.1.6.6. Herramienta de menú
Utilice la herramienta de menú emergente para acceder a los menús emergentes de los objetos colocados en el panel frontal o en el diagrama de bloque, para modificar sus configuraciones. 1.1.6.7. Herramienta de arrastre
Utilice la herramienta de arrastre para mover todo el panel frontal o diagrama de bloque. 1.1.6.8. Herramienta de punto de quiebre
Utilice la herramienta de punto de quiebre para colocar puntos de quiebre a lo largo del diagrama de bloque y detener momentáneamente la ejecución del programa con el fin de depurar el programa. Facultad de Ingeniería UACH
15
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.6.9. Herramienta de punto de prueba
Utilice la herramienta de punto de prueba para colocar puntos de prueba a lo largo del diagrama de bloque y observar los valores correspondientes durante la ejecución del programa con el fin de depurar el programa. 1.1.6.10. Herramienta de muestra de color
Utilice la herramienta de muestra de color para obtener una muestra (copia) del color de un objeto. 1.1.6.11. Herramienta de colorear
Utilice la herramienta de colorear para cambiar el color de un objeto. 1.1.7. Barra de Herramientas.
La barra de herramientas es una barra fija que contiene herramientas de ejecución, y cosméticas, se encuentra tanto en el panel frontal como en el diagrama de bloque, ambas presentan casi las mismas herramientas salvo una herramienta cosmética que solo aparece en el panel frontal y cuatro herramienta de depuración que solo aparecen en el diagrama de bloque. La figura 1.15 muestra las barras de herramientas del a) panel frontal y b) diagrama de bloque
a)
b) Fig. 1.15. Barra de herramientas del a) panel frontal, b) diagrama de bloque
1.1.7.1. Botón de ejecución
Pulse el botón de ejecución (Run) para ejecutar el VI. Mientras el VI se está ejecutando, el botón de ejecución aparecerá con una flecha negra si es que el VI es un VI principal, lo que significa que no ha sido llamado por otro VI y por lo tanto este no es un subVI. 1.1.7.2. Botón de ejecución continúa
Pulse el botón de ejecución continua (Continuous Run) para ejecutar el VI hasta que el botón de cancelación de ejecución o de pausa sea presionado. Usted también puede pulsar este botón nuevamente para deshabilitar la ejecución continua. 1.1.7.3. Botón de cancelación
Mientras el VI se está ejecutando, El botón de cancelación de ejecución ( Abort Execution) aparece. Presione este botón para detener el VI inmediatamente. Facultad de Ingeniería UACH
16
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
NOTA: Evite usar el botón de cancelación de ejecución (Abort Execution) para detener el VI. Ya sea deje que el VI complete su flujo de datos o diseñe un método para detener el VI programáticamente. Al hacer esto el VI se encuentra en un estado conocido. Por ejemplo, coloque un botón en el panel frontal que detenga el VI cuando sea presionado. 1.1.7.4. Botón de pausa
Pulse el botón de pausa (Pause) para detener momentáneamente la ejecución de un VI. Cuando usted presiona el botón de Pausa, LabVIEW señala la posición donde usted detuvo la ejecución en el diagrama de bloque. Pulse el botón de Pausa nuevamente para que el VI continúe ejecutándose. 1.1.7.5. Menú de configuración de textos
Seleccione el menú Configuración de Textos (Text Settings) para cambiar el tipo de fuente (letra) del VI, incluyendo el tamaño, estilo y color. 1.1.7.6. Menú de alineación de objetos
Seleccione el menú Alineación de Objetos (Align Objects) para alinear objetos con respecto a los ejes, incluyendo eje vertical, superior, izquierdo, etc. 1.1.7.7. Menú de distribución de objetos
Seleccione el menú Distribución de Objetos (Distribute Objects) para espaciar objetos uniformemente, incluyendo espacios vacíos, compresiones, etc. 1.1.7.8. Menú de redimensionamiento
Seleccione el Redimensionamiento de Objetos (Resize Objects) para cambiar el ancho y alto de objetos del panel frontal. Este menú solo está disponible en el panel frontal 1.1.7.9. Menú de reordenamiento
Seleccione el menú Reordenamiento (Reorder) cuando tenga objetos superpuestos unos con otros y usted quiera definir cual está enfrente de quien y cual atrás. Seleccione uno de los objetos con la herramienta de posicionamiento y seleccione entre Move Forward (mover hacia adelante), Move Backward (mover hacia atrás), Move to Front (mover al frente) y Move to Back (mover hacia atrás). NOTA: Los siguientes botones solo están disponibles en el diagrama de bloque. 1.1.7.10. Botón de ejecución resaltada
Pulse en el botón de ejecución resaltada ( Highlight Execution) para ver el flujo de información en el diagrama de bloques. Pulse el botón nuevamente para detener este tipo de ejecución resaltada. Facultad de Ingeniería UACH
17
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.1.7.11. Botón de entrada al ciclo
Pulse el botón de entrada al ciclo (Step Into) para entrar un paso adentro de un ciclo, un SubVI, etc. Entrando un paso a la vez adentro de un VI le permite introducirse en la VI nodo a nodo. Cada nodo se resalta para señalar cuando está listo para ejecutarse. Al entrar un paso adentro de un nodo usted está listo para caminar paso a paso adentro del nodo. 1.1.7.12. Botón de saltar ciclo
Pulse el botón de saltar ciclo (Step Over ) para posicionarse encima de un ciclo, un SubVI, etc. Al posicionarse encima del nodo, usted ejecuta el nodo sin entrar paso a paso adentro del nodo. 1.1.7.13. Botón de salida del ciclo
Pulse el botón de Salida del ciclo (Step Over ) para salirse de un ciclo, SubVI, etc. Al posicionarse fuera del nodo, usted completa la ejecución de un nodo y puede moverse al siguiente nodo.
Ejercicio 1.1 Abrir y Ejecutar un VI
1. Seleccione Start » Programs » National Instruments » LabVIEW 7.0 » LabVIEW para lanzar LabVIEW. Aparece la ventana de dialogo de LabVIEW.
Facultad de Ingeniería UACH
18
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
2. Seleccione Find Examples del recurso Examples. La ventana de dialogo que aparece da la lista y enlaces a todos los VIs de ejemplo de LabVIEW.
3. Usted puede buscar ejemplo por categorías, o puede utilizar palabras claves en su búsqueda. Haga clic en la viñeta de búsqueda (Search) para abrir el buscador de palabras claves. 4. En la caja de “Enter Keyword(s)” escriba “Signal”. 5. Una lista de temas relacionados aparecerá en la ventana de ejemplos (examples). Haga doble-clic en signals, esto generara una lista de ejemplos en el lado derecho.
Facultad de Ingeniería UACH
19
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
6. Haga clic en cualquier programa para ver una descripción detallada del ejemplo. Haga doble clic sobre Signal Generation and Processing.vi para lanzar el ejemplo. Esto abrirá el panel frontal del VI “Signal Generation and Processing.vi”
7. Examine el VI y ejecútelo. Cambie las frecuencias y tipos de señales de entradas y note como el despliegue de las graficas cambia. Cambie la ventana de procesamiento de señales (Signal Processing Window) y opciones de filtrado (Filter options). Después de que haya examinado el VI y las diferentes opciones que puede cambiar, pare el VI presionando el botón de paro (Stop button).
1.2 PARADIGMA DE PROGRAMACION POR FLUJO DE DATOS.
Como se ha mencionado con anterioridad, LabVIEW se basa en un nuevo paradigma: la programación por flujo de datos; este concepto es tan antiguo y tradicional en la enseñanza de los principios básicos de la programación que resulta innovador al ser aplicado directamente como un lenguaje. Generalmente, en cualquier curso inicial de programación, lo primero que se enseña es la elaboración de un diagrama de flujo para representar la lógica de nuestro programa, de ahí se sigue una secuencia de pasos hasta implementación del programa en algún lenguaje de programación. LabVIEW es un compilador gráfico en el cual se construye un diagrama con el flujo de los datos del programa que se quiere desarrollar y listo, este diagrama que representa nuestro lenguaje de programación se compila para ser ejecutado. A continuación se describen los aspectos fundamentales sobre este paradigma de programación. Facultad de Ingeniería UACH
20
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.2.1 Creación de un Instrumento Virtual
Cuando se coloca un objeto en el panel frontal, una terminal es creada en el diagrama de bloques. Estas terminales le dan acceso a los objetos del panel frontal del código creado mediante el diagrama de bloque. Cada terminal contiene información útil referente al objeto al cual corresponde en el panel frontal. Por ejemplo, el color y los símbolos proporcionan el tipo de dato: las variables numéricas de punto flotante son representados con terminales anaranjadas y las letras DBL, SGL o EXT (doble precisión, precisión sencilla o precisión extendida); las variables numéricas enteras tienen terminales azules y las letras I8, I16, I32, U8, U16, U32 (enteros de 8,16 y 32 bits o enteros sin signo del 8,16 y 32 bits respectivamente); las variables booleanas tienen terminales verdes y son representadas por las letras TF (true/false); las variables string (cadenas de caracteres) tienen terminales de color rosa y las letras ABC. En general, las terminales anaranjadas deben unirse (cablearse) con las terminales anaranjadas, verdes con verdes, y así sucesivamente. Pero, esta no es una regla que no se puede romper; por ejemplo LabVIEW permitirá al usuario conectar una terminal azul (valor entero) a una terminal anaranjada (valor fraccional) o viceversa. Pero en la mayoría de casos, busque mejor una igualdad en colores. Los controles tienen una flecha en el lado derecho y tienen un borde grueso. Los indicadores tienen una flecha en el lado izquierdo y un borde fino. Reglas lógicas pueden ser aplicadas al conectar en LabVIEW: Cada cable debe tener una (pero solo una) fuente (o control), y cada cable puede tener varios destinos (o indicadores). El programa mostrado en la figura 1.16 toma datos de los controles A y B y pasa valores a una función de adición y a una función de resta. Los resultados son mostrados en los indicadores A+B y A-B respectivamente.
a)
b)
Fig. 1.16. Ejemplo de un instrumento virtual, a) panel frontal, b) diagrama de bloque
1.2.2 Cableado de funciones en el diagrama de bloque
Además de los terminales del panel frontal, el diagrama de bloques contiene funciones. Cada función puede tener múltiples terminales de entradas y salidas. La conexión de estas terminales es una parte muy importante de la programación en LabVIEW.
Facultad de Ingeniería UACH
21
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Fundamentos undamentos de LabVIE LabVI EW
Una vez que se tenga cierta experiencia programado en LabVIEW, la conexión de cables se le hará más fácil. Primero puede que necesite ayuda. En seguida se le muestra algunas recomendaciones para comenzar: La herramienta para conectar o de cableado es utilizada para conectarse a los nodos de las funciones. Cuando “apunte” con la herramienta de cableado, apunte con el extremo del cable que cuelga del carrete. Aquí es donde el cable será colocado. La figura 1.17 muestra el punto sensible de la herramienta de cableado.
Fig. 1.17. Punto sensible de la herramienta de cableado
Mientras se mueve la herramienta de cableado sobre las funciones, observe la viñeta amarilla que aparece. Esto le dirá el nombre de la terminal al que se está conectando. Mientras se mueva la herramienta de cableado encima de una terminal, esta va a mostrar información. Esto le ayudara a identificar donde se va a unir el cable. La figura 1.18 muestra un ejemplo de este este tipo de identificación de terminales. terminales.
Fig. 1.18. Identificación de terminales
Para más ayuda con los terminales, haga clic derecho en la función y seleccione para revelar revelar las Visible Items >>Terminals. Un dibujo de la función será colocada atrás para terminales de la conexión. Note los colores - estos corresponden a los tipos de datos utilizados por los terminales terminales del panel frontal. frontal. La La figura 1.19 muestra un ejemplo ejemplo al respecto.
Fig. 1.19. Opción para mostrar terminales
Facultad de Ingeniería UACH
22
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Fundamentos undamentos de LabVIE LabVI EW
LabVIEW cablea automáticamente los objetos a medida que usted los coloca en el diagrama de bloque. También puede cablear automáticamente objetos que ya están colocados en el diagrama de bloque. LabVIEW conecta la terminal que mejor combina (match) y deja las terminales que no combinan (match) sin conectar. A medida que usted mueve un objeto seleccionado cerca de otros objetos en el diagrama de bloque, LabVIEW dibuja cables temporales para mostrarle conexiones validas. Cuando usted suelta el botón del ratón para poner el objeto en el diagrama de bloque, LabVIEW conecta automáticamente los cables.
Fig. 1.20. Cableado de objetos en el diagrama de bloque
Cambie al cableado automático presionando el espaciador (spacebar ) mientras mueve un objeto utilizando la herramienta de posicionamiento (Positioning tool). Puede ajustarlas opciones del cableado automático seleccionando Tools >> Options y seleccionando Block Diagram de el menú superior principal. No se preocupe por el color de los cables. LabVIEW seleccionará automáticamente el cable correcto y adecuado para cada situación.
Fig. 1.21. Opción de limpieza de cables
Si el cableado no se mira muy bien, haga clic derecho en el cable que se desea arreglar y escoja la opción de Clean Up Wire (Limpieza del Cable) para que automáticamente el cable haga su ruta de nuevo. Facultad de Ingeniería UACH
23
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Fundamentos undamentos de LabVIE LabVI EW
El cableado es muy flexible en LabVIEW. Experimente con combinaciones de clics y/o teclas cuando este cableando. Aquí hay algunas de las características más a menudo utilizadas.
Fig. 1.22. Selección de cables
El hacer un simple, doble, y triple clic en el cable selecciona el cable para moverlo o para borrarlo, tal como se muestra en la figura 1.22 El hacer un clic mientras se está cableando hace un doblez en el cable. Haciendo clic derecho o presionando el botón Esc mientras se está cableando cancela la operación de cableado. 1.2.3 Programación por Flujo de Datos
LabVIEW sigue un modelo de flujo de datos para correr los VIs. Un nodo del diagrama de bloque se ejecuta cuando todas sus entradas están disponibles. Cuando un nodo completa la ejecución, suministra datos a sus terminales de salida y pasa los datos de salida al siguiente nodo en la trayect trayectoria oria del flujo de datos. datos. Visual V isual Basic Basic,, C+ C++, J AVA AVA y otros lenguajes de programación basados en texto, siguen un modelo de control de flujo de la ejecución de un programa. En control de flujo, el orden secuencial de los elementos del programa determina el orden de ejecución ejecución de un programa. programa. Considere el diagrama de bloque que se muestra en la figura 1.23. Este suma dos números y luego resta 50 del resultado de la suma. En este caso, el diagrama de bloque se ejecuta de izquierda a derecha, no porque los objetos están puestos en ese orden, sino porque una de las entradas de la función de resta no es válida hasta que la función de suma o adición haya terminado su ejecución y pasado los datos a la función de resta. Recuerde que un nodo se ejecuta solamente cuando tiene datos disponibles en todas sus terminales de entrada, y suministra datos a sus terminales de salidas solamente cuando termina su ejecución.
Fig. 1.23. Ejemplo de código dependiente
Facultad de Ingeniería UACH
24
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
En el código de la figura 1.24, considere cual segmento del código se ejecutara primero la suma, el número aleatorio, o la función de división. No se puede saber porque las entradas a las funciones de suma y división están disponibles al mismo tiempo, y la función de número aleatorio no tiene entradas. En una situación en donde un segmento del código se debe ejecutar antes que otro, y no existe dependencia de datos entre las funciones, utilice una estructura de Secuencia para forzar el orden de la ejecución.
Fig. 1.24. Ejemplo de código independiente
Ejercicio 1.2 Construir un Instrumento virtual para convertir de ºC a ºF
1. Construya un VI que convierta de °C a °F. 2. Cuando lo ejecute, el VI deberá de tomar un valor de entrada (°C), multiplicarlo por 1.8, sumarle 32, y desplegar el resultado (°F). 3. El panel frontal deberá mostrar el valor de entrada y el resultado. 4. Guarde el VI como “Conversión C a F.vi”
Facultad de Ingeniería UACH
25
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.3. OPCIONES DE AYUDA
Utilice la ventana de Context Help (Ayuda Contextual) y LabVIEW Help (Ayuda de LabViEW) para ayudarle a construir o editar los VIs. Refiérase a la ayuda de LabVIEW y a los manuales para más información. 1.3.1. Ventana de Ayuda Contextual (Context Help Window )
Para desplegar la ventana de Context Help, seleccione Help>>Show Context Help o presione las teclas . Cuando mueva el cursor sobre el panel frontal y los objetos del diagrama de bloque, la ventana de Context Help despliega el icono de los subVIs, funciones, constantes, controles e indicadores, con cables adjuntos a cada una de sus terminales. Cuando mueva el cursor sobre la caja de opciones de dialogo, la ventana de Context Help despliega descripciones de esas opciones. En la ventana, las conexiones requeridas están en negrilla, las conexiones recomendadas en texto normal, y las conexiones opcionales están poco claras o no aparecen. La figura 1.25 presenta un ejemplo de la ventana de Context Help.
Ayuda en línea Congelar Ayuda Ayuda del Diagrama Simple/Complejo
Referencias en Línea Fig. 1.25. Ejemplo de ventana de ayuda contextual
Haga un clic en el botón de Simple/Detailed Context Help localizado en la esquina inferior izquierda de la ventana de Context Help para distinguir entre la ayuda contextual simple y detallada. El modo simple enfatiza las conexiones importantes. Las terminales opcionales son mostradas por segmentos de cables, informándole de la existencia de otras conexiones. Haga clic en el botón de Lock Context Help para congelar el contenido actual de la ventana de la Context Help. Cuando los contenidos están congelados, el mover el cursor sobre otros objetos no cambia los contenidos de la ventana. Para descongelar la ventana, haga clic nuevamente en el botón. Usted también puede tener acceso a esta opción desde el menú de ayuda (Help). Haga clic en el botón de More Help (mas ayuda) para desplegar el tema correspondiente en LabVIEW Help, el cual describe el objeto en forma detallada.
Facultad de Ingeniería UACH
26
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.3.2. LabVIEW Help (Ayuda de LabVIEW)
Puede acceder a LabVIEW Help ya sea haciendo clic en el botón de More Help en la ventana de Context Help, seleccionando Help»VI, Function, & How-To Help, haciendo clic en la oración Click here for more help en la ventana de Context Help o presionando .
Fig. 1.26. Ejemplo de ventana de ayuda de LabVIEWl
La ayuda LabVIEW Help contiene descripciones detalladas de casi todos los menús, herramientas, VIs y funciones. También incluye instrucciones paso-a-paso para la utilización de muchas características de LabVIEW y enlaces al Tutorial de LabVIEW, versiones en PDF de todos los manuales y Notas de Aplicación de LabVIEW, además de recursos de soporte técnico en el sitio web de National Instruments (www.ni.com).
1.3.3. Tips y Atajos en LabVIEW
LabVIEW tiene muchas teclas de atajo que hacen el trabajo más fácil. Mientras que la Herramienta de Selección Automática (Automatic Selection Tool) es muy útil para escoger la herramienta que usted desearía utilizar en LabVIEW, a veces hay Facultad de Ingeniería UACH
27
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
casos cuando usted desea controles manuales. Utilice la tecla Tab para cambiar entre las cuatro herramientas más comunes Operate Value (valor de operacion), Position/Size/Select, (Posición/Tamaño/Selección), Edit Text (editar texto), Set Color on Front Panel (establecer color en panel frontal), Connect wire on Block Diagram (conectar cable en el diagrama de bloque). Una vez que se ha terminado con la selección de herramientas, puede presionar para activar la Herramienta de Selección Automática. En el dialogo de Tools >> Options… , hay muchas opciones configurables para el Panel Frontal, Diagrama de Bloque, Colores, Impresión y mucho mas. Similar a las opciones de LabVIEW, se pueden configurar propiedades especificas del VI al ir a File >> VI Properties… Ahí se puede documentar el VI, cambiar la apariencia de la ventana, y personalizarlos de varias maneras. 1.4. TÉCNICAS PARA DEPURACIÓN DE ERRORES.
Cuando el VI contiene errores de sintaxis y por lo tanto no es posible ejecutarlo, se despliega una flecha quebrada en el botón de correr en la paleta de herramientas. 1.4.1. Lista de errores
Para hacer una lista de los errores, haga clic en la flecha quebrada. Para localizar el objeto malo, haga clic en el mensaje del error.
Fig. 1.27. Lista de errores
Facultad de Ingeniería UACH
28
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.4.2. Resaltando la Ejecución:
Anima el diagrama y traza el flujo de datos, permitiéndole ver los valores intermedios. Haga clic en el bombillo incandescente (light bulb) en la barra de herramientas
Fig. 1.28. Ejecución resaltada
1.4.3. Ventanas de prueba (Probe):
Utilizado para ver los valores en cualquier cable del diagrama de bloque. Haga clic en los cables con la herramienta Probe o haga clic derecho en el cable para seleccionar Probe.
Fig. 1.29. Puntos de prueba
Facultad de Ingeniería UACH
29
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.4.4. Punto de Paro (Breakpoint):
Coloca pausas en diferentes lugares del diagrama. Haga clic en los cables o en los objetos con la herramienta de Punto de Paro para colocar los puntos de paro. El punto de quiebre quedará resaltado con un marco color rojo.
Fig. 1.30. Punto de quiebre
2.5. DOCUMENTACIÓN DEL VI.
Al abrir VI’s properties (propiedades del VI) un desarrollador puede añadir documentación a su VI. La documentación colocada en el Description field (espacio para la descripción) de la ventana Documentation (documentación) del VI es mostrada en Context Help (ayuda en contexto), y se imprime con el VI. Si un usuario tiene una aplicación que está siendo desarrollada continuamente, él o ella pueden seguir los cambios en el desarrollo con Revision History (historial de revisiones), también encontrado en VI Properties. Cualquier control o indicador en el Panel Frontal puede ser documentado al hacer clic derecho con el ratón y elegir Description and Tip… (Descripción y sugerencia…) La información de descripción aparece en el menú Context Help (ayuda en contexto) cuando un usuario pasa el cursor sobre el objeto, y la información de sugerencia es mostrada en una pequeña ventana pegada al cursor cuando el usuario pausa el movimiento del cursor sobre el objeto. Al igual que los comentarios en un lenguaje basado en texto, el desarrollador podría querer explicar una porción de su código, o proveer direcciones en el panel de frontal. Cualquiera de estas necesidades puede ser cumplida al usar la herramienta de etiquetado (labeling tool) para crear una caja de texto libre con tantas instrucciones o explicaciones como sean necesarias.
Facultad de Ingeniería UACH
30
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.6. SUB-INSTRUMENTOS VIRTUALES (SubVI).
Después de haber construido un VI, y creado su propio icono y panel de conexión, este puede ser utilizado en otro VI. Un VI dentro de otro VI se llama un subVI. Un subVI corresponde a una subrutina en lenguajes de programación basados en texto. La utilización de subVIs le ayuda a manejar cambios y a eliminar errores del diagrama de bloque rápidamente. 1.6.1 Conceptos Básicos
Los sub-instrumentos virtuales (subVI), son en realidad VIs que se utilizan dentro de otros VIs como funciones o subrutinas, por lo tanto tienen sus propios panel frontal y diagrama de bloque, los cuales se pueden acceder haciendo doble click sobre el icono del subVI.
Fig. 1.31. Sub-instrumento virtual
Así como en las terminales de control o de indicador en el diagrama de bloque pueden ser vistos como un icono o como una simple terminal, los subVIs pueden ser vistos como un icono, un nodo expandible o un nodo expandido. Las diferentes vistas dependen en la preferencia del usuario y no cambia la funcionalidad del subVI. En sus modos expandible y expendido el campo amarillo designa un VI estándar para diferenciarlo de los VI express que presentan un campo azul. Facultad de Ingeniería UACH
31
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Icono
Fundamentos de LabVIEW
NodoExpandible
Nodo Expandido
Fig. 1.32. Presentaciones de un sub-VI
Cada VI muestra un icono, mostrado arriba, en la esquina superior derecha de las ventanas del panel frontal y del diagrama de bloque. Un icono es una representación grafica de un VI. Puede contener texto, imágenes, o una combinación de ambos. Si usted utiliza un VI como subVI, el icono identifica el subVI en el diagrama de bloque del VI. El conector muestra terminales disponibles para la transferencia de datos hacia y desde el subVI. Hay varios patrones de conectores para elegir. Haga un clic-derecho sobre el conector y seleccione el patrón del menú de patrones. A partir de ahí usted puede asignar controles e indicadores en el panel frontal al conector terminal, como veremos más adelante.
Icono
Conector Fig. 1.33. Icono conector
1.6.2 Creación de SubVIs
Como se mencionó con anterioridad un subVI es en realidad un VI empaquetado o encapsulado que se puede utilizar dentro de otro VI. Para convertir un VI en subVI se siguen tres sencillos pasos: 1) diseñar un icono 2) crear el conector 3) asignar terminales. Facultad de Ingeniería UACH
32
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.6.2.1. Diseño del Icono.
Para crear iconos personalizados para reemplazar los iconos predeterminados se hace clic-derecho en la esquina superior derecha del panel frontal o del diagrama de bloques y se selecciona Edit Icon del menú de atajo o bien haciendo un doble clic en el icono en la esquina superior derecha del panel frontal. También se puede corregir iconos seleccionando File >> VI Properties, seleccionando General del Menu Category, y haciendo clic en el botón de editar (Edit Icon). Utilice las herramientas del lado izquierdo de la casilla de dialogo del Icon Editor para crear el diseño del icono en el área de edición. El tamaño normal de la imagen del icono aparece en la casilla apropiada en la parte derecha del área de edición.
Fig. 1.34. Editor de Iconos
También se puede arrastrar un gráfico desde cualquier archivo y colocarlo en la esquina superior derecha del panel frontal o del diagrama de bloque. LabVIEW convierte el gráfico a un icono de 32 ×32 píxeles. 1.6.2.2. Creación del Conector
Para utilizar un VI como un subVI, usted necesita crear un conector. El conector es una serie de terminales que corresponden a los controles y a los indicadores de ese VI, similar a la lista de parámetros de una función basada en un lenguaje de programación de texto. El conector define las entradas y las salidas que usted puede cablear al VI para que pueda utilizarlo como subVI. Defina las conexiones asignando un control del panel frontal o un indicador a cada una de las terminales del conector. Para definir un conector, de un clic-derecho sobre el icono en la esquina superior derecha de la ventana del panel frontal y seleccione Show Connector del menú. El conector substituye el icono. Cada rectángulo en el conector representa una terminal. Utilice los rectángulos para asignar entradas y salidas. El número de terminales que LabVIEW muestra en el conector depende del número de controles e indicadores en el panel frontal. Para el panel frontal mostrado en la figura 1.35, el cual tiene cuatro controles y un indicador, LabVIEW mostrara cuatro terminales de entradas y una terminal de salida en el conector.
Facultad de Ingeniería UACH
33
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
Fig. 1.35. Creación de conector
1.6.2.3. Asignación de terminales
Después que seleccione un patrón para utilizar en su conector, debe definir las conexiones asignando un control del panel frontal o indicador a cada uno de los terminales del conector. Cuando usted hace vínculos entre controles e indicadores y el conector, coloque las entradas en la izquierda y las salidas a la derecha para evitar patrones complicados y poco claros en su VI. Para asignar una terminal a un control de panel frontal o indicador, presione una terminal del conector. Presione el control del panel frontal o indicador que usted desea asignar a la terminal. Haga clic en un área abierta del panel frontal. La terminal cambia al color del tipo de datos del control para indicar que usted conectó la terminal. Usted también puede seleccionar el control o el indicador primeramente y después seleccionar la terminal.
Fig. 1.36. Asignación de terminales
Asegurase que salvó el VI después de haber hecho las asignaciones de las terminales.
Facultad de Ingeniería UACH
34
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Fundamentos de LabVIEW
1.6.3 Librerías de SubVIs
Hay varias maneras de organizar sus subVIs. La manera más común es organizarlos por aplicación. En este caso, son salvados en el mismo directorio o dentro de un archivo de librería de VI todos los VI’s para una aplicación en particular. Salvarlos en un archivo de librería permite que usted transporte una aplicación entera dentro de un solo archivo. Salvar dentro de una librería es simple. Después de presionar Save As… (guardar como), presione New VI Library (nueva librería de VI). Esto permitirá que usted nombre la librería, y entonces guardar su VI en él. Para agregar VI subsecuentes, simplemente haga un doble-clic al archivo .llb de la ventana estándar de guardar, y dar un nombre al VI. 1.6.4 Uso de los subVIs
Después de construir un VI y crear su icono y conector, usted puede utilizarlo como un subVI. Para colocar un subVI en el diagrama de bloque, seleccione Functions>> Select VI. Navegue y haga un doble-clic en el VI que usted desea utilizar como subVI y colóquelo en el diagrama de bloques. También puede colocar un VI abierto en el diagrama de bloque de otro VI abierto usando la herramienta de colocación (Positioning Tool) para hacer clic en el icono en la esquina superior derecha del panel frontal o diagrama de bloque del VI que usted desea utilizar como subVI y arrastrar el icono al diagrama de bloque del otro VI.
Seleccionar
Fig. 1.37. Acceso a los subVIs en la paleta de funciones
Facultad de Ingeniería UACH
35
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Fundamentos undamentos de LabVIE LabVI EW
Ejercicio 1.3 Convierta en SubVI el programa Conversión Conversión C a F.vi
1. Abra el programa Conversión C a F.vi. 2. Siguiendo el procedimiento antes descrito edite un icono apropiado 3. Asigne terminales en el conector. 4. Guarde de nuevo el VI como “Conversión C a F.vi”, pero hágalo dentro de una librería de iinstrumentos virtuales (LLB), asigne a esta librería el nombre Ejercicios + su número de matrícula.
Facultad de Ingeniería UACH
36
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Estructuras structuras de Programación rogramación
Unidad II. ESTRUCTURAS DE PROGRAMACIÓN. 2. ESTRUCTURAS DE PROGRAMACION. PROGRAMACION.
LabVIEW, como cualquier otro lenguaje de programación, contiene estructuras de programación como ciclos While, ciclos For , estructuras Case, y estructuras de Secuencias entre otras. El uso correcto de todas estas estructuras de programación permite desarrollar un mejor control en la programación del flujo de los datos. Para tener acceso a todas las estructuras de programación se debe seleccionar en la paleta de funciones la sub-paleta Programming y luego seleccionar la sub-paleta Structures como se muestra en la Figura 2.1.
click
Fig. 2.1. Acceso a las estructuras en la paleta de funciones
2.1 Ciclo While.
El ciclo While es similar al ciclo Do o al ciclo Repeat-Until en lenguajes de programación basados en texto, un ciclo While, como el mostrado en la figura 3.2, ejecuta el código contenido dentro de este hasta que una cierta condición sea cumplida, es decir, el ciclo While ejecuta el código de manera manera repetida repetida hasta que la term terminal del control del condicional, recibe un valor booleano específico. El comportam comportamiento iento y la apariencia de la term terminal de control condicional de iteraciones puede ser Continue if True (continúe si es verdadero), que es el valor por default, o Stop if True (deténgase si es verdadero). Cuando el control condicional de iteraciones es Continue if True, el ciclo While ejecuta repetidam repetidamente ente su sub-diagram s ub-diagrama a hasta hasta que la term terminal recibe recibe un valor falso. Facultad de Ingeniería UACH
37
Dr. Gerardo Trujillo Schiaffino
TSIB: TS IB: P rogramación rogramación por F lujo de Datos
Estructuras structuras de Programación rogramación
Cuando el control condicional de iteraciones es Stop if True, el ciclo While ejecuta repetidamente su sub-diagrama hasta que la terminal recibe un valor verdadero. La terminal del contador de iteraciones i, mostrada en la esquina inferior izquierda del ciclo, contiene el número de iteraciones completas que se han realizado. El contador de iteraciones siem s iempre pre empieza en 0 durante durante la primera primera iteración.
Túnel Túnel
Control del Condicional de Iteraciones
Contador de Iteracion I teraciones es Fig. 2.2. Estructura de ciclo While.
Cuando un valor entra o sale de la estructura de ciclo, se genera automáticamente en el recuadro de la estructura una terminal llamada túnel, cuando se trata de un túnel de entrada esta terminal almacena el valor externo para que esté disponible en cada iteración del ciclo, como este almacenamiento se hace antes de entrar al ciclo, una vez adentro el programa no puede leer el valor externo. NOTA IMPORTANTE: Nunca conecte el control del condicional del ciclo de manera externa pues el programa se quedaría ciclado
Cuando se trabaja con ciclos While siempre es conveniente incluir una función de retardo de al menos 1 milisegundo para liberar tiempo de uso del CPU de la computadora, de no hacerlo la ejecución del ciclo “acapara” el procesador haciendo lenta la respuesta del mismo para otras aplicaciones. Para colocar ciclos While en el diagrama se selecciona While Loop de la sub-paleta Structures en el diagrama de bloque como se muestra en la figura 2.3.
click
Fig. 2.3. Acceso a la estructura de ciclo While en la sub-paleta de estructuras.
Facultad de Ingeniería UACH
38
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Una vez que se ha seleccionado esta estructura el cursor del ratón se convierte en un puntero especial que se utiliza para encerrar la sección del código que se desea repetir. Dando un primer click al botón del ratón se define la esquina superior-izquierda de lo que será el área del ciclo, dando un segundo click al botón del ratón se define lo que será la esquina inferior izquierda, de esta manera se coloca la frontera del ciclo While alrededor del código seleccionado. También es posible agregar nodos adicionales arrastrándolos dentro del ciclo While si es necesario.
Ejercicio 2.1 Uso del Ciclo While
1. Utilizando una estructura de ciclo While crear un programa que genere un número aleatorio cada segundo hasta que el usuario lo detenga. 2. Conecte la terminal del control del condicional del ciclo a un botón de paro en el panel frontal 3. Coloque la función Express VI Time Delay (demora de tiempo) dentro de su ciclo While. 4. Programe un retardo de 1 segundo haciendo doble clck en la función Time Delay. 5. Ejecute su programa 6. Guarde el VI como Ciclo While.vi
Facultad de Ingeniería UACH
39
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.2 Ciclo For
Un ciclo For , como el mostrado en la figura 3.4, ejecuta el código contenido dentro de él una cierta cantidad de veces determinada por el valor numérico conectado en la terminal del control de iteraciones N. La terminal del contador de iteraciones i, mostrada en la esquina inferior izquierda, contiene el número de iteraciones completas que se han realizado. Al igual que en el ciclo While el contador de iteraciones siempre empieza en 0 durante la primera iteración. Como el ciclo ejecuta la cantidad de iteraciones conectadas a la terminal N y el contador i siempre empieza con un valor de 0, entonces el valor final del contador de iteraciones siempre será igual a N-1. Considere para los ciclos For el mismo comportamiento de generación de túneles para la conexión de valores externos que el definido para los ciclos While.
Control de Iteraciones
Contador de Iteraciones
Fig. 2.4 Estructura de ciclo For.
Coloque ciclos For en su diagrama seleccionando For Loop de la sub-paleta Structures en el diagrama de bloque como se muestra en la figura 2.5.
click
Fig. 2.5. Acceso a la estructura de ciclo For en la sub-paleta de estructuras.
Facultad de Ingeniería UACH
40
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Una vez que se ha seleccionado esta estructura el cursor del ratón se convierte en un puntero especial que se utiliza para encerrar la sección del código que se incluir dentro del ciclo. Dando un primer click al botón del ratón se define la esquina superior-izquierda de lo que será el área del ciclo, dando un segundo click al botón del ratón se define lo que será la esquina inferior izquierda. También es posible agregar nodos adicionales arrastrándolos dentro del ciclo si es necesario.
Ejercicio 2.2 Uso del Ciclo For
1. Utilizando una estructura de ciclo For crear un programa que genere 10 números aleatorios a una velocidad definida por el usuario. 2. Agregue un control de deslizamiento (slider control) al panel de control. 3. Ajuste la escala de este control de deslizamiento de 0 a 5. 4. Conecte este control a la entrada de la función Express VI Time Delay (demora de tiempo) dentro de su ciclo For . 5. Ejecute su programa. 6. Varíe el valor del retardo de tiempo. 7. Guarde el VI como Ciclo For.vi
Facultad de Ingeniería UACH
41
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.3. Registros de Corrimiento
Los registros de corrimiento son terminales que se pueden activar en las estructuras de los ciclos While y For para almacenar temporalmente los valores generados en variables determinadas durante la iteración actual para ser utilizados en iteraciones posteriores Para agregar un registro de corrimiento en una estructura de ciclo, haga click derecho sobre el contorno de la estructura y seleccione Add Shift Register del menú emergente como se muestra en la figura 2.6.
Fig. 2.6 Agregando un registro de corrimiento en la estructura de un ciclo
Por omisión (default) los registros de corrimiento permiten almacenar solo el valor la iteración anterior, cuando necesitamos aumentar esta capacidad de almacenamiento para más iteraciones, simplemente agregamos elementos de almacenamiento al mismo registro de corrimiento haciendo un click derecho en la terminal del registro y seleccionando Add Element del menú emergente, tal como se muestra en la figura 2.7. Se pueden adicionar tantos elementos de memoria como sean necesarios
Fig. 2.7. Agregando elementos de memoria a un registro de corrimiento
Facultad de Ingeniería UACH
42
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
La operación de los registros de corrimiento es muy sencilla. Antes de iniciar las iteraciones del ciclo, los elementos de memoria son inicializados con los valores conectados por fuera del ciclo, este paso es importante debido a que si no se inicializan con un valor conocido, los elementos de memoria podrían contener “basura” que podría afectar el desempeño del código. En la primer iteración del ciclo, i=0, los elementos de memoria transfieren se contenido hacia el interior del ciclo y se efectúa el código programado, en este paso también se asigna en la terminal correspondiente el nuevo valor que será almacenado en el registro. Antes de ejecutar la siguiente iteración, i=1, el valor almacenado en la iteración anterior es transferido al primer elemento de memoria, el valor contenido en este se transfiere al segundo y así sucesivamente efectuando un corrimiento de los valores almacenados en el registro, el valor en el último elemento de memoria se elimina y un nuevo valor es almacenado en la terminal correspondiente para ser transferido en la siguiente iteración, este comportamiento se repite para el resto de las iteraciones del ciclo. La figura 2.8 muestra de manera gráfica la operación de un registro de corrimiento con cuatro terminales de memoria.
a)
b)
c)
d)
Fig. 2.8. Operación del registro de corrimiento a)antes de ejecutar i=0, b) i=0, c)antes de ejecutar i=1,2,3…N-1, d) i=1,2,3…N-1
Los registros de corrimiento pueden almacenar cualquier tipo de variable y también se pueden activar en los ciclos While.
Ejercicio 2.3 Uso de Registros de Corrimiento
1. Utilizando una estructura de ciclo For con registros de corrimiento crear un VI que genere cuatro números aleatorios y muestre en el panel, además de los números aleatorios, el promedio de ellos. 2. No olvide inicializar el registro de corrimiento 3. Ejecute su programa 4. Guarde el VI como Registros de Corrimiento .vi Facultad de Ingeniería UACH
43
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.4. Nodos de Retroalimentación
Los nodos de retroalimentación son una estructura que nos permite retroalimentar un valor de salida en la iteración de un ciclo para utilizarlo como entrada en la siguiente iteración, su función es similar a la de un registro de corrimiento con solo un elemento de memoria. Al igual que en caso de los registros de corrimiento, es conveniente siempre inicializar los nodos de retroalimentación en la terminal respectiva.
Fig. 2.9. Nodo de retroalimentación en un ciclo For.
Coloque nodos de retroalimentación en su diagrama seleccionando Feedback Node de la sub-paleta Structures en el diagrama de bloque como se muestra en la figura 2.10.
Facultad de Ingeniería UACH
44
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
click
Fig. 2.10. Acceso a los Nodos de Retroalimentación
Los nodos de retroalimentación, al igual que los registros de corrimiento, también aceptan cualquier tipo de variable para su almacenamiento.
Ejercicio 2.4 Uso Nodos de Retroalimentación
1. Utilizando la estructura de un ciclo For con un nodo de retroalimentación crear un programa que calcule la función n! (n factorial). ! 1 2 3 …
2. El panel debe contener un control numérico para introducir el valor de n (solo números enteros) y un indicador numérico para mostrar el resultado de n!. 3. Recuerde que la terminal i del contador de iteraciones del ciclo siempre empieza en 0. 4. Utilice la función incremento (+1) de la sub-paleta Numeric en la paleta de funciones del diagrama de bloque para que el primer valor sea 1. 5. No olvide inicializar el Nodo de Retroalimentación en 1 a través de su terminal de inicialización. 6. Ejecute su programa. 7. Pruebe para diferentes valores de n. 8. Guarde el VI como Nodo de Retroalimentación .vi
Facultad de Ingeniería UACH
45
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.5. Case
Las estructuras Case (de caso) nos permiten ejecutar un código específico dependiendo del valor de una variable de entrada en una terminal de selector. Solo se puede ver un cuadro de caso a la vez, así que para cambiar de un cuadro de caso a otro se hace un click en las flechas correspondientes en el encabezado del cuadro. Cuando un valor exterior entra a un cuadro de caso se genera un túnel que pone el mismo valor de entrada disponible para todos los cuadros de caso. Cuando un valor debe salir de un cuadro de caso, el túnel de salida que se genera debe tener algún valor asignado para todos los casos o se mostrara en color blanco (vacío) y generará un error de sintaxis. Dependiendo del tipo de variable de entrada las estructuras Case pueden ser: booleano, string (cadenas de caracteres) o numérico.
a)
b)
c)
Fig. 2.11. Estructura Case a) booleano, b) string, c) numérico.
Facultad de Ingeniería UACH
46
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Coloque estructuras Case en su diagrama seleccionando Case Structure de la subpaleta Structures en el diagrama de bloque como se muestra en la figura 2.12
click
Fig. 2.12. Acceso a la estructura Case en la paleta de funciones
2.5.1. Case Booleano
Para una entrada Booleana la estructura Case se comporta de manera similar a los enunciados if-then-else (si-entonces-de otro modo) comunes en otros lenguajes de programación basados en texto. Si el valor booleano de la entrada es verdadero ( true), se ejecuta el código dentro del cuadro del caso verdadero; de otra manera se ejecutara el código dentro del cuadro del caso falso (false)
Ejercicio 2.5 Uso del Case Booleano
1. Utilizando una estructura de Case booleano crear un programa que lea un valor numérico del panel y si este valor es positivo calcule el valor de su raíz cuadrada y lo envíe a un indicador numérico en el panel, pero si es negativo entonces que encienda un led en el panel y envíe al indicador numérico el mismo valor negativo. 2. La función de comparación >= (mayor o igual) la encuentra en la sub-paleta Comparison. 3. La función de raíz cuadrada la encuentra en la sub-paleta Numeric. 4. No olvide asignar valores en ambos casos a los túneles de salida. 5. Ejecute su programa. 6. Pruebe para valores de entrada positivos y negativos. Facultad de Ingeniería UACH
47
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
7. Guarde el VI como Case Booleano.vi
2.5.2. Case String
Para una entrada de cadena de caracteres (string), se ejecuta solamente el código contenido en el cuadro del caso que corresponda exactamente con la cadena en la entrada de selector, si el valor no coincide con ninguno de los casos, entonces se ejecuta el caso que este marcado como caso por omisión (default). Por omisión (default) todas las estructuras case aparecen como Case Booleano, para convertir a Case String simplemente conecte una variable tipo string en la terminal de selector y la estructura Case se convertirá automáticamente. Con la herramienta de texto cambie las cadenas “True” y “False” que aparecen por default tecleando la cadena que quiere asignar en cada caso especifico. Para agregar más cuadros de caso haga click derecho tocando el cuadro de la estructura Case y seleccione Add Case After del menú emergente. Es posible agregar tantos cuadros de caso diferentes como sea necesario Facultad de Ingeniería UACH
48
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Ejercicio 2.6 Uso del Case String
1. Utilizando una estructura de Case String crear un VI tome dos valores numéricos del panel y realice una operación aritmética determinada por un control de cadena de caracteres (string) en el panel. 2. Las operaciones son suma, resta, multiplicación y división para entradas de tres caracteres sum, res, mul y div respectivamente en la entrada de selector de la estructura Case. 3. Las funciones aritméticas las encuentra en la sub-paleta Numeric. 4. No olvide asignar valores en todos los casos al túnel de salida. 5. Ejecute su programa. 6. Cambie los valores numéricos de entrada y seleccione distintas operaciones, incluyendo algunas inválidas. 7. Guarde el VI como Case String .vi
Facultad de Ingeniería UACH
49
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.5.3. Case Numérico
Para una entrada de valor numérico conectada en la entrada del selector de la estructura Case se ejecuta solamente el código contenido en el cuadro del caso que corresponda exactamente con el valor numérico en la entrada de selector. Si el valor de entrada esta fuera de rango de los casos definidos, al igual que en los Case String, LabVIEW escogerá el caso designado por omisión (default).
Ejercicio 2.7 Uso del Case Numérico
1. Utilizando una estructura de Case Numérico crear un programa que tome dos valores numéricos del panel y realice una operación aritmética determinada por un control numérico en el panel. 2. Las operaciones son suma, resta, multiplicación y división para entradas con valores 0, 1, 2 y 3 respectivamente en la entrada de selector de la estructura Case. Facultad de Ingeniería UACH
50
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
3. Utilice el Vi generado en el ejercicio 3.6 y simplemente sustituya el control string por un control numérico del tipo pointer slide localizado en la subpaleta de controles numéricos, cambie los nombres de los cuadros de caso “sum”, “res”, “mul” y “div” por 0,1, 2, y 3 respectivamente. 4. Re-escale el slide de 0 a 3, cambie su representación a entero sin signo de 8 bits (U8), cambie el estilo de la escala para visualizar solo las marcas principales y con la herramienta de texto coloque etiquetas suma, resta, multiplicación y división donde correspondan. 5. Ejecute su programa. 6. Cambie los valores numéricos de entrada y seleccione distintas operaciones. 7. Guarde el VI como Case Numerico .vi
Facultad de Ingeniería UACH
51
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.6. Estructuras de Secuencia
En un lenguaje basado en texto, las declaraciones del programa generalmente se ejecutan en el orden en que aparecen. Por otro lado, en un lenguaje basado en flujo de datos como LabVIEW, un nodo se ejecuta cuando los datos están disponibles en todas sus terminales de entrada por lo cual algunas veces es difícil determinar el orden exacto de ejecución de las funciones. Cuando se necesita controlar de manera estricta el orden de la ejecución del código en el diagrama de bloques, se hace necesario utilizar una estructura de secuencia ( Sequence Structure). Las estructuras de secuencia lucen como un pedazo de rollo de película. Como se muestra en la figura 2.13 existen dos tipos diferentes para esta estructura: la estructura de secuencia apilada y la estructura de secuencia extendida.
Facultad de Ingeniería UACH
52
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
a)
b)
Fig. 2.13. Estructura de secuencia a) apilada, b) extendida.
Coloque estructuras de secuencia en su diagrama seleccionando Stacked Secuence o Flat Secuence de la sub-paleta Structures en el diagrama de bloque como se muestra en la figura 2.14.
click
Fig. 2.14. Acceso a la estructura de secuencia en la paleta de funciones
2.6.1. Secuencias Apiladas
Las estructuras de secuencia apiladas solo muestran un cuadro de secuencia a la vez, de manera similar a las estructuras de caso, solo que a diferencia de estas, todos los cuadros ejecutan de manera secuencial el código contenido en ellos. Para agregar cuadros a una secuencia se hace un click derecho sobre la estructura y se selecciona Add Frame After o Add Frame Before del menú emergente, tal como se muestra en la figura 2.15.
Facultad de Ingeniería UACH
53
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Fig. 2.15. Agregando cuadros a una secuencia.
Cuando se requiere transferir valores entre diferentes cuadros de una estructura de secuencia apilada, se debe activar las terminales de almacenamiento local haciendo un click derecho sobre la estructura y seleccionando Add Local Secuence, tal como se muestra en la figura 2.16. Este tipo de terminal almacena un valor generado en un cuadro de secuencia para que pueda ser utilizado en los cuadros siguientes.
Fig. 2.16. Agregando terminal de almacenamiento local a una estructura de secuencia.
Facultad de Ingeniería UACH
54
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Ejercicio 2.8 Uso de las Estructuras de Secuencia Apiladas
1. Utilizando una estructura de Secuencia Apilada crear un programa que lea un valor numérico entero entre 0 y 1000 del panel, genere los números aleatorios necesarios hasta encontrar ese número y al finalizar indique en el panel cuantas iteraciones hizo y cuanto tiempo tardo en realizarlas. 2. El primer paso es leer el registro de ticks de reloj de la computadora (este registro se incrementa cada milisegundo), utilice la función Tick Count localizada en la subpaleta Time & Dialog de la paleta de funciones, almacene este valor en una terminal de almacenamiento local. 3. Luego, con un ciclo While genere números aleatorios hasta encontrar el número especificado en el panel, tenga en cuenta que la función para generar números aleatorios solo los genera entre 0 y 1 así que deberá adecuarlos, recuerde también que va a comparar con un numero entero por lo que necesitara de una función de redondeo. 4. Finalmente vuelva a leer el registro de ticks de reloj y réstele el valor almacenado en la terminal de almacenamiento local, esto le dará el tiempo transcurrido en milisegundos, no olvide indicar también el número de iteraciones efectuadas 5. Ejecute su programa. 6. Ejecute varias veces con el mismo valor y con valores diferentes. 7. Guarde el VI como Secuencia Apilada .vi
Facultad de Ingeniería UACH
55
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.6.2. Secuencias Extendidas
Las estructuras de secuencia extendida realizan exactamente la misma función que las estructuras de secuencia apiladas descritas anteriormente, la única diferencia es que las secuencias extendidas muestran simultáneamente todos los cuadros de secuencia de manera que se puede visualizar simultáneamente el código contenido en toda la estructura. La transferencia de valores entre distintos cuadros de una secuencia extendida se realiza a través de túneles simples como los empleados en otras estructuras. Para convertir una secuencia apilada en secuencia extendida y viceversa se hace click sobre la estructura y se selecciona Replace / Replace with Flat Secuence o Replace with Stacked Secuence según sea el caso, tal como se muestra en la figura 2.17. Facultad de Ingeniería UACH
56
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
Fig. 2.17. Acceso a la estructura de secuencia en la paleta de funciones
Ejercicio 2.9 Uso de las Estructuras de Secuencia Extendidas
1. Utilizando una estructura de Secuencia Extendida crear un VI que lea un valor numérico entero entre 0 y 1000 del panel, genere los números aleatorios necesarios hasta encontrar ese número y al finalizar indique en el panel cuantas iteraciones hizo y cuanto tiempo tardó en realizarlas 2. Remplace la secuencia apilada del ejercicio 3.8 por una secuencia extendida 3. Ejecute su programa 4. Guarde el VI como Secuencia Extendida .vi
Facultad de Ingeniería UACH
57
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
2.7. Nodos de Fórmula
Algunas veces es preferible programar expresiones matemáticas con funciones basadas en texto, en lugar de hacerlo con iconos (los que pueden tomar mucho espacio en el diagrama). Los nodos de fórmula nos permiten implementar ecuaciones complicadas usando instrucciones basadas en texto. Compare los ejemplos mostrados en la figura 2.18 de una misma expresión matemática evaluada en forma de diagrama y con un nodo de fórmula.
a)
b) Fig. 2.18. Expresión matemática evaluada a) en diagrama, b) en nodo de fórmula
Coloque nodos de fórmula en su diagrama seleccionando Formula Node de la subpaleta Structures en el diagrama de bloque como se muestra en la figura 2.19.
click
Fig. 2.19. Acceso a los nodos de fórmula en la paleta de funciones
Facultad de Ingeniería UACH
58
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
La cajas de este nodo pueden cambiar de tamaño para introducir formulas algebraicas directamente a los diagramas de bloque. Para agregar variables, se hace un click derecho sobre la estructura y se selecciona la opción de agregar entrada ( Add Input) o agregar salida (Add Output), tal como se muestra en la figura 2.20
Fig. 2.20. Agregando terminales de entrada y de salida a un nodo de fórmula
Hay que nombrar las variables de la misma manera en que serán usadas dentro del nodo de formula (los nombres son sensibles a las mayúsculas). Todas las declaraciones independientes entre sí deben terminar siempre con un punto y coma (;). Al usar varias fórmulas en un solo nodo de fórmula, cada variable asignada (las que aparecen en la parte izquierda de cada fórmula) deben de tener una terminal de salida en el nodo de fórmula. Sin embargo, estas terminales de salida no necesitan estar cableadas si no se requiere su valor de salida En los nodos de fórmula es posible utilizar funciones estándar como: abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceil, cos, cosh, cot, csc, exp, expm1, floor, getexp, getman, int, intrz, In, Inp1, log, log2, max, min, mod, pow, rand, rem, sec, sign, sin, sinc, sinh, sqrt, tan, tanh.
También se puede utilizar estructuras de programación como If –then, for , case, entre muchas otras, utilizando la sintaxis del lenguaje C (específicamente ANSI C). Ejercicio 2.10 Uso de los Nodos de Fórmula
1. Utilizando un nodo de fórmula crear un programa que resuelva las siguientes ecuaciones: y= x2+10x+1 z= 16x3+5 w= 2y-z
2. Leer en el panel frontal el valor correspondiente a x y mostrar solo el resultado para w
Facultad de Ingeniería UACH
59
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Estructuras de Programación
3. Ejecute su programa. 4. Guarde el VI como Nodo de Formula .vi
Ejercicio 2.11 Adicional 1. Utilizando las estructuras de programación necesarias, construir un VI que simule los tiros de un dado (valores posibles de 1 a 6) y lleve un registro de cuantas veces cayó cada valor. 2. El parámetro de entrada para este programa es el número de tiros de dado que se debe simular, mostrar como resultados de salida el valor correspondiente a cuantas veces cayó cada valor. 3. Es muy importante que el dado no esté cargado, es decir, que todos los números tengan la misma probabilidad de caer. 4. Cada vez que se ejecute el programa se reinicia la acumulación de los resultados de salida. 5. Documente completamente el programa. 6. Conviértalo en un subVI. 7. Ejecute su programa. 8. Guarde el VI como Dados.vi
Facultad de Ingeniería UACH
60
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Unidad III. FUNCIONES DE PROGRAMACION. 3.1 ARREGLOS
Al igual que en otros lenguajes de programación, en LabVIEW los arreglos agrupan elementos de datos del mismo tipo. Un arreglo consiste de elementos ordenados a través de índices y dimensiones. Los elementos son los datos que componen el arreglo, el índice es el lugar o posición que ocupa el elemento dentro del arreglo y la dimensión es la cantidad de índices que se utilizan para indicar una posición única dentro del arreglo. Un arreglo puede tener una o más dimensiones y hasta 2^31 – 1 elementos por dimensión, si lo permite la memoria de la computadora. El índice es basado en cero, lo que significa que tiene un rango de 0 a n – 1, donde n es el número de elementos en el arreglo. Por ejemplo, n = 9 para los nueve planetas, así que el índice recorre de 0 a 8. La Tierra es el tercer planeta, así que tiene un índice de 2. La figura 3.1 muestra el esquema de un arreglo unidimensional en el cual cada elemento se accesa a través de un solo índice.
Arreglo
elemento
Índice
elemento
0
elemento
1
elemento
2
3
…
elemento
…
n
Fig. 3.1. Arreglo unidimensional
La figura 3.2 muestra el esquema de un arreglo bidimensional en el cual cada elemento se accesa a través de dos índices Índices
0
1
2
3
…
n
0
elemento
elemento
elemento
elemento
…
elemento
1
elemento
elemento
elemento
elemento
…
elemento
2
elemento
elemento
elemento
elemento
…
elemento
3
elemento
elemento
elemento
elemento
…
elemento
. . .
. . .
. . .
. . .
. . .
m
elemento
elemento
elemento
elemento
Arreglo
. . . …
elemento
Fig. 3.2. Arreglo bidimensional n X m
Facultad de Ingeniería UACH
61
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Se pueden construir arreglos de tipos de datos numéricos, booleanos, rutas, cadenas, formas de onda y clusters. 3.1.1. Controles e Indicadores de Arreglo
Para crear un control o indicador de un arreglo en el panel frontal, primero se selecciona una preforma de arreglo (array) en la paleta Controls » Modern » Array, Matrix & Cluster , y se coloca en el panel frontal, como se muestra en la figura 3.3.
Click Click
Fig. 3.3. Acceso a la preforma para un arreglo en el panel frontal
Luego, como se muestra en la figura 3.4, se arrastra un control o un indicador adentro de la preforma para asignarle el tipo de dato correspondiente, por ejemplo, si se requiere un arreglo indicador numérico se debe colocar dentro de la preforma de arreglo un indicador numérico, si lo que se desea el arreglo control booleano entonces de debe colocar dentro de la preforma un control booleano. Si se intenta arrastrar un control o indicador inválido, tal como una gráfica XY, no será posible colocarlo dentro de la preforma de arreglo. Para poder utilizar un arreglo se debe asignar el tipo de variable, de otro modo, la terminal del arreglo en el diagrama de bloques aparece negra con un paréntesis vacío.
Facultad de Ingeniería UACH
62
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Fig. 3.4. Asignación del tipo de dato al arreglo
Para agregar dimensiones a un arreglo, se hace click derecho en el indicador del índice y seleccione Add Dimension del menú emergente como se muestra en la figura 3.5. También se puede utilizar la herramienta que posicionamiento para cambiar el tamaño del indicador del índice hasta que se obtengan las dimensiones requeridas.
Fig. 3.5. Adicionando dimensiones a un arreglo
Facultad de Ingeniería UACH
63
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.1.2. Arreglos Auto Indexados
El manejo de auto-indexamiento de arreglos es una capacidad novedosa de LabVIEW que le da una gran versatilidad en el uso de los ciclos For y While. El Auto-indexamiento es una característica propia de los túneles de entrada o salida en las estructuras de ciclos y se activa o desactiva seleccionando Enable Indexing o Disable Indexing en los menús emergentes al hacer click derecho sobe un túnel. 3.1.2.1. Auto-indexamiento de salida
Cuando se utiliza el auto-índice en túnel de salida, se genera de manera automática un arreglo de salida que recibe un nuevo elemento por cada iteración del ciclo. El túnel de salida contiene corchetes cuadrados representando un arreglo que al alambrarse al exterior del ciclo transfiere el arreglo que contiene los elementos almacenados en cada una de las iteraciones del ciclo. Si el auto-índice esta desactivado, entonces el túnel no crea un arreglo para almacenar los valores de las distintas iteraciones y al finalizar el ciclo solo se transfiere al exterior el ultimo valor generado. En este caso el túnel tiene una apariencia normal y no muestra corchetes como en caso anterior. La figura 3.6 muestra un ejemplo de un ciclo For con dos túneles de salida, en el primero (parte superior) el auto- indexamiento está habilitado por lo cual genera un arreglo de salida, mientras que en el segundo (parte inferior) el auto-indexamiento esta deshabilitado por lo cual solo sale un valor numérico simple.
Fig. 3.6. Ejemplo de auto-indexamiento en túneles de salida
Facultad de Ingeniería UACH
64
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
El auto-indexamiento en los túneles de salida aplica por igual a los ciclos While y a los ciclos For. Sin embargo, por omisión (default) en el caso de los ciclos For el autoindexamiento está habilitado, mientras que en los ciclos While por default el autoindexamiento está deshabilitado. 3.1.2.2. Auto-indexamiento de entrada
Cuando se alambra un arreglo a un túnel de entrada de un ciclo For o un ciclo While, si el auto-indexamiento se encuentra activado, entonces en cada iteración solo pasará a través del túnel un elemento, cuyo índice coincida con el contador de iteraciones i del ciclo. Por otro lado, si el auto-indexamiento se encuentra desactivado entonces el arreglo completo pasará por el túnel en cada iteración. Un ejemplo de este comportamiento se muestra en la figura 4.7.
Fig. 3.7. Ejemplo de auto-indexamiento en túneles de entrada
Nótese que el primer túnel de entrada (parte superior) tiene el auto-índice habilitado por lo que al ciclo entran los elementos de manera individual, mientras que en segundo túnel (parte inferior) el auto-índice se encuentra deshabilitado por lo cual al interior del ciclo llega el arreglo completo. Nótese también como cambia la representación de la terminal del túnel cuando está activado el auto-indexamiento. Otra característica particular de LabVIEW con respecto a los arreglos alambrados en túneles de entrada en ciclos For se presenta cuando existe uno o más túneles que tengan habilitado el auto-índice, el tamaño de los arreglos se puede utilizar para controlar el numero de iteraciones del ciclo, incluso la terminal N del ciclo pude quedar desconectada. En el caso de existan arreglos de entrada de diferentes tamaños o incluso si estuviera alambrada la terminal N, el control de las iteraciones lo tiene el que tenga el tamaño menor. Por ejemplo, si se cablean un arreglo con 10 elementos y otro de 5 elementos a túneles de entrada de entrada de un ciclo For y se pone la terminal del contador a 15, el ciclo se ejecuta solo 5 veces. Facultad de Ingeniería UACH
65
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.1.2.3. Arreglos auto-indexados multidimensionales
Además de los arreglos auto-indexados unidimensionales, es muy común requerir de arreglo auto-indexados multidimensionales, los cuales se obtienen de manera general anidando ciclos While o For . Por ejemplo, se pueden utilizar dos ciclos For anidados uno dentro del otro, para crear arreglos bidimensionales. El ciclo For externo crea las filas de elementos y el ciclo For interno crea las columnas de elementos. El ejemplo específico mostrado en la figura 3.8 genera un arreglo bidimensional de 3 renglones y seis columnas de números aleatorios
Fig. 3.8. Creación de arreglos bidimensionales.
De esta misma manera, anidando más ciclos, se pueden crear arreglos multidimensionales. 3.1.3. Constantes de Arreglo
También, en algunas ocasiones puede ser necesario disponer de arreglos de valores constantes en nuestro programa. Para ello es posible crear constantes de arreglo en el diagrama a bloques, el procedimiento es muy parecido al utilizado para la creación de controles o indicadores de arreglo en el panel frontal. Primero se selecciona una preforma de arreglo constante (Array Constant) en la paleta Functions» Programming» Array en el diagrama a bloques, tal y como se muestra en la figura 3.9.
Facultad de Ingeniería UACH
66
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Click
Click
Fig. 3.9. Acceso a la preforma para constante de arreglo.
Luego simplemente asigne el tipo de constante a la preforma de arreglo. La figura 3.10a muestra la construcción de una constante de arreglo booleano. La figura 3.10b Muestra la construcción de una constante de arreglo numérico bidimensional. Nótese que cada elemento del arreglo puede tener valor diferente entre sí.
Facultad de Ingeniería UACH
67
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
a)
b)
Fig. 3.10. Construcción de una constante de arreglo a) booleano, b) numérico bidimensional.
3.1.4. Funciones para Arreglos
LabVIEW cuenta con una gran cantidad de funciones para crear, manipular o trabajar con arreglos. Estas funciones están situadas en la paleta Functions» All Functions» Array. Las principales funciones para trabajar con arreglos incluyen: 3.1.4.1. Tamaño de Arreglo (Array Size)
Fig. 3.11. Función Array Size.
La función Array Size (tamaño de arreglo) devuelve el número de elementos en cada dimensión de un arreglo. Si el arreglo es de n-dimensiones, el tamaño (size) de la salida es un arreglo de n elementos, donde cada elemento es el tamaño del arreglo en esa dimensión
Facultad de Ingeniería UACH
68
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.1.4.2. Inicializar Arreglo (Initialize Array)
Fig. 3.12. Función Initialize Array.
La función Inicialize Array (inicializar el arreglo) crea un arreglo de n dimensiones en donde cada elemento ha sido inicializado al valor conectado en la entrada del elemento (element). Se puede cambiar el tamaño de la función para incrementar el número de dimensiones del arreglo de salida. 3.1.4.3. Construir Arreglo (Build Array)
Fig. 3.13. Función Build Array.
La función Build Array (construir de arreglo) puede realizar dos funciones distintas. Concatena múltiples arreglos o añade elementos a un arreglo de n dimensiones. Se puede cambiar el tamaño de la función para incrementar el número de dimensiones del arreglo de salida. Para concatenar las entradas en un arreglo más largo de la misma dimensión, se hace click derecho en el nodo de la función y seleccione Concatenate Inputs (Concatenar Entradas) desde el menú emergente. 3.1.4.4. Subconjunto de Arreglo (Array Subset)
Fig. 3.14. Función Array Subset.
Facultad de Ingeniería UACH
69
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
La función Array Subset (subconjunto de arreglo) devuelve parte de un arreglo comenzando en el índice indicado y con una longitud (cantidad de elementos) también indicada. Para arreglos multidimensionales se puede cambiar el tamaño de la función para incrementar el número de dimensiones. 3.1.4.5. Índice del Arreglo (Index Array)
Fig. 3.15. Función Index Array.
La función Index Array (índice del arreglo) devuelve el elemento de un arreglo almacenado en el índice indicado. También se puede utilizar la función Índice del Arreglo para extraer una fila o una columna de un arreglo bidimensional para así crear un sub-arreglo del original. Para hacer esto se conecta un arreglo bidimensional a la entrada de la función, la cual se auto-ajusta para mostrar dos terminales de índice disponibles. La terminal del índice superior indica la fila, y la segunda terminal indica la columna. Se puede cablear entradas a ambas terminales de índice para indicar un solo elemento, o se puede cablear solamente una terminal para extraer una fila o una columna de datos.
Ejercicio 3.1 Uso de los Arreglos
1. Crear un programa para generar un arreglo auto-indexado de 5 números aleatorios entre 0 y 10, crear una constante de arreglo con los valores [3,8,0,2,1], crear un arreglo inicializado de 5 elementos con valor de 4, concatenar los tres arreglos anteriores formando un solo arreglo. 2. Mostrar en el panel frontal el arreglo final y el tamaño del arreglo final 3. Extraer el valor del elemento 4 del arreglo y mostrarlo en el panel frontal 4. Extraer un sub-conjunto de 5 elementos empezando en el elemento 2 y mostrarlo en el panel frontal 5. Ejecute su programa 6. Guarde el VI como Arreglos .vi
Facultad de Ingeniería UACH
70
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.2. CLUSTERS
Los clusters son otra manera de empaquetar datos en LabVIEW, son equivalentes a un record en Pascal o una struct en C. A diferencia de los arreglos en cuales todos los elementos deben de ser del mismo tipo, los componentes de los clusters pueden ser de diferentes tipos de datos. Sin embargo, se debe respetar siempre que todos los elementos de un cluster deben ser ya sea Indicadores o controles. No se puede tener controles e Indicadores juntos en el mismo cluster. Los clusters se pueden considerar como un grupo de alambres individuales (datos) juntos en un cable (cluster). Uno de los principales usos de los clusters es disminuir la cantidad de terminales de conexión en los subVIs. Un grupo de entradas y/o salidas se pueden empaquetar para utilizar solo una línea de conexión. 3.2.1. Controles e Indicadores de Clusters
Para crear un cluster se selecciona Cluster en el panel frontal desde la paleta Controls » Modern » Array, Matrix & Cluster . Tal como se muestra en la figura 3.16.
Facultad de Ingeniería UACH
71
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Click
Click
Fig. 3.16. Acceso a la preforma de cluster en el panel frontal.
Esta opción genera una preforma (shell) parecida a la preforma obtenida al crear arreglos, solo que sin el control de índice. Una vez que esta se ha seleccionado se puede cambiar el tamaño a la preforma. Al hacer click derecho adentro de la preforma se puede añadir objetos de cualquier tipo como se muestra en la figura 3.17. Inclusive se puede tener un cluster adentro de otro cluster. Los componentes (controles o indicadores) que son introducidos a un cluster, no generan terminal en el diagrama de bloque, estos componentes se accesan a través de la terminal del cluster.
a)
b)
Fig. 3.17. Ejemplo de un cluster en el panel frontal a) control, b) indicador.
Facultad de Ingeniería UACH
72
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
El cluster se convierte en un indicador o control basado en el primer objeto que fue ingresado dentro del grupo. 3.2.2. Constante de Clusters
También se puede crear una constante de cluster en el diagrama de bloque escogiendo Cluster Constant de la paleta Cluster , esto brinda una preforma (shell) de cluster vacía. Una vez ingresado se puede dar cualquier tamaño al cluster, dentro de la preforma de se puede introducir otras constantes, tal como se muestra en la figura 3.18.
Fig. 3.18. Ejemplo de una constante de cluster en el diagrama de bloque.
No se puede colocar terminales para los objetos del panel frontal en una constante de cluster en el diagrama de bloques, ni tampoco puede colocar constantes especiales como el Tab o una cadena de caracteres vacía dentro de una pre-forma de cluster. 3.2.3. Orden de Cluster
Dentro del cluster, los componentes están acomodados de acuerdo al orden en que fueron introducidos a la pre-forma. Este orden es importante debido a que para poder interconectar los clusters, estos deben tener la misma cantidad de elementos y el mismo orden, de lo contrario LabVIEW no permitirá la conexión. Para visualizar o modificar el orden de los elementos de un cluster se hace un click derecho tocando la estructura del cluster y se selecciona Reorder Controls in Cluster del menú emergente como se muestra en la figura 3.19. El número en fondo blanco muestra el orden actual de los elementos en el cluster y el número en fondo negro indica el nuevo orden de los elementos, esto se cambia haciendo click en el elemento que se desea modificar.
Facultad de Ingeniería UACH
73
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Fig. 3.19. Reordenar elementos en un control o indicador de cluster.
3.2.4. Funciones para Clusters
LabVIEW cuenta con funciones para crear, manipular o trabajar con clusters. Estas funciones están situadas en la paleta Functions» Modern» Clusters. Las principales funciones para trabajar con clusters incluyen: 3.2.4.1. Agrupar (Bundle)
Fig. 3.20. Función Bundle.
La función Bundle (agrupar) forma un cluster conteniendo los objetos dados en las entradas de elementos
Facultad de Ingeniería UACH
74
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.2.4.2. Agrupar por Nombre (Bundle by Name)
Fig. 3.21. Función Bundle by Name.
Actualiza valores de objetos localizados en grupos específicos (los objetos deben tener su propia clasificación).Se debe de tener un cluster existente cableado a la terminal de en medio de la función para poder utilizar Bundle by Name (agrupar por nombre). 3.2.4.3. Desagrupar (Unbundle)
Fig. 3.22. Función Unbundle.
La función Unbundle (desagrupar) se utiliza para acceder a todos los objetos del cluster. Esta función debe tener exactamente el mismo número de terminales como se tienen elementos en el cluster. Añadiendo o Removiendo elementos en el cluster se rompen los cables en el diagrama. 3.2.4.4. Desagrupar por Nombre (Unbundle by Name)
Fig. 3.23. Función Unbundle by Name.
La Función Unbundle by Name (desagrupar por nombre) se utiliza para acceder objetos específicos (uno o más) en el cluster. Solamente los objetos en el cluster que tengan su propia marca (Label) pueden ser accesados. Cuando se desagrupe por nombre, haga click en la terminal con la herramienta de operación para escoger el elemento que quiere acceder. Facultad de Ingeniería UACH
75
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
También se puede obtener las funciones de Bundle (agrupar), Unbundle (desagrupar), Bundle by Name (agrupar por nombre), y Unbundle by Name (Desagrupar por Nombre) al hacer click derecho con el ratón en la terminal del cluster en el diagrama de bloques y eligiendo Cluster Tools (herramientas de cluster) del Menú. Cuando usted escoge Cluster Tools las funciones Bundle (agrupar) y Unbundle (desagrupar) automáticamente contienen el número correcto de terminales. Las funciones Bundle by Name (agrupar por nombre) y Unbundle by Name (desagrupar por nombre) aparecen con el primer elemento del Cluster.
3.2.5. Cluster de Error
Los clusters de errores son un medio poderoso que utiliza LabVIEW para indicar y manejar errores en funciones específicas. Los VI de adquisición de datos (DAQ VIs) las funciones de manejo de entradas y salidas de archivo (File I/O), los VIs de manejo de redes, y muchos otros VIs utilizan este método para pasar información entre nodos acerca de errores. La figura 3.24 muestra el indicador de un cluster de error.
Fig. 3.24. Indicador de cluster de error.
El cluster para errores contiene tres elementos: status, code y source.
3.2.5.1. Status.
Es una variable de tipo booleano a la cual se le asigna un valor verdadero si ocurre algún error. 3.2.5.2. Code.
Es una variable de tipo valor numérico entero a la cual se le asigna un número de código correspondiente al error que ha ocurrido.
Facultad de Ingeniería UACH
76
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.2.5.3. Source.
error.
Es una variable de tipo cadena de caracteres que identifica el VI en donde ocurrió el
Los clusters de errores son útiles para determinar cuando ocurre un error durante la ejecución de un VI. Para ello simplemente se deben encadenar las funciones conectando la salida Error Out de una a la entrada Error In de la siguiente, tal como se muestra en la figura 3.25. Al hacer esto también se establece una secuencia de ejecución de las funciones interconectadas a través de los clusters de error, pues el flujo de datos establece que una función deba esperar a que se ejecute primero la función cuya salida Error Out está conectada a su entrada Error In.
Fig. 3.25. Conexión de los cluster de error.
Ejercicio 3.2 Uso de los Clusters
1. Crear un programa para generar un control de cluster que contenga en el panel frontal un control numérico, un control booleano y un control string.
Facultad de Ingeniería UACH
77
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
2. Desempaquetar el cluster en el diagrama de bloque para multiplicar el numérico por 10, invertir el booleano y dejar igual el string 3. Empaquetar nuevamente y mostrar el resultado en un indicador de cluster en el panel frontal 4. Ejecute su programa 5. Guarde el VI como Clusters .vi
3.4. CADENAS DE CARACTERES (STRINGS)
Una cadena de caracteres (strings) es una secuencia de caracteres ASCII que pueden ser texto imprimible o no imprimible. Las cadenas de caracteres se usan frecuentemente para enviar comandos a instrumentos, para proveer información acerca de pruebas (tales como el nombre del operador y la fecha), o para desplegar en forma de texto resultados al usuario. 3.4.1 Controles e Indicador String
Los controles e indicadores de string se encuentran en la sub-paleta Modern/String & Path de la paleta de Controles como se muestra en la figura 3.26.
Facultad de Ingeniería UACH
78
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
click
Fig. 3.26. Ubicación del Control String y del Indicador String en el panel frontal.
Para introducir o cambiar el contenido de texto en los controles string se utiliza la herramienta de texto (Text Tool). Las cadenas de caracteres pueden variar en su tamaño. 3.4.2. Activación del Scrollbar
Los indicadores y controles string pueden tener barras de movimiento ( Scroll Bars) Estos se activan haciendo click con el botón derecho del mouse y seleccionando Visible Items» Scrollbar . Como se muestra en la figura 3.27.
Fig. 3.27. Activación del Scrollbar en los controles e indicadores string.
Facultad de Ingeniería UACH
79
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
La barra de movimiento no se activara si el Control o el Indicador no son lo suficientemente grandes. 3.4.3. Modos de despliegue del texto
Tanto los controles como los indicadores string tiene la capacidad de desplegar el texto contenido en ellos de tres maneras diferentes: normal, códigos diagonal, password y hexadecimal. En el modo de despliegue normal aparece solo el texto imprimible, en el modo de despliegue de códigos diagonal aparece el texto imprimible y los caracteres de control en forma se los códigos diagonal respectivos, en el modo password el texto es sustituido para su despliegue por asteriscos para proteger el contenido tecleado y en el modo de despliegue hexadecimal aparecen los valores hexadecimales de cada carácter. La figura 2.28 muestra el mismo contenido de texto desplegado en los distintos modos en un indicador string.
Fig. 3.28. Modos de despliegue de texto.
Facultad de Ingeniería UACH
80
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.4.5. Funciones para Manejo de Texto
LabVIEW cuenta con muchas funciones para manejo de texto, algunas de las principales son: 3.4.5.1. Longitud de texto (String Length)
Fig. 3.29. Función String Length.
Esta función cuenta el número de caracteres que contiene una cadena, es importante hacer notar que el conteo incluye todos los carates, tanto los imprimibles como los caracteres de control.
3.4.5.2. Concatenar Strings (Concatenate Strings)
Fig. 3.30. Función Concatenate Strings.
Esta función forma una nueva cadena de caracteres en base a la concatenación consecutiva de las cadenas de caracteres de entrada 3.4.5.3. Sub-conjunto de Strings (Subset Strings)
Fig. 3.31. Función Subset Strings.
Esta función extrae un subconjunto de una cadena de caracteres iniciando en el carácter que se encuentra en la posición indicada por offset y con una longitud indicada en length.
Facultad de Ingeniería UACH
81
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.4.5.4. Constantes de Strings (Subset Strings)
Además de las normales constantes string en las que se puede establecer el texto necesario, LabVIEW cuenta también con una gran cantidad de constantes string que corresponden a caracteres de control tales como: retorno de carro, fin de línea, tabulador, etc.
Ejercicio 3.6 Uso de las Cadenas de Caracteres
1. Utilizando Controles, indicadores, constantes y funciones de cadenas de caracteres crear un programa para la generar un encabezado de texto. 2. El encabezado deberá contener Nombre de la Empresa, nombre del empleado, Fecha y Hora actual. 3. El nombre de la Empresa deberá ser una constante en el diagrama. 4. El nombre del empleado deberá ser proporcionado a través de un control en el panel 5. La fecha y la hora actual de la computadora se puede obtener mediante la función Get Date/Time en la sub paleta de Timming de la paleta de funciones. 6. Utilice las constantes string que sean necesarias para cambios de línea. 7. Ejecute su programa 8. Guarde el VI como Strings.vi
3.5. ARCHIVOS
Cuando se requiere guardar información en disco o recuperar información previamente guardada, LabVIEW cuenta con funciones especializadas para realizar operaciones de entrada/salida de archivo (I/O File). Estas funciones están localizadas en la paleta Programming » File I/O para manejar todos aspectos relativos a entrada/salida de archivos de distintos tipos: archivos de texto y archivos de hoja de cálculo entre otros. La figura 3.32 muestra el acceso a estas funciones.
Facultad de Ingeniería UACH
82
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
click
Fig. 3.32. Ubicación del las funciones de entrada/salida para archivos.
3.5.1. Archivos de Texto.
Para el manejo de archivos de texto, LabVIEW cuenta con diversas funciones entre las que destacan Escribir en Archivo de Texto (Write to Text File) y Leer de Archivo de Texto (Read from Text File). 4.5.1.1. Escribir en Archivo de Texto (Write to Text File).
Fig. 3.33. Función Escribir en Archivo de Texto.
Facultad de Ingeniería UACH
83
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Esta función escribe una cadena de caracteres o un arreglo de caracteres como líneas en un archivo. Si se alambre una trayectoria de archivo valida a la entrada file (use dialog), la función abre o crea e archivo antes de escribir en él y reemplaza cualquier contenido previo del archivo. Si se alambre una referencia de archivo (file refnum) a la entrada file (use dialog), la escritura comienza en la posición de archivo actual. Para agregar contenido a un archivo existente (append to file) se debe poner la posición de archivo al final de este usando la función Set File Position. 3.5.1.2. Leer de Archivo de Texto (Read from Text File).
Fig. 3.34. Función Leer de Archivo de Texto.
Esta función lee un determinado número de caracteres o líneas de un archivo de texto. Por default, esta función lee todos los caracteres del archivo de texto. Alambre un valor entero a la entrada count para especificar el número de caracteres individuales que desee leer empezando por el primer carácter. Haga click derecho y del menú emergente (popup menu) seleccione la opción Read Lines para leer líneas completas del archivo de texto. Al seleccionar la opción Read Lines alambre un valor a la entrada count para especificar el número de líneas individuales que desee leer en el archivo a partir de la primera línea. Introduzca un valor de -1 en la entrada count para leer todos los caracteres y las líneas del archivo de texto. 3.5.2. Archivos de Hoja de Cálculo
Cuando se requiere escribir o leer un archivo de texto que contenga información numérica tal como los valores de medición de una variable y se requiere además que dicha información sea accesible a través de algún programa de hoja electrónica de cálculo, como Excel por ejemplo, entonces se pueden utilizar las funciones de LabVIEW específicas para esto que son: Escribir en Archivo de Hoja de Cálculo (Write to Spreadsheet File) y Leer de Archivo de Hoja de Cálculo (Read from Spreadsheet File). 3.5.2.1. Escribir en Archivo de Hoja de Cálculo (Write to Spreadsheet File)
Fig. 3.35. Función Escribir en Archivo de Hoja de Cálculo.
Facultad de Ingeniería UACH
84
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
Esta función convierte un arreglo numérico 2D o 1D del tipo entero o flotante a una cadena de texto y escribe esta cadena a un nuevo archivo o agrega la cadena a un archivo existente. El tipo de datos que se cablea a la entrada de datos 2D Data o 1D Data determina la instancia polimórfica a usar. También se puede obtener la transpuesta de la matriz de datos. El VI abre o crea el archivo antes de grabar en él y se cierra después. Puede utilizar esta VI para crear un archivo de texto legible por la mayoría de las aplicaciones de hoja de cálculo. 3.5.2.2. Leer de Archivo de Hoja de Cálculo (Read from Spreadsheet File)
Fig. 3.36. Función Leer de Archivo de Hoja de Cálculo.
Esta función lee un determinado número de líneas o filas de un archivo de texto numérico a partir de un determinado carácter (offset) y convierte los datos en un arreglo numérico 2D o 1D del tipo flotante en doble precisión. Se debe seleccionar manualmente el formato de texto que desea utilizar. También se puede, opcionalmente, hacer la transpuesta de la matriz. El VI abre el archivo antes de la lectura del mismo y se cierra después. Puede utilizar esta VI para leer un archivo de hoja de cálculo en formato de texto. 3.5.2.3. Identificadores (Refnums)
En LabVIEW existe un tipo de variable especial llamada refnum que se utiliza como identificador único de objetos, tales como archivos, dispositivos, o conexiones de red. Debido a que un refnum es un apuntador temporal a un objeto, este es válido únicamente durante el período en que el objeto está abierto. Si se cierra el objeto, LabVIEW desasocia el refnum con el objeto, este refnum se convierte en obsoleto. Si se abre de nuevo el objeto, LabVIEW crea un nuevo refnum que es diferente al anterior. LabVIEW asigna memoria para un objeto que se asocia con un refnum por lo cual se debe cerrar el refnum para liberar el objeto de la memoria.
3.5.2.3. Rutas de Archivo (Paths)
LabVIEW también define un tipo de variable especial para manejar rutas de archivo. Una ruta de archivo (path) contiene la dirección completa de la ubicación de un archivo dentro de la jerarquía de archivos.
Facultad de Ingeniería UACH
85
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Funciones de Programación
3.5.2.3. Conversión entre Identificadores y Rutas de Archivo (Refnum to Path)
Debido a que algunas de las funciones para manejo de archivos utilizan como parámetro de entrada o salida los identificadores ( refnum) del archivo y en cambio otras requieren la ruta (path) del archivo, se hace necesario contar con alguna herramienta de conversión entre estos tipos de variable como la función Convertir de Identificador a Ruta de Archivo (Refnum to Path) mostrada en la figura 3.37.
Fig. 3.37. Función Convertir de Identificador a Ruta de Archivo.
Ejercicio 3.7 Escritura de Archivos
1. Crear un programa para guardar en un archivo un reporte de mediciones. 2. Utilizando el ejercicio anterior (4.6) generar un encabezado con los datos generales descritos en dicho ejercicio. 3. Simular un proceso de medición que genera 25 lecturas de temperatura entre 50 y 60 grados. 4. Utilizando la función Write to Text File guardar en un archivo el encabezado generado en el paso 2. 5. Utilizando la función Write to Spreadsheet File guardar en el mismo archivo las temperaturas simuladas en el paso 3. 6. Utilice la función Refnum to Path para asegurar que las temperaturas simuladas se guarden en el mismo archivo que el encabezado. 7. Ejecute su programa 8. Guarde el VI como Escritura Archivo.vi 9. Utilizando Excel abra el archivo generado en este ejercicio
Facultad de Ingeniería UACH
86
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Unidad IV. GRAFICACION DE DATOS. Las gráficas son indicadores muy versátiles en LabVIEW. Pueden ser altamente adaptables y pueden ser usados para mostrar de forma concisa una gran cantidad de información. LabVIEW cuenta con una gran variedad de graficas para casi todas las aplicaciones, pero los tres tipos de gráficas más utilizados son: Waveform Chart, Waveform Graph y XY Graph. 4.1. Registrador de Formas de Onda (Waveform Chart)
Las gráficas del tipo Waveform Chart (registrador de forma de onda) es un indicador numérico especial que muestra en una gráfica uno o más trazos (plots) correspondientes a variables numéricas. La gráfica Waveform Chart está localizada en la paleta Controls» Modern» Graph, como se muestra en la figura 4.1.
click click
Fig. 4.1. Ubicación de una gráfica Waveform Chart en el panel frontal.
Facultad de Ingeniería UACH
87
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
4.1.1. Trazo Sencillo
Cuando se utiliza este tipo de gráfica para mostrar un solo trazo o variable, simplemente se cablea la terminal de la grafica a la salida escalar que se desea graficar como se muestra en la figura 4.2.
Fig. 4.2. Conexión de una gráfica Waveform Chart en el diagrama de bloque para trazo simple.
Bajo estas condiciones la gráfica utiliza la configuración por default y va graficando uno a uno los valores que va enviando la variable numérica conectada en esta. 4.1.2. Personalización de las Gráficas
Uno de los aspectos que da mayor versatilidad a las gráficas en LabVIEW, es su capacidad de personalizarlas, de manera que la información presentada en la gráfica exprese las características que el usuario quiere resaltar en ellas. Por ejemplo, se pueden cambiar los valores mínimo y máximo de los ejes x y y, dando doble click al valor con la herramientas de etiquetado y escribiendo el nuevo valor. De manera similar, se puede cambiar las etiquetas asignadas por default a los ejes ( Time y Amplitude). Para personalizar la representación gráfica de cada trazo e la gráfica se puede dar un click derecho a la leyenda de la grafica y cambiar el estilo, forma y color de cada trazo. También es posible personalizar la gráfica seleccionando Properties del menú emergente al hacer click derecho sobre esta, como se muestra en la figura 4.3, en la ventana de configuración que aparece se puede personalizar la apariencia, el formato y precisión, los trazos, las escalas y la documentación. Esta ventana de configuración permite acceder a todas las características personalizables de la gráfica.
Facultad de Ingeniería UACH
88
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Fig. 4.3. Ventana de configuración para personalizar una gráfica Waveform Chart.
4.1.3. Modo de actualización de datos
Las gráficas Waveform Chart de LabVIEW se pueden configurar para actualizar el área grafica de datos en tres modos diferentes: strip chart, scope chart y sweep chart. El modo por default es el strip chart, en el cual el área gráfica se va llenando punto a punto y al completarse esta la gráfica se va recorriendo ( scroll) con un corrimiento sencillo por cada punto que se grafica. En el modo scope chart el área gráfica se va llenando punto a punto y al completarse esta la gráfica se hace un corrimiento de una pantalla completa, dando la apariencia de que se borra la grafica y vuelve a empezar. Finalmente en el modo sweep chart aparece un cursor rojo sobre la grafica que va barriendo de izquierda a derecha toda el área, los valores de la gráfica se actualizan al pasar el cursor. Estos modos de actualización se configuran seleccionando Update Mode en la pestaña Appearance de la ventana de personalización. 4.1.4. Trazo Multiple.
Las gráficas Waveform Chart también pueden mostrar trazos de multiples señales, para hacer esto se envía a la terminal de la grafica un cluster compuesto de valores escalares donde cada valor es una trazo a graficar. La figura 4.4 muestra un ejemplo de un registrador de forma de onda múltiple. Facultad de Ingeniería UACH
89
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Fig. 4.4. Conexión de una gráfica Waveform Chart en el diagrama de bloque para trazo múltiple.
De nuevo la grafica utiliza la configuración por default y asigna colores diferentes a cada una de las variables numéricas conectadas en esta. 4.1. 5. Trazos Múltiples Apilados.
La figura 4.5 muestra un ejemplo de una gráfica Waveform Chart configurada para mostrar de manera apilada tres señales aleatorias con personalizaciones diferentes
Fig. 4.5. Ejemplo de una gráfica Waveform Chart personalizada.
Facultad de Ingeniería UACH
90
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
4.1.6. Consideraciones para el uso de Waveform Chart.
El uso de las gráficas Waveform Chart resulta, como se ha visto hasta aquí, muy sencillo y amigable, sin embargo, este tipo de gráficas tiene algunas restricciones de uso. Como primer consideración, debemos tomar en cuenta que la actualización del área gráfica en cada valor que se grafica da como resultado una muy baja velocidad de graficación, por lo cual este tipo de gráficas no es recomendable en el caso de trabajar con señales dinámicas o de altas frecuencias. Solo se recomienda su uso en aplicaciones para la graficación de señales lentas como puede ser el caso de variables industriales (temperatura, nivel, flujo, presión, etc.). Otra consideración importante para el uso de esta gráfica es que los valores correspondientes al eje X representan el número consecutivo del valor graficado (muestra) y se encuentran uniformemente distribuidos.
Ejercicio 4.1 Uso de las gráficas Waveform Chart
1. Crear un programa para simular el monitoreo de un proceso industrial. El proceso consiste en tres variables a monitorear: temperatura, flujo y nivel. 2. Simule la generación de una señal de temperatura que varía aleatoriamente entre 50 y 70 grados, mostrar su gráfica en forma de línea continua. 3. Active un indicador de alarma si la temperatura sube de 65 grados 4. Simule la generación de una señal de flujo que varía aleatoriamente entre 20 y 25 litros/segundo, mostrar su gráfica en forma de histograma de barras. 5. Active un indicador de alarma si el flujo baja de 21 litros/segundo. 6. Simule la generación de una señal de nivel que varía aleatoriamente entre 45 y 50 centímetros, mostrar su gráfica en forma de puntos de dispersión. 7. Active un indicador de alarma si el nivel sube de 48 centímetros 8. Personalice la grafica para mostrar los trazos apilados, con distinto color de fondo, rejillas activadas y 50 lecturas por gráfica (vea la figura 4.5). 9. Simule una lectura cada 3 segundos. 10. Detenga el programa si el usuario presiona un botón de paro en el panel o si las tres alarmas se activan simultáneamente. 11. Ejecute su programa 12. Guarde el VI como Waveform Chart .vi 4.2. Gráfica de Forma de Onda (Waveform Graph) Facultad de Ingeniería UACH
91
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Cuando se requiere graficar señales dinámicas (que contienen altas frecuencias) el uso de los registradores de forma de onda (Waveform Chart) resulta inadecuado debido a su baja velocidad de graficación. Sin embargo, LabVIEW cuenta con otro tipo de gráfica más adecuada para este tipo de señales: la gráfica de forma de onda (Waveform Graph). A diferencia de la Waveform Chart que grafica los datos uno a uno conforme son enviados a la gráfica, la Waveform Graph recibe los datos en forma de un arreglo numérico, mostrando en la gráfica en un solo paso el trazo completo de la forma de onda recolectada. La gráfica Waveform Graph está localizada en la paleta Controls» Modern» Graph, como se muestra en la figura 4.6. Este tipo de gráfico de forma de onda traza solamente funciones de una sola variable, como en y = f(x), con puntos distribuidos uniformemente a lo largo del eje x, tal como formas de onda adquiridas con tiempo variable.
click click
Fig. 4.6. Ubicación de una gráfica Waveform Graph en el panel frontal.
4.2.1. Trazo Simple
Por default las gráficas de forma de onda aceptan un solo arreglo de valores e interpreta los datos como puntos en el gráfico que incrementa el índice x por uno comenzando en x = 0. La figura 4.7 muestra el ejemplo de una gráfica de 100 números aleatorios entre 0 y 1 utilizando una Waveform Graph. Nótese que los valores del arreglo son interpretados como Facultad de Ingeniería UACH
92
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
valores para la coordenada y (amplitud) mientras que los valores correspondientes a la coordenada x (tiempo) son asignados automáticamente con x0=0 y x=1.
Fig. 4.7. Uso de una gráfica Waveform Graph para trazo sencillo con x0=0 y x=1.
Cuando las condiciones de adquisición de la forma de onda a graficar son diferentes de los valores tomados por default, por ejemplo para una señal que inicia en x0=10 y cuyas muestras fueron tomadas cada x=5. Toda esta información se puede enviar a la grafica en forma de un cluster compuesto de tres elementos: el primero es un valor numérico que representa el valor inicial x0, el segundo es otro valor numérico que representa el incremento x, y el tercero es el arreglo de valores de y a graficar. La figura 4.8 muestra el ejemplo de graficación de una forma de onda bajo las condiciones antes descritas.
Fig. 4.8. Uso de una gráfica Waveform Graph para trazo sencillo con x0=10 y x=5.
Facultad de Ingeniería UACH
93
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
El primer valor graficado de x aparecen en x=10 y el eje X se re-escala para representar adecuadamente los incrementos de x=5 en cada valor graficado. 4.2.2. Trazo- Múltiple
Los gráficos de forma de onda también aceptan trazos múltiples, esto se hace a través de un arreglo bidimensional de valores, en donde cada renglón del arreglo representa una forma de onda independiente a graficar. Por default, al igual que en trazo sencillo, la gráfica interpreta los datos de cada arreglo como los valores y en la gráfica e incrementa el índice x por uno, comenzando en x = 0. La figura 4.9 muestra el ejemplo de un a grafica Waveform Graph utilizada para graficar simultáneamente tres formas de onda independientes con los valores por default de x0=0 y x=1 en las tres señales.
Fig. 4.9. Uso de una gráfica Waveform Graph para trazo múltiple
con x0=0 y x=1.
En el caso de las gráficas de forma de onda de trazos múltiples también es posible especificar condiciones diferentes a las asumidas por default para cada uno de los arreglos de datos. Para ello se define un cluster, igual que en trazo sencillo, para cada una de las formas de onda y luego se agrupan como un arreglo de clusters que se envía a la gráfica. La figura 4.10 muestra un ejemplo de una gráfica Waveform Graph para trazo múltiple con condiciones diferentes a x0=0 y x=1.
Facultad de Ingeniería UACH
94
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Fig. 4.10. Uso de una gráfica Waveform Graph para trazo múltiple
con condiciones diferentes.
4.2.3. Personalización de las Gráficas
Las graficas de forma de onda también se pueden personalizar de manera similar a los registradores de forma de onda seleccionando Properties del menú emergente al hacer click derecho sobre esta, como se muestra en la figura 4.11,
Fig. 4.11. Ventana de configuración para personalizar una gráfica Waveform Graph.
Facultad de Ingeniería UACH
95
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
4.2.4. Consideraciones para el uso de Waveform Graph.
Debido a su capacidad de graficar arreglos previamente generados, este tipo de gráficas (Waveform Graph) resultan muy útiles para la visualización de señales dinámicas o con contenido de altas frecuencias. Sin embargo, aunque las gráficas de forma de onda nos proporcionan un poco de flexibilidad sobre las representación de los valores graficados en el eje X, al permitirnos definir un valor inicial y un incremento, aún presentan el inconveniente de que solo se pueden representar formas de onda, señales o información uniformemente distribuida en el eje X, haciendo inviable su uso en la representación gráfica de funciones que no presenten este comportamiento o bien de funciones con dependencia de dos variables f(x,y).
Ejercicio 4.2 Uso de las gráficas Waveform Graph
1. Crear un programa para la simulación de una señal con adición de ruido y de un filtro digital pasa bajas para eliminarlo. 2. Simule la generación de una señal senoidal con amplitud igual a ±5 y obtenga un arreglo de 360 muestras que corresponda a un ciclo de la función. La función Sine Pattern para generar un señal de patrón senoidal se encuentra en la sub-paleta de funciones Signal Processing/Signal Generation. 3. Simule una señal de ruido blanco y obtenga un arreglo numérico con 180 muestras y amplitud de ±0.05. La función Uniform Noise para generar un patrón de ruido blanco se encuentra en la sub-paleta de funciones Signal Processing/Signal Generation. 4. Grafique ambas señales en una sola grafica iniciando la señal de ruido en la muestra 90. 5. Sume la señal de ruido al patrón senoidal a partir de la muestra 90. 6. Despliegue en una gráfica la señal resultante. 7. Filtre la señal implementando un filtro pasa bajas promediando cinco muestras. 8. Despliegue en una gráfica la señal filtrada. 9. Ejecute su programa 10. Guarde el VI como Waveform Graph.vi
Facultad de Ingeniería UACH
96
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
4.3. Gráfica X-Y (XY Graph)
Cuando se requiere graficar funciones que no han sido muestreadas uniformemente o bien que no tienen un comportamiento uniforme y progresivo en alguno o ambos ejes, se debe utilizar las graficas x-y (XY Graph). Este tipo de graficas exhiben cualquier set de puntos, ya sea que estos sean muestreados uniformemente o no. La figura 4.12 muestra la ubicación de la grafica x-y en la paleta de controles del panel frontal.
click
click
Fig. 4.12. Colocación de una gráfica XY Graph en el panel frontal.
4.3.1. Trazo Simple
Para realizar el trazo simple de una sola señal o función se deben enviar a la gráfica las coordenadas (x,y) de todos los puntos a graficar, este envío de realiza a través de un cluster que contenga dos arreglos: un arreglo con todas las coordenadas x y un arreglo con todas las coordenadas y. Los elementos de los arreglos son tomados uno a uno para formar los puntos correspondientes (x0,y0), (x1,y1), (x2,y2), etc. La figura 4.13 muestra un ejemplo de graficación de trazo simple utilizando una grafica x-y en el cual se grafican los puntos: (1,1), (8,2), (5,9) y (1,3). Los arreglos X y Y proporcionados desde el panel se empaquetan en un cluster para ser enviados a la gráfica.
Facultad de Ingeniería UACH
97
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Fig. 4.13. Uso de una gráfica XY Graph para trazo simple.
4.3.2. Trazo Múltiple
Para realizar un trazo múltiple de señales o funciones en una gráfica x-y cada señal independiente se empaqueta en un cluster igual al correspondiente a un trazo simple y luego se construye un arreglo con estos clusters, entonces la grafica x-y recibe un arreglo de clusters donde cada cluster es un trazo diferente. La figura 4.14 muestra un ejemplo de graficación de trazo simple utilizando una grafica x-y en el cual se grafican: plot 0=[(1,1), (8,2), (5,9) y (1,3)] y plot 1=[(2,2), (7,3), (7,8) y (0,4)].
Fig. 4.14. Uso de una gráfica XY Graph para trazo múltiple.
4.3.3. Personalización de las Gráficas Facultad de Ingeniería UACH
98
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
Las graficas de forma de onda también se pueden personalizar de manera similar a los registradores de forma de onda seleccionando Properties del menú emergente al hacer click derecho sobre esta, como se muestra en la figura 4.15.
Fig. 4.15. Ventana de configuración para personalizar una gráfica Waveform Graph.
4.3.4. Consideraciones para el uso de XY Graph.
Las gráficas x-y permiten la graficación de cualquier función expresada en forma de coordenadas (x,y), lo cual las convierte en un tipo de grafica más universal que los anteriores, Sin embargo, precisamente por requerir enviar las coordenadas de cada punto separadas en dos arreglo dentro de un cluster, su uso se torna un poco más complicado.
Ejercicio 4.3 Uso de las gráficas XY Graph
1. Crear un programa para la simulación de Curvas de Lissajous. 2. Genere dos señales senoidales con frecuencia, amplitud, y fase variables. Utilice la función express Simulate que se encuentra en la sub-paleta de funciones Signal Processing/Waveform Generation. 3. Grafique ambas señales en gráficas independientes. 4. Utilice la función Convert form Dinamic Data ubicada en Express/Signal Manpulation para convertir el tipo de variable dinámica a un arreglo numérico.
Facultad de Ingeniería UACH
99
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Graficación de Datos
5. Envíe ambas señales a una grafica x-y utilizando una de ellas como arreglo de coordenadas x y la otra como arreglo de coordenadas y. 6. Ejecute su programa 7. Varíe los parámetros de ambas señales y observe la grafica resultante 8. Guarde el VI como XY Graph.vi
Facultad de Ingeniería UACH
100
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Unidad V. HERRAMIENTAS DE PROGRAMACION. 5.1. VARIABLES LOCALES
De acuerdo al paradigma de la programación por flujo de datos dos o más fuentes de datos no pueden alambrarse juntas ya que esto genera un error de sintaxis. Esto implica un problema cuando se requiere asignar en distintas partes del programa a una misma terminal datos diferentes generados en fuentes independientes. Por ejemplo, si la lógica de nuestro programa requiere hacer una asignación a un indicador x asignando primero x=a, luego x=b y finalmente x=c, donde a, b y c son datos diferentes generados en fuentes independientes. De igual manera evaluar la expresión x=x+1 resulta complicado si no se quiere utilizar algún tipo de ciclo con registros de corrimiento o nodos de retroalimentación. La solución a estos inconvenientes la dan la generación de variables locales. Las variables locales son terminales asociadas a los controles e indicadores, a través de las cuales podemos leerlos o escribirlos sin utilizar la terminal propia del elemento en cuestión. 5.1.1. Creación de una Variable Local.
Existen dos maneras de crear una variable local. La más sencilla consiste en crearla de manera automática a través del menú emergente ( popup) del control o indicador se quiere manejar a través de la variable local. Para ello se debe seleccionar en el menú de popup las opciones Create/Local Variable, como se muestra en la figura 5.1. Esto genera una terminal de variable local asociada al control o indicador. Esta terminal es del mismo tipo de variable que tenga definido el elemento que la generó y está identificada con el mismo nombre. Para un mismo elemento (control o indicador) se pueden crear tantas terminales de variable local como sean necesarias.
Fig. 5.1. Creación automática de una terminal de variable local.
Facultad de Ingeniería UACH
101
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
La otra manera de crear una variable local es un poco más larga y consiste de dos pasos: primero se crea una terminal genérica de variable local y luego se le asigna el elemento al que va a estar asociada. Para realizar el primer paso en el diagrama a bloques se selecciona Local Variable de la sub-paleta Programming/Structures, tal como se muestra en la figura 5.2. click
Fig. 5.2. Ubicación de la terminal genérica para variable local.
Luego, para asociar esta terminal genérica con alguno de los controles o indicadores del panel se accesa el menú emergente y se selecciona el nombre del elemento de una lista de todos los elementos del panel a través de la opción Select Item como se muestra en la figura 5.3.
Fig. 5.3. Asociación de la terminal genérica de variable local con el elemento deseado.
Facultad de Ingeniería UACH
102
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
5.1.2. Uso de las variables locales.
El escribir en una variable local tiene el mismo resultado que pasar los datos directamente a la terminal del control o indicador asociado, con la ventaja de que se puede escribir o leer el elemento sin importar que se trate de un control o un indicador. Por default, las terminales de variables locales están habilitadas para escribir en ellas (asignar valor). Sin embargo, si lo que se quiere es leer el valor actual del elemento asociado, entonces se debe cambiar la terminal a modo de lectura seleccionando Change to Read del menú emergente de la terminal como se muestra en la figura 5.4.
Fig. 5.4. Cambio de la terminal de variable local a modo de lectura.
Las terminales de variable local permiten leer y/o escribir las veces que sea necesario cualquier control o indicador del VI en cualquier momento y lugar dentro del programa lo cual le da a LabVIEW una gran capacidad de programación. Sin embargo, debido al hecho de que su uso dificulta la visualización del flujo de datos en el programa, es recomendable no abusar de su uso.
Ejercicio 5.1 Uso de las variables Locales
1. Desarrollar de nuevo el ejercicio 3.11 omitiendo el uso de registros de corrimiento o nodos de retroalimentación. 2. Resolver el problema usando variables locales. 3. Ejecute su programa 4. Guarde el VI como Variables Locales.vi
Facultad de Ingeniería UACH
103
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
5.2. VARIABLES GLOBALES
Cuando se requiere compartir datos entre programas (VIs) independientes, la opción más viable es el uso de variables globales. Las variables globales permiten leer y escribir datos que son compartidos por diferentes VIs en ejecución. En realidad las variables globales son una especie de VI que no tiene diagrama a bloques solamente tiene un panel frontal en el cual se definen los controles e indicadores que se utilizarán para transferir datos entre los Vis. En una misma variable global se pueden definir tantos controles e indicadores como sea necesario
5.2.1. Creación de una Variable Global.
Para crear una variable global se selecciona en el diagrama a bloques Global Variable de la sub-paleta Programming/Structures, tal como se muestra en la figura 5.5. Esto genera una terminal genérica para variable global. Para poder utilizar esta terminal en primer lugar es necesario abrir su panel para colocar en el los controles e indicadores que se utilizarán para la transferencia de datos esto se hace seleccionando Open Front Panel del menú emergente como se muestra en la figura 5.6.
click
Fig. 5.5. Ubicación de la terminal de variable global.
Facultad de Ingeniería UACH
104
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Fig. 5.6. Acceso al panel frontal de la variable global.
Luego se colocan en el panel frontal de la variable global los controles e indicadores que se van a utilizar, tal y como se muestra en la figura 5.7.
Fig. 5.7. Controles en el panel frontal de la variable global.
Finalmente se asocia la terminal con uno de los elementos del panel accesando el menú emergente y seleccionando el nombre del elemento de una lista de todos los elementos del panel a través de la opción Select Item como se muestra en la figura 5.8.
Facultad de Ingeniería UACH
105
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Fig. 5.8. Asociación de la terminal genérica de variable global con el elemento deseado.
5.2.2. Uso de las Variables Globales.
Al igual que en caso de las variables locales, por default las terminales de variables globales están habilitadas para escribir en ellas (asignar valor). Sin embargo, si lo que se quiere es leer el valor actual del elemento asociado, entonces se debe cambiar la terminal a modo de lectura seleccionando Change to Read del menú emergente de la terminal como se muestra en la figura 5.9.
Fig. 5.9. Cambio de la terminal de variable global a modo de lectura.
Facultad de Ingeniería UACH
106
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Ejercicio 5.2 Uso de las Variables Globales
1. Construya un VI que escriba en una variable global el valor introducido por el usuario en una perilla numérica. 2. Construya otro VI que lea la misma variable global y la despliegue en un medidor de aguja. 3. Detenga ambos programas cuando se pulse un botón de paro en cualquiera de los programas. 4. Ejecute ambos programas. 5. Guarde los VIs como Variables Globales 1.vi y Variables Globales 2.vi respectivamente.
5.3. NODOS DE PROPIEDAD
Los nodos de propiedad son una herramienta que nos permite accesar a través de código a muchas de las características configurables que se encuentran en los menús emergentes de los objetos, dando a la programación en LabVIEW una excelente flexibilidad. 5.3.1. Creación de un Nodo de Propiedad
Los nodos de propiedad se crean de manera automática a través del menú emergente (popup) del control o indicador del cual se le llama. Para ello se debe seleccionar la propiedad específica que se quiere accesar en el menú de popup a través de las opciones Create/Property Node, como se muestra en la figura 5.10. Esto genera una terminal de nodo de propiedad asociada a la propiedad específica del control o indicador. Esta terminal está identificada con el mismo nombre del elemento, el nombre de la propiedad aparece en el color correspondiente al tipo de variable que corresponde a dicha propiedad. Para un mismo elemento (control o indicador) se pueden crear tantas terminales de nodo de propiedad como sean necesarias. La lista de propiedades depende del tipo específico de control o indicador.
Facultad de Ingeniería UACH
107
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Fig. 5.10. Creación automática de una terminal de nodo de propiedad.
5.3.2. Uso de los Nodos de Propiedad.
En caso de los nodos de propiedad, por default las terminales creadas están habilitadas para leer de ellas el valor actual de dicha propiedad. Sin embargo, si lo que se quiere es escribir e ellas y con ello cambiar el valor de la propiedad, entonces se debe cambiar la terminal a modo de escritura seleccionando Change to Write del menú emergente de la terminal como se muestra en la figura 5.11.
Facultad de Ingeniería UACH
108
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Fig. 5.11. Cambio de la terminal de nodo de propiedad a modo de escritura.
5.3.3. Acceso a Propiedades Múltiples.
A través de un solo nodo se puede acceder a múltiples propiedades de un mismo elemento, para ello se requiere seleccionar la opción Add Element del menú de popup del nodo, como se muestra en la figura 5.12.
Fig. 5.12. Adición de propiedades a un mismo nodo.
Por default la propiedad adicionada es la misma que la propiedad original que tenía el nodo, para cambiarla se selecciona la nueva propiedad de la opción Properties del menú emergente como se muestra en la figura 5.13. Facultad de Ingeniería UACH
109
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Fig. 5.13. Cambio de propiedades.
Cada una de las propiedades adicionadas al nodo se puede configurar de manera independiente en modo de lectura o de escritura.
Ejercicio 5.3 Uso de los Nodos de Propiedad
1. Construya un VI que escriba el valor de control numérico en un indicador numérico de aguja. Los valores posibles de la perilla son de -10 a 50. 2. Si el valor de la perilla es negativo el indicador debe ser invisible. 3. Si el valor de la perilla es mayor de 40 el indicador debe parpadear. 4. Ejecute su programa. 5. Guarde el VI como Nodos de P ropiedad.vi.
Facultad de Ingeniería UACH
110
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Herramientas de Programación
Ejercicio 5.4 Adicional
1. Programe un instrumento virtual que simule la adquisición de una señal de temperatura que varía de manera aleatoria entre 10 y 50 grados centígrados, simulando una muestra de temperatura cada segundo. 2. Grafique la señal mostrando en la misma gráfica un nivel límite alto y un nivel límite bajo proporcionados desde el panel. 3. Cuando la temperatura salga del rango definido por los límites encienda un indicador de alarma (use solo un indicador para fuera de rango). 4. Al activarse la alarma el control del límite afectado deberá parpadear. 5. El instrumento deberá ir guardando en un archivo la temperatura indicando también el tiempo relativo en que fue registrada (incluir un encabezado en el archivo con su nombre, hora y fecha de inicio de registro). 6. Al terminar el programa deberá calcular la media, desviación estándar, la temperatura máxima y la temperatura mínima registradas, así como el tiempo relativo en que fueron tomadas. 7. Documentar el programa lo más completo posible y dejarlo preparado para usarse como sub-instrumento. 8. Cuide la presentación de la interfaz de usuario 9. Ejecute su programa. 10. Guarde el VI como Monitoreo con Reporte.vi.
Facultad de Ingeniería UACH
111
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Arquitecturas de Programación
Unidad VI. ARQUITECTURAS DE PROGRAMACION. 6. ARQUITECTURAS DE PROGRAMACIÓN
Dependiendo de la funcionalidad requerida por la aplicación existen diversas maneras de estructurar un programa en LabVIEW. Las tres arquitecturas más comúnmente utilizadas son: VI simple, VI general y maquina de estado ( state machine). 6.1. Arquitectura de un VI Simple
Cuando se hacen pruebas de laboratorio rápidas, no se necesita una arquitectura complicada. El programa puede consistir de un solo VI que toma una medición, hace cálculos, y ya sea despliega los resultados o los guarda en el disco, pero en general no existe una estructura de control. La operación inicia cuando el usuario le da click a la flecha de inicio (run arrow), el VI se ejecuta una sola vez y luego termina. Además de ser usada para aplicaciones de prueba, esta arquitectura también es utilizada para desarrollar componentes “funcionales” dentro de aplicaciones más grandes, es decir como subVIs dentro de una aplicación principal. La figura 6.1 muestra un ejemplo de un programa con arquitectura de VI simple utilizado para efectuar un cálculo de conversión de grados Centígrados a grados Fahrenheit
Fig. 6.1. Arquitectura de un VI simple.
Ejercicio 6.1 Desarrollo de un VI Simple
1. Utilizando la arquitectura de un VI simple desarrolle un sub-instrumento virtual para realizar una conversión de grados Fahrenheit a grados Centígrados. 2. Ejecute y pruebe el programa 3. Guárdelo como VI Simple.vi
Facultad de Ingeniería UACH
112
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Arquitecturas de Programación
6.2. Arquitectura de un VI General
A diferencia de un VI simple, un Vi general si cuenta con una estructura de control propia. Generalmente este tipo de arquitectura se utiliza para el desarrollo de programas de aplicación final. Para el diseño de programas con esta arquitectura se realizan tres pasos: •
Inicio (startup)
Esta área se usa para inicializar el hardware, leer información de configuración, preguntar al usuario la localización de archivos o cualquier otro procedimiento de inicialización que sea necesario. •
Aplicación Principal (main application)
Generalmente consiste de por lo menos un ciclo que se repite hasta que el usuario decida salir del programa, o el programa termina debido a otras razones. Aquí es donde se realiza la mayor parte de la lógica del programa y se resuelve el problema de la aplicación de este. •
Apagado (shutdown)
Esta sección usualmente se encarga de cerrar los archivos, escribir datos de configuración al disco, restablecer los datos de entrada/salida (I/O) a su estado predeterminado o cualquier otro procedimiento de apagado que sea necesario La figura 6.2 muestra el ejemplo de un programa de LabVIEW con arquitectura de VI General. Nótese que los procesos de inicialización y apagado se han compactado como subVIs y la secuencia de ejecución se establece a través de la dependencia generada por la conexión de un cluster de error.
Fig. 6.2. Arquitectura de un VI general.
Facultad de Ingeniería UACH
113
Dr. Gerardo Trujillo Schiaffino
TSIB: Programación por Flujo de Datos
Arquitecturas de Programación
Para algunas aplicaciones sencillas, el ciclo de la aplicación principal puede ser bastante directo. Sin embargo, cuando se tiene interfaces de usuario complejas o eventos múltiples (acción de usuario, accionamientos de entradas/salidas, etc.), esta sección puede volverse bastante complicada.
Ejercicio 6.2 Desarrollo de un VI General
1. Utilizando la arquitectura de un VI general desarrolle un programa que evalúe una función trigonométrica seleccionada por el usuario (seno, coseno, tangente) desde un valor inicial hasta un valor final (en grados) y con un incremento también definido por el usuario 2. En la etapa de inicialización lea los parámetros para la evaluación 3. En el ciclo principal evalúe y grafique la función 4. En la etapa de apagado guarde en archivo los valores obtenidos en la evaluación. 5. Ejecute y pruebe el programa 6. Guárdelo como VI General.vi
6.3. Arquitectura de un VI de Maquina de Estado
Usted puede hacer sus diagramas más compactos con el uso de una estructura de caso simple para manejar todos sus eventos. En este modelo usted escanea ( scan) la lista de posibles eventos, o estados, y luego correlaciona ( map) estos a un caso. Para el VI mostrado arriba, los estados posibles son inicio (startup), ocio (idle), evento 1, evento2 y apagado (shutdown). Estos estados se encuentran guardados en una constante enumerada. Cada estado tiene su propio caso en el lugar que usted coloque los nodos apropiados. Mientras se ejecuta un caso, el siguiente caso es determinado por el resultado actual. El siguiente caso que se ejecutará es guardado en el registro de desplazamiento ( shift register ). Si ocurre un error en cualquier estado, el caso de apagado ( shutdown) es llamado. La ventaja de este modelo es que su diagrama se puede reducirse significativamente (izquierda a derecha), haciendo que sea más fácil de lee y depurar. Una desventaja de la estructura de secuencia es que no puede saltarse o salirse de un caso. Este método resuelve ese problema ya que cada caso determina cual será el próximo caso que se ejecutara. Una desventaja de esta técnica es que con se pueden perder eventos. Si dos eventos ocurren al mismo tiempo, este modelo maneja solo el primero, y el segundo se pierde. Esto puede conducir a errores que son difíciles de depurar porque solo ocurren ocasionalmente. Existen versiones más complejas de la Arquitectura del VI de la Maquina de Estado que contiene código extra para construir un queue de eventos (estados) de manera que usted no pierda ningún evento. Facultad de Ingeniería UACH
114
Dr. Gerardo Trujillo Schiaffino