SlideShare una empresa de Scribd logo
1 de 248
Descargar para leer sin conexión
Instituto gfghf                                                 Instituto Superior Politécnico

                     CUJAE
                  Automática y Computación
                                                                 "José Antonio Echeverría",
                                                                CUJAE, Marianao, Ciudad
                                                                Habana, Apdo. Postal 19390,
                                                                   260 6778 , 260-2055
                                                                   / FAX: 267 29 64




PROGRAMACIÓN EN LABVIEW. PROGRAMACIÓN EN LENGUAJE “G”. TIPOS DE DATOS
SIMPLES Y COMPLEJOS. ESTRUCTURAS DE CONTROL DE FLUJO. TRABAJO CON
FICHEROS, TRABAJO CON TARJETAS DE ADQUISICIÓN DE DATOS, PUERTO SERIE Y
PARALELO, TCP-IP Y DDE.




Monografía elaborada por Dr. Valery Moreno Vega y Msc. Adel Fernández Prieto para el curso
de Instrumentación Virtual dictado dentro de la asignatura Automática III en la carrera de
Automática de la Facultad de Ingeniería Eléctrica del ISPJAE.

Direcciones de Contacto:
Email:
valery@electrica.cujae.edu.cu   y adel@electrica.cujae.edu.cu
Teléfonos: 2663342, 2602055.


1ra Versión Revisada en Abril 2005.
Departamento de Automática y Computación                                    18/11/2006


Indices


Índice                                                                         1
Introducción                                                                   2
Tema I Conceptos básicos                                                       4
Tema II LabVIEW básico                                                         9
Tema III Tipos de datos simples                                                29
Tema IV Control de flujo de programa en LabVIEW. Estructuras repetitivas.      55
Tema V Más estructuras de control de flujo.                                    79
Tema VI Tipos de datos complejos. arreglos y clusters                          95
Tema VII Controles forma de onda. implementación de funciones en LabVIEW       117
Tema VIII Trabajo con ficheros                                                 142
Tema IX. Tarjetas de adquisición de datos (PCL-818L).                          161
Tema X Trabajo con puerto serie en LabVIEW                                     200
Tema XI Trabajo con puerto paralelo en LabVIEW                                 213
Tema XII Comunicación TCP-IP en LabVIEW                                        221
Tema XIII Comunicación DDE                                                     235




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                   1
Departamento de Automática y Computación                                        18/11/2006


Introducción:

En esta monografía el lector encontrará una introducción a algunos temas relacionados con la
instrumentación virtual y específicamente sobre la herramienta de programación LabVIEW.
Los temas abordados comprenden:

       1. LabVIEW básico
             a. Los Instrumentos virtuales.
             b. Los conceptos de control e indicador.
             c. El ambiente de desarrollo.
             d. Tipos de datos simples.
             e. Estructuras de control de flujo.
             f. Tipos de datos complejos.
             g. Confección de funciones (subVI).
             h. Trabajo con ficheros.
       2. LabVIEW avanzado
             a. Trabajo con tarjetas de adquisición de datos.
             b. Trabajo con puerto serie y paralelo.
             c. Trabajo con TCP-IP.
             d. Trabajo con DDE.

El primer tema es necesario como introducción a cualquier lenguaje de programación, y en el
mismo se abordan los conceptos en que se basa la programación gráfica.

Es de destacar que en la programación gráfica todo esta muy ligado a la iconografía con que
se representan los diferentes elementos. Un lector que esté acostumbrado a los lenguajes por
comandos, llega a identificarse con las palabras claves que forman determinado lenguaje, por
ejemplo: un for, int, switch en C++, sin embargo, con LabVIEW este concepto cambia, para
ahora asociar una forma o icono en vez de un conjunto de caracteres con las palabras claves.

LabVIEW es un lenguaje de programación construido sobre la base de objetos, sin embargo no
es posible construir nuevos objetos, como pudiera hacerse con otros lenguajes como C++,
Java, Pascal etc, es por ello que la manera de construir aplicaciones es a través de una
metodología de programación estructurada, utilizando como recurso la implementación de
funciones, que en este caso se denominan “SubVI”.

El presente trabajo comienza con una breve explicación de los conceptos básicos relacionados
con esta herramienta de trabajo, para luego exponer la totalidad de los temas mediante
ejercicios resueltos, que el lector puede realizar desde su computadora personal o laboratorio.
De esta manera se introducen los tipos de datos, las sentencias de control de flujo y la
biblioteca de funciones básica y especializada, a través de ejemplos. También a lo largo de
estos temas se proponen ejercicios como estudio independiente.

El segundo tema que aquí hemos denominado como LabVIEW avanzado, no incluye ni mucho
menos todos los temas que por este nombre pudieran estar. Simplemente nos a parecido que
se salen del modulo básico de esta herramienta. Es de destacar que el trabajo con las tarjetas
de adquisición de datos se realiza basado en la PCL-818L, esta es solo una, de muchísimas
variantes que existen actualmente en el mercado, sin embargo, el estudio detallado que se
hace de la misma, y la metodología de diseño de su controlador, nos parece un punto de
partida práctico que puede ser utilizado por los interesados para generalizarlo a tarjetas de
otros fabricantes.

Quedan fuera temas tan interesantes como el estudio de las funciones de análisis matemático,
el uso de filtros para señales de entrada. Además, el estudio de los DataSockets que se basan
en el protocolo TCP-IP. También el trabajo con OLE/Active X y la conexión con Bases de Datos
profesionales.

Sin embargo, ya el volumen de esta edición es suficiente mente largo. Es de destacar que su
estructura esta completa, siguiendo una secuencia donde lo aprendido sirve de base a lo que
se aprende y donde ningún concepto queda fuera de lo que se ha abordado anteriormente.



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           2
Departamento de Automática y Computación                                        18/11/2006



Esta edición un poco abre una primera puerta a la escasez de bibliografía que existe alrededor
del Lenguaje de programación LabVIEW. Sabemos que estos lenguajes son susceptibles de
actualizaciones, pero también el hecho de que los temas abordados son los suficientemente
básicos, incluyendo aquellos que se denominaron como avanzados, nos da suficiente paz,
como para pensar que este volumen se pueda utilizar por algunos años, no diez o veinte, pero
si hasta tres años.

Esperamos disfrute y encuentre útil esta monografía. Es ese el deseo de los autores.



                                                                              Los autores.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           3
Departamento de Automática y Computación                                          18/11/2006



TEMA I Conceptos Básicos

Primeramente antes de entrar en que es el LabView vamos a conocer nuevos conceptos
acerca de la Instrumentación Virtual. Semánticamente virtual es algo aparente, que no es real
pero que se comporta como tal. En la actualidad se manejan términos como los de
instrumentación virtual, laboratorio virtual, ambientes virtuales, y realidad virtual. No se debe
confundir laboratorio virtual con instrumento virtual aunque existe una estrecha relación. Se
habla de laboratorio virtual cuando se simula un proceso o sistema que se parece y se
comporta como un proceso o sistema real, para poder observar su comportamiento. Se habla
de instrumento virtual cuando se emplea la computadora para realizar funciones de un
instrumento clásico pudiendo agregarle al instrumento otras funciones a voluntad. A pesar de
esta pequeña diferencia, un laboratorio con instrumentos virtuales es un laboratorio virtual.

En el campo de la instrumentación quien introdujo por primera vez el termino virtual fue la
compañía National Instrument en 1986, al elaborar un programa que de manera simple y
gráfica permitiera simular un instrumento en una PC, con lo cual dio origen al concepto de
instrumento virtual; definido como “un instrumento que no es real, corre en una computadora y
tiene funciones definidas por programación”. El instrumento tradicional ya está definido, con
capacidades de entrada/salida de señales y una interfaz de usuario fija. El fabricante define la
funcionalidad del instrumento, el usuario no puede cambiarla. Dada la arquitectura abierta de
los PCs y las estaciones de trabajo, la funcionalidad de los instrumentos virtuales esta definida
por el usuario. Además, la capacidad de procesamiento de los instrumentos virtuales es
superior a la de instrumentos estándares, debido a la rápida evolución de la tecnología de los
PCs y de las estaciones de trabajo como resultado de las grandes inversiones que se efectúan
en la industria.

En 1986 National Instruments introdujo LabView 1.0 con el propósito de proveer una
herramienta de software que permitiera a los ingenieros desarrollar sistemas a la medida de
sus necesidades, del mismo modo que la hoja de cálculo permitía a los hombres de negocios
analizar datos financieros. Este nombre LabView viene de las siglas en ingles Laboratory
Virtual Instrument Engineering Workbench.

La versión del LabView 6.1 y los requerimientos mínimos son:
            1. 32 MB de RAM y 65 MB de HD / Parcial, 300MB Completa.
            2. Incluye Windows NT 4.0 o superior

¿Que es el LabView?.

El LabView es un programa para el desarrollo de aplicaciones de propositos generales, tales
como el C, el Basic, el Pascal.



         Herramientas de Desarrollo de Software




     Ambiente de                                + Lenguaje de
     desarrollo                                       Programación
                                   Figura1: Esquema general



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                             4
Departamento de Automática y Computación                                        18/11/2006


Ambiente de Desarrollo

Todo ambiente de desarrollo testa formado por los siguientes elementos. Es importante que se
busque y se practiquen con frecuencia ya que esto permite que el desarrollo de las
aplicaciones se realice con mayor rapidez y calidad.

Depuración
   • Puntos de ruptura.
    •   Ejecución paso a paso.
    •   Ventana de seguimiento a variables
Facilidades de desarrollo
    •   Panel frontal: Para observar el estado de las pantallas que estamos desarrollando.
    •   Paletas de funciones y controles para adicionar a nuestro proyecto.
    •   Herramientas para alinear los controles y funciones.

Lenguaje de Programación.


LabVIEW usa el lenguaje de programación gráfico Lenguaje G. Las posibilidades son
normalmente las mismas que presenta cualquier lenguaje de programación:

        Sentencias (Gráficos) de control de Flujo y repetitivas.
        Posibilidad de declaración de variables.
        Modularidad a través de la confección de funciones. Trabajo con los eventos y
   propiedades de los controles y variables.
        Incluye bibliotecas de funciones extendidas para cualquier tarea de programación.
        Basado en objetos pero no permite nuevas declaraciones.
        Mecanismos de conexión con lenguaje C y C++ y DLL.

Algo muy característico de LabVIEW y es por ello que se considera una herramienta para el
desarrollo de instrumentos virtuales, es su extensa biblioteca de funciones especializada en la
adquisición, acceso a buses de campo, procesamiento matemático y procesamiento de señales

        Tarjetas de adquisición de datos
        Bus GPIB.
        Entrada/ Salida (Puerto serie y paralelo). Arquitectura VISA.
        Análisis de señales.
        Almacenamiento de datos.
        Comunicación (TCP-IP, UDP y otros).
        Matemáticas.

¿Cómo se trabaja con el LabVIEW?

Los programas en LabVIEW son llamados Instrumentos Virtuales (y son salvados con la
extensión .VI).

Los programas de LabVIEW constan de un panel frontal y un diagrama de bloques. En el panel
frontal se diseña la interfaz con el usuario, viene a ser la cara del VI y en el diagrama de
bloques se programa en lenguaje G el funcionamiento del VI.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           5
Departamento de Automática y Computación                                       18/11/2006




      Programas de LabView (*.vi)



 Panel Frontal                            +      Diagrama Bloques

 • Diseño de interfaz                            • Lenguaje G
 • Cara del                                      • Lógica del programa
 instrumento virtual

El Panel Frontal

El panel frontal de un VI es una combinación de controles e indicadores. Los controles son
aquellos elementos que entregan datos al diagrama en bloques desde el panel frontal por
entrada desde teclado o con el mouse, simulan los dispositivos de entrada de datos del VI y
pasan los datos al diagrama en bloque del VI. Los indicadores son aquellos elementos que
entregan datos al panel frontal desde el diagrama en bloques para ser visualizados en el
display, simulan los dispositivos de salida de datos del VI que toman los datos desde el
diagrama en bloque del VI.
Para adicionar controles o indicadores al panel frontal se seleccionan estos de la paleta de
controles que se encuentra en una ventana flotante y a la cual se accede a través de accionar
el botón derecho del ratón sobre el panel frontal. A los controles e indicadores se les puede
cambiar el tamaño, la forma, y la posición, además cada control o indicador tiene un pop-up
menú en el cual se pueden cambiar varios atributos o seleccionar diferentes opciones.

Los controles:
       Entregan datos al diagrama en bloques por mediación del teclado o el ratón,
       Simulan dispositivos de entrada de datos del VI




Los indicadores
        Muestran datos en el panel frontal desde el diagrama en bloques para ser visualizados
        Simulan los dispositivos de salida de datos del VI.




El Diagrama en Bloques


Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          6
Departamento de Automática y Computación                                        18/11/2006


       La ventana Diagrama almacena el diagrama en bloques del VI, el código fuente gráfico
       (Lenguaje G) del Instrumento Virtual.

       Se construye este diagrama con bloques funcionales denominados nodos,
       conectándose o uniéndose entre sí según sea el objetivo.

       Estos nodos realizan todas las funciones específicas necesarias para el VI y controlan
       el flujo de la ejecución del VI.

Tipos de Datos en LabView

                             Tabla 3.1 Tipos de Datos en LabView
Long                    I32      32 (4 bytes)              -2147483648 hasta 2147483647
Word                    I16      16 (2 bytes)              -32768 hasta 32767
Byte                    I8       8 (1 bytes)               -128 hasta 127
Long Unsigned           U32      32 (4 bytes)              0 hasta 4294967295
Word Unsigned           U16      16 (2 bytes)              0 hasta 65535
Byte Unsigned           U8       8 (1 bytes)               0 hasta 255
Extended                EXT      96 (12 bytes)             -1.00E–507 hasta 9.00E+515
Double                  DBL      64 (8 bytes)              -5.00E-324 hasta 1.70E+308
Single                  SGL      32 (4 bytes)              -1.40E-45 hasta 3.40E+38
Complex Extended        CXT      192 (24 bytes)            -1.00E–507 hasta 9.00E+515
Complex Double          CDB 128 (16 bytes)                 -5.00E-324 hasta 1.70E+308
Complex Single          CSG 64 (8 bytes)                   -1.40E-45 hasta 3.40E+38
Cadena(String)          abc      1 byte/caracter           Conjunto de Caracteres ascii.
Arreglos(Array)         [...]    Según el tipo de los elementos del arreglo
Grupos (Cluster)
Path
Device


¿Cómo se declaran los tipos de variables numéricas ?

   •   Cuando se pone un control o indicador en el panel frontal, LabView pone un terminal
       correspondiente a este control o indicador en el diagrama en bloque.
   •   Este terminal desaparece solo cuando se borra el control o indicador.
   •   Los enlaces o alambres son los caminos de los datos entre los terminales fuente y los
       terminales destino.
   •   No se permite enlazar dos terminales fuentes ni dos terminales destinos, y si se
       permite enlazar un terminal fuente a varios terminales destino.
  Configuración                                          Representación




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                              7
Departamento de Automática y Computación                                           18/11/2006



Variables locales

Las variables locales permiten hacer lecturas y escrituras sobre el control o indicador al cual
está asociado.



                                                          // esto es C
                                                          int a = 0 ; //declaración
                                                          a = x +y *z; // escritura
                                                          m = a* c; // lectura




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                                8
Departamento de Automática y Computación                                        18/11/2006


TEMA II LabVIEW Básico

        •      Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseño o
               panel frontal, y la pantalla o ventana de flujo de programa.
        •      Conocer los principales indicadores y botones y las acciones más comunes
               de los mismos.
        •      Conocer las teclas de acceso directo y las principales opciones de la ayuda y
               de la ejecución del programa.

Ejercicio 1:

Elabore un programa en LabView que permita conectar a un termómetro y un tanque dos
controles de sintonía de manera tal que cuando varíen su valor el nuevo adquirido se refleje en
los indicadores tipo termómetro y en el tipo tanque.

Solución:

Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente:




En esa pantalla podemos seleccionar varias opciones entre las cuales están el abrir un nuevo
Intrumento Virtual (New VI), abrir uno ya existente, buscar ejemplos, demos, tutoriales, etc.

Para crear un nuevo programa (VI) damos clic en el botón                                   . A
continuación aparece una ventana simular a la que se presenta a continuación:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           9
Departamento de Automática y Computación                                       18/11/2006




La primera pantalla que aparece es el panel frontal o ventana de diseño de la aplicación
mientras que la que aparece en segundo plano es la ventana de flujo de programa o de
diagrama. Recuerde que puede conmutar entre uno y otro. Compruébelo con la combinación
Ctrl+E. Muchas veces es conveniente organizar las dos ventanas de forma tal que se dividan la
pantalla cada una en una mitad. Esto facilita el desarrollo del programa. Para lograr dicha
distribución LabView dispone de la combinación Ctrl+T (también se puede realizar mediante la
opción del menú Windows/Tile Left and Right). Una vez que se realiza esta acción se obtiene la
siguiente distribución:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         10
Departamento de Automática y Computación                                    18/11/2006




Ya estamos listo para comenzar a darle solución al ejercicio.

Primero seleccionemos los controles que podremos. Para ello seleccionamos mediante un clic
la ventana izquierda (panel frontal) y a continuación damos clic derecho. Debe aparecer un
menú emergente llamado controls. Seleccionamos en controls la primera de las opciones,


que se llama numerics y se representa en el menú controls con el símbolo       . Aparecerá
algo similar a:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                     11
Departamento de Automática y Computación                                     18/11/2006




Observe que en ambas ventanas, la de Controls y la Numeric, en el caption de las mismas
aparece el nombre de la ventana precedido de una especie de tachuela, o sea,          . Este
símbolo aparece aquí porque si queremos dejar la ventana fija (para evitar que cada vez que
se quiera poner un nuevo control tengamos que dar clic derecho y buscar la opción que nos
interesa) podemos hacerlo cambiando el ¨estado¨ de la tachuela dando clic encima de ella.
Como en esta aplicación vamos a ubicar más de un control y algunos indicadores, dejemos fija
la ventana de Numeric. Si se procede a ubicar el puntero del mouse en la tachuela que
aparece justo antes de numeric en el caption de la ventana del mismo nombre se observa que
dicha tachuela cambia de posición o forma:




y si en ese momento damos clic obtenemos:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                       12
Departamento de Automática y Computación                                        18/11/2006




Los controles tipo sintonía son los que se identifican por knob y dial. Son los primeros que
aparecen en la tercera fila de la pantalla anterior. Para incorporarlos a nuestro panel frontal
simplemente los seleccionamos (el tipo de cursor debe ser el de selección que se comentó en
conferencia) que es el que por defecto debemos tener en estos momentos. Si no es ese el que
tenemos podemos cambiarlo visualizando la ventana de herramientas (opción windows/Show
Tools Palette) y seleccionando el mencionado tipo de cursor. El procedimiento se muestra en
las dos ventanas siguientes (el cursor seleccionado aparece “hundido” en comparación con el
resto:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          13
Departamento de Automática y Computación                                          18/11/2006




Continuando con la idea original de insertar los controles en el panel frontal, seleccionamos los
de tipo sintonía (1ero y segundo de la tercera fila) en la paleta o ventana numeric mostrada en
las figuras precedentes. La selección se realiza dando clic encima del de interés y colocándolo
en el panel frontal (de la forma usual con que se hace esto en lenguajes visuales como el C++
Builder).
Después de realizada la operación las pantallas deben tener una apariencia como sigue (se
muestra el segmento de interés de las ventanas):




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            14
Departamento de Automática y Computación                                          18/11/2006




        y:




Note que a medida que se introducen los controles en el panel frontal en la pantalla de
diagrama (figura anterior) van apareciendo variables asociadas a los controles. Dichas
variables se identifican con un nombre (el mismo del control, de manera que si se cambia en el
control se cambia en la pantalla de diagrama). En dependencia del tipo de elemento numérico
que se seleccione las variables declaradas serán de escritura (fijan valores) o de lectura
(reciben valores). En este caso los controles del panel frontal tienen variables de escritura. Es


Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            15
Departamento de Automática y Computación                                          18/11/2006


fácil identificar cuando una variable es de lectura o escritura pues LabView nos lo indica con
una especie de saeta, que indica la dirección del flujo de los datos. En el ejemplo anterior
ambas variables están representadas con los símbolos             . Note que en dicho símbolo
aparece la saeta indicando salida, o sea, escritura.
En el símbolo anterior también se puede leer la cadena DBL que nos dice de que tipo de datos
es esa variable. Cuando se estudien los tipos de datos simples veremos que este tipo (que por
defecto tienen los controles) es el tipo Double. Los tipos de datos que se definen por defecto
pueden cambiarse. Para ello seleccionamos la variable en la pantalla de diagrama y damos clic
derecho. En el menú emergente que aparece buscamos la opción Representation:




Note que hay varios tipos de datos. El que actualmente está seleccionado aparece encerrado
en un recuadro azul como en la figura anterior. Si se quiere seleccionar otro basta con
seleccionarlo con clic izquierdo. Observe que en dependencia de la variable se podrá
seleccionar para ella distintas representaciones o tipos de datos, pero no todos. En este caso
hay varios tipos de datos que aparecen en gris (los últimos), indicándonos que no se admiten
esos tipos para el actual elemento o control.
Hagamos un cambio, y del tipo DBL por defecto que tiene llevémoslo a U8 que es un tipo de
dato entero corto sin signo (8 bits, de 0 a 255 como posibles valores). Para ello seleccionamos
en el menú de representation el elemento identificado como U8. Los cambios se manifiestan
en la pantalla de diagrama cambiando el color de la variable para indicar el otro tipo (cada tipo
tiene un color). Debemos obtener:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            16
Departamento de Automática y Computación                                            18/11/2006




Note que en el panel frontal la escala del control también cambió para adaptarse al nuevo tipo
de variable (por ejemplo, no tiene valores decimales pues es el control es de tipo entero).
De igual forma (clic derecho sobre el control) la apariencia del control en el panel frontal y de su
escala se puede modificar, así como algunas de sus propiedades. En las figuras que aparecen
a continuación se ponen algunos ejemplos:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                               17
Departamento de Automática y Computación             18/11/2006




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.           18
Departamento de Automática y Computación                                        18/11/2006




Otras opciones incluyen escalas logarítmicas (Mapping), espaciado arbitrario o uniforme, etc.
El control también se puede redimensionar, o sea, el tamaño y posición inicial que aparece en
el panel frontal son atributos que se pueden modificar en tiempo de diseño. Cada control lo
indica de una manera fácil de identificar, usualmente mediante un rectángulo que encierra al
control o parte de este durante el movimiento del mouse sobre el elemento. A continuación se
muestra un ejemplo:

                          Note que se han señalado cuatro esquinas. Moviendo el puntero del
                          mouse para cualquiera de esas esquinas se puede modificar el radio
                          de la circunferencia que representa el botón de sintonía. El resto de
                          los elementos del control, excepto la etiqueta (en este caso Dial),
                          se redimensionan al redimensionarse la circunferencia.




A continuación se representa al mismo elemento redimensionado.




Hasta este punto se han situado en la pantalla los elementos gráficos que harán la función de
“controles”. Ahora corresponde seleccionar los indicadores que mostrarán su valor de acuerdo



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          19
Departamento de Automática y Computación                                        18/11/2006


a los controles. Estos indicadores están situados en la misma paleta, o sea en la paleta de
controles numéricos. En este caso utilizaremos el indicador “Tank” y el “thermometer”, que se
seleccionan de la siguiente manera:




Para luego obtener el siguiente diseño:




Para terminar y como se ha mencionado en los talleres, debemos colocar un botón que permita
a los usuarios terminara la aplicación. Para ello debemos seleccionar este control de la paleta
de funciones numéricas. Esto se realiza de la siguiente forma:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          20
Departamento de Automática y Computación                                      18/11/2006




El diseño final del “Panel Frontal” queda:




Ahora corresponde trabajar en la ventana del diagrama en bloques. Para ello podemos utilizar
las teclas de acceso rápido (Ctrl+E). En esta ventana debemos utilizar el lenguaje de
programación G para establecer la lógica de nuestra aplicación. Antes de comenzar tenemos
las cinco variables que corresponden a los cinco controles que hemos colocado en la pantalla.
El código luce de la siguiente forma:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                        21
Departamento de Automática y Computación                                         18/11/2006




El primer código G que debemos programar es el necesario para comenzar y terminar la
aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana
“stop” (verde   ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se
modela en programación a través de un “ciclo while”.

Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el

boton:      y luego se busca la opción “while loop”.




Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la
aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto
se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la
siguiente pantalla.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           22
Departamento de Automática y Computación                                       18/11/2006




Al finalizar se obtiene la siguiente estructura de programa G:




Para finalizar el programa solo nos resta realizar las asignaciones correspondientes. Es fácil
darse cuenta de que las variables que corresponden a los controles deben ser asignadas a las
variables que representan a los indicadores. Para ello debemos utilizar el cursor que se
puede obtener utilizando la tecla (Tab) o seleccionándolo directamente en la paleta de
herramientas “tools Palette”. Una vez conectados el código queda como sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         23
Departamento de Automática y Computación                                          18/11/2006




Note que el flujo de los datos va desde el control hacia el indicador y note también que la
representación gráfica de ambas variables pese a ser del mismo tipo de datos no es igual: El
borde es más grueso en los controles que en los indicadores, así como la flecha es de salida
en los primeros y de entrada en los segundos.

Finalmente debemos conectar el control booleano a la condición de salida del ciclo do..While
   . Para ello debemos utilizar un “negador” ya que el botón por defecto está en falso. Para ello
se utilizan los operadores boolenos que se encuentran en la paleta de funciones según se
muestra debajo:




Al conectarlos queda de la siguiente forma:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            24
Departamento de Automática y Computación                                           18/11/2006




Con ello queda resuelto el problema planteado. Sin embargo ahora debemos correr la
aplicación, para ello se debe utilizar la barra de botones colocada en la ventana del diagrama:




El botón         permite ejecutar la aplicación, mientras qué el botón     permite terminar de
ejecutar la aplicación.

Para realizar una pausa debemos utilizar el botón        , luego podemos utilizar los botones
             para ejecutar paso a paso la aplicación. El primero ejecuta instrucción por
instrucción, entrando en las funciones si las hubiera, mientras que el segundo si encontrara
una función, la ejecuta como si fuera un solo paso. El tercer tipo de botón termina la ejecución
paso a paso.

Un botón muy interesante es           que ejecuta la aplicación de manera continua pero
introduciendo una demora entre instrucción e instrucción para que pueda depurarse la
aplicación. Además se puede observar los valores asignados a las variables y funciones así
como los valores devueltos por estas.

Si quisiéramos utilizar una ventana de depuración se debe situar el ratón en una de las
conexiones o asignaciones relacionadas con la variable que se debe depurar y dar clic
derecho: A continuación seleccionar la opción “Probe” como se muestra a continuación:




Luego se ve el valor de la variable en una ventana contextual como la siguiente:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           25
Departamento de Automática y Computación                                         18/11/2006




Si en el paso anterior a este hubiéramos seleccionado la opción “Set Breakpoint” entonces el
código se ve de la siguiente forma:




Y la aplicación se ejecutará hasta este punto, interrumpiéndose antes de realizar la asignación.


El segundo ejercicio que se propone para este laboratorio permitirá conocer los
diferentes tipos de botones que existen en el Labview. Una vez realizado el mismo se
deberá conocer cuando utilizar uno u otro en dependencia de la aplicación.


Como toda aplicación esta debe comenzar con la realización del código necesario para
ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar
el código siguiente:




Ahora completamos la interfaz de la aplicación (Panel de Control) con los seis tipos de botones
que se pueden colocar en LabView, además colocaremos seis “leds” que nos indicarán la
manera en que funcionan estos tipos de botones. La interfaz debe quedar de la siguiente
manera:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            26
Departamento de Automática y Computación                                     18/11/2006




Luego usted debe programar la opción “Mechanical Action” de los tipos de controles voléanos,
según se indica en el texto. Para ello debe dar clic derecho sobre el botón de la siguiente
manera:




Luego en la ventana del código se asigna a cada botón un “led” que estará encendido solo
cuando el valor del botón es verdadero. Esto queda así:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                       27
Departamento de Automática y Computación                                       18/11/2006




El funcionamiento de los tres primeros botones es muy parecido. En el primer caso el led se
encenderá si se presione el botón, y permanecerá en ese estado hasta que se vuelva a
presionar el botón. El segundo caso es idéntico pero en este caso cambiará cuando se deje de
presionar el botón. En el tercer caso se encenderá el led mientras se tenga presionado el
botón.


Los siguientes tipos de botones tienen relación con el tiempo que demora el Labview en leer el
cambio de estado de los botones. En el cuarto caso, inmediatamente después que se presione
el ratón sobre el botón este cambiará de estado y permanecerá en él hasta tanto el Labview
pueda leer el cambio de estado. Luego se retornará al estado anterior. La quinta variante es
muy parecida pero en este caso el botón no cambiará de estado hasta que se deje de
presionar el ratón.
La sexta variante funciona de manera que el botón cambia de estado con solo presionar el
botón y permanece encendido todo el tiempo en que se tiene presionado el ratón sobre le
botón. Una vez que se suelte el ratón, el botón permanecerá en este estado hasta tanto el
labview sea capaz de notarlo, luego se retornará al estado anterior.


Para poder entender bien el funcionamiento de los diferentes tipos de botones, sobre todo los
tres últimos, es necesario que ejecute la aplicación utlizando la herramienta de depuración
que hace que el Labview lea con mayor lentitud los controles. Esto hace que se pueda
observar claramente cuando es que se produce la lectura del estado de los botones por el
labview.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         28
Departamento de Automática y Computación                                         18/11/2006


TEMA III Tipos de Datos simples

        •      Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseño o
               panel frontal, y la pantalla o ventana de flujo de programa.
        •      Conocer los tipo de datos principales: numéricos, booleanos y de cadena.
        •      Conocer los operadores y funciones básicas para el trabajo con los tipos de
               datos simples.


Ejercicio 1:

Elabore un programa en LabView que permita indicar el nivel de un tanque en un elemento
gráfico de Labview. El valor del nivel varía entre 0 y 100 unidades y debe obtenerse a través de
una función aleatoria. El programa debe indicar un estado de alarma cuando el nivel sobrepase
un valor de referencia que los usuarios deben establecer. El estado de alarma se indicará por
medio del color del elemento gráfico seleccionado: Azul: estado normal, Rojo: estado de
alarma.

Solución:

Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente:




En esa pantalla podemos seleccionar varias opciones entre las cuales están el abrir un nuevo
Intrumento Virtual (New VI), abrir uno ya existente, buscar ejemplos, demos, tutoriales, etc.

Para crear un nuevo programa (VI) damos clic en el botón                                    . A
continuación aparece una ventana simular a la que se presenta a continuación:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           29
Departamento de Automática y Computación                                        18/11/2006




La primera pantalla que aparece es el panel frontal o ventana de diseño de la aplicación
mientras que la que aparece en segundo plano es la ventana de flujo de programa o de
diagrama. Recuerde que puede conmutar entre uno y otro. Compruébelo con la combinación
Ctrl+E.

Pasos de la solución


1. Primero seleccionemos los controles que pondremos. Para ello seleccionamos mediante un
clic la ventana izquierda (panel frontal) y a continuación damos clic derecho. Debe aparecer un
menú emergente llamado “controls”. Seleccionamos en “controls” la primera de las opciones,


que se llama “numerics”     y se representa en el menú “controls” con el símbolo              .
Aparecerá algo similar a:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          30
Departamento de Automática y Computación                                       18/11/2006



Como se puede observar el elemento “Tank” es el más indicado para representar el nivel que
es requerido en el ejercicio. Para colocarlo en el “panel frontal” del instrumento virtual que
estamos diseñando, debemos seleccionarlo en la paleta de controles y luego soltarlo en el
“panel frontal”.

El resultado es el siguiente:




Existen varias propiedades que podemos variar para este control. Para ello debemos dar clic
derecho sobre el control y seleccionar por ejemplo la opción de mostrar el indicador digital,
como se muestra en la figura siguiente:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         31
Departamento de Automática y Computación                                          18/11/2006


2. Según el enunciado del problema debemos colocar la escala del tanque entre los valores de
0 y 100 unidades. Para ello debemos seleccionar el cursor    en la paleta de herramientas o

pulsar la tecla “tab”, hasta que el cursor en la pantalla quede de la siguiente manera:          .
Una vez que se tiene seleccionado este cursor se da doble-clic sobre el máximo valor de la
escala del indicador “tank”, se cambia la escala de 10 a 100 y se presiona la tecla “enter”. Esto
se realiza de la siguiente manera:




  Paso 1                                Paso 2

3. El otro elemento gráfico necesario para resolver este ejercicio es un control numérico para
establecer la referencia de la alarma. De la misma manera que se seleccionó el elemento
“Tank” ahora debemos seleccionar un control digital:




Luego la pantalla queda como sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                             32
Departamento de Automática y Computación                                      18/11/2006




Obsérvese que el nombre del control queda seleccionado, si en este momento se utiliza el
teclado, se puede cambiar directamente el encabezado del control. En este caso debemos
colocar el nombre: referencia de nivel.




4. Para terminar la interfaz de usuario se debe colocar un botón “booleano” que permita
terminar la ejecución de un programa. Esto se realiza en la paleta de controles seleccionando

     los elemento booleanos para luego escoger “Stop Button”:




La interfaz final queda como sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                        33
Departamento de Automática y Computación                                         18/11/2006




Ya estamos en condiciones de programar, en base a los elementos gráficos seleccionados
para nuestra interfaz, la lógica que dará solución a nuestro ejercicio. Para ello pasamos
directamente a la ventana del diagrama (Ctrl+E).




6. El primer código G que debemos programar es el necesario para comenzar y terminar la
aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana
“stop” (verde   ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se
modela en programación a través de un “ciclo while”.

Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el

boton:      y luego se busca la opción “while loop”.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           34
Departamento de Automática y Computación                                       18/11/2006




7. Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la
aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto
se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la
siguiente pantalla.




Al finalizar se obtiene la siguiente estructura de programa G:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         35
Departamento de Automática y Computación                                        18/11/2006



8. El ciclo tiene dos variable implícitas: la iteración representada por     y la condición de
salida, representada por . Si negamos la variable booleana y la conectamos a la condición
de salida, se construye la lógica necesaria para la ejecución y salida del programa.

Para negar la variable booleana “stop” debemos utilizar los operadores booleanos que se
seleccionan en la paleta de funciones como sigue:




9. Allí debemos seleccionar como nuestra la figura, el operdor “Not”. Y colocarlo en nuestra
ventana del diagrama de la siguiente forma:




    Antes de conectarlos                               Después de conectarlos



10. El tipo de datos que representa a nuestro tanque y al controlador de referencia es por
defecto Double        . Pero esto se puede cambiar de la misma manera que se hizo en el
laboratorio anterior.

Antes de seguir debemos verificar que la variable “Tank” esté configurada como “indicador” y la
variable “referencia de nivel” esté configurada como “control”.
(Recordar la simbología)



11. Según el enunciado del ejercicio el tanque debe recibir el valor de nivel de una función
aleatoria. En el caso de labview esta función se encuentra entre las funciones numéricas y se
puede escoger como sigue:


Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          36
Departamento de Automática y Computación                                       18/11/2006




12. Esta función brinda un valor aleatorio de tipo “double” entre 0 y 1. Sin embargo nuestra
aplicación requiere que el nivel varía entre 0-100. Para ello debemos multiplicar la salida de
esta función por el valor entero 100. Con ello se logra nuestro objetivo. La función de
multiplicación se encuentra en la misma paleta de funciones numérica y se representa por el
símbolo:      que recibe dos valores y devuelve la multiplicación de ambos. Además de esta
propia paleta debe utilizarse una constante numérica entera        que contenga el valor 100
que será el otro elemento necesario.

Después de colocar estas funciones y variables se obtiene el siguiente diagrama:




13. Ahora debemos conectar los elementos según la lógica a seguir. En nuestro caso queda
como sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         37
Departamento de Automática y Computación                                           18/11/2006




En cada iteración del ciclo el resultado de la función aleatoria se multiplica por 100 y este valor
se asigna a la variable que representa al control tanque.

14. Ahora debemos comparar el valor del tanque con la referencia entrada por el usuario. Si
este valor es mayor que la referencia se cambiará el color del tanque a rojo, sino, el tanque
será de color azul.

Para ello es necesario una función de comparación, que se puede encontrar en la paleta de
funciones “Comparison”:




Ahora la pantalla queda como sigue:




Para modificar el color del tanque debemos utilizar la propiedad FillColor                 que se
selecciona de la siguiente manera:

15. De clic derecho sobre la variable “Tank” y seleccione la opción Create, a continuación
seleccione la opción “Property Node” según se muestra a continuación:



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                              38
Departamento de Automática y Computación                                        18/11/2006




En la pantalla del diagrama se muestra el siguiente código:




16. En este caso la propiedad de la variable “tank”que se muestra por defecto es “Visible”, sin
embargo si damos clic derecho sobre ella y seleccionamos la opción “Properties” y luego la
opción “Fill Color” entonces nuestra propiedad se convierte en la que buscamos. El código es el
que sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          39
Departamento de Automática y Computación                                            18/11/2006




17. Si se observa detenidamente podemos ver que la propiedad “Fill Color” de la variable
“Tank” es de lectura, sin embargo se necesita variar la misma en dependencia del resultado de
la comparación del valor y la referencia. Para cambiar esta propiedad a escritura debemos dar
clic derecho sobre la misma y seleccionar la opción “Change To Write”. Con ello el resultado
grafico es de        a        .

18. Para continuar nuestra aplicación es necesario un bloque de toma de decisión (bloque if-
then-else) que permita escribir un color u otro en dependencia del resultado de la comparación.
Este bloque puede encontrarse en la “paleta de funciones”, específicamente en la paleta

“Comparison” la función “Select”          esta instrucción retorna el valor conectado en “t” o “f”
en dependencia del valor de “s”. Si “s” es verdadero retorna “t”, en caso contrario retorna “f”. “t”
y “f”pueden ser de cualquier tipo de dato. Al colocarlo en nuestro diagrama de bloque, podemos
presionar Ctrl+H para obtener la ayuda contextual que se muestra debajo. El diagrama G ahora
luce como sigue:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                               40
Departamento de Automática y Computación                                          18/11/2006




El valor que debe retornar la función “Select” debe ser Rojo, si la condición es verdadera y Azul
si es falsa. Para ello es necesario utilizar constantes enteras que representen los colores
deseados.

19. Esto es posible utilizando la paleta de funciones y escogiendo dos constantes “Color Box
Constant”, una para el rojo y otra para el azul. La manera de hacerlo se muestra abajo.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            41
Departamento de Automática y Computación                                       18/11/2006




El código queda como sigue:




20. Por defecto el color que toman es negro, para cambiar esto debemos tomar el cursor
En la paleta de herramientas y presionar sobre la constante para escoger el color deseado.
Esto se realiza de la manera mostrada arriba.

El código queda como sigue:




       Sin conexión                                           Con conexión

21. La aplicación está casi lista, ahora debemos ejecutarla, para ello presionamos el botón de
menú      y si se quiere ejecutar en modo de depuración se pueden escoger las variantes ya
estudiadas.                   .

Al ejecutarla podemos percibir la rapidez con que varia el nivel, para que sea más efectiva la
simulación se puede introducir un bloque de demosra dentro del ciclo iterativo.

22. Para ello debemos ir a la paleta de funciones y utilizar la función “Wait Until Next ms
Multiple” y colocar una constante de demora de 500 ms. Como se muestra a continuación.


Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         42
Departamento de Automática y Computación                                       18/11/2006




Ejercicio 2

Elabore un programa en Labview que: dado el nombre y la edad de una persona. Elabore una
cadena de salida que diga lo siguiente: Usted se llama: nombre y nació en el año: YYYY donde
las cadenas subrayadas son: el nombre y la resta del año actual con la edad respectivamente.


Para diseñar la interfaz de usuario de este programa debemos utilizar 1 controles de cadena
para entrar el nombre, 1 control numérico de tipo entero sin signo, de 8 bytes, ya que la edad
siempre es positiva y nunca mayor que 256 que es el entero más pequeño que se puede
declarar y 1 indicador de cadena para la salida. Además debemos colocar un control booleano
que permita terminar la ejecución del programa.

Los pasos para construir la interfaz son los siguientes:

1. Abrir un nuevo VI, tal y como lo hicimos en los ejercicios anteriores.
2. Adicionar un control de cadena.




                Selección del control            Panel Frontal

3. Adicionar un control numérico.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         43
Departamento de Automática y Computación                              18/11/2006




       Selección del control                          Panel Frontal


4. Cambiar el tipo de dato asociado con el control numérico.




6. Adicionar un indicador de cadena.




         Selección del control                        Panel Frontal


7. Adicionar un control booleano.



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                            44
Departamento de Automática y Computación                                         18/11/2006




         Selección del control                          Panel Frontal

Ya estamos en condiciones de programar, en base a los elementos gráficos seleccionados
para nuestra interfaz, la lógica que dará solución a nuestro ejercicio. Para ello pasamos
directamente a la ventana del diagrama (Ctrl+E).




6. El primer código G que debemos programar es el necesario para comenzar y terminar la
aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana
“stop” (verde   ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se
modela en programación a través de un “ciclo while”.

Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el

boton:       y luego se busca la opción “while loop”.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           45
Departamento de Automática y Computación                                       18/11/2006




7. Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la
aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto
se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la
siguiente pantalla.




Al finalizar se obtiene la siguiente estructura de programa G:




8. El ciclo tiene dos variable implícitas: la iteración representada por    y la condición de
salida, representada por . Si negamos la variable booleana y la conectamos a la condición
de salida, se construye la lógica necesaria para la ejecución y salida del programa.



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         46
Departamento de Automática y Computación                                          18/11/2006


Para negar la variable booleana “stop” debemos utilizar los operadores booleanos que se
seleccionan en la paleta de funciones como sigue:




9. Allí debemos seleccionar como nuestra la figura, el operdor “Not”. Y colocarlo en nuestra
ventana del diagrama de la siguiente forma:




                Antes de conectarlos                             Después de conectarlos


10. La cadena de salida que queremos formar debe ser construida a partir de las variables que
ya declaramos y de un conjunto de cadenas constantes. Una de ellas debe almacenar el valor
“Usted se llama: ” otra el valor “Y nació en el año: ” para ellos se va a la paleta de funciones y
se busca la paleta readicionada con el tratamiento de cadenas. A continuación se muestra su
localización:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                             47
Departamento de Automática y Computación                                               18/11/2006


11. Se colocan dos controles del tipo           y se selecciona el cursor      en la paleta de
herramientas se utiliza la tecla “tab”, hasta que el cursor en la pantalla quede de la siguiente

manera:           para introducir el valor de las constantes como muestra la figura.




12. En este caso debemos concatenar cada una de las cadenas en el orden mostrado en la
figura anterior. Además, hay que restarle al valor de la edad el año actual para obtener el año
de nacimiento y este resultado añadirlo a las cadenas. Para ello se puede utilizar la función
“Format Into String” que se encuentra:




13. Esta función retorna una cadena de caracteres que esta formada por cada uno de los
elementos que se le pasan como parámetros. Estos parámetros pueden ser de cualquier tipo
de dato simple (DBL, SGL, EXT, U8, U16, U32, I8, I16, I32) sin embargo el formato debe ser
especificado de manera similar a como lo hace la función de C “printf” o sea : %d para enteros,
%f para números con coma, %s para cadenas. En nuestro caso el formato será: “%s%s%s%d”,
ya que son tres cadenas y un valor entero (el año). Para ello debe introducirse en el código de
nuestro programa una constante de la misma forma que se realizó en el paso 11 y se inicializa
así:   %s%s%s%d   para luego conectarla a la función     según se muestra a continuación:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                             48
Departamento de Automática y Computación                                        18/11/2006




14. Como se observa esta función solo tiene una posible conexión de entrada pero eso es solo
por el momento. Usted debe pararse justo en la base de la función y esperar a que cambie el
tipo de cursor. Cuando esto suceda, debe presionar el botón izquierdo del ratón y arrastrar
hasta tener exactamente cuatro entradas que deben coincidir con los tipos de datos
seleccionados con anterioridad. El diagrama queda así:




15. Para obtener el año debemos introducir una constante numérica entera para almacenar el
valor del año actual 2002 y un operador de resta     desde la paleta de funciones numéricas. Al
efectuar la resta del año menos la edad se tiene el año de nacimiento.




16 Ahora solo nos resta conectar las funciones con las variables para terminar. Para ejecutar e
programa, presionamos el botón de menú           y si se quiere ejecutar en modo de depuración
se pueden escoger las variantes ya estudiadas.                     .



Ejercicio 3




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                          49
Departamento de Automática y Computación                                          18/11/2006


Se desea construir un programa que permita desglosar una fecha introducida bajo el formato
“DD/MM/YYYY”. El programa debe mostrar el día en un indicador de cadena; el mes, por su
nombre, en un “ComboBox” y el año en un indicador de cadena.

1.   Para realizar este ejercicio es necesario utilizar un control de cadena para introducir la
     fecha. Debemos utilizar los dos indicadores que mostrarán el día y el año. Estos controles
     se deben introducir de la misma manera que se hizo en el ejercicio anterior (pasos 2 y 6).
     Como en los ejemplos anteriores se debe colocar un control booleano que sirva para
     finalizar la aplicación. El resultado debe ser como se muestra a continuación.




2. Para mostrar el mes por su nombre debemos utilizar un indicador de tipo enumerado “Enum”
que se encuentra en la paleta de controles bajo el botón “Ring & Enum”




3. Al introducir el elemento “Enum”, este toma la propiedad de control. Sin embargo, el uso que
se le va dar es como indicador. Es por ello que se debe dar clic derecho sobre él y seleccionar
la opción “Change To Indicator”. Ahora estamos listos para introducir cada uno de los doce
meses del año. Para ello se selecciona el cursor     en la paleta de herramientas o se utiliza la



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            50
Departamento de Automática y Computación                                         18/11/2006



tecla “tab” hasta que el cursor en la pantalla quede de la siguiente manera          . Luego se
coloca el cursor dentro del indicador y se introduce el primer nombre “enero”, para introducir
otro mes se da clic derecho sobre el control y se selecciona la opción “Add Item After”. De esta
manera se entran todos los nombres de los meses.




                       `

La figura que se muestra encima es el “panel frontal” correspondiente a nuestro programa.


En estos momentos estamos listos para programar el código que de solución a nuestro
problema. Para ello debemos movernos hacia la pantalla del diagrama (Ctrl+E).

Al igual que los ejercicios anteriores debemos programar en primer lugar el código G que nos
permita terminar la ejecución de nuestro programa. Los pasos son similares a los vistos
anteriormente y finalmente debe quedar de la siguiente forma:




Es de señalar que la variable correspondiente al indicador de tipo “Enum” es entera y cada mes
tiene un número entero asociado. Para “enero” será el “0”, febrero el “1” y así sucesivamente.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           51
Departamento de Automática y Computación                                          18/11/2006


4. Para desglosar la fecha es necesario encontrar el carácter “/” que limita el día del mes, y el

mes del año. La función “Search/Split String”       que se encuentra en la paleta de funciones
permite encontrar un carácter específico dentro de una cadena. Esta función necesita como
parámetros la cadena donde debe buscar, el carácter que se quiere encontrar y el
desplazamiento a partir del inicio de la cadena donde se comenzará la búsqueda. La función
retorna tres valores. La subcadena que se forma hasta el carácter que se busca, la subcadena
a partir del carácter que se busca (incluyendo el carácter buscado) y el índice o desplazamiento
donde se encontró el carácter.




El resultado de aplicar esta función a la cadena que contiene la fecha es el siguiente:

Si la fecha es: 12/01/2005

Subcadena hasta el carácter “/”: “12”
Subcadena restante: “/01/2005”

5. Para tomar el mes es necesario eliminar el primer carácter “/” de la cadena restante
“/01/2005”y volver aplicar la función anterior. Para ello se puede utilizar la función “String
Subset”      que recibe como parámetros una cadena, la cantidad de caracteres que se
quieren tomar y el desplazamiento o índice a partir de donde se tomara la subcadena.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            52
Departamento de Automática y Computación                                         18/11/2006


6. El resultado de aplicar esta función a la cadena “/01/2005” es: “01/2005”. Ahora se debe
repetir el paso 4 para obtener el mes. Sin embargo este resultado se debe mostrar en el control
“Enum”. Como se dijo esta es una variable de tipo entera, por lo que debemos convertir el
resultado de la función, que es una cadena con el número del mes, a un valor numérico entero.
Para ello el labview cuenta con funciones de conversión de tipos. En nuestro caso esto se
realiza con la función “Decimal String To Number”   . El diagrama queda como sigue:




Para obtener el año se debe repertir el paso 5. con lo cual se elimina el carácter “/”y se
obtiene el año. El diagrama final queda así:




Para ejecutar e programa, presionamos el botón de menú         y si se quiere ejecutar en modo
de depuración se pueden escoger las variantes ya estudiadas.                      . Al correr el
programa se puede percibir que el mes que se obtiene está desplazado en uno con el que
sería el correcto. Eso es así por que en la variable de tipo “Enum” el mes de enero tiene
asignado el valor 0, este mes no existe. Para resolver este problema, después de la conversión
de cadena a número se debe restar una unidad. El diagrama queda de la siguiente manera:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           53
Departamento de Automática y Computación             18/11/2006




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.           54
Departamento de Automática y Computación                                           18/11/2006


TEMA IV Control de Flujo de programa en LabVIEW. Estructuras repetitivas.

    •   Lazos de control de programa (While y For).
    •   Shift Registers (Registros de Desplazamiento).
    •   Nodo fórmula. Visualización gráfica de datos.

Ejercicio 1:

Realice un programa que permita encontrar el máximo de 100 números generados
aleatoriamente. Represente gráficamente los números generados.

Desarrollo:

El ejercicio una vez terminado debe conducir a una representación en Lenguaje G como la que
se muestra a continuación en la ventana de diagrama o código del LabView:




Veamos como desarrollar paso a paso dicho ejercicio. Primero, una explicación de lo que se
nos pide.
Se necesitan generar 100 números aleatorios, lo que implica utilizar un generador de números
aleatorios y un lazo de control de programa o repetición que permita que ese generador de
números aleatorios nos entregue 100 de dichos números.
Cada vez que se nos entregue un número, o sea, con cada iteración del bucle o lazo, se debe
comparar el número generado con el número máximo hasta ahora generado. Eso nos indica
que debemos realizar una comparación que busque el máximo y almacenarlo para comparar
en cada iteración con el nuevo número.
Se nos pide que representemos gráficamente dichos números por lo que debemos agregar un
gráfico a nuestro diseño encargado de plotear en cada iteración el número aleatorio a procesar.
Como descomponer entonces con LabView dichas operaciones?
    1. Primero debemos crear el lazo de control o bucle. Para ello seleccionamos de la paleta
         de funciones del LabView las funciones de estructuras y dentro de ella la del ciclo For.
         El ciclo for es el escogido porque en este caso necesitamos repetir la operación de
         comparación en la búsqueda de un máximo 100 veces, invariablemente. Si
         estuviéramos sujetos a alguna condición entonces deberíamos de haber seleccionado
         un lazo condicional, o sea, un While. La siguiente figura ilustra como hacer la selección:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                              55
Departamento de Automática y Computación                                     18/11/2006




   2. Una vez que se ha puesto el ciclo for debemos definir el alcance del mismo. Se
      recuerda que un ciclo for en LabView siempre va desde 0 hasta N-1, siendo N el valor
      a definir. Aquí queremos realizar las operaciones 100 veces por lo que debemos definir
      para N un valor de 100. Esto se realiza creando una constante y conectándola con N.
      Es muy sencillo, la siguiente figura ilustra como hacerlo. El menú que allí aparece se
      obtiene dando clic derecho encima de N:




   3. Cuando la constante se crea, aparece con valor 0. Debemos cambiar dicho valor y
      poner 100, como se muestra en la siguiente figura:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                       56
Departamento de Automática y Computación                                      18/11/2006




    4. Necesitamos ahora generar un número aleatorio y compararlo con algún máximo. Por
       supuesto, el primer número aleatorio no tiene referencia de comparación, pero como
       debemos comparar dentro del ciclo for, basta con compararlo con el menor valor
       posible que se pudiera generar, en este caso 0, con lo cual garantizamos que el primer
       número aleatorio siempre será el primer máximo contra el cual comparar después los
       sucesivos que se generarán. LabView presenta un componente que realiza la
       comparación entre dos fuentes o números, y devuelve el mínimo valor de entre los dos
       y el máximo. La siguiente figura muestra como seleccionar dicho componente
       (Functions/Comparison/Max & Min):




Se inserta en la ventana de diagrama dentro del ciclo for:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                        57
Departamento de Automática y Computación                                       18/11/2006




   5. Necesitamos ahora encontrar alguna función que genere números aleatorios. LabView
      tiene un componente en Functions/Numeric/Random Number (0-1):




Si quisiéramos generar un número aleatorio en un rango diferente podemos multiplicar el
número generado con esta función por el valor máximo que queremos generar. Puede
modificar el ejercicio como estudio independiente ahora intentando buscar el máximo de 100
números aleatorios en el rango de 0-50.
Una vez introducidos en el diagrama el generador de números aleatorios y la función que
devuelve el máximo entre dos números debemos entonces buscar la forma de almacenar el
máximo que resulta de cada iteración para compararlo con el número generado en la siguiente
iteración. Si se analiza bien esto lo que necesitamos es comparar el número generado en la
iteración i (denotemos por n(i) a dicho número) con el máximo que resultó de la iteración i-1.
Esta es una de las funciones que puede brindarnos el registro de desplazamiento o shift
register de LabView.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         58
Departamento de Automática y Computación                                       18/11/2006


El shift register desde el punto de vista de la programación es una estructura tipo arreglo
asociada con lazos de control o bucles de programa como el for y el while y que almacena
valores anteriores producidos en dichos lazos. Así, por ejemplo, si obtenemos como resultado
de una iteración i un valor v(i) al final de dicha iteración, al comienzo de la próxima al i
incrementarse en uno, dicho valor se almacena como v(i-1). Dos iteraciones hacia delante será
v(i-2) y así sucesivamente. La siguiente tabla ilustra dicho concepto con ejemplos numéricos:

Iteración     V(i)         V(i-1)        V(i-2)       V(i-3)        V(i-4)       V(i-5)
0             5            -             -            -             -            -
1             3            5             -            -             -            -
2             0.7          3             5            -             -            -
3             1            0.7           3            5             -            -
4             -1           1             0.7          3             5            -
5             0            -1            1            0.7           3            5
6             2            0             -1           1             0.7          3

y así sucesivamente....

    6. Para adicionar Shift Registers con LabView se selecciona la estructura for y se da clic
       derecho sobre ella. El siguiente menú aparece:




Al seleccionar de dicho menú la última opción, Add Shift Register (Adicionar registro de
desplazamiento) se inserta en el diagrama como se muestra en la siguiente figura:




    7. Antes de realizar las conexiones entre los elementos debemos además seleccionar
       algún componente que nos permita visualizar gráficamente los números aleatorios que


Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         59
Departamento de Automática y Computación                                      18/11/2006


       se van generando. Para ello nos vamos al panel frontal y con clic derecho visualizamos
       el siguiente menú:




Al seleccionar la opción Controls/Graph/Waveform Chart obtenemos un gráfico como el que se
representa en la pantalla frontal de la siguiente figura, donde también se representa el
contenido de la ventana de diagrama hasta este momento:




   8. A continuación se realizan las conexiones entre los elementos. La salida del generador
      de números aleatorios se conecta al bloque de comparación de números, y a la entrada
      del control gráfico. El shift register de la derecha debe almacenar el último valor del
      máximo calculado y que se obtiene como salida del módulo de comparación. La
      siguiente figura muestra las conexiones a realizar:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                        60
Departamento de Automática y Computación                                         18/11/2006




   9. Una vez realizadas estas conexiones el ejercicio está prácticamente concluido. Note
      que la primera vez que se compara en el bloque de comparación se hace entre un
      primer número aleatorio y el valor del shift register. Ya se explicó como funciona el shift
      register y debemos notar que antes de concluir la primera iteración no tenemos un
      valor con el cual comenzar para el shift register que adquiere uno al final de cada
      iteración. Eso nos indica que tenemos que inicializarlo, darle un valor inicial con el
      cual empezar y evaluar la iteración 0 . Note además que cuando se llega a la última
      iteración el valor actual que contiene el shift register es el del último máximo calculado,
      y por tanto el valor que debemos reportar como resultado. Es por ello que entonces
      debemos crear un indicador para visualizar el último máximo y una constante para
      definir la condición inicial del shift register. Las figuras que se muestran a continuación
      ilustran como hacerlo. Los menús que allí aparecen se obtienen al dar clic derecho
      encima de los shift registers.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            61
Departamento de Automática y Computación                                             18/11/2006




El resultado final se muestra en la siguiente figura. Note que el valor inicial del shift register es
0.00 pues es el mínimo que puede tomar el número aleatorio y no afectará la selección del
primer máximo.




    10. Antes de ejecutar el programa es conveniente modificar algunos parámetros del
        gráfico, en particular los relacionados con los ejes, que debemos modificar para
        permitir la auto escala. Las figuras a continuación muestran la manera de hacerlo
        (siempre clic derecho en el objeto para obtener el menú):




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                                62
Departamento de Automática y Computación                                    18/11/2006




   11. Finalmente salvamos el ejercicio y lo ejecutamos. Un ejemplo de ejecución se muestra
       en la siguiente figura:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                      63
Departamento de Automática y Computación                                      18/11/2006




Por último, señalar que si queremos que el gráfico se represente más lentamente podemos
incluir una demora (Functions/Time & Dialog/ Wait Until Next ms Multiple) o seleccionar el
indicador de ejecución paso a paso. La siguiente figura muestra como quedaría el ejercicio
para una demora de 50 milisegundos:




En la figura anterior también se a insertado otro indicador, llamado max(x,y). Que función
tendría?



Ejercicio 2:
En este ejercicio se propone realizar la descomposición de la fecha introducida en un control
tipo Edit (Edición) de una manera más eficiente (comparada con la primera solución a este
ejercicio que ya se vio en una guía anterior), haciendo uso de los shift registers.

Desarrollo:

En clases anteriores se ofreció una solución al problema de desglose de una fecha en sus
componentes de día, mes y año. Aquella solución introducía algunos componentes para el
procesamiento de cadenas que se encuentran dentro de las funciones de LabView. En dicha



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                        64
Departamento de Automática y Computación                                        18/11/2006


solución los componentes se repetían, pero hay una forma más eficiente de resolverlo
haciendo uso de los shift registers. La solución final se ofrece en la siguiente figura:




Se recuerda la función y terminales de los dos elementos principales involucrados:




Antes de pasar a una explicación más o menos detallada de como construir la solución en la
pantalla de diagrama veamos algunos razonamientos de como proceder con los shift registers:

    1. Se quiere dividir una cadena que representa la fecha en sus tres elementos
       constitutivos, o sea, el día, el mes y el año que la conforman.
    2. La operación siempre es la misma: se extrae de la cadena una subcadena que
       representa un componente de la fecha (o el día, o el mes o el año) y se elimina de la
       subcadena que resulta de extraer dicho componente el separador /.
    3. El proceso se repite 3 veces.



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                       65
Departamento de Automática y Computación                                        18/11/2006



El punto 3 nos indica que podemos utilizar un lazo condicional, o sea, un while, pues siempre
dentro del while se hará lo mismo (punto 2). La subcadena que representa el componente
extraído debe almacenarse para brindar los resultados finales. Como entonces utilizar los shift
registers? Quizá una manera en que podemos verlo es representando el proceso, para una
fecha ejemplo, a través de las iteraciones. La siguiente tabla lo ilustra:

Cadena inicial     Iteración          Componente         Subcadena           Subcadena
                                      resultante         después         de después          de
                                                         extraído         el extraer          el
                                                         componente          separador (/)
8/02/2005          0                  8                  /02/2005            02/2005
02/2005            1                  02                 /2005               2005
2005               2                  2005               “”                  “”

Como se puede apreciar por cada iteración se obtiene un componente resultante, primero el
día, después el mes y por último el año. Si denotamos por c(i) al componente resultante se
puede ver que después de la iteración 2 c(i)=2005, c(i-1)=02 y c(i-2)=8. Dicha secuencia es la
que precisamente nos pueden brindar los shift register si creamos los suficientes en el
diagrama como para almacenar los valores c(i-2), c(i-1) y c(i). Necesitamos además de una
iteración a otra almacenar la subcadena resultante después de extraer el separador que será la
nueva cadena inicial con la cual trabajar en la próxima iteración. Veamos pues como hacerlo.
     1. Primero debemos de crear el lazo condicional while en nuestra aplicación:




    2. Debemos ahora definir la condición de parada. Queremos que el lazo funcione
       mientras la iteración no sea mayor que dos, por tanto, la condición de ejecución del
       while debe ser i<=2. La siguiente figura nos indica como quedaría (el componente de
       comparación aparece en Functions/Comparison/Less or Equal?):




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           66
Departamento de Automática y Computación                                         18/11/2006




   3. En el panel Frontal debemos insertar un control de tipo String para poder teclear la
      fecha que se quiere descomponer (Controls/String & Path/String Control):




Note que en la siguiente figura el control generado en el panel frontal tiene asociado una
variable que debemos ubicar fuera del lazo while pues es la cadena inicial que hay que
descomponer.
    4. Insertamos ahora en la ventana de diagrama el componente Search/Split String
        (Functions/String/Aditional String Functions/Search Split String):




   5. Una vez introducido dicho componente se crea el primer shift register, que tendrá la
      función de almacenar la subcadena resultante después de cada iteración. En la
      siguiente figura aparece representado. A la función de dividir (Split) cadenas se le
      asigna en cada iteración la cadena inicial (ver tabla página 13) que está almacenada en
      el shift register (por ejemplo, si en la iteración que acaba de concluir quedó 02/2005
      ese valor se almacena en el shift register de la derecha y cuando se incrementa i para
      iniciar una nueva iteración esa cadena (ahora, después de incrementada i es el
      resultado de la iteración i-1) LabView la pasa o ubica en el shift register de la izquierda
      para que sea usada en la iteración i).



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            67
Departamento de Automática y Computación                                            18/11/2006




Como ya mencionamos anteriormente, los shift register tienen que tener un valor inicial, para
que sea el valor con el cual comienza a trabajar la iteración 0. En este caso el valor inicial es la
cadena inicial introducida en el edit, o sea, la fecha completa que se quiere dividir. En la figura
anterior se mostró la conexión que inicializa al shift register.
    6. Una vez introducido este registro de desplazamiento hay que completar las entradas
         del modulo de división de cadena. Para ello se agregan dos constantes en la entrada, y
         se le dan, respectivamente, valores de / (que es el separador) y 0. Dichos valores le
         indican al Labview que la cadena que tiene en su entrada y que será dividida en dos se
         comenzará a explorar desde el primer elemento (elemento 0) hasta detectar el carácter
         /.




Esta función tiene dos salidas, la primera es la subcadena encontrada antes del carácter que
divide la cadena de entrada en dos cadenas (en nuestro ejemplo /). La segunda salida es la
cadena que se encuentra desde el separador hasta el final. Note que incluye al separador.
Las dos salidas serán de utilidad, la que está delante del separador es el componente de la
fecha que estamos separando (día, mes o año) y la segunda la que hay que seguir separando.
Que hacer con la primera? Hay que almacenarla pues de lo contrario en la próxima iteración
tendré otra componente resultante de la comparación que cambiará la salida de la función
Search/Split String.
     7. Para ello debemos utilizar un nuevo shift register, en este caso, uno que tendrá la
         función de los componentes resultantes. La siguiente figura indica la forma de
         insertarlo:



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                               68
Departamento de Automática y Computación                                     18/11/2006




   8. Que conectar al shift register que no aparece conectado en la figura anterior?
      Recuerde que será el encargado de almacenar la cadena que en la próxima iteración
      servirá de inicio para buscar el nuevo componente de la fecha. Note además que no se
      puede conectar directamente a la salida de la primera función (Search/Split Function)
      pues esa salida incluye todavía el separador (ver tabla pág. 13) y hay que eliminarlo.
      Para ello se usa la función que se representa en la siguiente figura
      (Functions/String/String Subset)




También se pudo utilizar una segunda función split, pero la que se ha escogido es la más
representativa de lo que se quiere hacer puesto que recibe a su entrada una cadena y
devuelve la subcadena que se encuentra desde la posición k hasta la l, donde k y l son otras
entradas de la función. Nosotros queremos tomar la cadena que sale de la función
Search/Split... y quitarle el separador, o sea, quedarnos con el subconjunto o subcadena que
se encuentra desde la posición 1 (en la posición 0 está el separador hasta el final):




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                       69
Departamento de Automática y Computación                                         18/11/2006




   9. Ahora si podemos conectar la salida de esta función String Subset al shift register de
      su derecha:




   10. Hasta aquí lo que está programado funciona bien pero no nos permite visualizar todos
       los resultados. El resultado se obtiene en el shift register que en la figura anterior no
       está conectado. Que componente se obtiene ahí después de concluida la última (i=3)
       iteración? La respuesta es que se obtiene el valor del shift register asociado (el de la
       parte derecha a su mismo nivel) en la iteración i-1. Cual es ese valor? Del ejemplo de
       la Tabla en la Página 13 podemos ver que es el año. Note que al final de la última
       iteración el valor del shift register asociado de la derecha era “”. Conectemos entonces
       un indicador tipo string al shift register no conectado hasta ahora (clic derecho, en el
       menú que aparece seleccionar Create/Indicator). Cambiando el nombre del indicador
       por el de año obtenemos:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           70
Departamento de Automática y Computación                                            18/11/2006




    11. Eso nos permite visualizar el año. Pero y el mes? Si el año fue el valor resultante en la
        iteración i-1, es de suponer que el mes es el valor resultante en la iteración i-2. Pero
        ese valor no lo tenemos almacenado. Hay que almacenarlo. Crear elementos del shift
        register para las iteraciones i-2, i-3, i-4,.... es fácil . Solo hay que agregar un elemento
        al shift register ya creado. La siguiente figura muestra como hacerlo. El menú que
        aparece en ella se obtiene con clic derecho sobre el shift register de la derecha (el
        conectado al indicador de año):




El resultado:




    12. Debemos agregar otro nivel, (el de i-3) para el componente día de la fecha:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                               71
Departamento de Automática y Computación                                         18/11/2006




A cada nivel creado se le asocia el indicador de cadena correspondiente, de la misma forma
que se hizo con el año:




   13. Antes de concluir debemos realizar una operación más. Hay 3 elementos en el registro
       de desplazamiento asociado con el año, el mes y el día que no han sido inicializados.
       Que valor les corresponde? Aquí en realidad no tiene importancia el valor que le demos
       pues solo están conectados (los elementos del shift register) y por lo tanto el valor que
       al concluir el while mostrarán serán los componentes de la cadena fecha. Sin
       embargo, es una práctica sana inicializarlos, y por eso se hará, dándole un valor inicial
       de “” que indicará cadena vacía. La siguiente figura muestra como hacerlo:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           72
Departamento de Automática y Computación                                     18/11/2006




La constante de cadena vacía se encuentra definida en la biblioteca de funciones de LabView
Functions/String/Empty String constant.
En la ventana o panel frontal nuestro diseño sería más o menos así. Para probar que nuestro
programa se ejecuta debemos antes de ejecutarlo darle un valor inicial a la fecha que se
descompondrá, editando en el control Fecha el valor:




Después de una ejecución, y para esa cadena se obtiene:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                      73
Departamento de Automática y Computación                                          18/11/2006




Ejercicio 3:

Realice un programa en LabView que permita gráficar la función seno hasta que se oprima el
botón parar.

Desarrollo:

Este ejercicio nos permitirá conocer como trabajar con el Nodo Fórmula. Que se nos pide?
Graficar la función seno(x) hasta que se oprima un botón. Eso nos indica que debemos ubicar
un lazo o bucle de repetición condicional, o sea, un while. La condición de parada del while la
producirá el clic sobre un botón. Dentro del while debemos de estar evaluando, para cada
iteración a la función seno(x). Que valor le damos a x? Podemos usar el mismo valor de la
iteración i. El único problema es que el seno(x) espera el valor en radianes por lo que hay que
convertir el valor de i a dicha unidad, y después calcular el seno. Este es un caso típico en que
un nodo fórmula nos simplifica mucho el trabajo. Veamos la solución.

    1. Primero comenzamos creando el ciclo while y un botón (ya se sabe como hacerlo de
       clases anteriores):




En la figura anterior aparece nuevo el elemento negado, que conecta al botón con la condición
de ejecución del while. En clases anteriores vimos que se podía también cambiar la condición
de ejecución del while con clic en ella: aparece un circulo rojo. En versiones anteriores a la 6.0
no existía dicha posibilidad.
    2. Después de introducido el while se crea el nodo fórmula según se muestra en la
         siguiente figura:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                             74
Departamento de Automática y Computación                                18/11/2006




   3. Una vez creado el nodo fórmula tenemos que indicar cuales serán las variables de
      entrada de dicho nodo y cuales las de salida. Comenzando por las de entrada se
      adicionan de la siguiente manera (el menú aparece al dar clic derecho en el nodo
      fórmula):




   4. A dicha entrada le damos el valor de nx:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                 75
Departamento de Automática y Computación                                         18/11/2006




   5. Ahora debemos editar dentro del nodo fórmula el contenido de lo que se quiere
      calcular. Para este caso son 3 lineas. Note la similitud entre C++ o Matlab y el lenguaje
      que admite el nodo fórmula. Dicho nodo es compatible con ANSI C.
   6. La fórmula convierte de grados a radianes y calcula el seno. El valor calculado lo
      devuelve en la variable y, que hay que declararla como salida del nodo de la misma
      forma que la entrada pero ahora seleccionando la opción Add Output. Una vez hecho
      esto se realiza la conexión entre el indicador de iteración i y la variable de entrada nx.
      La siguiente figura muestra como debe quedarnos la aplicación hasta este momento en
      la ventana de diagrama:




   7. La salida, que se produce en cada iteración, podemos conectarla a un componente
      para plotear gráficos de la misma manera a como lo hicimos en el ejercicio 1:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           76
Departamento de Automática y Computación                                        18/11/2006




La salida “y” del nodo fórmula se conecta al gráfico:




La figura que se muestra a continuación es el resultado de la ejecución del programa:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                      77
Departamento de Automática y Computación             18/11/2006




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.           78
Departamento de Automática y Computación                                         18/11/2006


TEMA V Mas estructuras de control de flujo.

        •      Dominar la estructura de control CASE. (if-then-else ó switch[C++] )
        •      Dominar la estructura “Secuence” para secuenciar el flujo de programa
               (alternativa a la programación por nodos).
        •      Dominar la estructura de manejo de eventos.


Ejercicio 1:

Elabore un programa en LabView que permita calcular la raíz cuadrada a un número real. El
programa debe analizar si valor introducido es menor que cero (situación de error) e indicar al
usuario por medio de un cuadro de mensaje la situación.

Solución:

Como toda aplicación esta debe comenzar con la realización del código necesario para
ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar
el código siguiente:




Ahora debemos diseñar la interfaz de usuario de nuestra aplicación. Para ello simplemente
colocamos un control numérico digital que reciba por parte del usuario el valor al cual se le
calculará la raíz cuadrada. Además, debemos colocar un indicador (también digital en este
caso) para visualizar el resultado de la operación.

Esto queda de la siguiente manera:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           79
Departamento de Automática y Computación                                         18/11/2006




Ya estamos listos para programar en “Código G” la lógica de nuestra aplicación. Por lo tanto
utilizando (Ctrl+E) vamos a la pantalla del diagrama en bloques, que luce de la siguiente forma:




La operación de cálculo de la raíz cuadrada implica realizar una operación de comprobación
antes de efectuarla, y esto depende del valor del número. Si este es positivo se puede hacer,
sino debe indicarse un mensaje. Véase que existe una condición mediante la cual se bifurca el
flujo de programa. Para ello es necesario utilizar una estructura clásica del tipo IF-THEN-ELSE,
que el caso de labVIEW se denomina “Case Structure” y se puede obtener según se indica en
las figuras siguientes:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           80
Departamento de Automática y Computación                                         18/11/2006




Esta estructura está representada por un marco y un titular                  que representa el
área donde se programa el código asociado a la condición de

true:              y el código asociado a la condición de false:           . Note que usted
puede conmutar entre uno y otro según desee utilizando las flechas, y que los elementos de
código para uno u otro son diferentes.




Según nuestra lógica, si el valor numérico es positivo, se realiza la operación de raíz, esto se
consigue utilizando las funciones numéricas como se muestra a continuación:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           81
Departamento de Automática y Computación                                          18/11/2006


El código complementario, cuando no se puede efectuar la operación debido a que el número
es falso, se reduce a colocar un cuadro de mensajes que alerte al usuario. Para ello se utiliza
en la paleta de funciones un “One Button Dialog” y un “String Constant” según se observa a
continuación:




Ahora solo nos resta realizar la comparación y conectarla a la estructura “case” para determinar
cual de las dos acciones posibles se realizará en tiempo de ejecución. Para ello necesitamos
comparar la variable correspondiente al control numérico relacionado con el valor a calcular.
Sin embargo ya hemos utilizado el terminal asociado al mismo, por lo que debemos crear una

variable local de ese control. Esto se hace dando clic derecho sobre la variable                ,
seleccionando la opción “Create” y a su vez “Local Variable”. Usted debe recordar que las
variables en LabVIEW pueden ser de escritura o lectura. Al crear una variable local estas son
de escritura por defecto, aquí se utilizara para compararla y saber si es mayor que cero, por lo
que no la modificaremos. En este caso hay que cambiarla para su tipo de lectura, esto se hace
dando clic derecho sobre ella y seleccionando la opción “Change To Read”:




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                            82
Departamento de Automática y Computación                                       18/11/2006




Para comparar el valor de la variable, se debe utilizar la función de comparación “Grater Or
Equal To 0?” que se encuentra en la paleta de funciones. El resultado de esta comparación es
“True” o “False” y sirve de condición a la estructura “Case” por medio del selector       que
decidirá según su estado “booleano” cual código realizar.




Ya se está en condiciones de correr la aplicación, sin embargo usted se dará cuenta de que la
ejecución de la aplicación no es “buena”. Cuando se introduce un valor negativo se ejecuta
indefinidamente la opción de mostrar el cuadro de diálogo por lo que se bloquea la aplicación.
Este problema se soluciona muy fácilmente introduciendo un botón de cálculo, según el cual se
realizan las operaciones. Para ello se debe utilizar una estructura “case” más externa
gobernada por el botón de cálculo.




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                         83
Departamento de Automática y Computación                                     18/11/2006




Para obtener los resultados esperados la acción mecánica (Mechanical Action) debe colocarse
en uno de los siguientes estados:
    • Latch when Pressed
    • Latch when Released
    • Latch until Released




Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                      84
Departamento de Automática y Computación                                         18/11/2006




Si no se utiliza este modo persisten los errores planteados al principio.
¡Compruébelo y obtenga conclusiones!


Estudio Individual

Realice una calculadora capaz de hacer las operaciones básicas de suma, resta, multiplicación
y división entre dos números reales. Utilice un control de tipo “Menu Ring” para indicar la
operación a realizar. Note que este elemento gráfico está representado por una variable de tipo

     y que según su valor debe realizarse una operación de las cuatro mencionadas. Además,
debe utilizar dos controles para los operandos y un indicador para el resultado.




Ejercicio 2:

Elabore un programa en LabView que permita animar un control de labVIEW. El control debe
describir la figura geométrica de un cuadrado con aristas de 100 pixels.

Solución:



Como toda aplicación esta debe comenzar con la realización del código necesario para
ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar
el código siguiente:



Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.                                           85
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual
LabVIEW Instrumentación Virtual

Más contenido relacionado

La actualidad más candente

Clase 5 Analisis de Circuitos Ley de Voltaje de Kirchhoff
Clase 5 Analisis de Circuitos Ley de Voltaje de KirchhoffClase 5 Analisis de Circuitos Ley de Voltaje de Kirchhoff
Clase 5 Analisis de Circuitos Ley de Voltaje de KirchhoffTensor
 
Circuito magnetico
Circuito magneticoCircuito magnetico
Circuito magneticoVictor Vega
 
Aplicaciones de los diodos recortadores
Aplicaciones  de los  diodos recortadoresAplicaciones  de los  diodos recortadores
Aplicaciones de los diodos recortadoresFranklin J.
 
1.1 historia del control automatico
1.1 historia del control automatico1.1 historia del control automatico
1.1 historia del control automaticoMarco Moncayo
 
Ejercicios de-programacic3b3n-resueltos-con-step-7
Ejercicios de-programacic3b3n-resueltos-con-step-7Ejercicios de-programacic3b3n-resueltos-con-step-7
Ejercicios de-programacic3b3n-resueltos-con-step-7Guido Carmona Girón
 
Electrónica digital - Rectificación de onda en Protoboard
Electrónica digital - Rectificación de onda en Protoboard Electrónica digital - Rectificación de onda en Protoboard
Electrónica digital - Rectificación de onda en Protoboard David A. Baxin López
 
1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfetjosefer28051989
 
La curva característica del diodo
La curva característica del diodoLa curva característica del diodo
La curva característica del diodoantonio vasquez
 
Reporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezReporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezDiego Ramírez
 
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES)
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES) sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES)
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES) Sonerteck Mtz
 
PLC: ejercicios de sistemas secuenciales
PLC: ejercicios de sistemas secuencialesPLC: ejercicios de sistemas secuenciales
PLC: ejercicios de sistemas secuencialesSANTIAGO PABLO ALBERTO
 

La actualidad más candente (20)

PRACTICA 5
PRACTICA 5PRACTICA 5
PRACTICA 5
 
Clase 5 Analisis de Circuitos Ley de Voltaje de Kirchhoff
Clase 5 Analisis de Circuitos Ley de Voltaje de KirchhoffClase 5 Analisis de Circuitos Ley de Voltaje de Kirchhoff
Clase 5 Analisis de Circuitos Ley de Voltaje de Kirchhoff
 
Circuito magnetico
Circuito magneticoCircuito magnetico
Circuito magnetico
 
Historia del transformador.
Historia del transformador.Historia del transformador.
Historia del transformador.
 
Aplicaciones de los diodos recortadores
Aplicaciones  de los  diodos recortadoresAplicaciones  de los  diodos recortadores
Aplicaciones de los diodos recortadores
 
1.1 historia del control automatico
1.1 historia del control automatico1.1 historia del control automatico
1.1 historia del control automatico
 
MICROCONTROLADORES.ppt
MICROCONTROLADORES.pptMICROCONTROLADORES.ppt
MICROCONTROLADORES.ppt
 
Control industrial
Control industrialControl industrial
Control industrial
 
Tutor logo!
Tutor logo!Tutor logo!
Tutor logo!
 
3.1. Construcción de Transistor BJT
3.1. Construcción de Transistor BJT3.1. Construcción de Transistor BJT
3.1. Construcción de Transistor BJT
 
Ejercicios de-programacic3b3n-resueltos-con-step-7
Ejercicios de-programacic3b3n-resueltos-con-step-7Ejercicios de-programacic3b3n-resueltos-con-step-7
Ejercicios de-programacic3b3n-resueltos-con-step-7
 
Capacitancia electrica
Capacitancia electricaCapacitancia electrica
Capacitancia electrica
 
Electrónica digital - Rectificación de onda en Protoboard
Electrónica digital - Rectificación de onda en Protoboard Electrónica digital - Rectificación de onda en Protoboard
Electrónica digital - Rectificación de onda en Protoboard
 
Sesión 6: Teoría Básica de Transistores BJT
Sesión 6: Teoría Básica de Transistores BJTSesión 6: Teoría Básica de Transistores BJT
Sesión 6: Teoría Básica de Transistores BJT
 
Polarización de los Transistores
Polarización de los TransistoresPolarización de los Transistores
Polarización de los Transistores
 
1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet
 
La curva característica del diodo
La curva característica del diodoLa curva característica del diodo
La curva característica del diodo
 
Reporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezReporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirez
 
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES)
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES) sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES)
sistemas electrónicos (DIODO IDEAL, REAL Y APLICACIONES)
 
PLC: ejercicios de sistemas secuenciales
PLC: ejercicios de sistemas secuencialesPLC: ejercicios de sistemas secuenciales
PLC: ejercicios de sistemas secuenciales
 

Destacado

2 labview - _programación _g
2  labview  - _programación _g2  labview  - _programación _g
2 labview - _programación _gHugo Alaniz
 
LabVIEW Estructuras de Control
LabVIEW Estructuras de ControlLabVIEW Estructuras de Control
LabVIEW Estructuras de ControlDiego Becerra
 
Ejercicios lab view
Ejercicios lab viewEjercicios lab view
Ejercicios lab viewgato4048
 
Celular setting up Series B BOSCH
Celular setting up Series B BOSCHCelular setting up Series B BOSCH
Celular setting up Series B BOSCHRodrigo_98
 
Practicas labview pid discreto
Practicas labview pid discretoPracticas labview pid discreto
Practicas labview pid discretoEber Alanoca Cruz
 
Pseudocodigos
PseudocodigosPseudocodigos
PseudocodigosClariza
 
Practica pid labview
Practica pid labviewPractica pid labview
Practica pid labviewPablo Lopez
 
Prácticas labview
Prácticas labviewPrácticas labview
Prácticas labviewlizluvzmcr
 
Libro Labview 8.2
Libro Labview 8.2Libro Labview 8.2
Libro Labview 8.2Andy Medina
 
6 i.e. josefina muñoz gonzález foro padres 2012
6  i.e. josefina muñoz gonzález foro padres 20126  i.e. josefina muñoz gonzález foro padres 2012
6 i.e. josefina muñoz gonzález foro padres 2012semrionegro
 
Calidad y mejora
Calidad y mejoraCalidad y mejora
Calidad y mejorajflh
 

Destacado (20)

Curso labview 2014
Curso  labview 2014Curso  labview 2014
Curso labview 2014
 
Mathscript
MathscriptMathscript
Mathscript
 
2 labview - _programación _g
2  labview  - _programación _g2  labview  - _programación _g
2 labview - _programación _g
 
LabVIEW Estructuras de Control
LabVIEW Estructuras de ControlLabVIEW Estructuras de Control
LabVIEW Estructuras de Control
 
Ejercicios lab view
Ejercicios lab viewEjercicios lab view
Ejercicios lab view
 
LabVIEW - Estructuras
LabVIEW - EstructurasLabVIEW - Estructuras
LabVIEW - Estructuras
 
Arduino + lab view
Arduino + lab viewArduino + lab view
Arduino + lab view
 
Celular setting up Series B BOSCH
Celular setting up Series B BOSCHCelular setting up Series B BOSCH
Celular setting up Series B BOSCH
 
Practicas labview pid discreto
Practicas labview pid discretoPracticas labview pid discreto
Practicas labview pid discreto
 
Pseudocodigos
PseudocodigosPseudocodigos
Pseudocodigos
 
Practica pid labview
Practica pid labviewPractica pid labview
Practica pid labview
 
Toolkits para labview
Toolkits para labviewToolkits para labview
Toolkits para labview
 
Ejercicios propuesto de labview
Ejercicios  propuesto  de labviewEjercicios  propuesto  de labview
Ejercicios propuesto de labview
 
Curso lab view6i
Curso lab view6iCurso lab view6i
Curso lab view6i
 
Prácticas labview
Prácticas labviewPrácticas labview
Prácticas labview
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 
Libro Labview 8.2
Libro Labview 8.2Libro Labview 8.2
Libro Labview 8.2
 
6 i.e. josefina muñoz gonzález foro padres 2012
6  i.e. josefina muñoz gonzález foro padres 20126  i.e. josefina muñoz gonzález foro padres 2012
6 i.e. josefina muñoz gonzález foro padres 2012
 
Calidad y mejora
Calidad y mejoraCalidad y mejora
Calidad y mejora
 
Prolibertas ponencia encuentro voluntarios 2015
Prolibertas ponencia encuentro voluntarios 2015Prolibertas ponencia encuentro voluntarios 2015
Prolibertas ponencia encuentro voluntarios 2015
 

Similar a LabVIEW Instrumentación Virtual

Presentación
PresentaciónPresentación
Presentaciónlydina5
 
LabVIEW Nivel I (Semana 1)
LabVIEW Nivel I (Semana 1)LabVIEW Nivel I (Semana 1)
LabVIEW Nivel I (Semana 1)Israel Carrión
 
Informatica i (negocios y comercio internacional)
Informatica i (negocios y comercio internacional)Informatica i (negocios y comercio internacional)
Informatica i (negocios y comercio internacional)isat xalapa
 
Integracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaIntegracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaMoodleMoot Euskadi
 
Avance del semestre I.
Avance del semestre I.Avance del semestre I.
Avance del semestre I.Luis Daniel T
 
Informe tecnico-residencia-profesional
Informe tecnico-residencia-profesionalInforme tecnico-residencia-profesional
Informe tecnico-residencia-profesionalErnesto Zayas Olguin
 
Integracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaIntegracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaMoodleMoot Euskadi
 
Actividades de I.B. De Software.
Actividades de I.B. De Software.Actividades de I.B. De Software.
Actividades de I.B. De Software.Emilio
 
Actividades De I.B. De Software.
Actividades De I.B. De Software.Actividades De I.B. De Software.
Actividades De I.B. De Software.Emilio
 
1.4 software numerico
1.4 software numerico1.4 software numerico
1.4 software numericomorenito9001
 
Integración del laboratorio remoto WebLab-Deusto en Moodle
Integración del laboratorio remoto WebLab-Deusto en MoodleIntegración del laboratorio remoto WebLab-Deusto en Moodle
Integración del laboratorio remoto WebLab-Deusto en MoodleJaime Irurzun
 
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...Manuel Mujica
 
Guia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalGuia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalDavidSnchez297251
 
Cad avanzado para electrónica julio 2009 v2
Cad avanzado para electrónica julio 2009 v2Cad avanzado para electrónica julio 2009 v2
Cad avanzado para electrónica julio 2009 v2.. ..
 

Similar a LabVIEW Instrumentación Virtual (20)

Presentación
PresentaciónPresentación
Presentación
 
Arduino + lab view
Arduino + lab viewArduino + lab view
Arduino + lab view
 
Labview
LabviewLabview
Labview
 
LabVIEW Nivel I (Semana 1)
LabVIEW Nivel I (Semana 1)LabVIEW Nivel I (Semana 1)
LabVIEW Nivel I (Semana 1)
 
Informatica i (negocios y comercio internacional)
Informatica i (negocios y comercio internacional)Informatica i (negocios y comercio internacional)
Informatica i (negocios y comercio internacional)
 
Integracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaIntegracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia Zubia
 
Avance del semestre I.
Avance del semestre I.Avance del semestre I.
Avance del semestre I.
 
Informe tecnico-residencia-profesional
Informe tecnico-residencia-profesionalInforme tecnico-residencia-profesional
Informe tecnico-residencia-profesional
 
Prueba informatica1
Prueba informatica1Prueba informatica1
Prueba informatica1
 
Integracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia ZubiaIntegracion Laboratorio J Garcia Zubia
Integracion Laboratorio J Garcia Zubia
 
Actividades de I.B. De Software.
Actividades de I.B. De Software.Actividades de I.B. De Software.
Actividades de I.B. De Software.
 
Actividades De I.B. De Software.
Actividades De I.B. De Software.Actividades De I.B. De Software.
Actividades De I.B. De Software.
 
1.4 software numerico
1.4 software numerico1.4 software numerico
1.4 software numerico
 
Integración del laboratorio remoto WebLab-Deusto en Moodle
Integración del laboratorio remoto WebLab-Deusto en MoodleIntegración del laboratorio remoto WebLab-Deusto en Moodle
Integración del laboratorio remoto WebLab-Deusto en Moodle
 
Arduino labview
Arduino labviewArduino labview
Arduino labview
 
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...
DISEÑO DE UN PROTOTIPO FUNCIONAL DEL SISTEMA DE INFORMACIÓN PARA LA GESTIÓN D...
 
Introducci a n_proteus_
Introducci a n_proteus_Introducci a n_proteus_
Introducci a n_proteus_
 
Guia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalGuia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portal
 
Cad avanzado para electrónica julio 2009 v2
Cad avanzado para electrónica julio 2009 v2Cad avanzado para electrónica julio 2009 v2
Cad avanzado para electrónica julio 2009 v2
 
electronica residenciales.pptx
electronica residenciales.pptxelectronica residenciales.pptx
electronica residenciales.pptx
 

LabVIEW Instrumentación Virtual

  • 1. Instituto gfghf Instituto Superior Politécnico CUJAE Automática y Computación "José Antonio Echeverría", CUJAE, Marianao, Ciudad Habana, Apdo. Postal 19390, 260 6778 , 260-2055 / FAX: 267 29 64 PROGRAMACIÓN EN LABVIEW. PROGRAMACIÓN EN LENGUAJE “G”. TIPOS DE DATOS SIMPLES Y COMPLEJOS. ESTRUCTURAS DE CONTROL DE FLUJO. TRABAJO CON FICHEROS, TRABAJO CON TARJETAS DE ADQUISICIÓN DE DATOS, PUERTO SERIE Y PARALELO, TCP-IP Y DDE. Monografía elaborada por Dr. Valery Moreno Vega y Msc. Adel Fernández Prieto para el curso de Instrumentación Virtual dictado dentro de la asignatura Automática III en la carrera de Automática de la Facultad de Ingeniería Eléctrica del ISPJAE. Direcciones de Contacto: Email: valery@electrica.cujae.edu.cu y adel@electrica.cujae.edu.cu Teléfonos: 2663342, 2602055. 1ra Versión Revisada en Abril 2005.
  • 2. Departamento de Automática y Computación 18/11/2006 Indices Índice 1 Introducción 2 Tema I Conceptos básicos 4 Tema II LabVIEW básico 9 Tema III Tipos de datos simples 29 Tema IV Control de flujo de programa en LabVIEW. Estructuras repetitivas. 55 Tema V Más estructuras de control de flujo. 79 Tema VI Tipos de datos complejos. arreglos y clusters 95 Tema VII Controles forma de onda. implementación de funciones en LabVIEW 117 Tema VIII Trabajo con ficheros 142 Tema IX. Tarjetas de adquisición de datos (PCL-818L). 161 Tema X Trabajo con puerto serie en LabVIEW 200 Tema XI Trabajo con puerto paralelo en LabVIEW 213 Tema XII Comunicación TCP-IP en LabVIEW 221 Tema XIII Comunicación DDE 235 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 1
  • 3. Departamento de Automática y Computación 18/11/2006 Introducción: En esta monografía el lector encontrará una introducción a algunos temas relacionados con la instrumentación virtual y específicamente sobre la herramienta de programación LabVIEW. Los temas abordados comprenden: 1. LabVIEW básico a. Los Instrumentos virtuales. b. Los conceptos de control e indicador. c. El ambiente de desarrollo. d. Tipos de datos simples. e. Estructuras de control de flujo. f. Tipos de datos complejos. g. Confección de funciones (subVI). h. Trabajo con ficheros. 2. LabVIEW avanzado a. Trabajo con tarjetas de adquisición de datos. b. Trabajo con puerto serie y paralelo. c. Trabajo con TCP-IP. d. Trabajo con DDE. El primer tema es necesario como introducción a cualquier lenguaje de programación, y en el mismo se abordan los conceptos en que se basa la programación gráfica. Es de destacar que en la programación gráfica todo esta muy ligado a la iconografía con que se representan los diferentes elementos. Un lector que esté acostumbrado a los lenguajes por comandos, llega a identificarse con las palabras claves que forman determinado lenguaje, por ejemplo: un for, int, switch en C++, sin embargo, con LabVIEW este concepto cambia, para ahora asociar una forma o icono en vez de un conjunto de caracteres con las palabras claves. LabVIEW es un lenguaje de programación construido sobre la base de objetos, sin embargo no es posible construir nuevos objetos, como pudiera hacerse con otros lenguajes como C++, Java, Pascal etc, es por ello que la manera de construir aplicaciones es a través de una metodología de programación estructurada, utilizando como recurso la implementación de funciones, que en este caso se denominan “SubVI”. El presente trabajo comienza con una breve explicación de los conceptos básicos relacionados con esta herramienta de trabajo, para luego exponer la totalidad de los temas mediante ejercicios resueltos, que el lector puede realizar desde su computadora personal o laboratorio. De esta manera se introducen los tipos de datos, las sentencias de control de flujo y la biblioteca de funciones básica y especializada, a través de ejemplos. También a lo largo de estos temas se proponen ejercicios como estudio independiente. El segundo tema que aquí hemos denominado como LabVIEW avanzado, no incluye ni mucho menos todos los temas que por este nombre pudieran estar. Simplemente nos a parecido que se salen del modulo básico de esta herramienta. Es de destacar que el trabajo con las tarjetas de adquisición de datos se realiza basado en la PCL-818L, esta es solo una, de muchísimas variantes que existen actualmente en el mercado, sin embargo, el estudio detallado que se hace de la misma, y la metodología de diseño de su controlador, nos parece un punto de partida práctico que puede ser utilizado por los interesados para generalizarlo a tarjetas de otros fabricantes. Quedan fuera temas tan interesantes como el estudio de las funciones de análisis matemático, el uso de filtros para señales de entrada. Además, el estudio de los DataSockets que se basan en el protocolo TCP-IP. También el trabajo con OLE/Active X y la conexión con Bases de Datos profesionales. Sin embargo, ya el volumen de esta edición es suficiente mente largo. Es de destacar que su estructura esta completa, siguiendo una secuencia donde lo aprendido sirve de base a lo que se aprende y donde ningún concepto queda fuera de lo que se ha abordado anteriormente. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 2
  • 4. Departamento de Automática y Computación 18/11/2006 Esta edición un poco abre una primera puerta a la escasez de bibliografía que existe alrededor del Lenguaje de programación LabVIEW. Sabemos que estos lenguajes son susceptibles de actualizaciones, pero también el hecho de que los temas abordados son los suficientemente básicos, incluyendo aquellos que se denominaron como avanzados, nos da suficiente paz, como para pensar que este volumen se pueda utilizar por algunos años, no diez o veinte, pero si hasta tres años. Esperamos disfrute y encuentre útil esta monografía. Es ese el deseo de los autores. Los autores. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 3
  • 5. Departamento de Automática y Computación 18/11/2006 TEMA I Conceptos Básicos Primeramente antes de entrar en que es el LabView vamos a conocer nuevos conceptos acerca de la Instrumentación Virtual. Semánticamente virtual es algo aparente, que no es real pero que se comporta como tal. En la actualidad se manejan términos como los de instrumentación virtual, laboratorio virtual, ambientes virtuales, y realidad virtual. No se debe confundir laboratorio virtual con instrumento virtual aunque existe una estrecha relación. Se habla de laboratorio virtual cuando se simula un proceso o sistema que se parece y se comporta como un proceso o sistema real, para poder observar su comportamiento. Se habla de instrumento virtual cuando se emplea la computadora para realizar funciones de un instrumento clásico pudiendo agregarle al instrumento otras funciones a voluntad. A pesar de esta pequeña diferencia, un laboratorio con instrumentos virtuales es un laboratorio virtual. En el campo de la instrumentación quien introdujo por primera vez el termino virtual fue la compañía National Instrument en 1986, al elaborar un programa que de manera simple y gráfica permitiera simular un instrumento en una PC, con lo cual dio origen al concepto de instrumento virtual; definido como “un instrumento que no es real, corre en una computadora y tiene funciones definidas por programación”. El instrumento tradicional ya está definido, con capacidades de entrada/salida de señales y una interfaz de usuario fija. El fabricante define la funcionalidad del instrumento, el usuario no puede cambiarla. Dada la arquitectura abierta de los PCs y las estaciones de trabajo, la funcionalidad de los instrumentos virtuales esta definida por el usuario. Además, la capacidad de procesamiento de los instrumentos virtuales es superior a la de instrumentos estándares, debido a la rápida evolución de la tecnología de los PCs y de las estaciones de trabajo como resultado de las grandes inversiones que se efectúan en la industria. En 1986 National Instruments introdujo LabView 1.0 con el propósito de proveer una herramienta de software que permitiera a los ingenieros desarrollar sistemas a la medida de sus necesidades, del mismo modo que la hoja de cálculo permitía a los hombres de negocios analizar datos financieros. Este nombre LabView viene de las siglas en ingles Laboratory Virtual Instrument Engineering Workbench. La versión del LabView 6.1 y los requerimientos mínimos son: 1. 32 MB de RAM y 65 MB de HD / Parcial, 300MB Completa. 2. Incluye Windows NT 4.0 o superior ¿Que es el LabView?. El LabView es un programa para el desarrollo de aplicaciones de propositos generales, tales como el C, el Basic, el Pascal. Herramientas de Desarrollo de Software Ambiente de + Lenguaje de desarrollo Programación Figura1: Esquema general Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 4
  • 6. Departamento de Automática y Computación 18/11/2006 Ambiente de Desarrollo Todo ambiente de desarrollo testa formado por los siguientes elementos. Es importante que se busque y se practiquen con frecuencia ya que esto permite que el desarrollo de las aplicaciones se realice con mayor rapidez y calidad. Depuración • Puntos de ruptura. • Ejecución paso a paso. • Ventana de seguimiento a variables Facilidades de desarrollo • Panel frontal: Para observar el estado de las pantallas que estamos desarrollando. • Paletas de funciones y controles para adicionar a nuestro proyecto. • Herramientas para alinear los controles y funciones. Lenguaje de Programación. LabVIEW usa el lenguaje de programación gráfico Lenguaje G. Las posibilidades son normalmente las mismas que presenta cualquier lenguaje de programación: Sentencias (Gráficos) de control de Flujo y repetitivas. Posibilidad de declaración de variables. Modularidad a través de la confección de funciones. Trabajo con los eventos y propiedades de los controles y variables. Incluye bibliotecas de funciones extendidas para cualquier tarea de programación. Basado en objetos pero no permite nuevas declaraciones. Mecanismos de conexión con lenguaje C y C++ y DLL. Algo muy característico de LabVIEW y es por ello que se considera una herramienta para el desarrollo de instrumentos virtuales, es su extensa biblioteca de funciones especializada en la adquisición, acceso a buses de campo, procesamiento matemático y procesamiento de señales Tarjetas de adquisición de datos Bus GPIB. Entrada/ Salida (Puerto serie y paralelo). Arquitectura VISA. Análisis de señales. Almacenamiento de datos. Comunicación (TCP-IP, UDP y otros). Matemáticas. ¿Cómo se trabaja con el LabVIEW? Los programas en LabVIEW son llamados Instrumentos Virtuales (y son salvados con la extensión .VI). Los programas de LabVIEW constan de un panel frontal y un diagrama de bloques. En el panel frontal se diseña la interfaz con el usuario, viene a ser la cara del VI y en el diagrama de bloques se programa en lenguaje G el funcionamiento del VI. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 5
  • 7. Departamento de Automática y Computación 18/11/2006 Programas de LabView (*.vi) Panel Frontal + Diagrama Bloques • Diseño de interfaz • Lenguaje G • Cara del • Lógica del programa instrumento virtual El Panel Frontal El panel frontal de un VI es una combinación de controles e indicadores. Los controles son aquellos elementos que entregan datos al diagrama en bloques desde el panel frontal por entrada desde teclado o con el mouse, simulan los dispositivos de entrada de datos del VI y pasan los datos al diagrama en bloque del VI. Los indicadores son aquellos elementos que entregan datos al panel frontal desde el diagrama en bloques para ser visualizados en el display, simulan los dispositivos de salida de datos del VI que toman los datos desde el diagrama en bloque del VI. Para adicionar controles o indicadores al panel frontal se seleccionan estos de la paleta de controles que se encuentra en una ventana flotante y a la cual se accede a través de accionar el botón derecho del ratón sobre el panel frontal. A los controles e indicadores se les puede cambiar el tamaño, la forma, y la posición, además cada control o indicador tiene un pop-up menú en el cual se pueden cambiar varios atributos o seleccionar diferentes opciones. Los controles: Entregan datos al diagrama en bloques por mediación del teclado o el ratón, Simulan dispositivos de entrada de datos del VI Los indicadores Muestran datos en el panel frontal desde el diagrama en bloques para ser visualizados Simulan los dispositivos de salida de datos del VI. El Diagrama en Bloques Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 6
  • 8. Departamento de Automática y Computación 18/11/2006 La ventana Diagrama almacena el diagrama en bloques del VI, el código fuente gráfico (Lenguaje G) del Instrumento Virtual. Se construye este diagrama con bloques funcionales denominados nodos, conectándose o uniéndose entre sí según sea el objetivo. Estos nodos realizan todas las funciones específicas necesarias para el VI y controlan el flujo de la ejecución del VI. Tipos de Datos en LabView Tabla 3.1 Tipos de Datos en LabView Long I32 32 (4 bytes) -2147483648 hasta 2147483647 Word I16 16 (2 bytes) -32768 hasta 32767 Byte I8 8 (1 bytes) -128 hasta 127 Long Unsigned U32 32 (4 bytes) 0 hasta 4294967295 Word Unsigned U16 16 (2 bytes) 0 hasta 65535 Byte Unsigned U8 8 (1 bytes) 0 hasta 255 Extended EXT 96 (12 bytes) -1.00E–507 hasta 9.00E+515 Double DBL 64 (8 bytes) -5.00E-324 hasta 1.70E+308 Single SGL 32 (4 bytes) -1.40E-45 hasta 3.40E+38 Complex Extended CXT 192 (24 bytes) -1.00E–507 hasta 9.00E+515 Complex Double CDB 128 (16 bytes) -5.00E-324 hasta 1.70E+308 Complex Single CSG 64 (8 bytes) -1.40E-45 hasta 3.40E+38 Cadena(String) abc 1 byte/caracter Conjunto de Caracteres ascii. Arreglos(Array) [...] Según el tipo de los elementos del arreglo Grupos (Cluster) Path Device ¿Cómo se declaran los tipos de variables numéricas ? • Cuando se pone un control o indicador en el panel frontal, LabView pone un terminal correspondiente a este control o indicador en el diagrama en bloque. • Este terminal desaparece solo cuando se borra el control o indicador. • Los enlaces o alambres son los caminos de los datos entre los terminales fuente y los terminales destino. • No se permite enlazar dos terminales fuentes ni dos terminales destinos, y si se permite enlazar un terminal fuente a varios terminales destino. Configuración Representación Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 7
  • 9. Departamento de Automática y Computación 18/11/2006 Variables locales Las variables locales permiten hacer lecturas y escrituras sobre el control o indicador al cual está asociado. // esto es C int a = 0 ; //declaración a = x +y *z; // escritura m = a* c; // lectura Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 8
  • 10. Departamento de Automática y Computación 18/11/2006 TEMA II LabVIEW Básico • Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseño o panel frontal, y la pantalla o ventana de flujo de programa. • Conocer los principales indicadores y botones y las acciones más comunes de los mismos. • Conocer las teclas de acceso directo y las principales opciones de la ayuda y de la ejecución del programa. Ejercicio 1: Elabore un programa en LabView que permita conectar a un termómetro y un tanque dos controles de sintonía de manera tal que cuando varíen su valor el nuevo adquirido se refleje en los indicadores tipo termómetro y en el tipo tanque. Solución: Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente: En esa pantalla podemos seleccionar varias opciones entre las cuales están el abrir un nuevo Intrumento Virtual (New VI), abrir uno ya existente, buscar ejemplos, demos, tutoriales, etc. Para crear un nuevo programa (VI) damos clic en el botón . A continuación aparece una ventana simular a la que se presenta a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 9
  • 11. Departamento de Automática y Computación 18/11/2006 La primera pantalla que aparece es el panel frontal o ventana de diseño de la aplicación mientras que la que aparece en segundo plano es la ventana de flujo de programa o de diagrama. Recuerde que puede conmutar entre uno y otro. Compruébelo con la combinación Ctrl+E. Muchas veces es conveniente organizar las dos ventanas de forma tal que se dividan la pantalla cada una en una mitad. Esto facilita el desarrollo del programa. Para lograr dicha distribución LabView dispone de la combinación Ctrl+T (también se puede realizar mediante la opción del menú Windows/Tile Left and Right). Una vez que se realiza esta acción se obtiene la siguiente distribución: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 10
  • 12. Departamento de Automática y Computación 18/11/2006 Ya estamos listo para comenzar a darle solución al ejercicio. Primero seleccionemos los controles que podremos. Para ello seleccionamos mediante un clic la ventana izquierda (panel frontal) y a continuación damos clic derecho. Debe aparecer un menú emergente llamado controls. Seleccionamos en controls la primera de las opciones, que se llama numerics y se representa en el menú controls con el símbolo . Aparecerá algo similar a: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 11
  • 13. Departamento de Automática y Computación 18/11/2006 Observe que en ambas ventanas, la de Controls y la Numeric, en el caption de las mismas aparece el nombre de la ventana precedido de una especie de tachuela, o sea, . Este símbolo aparece aquí porque si queremos dejar la ventana fija (para evitar que cada vez que se quiera poner un nuevo control tengamos que dar clic derecho y buscar la opción que nos interesa) podemos hacerlo cambiando el ¨estado¨ de la tachuela dando clic encima de ella. Como en esta aplicación vamos a ubicar más de un control y algunos indicadores, dejemos fija la ventana de Numeric. Si se procede a ubicar el puntero del mouse en la tachuela que aparece justo antes de numeric en el caption de la ventana del mismo nombre se observa que dicha tachuela cambia de posición o forma: y si en ese momento damos clic obtenemos: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 12
  • 14. Departamento de Automática y Computación 18/11/2006 Los controles tipo sintonía son los que se identifican por knob y dial. Son los primeros que aparecen en la tercera fila de la pantalla anterior. Para incorporarlos a nuestro panel frontal simplemente los seleccionamos (el tipo de cursor debe ser el de selección que se comentó en conferencia) que es el que por defecto debemos tener en estos momentos. Si no es ese el que tenemos podemos cambiarlo visualizando la ventana de herramientas (opción windows/Show Tools Palette) y seleccionando el mencionado tipo de cursor. El procedimiento se muestra en las dos ventanas siguientes (el cursor seleccionado aparece “hundido” en comparación con el resto: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 13
  • 15. Departamento de Automática y Computación 18/11/2006 Continuando con la idea original de insertar los controles en el panel frontal, seleccionamos los de tipo sintonía (1ero y segundo de la tercera fila) en la paleta o ventana numeric mostrada en las figuras precedentes. La selección se realiza dando clic encima del de interés y colocándolo en el panel frontal (de la forma usual con que se hace esto en lenguajes visuales como el C++ Builder). Después de realizada la operación las pantallas deben tener una apariencia como sigue (se muestra el segmento de interés de las ventanas): Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 14
  • 16. Departamento de Automática y Computación 18/11/2006 y: Note que a medida que se introducen los controles en el panel frontal en la pantalla de diagrama (figura anterior) van apareciendo variables asociadas a los controles. Dichas variables se identifican con un nombre (el mismo del control, de manera que si se cambia en el control se cambia en la pantalla de diagrama). En dependencia del tipo de elemento numérico que se seleccione las variables declaradas serán de escritura (fijan valores) o de lectura (reciben valores). En este caso los controles del panel frontal tienen variables de escritura. Es Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 15
  • 17. Departamento de Automática y Computación 18/11/2006 fácil identificar cuando una variable es de lectura o escritura pues LabView nos lo indica con una especie de saeta, que indica la dirección del flujo de los datos. En el ejemplo anterior ambas variables están representadas con los símbolos . Note que en dicho símbolo aparece la saeta indicando salida, o sea, escritura. En el símbolo anterior también se puede leer la cadena DBL que nos dice de que tipo de datos es esa variable. Cuando se estudien los tipos de datos simples veremos que este tipo (que por defecto tienen los controles) es el tipo Double. Los tipos de datos que se definen por defecto pueden cambiarse. Para ello seleccionamos la variable en la pantalla de diagrama y damos clic derecho. En el menú emergente que aparece buscamos la opción Representation: Note que hay varios tipos de datos. El que actualmente está seleccionado aparece encerrado en un recuadro azul como en la figura anterior. Si se quiere seleccionar otro basta con seleccionarlo con clic izquierdo. Observe que en dependencia de la variable se podrá seleccionar para ella distintas representaciones o tipos de datos, pero no todos. En este caso hay varios tipos de datos que aparecen en gris (los últimos), indicándonos que no se admiten esos tipos para el actual elemento o control. Hagamos un cambio, y del tipo DBL por defecto que tiene llevémoslo a U8 que es un tipo de dato entero corto sin signo (8 bits, de 0 a 255 como posibles valores). Para ello seleccionamos en el menú de representation el elemento identificado como U8. Los cambios se manifiestan en la pantalla de diagrama cambiando el color de la variable para indicar el otro tipo (cada tipo tiene un color). Debemos obtener: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 16
  • 18. Departamento de Automática y Computación 18/11/2006 Note que en el panel frontal la escala del control también cambió para adaptarse al nuevo tipo de variable (por ejemplo, no tiene valores decimales pues es el control es de tipo entero). De igual forma (clic derecho sobre el control) la apariencia del control en el panel frontal y de su escala se puede modificar, así como algunas de sus propiedades. En las figuras que aparecen a continuación se ponen algunos ejemplos: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 17
  • 19. Departamento de Automática y Computación 18/11/2006 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 18
  • 20. Departamento de Automática y Computación 18/11/2006 Otras opciones incluyen escalas logarítmicas (Mapping), espaciado arbitrario o uniforme, etc. El control también se puede redimensionar, o sea, el tamaño y posición inicial que aparece en el panel frontal son atributos que se pueden modificar en tiempo de diseño. Cada control lo indica de una manera fácil de identificar, usualmente mediante un rectángulo que encierra al control o parte de este durante el movimiento del mouse sobre el elemento. A continuación se muestra un ejemplo: Note que se han señalado cuatro esquinas. Moviendo el puntero del mouse para cualquiera de esas esquinas se puede modificar el radio de la circunferencia que representa el botón de sintonía. El resto de los elementos del control, excepto la etiqueta (en este caso Dial), se redimensionan al redimensionarse la circunferencia. A continuación se representa al mismo elemento redimensionado. Hasta este punto se han situado en la pantalla los elementos gráficos que harán la función de “controles”. Ahora corresponde seleccionar los indicadores que mostrarán su valor de acuerdo Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 19
  • 21. Departamento de Automática y Computación 18/11/2006 a los controles. Estos indicadores están situados en la misma paleta, o sea en la paleta de controles numéricos. En este caso utilizaremos el indicador “Tank” y el “thermometer”, que se seleccionan de la siguiente manera: Para luego obtener el siguiente diseño: Para terminar y como se ha mencionado en los talleres, debemos colocar un botón que permita a los usuarios terminara la aplicación. Para ello debemos seleccionar este control de la paleta de funciones numéricas. Esto se realiza de la siguiente forma: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 20
  • 22. Departamento de Automática y Computación 18/11/2006 El diseño final del “Panel Frontal” queda: Ahora corresponde trabajar en la ventana del diagrama en bloques. Para ello podemos utilizar las teclas de acceso rápido (Ctrl+E). En esta ventana debemos utilizar el lenguaje de programación G para establecer la lógica de nuestra aplicación. Antes de comenzar tenemos las cinco variables que corresponden a los cinco controles que hemos colocado en la pantalla. El código luce de la siguiente forma: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 21
  • 23. Departamento de Automática y Computación 18/11/2006 El primer código G que debemos programar es el necesario para comenzar y terminar la aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana “stop” (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se modela en programación a través de un “ciclo while”. Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el boton: y luego se busca la opción “while loop”. Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la siguiente pantalla. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 22
  • 24. Departamento de Automática y Computación 18/11/2006 Al finalizar se obtiene la siguiente estructura de programa G: Para finalizar el programa solo nos resta realizar las asignaciones correspondientes. Es fácil darse cuenta de que las variables que corresponden a los controles deben ser asignadas a las variables que representan a los indicadores. Para ello debemos utilizar el cursor que se puede obtener utilizando la tecla (Tab) o seleccionándolo directamente en la paleta de herramientas “tools Palette”. Una vez conectados el código queda como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 23
  • 25. Departamento de Automática y Computación 18/11/2006 Note que el flujo de los datos va desde el control hacia el indicador y note también que la representación gráfica de ambas variables pese a ser del mismo tipo de datos no es igual: El borde es más grueso en los controles que en los indicadores, así como la flecha es de salida en los primeros y de entrada en los segundos. Finalmente debemos conectar el control booleano a la condición de salida del ciclo do..While . Para ello debemos utilizar un “negador” ya que el botón por defecto está en falso. Para ello se utilizan los operadores boolenos que se encuentran en la paleta de funciones según se muestra debajo: Al conectarlos queda de la siguiente forma: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 24
  • 26. Departamento de Automática y Computación 18/11/2006 Con ello queda resuelto el problema planteado. Sin embargo ahora debemos correr la aplicación, para ello se debe utilizar la barra de botones colocada en la ventana del diagrama: El botón permite ejecutar la aplicación, mientras qué el botón permite terminar de ejecutar la aplicación. Para realizar una pausa debemos utilizar el botón , luego podemos utilizar los botones para ejecutar paso a paso la aplicación. El primero ejecuta instrucción por instrucción, entrando en las funciones si las hubiera, mientras que el segundo si encontrara una función, la ejecuta como si fuera un solo paso. El tercer tipo de botón termina la ejecución paso a paso. Un botón muy interesante es que ejecuta la aplicación de manera continua pero introduciendo una demora entre instrucción e instrucción para que pueda depurarse la aplicación. Además se puede observar los valores asignados a las variables y funciones así como los valores devueltos por estas. Si quisiéramos utilizar una ventana de depuración se debe situar el ratón en una de las conexiones o asignaciones relacionadas con la variable que se debe depurar y dar clic derecho: A continuación seleccionar la opción “Probe” como se muestra a continuación: Luego se ve el valor de la variable en una ventana contextual como la siguiente: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 25
  • 27. Departamento de Automática y Computación 18/11/2006 Si en el paso anterior a este hubiéramos seleccionado la opción “Set Breakpoint” entonces el código se ve de la siguiente forma: Y la aplicación se ejecutará hasta este punto, interrumpiéndose antes de realizar la asignación. El segundo ejercicio que se propone para este laboratorio permitirá conocer los diferentes tipos de botones que existen en el Labview. Una vez realizado el mismo se deberá conocer cuando utilizar uno u otro en dependencia de la aplicación. Como toda aplicación esta debe comenzar con la realización del código necesario para ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar el código siguiente: Ahora completamos la interfaz de la aplicación (Panel de Control) con los seis tipos de botones que se pueden colocar en LabView, además colocaremos seis “leds” que nos indicarán la manera en que funcionan estos tipos de botones. La interfaz debe quedar de la siguiente manera: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 26
  • 28. Departamento de Automática y Computación 18/11/2006 Luego usted debe programar la opción “Mechanical Action” de los tipos de controles voléanos, según se indica en el texto. Para ello debe dar clic derecho sobre el botón de la siguiente manera: Luego en la ventana del código se asigna a cada botón un “led” que estará encendido solo cuando el valor del botón es verdadero. Esto queda así: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 27
  • 29. Departamento de Automática y Computación 18/11/2006 El funcionamiento de los tres primeros botones es muy parecido. En el primer caso el led se encenderá si se presione el botón, y permanecerá en ese estado hasta que se vuelva a presionar el botón. El segundo caso es idéntico pero en este caso cambiará cuando se deje de presionar el botón. En el tercer caso se encenderá el led mientras se tenga presionado el botón. Los siguientes tipos de botones tienen relación con el tiempo que demora el Labview en leer el cambio de estado de los botones. En el cuarto caso, inmediatamente después que se presione el ratón sobre el botón este cambiará de estado y permanecerá en él hasta tanto el Labview pueda leer el cambio de estado. Luego se retornará al estado anterior. La quinta variante es muy parecida pero en este caso el botón no cambiará de estado hasta que se deje de presionar el ratón. La sexta variante funciona de manera que el botón cambia de estado con solo presionar el botón y permanece encendido todo el tiempo en que se tiene presionado el ratón sobre le botón. Una vez que se suelte el ratón, el botón permanecerá en este estado hasta tanto el labview sea capaz de notarlo, luego se retornará al estado anterior. Para poder entender bien el funcionamiento de los diferentes tipos de botones, sobre todo los tres últimos, es necesario que ejecute la aplicación utlizando la herramienta de depuración que hace que el Labview lea con mayor lentitud los controles. Esto hace que se pueda observar claramente cuando es que se produce la lectura del estado de los botones por el labview. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 28
  • 30. Departamento de Automática y Computación 18/11/2006 TEMA III Tipos de Datos simples • Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseño o panel frontal, y la pantalla o ventana de flujo de programa. • Conocer los tipo de datos principales: numéricos, booleanos y de cadena. • Conocer los operadores y funciones básicas para el trabajo con los tipos de datos simples. Ejercicio 1: Elabore un programa en LabView que permita indicar el nivel de un tanque en un elemento gráfico de Labview. El valor del nivel varía entre 0 y 100 unidades y debe obtenerse a través de una función aleatoria. El programa debe indicar un estado de alarma cuando el nivel sobrepase un valor de referencia que los usuarios deben establecer. El estado de alarma se indicará por medio del color del elemento gráfico seleccionado: Azul: estado normal, Rojo: estado de alarma. Solución: Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente: En esa pantalla podemos seleccionar varias opciones entre las cuales están el abrir un nuevo Intrumento Virtual (New VI), abrir uno ya existente, buscar ejemplos, demos, tutoriales, etc. Para crear un nuevo programa (VI) damos clic en el botón . A continuación aparece una ventana simular a la que se presenta a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 29
  • 31. Departamento de Automática y Computación 18/11/2006 La primera pantalla que aparece es el panel frontal o ventana de diseño de la aplicación mientras que la que aparece en segundo plano es la ventana de flujo de programa o de diagrama. Recuerde que puede conmutar entre uno y otro. Compruébelo con la combinación Ctrl+E. Pasos de la solución 1. Primero seleccionemos los controles que pondremos. Para ello seleccionamos mediante un clic la ventana izquierda (panel frontal) y a continuación damos clic derecho. Debe aparecer un menú emergente llamado “controls”. Seleccionamos en “controls” la primera de las opciones, que se llama “numerics” y se representa en el menú “controls” con el símbolo . Aparecerá algo similar a: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 30
  • 32. Departamento de Automática y Computación 18/11/2006 Como se puede observar el elemento “Tank” es el más indicado para representar el nivel que es requerido en el ejercicio. Para colocarlo en el “panel frontal” del instrumento virtual que estamos diseñando, debemos seleccionarlo en la paleta de controles y luego soltarlo en el “panel frontal”. El resultado es el siguiente: Existen varias propiedades que podemos variar para este control. Para ello debemos dar clic derecho sobre el control y seleccionar por ejemplo la opción de mostrar el indicador digital, como se muestra en la figura siguiente: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 31
  • 33. Departamento de Automática y Computación 18/11/2006 2. Según el enunciado del problema debemos colocar la escala del tanque entre los valores de 0 y 100 unidades. Para ello debemos seleccionar el cursor en la paleta de herramientas o pulsar la tecla “tab”, hasta que el cursor en la pantalla quede de la siguiente manera: . Una vez que se tiene seleccionado este cursor se da doble-clic sobre el máximo valor de la escala del indicador “tank”, se cambia la escala de 10 a 100 y se presiona la tecla “enter”. Esto se realiza de la siguiente manera: Paso 1 Paso 2 3. El otro elemento gráfico necesario para resolver este ejercicio es un control numérico para establecer la referencia de la alarma. De la misma manera que se seleccionó el elemento “Tank” ahora debemos seleccionar un control digital: Luego la pantalla queda como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 32
  • 34. Departamento de Automática y Computación 18/11/2006 Obsérvese que el nombre del control queda seleccionado, si en este momento se utiliza el teclado, se puede cambiar directamente el encabezado del control. En este caso debemos colocar el nombre: referencia de nivel. 4. Para terminar la interfaz de usuario se debe colocar un botón “booleano” que permita terminar la ejecución de un programa. Esto se realiza en la paleta de controles seleccionando los elemento booleanos para luego escoger “Stop Button”: La interfaz final queda como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 33
  • 35. Departamento de Automática y Computación 18/11/2006 Ya estamos en condiciones de programar, en base a los elementos gráficos seleccionados para nuestra interfaz, la lógica que dará solución a nuestro ejercicio. Para ello pasamos directamente a la ventana del diagrama (Ctrl+E). 6. El primer código G que debemos programar es el necesario para comenzar y terminar la aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana “stop” (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se modela en programación a través de un “ciclo while”. Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el boton: y luego se busca la opción “while loop”. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 34
  • 36. Departamento de Automática y Computación 18/11/2006 7. Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la siguiente pantalla. Al finalizar se obtiene la siguiente estructura de programa G: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 35
  • 37. Departamento de Automática y Computación 18/11/2006 8. El ciclo tiene dos variable implícitas: la iteración representada por y la condición de salida, representada por . Si negamos la variable booleana y la conectamos a la condición de salida, se construye la lógica necesaria para la ejecución y salida del programa. Para negar la variable booleana “stop” debemos utilizar los operadores booleanos que se seleccionan en la paleta de funciones como sigue: 9. Allí debemos seleccionar como nuestra la figura, el operdor “Not”. Y colocarlo en nuestra ventana del diagrama de la siguiente forma: Antes de conectarlos Después de conectarlos 10. El tipo de datos que representa a nuestro tanque y al controlador de referencia es por defecto Double . Pero esto se puede cambiar de la misma manera que se hizo en el laboratorio anterior. Antes de seguir debemos verificar que la variable “Tank” esté configurada como “indicador” y la variable “referencia de nivel” esté configurada como “control”. (Recordar la simbología) 11. Según el enunciado del ejercicio el tanque debe recibir el valor de nivel de una función aleatoria. En el caso de labview esta función se encuentra entre las funciones numéricas y se puede escoger como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 36
  • 38. Departamento de Automática y Computación 18/11/2006 12. Esta función brinda un valor aleatorio de tipo “double” entre 0 y 1. Sin embargo nuestra aplicación requiere que el nivel varía entre 0-100. Para ello debemos multiplicar la salida de esta función por el valor entero 100. Con ello se logra nuestro objetivo. La función de multiplicación se encuentra en la misma paleta de funciones numérica y se representa por el símbolo: que recibe dos valores y devuelve la multiplicación de ambos. Además de esta propia paleta debe utilizarse una constante numérica entera que contenga el valor 100 que será el otro elemento necesario. Después de colocar estas funciones y variables se obtiene el siguiente diagrama: 13. Ahora debemos conectar los elementos según la lógica a seguir. En nuestro caso queda como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 37
  • 39. Departamento de Automática y Computación 18/11/2006 En cada iteración del ciclo el resultado de la función aleatoria se multiplica por 100 y este valor se asigna a la variable que representa al control tanque. 14. Ahora debemos comparar el valor del tanque con la referencia entrada por el usuario. Si este valor es mayor que la referencia se cambiará el color del tanque a rojo, sino, el tanque será de color azul. Para ello es necesario una función de comparación, que se puede encontrar en la paleta de funciones “Comparison”: Ahora la pantalla queda como sigue: Para modificar el color del tanque debemos utilizar la propiedad FillColor que se selecciona de la siguiente manera: 15. De clic derecho sobre la variable “Tank” y seleccione la opción Create, a continuación seleccione la opción “Property Node” según se muestra a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 38
  • 40. Departamento de Automática y Computación 18/11/2006 En la pantalla del diagrama se muestra el siguiente código: 16. En este caso la propiedad de la variable “tank”que se muestra por defecto es “Visible”, sin embargo si damos clic derecho sobre ella y seleccionamos la opción “Properties” y luego la opción “Fill Color” entonces nuestra propiedad se convierte en la que buscamos. El código es el que sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 39
  • 41. Departamento de Automática y Computación 18/11/2006 17. Si se observa detenidamente podemos ver que la propiedad “Fill Color” de la variable “Tank” es de lectura, sin embargo se necesita variar la misma en dependencia del resultado de la comparación del valor y la referencia. Para cambiar esta propiedad a escritura debemos dar clic derecho sobre la misma y seleccionar la opción “Change To Write”. Con ello el resultado grafico es de a . 18. Para continuar nuestra aplicación es necesario un bloque de toma de decisión (bloque if- then-else) que permita escribir un color u otro en dependencia del resultado de la comparación. Este bloque puede encontrarse en la “paleta de funciones”, específicamente en la paleta “Comparison” la función “Select” esta instrucción retorna el valor conectado en “t” o “f” en dependencia del valor de “s”. Si “s” es verdadero retorna “t”, en caso contrario retorna “f”. “t” y “f”pueden ser de cualquier tipo de dato. Al colocarlo en nuestro diagrama de bloque, podemos presionar Ctrl+H para obtener la ayuda contextual que se muestra debajo. El diagrama G ahora luce como sigue: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 40
  • 42. Departamento de Automática y Computación 18/11/2006 El valor que debe retornar la función “Select” debe ser Rojo, si la condición es verdadera y Azul si es falsa. Para ello es necesario utilizar constantes enteras que representen los colores deseados. 19. Esto es posible utilizando la paleta de funciones y escogiendo dos constantes “Color Box Constant”, una para el rojo y otra para el azul. La manera de hacerlo se muestra abajo. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 41
  • 43. Departamento de Automática y Computación 18/11/2006 El código queda como sigue: 20. Por defecto el color que toman es negro, para cambiar esto debemos tomar el cursor En la paleta de herramientas y presionar sobre la constante para escoger el color deseado. Esto se realiza de la manera mostrada arriba. El código queda como sigue: Sin conexión Con conexión 21. La aplicación está casi lista, ahora debemos ejecutarla, para ello presionamos el botón de menú y si se quiere ejecutar en modo de depuración se pueden escoger las variantes ya estudiadas. . Al ejecutarla podemos percibir la rapidez con que varia el nivel, para que sea más efectiva la simulación se puede introducir un bloque de demosra dentro del ciclo iterativo. 22. Para ello debemos ir a la paleta de funciones y utilizar la función “Wait Until Next ms Multiple” y colocar una constante de demora de 500 ms. Como se muestra a continuación. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 42
  • 44. Departamento de Automática y Computación 18/11/2006 Ejercicio 2 Elabore un programa en Labview que: dado el nombre y la edad de una persona. Elabore una cadena de salida que diga lo siguiente: Usted se llama: nombre y nació en el año: YYYY donde las cadenas subrayadas son: el nombre y la resta del año actual con la edad respectivamente. Para diseñar la interfaz de usuario de este programa debemos utilizar 1 controles de cadena para entrar el nombre, 1 control numérico de tipo entero sin signo, de 8 bytes, ya que la edad siempre es positiva y nunca mayor que 256 que es el entero más pequeño que se puede declarar y 1 indicador de cadena para la salida. Además debemos colocar un control booleano que permita terminar la ejecución del programa. Los pasos para construir la interfaz son los siguientes: 1. Abrir un nuevo VI, tal y como lo hicimos en los ejercicios anteriores. 2. Adicionar un control de cadena. Selección del control Panel Frontal 3. Adicionar un control numérico. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 43
  • 45. Departamento de Automática y Computación 18/11/2006 Selección del control Panel Frontal 4. Cambiar el tipo de dato asociado con el control numérico. 6. Adicionar un indicador de cadena. Selección del control Panel Frontal 7. Adicionar un control booleano. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 44
  • 46. Departamento de Automática y Computación 18/11/2006 Selección del control Panel Frontal Ya estamos en condiciones de programar, en base a los elementos gráficos seleccionados para nuestra interfaz, la lógica que dará solución a nuestro ejercicio. Para ello pasamos directamente a la ventana del diagrama (Ctrl+E). 6. El primer código G que debemos programar es el necesario para comenzar y terminar la aplicación. Para ello se tiene el control “Stop Button” representado por la variable booleana “stop” (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe ejecutar nuestro programa. En caso contrario debe terminar la aplicación. Esta situación se modela en programación a través de un “ciclo while”. Para incorporar un “ciclo while” a nuestra aplicación se selecciona en la paleta de funciones el boton: y luego se busca la opción “while loop”. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 45
  • 47. Departamento de Automática y Computación 18/11/2006 7. Una vez que se seleccione, debe irse a la pantalla del diagrama. Ahora el cursor de la aplicación cambia para indicarle que usted debe seleccionar el área que ocupará el ciclo, esto se realiza arrastrando el ratón de manera que seleccione el área necesaria, como ilustra la siguiente pantalla. Al finalizar se obtiene la siguiente estructura de programa G: 8. El ciclo tiene dos variable implícitas: la iteración representada por y la condición de salida, representada por . Si negamos la variable booleana y la conectamos a la condición de salida, se construye la lógica necesaria para la ejecución y salida del programa. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 46
  • 48. Departamento de Automática y Computación 18/11/2006 Para negar la variable booleana “stop” debemos utilizar los operadores booleanos que se seleccionan en la paleta de funciones como sigue: 9. Allí debemos seleccionar como nuestra la figura, el operdor “Not”. Y colocarlo en nuestra ventana del diagrama de la siguiente forma: Antes de conectarlos Después de conectarlos 10. La cadena de salida que queremos formar debe ser construida a partir de las variables que ya declaramos y de un conjunto de cadenas constantes. Una de ellas debe almacenar el valor “Usted se llama: ” otra el valor “Y nació en el año: ” para ellos se va a la paleta de funciones y se busca la paleta readicionada con el tratamiento de cadenas. A continuación se muestra su localización: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 47
  • 49. Departamento de Automática y Computación 18/11/2006 11. Se colocan dos controles del tipo y se selecciona el cursor en la paleta de herramientas se utiliza la tecla “tab”, hasta que el cursor en la pantalla quede de la siguiente manera: para introducir el valor de las constantes como muestra la figura. 12. En este caso debemos concatenar cada una de las cadenas en el orden mostrado en la figura anterior. Además, hay que restarle al valor de la edad el año actual para obtener el año de nacimiento y este resultado añadirlo a las cadenas. Para ello se puede utilizar la función “Format Into String” que se encuentra: 13. Esta función retorna una cadena de caracteres que esta formada por cada uno de los elementos que se le pasan como parámetros. Estos parámetros pueden ser de cualquier tipo de dato simple (DBL, SGL, EXT, U8, U16, U32, I8, I16, I32) sin embargo el formato debe ser especificado de manera similar a como lo hace la función de C “printf” o sea : %d para enteros, %f para números con coma, %s para cadenas. En nuestro caso el formato será: “%s%s%s%d”, ya que son tres cadenas y un valor entero (el año). Para ello debe introducirse en el código de nuestro programa una constante de la misma forma que se realizó en el paso 11 y se inicializa así: %s%s%s%d para luego conectarla a la función según se muestra a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 48
  • 50. Departamento de Automática y Computación 18/11/2006 14. Como se observa esta función solo tiene una posible conexión de entrada pero eso es solo por el momento. Usted debe pararse justo en la base de la función y esperar a que cambie el tipo de cursor. Cuando esto suceda, debe presionar el botón izquierdo del ratón y arrastrar hasta tener exactamente cuatro entradas que deben coincidir con los tipos de datos seleccionados con anterioridad. El diagrama queda así: 15. Para obtener el año debemos introducir una constante numérica entera para almacenar el valor del año actual 2002 y un operador de resta desde la paleta de funciones numéricas. Al efectuar la resta del año menos la edad se tiene el año de nacimiento. 16 Ahora solo nos resta conectar las funciones con las variables para terminar. Para ejecutar e programa, presionamos el botón de menú y si se quiere ejecutar en modo de depuración se pueden escoger las variantes ya estudiadas. . Ejercicio 3 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 49
  • 51. Departamento de Automática y Computación 18/11/2006 Se desea construir un programa que permita desglosar una fecha introducida bajo el formato “DD/MM/YYYY”. El programa debe mostrar el día en un indicador de cadena; el mes, por su nombre, en un “ComboBox” y el año en un indicador de cadena. 1. Para realizar este ejercicio es necesario utilizar un control de cadena para introducir la fecha. Debemos utilizar los dos indicadores que mostrarán el día y el año. Estos controles se deben introducir de la misma manera que se hizo en el ejercicio anterior (pasos 2 y 6). Como en los ejemplos anteriores se debe colocar un control booleano que sirva para finalizar la aplicación. El resultado debe ser como se muestra a continuación. 2. Para mostrar el mes por su nombre debemos utilizar un indicador de tipo enumerado “Enum” que se encuentra en la paleta de controles bajo el botón “Ring & Enum” 3. Al introducir el elemento “Enum”, este toma la propiedad de control. Sin embargo, el uso que se le va dar es como indicador. Es por ello que se debe dar clic derecho sobre él y seleccionar la opción “Change To Indicator”. Ahora estamos listos para introducir cada uno de los doce meses del año. Para ello se selecciona el cursor en la paleta de herramientas o se utiliza la Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 50
  • 52. Departamento de Automática y Computación 18/11/2006 tecla “tab” hasta que el cursor en la pantalla quede de la siguiente manera . Luego se coloca el cursor dentro del indicador y se introduce el primer nombre “enero”, para introducir otro mes se da clic derecho sobre el control y se selecciona la opción “Add Item After”. De esta manera se entran todos los nombres de los meses. ` La figura que se muestra encima es el “panel frontal” correspondiente a nuestro programa. En estos momentos estamos listos para programar el código que de solución a nuestro problema. Para ello debemos movernos hacia la pantalla del diagrama (Ctrl+E). Al igual que los ejercicios anteriores debemos programar en primer lugar el código G que nos permita terminar la ejecución de nuestro programa. Los pasos son similares a los vistos anteriormente y finalmente debe quedar de la siguiente forma: Es de señalar que la variable correspondiente al indicador de tipo “Enum” es entera y cada mes tiene un número entero asociado. Para “enero” será el “0”, febrero el “1” y así sucesivamente. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 51
  • 53. Departamento de Automática y Computación 18/11/2006 4. Para desglosar la fecha es necesario encontrar el carácter “/” que limita el día del mes, y el mes del año. La función “Search/Split String” que se encuentra en la paleta de funciones permite encontrar un carácter específico dentro de una cadena. Esta función necesita como parámetros la cadena donde debe buscar, el carácter que se quiere encontrar y el desplazamiento a partir del inicio de la cadena donde se comenzará la búsqueda. La función retorna tres valores. La subcadena que se forma hasta el carácter que se busca, la subcadena a partir del carácter que se busca (incluyendo el carácter buscado) y el índice o desplazamiento donde se encontró el carácter. El resultado de aplicar esta función a la cadena que contiene la fecha es el siguiente: Si la fecha es: 12/01/2005 Subcadena hasta el carácter “/”: “12” Subcadena restante: “/01/2005” 5. Para tomar el mes es necesario eliminar el primer carácter “/” de la cadena restante “/01/2005”y volver aplicar la función anterior. Para ello se puede utilizar la función “String Subset” que recibe como parámetros una cadena, la cantidad de caracteres que se quieren tomar y el desplazamiento o índice a partir de donde se tomara la subcadena. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 52
  • 54. Departamento de Automática y Computación 18/11/2006 6. El resultado de aplicar esta función a la cadena “/01/2005” es: “01/2005”. Ahora se debe repetir el paso 4 para obtener el mes. Sin embargo este resultado se debe mostrar en el control “Enum”. Como se dijo esta es una variable de tipo entera, por lo que debemos convertir el resultado de la función, que es una cadena con el número del mes, a un valor numérico entero. Para ello el labview cuenta con funciones de conversión de tipos. En nuestro caso esto se realiza con la función “Decimal String To Number” . El diagrama queda como sigue: Para obtener el año se debe repertir el paso 5. con lo cual se elimina el carácter “/”y se obtiene el año. El diagrama final queda así: Para ejecutar e programa, presionamos el botón de menú y si se quiere ejecutar en modo de depuración se pueden escoger las variantes ya estudiadas. . Al correr el programa se puede percibir que el mes que se obtiene está desplazado en uno con el que sería el correcto. Eso es así por que en la variable de tipo “Enum” el mes de enero tiene asignado el valor 0, este mes no existe. Para resolver este problema, después de la conversión de cadena a número se debe restar una unidad. El diagrama queda de la siguiente manera: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 53
  • 55. Departamento de Automática y Computación 18/11/2006 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 54
  • 56. Departamento de Automática y Computación 18/11/2006 TEMA IV Control de Flujo de programa en LabVIEW. Estructuras repetitivas. • Lazos de control de programa (While y For). • Shift Registers (Registros de Desplazamiento). • Nodo fórmula. Visualización gráfica de datos. Ejercicio 1: Realice un programa que permita encontrar el máximo de 100 números generados aleatoriamente. Represente gráficamente los números generados. Desarrollo: El ejercicio una vez terminado debe conducir a una representación en Lenguaje G como la que se muestra a continuación en la ventana de diagrama o código del LabView: Veamos como desarrollar paso a paso dicho ejercicio. Primero, una explicación de lo que se nos pide. Se necesitan generar 100 números aleatorios, lo que implica utilizar un generador de números aleatorios y un lazo de control de programa o repetición que permita que ese generador de números aleatorios nos entregue 100 de dichos números. Cada vez que se nos entregue un número, o sea, con cada iteración del bucle o lazo, se debe comparar el número generado con el número máximo hasta ahora generado. Eso nos indica que debemos realizar una comparación que busque el máximo y almacenarlo para comparar en cada iteración con el nuevo número. Se nos pide que representemos gráficamente dichos números por lo que debemos agregar un gráfico a nuestro diseño encargado de plotear en cada iteración el número aleatorio a procesar. Como descomponer entonces con LabView dichas operaciones? 1. Primero debemos crear el lazo de control o bucle. Para ello seleccionamos de la paleta de funciones del LabView las funciones de estructuras y dentro de ella la del ciclo For. El ciclo for es el escogido porque en este caso necesitamos repetir la operación de comparación en la búsqueda de un máximo 100 veces, invariablemente. Si estuviéramos sujetos a alguna condición entonces deberíamos de haber seleccionado un lazo condicional, o sea, un While. La siguiente figura ilustra como hacer la selección: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 55
  • 57. Departamento de Automática y Computación 18/11/2006 2. Una vez que se ha puesto el ciclo for debemos definir el alcance del mismo. Se recuerda que un ciclo for en LabView siempre va desde 0 hasta N-1, siendo N el valor a definir. Aquí queremos realizar las operaciones 100 veces por lo que debemos definir para N un valor de 100. Esto se realiza creando una constante y conectándola con N. Es muy sencillo, la siguiente figura ilustra como hacerlo. El menú que allí aparece se obtiene dando clic derecho encima de N: 3. Cuando la constante se crea, aparece con valor 0. Debemos cambiar dicho valor y poner 100, como se muestra en la siguiente figura: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 56
  • 58. Departamento de Automática y Computación 18/11/2006 4. Necesitamos ahora generar un número aleatorio y compararlo con algún máximo. Por supuesto, el primer número aleatorio no tiene referencia de comparación, pero como debemos comparar dentro del ciclo for, basta con compararlo con el menor valor posible que se pudiera generar, en este caso 0, con lo cual garantizamos que el primer número aleatorio siempre será el primer máximo contra el cual comparar después los sucesivos que se generarán. LabView presenta un componente que realiza la comparación entre dos fuentes o números, y devuelve el mínimo valor de entre los dos y el máximo. La siguiente figura muestra como seleccionar dicho componente (Functions/Comparison/Max & Min): Se inserta en la ventana de diagrama dentro del ciclo for: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 57
  • 59. Departamento de Automática y Computación 18/11/2006 5. Necesitamos ahora encontrar alguna función que genere números aleatorios. LabView tiene un componente en Functions/Numeric/Random Number (0-1): Si quisiéramos generar un número aleatorio en un rango diferente podemos multiplicar el número generado con esta función por el valor máximo que queremos generar. Puede modificar el ejercicio como estudio independiente ahora intentando buscar el máximo de 100 números aleatorios en el rango de 0-50. Una vez introducidos en el diagrama el generador de números aleatorios y la función que devuelve el máximo entre dos números debemos entonces buscar la forma de almacenar el máximo que resulta de cada iteración para compararlo con el número generado en la siguiente iteración. Si se analiza bien esto lo que necesitamos es comparar el número generado en la iteración i (denotemos por n(i) a dicho número) con el máximo que resultó de la iteración i-1. Esta es una de las funciones que puede brindarnos el registro de desplazamiento o shift register de LabView. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 58
  • 60. Departamento de Automática y Computación 18/11/2006 El shift register desde el punto de vista de la programación es una estructura tipo arreglo asociada con lazos de control o bucles de programa como el for y el while y que almacena valores anteriores producidos en dichos lazos. Así, por ejemplo, si obtenemos como resultado de una iteración i un valor v(i) al final de dicha iteración, al comienzo de la próxima al i incrementarse en uno, dicho valor se almacena como v(i-1). Dos iteraciones hacia delante será v(i-2) y así sucesivamente. La siguiente tabla ilustra dicho concepto con ejemplos numéricos: Iteración V(i) V(i-1) V(i-2) V(i-3) V(i-4) V(i-5) 0 5 - - - - - 1 3 5 - - - - 2 0.7 3 5 - - - 3 1 0.7 3 5 - - 4 -1 1 0.7 3 5 - 5 0 -1 1 0.7 3 5 6 2 0 -1 1 0.7 3 y así sucesivamente.... 6. Para adicionar Shift Registers con LabView se selecciona la estructura for y se da clic derecho sobre ella. El siguiente menú aparece: Al seleccionar de dicho menú la última opción, Add Shift Register (Adicionar registro de desplazamiento) se inserta en el diagrama como se muestra en la siguiente figura: 7. Antes de realizar las conexiones entre los elementos debemos además seleccionar algún componente que nos permita visualizar gráficamente los números aleatorios que Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 59
  • 61. Departamento de Automática y Computación 18/11/2006 se van generando. Para ello nos vamos al panel frontal y con clic derecho visualizamos el siguiente menú: Al seleccionar la opción Controls/Graph/Waveform Chart obtenemos un gráfico como el que se representa en la pantalla frontal de la siguiente figura, donde también se representa el contenido de la ventana de diagrama hasta este momento: 8. A continuación se realizan las conexiones entre los elementos. La salida del generador de números aleatorios se conecta al bloque de comparación de números, y a la entrada del control gráfico. El shift register de la derecha debe almacenar el último valor del máximo calculado y que se obtiene como salida del módulo de comparación. La siguiente figura muestra las conexiones a realizar: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 60
  • 62. Departamento de Automática y Computación 18/11/2006 9. Una vez realizadas estas conexiones el ejercicio está prácticamente concluido. Note que la primera vez que se compara en el bloque de comparación se hace entre un primer número aleatorio y el valor del shift register. Ya se explicó como funciona el shift register y debemos notar que antes de concluir la primera iteración no tenemos un valor con el cual comenzar para el shift register que adquiere uno al final de cada iteración. Eso nos indica que tenemos que inicializarlo, darle un valor inicial con el cual empezar y evaluar la iteración 0 . Note además que cuando se llega a la última iteración el valor actual que contiene el shift register es el del último máximo calculado, y por tanto el valor que debemos reportar como resultado. Es por ello que entonces debemos crear un indicador para visualizar el último máximo y una constante para definir la condición inicial del shift register. Las figuras que se muestran a continuación ilustran como hacerlo. Los menús que allí aparecen se obtienen al dar clic derecho encima de los shift registers. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 61
  • 63. Departamento de Automática y Computación 18/11/2006 El resultado final se muestra en la siguiente figura. Note que el valor inicial del shift register es 0.00 pues es el mínimo que puede tomar el número aleatorio y no afectará la selección del primer máximo. 10. Antes de ejecutar el programa es conveniente modificar algunos parámetros del gráfico, en particular los relacionados con los ejes, que debemos modificar para permitir la auto escala. Las figuras a continuación muestran la manera de hacerlo (siempre clic derecho en el objeto para obtener el menú): Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 62
  • 64. Departamento de Automática y Computación 18/11/2006 11. Finalmente salvamos el ejercicio y lo ejecutamos. Un ejemplo de ejecución se muestra en la siguiente figura: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 63
  • 65. Departamento de Automática y Computación 18/11/2006 Por último, señalar que si queremos que el gráfico se represente más lentamente podemos incluir una demora (Functions/Time & Dialog/ Wait Until Next ms Multiple) o seleccionar el indicador de ejecución paso a paso. La siguiente figura muestra como quedaría el ejercicio para una demora de 50 milisegundos: En la figura anterior también se a insertado otro indicador, llamado max(x,y). Que función tendría? Ejercicio 2: En este ejercicio se propone realizar la descomposición de la fecha introducida en un control tipo Edit (Edición) de una manera más eficiente (comparada con la primera solución a este ejercicio que ya se vio en una guía anterior), haciendo uso de los shift registers. Desarrollo: En clases anteriores se ofreció una solución al problema de desglose de una fecha en sus componentes de día, mes y año. Aquella solución introducía algunos componentes para el procesamiento de cadenas que se encuentran dentro de las funciones de LabView. En dicha Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 64
  • 66. Departamento de Automática y Computación 18/11/2006 solución los componentes se repetían, pero hay una forma más eficiente de resolverlo haciendo uso de los shift registers. La solución final se ofrece en la siguiente figura: Se recuerda la función y terminales de los dos elementos principales involucrados: Antes de pasar a una explicación más o menos detallada de como construir la solución en la pantalla de diagrama veamos algunos razonamientos de como proceder con los shift registers: 1. Se quiere dividir una cadena que representa la fecha en sus tres elementos constitutivos, o sea, el día, el mes y el año que la conforman. 2. La operación siempre es la misma: se extrae de la cadena una subcadena que representa un componente de la fecha (o el día, o el mes o el año) y se elimina de la subcadena que resulta de extraer dicho componente el separador /. 3. El proceso se repite 3 veces. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 65
  • 67. Departamento de Automática y Computación 18/11/2006 El punto 3 nos indica que podemos utilizar un lazo condicional, o sea, un while, pues siempre dentro del while se hará lo mismo (punto 2). La subcadena que representa el componente extraído debe almacenarse para brindar los resultados finales. Como entonces utilizar los shift registers? Quizá una manera en que podemos verlo es representando el proceso, para una fecha ejemplo, a través de las iteraciones. La siguiente tabla lo ilustra: Cadena inicial Iteración Componente Subcadena Subcadena resultante después de después de extraído el extraer el componente separador (/) 8/02/2005 0 8 /02/2005 02/2005 02/2005 1 02 /2005 2005 2005 2 2005 “” “” Como se puede apreciar por cada iteración se obtiene un componente resultante, primero el día, después el mes y por último el año. Si denotamos por c(i) al componente resultante se puede ver que después de la iteración 2 c(i)=2005, c(i-1)=02 y c(i-2)=8. Dicha secuencia es la que precisamente nos pueden brindar los shift register si creamos los suficientes en el diagrama como para almacenar los valores c(i-2), c(i-1) y c(i). Necesitamos además de una iteración a otra almacenar la subcadena resultante después de extraer el separador que será la nueva cadena inicial con la cual trabajar en la próxima iteración. Veamos pues como hacerlo. 1. Primero debemos de crear el lazo condicional while en nuestra aplicación: 2. Debemos ahora definir la condición de parada. Queremos que el lazo funcione mientras la iteración no sea mayor que dos, por tanto, la condición de ejecución del while debe ser i<=2. La siguiente figura nos indica como quedaría (el componente de comparación aparece en Functions/Comparison/Less or Equal?): Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 66
  • 68. Departamento de Automática y Computación 18/11/2006 3. En el panel Frontal debemos insertar un control de tipo String para poder teclear la fecha que se quiere descomponer (Controls/String & Path/String Control): Note que en la siguiente figura el control generado en el panel frontal tiene asociado una variable que debemos ubicar fuera del lazo while pues es la cadena inicial que hay que descomponer. 4. Insertamos ahora en la ventana de diagrama el componente Search/Split String (Functions/String/Aditional String Functions/Search Split String): 5. Una vez introducido dicho componente se crea el primer shift register, que tendrá la función de almacenar la subcadena resultante después de cada iteración. En la siguiente figura aparece representado. A la función de dividir (Split) cadenas se le asigna en cada iteración la cadena inicial (ver tabla página 13) que está almacenada en el shift register (por ejemplo, si en la iteración que acaba de concluir quedó 02/2005 ese valor se almacena en el shift register de la derecha y cuando se incrementa i para iniciar una nueva iteración esa cadena (ahora, después de incrementada i es el resultado de la iteración i-1) LabView la pasa o ubica en el shift register de la izquierda para que sea usada en la iteración i). Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 67
  • 69. Departamento de Automática y Computación 18/11/2006 Como ya mencionamos anteriormente, los shift register tienen que tener un valor inicial, para que sea el valor con el cual comienza a trabajar la iteración 0. En este caso el valor inicial es la cadena inicial introducida en el edit, o sea, la fecha completa que se quiere dividir. En la figura anterior se mostró la conexión que inicializa al shift register. 6. Una vez introducido este registro de desplazamiento hay que completar las entradas del modulo de división de cadena. Para ello se agregan dos constantes en la entrada, y se le dan, respectivamente, valores de / (que es el separador) y 0. Dichos valores le indican al Labview que la cadena que tiene en su entrada y que será dividida en dos se comenzará a explorar desde el primer elemento (elemento 0) hasta detectar el carácter /. Esta función tiene dos salidas, la primera es la subcadena encontrada antes del carácter que divide la cadena de entrada en dos cadenas (en nuestro ejemplo /). La segunda salida es la cadena que se encuentra desde el separador hasta el final. Note que incluye al separador. Las dos salidas serán de utilidad, la que está delante del separador es el componente de la fecha que estamos separando (día, mes o año) y la segunda la que hay que seguir separando. Que hacer con la primera? Hay que almacenarla pues de lo contrario en la próxima iteración tendré otra componente resultante de la comparación que cambiará la salida de la función Search/Split String. 7. Para ello debemos utilizar un nuevo shift register, en este caso, uno que tendrá la función de los componentes resultantes. La siguiente figura indica la forma de insertarlo: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 68
  • 70. Departamento de Automática y Computación 18/11/2006 8. Que conectar al shift register que no aparece conectado en la figura anterior? Recuerde que será el encargado de almacenar la cadena que en la próxima iteración servirá de inicio para buscar el nuevo componente de la fecha. Note además que no se puede conectar directamente a la salida de la primera función (Search/Split Function) pues esa salida incluye todavía el separador (ver tabla pág. 13) y hay que eliminarlo. Para ello se usa la función que se representa en la siguiente figura (Functions/String/String Subset) También se pudo utilizar una segunda función split, pero la que se ha escogido es la más representativa de lo que se quiere hacer puesto que recibe a su entrada una cadena y devuelve la subcadena que se encuentra desde la posición k hasta la l, donde k y l son otras entradas de la función. Nosotros queremos tomar la cadena que sale de la función Search/Split... y quitarle el separador, o sea, quedarnos con el subconjunto o subcadena que se encuentra desde la posición 1 (en la posición 0 está el separador hasta el final): Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 69
  • 71. Departamento de Automática y Computación 18/11/2006 9. Ahora si podemos conectar la salida de esta función String Subset al shift register de su derecha: 10. Hasta aquí lo que está programado funciona bien pero no nos permite visualizar todos los resultados. El resultado se obtiene en el shift register que en la figura anterior no está conectado. Que componente se obtiene ahí después de concluida la última (i=3) iteración? La respuesta es que se obtiene el valor del shift register asociado (el de la parte derecha a su mismo nivel) en la iteración i-1. Cual es ese valor? Del ejemplo de la Tabla en la Página 13 podemos ver que es el año. Note que al final de la última iteración el valor del shift register asociado de la derecha era “”. Conectemos entonces un indicador tipo string al shift register no conectado hasta ahora (clic derecho, en el menú que aparece seleccionar Create/Indicator). Cambiando el nombre del indicador por el de año obtenemos: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 70
  • 72. Departamento de Automática y Computación 18/11/2006 11. Eso nos permite visualizar el año. Pero y el mes? Si el año fue el valor resultante en la iteración i-1, es de suponer que el mes es el valor resultante en la iteración i-2. Pero ese valor no lo tenemos almacenado. Hay que almacenarlo. Crear elementos del shift register para las iteraciones i-2, i-3, i-4,.... es fácil . Solo hay que agregar un elemento al shift register ya creado. La siguiente figura muestra como hacerlo. El menú que aparece en ella se obtiene con clic derecho sobre el shift register de la derecha (el conectado al indicador de año): El resultado: 12. Debemos agregar otro nivel, (el de i-3) para el componente día de la fecha: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 71
  • 73. Departamento de Automática y Computación 18/11/2006 A cada nivel creado se le asocia el indicador de cadena correspondiente, de la misma forma que se hizo con el año: 13. Antes de concluir debemos realizar una operación más. Hay 3 elementos en el registro de desplazamiento asociado con el año, el mes y el día que no han sido inicializados. Que valor les corresponde? Aquí en realidad no tiene importancia el valor que le demos pues solo están conectados (los elementos del shift register) y por lo tanto el valor que al concluir el while mostrarán serán los componentes de la cadena fecha. Sin embargo, es una práctica sana inicializarlos, y por eso se hará, dándole un valor inicial de “” que indicará cadena vacía. La siguiente figura muestra como hacerlo: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 72
  • 74. Departamento de Automática y Computación 18/11/2006 La constante de cadena vacía se encuentra definida en la biblioteca de funciones de LabView Functions/String/Empty String constant. En la ventana o panel frontal nuestro diseño sería más o menos así. Para probar que nuestro programa se ejecuta debemos antes de ejecutarlo darle un valor inicial a la fecha que se descompondrá, editando en el control Fecha el valor: Después de una ejecución, y para esa cadena se obtiene: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 73
  • 75. Departamento de Automática y Computación 18/11/2006 Ejercicio 3: Realice un programa en LabView que permita gráficar la función seno hasta que se oprima el botón parar. Desarrollo: Este ejercicio nos permitirá conocer como trabajar con el Nodo Fórmula. Que se nos pide? Graficar la función seno(x) hasta que se oprima un botón. Eso nos indica que debemos ubicar un lazo o bucle de repetición condicional, o sea, un while. La condición de parada del while la producirá el clic sobre un botón. Dentro del while debemos de estar evaluando, para cada iteración a la función seno(x). Que valor le damos a x? Podemos usar el mismo valor de la iteración i. El único problema es que el seno(x) espera el valor en radianes por lo que hay que convertir el valor de i a dicha unidad, y después calcular el seno. Este es un caso típico en que un nodo fórmula nos simplifica mucho el trabajo. Veamos la solución. 1. Primero comenzamos creando el ciclo while y un botón (ya se sabe como hacerlo de clases anteriores): En la figura anterior aparece nuevo el elemento negado, que conecta al botón con la condición de ejecución del while. En clases anteriores vimos que se podía también cambiar la condición de ejecución del while con clic en ella: aparece un circulo rojo. En versiones anteriores a la 6.0 no existía dicha posibilidad. 2. Después de introducido el while se crea el nodo fórmula según se muestra en la siguiente figura: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 74
  • 76. Departamento de Automática y Computación 18/11/2006 3. Una vez creado el nodo fórmula tenemos que indicar cuales serán las variables de entrada de dicho nodo y cuales las de salida. Comenzando por las de entrada se adicionan de la siguiente manera (el menú aparece al dar clic derecho en el nodo fórmula): 4. A dicha entrada le damos el valor de nx: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 75
  • 77. Departamento de Automática y Computación 18/11/2006 5. Ahora debemos editar dentro del nodo fórmula el contenido de lo que se quiere calcular. Para este caso son 3 lineas. Note la similitud entre C++ o Matlab y el lenguaje que admite el nodo fórmula. Dicho nodo es compatible con ANSI C. 6. La fórmula convierte de grados a radianes y calcula el seno. El valor calculado lo devuelve en la variable y, que hay que declararla como salida del nodo de la misma forma que la entrada pero ahora seleccionando la opción Add Output. Una vez hecho esto se realiza la conexión entre el indicador de iteración i y la variable de entrada nx. La siguiente figura muestra como debe quedarnos la aplicación hasta este momento en la ventana de diagrama: 7. La salida, que se produce en cada iteración, podemos conectarla a un componente para plotear gráficos de la misma manera a como lo hicimos en el ejercicio 1: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 76
  • 78. Departamento de Automática y Computación 18/11/2006 La salida “y” del nodo fórmula se conecta al gráfico: La figura que se muestra a continuación es el resultado de la ejecución del programa: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 77
  • 79. Departamento de Automática y Computación 18/11/2006 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 78
  • 80. Departamento de Automática y Computación 18/11/2006 TEMA V Mas estructuras de control de flujo. • Dominar la estructura de control CASE. (if-then-else ó switch[C++] ) • Dominar la estructura “Secuence” para secuenciar el flujo de programa (alternativa a la programación por nodos). • Dominar la estructura de manejo de eventos. Ejercicio 1: Elabore un programa en LabView que permita calcular la raíz cuadrada a un número real. El programa debe analizar si valor introducido es menor que cero (situación de error) e indicar al usuario por medio de un cuadro de mensaje la situación. Solución: Como toda aplicación esta debe comenzar con la realización del código necesario para ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar el código siguiente: Ahora debemos diseñar la interfaz de usuario de nuestra aplicación. Para ello simplemente colocamos un control numérico digital que reciba por parte del usuario el valor al cual se le calculará la raíz cuadrada. Además, debemos colocar un indicador (también digital en este caso) para visualizar el resultado de la operación. Esto queda de la siguiente manera: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 79
  • 81. Departamento de Automática y Computación 18/11/2006 Ya estamos listos para programar en “Código G” la lógica de nuestra aplicación. Por lo tanto utilizando (Ctrl+E) vamos a la pantalla del diagrama en bloques, que luce de la siguiente forma: La operación de cálculo de la raíz cuadrada implica realizar una operación de comprobación antes de efectuarla, y esto depende del valor del número. Si este es positivo se puede hacer, sino debe indicarse un mensaje. Véase que existe una condición mediante la cual se bifurca el flujo de programa. Para ello es necesario utilizar una estructura clásica del tipo IF-THEN-ELSE, que el caso de labVIEW se denomina “Case Structure” y se puede obtener según se indica en las figuras siguientes: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 80
  • 82. Departamento de Automática y Computación 18/11/2006 Esta estructura está representada por un marco y un titular que representa el área donde se programa el código asociado a la condición de true: y el código asociado a la condición de false: . Note que usted puede conmutar entre uno y otro según desee utilizando las flechas, y que los elementos de código para uno u otro son diferentes. Según nuestra lógica, si el valor numérico es positivo, se realiza la operación de raíz, esto se consigue utilizando las funciones numéricas como se muestra a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 81
  • 83. Departamento de Automática y Computación 18/11/2006 El código complementario, cuando no se puede efectuar la operación debido a que el número es falso, se reduce a colocar un cuadro de mensajes que alerte al usuario. Para ello se utiliza en la paleta de funciones un “One Button Dialog” y un “String Constant” según se observa a continuación: Ahora solo nos resta realizar la comparación y conectarla a la estructura “case” para determinar cual de las dos acciones posibles se realizará en tiempo de ejecución. Para ello necesitamos comparar la variable correspondiente al control numérico relacionado con el valor a calcular. Sin embargo ya hemos utilizado el terminal asociado al mismo, por lo que debemos crear una variable local de ese control. Esto se hace dando clic derecho sobre la variable , seleccionando la opción “Create” y a su vez “Local Variable”. Usted debe recordar que las variables en LabVIEW pueden ser de escritura o lectura. Al crear una variable local estas son de escritura por defecto, aquí se utilizara para compararla y saber si es mayor que cero, por lo que no la modificaremos. En este caso hay que cambiarla para su tipo de lectura, esto se hace dando clic derecho sobre ella y seleccionando la opción “Change To Read”: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 82
  • 84. Departamento de Automática y Computación 18/11/2006 Para comparar el valor de la variable, se debe utilizar la función de comparación “Grater Or Equal To 0?” que se encuentra en la paleta de funciones. El resultado de esta comparación es “True” o “False” y sirve de condición a la estructura “Case” por medio del selector que decidirá según su estado “booleano” cual código realizar. Ya se está en condiciones de correr la aplicación, sin embargo usted se dará cuenta de que la ejecución de la aplicación no es “buena”. Cuando se introduce un valor negativo se ejecuta indefinidamente la opción de mostrar el cuadro de diálogo por lo que se bloquea la aplicación. Este problema se soluciona muy fácilmente introduciendo un botón de cálculo, según el cual se realizan las operaciones. Para ello se debe utilizar una estructura “case” más externa gobernada por el botón de cálculo. Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 83
  • 85. Departamento de Automática y Computación 18/11/2006 Para obtener los resultados esperados la acción mecánica (Mechanical Action) debe colocarse en uno de los siguientes estados: • Latch when Pressed • Latch when Released • Latch until Released Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 84
  • 86. Departamento de Automática y Computación 18/11/2006 Si no se utiliza este modo persisten los errores planteados al principio. ¡Compruébelo y obtenga conclusiones! Estudio Individual Realice una calculadora capaz de hacer las operaciones básicas de suma, resta, multiplicación y división entre dos números reales. Utilice un control de tipo “Menu Ring” para indicar la operación a realizar. Note que este elemento gráfico está representado por una variable de tipo y que según su valor debe realizarse una operación de las cuatro mencionadas. Además, debe utilizar dos controles para los operandos y un indicador para el resultado. Ejercicio 2: Elabore un programa en LabView que permita animar un control de labVIEW. El control debe describir la figura geométrica de un cuadrado con aristas de 100 pixels. Solución: Como toda aplicación esta debe comenzar con la realización del código necesario para ejecutar y terminar la aplicación. Para ello debe colocar un botón booleano de salida y realizar el código siguiente: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 85