Está en la página 1de 248
Instituto gfghf CUJAE Automática y Computación Instituto Superior Politécnico " José Antonio Echeverría" ,

Instituto gfghf

CUJAE

Automática y Computación

Instituto Superior Politécnico "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 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

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.

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.

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

el Basic, el Pascal. Herramientas de Desarrollo de Software Ambiente de desarrollo + Lenguaje de Programación

Ambiente de desarrollo

+

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

Lenguaje de Programación

Figura1: Esquema general

Departamento de Automática y Computación

18/11/2006

Ambiente de Desarrollo

T odo 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.

D epuración

Fac

Punto s de ruptura.

Ejecución paso a paso .

Ventana de seguimiento a variables

ilid des de desarrollo

a

Panel frontal: Para o bservar 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.

L enguaje de Programación.

L abVIEW 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

p ropiedades de los controles y variables.

Incluye bibliotecas de funciones exten didas 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.

A lgo 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/ Salid a (Puerto serie y paralelo). Arquitectura VISA.

Análisis de señales.

Almacenamiento de d atos.

Comunicación (TCP-IP, UDP y otros).

Matemáticas.

¿ Cómo se trabaja con el LabVIEW?

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

L os 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.

Departamento de Automática y Computación

18/11/2006

Programas de LabView

(*.vi)

y Computación 18/11/2006 Programas de LabView (*.vi) Panel Frontal • Diseño de interfaz • Cara del

Panel Frontal

18/11/2006 Programas de LabView (*.vi) Panel Frontal • Diseño de interfaz • Cara del instrumento virtual

Diseño de interfaz

Cara del instrumento virtual

El Panel Frontal

+

• Cara del instrumento virtual El Panel Frontal + Diagrama Bloques • Lenguaje G • Lógica

Diagrama Bloques

del instrumento virtual El Panel Frontal + Diagrama Bloques • Lenguaje G • Lógica del programa

Lenguaje G

Lógica del programa

E l 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.

L os controles:

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

el ratón, Simulan dispositivos de entrada de datos del VI Los indicadores Muestran datos en el
el ratón, Simulan dispositivos de entrada de datos del VI Los indicadores Muestran datos en el

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.

Simulan los dispositivos de salida de datos del VI. El Diagrama en Bloque s Dr.Valery Moreno
Simulan los dispositivos de salida de datos del VI. El Diagrama en Bloque s Dr.Valery Moreno

El Diagrama en Bloque s

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 I nstrumento 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 necesa el flujo de la ejecución del VI.

rias para el VI y controlan

Tipos de Datos en LabView

Tabla 3.1 Tip os de Datos en LabView

Long

I32

 

32

(4 bytes)

-2147483648 hasta 2147483647

Word

I16

 

16

(2 bytes)

-32768 ha sta 32767

Byte

I8

8

(1 bytes)

-128 hasta 127

Long Unsigned

U32

 

32

(4 bytes)

0

hasta 4294967295

Word Unsigned

U1 6

 

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 h asta 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+30 8

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 f rontal, 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 termina

les fuente y los

terminales destino.

No se permite enlazar dos terminales fuentes ni dos terminales destinos, y si se permite enlazar un te rminal fuente a varios terminales destino.

Configuración

te rminal fuente a varios terminales destino. Configuración Representación Dr.Valery Moreno Vega y Msc.Adel Fernández

Representación

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.

sobre el control o indicador al cual está asociado. // esto es C int a =
sobre el control o indicador al cual está asociado. // esto es C int a =

// esto es C

int a = 0 ;

a = x +y *z; // escritura

m = a* c;

//declaración

// lectura

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:

primera vez aparece una pantalla similar a la siguiente: En esa pantalla podemos seleccionar varias opciones

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 continuación aparece una ventana simular a la que se presenta a continuación:

A

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 La primera pantalla que aparece es el panel fr ontal

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ya estamos listo para comenzar a darle solución al ejercicio.

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 algo similar a:

en el menú controls con el símbolo algo similar a: . Aparecerá Dr.Valery Moreno Vega y

. Aparecerá

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Observe que en ambas ventanas, la de Controls y la

Observe que en ambas ventanas, la de Controls y la Numeric, en el caption de las mismas

la de Controls y la Numeric, en el caption de las mismas aparece el nombre de

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:

se observa que dicha tachuela cambia de posición o forma: y si en ese momento damos

y si en ese momento damos clic obtenemos:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Los controles tipo sintonía son los que se ident ifican

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Continuando con la idea original de insertar los controles en
Departamento de Automática y Computación 18/11/2006 Continuando con la idea original de insertar los controles en

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):

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 y: Note que a medida que se introducen los controles

y:

Departamento de Automática y Computación 18/11/2006 y: Note que a medida que se introducen los controles

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

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

la dirección del flujo de los datos. En el ejemplo anterior ambas variables están representadas con

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:

emergente que aparece buscamos la opción Representation : Note que hay varios tipos de datos. El

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Note que en el panel frontal la escala del control

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:

Departamento de Automática y Computación

18/11/2006

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 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 18
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 Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 18

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Otras opciones incluyen escalas logarítmicas ( Mapping ),

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:

sobre el elemento. A continuación se muestra un ejemplo: Note que se han señalado cuatro esquinas.

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.

se representa al mismo elemento redimensionado. Hasta este punto se han situado en la pantalla los

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

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:

que se seleccionan de la siguiente manera: Para luego obtener el siguiente diseño: Para terminar y

Para luego obtener el siguiente diseño:

siguiente manera: Para luego obtener el siguiente diseño: Para terminar y como se ha mencionado en
siguiente manera: Para luego obtener el siguiente diseño: Para terminar y como se ha mencionado en

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El diseño final del “Panel Frontal” queda: Ahora corresponde

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

18/11/2006 El diseño final del “Panel Frontal” queda: Ahora corresponde trabajar en la ventana del diagrama

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El primer código G que debemos programar es el necesario

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 Button” representado po r la variable booleana “stop” (verde ), en la ventana del diagrama.

“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:

se selecciona en la paleta de funciones el boton: y luego se busca la opción “while

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

el boton: y luego se busca la opción “while loop”. Una vez que se seleccione, debe

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.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Al finalizar se obtiene la siguiente estructura de programa G:

Al finalizar se obtiene la siguiente estructura de programa G:

finalizar se obtiene la siguiente estructura de programa G: Para finalizar el programa solo nos resta

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

que correspon den a los controles deben ser asignadas a las variables que representan a los

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Note que el flujo de los datos va desde el

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:

en la paleta de funciones según se muestra debajo: Al conectarlos queda de la siguiente forma:
en la paleta de funciones según se muestra debajo: Al conectarlos queda de la siguiente forma:

Al conectarlos queda de la siguiente forma:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Con ello queda resuelto el problema plantea do. Sin embargo

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:

la barr a de botones colocada en la ventana del diagrama: El botón permite ejecutar la
la barr a de botones colocada en la ventana del diagrama: El botón permite ejecutar la
la barr a de botones colocada en la ventana del diagrama: El botón permite ejecutar la

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

el botón permite terminar de ejecutar la aplicación. Para realizar una pausa debemos utilizar el botó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.

El tercer tipo de botón termina la ejecución paso a paso. Un botón muy interesante es
El tercer tipo de botón termina la ejecución paso a paso. Un botón muy interesante es

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:

la opción “Probe” como se muestra a continuación: Luego se ve el valor de la variable

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Si en el paso anterior a este hubiéramos seleccio nado

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:

entonces el código se ve de la siguiente forma: Y la aplicación se ejecutará hasta este

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:

botón booleano de salida y realizar el código siguiente: Ahora completamos la interfaz de la aplicación

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Luego usted debe programar la opción “Mechanical Action” de
Departamento de Automática y Computación 18/11/2006 Luego usted debe programar la opción “Mechanical Action” de

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:

dar clic derecho sobre el botón de la siguiente manera: Luego en la ventana del código

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í:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El funcionamiento de los tres primeros botones es muy parecido.

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.

se produce la lectura del estado de los botones por el labview. Dr.Valery Moreno Vega y

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:

primera vez aparece una pantalla similar a la siguiente: En esa pantalla podemos seleccionar varias opciones

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 continuación aparece una ventana simular a la que se presenta a continuación:

A

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 La primera pantalla que aparece es el panel fr ontal

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,

en “ controls” la primera de las opciones, que se llama “ numerics” y se representa

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

“ controls” con el símbolo . Aparecerá algo similar a: Dr.Valery Moreno Vega y Msc.Adel Fernández

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:

en el “panel frontal”. El resultado es el siguiente: Existen varias propiedades que podemos variar para

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:

el indicador digital, como se muestra en la figura siguiente: Dr.Valery Moreno Vega y Msc.Adel Fernández

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

en la paleta de herramientas o

0 y 100 unidades. Para ello debemos seleccionar el cursor

o 0 y 100 unidades. Para ello debemos seleccionar el cursor pulsar la tecla “tab”, hasta
o 0 y 100 unidades. Para ello debemos seleccionar el cursor pulsar la tecla “tab”, hasta

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:

tecla “enter”. Esto se realiza de la siguiente manera: Paso 1 Paso 2 3. El otro

Paso 1

“enter”. Esto se realiza de la siguiente manera: Paso 1 Paso 2 3. El otro elemento

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:

“Tank” ahora debemos seleccionar un control digital: Luego la pantalla queda como sigue: Dr.Valery Moreno Vega

Luego la pantalla queda como sigue:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Obsérvese que el nombre del control queda seleccionado, si en

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.

este caso debemos colocar el nombre: referencia de nivel. 4. Para terminar la interfaz de usuario

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

Esto se realiza en la paleta de controles seleccionando los elemento booleanos para luego escoger “Stop

los elemento booleanos para luego escoger “Stop Button”:

los elemento booleanos para luego escoger “Stop Button”: La interfaz final queda como sigue: Dr.Valery Moreno

La interfaz final queda como sigue:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ya estamos en condiciones de programar, en base a los

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).

pasamos directamente a la ventana del diagrama (Ctrl+E). 6. El primer código G que debemos programar

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

“St op Button” representado por la variable booleana “stop” (verde ), en la ventana del diagrama.

“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:

se selecciona en la paleta de funciones el boton: y luego se busca la opción “while

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 7. Una vez que se seleccione, debe irse a la

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.

el área necesaria, como ilustra la siguiente pantalla. Al finalizar se obtiene la siguiente estructura de

Al finalizar se obtiene la siguiente estructura de programa G:

Al finalizar se obtiene la siguiente estructura de programa G: Dr.Valery Moreno Vega y Msc.Adel Fernández

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 8. salida, representada por . Si negamos la variable booleana

8.

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.

El ciclo tiene dos variable implícitas: la iteración representada por y la condición de

la iteración representada por y la condición de Para negar la variable boolea na “stop” debemos

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

que se seleccionan en la paleta de funciones como sigue: 9. Allí debemos seleccionar como nuestra

9. Allí debemos seleccionar como nuestra la figura, el operdor “Not”. Y colocarlo en nuestra

ventana del diagrama de la siguiente forma:

en nuestra ventana del diagrama de la siguiente forma: Antes de conectarlos Después de conectarlos 10.

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 laboratorio anterior.

. Pero esto se puede cambiar de la misma manera que se hizo en el

esto se puede cambiar de la misma manera que se hizo en el Antes de seguir

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 12. Esta función brinda un valor aleatorio de tipo “double”

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

misma paleta de funciones numérica y se representa por el símbolo: que recibe dos valores y

símbolo: que recibe dos valores y devuelve la multiplicación de ambos. Además de esta

y devuelve la multiplicación de ambos. Además de esta propia paleta debe utilizarse un a constante

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:

funciones y variables se obtiene el siguiente diagrama: 13. Ahora debemos conectar los elementos según la

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

como sigue:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 En cada iteración del ciclo el resultado de la función

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”:

puede encontrar en la paleta de funciones “Comparison”: Ahora la pantalla queda como sigue: Para modificar

Ahora la pantalla queda como sigue:

“Comparison”: Ahora la pantalla queda como sigue: Para modificar el color del tanque debemos utilizar la
“Comparison”: Ahora la pantalla queda como sigue: Para modificar el color del tanque debemos utilizar la

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 En la pantalla del diagrama se muestra el siguiente código:

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

En la pantalla del diagrama se muestra el siguiente código: 16. En este caso la propiedad

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 17. Si se observa detenidamente podemos ver qu e la

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

“Change To Write”. Con ello el resultado grafico es de a . 18. Para continuar nuestra

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

la “paleta de funciones”, específicamente en la paleta “Comparison” la función “Select” esta instrucción

“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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El valor que debe retornar la función “Select” debe ser
Departamento de Automática y Computación 18/11/2006 El valor que debe retornar la función “Select” debe ser
Departamento de Automática y Computación 18/11/2006 El valor que debe retornar la función “Select” debe ser

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.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El código queda como sigue: 20. Por defecto el color

El código queda como sigue:

y Computación 18/11/2006 El código queda como sigue: 20. Por defecto el color que toman es
y Computación 18/11/2006 El código queda como sigue: 20. Por defecto el color que toman es

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:

de la manera mostrada arriba. El código queda como sigue: Sin conexión Con conexión 21. La

Sin conexión

mostrada arriba. El código queda como sigue: Sin conexión Con conexión 21. La aplicación está casi

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.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ejercicio 2 Elabore un programa en Labview que: dado el

Ejercicio 2

de Automática y Computación 18/11/2006 Ejercicio 2 Elabore un programa en Labview que: dado el no

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.

ejercicios anteriores. 2. Adicionar un control de cadena. Selección del control 3. Adicionar un control numérico.

Selección del control

3. Adicionar un control numérico.

Selección del control 3. Adicionar un control numérico. Panel Frontal Dr.Valery Moreno Vega y Msc.Adel Fernández

Panel Frontal

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Selección del control Panel Frontal 4. Cambiar el tipo de

Selección del control

y Computación 18/11/2006 Selección del control Panel Frontal 4. Cambiar el tipo de dato asociado con

Panel Frontal

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

Cambiar el tipo de dato asociado con el control numérico. 6. Adicionar un indicador de cadena.

6. Adicionar un indicador de cadena.

el control numérico. 6. Adicionar un indicador de cadena. Selección del control 7. Adicionar un control

Selección del control

7. Adicionar un control booleano.

Selección del control 7. Adicionar un control booleano. Panel Frontal Dr.Valery Moreno Vega y Msc.Adel Fernández

Panel Frontal

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Selección del control Panel Frontal Ya estamos en condiciones de

Selección del control

y Computación 18/11/2006 Selección del control Panel Frontal Ya estamos en condiciones de programar, en

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).

pasamos directamente a la ventana del diagrama (Ctrl+E). 6. El primer código G que debemos programar

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

“St op Button” representado por la variable booleana “stop” (verde ), en la ventana del diagrama.

“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:

se selecciona en la paleta de funciones el boton: y luego se busca la opción “while

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 7. Una vez que se seleccione, debe irse a la

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.

el área necesaria, como ilustra la siguiente pantalla. Al finalizar se obtiene la siguiente estructura de

Al finalizar se obtiene la siguiente estructura de programa G:

finalizar se obtiene la siguiente estructura de programa G: 8. salida, representada por . Si negamos
finalizar se obtiene la siguiente estructura de programa G: 8. salida, representada por . Si negamos

8.

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.

El ciclo tiene dos variable implícitas: la iteración representada por y la condición de

implícitas: la iteración representada por y la condición de Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.

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:

que se seleccionan en la paleta de funciones como sigue: 9. Allí debemos seleccionar como nuestra

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

en nuestra ventana del diagrama de la siguiente forma: Antes de conectarlos Después de conectarlos 10.

Antes de conectarlos

del diagrama de la siguiente forma: Antes de conectarlos Después de conectarlos 10. La cadena de

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:

nto de cadenas. A continuación se muestra su localización: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.

Departamento de Automática y Computación

18/11/2006

11. Se colocan dos controles del tipo

herramientas se utiliza la tecla “tab”, hasta que el cursor en la pantalla quede de la siguiente

en la paleta de

or en la pantalla quede de la siguiente en la paleta de y se selecciona el

y se selecciona el cursor

de la siguiente en la paleta de y se selecciona el cursor manera: para introducir el
de la siguiente en la paleta de y se selecciona el cursor manera: para introducir el

manera:

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

el valor de las constantes como muestra la figura. 12. En este caso debemos concatenar cada

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:

la función “Format Into String” que se encuentra: 13. Esta función retorna una cadena de caracteres
la función “Format Into String” que se encuentra: 13. Esta función retorna una cadena de caracteres

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í:

para luego conectarla a la funciónforma que se realizó en el paso 11 y se inicializa así: según se muestra a

11 y se inicializa así: para luego conectarla a la función según se muestra a continuación:

según se muestra a continuación:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 14. Como se observa esta función solo tiene u na

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í:

seleccionados con anterioridad. El diagrama queda así: 15. Para obtener el año debemos introducir una constante

15. Para obtener el año debemos introducir una constante numérica entera para almacenar el

valor del año actual

efectuar la resta del año menos la edad se tiene el año de nacimiento.

desde la paleta de funciones numéricas. Al

200 2
200
2
desde la paleta de funciones numéricas. Al 200 2 y un operador de resta 16 Ahora

y un operador de resta

de funciones numéricas. Al 200 2 y un operador de resta 16 Ahora solo nos resta
de funciones numéricas. Al 200 2 y un operador de resta 16 Ahora solo nos resta

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

en modo de depuración se pueden escoger las variantes ya Ejercicio 3 Dr.Valery Moreno Vega y

Ejercicio 3

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.

El resultado debe ser como se muestra a continuación. 2. Para mostrar el mes por su

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”

la paleta de controles bajo el botón “Ring & Enum” 3. Al introducir el elemento “Enum”,
la paleta de controles bajo el botón “Ring & Enum” 3. Al introducir el elemento “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

el cursor en la paleta de herramientas o se utiliza la Dr.Valery Moreno Vega y Msc.Adel

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 tecla “tab” hasta que el cursor en la pantalla quede

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.

`
`
De esta manera se entran todos los nombres de los meses. ` La figura que se

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:

y finalmente debe quedar de la siguiente forma: Es de señalar que la variable correspondiente al

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.

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

el carácter “/” que limita el día del mes, y el mes del año. La función

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.

índice o desplazamiento donde se encontró el carácter. El resultado de aplicar esta función a la

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

anterior. Pa ra ello se puede utilizar la función “String Subset” que recibe como parámetros una

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.

o índice a partir de donde se tomara la subcadena. Dr.Valery Moreno Vega y Msc.Adel Fernández
o índice a partir de donde se tomara la subcadena. Dr.Valery Moreno Vega y Msc.Adel Fernández

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:

String To Number” . El diagrama queda como sigue: Para obtener el a ño se debe
String To Number” . El diagrama queda como sigue: Para obtener el a ño se debe

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í:

“/”y se obtiene el año. El diagrama final queda así: Para ejecutar e programa, presionamos el
“/”y se obtiene el año. El diagrama final queda así: Para ejecutar e programa, presionamos el

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

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:

Al correr el

Departamento de Automática y Computación

18/11/2006

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:

en la vent ana de diagrama o código del LabView: Veamos como desarrollar paso a paso

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 2. Una vez que se ha puesto el ciclo for

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:

allí aparece se obtiene dando clic derecho encima de N: 3. Cuando la constante se crea,

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 4. Necesitamos ahora generar un número aleat orio y compararlo

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):

dicho componente (Functions/Comparison/Max & Min): Se inserta en la ventana de diagrama dentro del ciclo for:

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 5. Necesitamos ahora encontrar alguna función que genere números

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

un componente en Functions/Numeric/Random Number (0-1): Si quisiéramos generar un número aleatorio en un rango

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.

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:

se da clic derecho sobre ella. El siguiente menú aparece: Al seleccionar de dicho menú la

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:

en el diagrama como se muestra en la siguiente figura: 7. Antes de realizar las conexiones

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

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ú:

frontal y con clic derecho visualizamos el siguiente menú: Al seleccionar la opción Controls/Graph/Wavefor m Chart

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:

el contenido de la ventana de diagrama hasta este momento: 8. A continuación se realizan las

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 9. Una vez realizadas estas conexiones el ejercicio está

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.

se obtienen al dar clic derecho encima de los shift registers. Dr.Valery Moreno Vega y Msc.Adel

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El resultado final se muestra en la siguiente figura. Note

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.

aleatorio y no afectará la selección del primer máximo. 10. Antes de ejecutar el programa es

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ú):

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 11. Finalmente salvamos el ejercicio y lo ej ecutamos. Un
Departamento de Automática y Computación 18/11/2006 11. Finalmente salvamos el ejercicio y lo ej ecutamos. Un

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Por último, señalar que si queremos que el gr áfico

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:

quedaría el ejercicio para una demora de 50 milisegundos: En la figura anterior también se a

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

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:

La solución final se ofrece en la siguiente figura: Se recuerda la función y terminales de
La solución final se ofrece en la siguiente figura: Se recuerda la función y terminales de

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

y terminales de los dos elementos principales involucrados: Antes de pasar a una explicación más o
y terminales de los dos elementos principales involucrados: Antes de pasar a una explicación más o

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.

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:

de crear el lazo condicional while en nuestra aplicación: 2. Debemos ahora definir la condición de

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?):

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 3. En el panel Frontal debemos insertar un control de

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):

descomponer (Controls/String & Path/String Control): Note que en la siguiente figura el control generado en el

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):

String Functions/Search Split String): 5. Una vez introducido dicho componente se crea el primer

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).

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Como ya mencionamos anteriormente, los shift register tienen que

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 /.

primer element o (elemento 0) hasta detectar el carácter /. Esta función tiene dos salidas, la

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 8. Que conectar al shift register que no aparece conectado

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)

en la siguiente figura (Functions/String/String Subset) También se pudo utilizar una segunda función split, pero

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

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):

Search/Split

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 9. Ahora si podemos conectar la salida de esta función

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

función String Subset al shift register de su derecha: 10. Hasta aquí lo que está programado

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 11. Eso nos permite visualizar el año. Pero y el

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

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):

register para las iteraciones i-2, i-3, i-4,

de año): register para las iterac iones i-2, i-3, i-4, El resultado: 12. Debemos agregar otro

El resultado:

register para las iterac iones i-2, i-3, i-4, El resultado: 12. Debemos agregar otro nivel, (el

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 A cada nivel creado se le asocia el indicador de

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

correspondiente, de la misma forma que se hizo con el año: 13. Antes de concluir debemos

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 La constante de cadena vacía se encuentra definida en la

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:

se descompondrá, editando en el control Fecha el valor: Después de una ejecución, y para esa
se descompondrá, editando en el control Fecha el valor: Después de una ejecución, y para esa

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ejercicio 3: Realice un programa en LabView que permita gráficar

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):

y un botón (ya se sabe como hacerlo de clases anteriores): En la figura anterior aparece

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 3. Una vez creado el nodo fórmula tenemos que indicar

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):

menú apar ece al dar clic derecho en el nodo fórmula): 4. A dicha entrada le

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 5. Ahora debemos editar dentro del nodo fórmula el contenido

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:

aplicación hasta este momento en la ventana de diagrama: 7. La salida, que se produce en

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 La salida “y” del nodo fórmula se conecta al gráfico:

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

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

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

Departamento de Automática y Computación

18/11/2006

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:

botón booleano de salida y realizar el código siguiente: Ahora debemos diseñar la interfaz de usuario

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ya estamos listos para programar en “Código G” la lógica
Departamento de Automática y Computación 18/11/2006 Ya estamos listos para programar en “Código G” la lógica
Departamento de Automática y Computación 18/11/2006 Ya estamos listos para programar en “Código G” la lógica
Departamento de Automática y Computación 18/11/2006 Ya estamos listos para programar en “Código G” la lógica

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:

del diagrama en bloques, que luce de la siguiente forma: La operación de cálculo de la

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Esta estructura está representada por un marco y un titular
Departamento de Automática y Computación 18/11/2006 Esta estructura está representada por un marco y un titular
Departamento de Automática y Computación 18/11/2006 Esta estructura está representada por un marco y un titular

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

donde se programa el código asociado a la condición de true: puede conmutar entre uno y
donde se programa el código asociado a la condición de true: puede conmutar entre uno y

true:

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.

. Note que usted

y el código asociado a la condición de false:

que usted y el código asociado a la condición de false: Según nuestra lógica, si el

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:

las funciones numéricas como se muestra a continuación: Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto. 81
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:

un “String Constant” según se observa a continuación: Ahora solo nos resta realizar la comparación y
un “String Constant” según se observa a continuación: Ahora solo nos resta realizar la comparación y
un “String Constant” según se observa a continuación: Ahora solo nos resta realizar la comparación y

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

el terminal asociado al mismo, por lo que debemos crear una variable local de ese control.

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”:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Para comparar el valor de la variable, se debe utilizar
Departamento de Automática y Computación 18/11/2006 Para comparar el valor de la variable, se debe utilizar

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

la paleta de funciones. El resultado de esta comparación es “True” o “False” y sirve de

“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.

según su estado “booleano” cual código realizar. Ya se está en condiciones de correr la aplicación,
según su estado “booleano” cual código realizar. Ya se está en condiciones de correr la aplicación,

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.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Para obtener los resultados esperados la acción mecánica
Departamento de Automática y Computación 18/11/2006 Para obtener los resultados esperados la acción mecánica

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

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Si no se utiliza este modo persisten lo s errores

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

gráfic o está representado por una variable de tipo y que según su valor debe realizarse

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.

para los operandos y un indicador para el resultado. Ejercicio 2: Elabore un programa en LabView

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:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ahora debemos escoger un control que sirva de fi gura

Ahora debemos escoger un control que sirva de figura de animación, en este caso se escogió el control booleano “Square LED” aunque pudo haber sido cualquier otro. Si no se desea ver la etiqueta asociada usted debe dar clic derecho sobre el control y desmarcar la opción “Label” dentro del submenú “Visible Ítems”.

“Label” dentro del submenú “Visible Ítems”. Antes de comenzar a programar debemos analizar como
“Label” dentro del submenú “Visible Ítems”. Antes de comenzar a programar debemos analizar como

Antes de comenzar a programar debemos analizar como enfrentar este ejercicio. Para animar el control se deben utilizar sus propiedades “Top” y “Left”, primera para moverse en dirección vertical y la segunda para moverse en dirección horizontal. Como se necesita variar las coordenadas del mismo de acuerdo a la siguiente secuencia de pasos:

Incrementar 100 veces en una unidad la propiedad “Left”.

Incrementar 100 veces en una unidad la propiedad “Top”.

Decrementar 100 veces en una unidad la propiedad “Left”.

Decrementar 100 veces en una unidad la propiedad “Top”.

Es importante darse cuenta que para realizar cada una de estas acciones es necesario repetir 100 veces las acciones de incrementar o decrementar las propiedades según el caso. Para ello se debe utilizar la estructura “For Loop” según se muestra a continuación:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Esta estructura ya fue estudiada y su principal conexión es
Departamento de Automática y Computación 18/11/2006 Esta estructura ya fue estudiada y su principal conexión es

Esta estructura ya fue estudiada y su principal conexión es la variable que define la cantidad de iteraciones a realizar, que en nuestro caso es de 100 y se define dando clic derecho sobre el punto según las figuras siguientes:

clic derecho sobre el punto según las figuras siguientes: Para realizar la primera de la acciones
clic derecho sobre el punto según las figuras siguientes: Para realizar la primera de la acciones
clic derecho sobre el punto según las figuras siguientes: Para realizar la primera de la acciones

Para realizar la primera de la acciones es necesario obtener la propiedad “Left”. Esto se realiza dando clic derecho sobre la variable y seleccionando la opción “Property Node” dentro de “Create”. Sin embargo usted debe verificar que esta acción crea por defecto propiedad “Visible” como se muestra en estas figuras:

propiedad “Visible” como se muestra en estas figuras: Para obtener la propiedad “Left” se debe dar
propiedad “Visible” como se muestra en estas figuras: Para obtener la propiedad “Left” se debe dar

Para obtener la propiedad “Left” se debe dar clic derecho sobre la propiedad por defecto y seleccionar la opción “Properties” que define la propiedad deseada. En nuestro caso se obtiene como se muestra a continuación.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Como debemos incrementar la propiedad “left” necesitamos otro
Departamento de Automática y Computación 18/11/2006 Como debemos incrementar la propiedad “left” necesitamos otro

Como debemos incrementar la propiedad “left” necesitamos otro nodo con esta propiedad, pero esta vez que sea de escritura. Para convertir la propiedad de lectura a escritura debemos dar clic derecho sobre ella y luego seleccionar “Change To Write”.

sobre ella y luego seleccionar “Change To Write”. Para realizar la operación de increment o se
sobre ella y luego seleccionar “Change To Write”. Para realizar la operación de increment o se

Para realizar la operación de incremento se utilizará la operación matemática de la paleta de funciones numéricas. El código queda de la siguiente manera.

numéricas. El código queda de la siguiente manera. Ahora podemos ejecutar la aplicación y el control

Ahora podemos ejecutar la aplicación y el control se moverá de izquierda a derecha 100 unidades. Sin embargo, este es el primero de los cuatro pasos necesarios. Es por ello que es útil introducir la estructura “Secuence” que ofrece varios marcos donde se puede programar, como su nombre lo indica una, secuencia de códigos que se ejecutaran paso a paso. Como el primero de ellos ya está programado nuestra secuencia incluirá el código ya programado para moverse verticalmente y hacia la derecha.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Para incluir hacia una nueva secuencia o marco (Frame) se
Departamento de Automática y Computación 18/11/2006 Para incluir hacia una nueva secuencia o marco (Frame) se

Para incluir hacia una nueva secuencia o marco (Frame) se selecciona la estructura “Secuence” y se hace clic derecho sobre ella, entonces se selecciona la opción “Add Frame After”.

entonces se selecciona la opción “Add Frame After”. ¡NO SE ALARME!! Su código no ha desaparecido
entonces se selecciona la opción “Add Frame After”. ¡NO SE ALARME!! Su código no ha desaparecido

¡NO SE ALARME!! Su código no ha desaparecido simplemente se ha superpuesto un nuevo marco para programar la secuencia siguiente. Usted puede volver al código anterior seleccionando las flechas del titular , que muestra el marco de trabajo actual y la cantidad de marcos o secuencias programadas.

actual y la cantidad de marcos o secuencias programadas. El código que se debe utilizar esta

El código que se debe utilizar esta vez es muy parecido al anterior pero en este caso se utilizará la propiedad “Top” en vez de “Left”. Obtener esta propiedad es muy similar a obtener la anterior y esto se muestra a continuación:

a obtener la anterior y esto se muestra a continuación: El código para este caso queda

El código para este caso queda de la siguiente manera:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Como se puede ver cada uno de los cuatro pasos

Como se puede ver cada uno de los cuatro pasos es muy similar al anterior. Existe una forma fácil de reproducir el “Código G” programado en una secuencia para otra. Para ello se hace clic derecho sobre ella, y se selecciona la opción “Duplicate Frame”. Ahora solo debemos sustituir las operaciones de incrementar por decrementar ya que se quiere viajar de derecha a izquierda y de abajo hacia arriba. A continuación se ven los pasos 3 y 4 necesarios para cumplir los objetivos del programa.

3 y 4 necesarios para cumplir los objetivos del programa. Si alguno de los marcos no

Si alguno de los marcos no coincide con su orden correcto de ejecución usted debe seleccionar su marco correspondiente, luego dar clic derecho sobre su borde y ejecutar la opción “Make This frame” y establecer el orden que requiera según su lógica (Figura siguiente).

el orden que requiera según su lógica (Figura siguiente). Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.
el orden que requiera según su lógica (Figura siguiente). Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.

Departamento de Automática y Computación

18/11/2006

Estudio Individual

Realice un programa que permita que un control se mueva en el panel frontal de manera que describa una circunferencia con un radio de 100 unidades. Recuerde que la ecuación de una circunferencia es Y 2 = (R 2 - X 2 ).

Ejercicio 3:

Elabore un programa en LabView que permita manipular el evento “Mouse Down” de un control booleano de LabVIEW para mostrar un cuadro de mensajes con el cartel “Hola Mundo !!”

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:

botón booleano de salida y realizar el código siguiente: El diseño de la aplicación es muy
botón booleano de salida y realizar el código siguiente: El diseño de la aplicación es muy

El diseño de la aplicación es muy sencillo toda vez que solo es necesario introducir otro control booleano: la interfaz queda como sigue:

otro control booleano: la interfaz queda como sigue: Para manipular el evento asociado con el “Botón
otro control booleano: la interfaz queda como sigue: Para manipular el evento asociado con el “Botón

Para manipular el evento asociado con el “Botón OK” es necesario introducir la estructura de eventos que se encuadra en la paleta de funciones en la página “Structures”. Una vez que se selecciona como muestran las figuras se extiende su marco dentro del marco del ciclo “while” general.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Para introducir un manipulador de eventos se da clic derecho
Departamento de Automática y Computación 18/11/2006 Para introducir un manipulador de eventos se da clic derecho

Para introducir un manipulador de eventos se da clic derecho sobre uno de sus bordes y se selecciona la opción “Add Event Case”. A continuación se muestra una ventana de configuración tal y como se ve en las figuras siguientes:

configuración tal y como se ve en las figuras siguientes: En la parte inferor izquierda se

En la parte inferor izquierda se muestran todos los controles que contiene nuestra aplicación, en este caso está el botón de salida “stop” y el botón “Ok Button”. Al seleccionarlo dando clic sobre él se muestran en la parte inferior derecha los posibles métodos que usted puede manipular. En nuestro caso será “Mouse Down”. Seleccione esta opción dando clic sobre él y luego presione “OK”.

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ahora usted puede notar que se añade un nuevo ma

Ahora usted puede notar que se añade un nuevo marco a la estructura de eventos con el

titular:

coloque en su interior será ejecutado cuando ocurra el evento señalado en el mismo. En este

lo que quiere decir que todo el código que se

En este lo que quiere decir que todo el código que se caso “Mouse Down” sobre

caso “Mouse Down” sobre “OK Button”.

código que se caso “Mouse Down” sobre “OK Button”. El código que hay que introducir es

El código que hay que introducir es muy simple. Los pasos son los siguientes:

Tomar una función de diálogo

Una constante de cadena

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 El código final de la aplicación es el siguiente: Estudio
Departamento de Automática y Computación 18/11/2006 El código final de la aplicación es el siguiente: Estudio

El código final de la aplicación es el siguiente:

El código final de la aplicación es el siguiente: Estudio Individual Realice un programa que permita

Estudio Individual

Realice un programa que permita manipular el evento “Value Changed” (ocurre cuando cambia su valor) de un control de cadenas para que el color del texto que contiene conmute siempre entre dos colores que usted seleccione.

Departamento de Automática y Computación

18/11/2006

TEMA VI Tipos de Datos Complejos. Arreglos y Clusters

Definición y Trabajo con Arreglos en LabView

Definición y Trabajo con Clusters

Ejercicio No.1

Declarar un arreglo de números de una dimensión y colocar 10 elementos según el usuario decida. Obtener el valor promedio de ellos y asignar el quinto elemento a un control de tipo “Tank”. Reemplazar el tercer elemento con el octavo.

Solución:

Primero, realicemos el diseño general de la pantalla frontal de la aplicación. Necesitamos colocar un indicador tipo tanque (tank), y un arreglo de 10 elementos. El control tipo tanque ya sabemos donde encontrarlo, por lo que explicaremos directamente como crear el arreglo de 10 elementos. La siguiente figura muestra la primera parte, donde (a), (b) y (c) definen el orden (b y c ocurren al mismo tiempo):

(b) y (c) definen el orden (b y c ocurren al mismo tiempo): (a) (b) (c)

(a)

y (c) definen el orden (b y c ocurren al mismo tiempo): (a) (b) (c) Observe

(b)

definen el orden (b y c ocurren al mismo tiempo): (a) (b) (c) Observe que al

(c)

Observe que al colocar el arreglo en el panel frontal en la ventana de código se crea un arreglo sin tipo. El primer paso después de crear el arreglo es definirle un tipo, para lo cual debemos insertarle un indicador o un control dentro del arreglo creado. Esto se hace en la ventana o panel frontal, como se indica por pasos en la siguiente figura:

Departamento de Automática y Computación

18/11/2006

(a)

Departamento de Automática y Computación 18/11/2006 (a) (b) (c) (d) En (d) se muestra lo que

(b)

de Automática y Computación 18/11/2006 (a) (b) (c) (d) En (d) se muestra lo que se

(c)

(d)

En (d) se muestra lo que se refleja en la pantalla de diseño después de haber insertado el control digital dentro del arreglo creado. El procedimiento es sencillo, como se indica en (a) se escoge el control adecuado, y se arrastra con el mouse hasta ubicarlo dentro del arrglo ( figura (b)), en ese momento LabView cambia la figura y le define el tipo al arreglo asociado al control. En un siguiente paso debemos lograr visualizar los 10 elementos del arreglo. Aunque esto no

visualizar los 10 elementos del arreglo. Aunque esto no es necesario (note que existe el indicador

es necesario (note que existe el indicador de indice para poder movernos entre los elementos del arreglo, siempre que se pueda debe ofrecérsele al usuario la posibilidad de ver todos los elementos del arreglo. Para mostrar todos los elementos del arreglo basta con seleccionar al objeto y ubicar el mouse en la esquina inferior derecha, presionar el botón izquierdo del mouse (sin liberarlo) y moverlo hacia abajo 9 posiciones más. De esta manera obtendremos en el panel frontal algo similar a lo que se muestra en la siguiente figura:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Note que como no se han definido valores en el

Note que como no se han definido valores en el arreglo, estos aparecen en gris. A medida que se vayan definiendo dichos valores la dimensión efectiva del arreglo irá cambiando, hasta completar los 10 elementos. Para terminar el diseño del panel frontal debemos introducir un indicador tipo tanque y otro digital, este último nos servirá para indicar el promedio de los elementos del arreglo. El resultado final debe ser:

de los elementos del arreglo. El resultado final debe ser: Note que el indicador digital del

Note que el indicador digital del promedio se ha editado para cambiar la etiqueta por defecto (numeric) y poner Promedio.

En la ventana de código después de estos pasos se han creado tres elementos, el arreglo, el indicador del tanque y el del promedio:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Ahora, debemos de programar nuestra aplicaci ón. Empecemos por el

Ahora, debemos de programar nuestra aplicación. Empecemos por el promedio. Sabemos que tenemos 10 elementos en el arreglo, por tanto lo único que necesitamos es un ciclo para recorrer el arreglo e ir sumando los elementos. Una vez que estén sumados los elementos, ya fuera del ciclo, dividimos el resultado por 10. Para ir almacenando el resultado de la suma en cada iteración podemos utilizar los shift registers vistos en ejercicios anteriores. El valor inicial del shift register, antes de la primera suma, debe ser cero, para que no la afecte. El último valor almacenado en el shift register, justo cuando termina el lazo for es precisamente la suma, que entonces pasamos a dividir por 10. La siguiente pantalla muestra el resultado:

dividir por 10. La siguiente pantalla muestra el resultado: Por defecto, cuando uno conecta un arreglo

Por defecto, cuando uno conecta un arreglo a un lazo, LabView asume que el arreglo se va a indexar con la variable del ciclo, o sea, que para cada iteración se utilizará el elemento array[i] del arreglo declarado. Si no se quiere que suceda así podemos inhabilitar el indexado seleccionando el lazo for y dando clic derecho encima del nodo que representa el arreglo:

clic derecho encima del nodo que representa el arreglo: En este ejercicio se quiere trabajar con

En este ejercicio se quiere trabajar con el indexado por lo que no debemos inhabilitarlo. En caso de que se inhabilite, el ciclo recibe el arreglo completo, y no elemento a elemento, compruébelo!.

Dr.Valery Moreno Vega y Msc.Adel Fernández Prieto.

98

Departamento de Automática y Computación

18/11/2006

Ya tenemos una parte del ejercicio resuelto. Veamos ahora como conectar el elemento 5 del arreglo con el indicador tipo tanque (tank). En este punto es conveniente realizar una observación importante. Al igual que en muchos otros lenguajes, LabView comienza a indexar los arreglos con 0, o sea, que el primer elemento tiene índice 0. Esto significa que nuestro 5 elemento tiene el índice 0. Hay muchas funciones programadas en lenguaje G para trabajo con arreglos. Ellas se encuentran agrupadas en la paleta Functions/Array que se muestra a continuación:

la paleta Functions/Array que se muestra a continuación: Una de las funciones presentes en esta biblioteca

Una de las funciones presentes en esta biblioteca o librería de funciones es la que dado un índice me devuelve el valor del elemento. Dicha función es la segunda comenzando por la esquina superior izquierda:

es la segunda comenzando por la esquina superior izquierda: La función espera como entrada que se

La función espera como entrada que se le conecte un arreglo y al menos se le especifique un índice. Si se le especifica un índice solamente, entonces devolverá el valor del elemento en ese índice. Si se le especifica más de un índice devuelve un subarreglo con los valores de los elementos en esos subíndices. En nuestro caso necesitamos saber el valor del elemento 5, cuyo índice es 4, y una vez que tengamos dicho valor, lo conectamos directamente al indicador tipo tanque. La siguiente figura indica como hacerlo:

Departamento de Automática y Computación

18/11/2006

Departamento de Automática y Computación 18/11/2006 Si evaluamos hasta ahora lo que hemos hecho en el
Departamento de Automática y Computación 18/11/2006 Si evaluamos hasta ahora lo que hemos hecho en el

Si evaluamos hasta ahora lo que hemos hecho en el programa introduciendo valores ejemplos en el panel frontal para los distintos elementos del arreglo, tendremos un resultado como el que se muestra a continuación (note que los valores de los elementos del arreglo fueron 1,2,3,4,5,6,7,8,9,10):

Departamento de Automática y Computación