Sei sulla pagina 1di 248

Instituto gfghf

Automtica y Computacin

CUJAE

Instituto Superior Politcnico "Jos Antonio Echeverra", CUJAE, Marianao, Ciudad Habana, Apdo. Postal 19390, 260 6778 , 260-2055 / FAX: 267 29 64

PROGRAMACIN EN LABVIEW. PROGRAMACIN EN LENGUAJE G. TIPOS DE DATOS SIMPLES Y COMPLEJOS. ESTRUCTURAS DE CONTROL DE FLUJO. TRABAJO CON FICHEROS, TRABAJO CON TARJETAS DE ADQUISICIN DE DATOS, PUERTO SERIE Y PARALELO, TCP-IP Y DDE.

Monografa elaborada por Dr. Valery Moreno Vega y Msc. Adel Fernndez Prieto para el curso de Instrumentacin Virtual dictado dentro de la asignatura Automtica III en la carrera de Automtica de la Facultad de Ingeniera Elctrica del ISPJAE. Direcciones de Contacto: Email: valery@electrica.cujae.edu.cu Telfonos: 2663342, 2602055.

y adel@electrica.cujae.edu.cu

1ra Versin Revisada en Abril 2005.

Departamento de Automtica y Computacin

18/11/2006

Indices

ndice Introduccin Tema I Conceptos bsicos Tema II LabVIEW bsico Tema III Tipos de datos simples Tema IV Control de flujo de programa en LabVIEW. Estructuras repetitivas. Tema V Ms estructuras de control de flujo. Tema VI Tipos de datos complejos. arreglos y clusters Tema VII Controles forma de onda. implementacin de funciones en LabVIEW Tema VIII Trabajo con ficheros Tema IX. Tarjetas de adquisicin de datos (PCL-818L). Tema X Trabajo con puerto serie en LabVIEW Tema XI Trabajo con puerto paralelo en LabVIEW Tema XII Comunicacin TCP-IP en LabVIEW Tema XIII Comunicacin DDE

1 2 4 9 29 55 79 95 117 142 161 200 213 221 235

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

Introduccin: En esta monografa el lector encontrar una introduccin a algunos temas relacionados con la instrumentacin virtual y especficamente sobre la herramienta de programacin LabVIEW. Los temas abordados comprenden: 1. LabVIEW bsico 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. Confeccin de funciones (subVI). h. Trabajo con ficheros. 2. LabVIEW avanzado a. Trabajo con tarjetas de adquisicin de datos. b. Trabajo con puerto serie y paralelo. c. Trabajo con TCP-IP. d. Trabajo con DDE. El primer tema es necesario como introduccin a cualquier lenguaje de programacin, y en el mismo se abordan los conceptos en que se basa la programacin grfica. Es de destacar que en la programacin grfica todo esta muy ligado a la iconografa 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 programacin 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 travs de una metodologa de programacin estructurada, utilizando como recurso la implementacin de funciones, que en este caso se denominan SubVI. El presente trabajo comienza con una breve explicacin de los conceptos bsicos 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 bsica y especializada, a travs de ejemplos. Tambin 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 bsico de esta herramienta. Es de destacar que el trabajo con las tarjetas de adquisicin de datos se realiza basado en la PCL-818L, esta es solo una, de muchsimas variantes que existen actualmente en el mercado, sin embargo, el estudio detallado que se hace de la misma, y la metodologa de diseo de su controlador, nos parece un punto de partida prctico 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 anlisis matemtico, el uso de filtros para seales de entrada. Adems, el estudio de los DataSockets que se basan en el protocolo TCP-IP. Tambin el trabajo con OLE/Active X y la conexin con Bases de Datos profesionales. Sin embargo, ya el volumen de esta edicin 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 ningn concepto queda fuera de lo que se ha abordado anteriormente.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

Esta edicin un poco abre una primera puerta a la escasez de bibliografa que existe alrededor del Lenguaje de programacin LabVIEW. Sabemos que estos lenguajes son susceptibles de actualizaciones, pero tambin el hecho de que los temas abordados son los suficientemente bsicos, incluyendo aquellos que se denominaron como avanzados, nos da suficiente paz, como para pensar que este volumen se pueda utilizar por algunos aos, no diez o veinte, pero si hasta tres aos. Esperamos disfrute y encuentre til esta monografa. Es ese el deseo de los autores.

Los autores.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

TEMA I Conceptos Bsicos Primeramente antes de entrar en que es el LabView vamos a conocer nuevos conceptos acerca de la Instrumentacin Virtual. Semnticamente virtual es algo aparente, que no es real pero que se comporta como tal. En la actualidad se manejan trminos como los de instrumentacin virtual, laboratorio virtual, ambientes virtuales, y realidad virtual. No se debe confundir laboratorio virtual con instrumento virtual aunque existe una estrecha relacin. 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 clsico pudiendo agregarle al instrumento otras funciones a voluntad. A pesar de esta pequea diferencia, un laboratorio con instrumentos virtuales es un laboratorio virtual. En el campo de la instrumentacin quien introdujo por primera vez el termino virtual fue la compaa National Instrument en 1986, al elaborar un programa que de manera simple y grfica 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 programacin. El instrumento tradicional ya est definido, con capacidades de entrada/salida de seales 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. Adems, la capacidad de procesamiento de los instrumentos virtuales es superior a la de instrumentos estndares, debido a la rpida evolucin de la tecnologa de los PCs y de las estaciones de trabajo como resultado de las grandes inversiones que se efectan en la industria. En 1986 National Instruments introdujo LabView 1.0 con el propsito 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 clculo permita a los hombres de negocios analizar datos financieros. Este nombre LabView viene de las siglas en ingles Laboratory Virtual Instrument Engineering Workbench. La versin del LabView 6.1 y los requerimientos mnimos son: 1. 32 MB de RAM y 65 MB de HD / Parcial, 300MB Completa. 2. Incluye Windows NT 4.0 o superior Que es el LabView?. El LabView es un programa para el desarrollo de aplicaciones de propositos generales, tales como el C, el Basic, el Pascal.

Herramientas de Desarrollo de Software

Ambiente de desarrollo

+ Lenguaje de
Figura1: Esquema general

Programacin

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

Ambiente de Desarrollo Todo ambiente de desarrollo testa formado por los siguientes elementos. Es importante que se busque y se practiquen con frecuencia ya que esto permite que el desarrollo de las aplicaciones se realice con mayor rapidez y calidad. Depuracin Puntos de ruptura. Ejecucin paso a paso. Ventana de seguimiento a variables

Facilidades de desarrollo Panel frontal: Para observar el estado de las pantallas que estamos desarrollando. Paletas de funciones y controles para adicionar a nuestro proyecto. Herramientas para alinear los controles y funciones.

Lenguaje de Programacin.

LabVIEW usa el lenguaje de programacin grfico Lenguaje G. Las posibilidades son normalmente las mismas que presenta cualquier lenguaje de programacin: Sentencias (Grficos) de control de Flujo y repetitivas. Posibilidad de declaracin de variables. Modularidad a travs de la confeccin de funciones. Trabajo con los eventos y propiedades de los controles y variables. Incluye bibliotecas de funciones extendidas para cualquier tarea de programacin. Basado en objetos pero no permite nuevas declaraciones. Mecanismos de conexin con lenguaje C y C++ y DLL. Algo muy caracterstico 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 adquisicin, acceso a buses de campo, procesamiento matemtico y procesamiento de seales Tarjetas de adquisicin de datos Bus GPIB. Entrada/ Salida (Puerto serie y paralelo). Arquitectura VISA. Anlisis de seales. Almacenamiento de datos. Comunicacin (TCP-IP, UDP y otros). Matemticas. Cmo se trabaja con el LabVIEW? Los programas en LabVIEW son llamados Instrumentos Virtuales (y son salvados con la extensin .VI). Los programas de LabVIEW constan de un panel frontal y un diagrama de bloques. En el panel frontal se disea la interfaz con el usuario, viene a ser la cara del VI y en el diagrama de bloques se programa en lenguaje G el funcionamiento del VI.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

Programas de LabView (*.vi)

Panel Frontal

Diagrama Bloques

Diseo de interfaz Cara del


instrumento virtual
El Panel Frontal

Lenguaje G Lgica del programa

El panel frontal de un VI es una combinacin 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 travs de accionar el botn derecho del ratn sobre el panel frontal. A los controles e indicadores se les puede cambiar el tamao, la forma, y la posicin, adems cada control o indicador tiene un pop-up men en el cual se pueden cambiar varios atributos o seleccionar diferentes opciones. Los controles: Entregan datos al diagrama en bloques por mediacin del teclado o el ratn, Simulan dispositivos de entrada de datos del VI

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

El Diagrama en Bloques

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

La ventana Diagrama almacena el diagrama en bloques del VI, el cdigo fuente grfico (Lenguaje G) del Instrumento Virtual. Se construye este diagrama con bloques funcionales denominados nodos, conectndose o unindose entre s segn sea el objetivo. Estos nodos realizan todas las funciones especficas necesarias para el VI y controlan el flujo de la ejecucin del VI. Tipos de Datos en LabView Tabla 3.1 Tipos de Datos en LabView I32 32 (4 bytes) -2147483648 hasta 2147483647 I16 16 (2 bytes) -32768 hasta 32767 I8 8 (1 bytes) -128 hasta 127 U32 32 (4 bytes) 0 hasta 4294967295 U16 16 (2 bytes) 0 hasta 65535 U8 8 (1 bytes) 0 hasta 255 EXT 96 (12 bytes) -1.00E507 hasta 9.00E+515 DBL 64 (8 bytes) -5.00E-324 hasta 1.70E+308 SGL 32 (4 bytes) -1.40E-45 hasta 3.40E+38 CXT 192 (24 bytes) -1.00E507 hasta 9.00E+515 CDB 128 (16 bytes) -5.00E-324 hasta 1.70E+308 CSG 64 (8 bytes) -1.40E-45 hasta 3.40E+38 abc 1 byte/caracter Conjunto de Caracteres ascii. Segn el tipo de los elementos del arreglo [...]

Long Word Byte Long Unsigned Word Unsigned Byte Unsigned Extended Double Single Complex Extended Complex Double Complex Single Cadena(String) Arreglos(Array) Grupos (Cluster) Path Device

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

Configuracin

Representacin

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

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

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

TEMA II LabVIEW Bsico Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseo o panel frontal, y la pantalla o ventana de flujo de programa. Conocer los principales indicadores y botones y las acciones ms comunes de los mismos. Conocer las teclas de acceso directo y las principales opciones de la ayuda y de la ejecucin del programa.

Ejercicio 1: Elabore un programa en LabView que permita conectar a un termmetro y un tanque dos controles de sintona de manera tal que cuando varen su valor el nuevo adquirido se refleje en los indicadores tipo termmetro y en el tipo tanque. Solucin: Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente:

En esa pantalla podemos seleccionar varias opciones entre las cuales estn 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 botn continuacin aparece una ventana simular a la que se presenta a continuacin: . A

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

Departamento de Automtica y Computacin

18/11/2006

La primera pantalla que aparece es el panel frontal o ventana de diseo de la aplicacin 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. Comprubelo con la combinacin 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 distribucin LabView dispone de la combinacin Ctrl+T (tambin se puede realizar mediante la opcin del men Windows/Tile Left and Right). Una vez que se realiza esta accin se obtiene la siguiente distribucin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

10

Departamento de Automtica y Computacin

18/11/2006

Ya estamos listo para comenzar a darle solucin al ejercicio. Primero seleccionemos los controles que podremos. Para ello seleccionamos mediante un clic la ventana izquierda (panel frontal) y a continuacin 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 smbolo algo similar a: . Aparecer

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

11

Departamento de Automtica y Computacin

18/11/2006

Observe que en ambas ventanas, la de Controls y la Numeric, en el caption de las mismas aparece el nombre de la ventana precedido de una especie de tachuela, o sea, . Este smbolo 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 opcin que nos interesa) podemos hacerlo cambiando el estado de la tachuela dando clic encima de ella. Como en esta aplicacin vamos a ubicar ms 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 posicin o forma:

y si en ese momento damos clic obtenemos:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

12

Departamento de Automtica y Computacin

18/11/2006

Los controles tipo sintona 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 seleccin 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 (opcin 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 comparacin con el resto:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

13

Departamento de Automtica y Computacin

18/11/2006

Continuando con la idea original de insertar los controles en el panel frontal, seleccionamos los de tipo sintona (1ero y segundo de la tercera fila) en la paleta o ventana numeric mostrada en las figuras precedentes. La seleccin se realiza dando clic encima del de inters y colocndolo en el panel frontal (de la forma usual con que se hace esto en lenguajes visuales como el C++ Builder). Despus de realizada la operacin las pantallas deben tener una apariencia como sigue (se muestra el segmento de inters de las ventanas):

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

14

Departamento de Automtica y Computacin

18/11/2006

y:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

15

Departamento de Automtica y Computacin

18/11/2006

fcil identificar cuando una variable es de lectura o escritura pues LabView nos lo indica con una especie de saeta, que indica la direccin del flujo de los datos. En el ejemplo anterior ambas variables estn representadas con los smbolos . Note que en dicho smbolo aparece la saeta indicando salida, o sea, escritura. En el smbolo anterior tambin 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 opcin Representation:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

16

Departamento de Automtica y Computacin

18/11/2006

Note que en el panel frontal la escala del control tambin 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 continuacin se ponen algunos ejemplos:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

17

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

18

Departamento de Automtica y Computacin

18/11/2006

Otras opciones incluyen escalas logartmicas (Mapping), espaciado arbitrario o uniforme, etc. El control tambin se puede redimensionar, o sea, el tamao y posicin inicial que aparece en el panel frontal son atributos que se pueden modificar en tiempo de diseo. Cada control lo indica de una manera fcil de identificar, usualmente mediante un rectngulo que encierra al control o parte de este durante el movimiento del mouse sobre el elemento. A continuacin se muestra un ejemplo: Note que se han sealado cuatro esquinas. Moviendo el puntero del mouse para cualquiera de esas esquinas se puede modificar el radio de la circunferencia que representa el botn de sintona. El resto de los elementos del control, excepto la etiqueta (en este caso Dial), se redimensionan al redimensionarse la circunferencia.

A continuacin se representa al mismo elemento redimensionado.

Hasta este punto se han situado en la pantalla los elementos grficos que harn la funcin de controles. Ahora corresponde seleccionar los indicadores que mostrarn su valor de acuerdo

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

19

Departamento de Automtica y Computacin

18/11/2006

a los controles. Estos indicadores estn situados en la misma paleta, o sea en la paleta de controles numricos. En este caso utilizaremos el indicador Tank y el thermometer, que se seleccionan de la siguiente manera:

Para luego obtener el siguiente diseo:

Para terminar y como se ha mencionado en los talleres, debemos colocar un botn que permita a los usuarios terminara la aplicacin. Para ello debemos seleccionar este control de la paleta de funciones numricas. Esto se realiza de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

20

Departamento de Automtica y Computacin

18/11/2006

El diseo final del Panel Frontal queda:

Ahora corresponde trabajar en la ventana del diagrama en bloques. Para ello podemos utilizar las teclas de acceso rpido (Ctrl+E). En esta ventana debemos utilizar el lenguaje de programacin G para establecer la lgica de nuestra aplicacin. Antes de comenzar tenemos las cinco variables que corresponden a los cinco controles que hemos colocado en la pantalla. El cdigo luce de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

21

Departamento de Automtica y Computacin

18/11/2006

El primer cdigo G que debemos programar es el necesario para comenzar y terminar la aplicacin. Para ello se tiene el control Stop Button representado por la variable booleana ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe stop (verde ejecutar nuestro programa. En caso contrario debe terminar la aplicacin. Esta situacin se modela en programacin a travs de un ciclo while. Para incorporar un ciclo while a nuestra aplicacin se selecciona en la paleta de funciones el boton: y luego se busca la opcin while loop.

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

22

Departamento de Automtica y Computacin

18/11/2006

Al finalizar se obtiene la siguiente estructura de programa G:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

23

Departamento de Automtica y Computacin

18/11/2006

Note que el flujo de los datos va desde el control hacia el indicador y note tambin que la representacin grfica de ambas variables pese a ser del mismo tipo de datos no es igual: El borde es ms 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 condicin de salida del ciclo do..While . Para ello debemos utilizar un negador ya que el botn por defecto est en falso. Para ello se utilizan los operadores boolenos que se encuentran en la paleta de funciones segn se muestra debajo:

Al conectarlos queda de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

24

Departamento de Automtica y Computacin

18/11/2006

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

permite ejecutar la aplicacin, mientras qu el botn El botn ejecutar la aplicacin. Para realizar una pausa debemos utilizar el botn

permite terminar de

, luego podemos utilizar los botones

para ejecutar paso a paso la aplicacin. El primero ejecuta instruccin por instruccin, entrando en las funciones si las hubiera, mientras que el segundo si encontrara una funcin, la ejecuta como si fuera un solo paso. El tercer tipo de botn termina la ejecucin paso a paso. que ejecuta la aplicacin de manera continua pero Un botn muy interesante es introduciendo una demora entre instruccin e instruccin para que pueda depurarse la aplicacin. Adems se puede observar los valores asignados a las variables y funciones as como los valores devueltos por estas. Si quisiramos utilizar una ventana de depuracin se debe situar el ratn en una de las conexiones o asignaciones relacionadas con la variable que se debe depurar y dar clic derecho: A continuacin seleccionar la opcin Probe como se muestra a continuacin:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

25

Departamento de Automtica y Computacin

18/11/2006

Si en el paso anterior a este hubiramos seleccionado la opcin Set Breakpoint entonces el cdigo se ve de la siguiente forma:

Y la aplicacin se ejecutar hasta este punto, interrumpindose antes de realizar la asignacin.

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

Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Ahora completamos la interfaz de la aplicacin (Panel de Control) con los seis tipos de botones que se pueden colocar en LabView, adems colocaremos seis leds que nos indicarn la manera en que funcionan estos tipos de botones. La interfaz debe quedar de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

26

Departamento de Automtica y Computacin

18/11/2006

Luego usted debe programar la opcin Mechanical Action de los tipos de controles volanos, segn se indica en el texto. Para ello debe dar clic derecho sobre el botn de la siguiente manera:

Luego en la ventana del cdigo se asigna a cada botn un led que estar encendido solo cuando el valor del botn es verdadero. Esto queda as:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

27

Departamento de Automtica y Computacin

18/11/2006

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

Los siguientes tipos de botones tienen relacin con el tiempo que demora el Labview en leer el cambio de estado de los botones. En el cuarto caso, inmediatamente despus que se presione el ratn sobre el botn 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 botn no cambiar de estado hasta que se deje de presionar el ratn. La sexta variante funciona de manera que el botn cambia de estado con solo presionar el botn y permanece encendido todo el tiempo en que se tiene presionado el ratn sobre le botn. Una vez que se suelte el ratn, el botn 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 aplicacin utlizando la herramienta de depuracin que hace que el Labview lea con mayor lentitud los controles. Esto hace que se pueda observar claramente cuando es que se produce la lectura del estado de los botones por el labview.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

28

Departamento de Automtica y Computacin

18/11/2006

TEMA III Tipos de Datos simples Familiarizarse con el entorno de trabajo de LabView, la pantalla de diseo o panel frontal, y la pantalla o ventana de flujo de programa. Conocer los tipo de datos principales: numricos, booleanos y de cadena. Conocer los operadores y funciones bsicas 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 grfico de Labview. El valor del nivel vara entre 0 y 100 unidades y debe obtenerse a travs de una funcin 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 grfico seleccionado: Azul: estado normal, Rojo: estado de alarma. Solucin: Cuando se ejecuta LabView por primera vez aparece una pantalla similar a la siguiente:

En esa pantalla podemos seleccionar varias opciones entre las cuales estn 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 botn continuacin aparece una ventana simular a la que se presenta a continuacin: . A

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

29

Departamento de Automtica y Computacin

18/11/2006

La primera pantalla que aparece es el panel frontal o ventana de diseo de la aplicacin 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. Comprubelo con la combinacin Ctrl+E. Pasos de la solucin

1. Primero seleccionemos los controles que pondremos. Para ello seleccionamos mediante un clic la ventana izquierda (panel frontal) y a continuacin damos clic derecho. Debe aparecer un men emergente llamado controls. Seleccionamos en controls la primera de las opciones, que se llama numerics Aparecer algo similar a: y se representa en el men controls con el smbolo .

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

30

Departamento de Automtica y Computacin

18/11/2006

Como se puede observar el elemento Tank es el ms indicado para representar el nivel que es requerido en el ejercicio. Para colocarlo en el panel frontal del instrumento virtual que estamos diseando, debemos seleccionarlo en la paleta de controles y luego soltarlo en el panel frontal. El resultado es el siguiente:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

31

Departamento de Automtica y Computacin

18/11/2006

2. Segn el enunciado del problema debemos colocar la escala del tanque entre los valores de 0 y 100 unidades. Para ello debemos seleccionar el cursor en la paleta de herramientas o pulsar la tecla tab, hasta que el cursor en la pantalla quede de la siguiente manera: . Una vez que se tiene seleccionado este cursor se da doble-clic sobre el mximo valor de la escala del indicador tank, se cambia la escala de 10 a 100 y se presiona la tecla enter. Esto se realiza de la siguiente manera:

Paso 1

Paso 2

3. El otro elemento grfico necesario para resolver este ejercicio es un control numrico para establecer la referencia de la alarma. De la misma manera que se seleccion el elemento Tank ahora debemos seleccionar un control digital:

Luego la pantalla queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

32

Departamento de Automtica y Computacin

18/11/2006

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

4. Para terminar la interfaz de usuario se debe colocar un botn booleano que permita terminar la ejecucin de un programa. Esto se realiza en la paleta de controles seleccionando los elemento booleanos para luego escoger Stop Button:

La interfaz final queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

33

Departamento de Automtica y Computacin

18/11/2006

Ya estamos en condiciones de programar, en base a los elementos grficos seleccionados para nuestra interfaz, la lgica que dar solucin a nuestro ejercicio. Para ello pasamos directamente a la ventana del diagrama (Ctrl+E).

6. El primer cdigo G que debemos programar es el necesario para comenzar y terminar la aplicacin. Para ello se tiene el control Stop Button representado por la variable booleana ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe stop (verde ejecutar nuestro programa. En caso contrario debe terminar la aplicacin. Esta situacin se modela en programacin a travs de un ciclo while. Para incorporar un ciclo while a nuestra aplicacin se selecciona en la paleta de funciones el boton: y luego se busca la opcin while loop.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

34

Departamento de Automtica y Computacin

18/11/2006

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

Al finalizar se obtiene la siguiente estructura de programa G:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

35

Departamento de Automtica y Computacin

18/11/2006

8. El ciclo tiene dos variable implcitas: la iteracin representada por

y la condicin de

salida, representada por . Si negamos la variable booleana y la conectamos a la condicin de salida, se construye la lgica necesaria para la ejecucin y salida del programa. Para negar la variable booleana stop debemos utilizar los operadores booleanos que se seleccionan en la paleta de funciones como sigue:

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

Antes de conectarlos

Despus de conectarlos

10. El tipo de datos que representa a nuestro tanque y al controlador de referencia es por defecto Double . Pero esto se puede cambiar de la misma manera que se hizo en el laboratorio anterior. Antes de seguir debemos verificar que la variable Tank est configurada como indicador y la variable referencia de nivel est configurada como control. (Recordar la simbologa)

11. Segn el enunciado del ejercicio el tanque debe recibir el valor de nivel de una funcin aleatoria. En el caso de labview esta funcin se encuentra entre las funciones numricas y se puede escoger como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

36

Departamento de Automtica y Computacin

18/11/2006

12. Esta funcin brinda un valor aleatorio de tipo double entre 0 y 1. Sin embargo nuestra aplicacin requiere que el nivel vara entre 0-100. Para ello debemos multiplicar la salida de esta funcin por el valor entero 100. Con ello se logra nuestro objetivo. La funcin de multiplicacin se encuentra en la misma paleta de funciones numrica y se representa por el que recibe dos valores y devuelve la multiplicacin de ambos. Adems de esta smbolo: propia paleta debe utilizarse una constante numrica entera que ser el otro elemento necesario. que contenga el valor 100

Despus de colocar estas funciones y variables se obtiene el siguiente diagrama:

13. Ahora debemos conectar los elementos segn la lgica a seguir. En nuestro caso queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

37

Departamento de Automtica y Computacin

18/11/2006

En cada iteracin del ciclo el resultado de la funcin 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 funcin de comparacin, que se puede encontrar en la paleta de funciones Comparison:

Ahora la pantalla queda como sigue:

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

que se

15. De clic derecho sobre la variable Tank y seleccione la opcin Create, a continuacin seleccione la opcin Property Node segn se muestra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

38

Departamento de Automtica y Computacin

18/11/2006

En la pantalla del diagrama se muestra el siguiente cdigo:

16. En este caso la propiedad de la variable tankque se muestra por defecto es Visible, sin embargo si damos clic derecho sobre ella y seleccionamos la opcin Properties y luego la opcin Fill Color entonces nuestra propiedad se convierte en la que buscamos. El cdigo es el que sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

39

Departamento de Automtica y Computacin

18/11/2006

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

18. Para continuar nuestra aplicacin es necesario un bloque de toma de decisin (bloque ifthen-else) que permita escribir un color u otro en dependencia del resultado de la comparacin. Este bloque puede encontrarse en la paleta de funciones, especficamente en la paleta esta instruccin retorna el valor conectado en t o f Comparison la funcin Select en dependencia del valor de s. Si s es verdadero retorna t, en caso contrario retorna f. t y fpueden ser de cualquier tipo de dato. Al colocarlo en nuestro diagrama de bloque, podemos presionar Ctrl+H para obtener la ayuda contextual que se muestra debajo. El diagrama G ahora luce como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

40

Departamento de Automtica y Computacin

18/11/2006

El valor que debe retornar la funcin Select debe ser Rojo, si la condicin es verdadera y Azul si es falsa. Para ello es necesario utilizar constantes enteras que representen los colores deseados. 19. Esto es posible utilizando la paleta de funciones y escogiendo dos constantes Color Box Constant, una para el rojo y otra para el azul. La manera de hacerlo se muestra abajo.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

41

Departamento de Automtica y Computacin

18/11/2006

El cdigo queda como sigue:

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

Sin conexin

Con conexin

21. La aplicacin est casi lista, ahora debemos ejecutarla, para ello presionamos el botn de men y si se quiere ejecutar en modo de depuracin se pueden escoger las variantes ya . estudiadas.

Al ejecutarla podemos percibir la rapidez con que varia el nivel, para que sea ms efectiva la simulacin se puede introducir un bloque de demosra dentro del ciclo iterativo. 22. Para ello debemos ir a la paleta de funciones y utilizar la funcin Wait Until Next ms Multiple y colocar una constante de demora de 500 ms. Como se muestra a continuacin.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

42

Departamento de Automtica y Computacin

18/11/2006

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

Para disear la interfaz de usuario de este programa debemos utilizar 1 controles de cadena para entrar el nombre, 1 control numrico de tipo entero sin signo, de 8 bytes, ya que la edad siempre es positiva y nunca mayor que 256 que es el entero ms pequeo que se puede declarar y 1 indicador de cadena para la salida. Adems debemos colocar un control booleano que permita terminar la ejecucin 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.

Seleccin del control 3. Adicionar un control numrico.

Panel Frontal

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

43

Departamento de Automtica y Computacin

18/11/2006

Seleccin del control

Panel Frontal

4. Cambiar el tipo de dato asociado con el control numrico.

6. Adicionar un indicador de cadena.

Seleccin del control

Panel Frontal

7. Adicionar un control booleano.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

44

Departamento de Automtica y Computacin

18/11/2006

Seleccin del control

Panel Frontal

Ya estamos en condiciones de programar, en base a los elementos grficos seleccionados para nuestra interfaz, la lgica que dar solucin a nuestro ejercicio. Para ello pasamos directamente a la ventana del diagrama (Ctrl+E).

6. El primer cdigo G que debemos programar es el necesario para comenzar y terminar la aplicacin. Para ello se tiene el control Stop Button representado por la variable booleana ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe stop (verde ejecutar nuestro programa. En caso contrario debe terminar la aplicacin. Esta situacin se modela en programacin a travs de un ciclo while. Para incorporar un ciclo while a nuestra aplicacin se selecciona en la paleta de funciones el boton: y luego se busca la opcin while loop.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

45

Departamento de Automtica y Computacin

18/11/2006

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

Al finalizar se obtiene la siguiente estructura de programa G:

8. El ciclo tiene dos variable implcitas: la iteracin representada por

y la condicin de

salida, representada por . Si negamos la variable booleana y la conectamos a la condicin de salida, se construye la lgica necesaria para la ejecucin y salida del programa.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

46

Departamento de Automtica y Computacin

18/11/2006

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

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

Antes de conectarlos

Despus 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 ao: para ellos se va a la paleta de funciones y se busca la paleta readicionada con el tratamiento de cadenas. A continuacin se muestra su localizacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

47

Departamento de Automtica y Computacin

18/11/2006

11. Se colocan dos controles del tipo y se selecciona el cursor en la paleta de herramientas se utiliza la tecla tab, hasta que el cursor en la pantalla quede de la siguiente manera: para introducir el valor de las constantes como muestra la figura.

12. En este caso debemos concatenar cada una de las cadenas en el orden mostrado en la figura anterior. Adems, hay que restarle al valor de la edad el ao actual para obtener el ao de nacimiento y este resultado aadirlo a las cadenas. Para ello se puede utilizar la funcin Format Into String que se encuentra:

13. Esta funcin retorna una cadena de caracteres que esta formada por cada uno de los elementos que se le pasan como parmetros. Estos parmetros 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 funcin de C printf o sea : %d para enteros, %f para nmeros 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 ao). Para ello debe introducirse en el cdigo de nuestro programa una constante de la misma forma que se realiz en el paso 11 y se inicializa as:
%s%s%s%d

para luego conectarla a la funcin

segn se muestra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

48

Departamento de Automtica y Computacin

18/11/2006

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

15. Para obtener el ao debemos introducir una constante numrica entera para almacenar el desde la paleta de funciones numricas. Al valor del ao actual 2002 y un operador de resta efectuar la resta del ao menos la edad se tiene el ao de nacimiento.

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

Ejercicio 3

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

49

Departamento de Automtica y Computacin

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 da en un indicador de cadena; el mes, por su nombre, en un ComboBox y el ao 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 mostrarn el da y el ao. 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 aplicacin. El resultado debe ser como se muestra a continuacin.

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 botn Ring & Enum

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

50

Departamento de Automtica y Computacin

18/11/2006

. Luego se tecla tab hasta que el cursor en la pantalla quede de la siguiente manera 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 opcin Add Item After. De esta manera se entran todos los nombres de los meses.

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

En estos momentos estamos listos para programar el cdigo que de solucin 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 cdigo G que nos permita terminar la ejecucin de nuestro programa. Los pasos son similares a los vistos anteriormente y finalmente debe quedar de la siguiente forma:

Es de sealar que la variable correspondiente al indicador de tipo Enum es entera y cada mes tiene un nmero entero asociado. Para enero ser el 0, febrero el 1 y as sucesivamente.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

51

Departamento de Automtica y Computacin

18/11/2006

4. Para desglosar la fecha es necesario encontrar el carcter / que limita el da del mes, y el mes del ao. La funcin Search/Split String que se encuentra en la paleta de funciones permite encontrar un carcter especfico dentro de una cadena. Esta funcin necesita como parmetros la cadena donde debe buscar, el carcter que se quiere encontrar y el desplazamiento a partir del inicio de la cadena donde se comenzar la bsqueda. La funcin retorna tres valores. La subcadena que se forma hasta el carcter que se busca, la subcadena a partir del carcter que se busca (incluyendo el carcter buscado) y el ndice o desplazamiento donde se encontr el carcter.

El resultado de aplicar esta funcin a la cadena que contiene la fecha es el siguiente: Si la fecha es: 12/01/2005 Subcadena hasta el carcter /: 12 Subcadena restante: /01/2005 5. Para tomar el mes es necesario eliminar el primer carcter / de la cadena restante /01/2005y volver aplicar la funcin anterior. Para ello se puede utilizar la funcin String que recibe como parmetros una cadena, la cantidad de caracteres que se Subset quieren tomar y el desplazamiento o ndice a partir de donde se tomara la subcadena.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

52

Departamento de Automtica y Computacin

18/11/2006

6. El resultado de aplicar esta funcin 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 funcin, que es una cadena con el nmero del mes, a un valor numrico entero. Para ello el labview cuenta con funciones de conversin de tipos. En nuestro caso esto se realiza con la funcin Decimal String To Number . El diagrama queda como sigue:

Para obtener el ao se debe repertir el paso 5. con lo cual se elimina el carcter /y se obtiene el ao. El diagrama final queda as:

Para ejecutar e programa, presionamos el botn de men

y si se quiere ejecutar en modo

. Al correr el de depuracin se pueden escoger las variantes ya estudiadas. programa se puede percibir que el mes que se obtiene est desplazado en uno con el que sera 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, despus de la conversin de cadena a nmero se debe restar una unidad. El diagrama queda de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

53

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

54

Departamento de Automtica y Computacin

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 frmula. Visualizacin grfica de datos.

Ejercicio 1: Realice un programa que permita encontrar el mximo de 100 nmeros generados aleatoriamente. Represente grficamente los nmeros generados. Desarrollo: El ejercicio una vez terminado debe conducir a una representacin en Lenguaje G como la que se muestra a continuacin en la ventana de diagrama o cdigo del LabView:

Veamos como desarrollar paso a paso dicho ejercicio. Primero, una explicacin de lo que se nos pide. Se necesitan generar 100 nmeros aleatorios, lo que implica utilizar un generador de nmeros aleatorios y un lazo de control de programa o repeticin que permita que ese generador de nmeros aleatorios nos entregue 100 de dichos nmeros. Cada vez que se nos entregue un nmero, o sea, con cada iteracin del bucle o lazo, se debe comparar el nmero generado con el nmero mximo hasta ahora generado. Eso nos indica que debemos realizar una comparacin que busque el mximo y almacenarlo para comparar en cada iteracin con el nuevo nmero. Se nos pide que representemos grficamente dichos nmeros por lo que debemos agregar un grfico a nuestro diseo encargado de plotear en cada iteracin el nmero 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 operacin de comparacin en la bsqueda de un mximo 100 veces, invariablemente. Si estuviramos sujetos a alguna condicin entonces deberamos de haber seleccionado un lazo condicional, o sea, un While. La siguiente figura ilustra como hacer la seleccin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

55

Departamento de Automtica y Computacin

18/11/2006

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

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

56

Departamento de Automtica y Computacin

18/11/2006

4. Necesitamos ahora generar un nmero aleatorio y compararlo con algn mximo. Por supuesto, el primer nmero aleatorio no tiene referencia de comparacin, 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 nmero aleatorio siempre ser el primer mximo contra el cual comparar despus los sucesivos que se generarn. LabView presenta un componente que realiza la comparacin entre dos fuentes o nmeros, y devuelve el mnimo valor de entre los dos y el mximo. La siguiente figura muestra como seleccionar dicho componente (Functions/Comparison/Max & Min):

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

57

Departamento de Automtica y Computacin

18/11/2006

5. Necesitamos ahora encontrar alguna funcin que genere nmeros aleatorios. LabView tiene un componente en Functions/Numeric/Random Number (0-1):

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

58

Departamento de Automtica y Computacin

18/11/2006

El shift register desde el punto de vista de la programacin 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 iteracin i un valor v(i) al final de dicha iteracin, al comienzo de la prxima 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 numricos: Iteracin 0 1 2 3 4 5 6 V(i) 5 3 0.7 1 -1 0 2 V(i-1) 5 3 0.7 1 -1 0 V(i-2) 5 3 0.7 1 -1 V(i-3) 5 3 0.7 1 V(i-4) 5 3 0.7 V(i-5) 5 3

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

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

7. Antes de realizar las conexiones entre los elementos debemos adems seleccionar algn componente que nos permita visualizar grficamente los nmeros aleatorios que

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

59

Departamento de Automtica y Computacin

18/11/2006

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

Al seleccionar la opcin Controls/Graph/Waveform Chart obtenemos un grfico como el que se representa en la pantalla frontal de la siguiente figura, donde tambin se representa el contenido de la ventana de diagrama hasta este momento:

8. A continuacin se realizan las conexiones entre los elementos. La salida del generador de nmeros aleatorios se conecta al bloque de comparacin de nmeros, y a la entrada del control grfico. El shift register de la derecha debe almacenar el ltimo valor del mximo calculado y que se obtiene como salida del mdulo de comparacin. La siguiente figura muestra las conexiones a realizar:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

60

Departamento de Automtica y Computacin

18/11/2006

9. Una vez realizadas estas conexiones el ejercicio est prcticamente concluido. Note que la primera vez que se compara en el bloque de comparacin se hace entre un primer nmero aleatorio y el valor del shift register. Ya se explic como funciona el shift register y debemos notar que antes de concluir la primera iteracin no tenemos un valor con el cual comenzar para el shift register que adquiere uno al final de cada iteracin. Eso nos indica que tenemos que inicializarlo, darle un valor inicial con el cual empezar y evaluar la iteracin 0 . Note adems que cuando se llega a la ltima iteracin el valor actual que contiene el shift register es el del ltimo mximo calculado, y por tanto el valor que debemos reportar como resultado. Es por ello que entonces debemos crear un indicador para visualizar el ltimo mximo y una constante para definir la condicin inicial del shift register. Las figuras que se muestran a continuacin ilustran como hacerlo. Los mens que all aparecen se obtienen al dar clic derecho encima de los shift registers.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

61

Departamento de Automtica y Computacin

18/11/2006

El resultado final se muestra en la siguiente figura. Note que el valor inicial del shift register es 0.00 pues es el mnimo que puede tomar el nmero aleatorio y no afectar la seleccin del primer mximo.

10. Antes de ejecutar el programa es conveniente modificar algunos parmetros del grfico, en particular los relacionados con los ejes, que debemos modificar para permitir la auto escala. Las figuras a continuacin muestran la manera de hacerlo (siempre clic derecho en el objeto para obtener el men):

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

62

Departamento de Automtica y Computacin

18/11/2006

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

63

Departamento de Automtica y Computacin

18/11/2006

Por ltimo, sealar que si queremos que el grfico se represente ms lentamente podemos incluir una demora (Functions/Time & Dialog/ Wait Until Next ms Multiple) o seleccionar el indicador de ejecucin paso a paso. La siguiente figura muestra como quedara el ejercicio para una demora de 50 milisegundos:

En la figura anterior tambin se a insertado otro indicador, llamado max(x,y). Que funcin tendra?

Ejercicio 2: En este ejercicio se propone realizar la descomposicin de la fecha introducida en un control tipo Edit (Edicin) de una manera ms eficiente (comparada con la primera solucin a este ejercicio que ya se vio en una gua anterior), haciendo uso de los shift registers. Desarrollo: En clases anteriores se ofreci una solucin al problema de desglose de una fecha en sus componentes de da, mes y ao. Aquella solucin introduca algunos componentes para el procesamiento de cadenas que se encuentran dentro de las funciones de LabView. En dicha

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

64

Departamento de Automtica y Computacin

18/11/2006

solucin los componentes se repetan, pero hay una forma ms eficiente de resolverlo haciendo uso de los shift registers. La solucin final se ofrece en la siguiente figura:

Se recuerda la funcin y terminales de los dos elementos principales involucrados:

Antes de pasar a una explicacin ms o menos detallada de como construir la solucin 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 da, el mes y el ao que la conforman. 2. La operacin siempre es la misma: se extrae de la cadena una subcadena que representa un componente de la fecha (o el da, o el mes o el ao) y se elimina de la subcadena que resulta de extraer dicho componente el separador /. 3. El proceso se repite 3 veces.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

65

Departamento de Automtica y Computacin

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 extrado 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 travs de las iteraciones. La siguiente tabla lo ilustra: Cadena inicial Iteracin Componente resultante Subcadena despus extrado componente /02/2005 /2005 Subcadena de despus el extraer separador (/) 02/2005 2005

de el

8/02/2005 02/2005 2005

0 1 2

8 02 2005

Como se puede apreciar por cada iteracin se obtiene un componente resultante, primero el da, despus el mes y por ltimo el ao. Si denotamos por c(i) al componente resultante se puede ver que despus de la iteracin 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 adems de una iteracin a otra almacenar la subcadena resultante despus de extraer el separador que ser la nueva cadena inicial con la cual trabajar en la prxima iteracin. Veamos pues como hacerlo. 1. Primero debemos de crear el lazo condicional while en nuestra aplicacin:

2. Debemos ahora definir la condicin de parada. Queremos que el lazo funcione mientras la iteracin no sea mayor que dos, por tanto, la condicin de ejecucin del while debe ser i<=2. La siguiente figura nos indica como quedara (el componente de comparacin aparece en Functions/Comparison/Less or Equal?):

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

66

Departamento de Automtica y Computacin

18/11/2006

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

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

5. Una vez introducido dicho componente se crea el primer shift register, que tendr la funcin de almacenar la subcadena resultante despus de cada iteracin. En la siguiente figura aparece representado. A la funcin de dividir (Split) cadenas se le asigna en cada iteracin la cadena inicial (ver tabla pgina 13) que est almacenada en el shift register (por ejemplo, si en la iteracin 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 iteracin esa cadena (ahora, despus de incrementada i es el resultado de la iteracin i-1) LabView la pasa o ubica en el shift register de la izquierda para que sea usada en la iteracin i).

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

67

Departamento de Automtica y Computacin

18/11/2006

Como ya mencionamos anteriormente, los shift register tienen que tener un valor inicial, para que sea el valor con el cual comienza a trabajar la iteracin 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 conexin que inicializa al shift register. 6. Una vez introducido este registro de desplazamiento hay que completar las entradas del modulo de divisin 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 carcter /.

Esta funcin tiene dos salidas, la primera es la subcadena encontrada antes del carcter 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 sern de utilidad, la que est delante del separador es el componente de la fecha que estamos separando (da, mes o ao) y la segunda la que hay que seguir separando. Que hacer con la primera? Hay que almacenarla pues de lo contrario en la prxima iteracin tendr otra componente resultante de la comparacin que cambiar la salida de la funcin Search/Split String. 7. Para ello debemos utilizar un nuevo shift register, en este caso, uno que tendr la funcin de los componentes resultantes. La siguiente figura indica la forma de insertarlo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

68

Departamento de Automtica y Computacin

18/11/2006

8. Que conectar al shift register que no aparece conectado en la figura anterior? Recuerde que ser el encargado de almacenar la cadena que en la prxima iteracin servir de inicio para buscar el nuevo componente de la fecha. Note adems que no se puede conectar directamente a la salida de la primera funcin (Search/Split Function) pues esa salida incluye todava el separador (ver tabla pg. 13) y hay que eliminarlo. Para ello se usa la funcin que se representa en la siguiente figura (Functions/String/String Subset)

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

69

Departamento de Automtica y Computacin

18/11/2006

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

10. Hasta aqu lo que est programado funciona bien pero no nos permite visualizar todos los resultados. El resultado se obtiene en el shift register que en la figura anterior no est conectado. Que componente se obtiene ah despus de concluida la ltima (i=3) iteracin? La respuesta es que se obtiene el valor del shift register asociado (el de la parte derecha a su mismo nivel) en la iteracin i-1. Cual es ese valor? Del ejemplo de la Tabla en la Pgina 13 podemos ver que es el ao. Note que al final de la ltima iteracin 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 ao obtenemos:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

70

Departamento de Automtica y Computacin

18/11/2006

11. Eso nos permite visualizar el ao. Pero y el mes? Si el ao fue el valor resultante en la iteracin i-1, es de suponer que el mes es el valor resultante en la iteracin i-2. Pero ese valor no lo tenemos almacenado. Hay que almacenarlo. Crear elementos del shift register para las iteraciones i-2, i-3, i-4,.... es fcil . 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 ao):

El resultado:

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

71

Departamento de Automtica y Computacin

18/11/2006

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

13. Antes de concluir debemos realizar una operacin ms. Hay 3 elementos en el registro de desplazamiento asociado con el ao, el mes y el da que no han sido inicializados. Que valor les corresponde? Aqu en realidad no tiene importancia el valor que le demos pues solo estn conectados (los elementos del shift register) y por lo tanto el valor que al concluir el while mostrarn sern los componentes de la cadena fecha. Sin embargo, es una prctica sana inicializarlos, y por eso se har, dndole un valor inicial de que indicar cadena vaca. La siguiente figura muestra como hacerlo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

72

Departamento de Automtica y Computacin

18/11/2006

La constante de cadena vaca se encuentra definida en la biblioteca de funciones de LabView Functions/String/Empty String constant. En la ventana o panel frontal nuestro diseo sera ms 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:

Despus de una ejecucin, y para esa cadena se obtiene:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

73

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 3: Realice un programa en LabView que permita grficar la funcin seno hasta que se oprima el botn parar. Desarrollo: Este ejercicio nos permitir conocer como trabajar con el Nodo Frmula. Que se nos pide? Graficar la funcin seno(x) hasta que se oprima un botn. Eso nos indica que debemos ubicar un lazo o bucle de repeticin condicional, o sea, un while. La condicin de parada del while la producir el clic sobre un botn. Dentro del while debemos de estar evaluando, para cada iteracin a la funcin seno(x). Que valor le damos a x? Podemos usar el mismo valor de la iteracin 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 despus calcular el seno. Este es un caso tpico en que un nodo frmula nos simplifica mucho el trabajo. Veamos la solucin. 1. Primero comenzamos creando el ciclo while y un botn (ya se sabe como hacerlo de clases anteriores):

En la figura anterior aparece nuevo el elemento negado, que conecta al botn con la condicin de ejecucin del while. En clases anteriores vimos que se poda tambin cambiar la condicin de ejecucin del while con clic en ella: aparece un circulo rojo. En versiones anteriores a la 6.0 no exista dicha posibilidad. 2. Despus de introducido el while se crea el nodo frmula segn se muestra en la siguiente figura:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

74

Departamento de Automtica y Computacin

18/11/2006

3. Una vez creado el nodo frmula tenemos que indicar cuales sern 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 frmula):

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

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

75

Departamento de Automtica y Computacin

18/11/2006

5. Ahora debemos editar dentro del nodo frmula 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 frmula. Dicho nodo es compatible con ANSI C. 6. La frmula 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 opcin Add Output. Una vez hecho esto se realiza la conexin entre el indicador de iteracin i y la variable de entrada nx. La siguiente figura muestra como debe quedarnos la aplicacin hasta este momento en la ventana de diagrama:

7. La salida, que se produce en cada iteracin, podemos conectarla a un componente para plotear grficos de la misma manera a como lo hicimos en el ejercicio 1:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

76

Departamento de Automtica y Computacin

18/11/2006

La salida y del nodo frmula se conecta al grfico:

La figura que se muestra a continuacin es el resultado de la ejecucin del programa:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

77

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

78

Departamento de Automtica y Computacin

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 programacin por nodos). Dominar la estructura de manejo de eventos.

Ejercicio 1: Elabore un programa en LabView que permita calcular la raz cuadrada a un nmero real. El programa debe analizar si valor introducido es menor que cero (situacin de error) e indicar al usuario por medio de un cuadro de mensaje la situacin. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Ahora debemos disear la interfaz de usuario de nuestra aplicacin. Para ello simplemente colocamos un control numrico digital que reciba por parte del usuario el valor al cual se le calcular la raz cuadrada. Adems, debemos colocar un indicador (tambin digital en este caso) para visualizar el resultado de la operacin. Esto queda de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

79

Departamento de Automtica y Computacin

18/11/2006

Ya estamos listos para programar en Cdigo G la lgica de nuestra aplicacin. Por lo tanto utilizando (Ctrl+E) vamos a la pantalla del diagrama en bloques, que luce de la siguiente forma:

La operacin de clculo de la raz cuadrada implica realizar una operacin de comprobacin antes de efectuarla, y esto depende del valor del nmero. Si este es positivo se puede hacer, sino debe indicarse un mensaje. Vase que existe una condicin mediante la cual se bifurca el flujo de programa. Para ello es necesario utilizar una estructura clsica del tipo IF-THEN-ELSE, que el caso de labVIEW se denomina Case Structure y se puede obtener segn se indica en las figuras siguientes:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

80

Departamento de Automtica y Computacin

18/11/2006

Esta estructura est representada por un marco y un titular rea donde se programa el cdigo asociado a la condicin de

que representa el

true: y el cdigo asociado a la condicin de false: . Note que usted puede conmutar entre uno y otro segn desee utilizando las flechas, y que los elementos de cdigo para uno u otro son diferentes.

Segn nuestra lgica, si el valor numrico es positivo, se realiza la operacin de raz, esto se consigue utilizando las funciones numricas como se muestra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

81

Departamento de Automtica y Computacin

18/11/2006

El cdigo complementario, cuando no se puede efectuar la operacin debido a que el nmero 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 segn se observa a continuacin:

Ahora solo nos resta realizar la comparacin y conectarla a la estructura case para determinar cual de las dos acciones posibles se realizar en tiempo de ejecucin. Para ello necesitamos comparar la variable correspondiente al control numrico relacionado con el valor a calcular. Sin embargo ya hemos utilizado el terminal asociado al mismo, por lo que debemos crear una variable local de ese control. Esto se hace dando clic derecho sobre la variable , seleccionando la opcin 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 opcin Change To Read:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

82

Departamento de Automtica y Computacin

18/11/2006

Para comparar el valor de la variable, se debe utilizar la funcin de comparacin Grater Or Equal To 0? que se encuentra en la paleta de funciones. El resultado de esta comparacin es True o False y sirve de condicin a la estructura Case por medio del selector decidir segn su estado booleano cual cdigo realizar. que

Ya se est en condiciones de correr la aplicacin, sin embargo usted se dar cuenta de que la ejecucin de la aplicacin no es buena. Cuando se introduce un valor negativo se ejecuta indefinidamente la opcin de mostrar el cuadro de dilogo por lo que se bloquea la aplicacin. Este problema se soluciona muy fcilmente introduciendo un botn de clculo, segn el cual se realizan las operaciones. Para ello se debe utilizar una estructura case ms externa gobernada por el botn de clculo.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

83

Departamento de Automtica y Computacin

18/11/2006

Para obtener los resultados esperados la accin mecnica (Mechanical Action) debe colocarse en uno de los siguientes estados: Latch when Pressed Latch when Released Latch until Released

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

84

Departamento de Automtica y Computacin

18/11/2006

Si no se utiliza este modo persisten los errores planteados al principio. Comprubelo y obtenga conclusiones!

Estudio Individual Realice una calculadora capaz de hacer las operaciones bsicas de suma, resta, multiplicacin y divisin entre dos nmeros reales. Utilice un control de tipo Menu Ring para indicar la operacin a realizar. Note que este elemento grfico est representado por una variable de tipo y que segn su valor debe realizarse una operacin de las cuatro mencionadas. Adems, debe utilizar dos controles para los operandos y un indicador para el resultado.

Ejercicio 2: Elabore un programa en LabView que permita animar un control de labVIEW. El control debe describir la figura geomtrica de un cuadrado con aristas de 100 pixels. Solucin:

Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

85

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos escoger un control que sirva de figura de animacin, 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 opcin Label dentro del submen Visible tems.

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 direccin vertical y la segunda para moverse en direccin 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 segn el caso. Para ello se debe utilizar la estructura For Loop segn se muestra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

86

Departamento de Automtica y Computacin

18/11/2006

Esta estructura ya fue estudiada y su principal conexin 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 segn las figuras siguientes: punto

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 opcin Property Node dentro de Create. Sin embargo usted debe verificar que esta accin crea por defecto propiedad Visible como se muestra en estas figuras:

Para obtener la propiedad Left se debe dar clic derecho sobre la propiedad por defecto y seleccionar la opcin Properties que define la propiedad deseada. En nuestro caso se obtiene como se muestra a continuacin.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

87

Departamento de Automtica y Computacin

18/11/2006

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.

Para realizar la operacin de incremento se utilizar la operacin matemtica de funciones numricas. El cdigo queda de la siguiente manera.

de la paleta

Ahora podemos ejecutar la aplicacin 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 cdigos que se ejecutaran paso a paso. Como el primero de ellos ya est programado nuestra secuencia incluir el cdigo ya programado para moverse verticalmente y hacia la derecha.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

88

Departamento de Automtica y Computacin

18/11/2006

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 opcin Add Frame After.

NO SE ALARME!! Su cdigo no ha desaparecido simplemente se ha superpuesto un nuevo marco para programar la secuencia siguiente. Usted puede volver al cdigo anterior , que muestra el marco de trabajo actual y la seleccionando las flechas del titular cantidad de marcos o secuencias programadas. El cdigo 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 continuacin:

El cdigo para este caso queda de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

89

Departamento de Automtica y Computacin

18/11/2006

Como se puede ver cada uno de los cuatro pasos es muy similar al anterior. Existe una forma fcil de reproducir el Cdigo G programado en una secuencia para otra. Para ello se hace clic derecho sobre ella, y se selecciona la opcin 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 continuacin se ven los pasos 3 y 4 necesarios para cumplir los objetivos del programa.

Si alguno de los marcos no coincide con su orden correcto de ejecucin usted debe seleccionar su marco correspondiente, luego dar clic derecho sobre su borde y ejecutar la opcin Make This frame y establecer el orden que requiera segn su lgica (Figura siguiente).

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

90

Departamento de Automtica y Computacin

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 ecuacin de una circunferencia es Y2 = (R2 - X2).

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 !! Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

El diseo de la aplicacin es muy sencillo toda vez que solo es necesario introducir otro control booleano: la interfaz queda como sigue:

Para manipular el evento asociado con el Botn OK es necesario introducir la estructura de eventos que se encuadra en la paleta de funciones en la pgina Structures. Una vez que se selecciona como muestran las figuras se extiende su marco dentro del marco del ciclo while general.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

91

Departamento de Automtica y Computacin

18/11/2006

Para introducir un manipulador de eventos se da clic derecho sobre uno de sus bordes y se selecciona la opcin Add Event Case. A continuacin se muestra una ventana de configuracin tal y como se ve en las figuras siguientes:

En la parte inferor izquierda se muestran todos los controles que contiene nuestra aplicacin, en este caso est el botn de salida stop y el botn Ok Button. Al seleccionarlo dando clic sobre l se muestran en la parte inferior derecha los posibles mtodos que usted puede manipular. En nuestro caso ser Mouse Down. Seleccione esta opcin dando clic sobre l y luego presione OK.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

92

Departamento de Automtica y Computacin

18/11/2006

Ahora usted puede notar que se aade un nuevo marco a la estructura de eventos con el lo que quiere decir que todo el cdigo que se titular: coloque en su interior ser ejecutado cuando ocurra el evento sealado en el mismo. En este caso Mouse Down sobre OK Button.

El cdigo que hay que introducir es muy simple. Los pasos son los siguientes: Tomar una funcin de dilogo Una constante de cadena

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

93

Departamento de Automtica y Computacin

18/11/2006

El cdigo final de la aplicacin es el siguiente:

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.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

94

Departamento de Automtica y Computacin

18/11/2006

TEMA VI Tipos de Datos Complejos. Arreglos y Clusters Definicin y Trabajo con Arreglos en LabView Definicin y Trabajo con Clusters

Ejercicio No.1 Declarar un arreglo de nmeros de una dimensin y colocar 10 elementos segn 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. Solucin: Primero, realicemos el diseo general de la pantalla frontal de la aplicacin. 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)

(a)

(c)

Observe que al colocar el arreglo en el panel frontal en la ventana de cdigo se crea un arreglo sin tipo. El primer paso despus 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:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

95

Departamento de Automtica y Computacin

18/11/2006

(a)

(c)

(d)

(b) En (d) se muestra lo que se refleja en la pantalla de diseo despus 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 para poder movernos entre los es necesario (note que existe el indicador de indice elementos del arreglo, siempre que se pueda debe ofrecrsele 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 botn izquierdo del mouse (sin liberarlo) y moverlo hacia abajo 9 posiciones ms. De esta manera obtendremos en el panel frontal algo similar a lo que se muestra en la siguiente figura:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

96

Departamento de Automtica y Computacin

18/11/2006

Note que como no se han definido valores en el arreglo, estos aparecen en gris. A medida que se vayan definiendo dichos valores la dimensin efectiva del arreglo ir cambiando, hasta completar los 10 elementos. Para terminar el diseo 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: Note que el indicador digital del promedio se ha editado para cambiar la etiqueta por defecto (numeric) y poner Promedio.

En la ventana de cdigo despus de estos pasos se han creado tres elementos, el arreglo, el indicador del tanque y el del promedio:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

97

Departamento de Automtica y Computacin

18/11/2006

Ahora, debemos de programar nuestra aplicacin. 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 estn sumados los elementos, ya fuera del ciclo, dividimos el resultado por 10. Para ir almacenando el resultado de la suma en cada iteracin 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:

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 iteracin 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: 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, comprubelo!.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

98

Departamento de Automtica y Computacin

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 observacin 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 continuacin:

Una de las funciones presentes en esta biblioteca o librera de funciones es la que dado un ndice me devuelve el valor del elemento. Dicha funcin es la segunda comenzando por la esquina superior izquierda:

La funcin 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 ms de un ndice devuelve un subarreglo con los valores de los elementos en esos subndices. 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:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

99

Departamento de Automtica y Computacin

18/11/2006

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 continuacin (note que los valores de los elementos del arreglo fueron 1,2,3,4,5,6,7,8,9,10):

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

100

Departamento de Automtica y Computacin

18/11/2006

La ltima parte del ejercicio es quizs la ms compleja a primera vista, aunque veremos que no es difcil su programacin. Qu queremos hacer? Simplemente intercambiar los valores de dos elementos de un arreglo. En cualquier otro lenguaje sera algo as como (se pone pseudocdigo, sin seguir una sintaxis particular): temp=array[2]; array[2]=array[7]; array[7]=temp; donde temp es una variable temporal que se usa para almacenar el valor del 3 elemento del arreglo antes de sobreescribir en l el nuevo valor. En el segmento de programa anterior es notable observar como no se puede hacer un paralelismo, o sea, la instruccin 2 no puede realizarse si no se ha realizado la primera pues de lo contrario perderamos para siempre el valor inicial que tiene el 3er elemento del arreglo (array[2]). Esto nos da una idea de que el segmento se debe ejecutar secuencialmente, una accin primero y otras despus. En LabView nosotros conocemos que podemos programar secuencias, pues hay una estructura de control de programa para realizarlas. Dicha estructura nos permite crear una variable local (llamada sequence local) que en este caso nos servira para almacenar el valor inicial del 3er elemento y enviarlo a la siguiente secuencia para su uso (3era instruccin del pseudocdigo anterior). Por otra parte, ya conocemos como leer el valor de un elemento del arreglo, pero no sabemos como escribir un nuevo elemento. Para escribir un nuevo elemento del arreglo se utiliza otra funcin de la librera, que tambin se encuentra en functions/Array: Esta funcin recibe como parmetros de entrada el arreglo de dimensin n y el ndice(s) del (los) elementos a reemplazar, as como el elemento o

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

101

Departamento de Automtica y Computacin

18/11/2006

subarreglo que reemplaza al original. Como salida devuelve el nuevo arreglo. Ya estamos listos para concluir el ejercicio. La siguientes figuras explican la manera de solucionarlo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

102

Departamento de Automtica y Computacin

18/11/2006

Con este primer paso se ha ejecutado la primera instruccin del pseudocdigo comentado anteriormente. Para la instruccin 2 se programa en el segundo cuadro de la secuencia:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

103

Departamento de Automtica y Computacin

18/11/2006

y para la tercera, se utiliza el valor local que viene del primer frame o cuadro de la secuencia, de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

104

Departamento de Automtica y Computacin

18/11/2006

Finalmente, hay que actualizar el valor del arreglo. Esto es muy importante puesto que si no se realiza los cambios no se hacen efectivos, o sea, al control Array declarado, hay que actualizarlo. Para esto, debemos escribir en un control utilizando LabView. En realidad la manera de hacerlo es sencilla. Debemos crear una referencia a dicha variable, o sea, una variable local copia de la misma para entonces poder actualizar mediante una escritura en esa copia de la variable local. Para esto, seleccionamos el arreglo y damos clic derecho, seleccionando la opcin Create/Local variable:

LabView crea entonces una variable local: Arrastramos dicha variable hacia donde se encuentra programada la secuencia y la conectamos de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

105

Departamento de Automtica y Computacin

18/11/2006

Esto concluye nuestra aplicacin. A continuacin se muestran dos pantallas, una antes de la simulacin y otra despus. Note como los elementos 3ero y 8vo han intercambiado sus valores:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

106

Departamento de Automtica y Computacin

18/11/2006

Ejercicio No.2: Se desean generar tres arreglos de 10 elementos con las siguientes caractersticas: El Primero contendr 10 nmeros aleatorios El segundo el cuadrado de cada elemento aleatorio generado. El tercero la raz de cada elemento aleatorio generado. Tambin se desea ordenar cada uno de los arreglos de menor a mayor. Solucin: Este ejercicio nos mostrar como ordenar arreglos. La primera parte puede hacerse con lo que sabemos de guas anteriores y con lo que aprendimos del primer ejercicio de esta gua. Primero crearemos los 3 arreglos, que en este caso los dispondremos en una fila en lugar de la columna creada en el primer ejercicio. Las siguientes figuras muestran el panel frontal y la ventana de cdigo: Sugerencia: Para copiar objetos parecidos o iguales ms de una vez, seleccione el objeto a copiar con el clic izquierdo del mouse presionado y la tecla Ctrl y arrastre el mouse. Observar como se crea un nuevo objeto copia del primero

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

107

Departamento de Automtica y Computacin

18/11/2006

Hasta este momento no se ha introducido nada que no conozcamos. Hay un ciclo for que se ejecuta 10 veces, generando 10 nmeros aleatorios. Cada nmero aleatorio se escala (el generador de nmeros aleatorios lo genera en el rango de 0 a 1) hasta 100 y despus en cada iteracin se calcula el cuadrado y la raz valor del nmero escalado. Dichas funciones se

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

108

Departamento de Automtica y Computacin

18/11/2006

encuentran en la misma biblioteca que el generador de nmeros aleatorios, o sea, en Functions/Numeric. A la salida del for tendremos un arreglo de 10 elementos. En este caso, tambin est habilitado el indexado del arreglo, lo que quiere decir que en la salida del for tendr los 10 elementos generados, pues LabView para cada iteracin va creando el elemento [i]. Si se inhabilita el indexado solamente se recibir a la salida del ciclo for el ltimo elemento, o sea, [n]. En nuestro caso queremos trabajar con el arreglo completo, por lo que la opcin de indexado que por default implementa LabView se mantiene. Hasta aqu la primera parte del ejercicio. Si tal como est conectramos los arreglos de indicadores Nmero, Cuadrado y Raz, observaramos en la pantalla frontal que una vez concluido el ciclo for los arreglos se actualizan, pero no ordenados. Para ordenarlos debemos introducir una funcin de la biblioteca de LabView para arreglos, llamada Sort 1D Array: Esta funcin espera un arreglo como entrada y devuelve el mismo arreglo ordenado.

Para concluir el ejercicio basta interponer entre la salida del ciclo y los arreglos de indicadores dicha funcin:

Finalmente mostramos la ejecucin del programa elaborado. Note que estn ordenados.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

109

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 3: Se desea declarar un arreglo de 5 elementos, donde cada elemento sea un Cluster con los datos de una persona (Nombre, Edad, sexo) y mostrar en pantalla: 1. Cul es la menor edad entre todos 2. Cul es el la cantidad de caracteres del nombre ms largo. 3. Cuantas mujeres hay. Solucin: Este ejercicio conviene analizarlo primeramente. Debemos crear una estructura que contenga 3 tipos de datos diferentes, un dato de tipo cadena para almacenar el nombre de la persona, otro de tipo numrico para su edad, y un tercero, que podramos considerar booleano (dos posibles valores) para especificar su sexo. Despus de creada la estructura debemos crear un arreglo para almacenar 5 variables de ese tipo de dato (estructura), y despus hacer el resto de los anlisis que se nos pide. Note que los anlisis se basan en la misma estructura y se pueden hacer de forma independiente, o sea, ninguno necesita el precedente del otro. Sin embargo, al final de este ejercicio se orientar como tarea elaborar una solucin utilizando una estructura de tipo sequence que quiz das mayor elegancia al cdigo. Veamos la solucin sin utilizar este tipo de estructura. Para crear la estructura se procede de forma similar a como se hace para los arreglos. En este caso debemos crear un Cluster, que es la estructura que tiene LabView para empaquetar datos de diferentes tipos. Para crear un cluster en el panel frontal, seleccionamos:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

110

Departamento de Automtica y Computacin

18/11/2006

Una vez que el cluster est creado debemos indicar que tipos de datos contendr. Esto se realiza de la misma forma que con los arreglos, o sea, creando los controles primero y arrastrndolos despus dentro del cluster. Una vez que esto se realiza en el panel frontal debemos tener:

Ahora debemos crear el arreglo de clusters. Para ello creamos un arreglo y arrastramos el cluster para dentro del arreglo, asignndole con ello un tipo a dicho arreglo.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

111

Departamento de Automtica y Computacin

18/11/2006

No es necesario expandir el arreglo para ver los 5 elementos. Con el indicador de ndice que se observa a la izquierda, en la esquina superior, podemos movernos dentro del arreglo para completar los datos de cada cluster. Para realizar la primera parte del ejercicio debemos de ser capaces de recorrer el arreglo de clusters extrayendo para cada elemento de dicho arreglo el campo edad, e ir comparando esa edad con el mnimo acumulado. Para recorrer el arreglo usaremos un ciclo for como ya es habitual, y para calcular el mnimo usaremos una funcin llamada Max & Min ya vista anteriormente (Functions/Comparison/Max & Min). Para almacenar el mnimo acumulado se usar, tambin como en anteriores ocasiones, un shift register, que al iniciarse el ciclo debe tener un valor lo suficientemente alto como para garantizar que el primer mnimo que se escoja sea el de la edad almacenada en el primer cluster del arreglo. Como extraer un campo de la estructura cluster? Para ello se utiliza una funcin llamada Unbundle que se encuentra en la biblioteca que tiene LabView para operaciones con estruturas tipo cluster (Functions/Cluster/Unbundle): Esta funcin recibe como entrada un cluster y devuelve a la salida los elementos que lo conforman.

La primera parte del ejercicio queda entonces resuelta de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

112

Departamento de Automtica y Computacin

18/11/2006

Se entraron 5 valores de datos diferentes para completar cada cluster, que fueron: [Juan, 15, M], [Magdalena, 20, F], [Pedro, 11, M], [Julia, 52, F] y [Ernesto, 40, M]. Note que en el ejercicio anterior no se le dio valor a N dentro del ciclo. En caso de que esto ocurra LabView realizar el ciclo hasta que revise todos los valores del arreglo, o sea, hasta que encuentre el ltimo ndice para el cual se introdujeron datos. La siguiente pantalla muestra el resultado para la menor edad (11 aos):

La segunda parte del ejercicio consiste en indicar la cantidad de caracteres del nombre ms largo. Sin pensar en LabView podemos imaginar que la solucin a este caso pasa por calcular la longitud de la cadena de nombre de cada cluster del arreglo y determinar entonces cual es la mayor longitud: dicha longitud corresponder con el nombre ms largo. Para determinar la longitud de una cadena de caracteres (nombre), utilizamos la funcin String Length (Functions/String/String Length) que tiene LabView en la biblioteca asociada a trabajo con cadenas: Esta funcin recibe como parmetro una cadena y devuelve como salida su longitud.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

113

Departamento de Automtica y Computacin

18/11/2006

El resto de la solucin es muy parecida a la del primer inciso. Utilizando lo ya realizado en el primero, solamente debemos incorporar a nuestro ciclo for un nuevo shift register para almacenar el valor mximo que se va calculando a medida que se analiza cada elemento del arreglo, y utilizar nuevamente la funcin Max & Min en este caso, tomando el mximo. La siguiente figura muestra el cdigo del ejercicio hasta este momento:

Utilizando el mismo juego de valores se obtienen los siguientes resultados cuando se ejecuta el programa (Longitud nombre ms largo 9, corresponde con Magdalena):

La ultima parte del ejercicio implica el tratamiento de una variable booleana. Debemos contar la cantidad de mujeres. La idea general, sin embargo, es la misma: recorrer el

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

114

Departamento de Automtica y Computacin

18/11/2006

arreglo y analizar un campo particular de cada elemento de este arreglo, o sea, el campo Sexo de cada cluster. Contar variables booleanas es muy sencillo. Podemos utilizar una sentencia if then else y en dependencia del valor incrementar o no un contador. En pseudocdigo sera: If (true) c++; En LabView cuando introducimos botones booleanos (del tipo PushButton) tienen por defecto el valor de false. En este ejercicio hemos usado un botn de tipo desplazamiento, que inicialmente est en la posicin de la izquierda, que hemos indicado con el sexo masculino, por lo que para nosotros el masculino representar el valor false del botn. Para contar la cantidad de mujeres entonces debemos recorrer el arreglo contando los botones cuyo estado es true. El cdigo para implementar la sentencia if quedara:

El cdigo final se muestra en la siguiente figura:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

115

Departamento de Automtica y Computacin

18/11/2006

que para el juego de datos introducido y ya mencionado da como resultado (2 mujeres, Magdalena y Julia):

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

116

Departamento de Automtica y Computacin

18/11/2006

TEMA VII Controles Forma de Onda. Implementacin de Funciones en LabVIEW Ejercicio 1: Generar tres arreglos de 100 elementos con las siguientes caractersticas El Primero contendr 100 nmeros aleatorios El segundo el cuadrado de cada elemento aleatorio generado. El tercero la raz de cada elemento aleatorio generado. a) Ordenar cada uno de los arreglos de menor a mayor. b) Mostrar en una grfica WaveformChart los nmeros que se estn genrando. c) Mostrar en una grfica WaveformGraph los nmeros generados d) Mostrar en una grfica GraphXY los nmeros generados de forma que se exprese Numero Aleatorio vs Raz y Numero Aleatorio vs Cuadrado Solucin: La primera parte de este ejercicio ya se realiz en el Laboratorio anterior solamente vamos a aadir la capacidad de mostrar grficamente los resultados. La solucin de la cual partimos es la siguiente: Aprender a utilizar los controles de tipo Forma de Onda Aprender a realizar funciones (SubVI) en LabVIEW.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

117

Departamento de Automtica y Computacin

18/11/2006

Para que se ejecute de una mejor forma este ejercicio colocaremos un botn de clculo con accin mecnica Latch When Pressed que decida cuando realizar los clculos. El cdigo es el siguiente:

Para resolver el inciso a) debemos colocar en el panel frontal una grfica del tipo WaveFormChart. Esto se hace de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

118

Departamento de Automtica y Computacin

18/11/2006

Cualquier valor asociado con la grfica: Por ejemplo la etiqueta Waveform Chart o el valor nmero e pueden modificar utilizando el cursor escala en X o la Y. El cdigo ahora muestra una variable de tipo DBL. , tambin se puede modificar tanto la

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

119

Departamento de Automtica y Computacin

18/11/2006

El control WaveformChart adicionar un punto a la grfica con cada iteracin del ciclo For. Ahora conectaremos la salida de la funcin aleatoria a la grfica. El cdigo es el siguiente:

Si corremos la aplicacin: el resultdo grfico puede ser el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

120

Departamento de Automtica y Computacin

18/11/2006

Como se observa es casi imposible ver el resultado grfico debido a la escala. Hemos generado 10 nmeros entre 0 y 1 y la escala X es de 0-100, mientras la Y es de -10-10. Para o dando clic derecho sobre la ajustar la escala podemos hacerlo directamente con el cursor grfica y seleccionando AutoScale X y AutoScale Y dentro de X Scale y Y Scale respectivamente.

Ahora el resultado es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

121

Departamento de Automtica y Computacin

18/11/2006

Sin embargo sera bueno que esta misma grfica pudiera tambin trazar las curvas de la Raz y el Cuadrado. Para Aadir estas curvas es necesario que se introduzca a la misma un cluster donde cada uno de los elementos componentes sea un tipo de datos nmerico simples (SGL, DBL, U16 ). Para construir el cluster utilizaremos la funcin Bundle dentro de las funciones de tipo Cluster en la Paleta de funciones. Al seleccionarla se muestra un elemento como este: .

Al conectarle dos entradas por ejemplo el nmero su raz obtenemos el siguiente resultado de cdigo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

122

Departamento de Automtica y Computacin

18/11/2006

Tambin podemos aadir una tercera variable: Cuadrado. Para ello debe expandir las entradas a la funcin Bundle utilizando el cursor arrastra hasta obtener la entradas requeridas (3). , situndolo en la parte centro-inferior y se

Ahora puede Ejecutar la Aplicacin.

Existen varias formas y colores para representar las grficas para ello hay que utilizar el cursor , situarse en sus bordes y expandir el elemento derecha de la grfica. El resultado es el siguiente: en la parte superior

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

123

Departamento de Automtica y Computacin

18/11/2006

colocamos los nombres representativos de cada curva y si damos clic Utilizando el cursor derecho sobre uno de las curvas y seleccionamos la opcin Common Plots podemos seleccionar entre seis variantes. Una de ellas es la que se muestra a continuacin:

Tambin puede seleccionar otras opciones como el Color. Comprubelas!

Para realizar el inciso b) debemos colocar una grfica del tipo WaveformGraph que se encuentra:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

124

Departamento de Automtica y Computacin

18/11/2006

El cdigo que genera por defecto es un tipo de datos : Array conectamos el arreglo ordenado nmero de la siguiente manera:

. Si ahora

Y despus de realizar los ajustes de escala de la misma forma que se hizo con el tipo de grfica anterior obtenemos el siguiente resultado:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

125

Departamento de Automtica y Computacin

18/11/2006

La grfica coloca los diez puntos ordenados que estn contenidos en el arreglo de manera que estos comienzan en 0 con un paso de una unidad. A esto se le denomina X0 y dX. Esto puede ser modificado si en vez de conectar directamente el arreglo a la grfica utilizamos un cluster que posea X0(valor de inicio), dX(Paso), Arreglo de valores. Colocar la conocida funcin Bundle con tres entradas: de la siguiente manera:

Note que esta grfica acepta un tipo de datos complejo de tipo cluster donde el primer elemento ser el valor a partir del cual colocar los valores del arreglo. El segundo elemento ser con que intervalo los colocar y el tercero es el arreglo de los valores. El resultado es el que sigue:

Esta grfica tambin puede trazar ms de una curva. Para ello debe recibir un arreglo de clusters como el anterior. Por ejemplo podemos trazar tambin el valor de la raz esto se realiza utilizando la funcin Build Array

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

126

Departamento de Automtica y Computacin

18/11/2006

situndolo en la parte centro-inferior y se Para expandir sus entradas utilizamos el cursor arrastra. . Ahora conectamos los clusters y el resultado a la grfica:

El resultado es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

127

Departamento de Automtica y Computacin

18/11/2006

Observaciones: Este tipo de grficos es muy til cuando el eje X est vinculado con el tiempo de adquisicin de muestras. Por ejemplo: X0: ser el tiempo de inicio, dX: el intervalo de tiempo entre muestras y el Array: las muestras obtenidas. Para realizar el inciso c) debemos colocar una grfica del tipo GraphXY esto se realiza:

el cluster que recibe est compuesto por dos Esta grfica es de tipo de datos Cluster arreglos uno para el eje de las X y otro para las Y. Luego se trazan los puntos tomando (X,Y) los puntos segn su ndice dentro de los arreglos. En este ejemplo trazaremos la curva nmero vs raz y las curvas numero vs cuadrado. Ya tenemos generados los arreglos correspondientes solo resta construir el cluster. Para ello utiulizamos la conocida funcin Bundle con dos entradas de la siguiente manera:

El resultado es el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

128

Departamento de Automtica y Computacin

18/11/2006

Al trazar los puntos ordenadamente se tiene que el resultado es muy parecido a la funcin Y = Raiz(X). Para aadir ms trazos se tiene que introducir un arreglo con tantos clusters como trazos se quiere. Esto se hace de manera similar al caso anterior. Si adicionamos la funcin Y=Cuadrado(X) el cdigo queda:

Y el resultado:

Ejercicio 2 (crear una funcin)

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

129

Departamento de Automtica y Computacin

18/11/2006

Si analizamos el ejemplo 2 discutido en el laboratorio pasado podemos pensar que sera bueno tener una funcin que dada una cantidad N nos devolviera tres arreglos. El primero con N elementos aleatorios. El segundo con la Raz de cada uno de los N elementos y el tercero con el cuadrado de cada uno de los N elementos. Para ello partimos del siguiente cdigo:

Cuya interfaz grfica es:

Nuestra funcin no es un programa por lo que eliminaremos el ciclo principal y su botn de terminar:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

130

Departamento de Automtica y Computacin

18/11/2006

Para introducir la cantidad de elementos de los arreglos que debemos generar debemos sustituir la constante que define las iteraciones del ciclo for por un control que lo determine, luego queda:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

131

Departamento de Automtica y Computacin

18/11/2006

Cuando se construye una funcin en Labview el panel frontal representa el prototipo de la funcin. Donde los controles hacen funcin de parmetros de entrada y los indicadores de parmetros de salida. En nuestro caso: Cantidad : parmetro de entrada Cuadrado : parmetro de salida Numero : parmetro de salida Raiz : parmetro de salida LabVIEW es un lenguaje grfico, de ah que nuestra funcin deba tener una representacin grfica definida por nosotros: Para ello se da doble clic en el icono de la parte superior derecha:

Entonces aparece un editor de iconos:

La interfaz es muy parecida al Paint de Windows. Aqu dibujamos nuestro icono y presionamos OK.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

132

Departamento de Automtica y Computacin

18/11/2006

Ahora solo nos resta definir los parmtros. Para ello damos clic derecho en el icono de la parte superior derecha y se selecciona la opcin Show Connector

que indica que tenemos un control y tres Entonces se muestra el siguiente icono indicadores en nuestro panel frontal (prototipo). Si quisiramos adicionar nuevos parmetros se selecciona la opcin Patterns:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

133

Departamento de Automtica y Computacin

18/11/2006

Solo nos resta vincular cada control e indicador con su correspondiente rea en el icono. Esto se realiza nicamente en el Panel de control y seleccionando el cursor . Usted debe marcar

y luego seleccionar el control que servir el rea del conector que va vincular con el cursor de parmetro al hacerlo el rea antes de color blanco tomar el color del tipo de datos de variable asociada (naranja-azul-rosada-verde) Al seleccionar la base el panel frontal se ve as:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

134

Departamento de Automtica y Computacin

18/11/2006

Luego conecta el indicador cuadrado:

Al conectar el Indicador Numero:

Al conectar el Indicador Raz: Guarde el cdigo programado como: Funcion.vi. Ya tenemos la funcin!!!

Ejercicio 3 Para utilizar la funcin programada en el ejemplo anterior, haremos un ejercicio que muestre una tabla donde la primera columna tenga el valor del cuadrado del nmero, la segunda columna tenga el valor del nmero y la tercera columna tenga el valor de la raz del nmero. El cdigo inicial contendr un ciclo principal y un botn de calculo asociado a una estructura case:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

135

Departamento de Automtica y Computacin

18/11/2006

Ahora aadiremos una tabla al panel frontal:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

136

Departamento de Automtica y Computacin

18/11/2006

Para aadirle encabezado a las columnas se da clic derecho sobre la tabla y se selecciona la opcin Column Headers dentro de Visible Items luego se escribe dentro del encabezado utilizando el cursor :

Para introducir nuestra funcin dentro del cdigo del programa se debe utilizar el icono de la extrema izquierda de la paleta de funciones:

Este abre un cuadro de dialogo para abrir un SubVI, usted busca Funcion.vi y lo abre. El cdigo queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

137

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos colocar los parmetros de entrada. En esta caso la cantidad de nmeros generados. Esto lo podemos hacer mediante una constante o un control. Lo haremos con una constante igual a 15:

Como se observa el control de tipo tabla est representado por una matriz de tipos de datos de cadena. Esta matriz debe ser cuadrada donde: Los elementos X0,j de la matriz representan la fila 0 Los elementos X1,j de la matriz representan la fila 1 Los elementos Xi,0 de la matriz representan la columna 0. Los elementos Xi,1 de la matriz representan la columna 1. Para lograr nuestro objetivo debemos convertir nuestros arreglos en una matriz. Para ello se debe utilizar la funcin Build Array

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

138

Departamento de Automtica y Computacin

18/11/2006

Para expandir sus entradas utilizamos el cursor arrastra. . Ahora conectamos los arreglos:

situndolo en la parte centro-inferior y se

es una matriz numrica por La matriz obtenida despus de utilizar la funcin Build Array lo que debemos convertirla a cadena para ello se utiliza la funcin Number To Fraccional String dentro de las funciones de cadena:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

139

Departamento de Automtica y Computacin

18/11/2006

El cdigo es el siguiente:

Si ahora conectramos la salida de esta funcin a la tabla y ejecutramos la aplicacin podramos comprobar que las filas estn invertidas con las columnas. Para solucionar esto utilizaremos la funcin Transpose 2D Array de la paleta de funciones de Array que invierte la filas con las columnas:

El cdigo final es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

140

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

141

Departamento de Automtica y Computacin

18/11/2006

TEMA VIII Trabajo con ficheros Conocer los controles para el trabajo con ficheros. Conocer las funciones para el trabajo con ficheros.

Realice un programa que permita almacenar y leer los caracteres almacenados en un control tipo cadena del tipo Memo. Solucin: Para la solucin de este ejercicio debemos conocer dos funciones para trabajo con ficheros que respectivamente, leen y almacenan informacin en forma de caracteres ASCII desde/hacia un fichero. Estas funciones, contenidas en Functions/File I/O son:

La primera de ellas se utiliza para escribir caracteres a un fichero que se indica en el camino (file path). Si no se indica ningn camino entonces aparece una caja de dilogo de tipo Salvar Como (Save As...) que permite que el usuario especifique un nombre de fichero. En caso de que se especifique un fichero, entonces se debe especificar si se quiere agregar los datos indicados en la cadena de caracteres (character string) mediante una constante o control booleano en true o reemplazar los datos del fichero existente (constante o control booleano en false). Por ltimo, si se especifica tambin mediante condicin booleana (valor true) en la entrada convert eol? LabView convierte todos los caracteres de fin de linea que encuentre en la cadena a escribir en caracteres de fin de lnea de LabView. Puede consultar la ayuda para conocer ms sobre las diferencias entre el fin de lnea de LabView y el del Sistema Operativo (Windows, Macintosh y Unix). Esta funcin tiene como salida el nuevo camino donde el fichero fue escrito. La segunda tiene entradas similares en cuanto al camino y a la interpretacin del fin de lnea, ahora en lectura, y adems presenta dos entradas que indican la cantidad de caracteres a leer y el desplazamiento u offset dentro del fichero a partir del cual comienza la lectura. Si no se especifica camino tambin se abre una caja de dilogo del tipo Open. Esta segunda funcin tiene 4 salidas, la primera igual a la de la primera funcin revisada, la segunda conteniendo la cadena de caracteres ledos, la tercera (mark after read) indica la posicin del puntero del fichero despus de la lectura realizada (el puntero apuntando a la primera posicin no leda) y por ltimo, EOF? si se produce un intento de lectura despus del final del fichero. Conociendo estas dos funciones el ejercicio tiene una solucin directa. En la solucin incluimos dos botones booleanos que indicarn cuando realizar la lectura o escritura de los datos contenidos en el control tipo cadena desde o hacia el fichero. En este caso no asumiremos nombre especifico para el fichero.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

142

Departamento de Automtica y Computacin

18/11/2006

Lo primero que debemos realizar en el programa es el lazo de ejecucin principal, que como ya hemos visto en otras ocasiones se muestra sin comentarios adicionales:

Se ha incluido un fragmento de la pantalla frontal para hacer notar que el caption o etiqueta original que presenta el botn (stop) se ha cambiado por la etiqueta Salir. Hay dos formas de hacerlo, la primera, es creando un property node en modo escritura, y asignndole a la propiedad Boolean Text una constante con el nuevo nombre que se le quiera dar a la etiqueta del botn y una segunda forma ms sencilla que se muestra a continuacin: Se selecciona el botn en el panel frontal, y se da clic derecho. En el men que se visualiza con lo cual la etiqueta del botn queda libre y selecciona la opcin puede cambiarse el texto original (Stop) por el nuevo deseado. Despus, se debe volver a integrar el texto al botn seleccionndolo y en el men que aparece al dar clic derecho . seleccionar la opcin Agreguemos ahora los botones asociados con las opciones de cargar y salvar que debemos implementar en el ejercicio as como el control de tipo cadena. Debemos indicar como accin mecnica Latch when Released (opcin por defecto para los botones tipo OK) Tras agregar los botones y editar el texto de la etiqueta debemos tener en el panel frontal:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

143

Departamento de Automtica y Computacin

18/11/2006

Para agregar el control tipo cadena se inserta primero un string control:

(Functions/String & Path) y despus con el cursor se selecciona al objeto y desde la esquina inferior derecha se estira o redimensiona el mismo hasta el tamao deseado, para lograr un espacio de edicin lo suficientemente grande. La siguiente figura muestra como debe quedar:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

144

Departamento de Automtica y Computacin

18/11/2006

Corresponde ahora programar las acciones de los botones Salvar y Cargar. Comencemos por el botn Salvar. Note que es un control de tipo booleano, por lo tanto, debemos indicar que acciones realizar cuando est en true y que acciones realizar cuando est en false. En este caso, los botones solo toman valor de true durante un perodo cuando se da clic sobre ellos. Es en este caso que se debe salvar o cargar el fichero. En su condicin normal (false) no se hace nada. El cdigo quedara de la siguiente forma:

Note que al no especificarse camino alguno, se abrir una caja de dilogo al salvar el fichero. Para el caso de cargar debemos tener en cuenta que el rea de edicin de texto es el mismo tipo de control string utilizado para copiar su contenido en un fichero y por tanto, al ser un control, no acepta escritura directa. Sin embargo hay una forma de copiar en dicho control, y es creando una variable local que lo represente: al copiar en esa variable local de hecho se escribe en el control cambiando su contenido. Las siguientes figuras muestran los pasos para crear la variable as como el cdigo que se programa para el botn Cargar:

La solucin completa del ejercicio sera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

145

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 2: Almacene en un fichero el resultado del clculo de la raz y el cuadrado de 100 nmeros generados aleatoriamente. El fichero debe ser tipo sabana (spreadsheet) y se debe adems brindar la opcin de cargar el fichero y visualizar su contenido. Puede hacer uso de la funcin creada en la Gua 6 de esta serie que calculaba la raz y el cuadrado de un conjunto de nmeros aleatorios cuya cantidad reciba como parmetro de entrada. Solucin: La primera parte del ejercicio es similar a lo que hicimos en el primer ejercicio de esta gua. Un lazo While y dos botones adicionales, uno para Cargar los nmeros desde un fichero y graficarlos y otro para generar y Salvar los datos en un fichero. Las funciones de trabajo con fichero que se introducen en este ejercicio se presentan a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

146

Departamento de Automtica y Computacin

18/11/2006

No se comentarn todos los campos puesto que se puede profundizar en ello haciendo uso de la ayuda, sin embargo, comentaremos algunos nuevos que aparecen aqu con relacin y que no estaban presentes en las funciones del primer ejercicio. Los que se repiten aqu tienen la misma funcin que los comentados ya en el primer ejercicio. El formato aparece en estas funciones por primera vez. La especificacin de formato es muy parecida a la que presenta el lenguaje C/C++. El % indica inicio de un especificador de formato, el punto decimal es un delimitador y el nmero que a continuacin aparece es el nmero de lugares decimales con que quiere imprimirse el nmero. El tipo de dato se refleja en el 4to carcter. Por defecto se asume %.3f que significa nmeros en formato de punto flotante (f) y con precisin de tres lugares despus del punto (.3). En la entrada transpose de tipo booleano se debe poner true si se quiere trasponer el arreglo de nmeros que se va a salvar a disco (o leer de l). El campo delimiter es tambin muy importante pues es la manera de indicarle a LabView el carcter o cadena que debe agregar (caso de escritura en fichero) entre nmero y nmero. En la operacin de lectura es el que dicta lo que separa o delimita los nmeros almacenados en el fichero que se quiere leer. Note adems que ambas funciones pueden aceptar arreglos de una o dos dimensiones. Analizadas las funciones solo nos queda realizar el ejercicio. Como ya se mencion, la primera parte, o sea, la colocacin de los botones es sencilla y se hace sin comentarios adicionales:

Comencemos programando la opcin de Generar y Salvar. Para ello recordamos que la funcin programada en la gua anterior devuelve el cuadrado (C), el nmero (N) y la raz. El parmetro de entrada permite indicar la cantidad de nmeros aleatorios a generarse. La solucin que ofrecemos aqu salva los datos despus que son generados en el camino y con nombre especificados por el usuario ya que no se especifica camino y LabView abre la ventana de dilogo para que se escoja:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

147

Departamento de Automtica y Computacin

18/11/2006

Note que como la funcin devuelve elementos (cuadrado, nmero aleatorio, raz) hay que construir el arreglo, que despus recibe la funcin Write To SpreadSheet File. Como no se especifica separador ninguno LabView asume que es el Tab, o sea, espacio en blanco entre cada dato del arreglo. Puede cargar el fichero que se genera con el Block de Notas de Windows (observar que los datos se distribuyen por filas) o con el Excel (lo cargar en filas independientes); comprubelo!. Como estudio independiente se recomienda salvar los datos de forma ordenada, y con el carcter ; como separador. Note que se visualiza por filas, si se quiere por columnas debe en el campo Transpose de la funcin Write To SpreadSheet File indicar que se transponga asignndole un valor verdadero a dicha entrada. Para concluir el ejercicio debemos implementar la funcin de cargar y graficar. La solucin que ofrecemos aqu carga los datos del camino y con el nombre especificados por el usuario ya que no se especifica camino y LabView abre la ventana de dilogo para que se escoja. Posteriormente los datos son graficados. Debe insertar en la pantalla frontal un grfico del tipo XY Graph:

Conviene hacer varios comentarios en este momento. Primero, note que los datos se salvaron en el fichero como un arreglo de 2 dimensiones (una matriz) y que por tanto no pueden plotearse directamente en un grfico de tipo XY Graph. Hay que realizar algunas operaciones antes de que estemos listos para grficar. 1. Lo primero que se debe realizar es agrupar los datos convenientemente, ya que se quiere graficar en una misma pantalla los valores de los cuadrados de los nmeros aleatorios (cuadrado vs nmero) y los valores de las races de los nmeros aleatorios (raz vs nmero). Debemos por tanto, separar o descomponer la matriz en arreglos apropiados. Para esto se toma el arreglo bidimensional que entrega a su salida la funcin Read from SpreadSheet File y se descompone en los 3 arreglos que conforman la matriz (cada uno en una fila, la primera con los cuadrados, la segunda con los nmeros y la tercera con las races). Para esto se utiliza la funcin Index Array ya vista en guas anteriores. 2. Una vez que los arreglos estn independientes (salidas de las funciones Index Array) se debe entonces agruparlos convenientemente. Para ello se utiliza la funcin Bundle (tambin vista en guas anteriores) que crea dos clusters, el primero con los arreglos {nmero, cuadrado} y el segundo con los arreglos {nmero, raz}. 3. Una vez que los clusters estn creados debe construirse un nuevo arreglo, esta vez, siendo cada elemento del arreglo los pares {nmero, cuadrado} y {nmero, raz} que se plotearn cada uno en un grfico independiente. La salida que se produce se ilustra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

148

Departamento de Automtica y Computacin

18/11/2006

Observe la gran densidad de lneas en cada uno de los grficos. Esto se produce porque los arreglos se han ploteado tal y como se han ledo del fichero, que a su vez se creo sin ordenar los elementos del arreglo. Podemos eliminar las lneas y plotear solamente los puntos si en la pantalla frontal seleccionamos la opcin

Common Plots y dentro de esta la de puntos solamente (en la figura anterior enmarcada en un rectngulo azul) para cada grfico. En ese caso la salida se ver:

que de esta forma indica mucho mejor las curvas caractersticas de la raz(x) y de x2. Las pantallas de cdigo y frontal para este ejercicio finalmente quedan:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

149

Departamento de Automtica y Computacin

18/11/2006

Como estudio independiente se recomienda comprobar el efecto que tiene el ordenar los arreglos a la hora de salvarlos o antes de graficarlos. La densidad de lneas que apareca inicialmente en la pantalla frontal para el caso de que no estn ordenados desaparece y se observa una grfica muy parecida a:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

150

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 3: Realice un programa que permita almacenar y cargar en y desde un fichero la siguiente tabla:

Temperatura Habitacin Consumo Elctrico : : Solucin:

24 1000 : :

F V : :

Las variables sern del tipo cadena de caracteres, valor son nmeros de punto flotante y la Alarma indica si el valor especfico de esa variable constituye una alarma (true) o no (false). La realizacin de este ejercicio debe hacerse mediante el uso de las funciones generales de trabajo con ficheros, dado que los tipos de datos que se quieren incluir en el fichero son de diverso tipo. Comentemos primeramente de forma ms o menos detallada algunas de las funciones que se usarn en este ejercicio por primera vez. Dichas funciones se encuentran en la biblioteca de LabView Functions/File I/O/Advanced File Functions.

La primera que veremos ser la funcin New File:

Veamos los parmetros y salidas de la funcin: 1. datalog type puede ser cualquier tipo de dato. Se puede crear y conectar a esta entrada un cluster formado por los tipos de datos que se guardarn en cada record del fichero en caso de que se quieran crear ficheros con diferentes tipos de datos. Para este caso LabView crear un fichero de records en el cual refnum es el nmero de referencia del fichero de datos. El valor por defecto, en caso de no especificarse nada es un fichero de bytes. 2. permissions especifica los permisos de acceso del sistema de archivo del Sistema operativo que sern asignados al nuevo directorio o fichero que se crear. Por defecto se asumen los permisos por defecto que asigna el sistema cuando se crea un fichero (archivo normal, escritura/lectura, etc.).

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

151

Departamento de Automtica y Computacin

18/11/2006

3. file path es el camino completo del fichero que se desea crear. Si file path se refiere a un archivo o directorio existente y overwrite es false entonces esta funcin no crea un nuevo fichero, sino que por el contrario, fija refnum al valor Not A Refnum y devuelve un error. 4. group contiene las definiciones de grupo del fichero o subdirectorio despus que esta funcin se ejecute. Si group es una cadena vaca, la funcin utiliza las definiciones de grupo asociadas al usuario que lo cre. 5. deny mode especifica el grado en que pueden operar otros usuarios sobre este fichero de forma simultanea: a) Niega la lectura y la escritura en/del el fichero por otros usuarios. b) Permite la lectura pero niega la escritura del fichero por otros usuarios. c) Permite la lectura y escritura sobre el fichero por otros usuarios. Este es el valor por defecto. 6. error in describe las condiciones de error que ocurren antes de que este VI o funcin se ejecute. El valor por defecto es que no hay error. Si un error ocurre antes de la ejecucin de esta funcin o VI entonces se pasa el valor de error in a error out. Esta funcin o VI se ejecuta normalmente solamente si no se producen errors antes de su ejecucin. Si un error ocurre mientras se est ejecutando entonces se ejecuta normalmente y fija su propio reporte de errores en error out. Se puede usar el Simple Error Handler (Manipulador Simple de Error) o el General Error Handler (Manipulador General de Error) de los VIs para visualizar una descripcin del cdigo de error. Use error in y error out para comprobar errors y para especificar el orden de ejecucin conectando error out desde un nodo con error in en el siguiente nodo. Los campos de esta estructura son: a) status es true si un error ocurri antes de que la funcin o VI se ejecutara y es false para indicar una advertencia o que no ocurri un error antes de que esta funcin se ejecutara. Por defecto es false. b) code es el cdigo del error o de la advertencia. Por defecto es 0. Si status es true, code es un cdigo de error diferente de cero. Si status es false, code es 0 o un cdigo de advertencia. c) source describe el origin del error o la advertencia y es, en la mayora de los casos, el nombre del VI o funcin que produjo el error o la advertencia. Por defecto es una cadena vaca. 7. overwrite determina si la funcin reemplaza al fichero o retorna un error cuando el file path ya exista. Si overwrite is false (valor por defecto), la funcin devuelve un error de camino duplicado (duplicate path). Si overwrite es true, la funcin reemplaza al fichero. 8. refnum es el nmero de referencia asociado con el nuevo fichero. Si file path hace referencia a un fichero o directorio que ya existe y overwrite es false, esta funcin fija el nmero de referencia a Not A Refnum. 9. error out contiene informacin de error. Si error in indica que se produjo algn error antes de la ejecucin del VI o funcin, entonces error out contiene la misma informacin de error de error in. En caso contrario, describe el estado de error que produce la ejecucin de esta funcin. De clic derecho en el indicador de error out del panel frontal y seleccione Explain Error en el men que aparece para obtener ms informacin acerca del error. Los campos que contiene son iguales a los de error in. Otra de las funciones que ser de utilidad es:

Esta funcin tiene varios campos en la entrada. Prompt es una cadena que se visualiza en la caja de dilogo que aparece cuando se ejecuta la funcin, siendo el valor por defecto al cadena

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

152

Departamento de Automtica y Computacin

18/11/2006

vaca. Start path es el camino que inicialmente se quiere visualizar en la caja de dilogo. Si no se especifica ninguno LabView visualizar el ltimo que se present con cualquier opcin de dilogo de ficheros. Select mode (2) indica el tipo de fichero o directorio que se puede seleccionar con esta caja de dilogo. Por defecto el valor es 2, que significa que el usuario puede seleccionar lo mismo un fichero que exista o especificar uno que no exista para que sea creado. La tabla completa con los posibles valores puede verse en la ayuda de LabView. Default name es el nombre que se desea aparezca como nombre de fichero por defecto. Pattern limita a LabView a visualizar solamente los ficheros cuyo nombre cumplen con un determinado patrn. Datalog type restringe la visualizacin en la caja de dilogo a aquellos ficheros que cumplen el tipo o los tipos de datos contenidos en el Datalog especificado. Por otra parte, esta funcin el camino del fichero especificado en la caja de dilogo, y dos salidas adicionales para indicar si se seleccion un camino y fichero existente (true) y si no se cancel la ejecucin de la caja de dilogo (true cuando se cancela). El resto de las funciones a utilizar tienen campos parecidos a los comentados, o pueden fcilmente interpretarse de la lectura de la ayuda. Esta funciones son:

, , , que respectivamente cierran un fichero, escriben en un fichero, abren un fichero, y leen de un fichero. Veamos la solucin del ejercicio que descompondremos como en los casos anteriores en dos partes para su explicacin. Primero, se programar el bloque que crear la tabla en un fichero. Para crear la tabla debemos en el panel frontal crear los clusters o records que se almacenarn en el disco. Ya conocemos como hacerlo. El resultado final en el panel frontal debe ser ms o menos como se indica en la siguiente figura:

Debemos ahora crear las opciones generales del programa, o sea, los botones asociados a escribir tabla, leer tabla del fichero y salir del programa. Sern botones del tipo OK y STOP como mismo lo hemos hecho en otros ejercicios. Ser un ciclo while con dos condicionales del tipo if then para el tratamiento de los botones de creacin del fichero y de carga en la tabla. El resultado en la pantalla frontal ser:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

153

Departamento de Automtica y Computacin

18/11/2006

Y la de cdigo:

La idea general que debemos seguir para salvar el fichero conteniendo la tabla es: 1. Se debe inicialmente indicar en que fichero se salvarn los datos. Esto implica la apertura de una caja de dilogo desde donde obtendremos el nombre del fichero a

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

154

Departamento de Automtica y Computacin

18/11/2006

crearse o del fichero ya creado donde se seguirn salvando los datos. Para esto podemos utilizar la funcin ya comentada File Dialog. 2. Se debe utilizar la funcin New File, tambin ya comentada, para definir al fichero, pues ser un fichero que debe contener los records de cada fila de la tabla, o sea, los valores del cluster creado (variable, valor, estado). 3. Una vez definido el fichero debemos entonces utilizar un ciclo for para recorrer el arreglo de clusters salvando para cada iteracin del for un elemento del arreglo (o sea, un cluster). 4. Una vez que concluya el ciclo for debemos cerrar el fichero. A continuacin se muestran las pantallas de cdigo que se van generando a medida que programamos cada uno de los 4 pasos mencionados anteriormente:

Trabajaremos con los valores por defecto que define esta funcin. La salida de esta funcin debe ser la entrada del segundo paso, o sea, de la funcin New File. Veamos el cdigo completo del segundo paso y despus haremos algunos comentarios importantes:

Note que se ha usado la funcin Bundle para definir el tipo de datos que contendr el fichero. Los valores que se le asignen no son importantes, pues no se salvarn. La salida de este Bundle (record) solo se utiliza para indicar el tipo de dato a la funcin New File. Note adems que se ha usado una constante en true para en la entrada overwrite del fichero para que en caso de que exista este se reemplace con los nuevos valores. El nombre del fichero y su camino provienen de la funcin Open Dialog. Veamos ahora como programar el ciclo, y despus, tambin haremos algunos comentarios:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

155

Departamento de Automtica y Computacin

18/11/2006

La funcin Write File ( ) escribe un elemento a la vez dentro del ciclo. La primera vez debemos indicar el manipulador del fichero (el refnum que devuelve la funcin New File) y posteriormente podemos usar el que devuelve la funcin Write File para las siguientes iteraciones del ciclo for. La tabla, conectada al ciclo, y con el indexado inhabilitado entregar para cada iteracin un elemento del arreglo (o sea un cluster conteniendo {variable, valor, estado}). El ciclo for se ejecuta hasta N, siendo N la cantidad de elementos del arreglo, pues no se le ha especificado ningn valor. El cuarto paso no necesita comentarios adicionales. Simplemente se usa la funcin Close File para cerrar el fichero y con ello terminar la operacin de escritura:

Veamos a continuacin la segunda parte del ejercicio. Los pasos a realizar sern: 1. Se debe inicialmente indicar desde que fichero se salvarn los datos. Esto implica la apertura de una caja de dilogo desde donde obtendremos el nombre del fichero. Para esto podemos utilizar la funcin ya comentada File Dialog. 2. Se debe utilizar la funcin Open File, tambin ya comentada, para definir el tipo de fichero que se abrir, pues ser un fichero que debe contener los records de cada fila de la tabla, o sea, los valores del cluster creado (variable, valor, estado). 3. Una vez definido el fichero debemos entonces leer todos los datos del fichero y almacenarlos, cerrar el fichero y mediante un ciclo for darle el tratamiento necesario. En la solucin que se muestra aqu el valor booleano del estado se transforma en los caracteres V y F para indicar si es alarma (V) o si no lo es (F). 4. Al final se debe visualizar en la Tabla los datos ledos. La solucin para el primer y segundo paso se muestra a continuacin:

Note que es similar al caso de guardar el fichero, aunque para este caso usando la funcin especifica de abrir fichero. El tercer paso se muestra a continuacin, con comentarios adicionales despus de la figura:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

156

Departamento de Automtica y Computacin

18/11/2006

Note que una vez que el fichero es abierto (funcin Open File) es ledo por la funcin File Read que entrega el arreglo de clusters ledos. Una vez que se lee del fichero este se puede cerrar. Note que a la funcin File Open se le conect una constante numrica con un valor alto. La conexin se establece porque a la funcin File Open hay que especificarle el nmero de registros a leer. El nmero se pone lo suficientemente alto como para garantizar que todos los records se lean. Posteriormente se conecta el arreglo de clusters a un ciclo for. Fundamentalmente se hace para poder convertir el arreglo de clusters en un arreglo de cadenas para visualizar en la tabla. Note que la variable de tipo booleana se transforma y se crea un nuevo arreglo formado por 3 cadenas, una con el nombre de la variable, otra con el valor (convertido a cadena con la y un tercer elemento siendo un carcter V (true) o un carcter F (false) funcin respectivamente). Para culminar el ejercicio con el cuarto paso, que es la visualizacin de la tabla debemos crear una tabla en el panel frontal. Para ello seleccionamos desde el panel frontal Controls/List & Table/Table:

Cuando se inserte la tabla, se debe habilitar la opcin de mostrar el separador de la cabecera de la tabla:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

157

Departamento de Automtica y Computacin

18/11/2006

Editando los campos cabeceras la tabla debe finalmente quedar insertada en el panal frontal de forma similar a como lo muestra la siguiente figura:

Para visualizar los elementos a la tabla basta con conectar la variable Tabla con la salida del ciclo for:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

158

Departamento de Automtica y Computacin

18/11/2006

El ejercicio completo para la ventana de cdigo (la frontal es la misma que se incluye en esta pgina) quedara:

Estudio Independiente Realice las modificaciones necesarias al ejercicio 3 para poder escribir el arreglo completo en el fichero sin necesidad de un ciclo for. Nota: En la variante comentada en esta clase se incluye el ciclo for para explicar un ejercicio tpico donde el uso del for sea necesario, pero no siempre lo es.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

159

Departamento de Automtica y Computacin

18/11/2006

Realice una funcin que permita conocer cuantos elementos o records tiene un fichero. La entrada de la funcin debe ser el offset inicial del fichero a partir del cual se quiere contar la cantidad de elementos y debe devolver la cantidad de elementos que quedan hasta el fin del fichero.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

160

Departamento de Automtica y Computacin

18/11/2006

TEMA IX. Tarjetas de Adquisicin de Datos (PCL-818L). Saber configurar la TAD PCL-818L. Saber obtener las seales de entrada de la tarjeta de TAD PCL-818L. Saber realizar conversiones a unidades de Ingeniera Enviar una seal de salida a travs del canal analgico de la TAD PCL-818L.

Ejercicio 1: Realizar la configuracin de la TAD PCL-818L. (Hacer una funcin reutilizable) Este ejercicio a diferencia de otros ya realizados tiene como objetivo la implementacin de una funcin. Esto hace que para realizarlo solo es importante establecer cuales sern lo parmetros de entrada y cuales los de salida. Recordemos brevemente los pasos para configurar la TAD PCL-818L. 1. Establecer los rangos de entrada por software de la TAD PCL-818L. 2. Colocar las entradas analgicas que se utilizarn para obtener los datos. 3. Colocar el tipo de disparo que dar inicio de conversin. Vamos a disear el prototipo de nuestra funcin en LabVIEW. El prototipo de una funcin en labVIEW se define en el panel frontal. Los controles colocados harn la funcin de parmetros de entrada y los indicadores harn funcin de parmetros de salida. Realizar los tres pasos planteados arriba implica hacer escrituras en direcciones de memoria internas de la TAD PCL-818L. Estas direcciones se encuentran a partir de una direccin BASE que se configura en el conmutador SW1 y que puede variar entre los rangos 000h-3F0h. Esta base usualmente se trabaja en formato hexadecimal y ser el primer parmetro de nuestra funcin.

Para ello se coloca un control digital en el panel frontal y luego se cambia el tipo de dato para que sea un entreo d 16 bits sin signo U16. Adems, se establece su formato dando clic derecho y seleccionado la opcin Format & Precision que coloca un ventana de configuracin.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

161

Departamento de Automtica y Computacin

18/11/2006

En la ventana de configuracin se selecciona Hexadecimal en el men desplegable Format:. El panel frontal queda de la siguiente manera:

En cdigo de la ventana es muy simple hasta este momento. Como debemos programar tres pasos para configurar la tarjeta, utilizaremos la estructura secuencial. El cdigo queda de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

162

Departamento de Automtica y Computacin

18/11/2006

Paso 1: La configuracin de los rangos de entrada por software de la TAD PCL-818L est estrechamente relacionada con el estado del interruptor (jumper) 7 (JP7). A continuacin se explican los detalles sobre el mismo. JP7: Presenta dos estados para seleccionar los rangos mximos de entrada en la conversin A/D. Si seleccionamos 5 V en el interruptor esto quiere decir que el voltaje de entrada deber estar entre los lmites de -5 V y hasta +5 V. Si por el contrario seleccionamos 10 V quiere decir que el voltaje de entrada deber estar entre los lmites de -10 V y hasta +10 V. Ahora bien una vez que se coloca el interruptor en uno de los estados es posible restringir este rango por programacin. Para 5 los rangos programables son de 5, 2.5, 1.25, 0.625. Si seleccionamos 10, los rangos programables son de 10, 5, 2.5, 1.25

Como se observa, independientemente del estado del interruptor JP7 existen 4 rangos programables en cada caso. Para codificar estos cuatro estados son necesarios dos bits, ya qu 22=4. Estos dos bits son los dos bits menos significativos del registro BASE+1 cuando se utiliza en forma de escritura (recuerde que su interpretacin vara si se trata de una lectura). Las tablas siguientes muestran este resultado.
BASE + 1 (MODO ESCRITURA) Bit Value D7 N/A D6 N/A D5 N/A D4 N/A D3 N/A D2 N/A D1 G1 D0 G0

N/A: no importa cual es su valor

Rango de Entrada JP = 5 JP = 10 5 10 2.5 5 1.25 2.5 0.625 1.25

Cdigo del Rango G1 G0 0 0 0 1 1 0 1 1

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

163

Departamento de Automtica y Computacin

18/11/2006

Para programar esta paso es necesario que el usuario sepa cual es el estado del interruptor JP7. Luego nuestra funcin recibir en uno de los parmetros un valor entre 0 y 3 que se escribir en la direccin de memoria BASE + 1. Para programar este paso aadimos un nuevo control que servir como otro parmetro de entrada. Hasta este momento contamos con dos parmetros de entradas: BASE Cdigo del Rango de entrada.

El mejor control que representa este parmetro es una variable enumerada que devuelva: 0 (00 binario) rango (5 o 10) 1 (01 binario) rango (2.5 o 5) 2 (10 binario) rango (1.25 o 2.5) 3 (11 binario) rango (0.625 o 1.25) Las variables enumeradas en labVIEW se encuentran de la siguiente forma:

Al colocar este control en el panel frontal solo se debe dar un valor semntico a cada valor entero para ello seleccionamos el cursor tipo y escribimos dentro del control el significado que tomar el valor entero 0 que en nuestro caso ser: rango (5 o 10). La interfaz queda:

Ahora debemos aadir un nuevo elemento. Esto se realiza dando clic derecho sobre el control y seleccionando la opcin Add Item After. Al realizar esta operacin se muestra el control vacio, osea listo para recibir otro valor. Seleccionamos el cursor tipo y

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

164

Departamento de Automtica y Computacin

18/11/2006

escribimos dentro del control el significado que tomar el valor entero 1 que en nuestro caso ser: rango (2.5 o 5). La interfaz queda:

Este paso se repita dos veces ms, colocando los valores rango (1.25 o 2.5) y rango (0.625 o 1.25) correspondientes al valor

2 y 3

y respectivamente. Si queremos cambiar el valor del control seleccionamos el cursor se escoge cualquiera de los valores tecleados con anterioridad. Esto se mustra a continuacin:

El cdigo que ejecuta este paso de la configuracin es muy sencillo ya que el control BASE contiene la direccin de base de la memoria interna de la tarjeta. En nuestro caso debemos escribir en la direccin de memoria BASE+1 el valor obtenido de la variable enumerada Rangos.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

165

Departamento de Automtica y Computacin

18/11/2006

Para escribir en memoria es necesario utilizar la funcin Out Port que se encuentra en la paleta de funciones segn se muestra en la siguiente figura:

Si seleccionamos la ayuda de esta funcin vemos que es muy sencilla. Recibe la direccin de memoria y el valor a escribir. Adems, debemos indicarle si escribiremos un Byte o una palabra (word). En nuestro caso sabemos que los registros internos son de 8 bits por lo que no conectaremos esta entrada que quedar en su estado por defecto (Byte). Es necesario explicar que el uso de esta funcin se limita a los sistemas operativos Windows 95, Windows 98. Para SO con tecnologa NT se deben utilizar libreras externas. Llegado el caso las utilizaremos sustituyendo estas funciones por las necesarias. Es importante tener en cuenta que la TAD posee 16 canales y que cada uno de ellos puede tener un rango de entrada diferente es por esto que antes de escribir en la direccin de memoria BASE+1 un valor determinado debemos especificar a que canal va dirigido esta configuracin. Esto se realiza utilizando el registro BASE+2. Los usuarios pueden decidir cual o cuales canales van a ser Configurados. Veamos como se interpreta este registro.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

166

Departamento de Automtica y Computacin

18/11/2006

BASE + 2 (MODO ESCRITURA) Seleccin de Canales Bit Value D7 CH3 D6 CH2 D5 CH1 D4 CH0 D3 CL3 D2 CL2 D1 CL1 D0 CL0

Como existen 16 canales de entrada como mximo, codificar cada canal conlleva utilizar 4 bits ya que 24=16. CL0-CL3: indica el canal de inicio(start) (0-15). 16 canales en total CH0-CH3: indica el canal de parada (stop)(0-15). 16 canales en total Ejemplo:
BASE + 2 (MODO ESCRITURA) Seleccin de Canales Bit Value D7 0 D6 1 D5 0 D4 1 D3 0 D2 0 D1 1 D0 0

Valor del registro: 52 hexadecimal o 82 en decimal.


BASE + 2 (MODO ESCRITURA) Seleccin de Canales Bit Value D7 0 D6 0 D5 1 D4 1 D3 0 D2 0 D1 1 D0 1

Valor del registro: 33 hexadecimal o 51 en decimal.

Para programar esta opcin debemos tener dos controles que me brinden Canal Inicio (entre 015) y Canal de Parada (0-15) Nuevamente necesitaremos una variable enumerada que contenga los siguiente valores: Canal0 0 (0000 binario) Canal1 1 (0001 binario) Canal2 2 (0010 binario) . . . Canal15 15 (1111 binario)

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

167

Departamento de Automtica y Computacin

18/11/2006

Para entrar los valores se realiza el mismo procedimiento que para entrar los Rangos. El resultado ser el mostrado en la pantalla siguiente:

Para obtener un valor de 8 bits que contenga la informacin de acuerdo al formato del registro BASE + 2, debemos realizar algunas operaciones.

Canal de inicio: 0000 IIII (I entre 0 y 1) Canal de parada: 0000 PPPP (P entre 0 y 1)

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

168

Departamento de Automtica y Computacin

18/11/2006

La operacin ser rotar el valor del canal de Parada cuatro lugares de forma que quede: Canal de parada(Desplazado): PPPP 0000 (P entre 0 y 1) Luego realizar la opresin OR entre el resultado anterior y el Canal de inicio:

Canal de parada(Desplazado): PPPP 0000 (P entre 0 y 1) Canal de inicio: + 0000 IIII (I entre 0 y 1) Registro BASE+2 PPPP IIII La operacin de desplazamiento se realiza tomando el valor del canal de parada y multiplicndolo por 16. En este caso el usuario podr escoger la cantidad de canales que desee de manera consecutiva. Sin embargo para definir el canal que se quiere configurar solo se toman en cuanta los bits correspondientes al canal de inicio.

La programacin de este paso es compleja. Debemos configurar los canales especificados por el usuario. La cantidad esta dada por Canal de Parada menos Canal de inicio y para cada uno de ellos de deben repetir los mismos pasos. El cdigo preliminar es:

Observaciones: Vase que este ciclo se repetir hasta que el registro de desplazamiento (shift register) contenga un valor igual al valor del Canal de Parada. El ciclo contiene una estructura Secuence de dos partes una para colocar el canal que se quiere configurar y otra para establecer su rango. En una de las secuencias se debe incrementar el valor del registro de desplazamiento. Ahora solo resta programar los dos pasos que configuran cada canal para ello se coloca el siguiente cdigo en la secuencia 0 dentro del ciclo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

169

Departamento de Automtica y Computacin

18/11/2006

Observaciones: En este caso solo es necesario modificar los cuatro bits menos significativos, ya que acta como puntero al canal que se quiere modificar. En este caso cada uno de estos canales tendr el mismo rango de entrada. Usted puede modificar este cdigo para que cada uno de ellos tenga una configuracin diferente. Hgalo como estudio individual!

y como cada uno de estos canales tendr la misma configuracin entonces el cdigo es:

En este paso se utiliza una variable del tipo Add local secuence para disponer del valor de la BASE en los siguientes posos.

Paso 2: La configuracin de los canales de entrada se realiza en el registro de escritura situado en la direccin BASE+2. Los usuarios pueden decidir cual o cuales canales van a ser utilizados. Es importante aclarar que este paso aunque es parecido al paso de configurar los canales, es sumamente necesario, ya que el hecho de configurar los canales no establece cuales canales se van a utilizar en el proceso de adquisicin de datos. El trabajo es similar al anterior por lo que el cdigo resultante es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

170

Departamento de Automtica y Computacin

18/11/2006

Observaciones: En este paso si es necesario modificar los bits correspondientes al canal de inicio y al canal de parada. directamente sobre el diagrama.

Para escribir comentarios en el cdigo se utiliza el cursor

Paso 3 Realizar el paso 3 implica modificar el Registro BASE+9, para configurar el tipo de disparo. La tarjeta presenta dos tipos bsicos de disparo: Si: ST1 0 1 1 ST0 X 0 1 Disparo Disparo por Software Disparo por Hardware Disparo por ? Por software Por Hardware

BASE + 9 (MODO ESCRITURA) Control Bit Value D7 INTE D6 I2 D5 I1 D4 I0 D3 X D2 DMAE D1 ST1 D0 ST0

Ya que nuestro programa siempre realizar su trabajo con la Tarjeta dando inicio por software, nos limitaremos a configurarla siempre por software: Para ello: debemos escribir el valor 0 en este registro. Esto dar el resultado siguiente: INTE = 0 no interrupcin I2 = 0 no interrupcin I1 = 0 no interrupcin I0 = 0 no interrupcin

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

171

Departamento de Automtica y Computacin

18/11/2006

X = 0 no importa INTE = 0 DMA deshabilitado ST1 = 0 (inicio conversin software) ST0 = 0 (inicio conversin software) El cdigo necesario para lograr este efecto es el siguiente:

Ya estamos en condiciones de terminar de programar nuestra funcin. De manera intuitiva la funcin no devuelve ningn valor, sin embargo la nuestra devolver el valor que recibe de la BASE. Para ello colocamos un indicador numrico con las mismas caractersticas del control asociado a la BASE y se conectan entre s. El panel frontal t el cdigo G quedan de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

172

Departamento de Automtica y Computacin

18/11/2006

Para dibujar el Icono correspondiente a la funcin damos clic derecho sobre la esquina superior

derecha ventana de edicin:

y seleccionamos la opcin Edit Icon. Esto mustra la

Para editar el icono utilizamos las herramientas de la Izquierda (Parecidas al Paint de Windows). El Icono editado queda de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

173

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos buscar el patrn de conexin que utilizaremos. En nuestro caso sern cuatro variables de entrada y una de salida, para ello damos clic derecho sobre el ICONO y seleccionamos la opcin Show Connector:

Solo nos resta vincular cada control e indicador con su correspondiente rea en el icono. Esto se realiza nicamente en el Panel de control y seleccionando el cursor . Usted debe marcar

y luego seleccionar el control que servir el rea del conector que va vincular con el cursor de parmetro al hacerlo el rea antes de color blanco tomar el color del tipo de datos de variable asociada (naranja-azul-rosada-verde) Al seleccionar la base el panel frontal se ve as:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

174

Departamento de Automtica y Computacin

18/11/2006

La secuencia queda de la siguiente forma:

Al conectar el control Rango: Al conectar el control Canal de Inicio: Al conectar el control Canal de Parada: Al conectar el Indicador BASE: Guarde la funcin programada como: ConfigFuncion.vi. Ya tenemos la funcin. Ejercicio 2: Hacer un programa permita configurar la TAD PCL-818L utilizando la funcin programada en el ejemplo anterior y obtenga una de las entrada analgicas especificadas por el usuario.

Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

175

Departamento de Automtica y Computacin

18/11/2006

La ejecucin de esta aplicacin tiene como primer paso la configuracin de la tarjeta TAD PCL818L. Esto se realiza utilizando la funcin programada en el ejemplo anterior. Por lo tanto se utilizar una estructura secuencia donde antes de entrar al ciclo principal se hace la configuracin.

Para configurar la tarjeta debemos agregar una secuencia pero esta vez utilizaremos la opcin Add Frame Before de la estructura secuence ya que la configuracin se realizar como primer paso. Para utilizar la funcin se debe utilizar el icono de la extrema izquierda de la paleta de funciones:

Este abre un cuadro de dialogo para abrir un SubVI, usted busca ConfigFuncion.vi y lo abre. El cdigo queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

176

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos crear los controles para conectar a nuestra funcin. Para hacer esto no vamos a repetir los pasos del ejercicio anterior sino que los crearemos directamente a travs de la funcin para ello seleccionamos el conector:

Al pasar por encima el conector sobre la funcin se visualizan los diferentes parmetros de entrada y salida segn sean. Usted dar clic derecho sobre ellos y seleccionar la opcin Control en caso de que sea un parmetro de entrada dentro de Create. Al parmetro de salida no se le aplicar esta operacin.

El cdigo queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

177

Departamento de Automtica y Computacin

18/11/2006

El panel frontal ahora contiene los controles para configurar la aplicacin, solo resta organizarlos:

Esta aplicacin se realizar teniendo en cuenta que se recibir informacin de un solo canal a la vez. Una vez que la aplicacin est configurada apara obtener los valores de las entradas debemos realizar los siguientes pasos: 1. Dar inicio de conversin. 2. Esperar por fin de conversin.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

178

Departamento de Automtica y Computacin

18/11/2006

3. Obtener el valor digital de 12 bits. 4. Convertir a unidades de ingeniera.

Cada uno de estos pasos se programar en una estructura de secuencias dentro del ciclo principal de la aplicacin:

Paso 1: Dar inicio de conversin es muy fcil, toda vez que debemos escribir cualquier valor en el registro de escritura BASE+0. Esto se realiza:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

179

Departamento de Automtica y Computacin

18/11/2006

Ahora para simplificar la explicacin haremos referencia a la estructura de secuencias ms interna. Paso 2: Aadimos una secuencia ms a la estructura Secuence. Para verificar el fin de conversin debemos leer el registro de estado BASE+8.
BASE + 9 (MODO ESCRITURA) Control Bit Value D7 EOC D6 N/A D5 MUX D4 INT D3 CN3 D2 CN2 D1 CN1 D0 CN0

CN3-CN0: ? Si verificamos el manual de la tarjeta vemos que el bit D4 (INT) indica lo que buscamos: INT = 0 si la conversin A/D no se ha completado INT = 1 si la conversin A/D se ha completado

Para esperar por el fin de conversin debemos programar un ciclo que repita el proceso de lectura del registro BASE+8 hasta tanto el bit 4 correspondiente al mismo est en valor 1. Para ello utilizaremos la funcin complementaria de Out Port que es In Port y que se encuentra en la paleta de funciones:

Para ganar en organizacin es preferible introducir direccin BASE a travs de una variable local. La lectura es la siguiente:

(Estructura de secuencia ms interna)

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

180

Departamento de Automtica y Computacin

18/11/2006

El resultado de esta funcin un byte. Para poder obtener el bit 4 de la misma es necesariohacer la conversin de entero a arreglo de boolean. Por ejemplo el valor entero 82 en decimal representa el valor 52h en hexadecimal que al llevarlo a un arreglo booleano queda: Decimal 82 indice valor 7 false 6 true Hexadecimal 52 5 false 4 true 3 false Binario 0101 0010 2 false 1 true 0 false

Ahora podemos determinar si el bit 4 es verdadero o falso utilizando la conocida funcin que dado un indice devuelve su valor:

El cdigo queda:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

181

Departamento de Automtica y Computacin

18/11/2006

Solo se sale del ciclo si se obtiene el fin de conversin. Esto no est bien. Le pedimos que modifique el cdigo como estudio independiente para que se introduzca un time-out definido por el usuario que permita salir del ciclo pasado este tiempo y se indique al usuario.

Paso 3. Ahora debemos obtener el valor que ya convertido. Se sabe que la precisin del conversor es de 12 bits. Tambin es conocido que los registros de la tarjeta son de 8 bits. Es por esto que el valor convertido no cabe en un solo registro de lectura de la tarjeta y se necesitan los 8 bits del registro BASE+1 ms los 4 bits ms significativos del registro de lectura BASE+0.
BASE + 0 (MODO LECTURA) Bit Value D7 AD3 D6 AD2 D5 AD1 D4 AD0 D3 C3 D2 C2 D1 C1 D0 C0

ASE + 1 (MODO LECTURA) Bit Value D7 AD11 D6 AD10 D5 AD9 D4 AD8 D3 AD7 D2 AD6 D1 AD5 D0 AD4

C0-C3: Canal desde donde se obtuvo el valor de la entrada AD0-AD11: Valor de doce bits que define el valor convertido. Para almacenar el valor convertido es necesario una variable de 16 bits o sea del tipo (U16) la conversin siempre estar entre 0 y 212=4096. 0 -> corresponder a -5 o -10 Volts. 4096 -> corresponder a +5 o +10 Volts. Para obtener el valor convertido es necesario realizar las siguientes operaciones: Ejemplo BASE+0 = AAAA CCCC donde A y C representan un bit (0-1) BASE+1 = AAAA AAAA Variable de 16 bits = 0000 0000 0000 0000

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

182

Departamento de Automtica y Computacin

18/11/2006

1. Asignar a la variable de 16 bits el valor del registro BASE + 1 2. Desplazar 8 lugares hacia la izquierda el valor variable de 16 bits introduciendo 8 ceros de derecha a izquierda (multiplicar por 256) 3. Realizar una opresin de OR entre la variable de 16 bits y registro BASE + 0 4. liminar los 4 bits menos significativos de la variable de 16 bits introduciendo 4 ceros de izquierda a derecha (dividir por 16).

Ejemplo:

BASE+0 = 1011 0001 donde A y C representan un bit (0-1) BASE+1 = 1001 1010 Variable de 16 bits = 0000 0000 0000 0000 El resultado final debe llevarnos obtener el valor: 1001 1010 1011 (doce bits) Comprobemos: Operacin 1 Variable de 16 bits = BASE+1 = 1001 1010 Resultado Variable de 16 bits = 0000 0000 1001 1010

Operacin 2 Desplazar 8 lugares hacia la izquierda: Variable de 16 bits = 1001 1010 0000 0000 Operacin 3 Realizar operacin OR Variable de 16 bits BASE+0 Variable de 16 bits 1001 1010 0000 0000 OR 1001 1010 1011 0001

1011 0001

Operacin 4 Eliminar 4 bits menos significativos (dividir por 16): Variable de 16 bits Rotados Variable de 16 bits 0000 1001 1010 1011 1001 1010 0000 0000

Para realizar la programacin debemos leer los registros BASE+0 y BASE+1. Esto e muy sencillo:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

183

Departamento de Automtica y Computacin

18/11/2006

Utilizar un variable de 16 bits es lo mismo que convertir la salida a un variable de este tipo. Pero esto ya lo realiza por nosotros la funcin In Port claro est debemos saber que los 8 bits ms significativos siempre estarn en 0 ya que el registro desde donde lemos es de 8 bits. Para desplazar 8 lugares hacia la izquierda el valor de BASE+1 debemos multiplicar por 256 (comprubelo con la calculadora de Windows!)

Ahora realizamos la operacin OR entre BASE + 1 y el resultado anterior:

Finalmente Eliminamos los 4 bits menos significativos dividiendo por 16:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

184

Departamento de Automtica y Computacin

18/11/2006

Ya tenemos el valor convertido.

Paso 4 para convertir a unidades de ingeniera debemos crear otro secuencia dentro de esta estructura y recibir el valor convertido desde la anterior a travs de la opcin Add Secuence Local El cdigo queda como sigue:

La conversin depende del rango escogido. Esto depende de la configuracin de Hardware a travs del JP7 y luego de los rangos configurados por software. Por ejemplo si se sabe que este rango es 10V sera Valor convertido = 0 implica -10V

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

185

Departamento de Automtica y Computacin

18/11/2006

Valor convertido = 4095 implica +10V Esto responde a una ecuacin lineal y=mx+n donde:

x: valor convertido (0-4095) y: valor en unidades de ingeniera (-10 a 10) o (-)

si y2 = 10, x2 = 4095, y1 = -10,x1 = 0 m = y2 y1 = 10 (-10) = 20 x2 x1 4095 (0) 4095

n = -10V. y = (20/4095) *x -10V. Es fcil comprobar que si el rango es 5V sera: y = (10/4095) *x -5V. Por lo qu si R es el rango: y = 2*R/4095*x R. La programacin de esto utilizando labview es sencilla si utilizamos el nodo frmula con dos entradas: X (conversin) y R (rango). Como salida tendremos Y.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

186

Departamento de Automtica y Computacin

18/11/2006

Para seleccionar los rangos de voltaje necesitamos que el usuario diga cual el la configuracin del JP7. Para ello colocamos un control booleano en el panel frontal:

Ahora utilizaremos su estado para conmutar entre los rangos: Para programar los rangos podemos utilizar una matriz de valores reales constantes. Por ejemplo:
Este arreglo constante define los rangos posibles cuando se selecciona en el JP7 el valor 10 V
Este arreglo constante define los rangos posibles cuando se selecciona en el JP7 el valor 5 V El arreglo constante se define en la paleta de funciones:
0

10,00 5,00

2,50

1,25

5,000 2,500 1,250 0,625

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

187

Departamento de Automtica y Computacin

18/11/2006

esto coloca en el cdigo un elemento array sin tipo:


0

Para definir el tipo se busca un valor constante del tipo que se quiere definir, en este caso una constante numrica y se coloca dentro del elemento array:

para convertirlo a real se da clic derecho sobre El arreglo ahora aparece del tipo entero el y se selecciona la opcin Representation y Single Precision

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

188

Departamento de Automtica y Computacin

18/11/2006

el arreglo queda El cdigo queda:

0,

Note que la estructura

sirve para seleccionar uno u otro arreglo constante en dependencia

del valor del control que representa el JP7. Luego se selecciona el Rango con la funcin que devuelve un elemento del arreglo tomando como parmetro un arreglo y el ndice. El control Rango e quien me define cual es el rango actual.

Finalmente debemos colocar un indicador para mostrar el valor en unidades de ingeniera para ello vamos al Panel Frontal y seleccionamos el control Meter

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

189

Departamento de Automtica y Computacin

18/11/2006

Cambiamos su escala para representa el rango mayor entre -10 y 10.

El cdigo queda:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

190

Departamento de Automtica y Computacin

18/11/2006

Estudio Individual: Se sabe que por el canal 3 de la TAD PCL-818L se obtiene la seal proveniente de un sensor de nivel. El sensor de nivel brinda una seal de 4-20 mA, 4 mA si el nivel est en 0 metros y 20 mA si el nivel es de 50 metros. Se conoce que la TAD PCL-818L solo posee entradas en forma de voltajes. Para realizar la conversin se cuenta con una resistencia de 470 ohms. Realice un programa que presente el nivel en un indicador tanque. El programa debe obtener datos de nivel en una frecuencia de 500 ms. Debe almacenar estos valores en un fichero. El usuario debe poder ver los resultados histricos almacenados en una grfica de tiempo contra valor de nivel obtenido. Ejercicio 3 Realice un programa que permita sacar un valor analgico de salida a travs de la TAD PCL818L. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Para enviar un valor hacia la tarjeta TAD PCL-818L ser a travs de un botn. Este botn tendr accin mecnica de tipo: Latch When Pressed. Cuando este botn est en verdadero se ejecutar el cdigo que enviar la salida si no la aplicacin permanecer inactiva. Esto queda de la siguiente forma:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

191

Departamento de Automtica y Computacin

18/11/2006

Para escribir un valor de salida en la TAD se necesitan 3 pasos fundamentales: 1. Convertir de Unidades de Ingeniara a Unidades del conversor 2. Escribir en el registro BASE+4 3. Escribir en el registro BASE+5 Para ejecutar cada uno de estos pasos utilizaremos la estructura Secuence. El cdigo queda:

Paso 1 Para realizar este paso debemos tener en cuanta que para realizar una conversin D/A esta debe realizarse de acuerdo a una referencia. La TAD PCL-818L tiene dos formas para esto: Referencia Externa (valor entre -10 y 10 V)

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

192

Departamento de Automtica y Computacin

18/11/2006

Referencia Interna

Para escoger una de ellas se utiliza el interruptor JP4. Si se escogiera Referencia Interna entonces se tienen dos variantes: Referencia 0-5 V Referencia 0-10 V Para escoger una de ellas se utiliza el interruptor JP5.

Aqu siempre se utilizar una de las referencias internas. Tomemos R como la referencia escogida. Se sabe que el conversor D/A tiene una precisin de 12 bits. Cuando se escribe en la tarjeta un valor de 212=4095 la salida analgica ser de +R V. Cuando se escribe en la tarjeta un valor de 0 la salida analgica ser de 0 V. La frmula para realizar la conversin es contraria a la que ya conocemos:

x: valor en unidades de ingeniera (0 a R) y: valor a convertir (0-4095)

si x2 = R, y2 = 4095, x1 = 0,y1 = 0 m = y2 y1 = 4095 (0) = 4095 x2 x1 R (0) R n = 0. y = 4095/R*x. Para implementar est frmula utilizaremos nuevamente el nodo frmula que recibir el valor de X y R y devolver Y. El cdigo es el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

193

Departamento de Automtica y Computacin

18/11/2006

Para obtener el valor de R utilizaremos un botn booleano que indique el estado el JP5. La interfaz queda de la siguiente forma:

El cdigo queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

194

Departamento de Automtica y Computacin

18/11/2006

El control que dar el valor deseado a sacar por la TAD ser el que se muestra a continuacin:

El cdigo ahora debe quedar:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

195

Departamento de Automtica y Computacin

18/11/2006

Sin embargo al cambiar la Referencia debe cambiar tambin la escala del control. Esto se puede hacer utilizando las propiedades Scale.Maximum y Scale.Minimum. Para este caso solo modificaremos la primera ya que la segunda no cambiar. Para obtener la propiedad de un control se realizan los pasos ya conocidos. Luego para obtener esta propiedad se busca:

El cdigo queda:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

196

Departamento de Automtica y Computacin

18/11/2006

El valor convertido debe pasarse al siguiente paso:

Paso 2. El valor convertido es de tipo Bouble DBL y debemos convertirlo en un entero de 16 bits sin signo ya que sabemos que la tarjeta es de 12 bits. Para ello se utiliza la funcin de conversin a U16 de la paleta de funciones numricas:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

197

Departamento de Automtica y Computacin

18/11/2006

El cdigo queda:

Ahora los doce bits deben quedar distribuidos de la siguiente forma:


BASE + 4 (MODO ESCRITURA) Bit Value D7 DA3 D6 DA2 D5 DA1 D4 DA0 D3 X D2 X D1 X D0 X

BASE + 5 (MODO ESCRITURA) Bit Value D7 DA11 D6 DA10 D5 DA9 D4 DA8 D3 DA7 D2 DA6 D1 DA5 D0 DA4

El valor que nosotros tenemos de 16 bits tiene el formato siguiente Valor 16 bits: 0000 AAAA AAAA AAAA (A valor binario 0-1) La primera operacin que se debe realizar es introducir 4 ceros de derecha a izquierda (multiplicar por 16). Luego se tiene: Valor 16 bits: AAAA AAAA AAAA 0000 Vase que los 8 bits menos significativos corresponden al valor que se debe escribir en BASE+4 mientras que los 8 bits ms significativos corresponden al valor a escribir en BASE+5.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

198

Departamento de Automtica y Computacin

18/11/2006

La operacin a realizar es la divisin con resto entre 256. El resultado ser el valor colocado en BASE+5 y el resto el valor colocado en BASE+4.

Para hallar el cociente y el resto se utilizar la funcin numrica funciones numricas:

que e halla en la paleta de

Es necesario realizar la escritura en BASE+4 y BASE+5 en dos pasos bien definidos ya que al efectuar la segunda escritura la TAD PCL 818L automticamente realiza la conversin D/A y enva la salida. El prximo paso es muy sencillo:

Estudio individual: Realice un programa en LabVIEW que lea y escriba las entradas y salidas digitales de la TAD 818L.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

199

Departamento de Automtica y Computacin

18/11/2006

TEMA X Trabajo con puerto serie en LABVIEW Saber configurar el puerto serie. Saber realizar lecturas del puerto serie utilizando LabVIEW. Saber realizar escrituras del puerto serie utilizando LabVIEW.

Ejercicio 1 Hacer un programa que permita, una vez configurado el puerto serie, enviar diez muestras de datos aleatorios que simulen lecturas de nivel en un tanque. El nivel vara entre 0 y 10 m. Arquitectura VISA. VISA: Virtual Instrument Software Architecture. Aprobado para lograr estandarizar la manera de obtener y pedir datos desde y hacia instrumentos de medicin (VXIplug&play Systems Alliance). Entre esta estandarizacin se incluyen los dispositivos de comunicacin serie y paralelo. NI-VISA: Es la solucin de National Instruments para VISA. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Es importante revisar cuales son lo parmetros de configuracin del puerto serie: 4. 5. 6. 7. 8. Establecer la velocidad de Tx y Rx (Baud rate). Establecer la cantidad de bits de datos del protocolo de intercambio serie. Establecer la cantidad de bits de parada del protocolo de intercambio serie. Establecer la paridad del protocolo de intercambio serie. Establecer el nmero del puerto a travs del cual se realizar el intercambio serie. 9. Establecer tamao del buffer que almacenar los datos recibidos y/o transmitidos.

La ejecucin de esta aplicacin tiene como primer paso la configuracin del puerto serie. Por lo tanto se utilizar una estructura secuencia donde antes de entrar al ciclo principal se hace la configuracin.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

200

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos agregar una secuencia pero que se ejecute antes de que se entre en el ciclo principal de la aplicacin, para ello se da clic derecho sobre la estrucura secuence y se selecciona la opcin Add Frame Before. El cdigo es:

Como es de esperar es una secuencia vaca. Antes de programar la configuracin debemos introducir los controles necesarios. Para configurar el puerto a travs del cual se recibirn y/o introducirn los datos es necesario utilizar un control de recursos denominado VISA Resource Name controles. en la paleta de

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

201

Departamento de Automtica y Computacin

18/11/2006

Para los bits de parada utilizaremos un control Enum con los siguientes tems: 1. 1 bits 2. 1,5 bits 3. 2 bits

Para Paridad utilizaremos un control Enum con los siguientes tems: 1. None 2. Odd 3. Even 4. Mark 5. Space Para Velocidad utilizaremos un control Numeric del tipo U16 Para Bits de datos utilizaremos un control Numeric del tipo U8 El panel Frontal queda diseado de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

202

Departamento de Automtica y Computacin

18/11/2006

Para configurar el puerto se utiliza la funcin de VISA diseada para ello que se encuentra en la paleta de funciones bajo el nombre:VISA Configure Serial Port Como se muestra a continuacin: -> -> .

Despus de conectada esta funcin El cdigo es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

203

Departamento de Automtica y Computacin

18/11/2006

Ya tenemos configurado el puerto serie por lo que estamos listos para enviar datos a travs del mismo. Segn los requerimientos de la aplicacin colocaremos un indicador de nivel que visualizar las mediciones aleatorias y un control booleano mediante el cual se generarn los datos y se enviarn al puerto serie. Adems, colocaremos un indicador de tipo arreglo que contendr las diez muestras generadas, de manera que podamos ver cuales han sido los datos enviados. La interfaz quedar de la siguiente manera:

La accin mecnica del botn Enviar Datos debe ser Latch When Pressed, ya que al pulsar este botn solo debe ejecutarse el cdigo asociado una sola vez. Generar diez nmeros aleatorios es un cdigo conocido:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

204

Departamento de Automtica y Computacin

18/11/2006

Observaciones: Solo cuando se ejecute el botn enviar datos ejecutar el lazo generando 10 valores aleatorios. Cada valor aleatorio se visualizar en el indicador tank (si desea verlo debe introducir una demora en tiempo)!Hgalo Al finalizar el ciclo obtendremos un arreglo de diez valores entre 0 y 10 El ciclo se repetir al presionar el botn una sola vez debido a su accin mecnica.

Solo nos resta enviar estos valores a travs del puerto serie. Para ello es necesario obtener la funcin indicada para ello -> -> :

Esta funcin es muy sencilla toda vez que debemos pasarle el recurso abierto (previamente configurado) y la cadena de caracteres que se quiere escribir en el puerto serie. Para ello creamos una variable local a partir del control VISA Resource Name la conectamos al parmetro correspondiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

205

Departamento de Automtica y Computacin

18/11/2006

Los datos que se enviarn deben estar en formato de cadena de caracteres, sin embargo, hasta este momento tenemos un tipo de dato arreglo. Por esta razn debemos realizar una conversin de tipos, para ello utilizaremos la funcin Array To Spreadsheet String:

Esta funcin convierte una arreglo de valores reales en una cadena cuyo contenido sern los nmeros que pertenecen al arreglo separados por el tabulador Tab y con un formato de %.2 que indica una precisin de dos valores despus de la coma. El cdigo final de la aplicacin queda segn se muestra a continuacin:

Antes de finalizar debemos cerrar el recurso abierto. Para ello creamos otra variable local del recurso y creamos otra secuencia despus del ciclo principal y utilizamos la funcin VISA Close

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

206

Departamento de Automtica y Computacin

18/11/2006

El cdigo que se debe programar en esta ltima secuencia es muy simple:

Ejercicio 2 Realice un programa que permita leer los valores enviados al puerto serie de la computadora utilizando el ejemplo anterior. El programa debe graficar los valores obtenidos. Solucin: Para dar solucin a este ejercicio es necesario, de la misma manera que pas en el ejercicio anterior, configurar el puerto serie. Es por ello que ahora partiremos de un cdigo que ya se ha discutido:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

207

Departamento de Automtica y Computacin

18/11/2006

Para leer la informacin que se recibe a travs del puerto serie es necesario hacerlo siguiendo dos pasos: 1. Encuestar la cantidad de bytes recibidos utilizando la funcin VISA Bytes at serial port 2. Leer los bytes que se tienen utilizando la funcin VISA Read Sabemos que enviaremos 10 nmeros menores que 10 en formato %.2f esto significa que recibiremos:

1*10 caracteres = 10 caracteres antes de la coma 2*10 caracteres = 20 caracteres despus de la coma 1*10 caracteres = 10 caracteres coma en cada nmero 1*10 caracteres = 10 caracteres separadores 1 carcter fin de lnea. Total = 51 caracteres. Es por esto que nuestro programa puede esperar a que estn los 51 bytes para luego efectuar una lectura completa. Para ello debemos encuestar mediante la funcin ya mencionada que se obtiene:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

208

Departamento de Automtica y Computacin

18/11/2006

Cuidado! El icono mostrado en la paleta de funciones G . no es igual al icono mostrado en el cdigo

Ahora debemos encuestar la cantidad de bytes hasta que su nmero sea 51:

Observaciones: Al igual que el ejemplo anterior debemos crear una variable local que corresponde al recurso configurado previamente. La funcin VISA Bytes at serial port devuelve la cantidad de bytes que llegan al puerto El ciclo no culminar hasta tanto no lleguen 51 bytes.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

209

Departamento de Automtica y Computacin

18/11/2006

Una vez que se sale del ciclo es debido que existen 51 bytes y se ha recibido la totalidad de la informacin. Es por ello que se puede leer la informacin. Para ello se usa la funcin VISA Read

Esta funcin recibe como parmetros el recurso desde el cual se leer y la cantidad de bytes que se leern. Devuelve la cadena de caracteres ledos desde el puerto serie.

Observaciones: Fjese que en este caso se est sacando fuera del ciclo while un valor simple (el ltimo generado), y no el arreglo de valores generados.

Ahora solo resta convertir la cadena de caracteres en un arreglo de valores que sea capaz de trazarse en una grfica WaveformGraph. Para ello se realiza el proceso inverso utilizando ahora la funcin SpreadSheet String to Array.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

210

Departamento de Automtica y Computacin

18/11/2006

Observaciones:

La funcin SpreadSheet String to Array recibe por defecto un arreglo de dos dimensiones. En nuestro caso se utilizar un arreglo unidimensional, por lo que debemos especificar su tipo utilizando un arreglo constante [DBL]. El formato especificado debe coincidir con el de la aplicacin precedente de manera que sean compatibles (%.2f) Debe incluir una secuencia, al igual que en el ejemplo anterior, que cierre el recurso abierto.

Para que se visualicen mejor los datos aqu tambin colocamos un indicador de tipo arreglo que muestre los valores recibidos. El panel frontal queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

211

Departamento de Automtica y Computacin

18/11/2006

Indicaciones para ejecutar la aplicacin. 1. Usted debe introducir los mismos parmetros de configuracin entre una y otra aplicacin de forma tal que el protocolo de la transmisin sea similar. 2. Debe correr la aplicacin de escritura. 3. Luego debe correr la aplicacin de lectura. 4. Presionar el botn enviar. 5. Comprobar la recepcin.

Alerta! No es posible terminar la aplicacin de lectura ya que siempre se queda encuestando los bytes en el puerto serie. Obtenga una solucin a este problema!

Estudio individual: Realice un programa en LabVIEW que simule un Chat punto a punto utilizando el puerto serie. Asuma que los mensajes son siempre de tamao fijo (50 caracteres) en caso de que sea menor debe completar con espacio

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

212

Departamento de Automtica y Computacin

18/11/2006

TEMA XI Trabajo con puerto paralelo en LabVIEW Saber Trabajar con el puerto paralelo. Saber realizar lecturas del puerto paralelo utilizando LabVIEW. Saber realizar escrituras del puerto paralelo utilizando LabVIEW.

Ejercicio 1 Utilizando 7 Leds conectados a 7 pines del puerto paralelo, encender cada uno en orden secuencial. El programa debe repetir el ciclo hasta tanto el usuario lo desee. Arquitectura VISA. VISA: Virtual Instrument Software Architecture. Aprobado para lograr estandarizar la manera de obtener y pedir datos desde y hacia instrumentos de medicin (VXIplug&play Systems Alliance). Entre esta estandarizacin se incluyen los dispositivos de comunicacin serie y paralelo. NI-VISA: Es la solucin de National Instruments para VISA. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Es importante revisar cuales son las caractersticas del puerto paralelo: 10. Su conector posee 25 pines de salida. 11. De estos 25 pines hay 8 (del 2 al 9) que corresponden al puerto de salida que se encuentra generalmente en la direccin 378h. 12. Para que no ocurra un error de escritura el puerto las seales correspondientes a Papel Out (pin 12) y Busy (pin 11) deben estar conectadas a tierra. De esta manera la computadora no percibe ningn error y enva la informacin.

Para configurar el puerto a travs del cual se recibirn y/o introducirn los datos es necesario utilizar un control de recursos denominado VISA Resource Name controles. en la paleta de

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

213

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos aadir a nuestra interfaz un arreglo de Led que simulen el comportamiento de los leds reales que estn conectados a cada uno de los pines del puerto paralelo.

La interfaz quedar de la siguiente manera:

Antes de enviar los datos hacia el puerto paralelo debemos abrir una sesin VISA. Para ello debemos utilizar la funcin Visa Open que se encuentra en la paleta de funciones:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

214

Departamento de Automtica y Computacin

18/11/2006

Esta funcin necesita el nombre del recurso que abrir, en este caso el que proviene del control VISA. El cdigo queda de la siguiente forma:

Solo necesitamos enviar datos a travs del puerto paralelo. Para ello es necesario obtener la funcin indicada para ello -> -> :

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

215

Departamento de Automtica y Computacin

18/11/2006

Esta funcin es muy sencilla toda vez que debemos pasarle el recurso abierto y la cadena de caracteres que se quiere escribir en el puerto.

Los datos que se enviarn deben estar en formato de cadena de caracteres, sin embargo, hasta este momento tenemos un tipo de dato arreglo. Por esta razn debemos realizar una conversin de tipos, para ello utilizaremos la funcin Array To Spreadsheet String:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

216

Departamento de Automtica y Computacin

18/11/2006

La posicin inicial de cada uno de los 7 pines que conectaremos estar dada de manera tal que el pin 2 tendr valor 5 V o 1 lgico, mientras que los dems (3-8) estarn en 0 V o 0 lgico. Esto puede representarse por un arreglo constante de 7 variables booleanas. Luego debemos rotar este arreglo de manera tal que el valor verdadero que esta en el elemento inicial se desplace por cada una de las 7 posiciones. Para ello utilizaremos la funcion Rotate 1D Array que se encuentra:

Esta funcin recibe como parmetro la cantidad de elementos que debe rotar. El cdigo que finalmente realiza lo que buscamos es el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

217

Departamento de Automtica y Computacin

18/11/2006

Observaciones: se encuentra la paleta de funciones matemtica y devuelve el cociente La funcin y resto de la divisin entre los nmeros. Queremos rotar el primer elemento del arreglo desde el lugar 0 hasta el 6. Estos son los resultados posibles que se obtienen de cada resto al dividir i entre 7. El resultado se indica en el arreglo de volanos que simula los leds reales. El arreglo rotado es convertido en su correspondiente nmero entero y este a su vez en el carcter correspondiente debido a que la funcin Visa Write as lo requiere. Para realizar estas conversiones se utilizaron las funciones Bolean Array to Number Type Cast que situada en la Paleta de funciones booleanas y la funcin convierte un numero entero en su correspondiente carcter ASCII. Esta se encuentra en:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

218

Departamento de Automtica y Computacin

18/11/2006

Antes de finalizar debemos cerrar el recurso abierto. Para ello creamos otra variable local del recurso y creamos otra secuencia despus del ciclo principal y utilizamos la funcin VISA Close

El cdigo que se debe programar en esta ltima secuencia es muy simple:

El cdigo final queda:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

219

Departamento de Automtica y Computacin

18/11/2006

Estudio individual: Realice un programa en LabVIEW sea capaz de encender una lmpara de 7 segmentos.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

220

Departamento de Automtica y Computacin

18/11/2006

TEMA XII Comunicacin TCP-IP en LabVIEW Saber configurar una Transmisin TCP-IP. Saber realizar lecturas del puerto TCP-IP utilizando LabVIEW. Saber realizar escrituras en el puerto TCP-IP utilizando LabVIEW.

Ejercicio 1 Hacer un programa que permita, una vez configurado el puerto TCP-IP, enviar diez muestras de datos aleatorios que simulen lecturas de nivel en un tanque. El nivel vara entre 0 y 10 m. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Es importante revisar cuales son lo parmetros de configuracin del puerto TCP-IP: 13. Establecer los parmetros del Servidor TCP-IP. a. Establecer el nmero de puerto desde donde se aceptarn conexiones. b. Crear el servicio. c. Esperar por que un cliente se conecte.

Por Convenio haremos que la aplicacin servidora es la genera los datos. La ejecucin de esta aplicacin tiene como primer paso la creacin del servicio. Por lo tanto se utilizar una estructura secuencia dnde, antes de entrar al ciclo principal, se crea el servicio TCP-IP.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

221

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos agregar una secuencia pero que se ejecute antes de que se entre en el ciclo principal de la aplicacin, para ello se da clic derecho sobre la estructura secuence y se selecciona la opcin Add Frame Before. El cdigo es:

Como es de esperar es una secuencia vaca. Antes de crear el servicio debemos introducir un control donde se introduzca el nmero de puerto que identificar la conexin. Para ello utilizaremos un control Numeric del tipo U16

El panel Frontal queda diseado de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

222

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos utilizar la funcin: TCP Create Listener que abre un puerto y lo reserva para la aplicacin actual que har funcin de servidora. Ella se encuentra en la paleta de funciones dentro de: -> ->

Ya est creado el servicio, sin embargo debemos utilizar otra funcin que permite esperar a nuestro programa hasta que un cliente se conecte. La funcin esta en la misma paleta y se denomina TCP Wait On Listener -> ->

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

223

Departamento de Automtica y Computacin

18/11/2006

El cdigo de apertura es el siguiente:

Observaciones: A la salida de la funcin TCP Create Listener se obtiene un idntificador de conexin que sirve de parmetro de entrada a la funcin TCP Wait On Listener A su vez la funcin TCP Wait On Listener devuelve este parmetro que debe utilizarse como referencia a la hora de escribir o recibir datos hacia o desde el cliente. Debe cuidar que la conexin se haga sobre el parmetro Connection ID y no sobre Listener ID Out

Ya tenemos abierto el puerto TCP-IP por lo que estamos listos para enviar datos a travs del mismo. Segn los requerimientos de la aplicacin colocaremos un indicador de nivel que visualizar las mediciones aleatorias y un control booleano mediante el cual se generarn los datos y se enviarn al puerto. Adems, colocaremos un indicador de tipo arreglo que contendr las diez muestras generadas, de manera que podamos ver cuales han sido los datos enviados. La interfaz quedar de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

224

Departamento de Automtica y Computacin

18/11/2006

La accin mecnica del botn Enviar Datos debe ser Latch When Pressed, ya que al pulsar este botn solo debe ejecutarse el cdigo asociado una sola vez. Generar diez nmeros aleatorios es un cdigo conocido:

Observaciones: Solo cuando se ejecute el botn enviar datos ejecutar el lazo generando 10 valores aleatorios. Cada valor aleatorio se visualizar en el indicador tank (si desea verlo debe introducir una demora en tiempo)!Hgalo

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

225

Departamento de Automtica y Computacin

18/11/2006

Al finalizar el ciclo obtendremos un arreglo de diez valores entre 0 y 10 El ciclo se repetir al presionar el botn una sola vez debido a su accin mecnica.

Solo nos resta enviar estos valores a travs del puerto. Para ello es necesario obtener la funcin indicada para ello TCP Write -> ->

Esta funcin es muy sencilla toda vez que debemos pasarle el identificador de conexin abierto en la secuencia anterior y la cadena de caracteres que se quiere escribir en el puerto serie. El cdigo es el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

226

Departamento de Automtica y Computacin

18/11/2006

Los datos que se enviarn deben estar en formato de cadena de caracteres, sin embargo, hasta este momento tenemos un tipo de dato arreglo. Por esta razn debemos realizar una conversin de tipos, para ello utilizaremos la funcin Array To Spreadsheet String:

Esta funcin convierte una arreglo de valores reales en una cadena cuyo contenido sern los nmeros que pertenecen al arreglo separados por el tabulador Tab y con un formato de %.2 que indica una precisin de dos valores despus de la coma. El cdigo final de la aplicacin queda segn se muestra a continuacin:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

227

Departamento de Automtica y Computacin

18/11/2006

Antes de finalizar debemos cerrar la conexin abierta. Para ello creamos otra secuencia despus del ciclo principal y utilizamos la funcin TCP Close Connection

El cdigo que se debe programar en esta ltima secuencia es muy simple:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

228

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 2 Realice un programa que permita leer los valores enviados al puerto TCP-IP de la computadora utilizando el ejemplo anterior. El programa debe graficar los valores obtenidos.

Parmetros del Cliente TCP-IP. 1. Establecer el nmero de puerto desde donde se aceptarn conexiones 2. Establecer la direccin IP del servidor que ofrece el servicio. Solucin: Para dar solucin a este ejercicio es necesario abrir una conexin TCP-IP en un servidor. Es por ello que ahora necesitamos un control con el nmero de puerto que identifica a la conexin adems de un control de cadena que contenga la direccin IP deonde se encuentra el servicio el panel frontal es:

La funcin que abre una conexin en el servidor se denomina TCP Open Connection y se encuentra en la paleta de funciones: -> ->

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

229

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

230

Departamento de Automtica y Computacin

18/11/2006

Para leer la informacin que se recibe a travs del puerto TCP-IP se utiliza la funcin TCP Read. Para ello es necesario pasar como parmetro la cantidad de bytes que se recibirn. Sabemos que enviaremos 10 nmeros menores que 10 en formato %.2f esto significa que recibiremos:

1*10 caracteres = 10 caracteres antes de la coma 2*10 caracteres = 20 caracteres despus de la coma 1*10 caracteres = 10 caracteres coma en cada nmero 1*10 caracteres = 10 caracteres separadores 1 carcter fin de lnea. Total = 51 caracteres. Es por esto que nuestro programa puede esperar a que estn los 51 bytes para luego efectuar una lectura completa.

La funcin TCP Read

->

->

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

231

Departamento de Automtica y Computacin

18/11/2006

El cdigo es:

Observaciones: Al igual que el ejemplo anterior debemos pasarle el identificador de conexin que se obtiene en la secuencia anterior. El ciclo no culminar hasta tanto no lleguen 51 bytes.

Ahora solo resta convertir la cadena de caracteres en un arreglo de valores que sea capaz de trazarse en una grfica WaveformGraph. Para ello se realiza el proceso inverso utilizando ahora la funcin SpreadSheet String to Array.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

232

Departamento de Automtica y Computacin

18/11/2006

El Cdigo es:

Observaciones:

La funcin SpreadSheet String to Array recibe por defecto un arreglo de dos dimensiones. En nuestro caso se utilizar un arreglo unidimensional, por lo que debemos especificar su tipo utilizando un arreglo constante [DBL]. El formato especificado debe coincidir con el de la aplicacin precedente de manera que sean compatibles (%.2f) Debe incluir una secuencia, al igual que en el ejemplo anterior, que cierre el recurso abierto.

Para que se visualicen mejor los datos aqu tambin colocamos un indicador de tipo arreglo que muestre los valores recibidos. El panel frontal queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

233

Departamento de Automtica y Computacin

18/11/2006

Indicaciones para ejecutar la aplicacin. 6. 7. 8. 9. 10. Usted debe introducir el mismo nmero de puerto en una y otra aplicacin. Correr la aplicacin servidora (escritura). Correr la aplicacin cliente (lectura). Presionar el botn enviar. La direccin IP en el cliente puede ser 127.0.0.1 en caso de que ambas aplicaciones se ejecutan sobre la misma PC.

Estudio individual: Realice un programa en LabVIEW que simule un Chat punto a punto utilizando el puerto TCPIP. Asuma que los mensajes son siempre de tamao fijo (50 caracteres) en caso de que sea menor debe completar con espacios.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

234

Departamento de Automtica y Computacin

18/11/2006

TEMA XIII Comunicain DDE Realizar intercambio de datos a travs del protocolo DDE. Ejercicio 1 Hacer un programa que publique diez muestras de datos aleatorios que simulen lecturas de nivel en un tanque. El nivel vara entre 0 y 10 m. Solucin: Como toda aplicacin esta debe comenzar con la realizacin del cdigo necesario para ejecutar y terminar la aplicacin. Para ello debe colocar un botn booleano de salida y realizar el cdigo siguiente:

Es importante revisar cuales son los parmetros que permiten publicar datos utilizando el protocolo DDE: 14. Establecer los parmetros del Servidor DDE. a. Crear el Servicio y el Tema b. Crear una Variable dentro del tema abierto c. Enviar Datos. Por Convenio haremos que la aplicacin servidora es la genera los datos. La ejecucin de esta aplicacin tiene como primer paso la creacin del servicio. Por lo tanto se utilizar una estructura secuencia dnde, antes de entrar al ciclo principal, se crea el servicio, tema y variable DDE.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

235

Departamento de Automtica y Computacin

18/11/2006

Ahora debemos agregar una secuencia pero que se ejecute antes de que se entre en el ciclo principal de la aplicacin, para ello se da clic derecho sobre la estructura secuence y se selecciona la opcin Add Frame Before. El cdigo es:

El servicio que crearemos se llamara LabVIEWDDE, dentro de este servicio crearemos un tema denominado Datos y una variable denominada Valores

Las funciones DDE no estn disponibles en la Paleta de funciones, por lo que debemos buscarlas nosotros mismos:

que se encuentra en la parte inferior de la paleta de Para ello presionamos el botn: funciones. Cuando se abra el cuadro de dilogo nos dirigimos hacia el camino: C:\Program Files\National Instruments\LabVIEW 6.1\vi.lib\platform y seleccionamos la biblioteca dde.llb que contiene las funciones que buscamos.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

236

Departamento de Automtica y Computacin

18/11/2006

Al abrir una librera .LLB se muestra un cuadro como el siguiente:

Ahora debemos utilizar la funcin de la librera: DDE Srv Register Server que se encuentra en la parte inferior de la lista. Para colocarla en el codigo debe seleccionarla y presionar OK en el cuadro de dilogo. La ayuda asociada es la siguiente:

Adems de esta funcin debemos usar la funcin DDE Srv Register Item que se obtiene de forma similar a la anterior ya que se encuentra en la misma librera. Su ayuda es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

237

Departamento de Automtica y Computacin

18/11/2006

El cdigo de apertura es el siguiente:

Observaciones: A la salida de la funcin DDE Srv Register Server se obtiene un idntificador de conexin que sirve de parmetro de entrada a la funcin DDE Srv Register Item A su vez la funcin DDE Srv Register Item devuelve este parmetro que debe utilizarse como referencia a la hora de escribir o recibir datos hacia o desde los clientes DDE.

Ya tenemos abierto el servicio DDE por lo que estamos listos para enviar datos a travs del mismo. Segn los requerimientos de la aplicacin colocaremos un indicador de nivel que visualizar las mediciones aleatorias y un control booleano mediante el cual se generarn los datos y se enviarn al puerto. Adems, colocaremos un indicador de tipo arreglo que contendr las diez muestras generadas, de manera que podamos ver cuales han sido los datos enviados. La interfaz quedar de la siguiente manera:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

238

Departamento de Automtica y Computacin

18/11/2006

La accin mecnica del botn Enviar Datos debe ser Latch When Pressed, ya que al pulsar este botn solo debe ejecutarse el cdigo asociado una sola vez. Generar diez nmeros aleatorios es un cdigo conocido:

Observaciones: Solo cuando se ejecute el botn enviar datos ejecutar el lazo generando 10 valores aleatorios. Cada valor aleatorio se visualizar en el indicador tank (si desea verlo debe introducir una demora en tiempo)!Hgalo Al finalizar el ciclo obtendremos un arreglo de diez valores entre 0 y 10 El ciclo se repetir al presionar el botn una sola vez debido a su accin mecnica.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

239

Departamento de Automtica y Computacin

18/11/2006

Solo nos resta enviar estos valores a travs del servicio DDE. Para ello es necesario obtener la funcin indicada para ello DDE Srv Set Item

Esta funcin es muy sencilla toda vez que debemos pasarle el identificador del servicio e tem abierto en la secuencia anterior y la cadena de caracteres que se quiere escribir en el puerto serie. El cdigo es el siguiente:

Los datos que se enviarn deben estar en formato de cadena de caracteres, sin embargo, hasta este momento tenemos un tipo de dato arreglo. Por esta razn debemos realizar una conversin de tipos, para ello utilizaremos la funcin Array To Spreadsheet String:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

240

Departamento de Automtica y Computacin

18/11/2006

Esta funcin convierte una arreglo de valores reales en una cadena cuyo contenido sern los nmeros que pertenecen al arreglo separados por el tabulador Tab y con un formato de %.2 que indica una precisin de dos valores despus de la coma. El cdigo final de la aplicacin queda segn se muestra a continuacin:

Antes de finalizar debemos cerrar el tem registrado y el servicio abierto. Para ello creamos otra secuencia despus del ciclo principal y utilizamos las funciones DDE Srv Unregsiter Item DDE Srv Unregsiter Service que se obtienen de la misma forma que las anteriores.

El cdigo que se debe programar en esta ltima secuencia es muy simple:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

241

Departamento de Automtica y Computacin

18/11/2006

Ejercicio 2 Realice un programa que permita leer los valores enviados DDE utilizando el ejemplo anterior. El programa debe graficar los valores obtenidos. Solucin: Para dar solucin a este ejercicio es necesario abrir una conexin DDE en un servidor. La funcin que abre una conexin en el servidor se denomina DDE Open Conversation y se encuentra en la misma librera de funciones que se utilizo en el ejercicio anterior:

Esta funcin necesita que se le pasen como parmetro el nombre del servicio y el tema o tpico que se utilizar, el cdigo es el siguiente:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

242

Departamento de Automtica y Computacin

18/11/2006

El siguiente paso es realizar la lectura de los datos que se reciben a travs de esta conexin. Para ello creamos una secuencia posterior y luego nos posicionamos en un ciclo hasta tanto el usuario desee culminar el programa. El cdigo queda:

Para leer la informacin que se recibe a travs de DDE se utiliza la funcin DDE Request. Que se encuentra de nuavo el la librera de funciones. Esta funcin debe recibir el identificador de la conexin abierta y que variable de servidor va a leer. Si se recuerda del ejemplo anterior esta se llama Variable.

El cdigo es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

243

Departamento de Automtica y Computacin

18/11/2006

Observaciones: Al igual que el ejemplo anterior debemos pasarle el identificador de conexin que se obtiene en la secuencia anterior.

Ahora solo resta convertir la cadena de caracteres en un arreglo de valores que sea capaz de trazarse en una grfica WaveformGraph. Para ello se realiza el proceso inverso utilizando ahora la funcin SpreadSheet String to Array.

El Cdigo es:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

244

Departamento de Automtica y Computacin

18/11/2006

Observaciones:

La funcin SpreadSheet String to Array recibe por defecto un arreglo de dos dimensiones. En nuestro caso se utilizar un arreglo unidimensional, por lo que debemos especificar su tipo utilizando un arreglo constante [DBL]. El formato especificado debe coincidir con el de la aplicacin precedente de manera que sean compatibles (%.2f) Debe incluir una secuencia, al igual que en el ejemplo anterior, que cierre el recurso abierto.

Para que se visualicen mejor los datos aqu tambin colocamos un indicador de tipo arreglo que muestre los valores recibidos. El panel frontal queda como sigue:

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

245

Departamento de Automtica y Computacin

18/11/2006

Indicaciones para ejecutar la aplicacin. 11. Correr la aplicacin servidora (escritura). 12. Correr la aplicacin cliente (lectura). 13. Presionar el botn enviar.

Estudio individual: Realice un programa en LabVIEW que sea DDE cliente en labVIEW y que se comunique con una hoja de clculo Excel para leer el valor de la columna 1 y la fila 1. Para ello se debe conocer que Excel es una aplicacin servidora DDE por excelencia y que los parmetros para conectarse son: Servicio: Excel Tpico: Libro1.xls (nombre con que se salva una hoja Excel) Item: L1C1 (fila uno columna uno) Nota: para acceder a cualquier elemento de una hoja Excel basta con saber que L significa Lnea (Fila) y C significa Columna. De esta forma si quisiramos saber el valor de la fila 3 columna 5 el valor que utilizaramos en Item ser L3C5.

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

246

Departamento de Automtica y Computacin

18/11/2006

Dr.Valery Moreno Vega y Msc.Adel Fernndez Prieto.

247

Potrebbero piacerti anche