You are on page 1of 246

Indices

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






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++,
J ava, 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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 2



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.
















































Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 3



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
Programacin
+


Figura1: Esquema general


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 4


Ambiente de Desarrollo
odo ambiente de desarrollo testa formado por los siguientes elementos. Es importante que se
epuracin
s de ruptura.
.
variables
Fac a
bservar el estado de las pantallas que estamos desarrollando.

enguaje de Programacin.
abVIEW usa el lenguaje de programacin grfico Lenguaje G. Las posibilidades son
Sentencias (Grficos) de control de Flujo y repetitivas.
n de funciones. Trabajo con los eventos y
p
didas para cualquier tarea de programacin.

lgo muy caracterstico de LabVIEW y es por ello que se considera una herramienta para el
Tarjetas de adquisicin de datos
a (Puerto serie y paralelo). Arquitectura VISA.
atos.
y otros).

Cmo se trabaja con el LabVIEW?
os programas en LabVIEW son llamados Instrumentos Virtuales (y son salvados con la
os programas de LabVIEW constan de un panel frontal y un diagrama de bloques. En el panel

T
busque y se practiquen con frecuencia ya que esto permite que el desarrollo de las
aplicaciones se realice con mayor rapidez y calidad.

D
Punto
Ejecucin paso a paso
Ventana de seguimiento a
ilid des de desarrollo
Panel frontal: Para o
Paletas de funciones y controles para adicionar a nuestro proyecto.
Herramientas para alinear los controles y funciones.
L


L
normalmente las mismas que presenta cualquier lenguaje de programacin:

Posibilidad de declaracin de variables.
Modularidad a travs de la confecci
ropiedades de los controles y variables.
Incluye bibliotecas de funciones exten
Basado en objetos pero no permite nuevas declaraciones.
Mecanismos de conexin con lenguaje C y C++y DLL.
A
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

Bus GPIB.
Entrada/ Salid
Anlisis de seales.
Almacenamiento de d
Comunicacin (TCP-IP, UDP
Matemticas.


L
extensin .VI).

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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 5



Programas de LabView (*.vi)
Panel Frontal Diagrama Bloques +
Lenguaje G
Diseo de interfaz


Cara del
instrumento virtual

El Panel Frontal
l panel frontal de un VI es una combinacin de controles e indicadores. Los controles son
indicadores al panel frontal se seleccionan estos de la paleta de
os controles:

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

L
os al diagrama en bloques por mediacin del teclado o el ratn,

Entregan dat
Simulan dispositivos de entrada de datos del VI

Los indicadores
Muestran datos en el panel frontal desde el diagrama en bloques para ser visualizados

s
Simulan los dispositivos de salida de datos del VI.


Lgica del programa

El Diagrama en Bloque

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 6


La ventana Diagrama almacena el diagrama en bloques del VI, el cdigo fuente grfico
nstrumento Virtual.

funcionales denominados nodos,
conectndose o unindose entre s segn sea el objetivo.
rias para el VI y controlan
flujo de la ejecucin del VI.

Tipos de
os de Datos en LabView
I32 32 (4 bytes) -2147483648 hasta 2147483647
(Lenguaje G) del I
Se construye este diagrama con bloques

Estos nodos realizan todas las funciones especficas necesa
el

Datos en LabView

Tabla 3.1 Tip
Long
Word I16 sta 32767 16 (2 bytes) -32768 ha
Byte I8 8 (1 bytes) -128 hasta 127
Long Unsigned U32 32 (4 bytes) 0 hasta 4294967295
Word Unsigned 6 U1 16 (2 bytes) 0 hasta 65535
Byte Unsigned U8 8 (1 bytes) 0 hasta 255
Extended EXT 96 (12 bytes) +515 -1.00E507 hasta 9.00E
Double DBL asta 1.70E+308 64 (8 bytes) -5.00E-324 h
Single SGL 32 (4 bytes) -1.40E-45 hasta 3.40E+38
Complex Extended ) CXT 192 (24 bytes -1.00E507 hasta 9.00E+515
Complex Double 8 CDB 128 (16 bytes) -5.00E-324 hasta 1.70E+30
Complex Single CSG 64 (8 bytes) -1.40E-45 hasta 3.40E+38
Cadena(String) abc 1 byte/caracter Conjunto de Caracteres ascii.
Arreglos(Array) [...] Segn el tipo de los elementos del arreglo
Grupos (Cluster)
Path
Device


Cmo se declaran los tipos de variables numricas ?
rontal, LabView pone un terminal
correspondiente a este control o indicador en el diagrama en bloque.
les fuente y los
rminal fuente a varios terminales destino.


Cuando se pone un control o indicador en el panel f
Este terminal desaparece solo cuando se borra el control o indicador.
Los enlaces o alambres son los caminos de los datos entre los termina
terminales destino.
No se permite enlazar dos terminales fuentes ni dos terminales destinos, y si se
permite enlazar un te
Representacin onfiguracin C

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 7



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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 8


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 . A
continuacin aparece una ventana simular a la que se presenta a continuacin:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 9




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 10




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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 11




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 12





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 13







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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 14




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 15


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 16




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:











Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 17















































Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 18










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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 19


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 20




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 21




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
stop (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
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.




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 22





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
variables que representan a los indicadores. Para ello debemos utilizar el cursor que se
puede obtener utilizando la tecla (Tab) o seleccionndolo directamente en la paleta de
herramientas tools Palette. Una vez conectados el cdigo queda como sigue:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 23




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 24




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:




El botn permite ejecutar la aplicacin, mientras qu el botn permite terminar de
ejecutar la aplicacin.

Para realizar una pausa debemos utilizar el botn , 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.

Un botn muy interesante es que ejecuta la aplicacin de manera continua pero
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 25





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 26





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 27




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.
















Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 28


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 . A
continuacin aparece una ventana simular a la que se presenta a continuacin:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 29




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 y se representa en el men controls con el smbolo .
Aparecer algo similar a:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 30



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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 31


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:






Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 32




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 33




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
stop (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 34




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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 35


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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 36





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
smbolo: que recibe dos valores y devuelve la multiplicacin de ambos. Adems de esta
propia paleta debe utilizarse una constante numrica entera que contenga el valor 100
que ser el otro elemento necesario.

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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 37




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 que se
selecciona de la siguiente manera:

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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 38




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 39





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 if-
then-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
Comparison la funcin Select esta instruccin retorna el valor conectado en t o f
en dependencia del valor de s. Si s es verdadero retorna t, en caso contrario retorna f. t
y 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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 40















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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 41




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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 42






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 Panel Frontal

3. Adicionar un control numrico.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 43




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 44



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
stop (verde ), en la ventana del diagrama. Mientras esta variable sea verdadera se debe
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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 45




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 46


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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 47


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 48




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
valor del ao actual
2002
y un operador de resta desde la paleta de funciones numricas. Al
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 y si se quiere ejecutar en modo de depuracin
se pueden escoger las variantes ya estudiadas. .



Ejercicio 3


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 49


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
meses del ao. Para ello se selecciona el cursor en la paleta de herramientas o se utiliza la

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 50


tecla tab hasta que el cursor en la pantalla quede de la siguiente manera . Luego se
coloca el cursor dentro del indicador y se introduce el primer nombre enero, para introducir
otro mes se da clic derecho sobre el control y se selecciona la 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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 51


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
Subset que recibe como parmetros una cadena, la cantidad de caracteres que se
quieren tomar y el desplazamiento o ndice a partir de donde se tomara la subcadena.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 52


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
de depuracin se pueden escoger las variantes ya estudiadas. . Al correr el
programa se puede percibir que el mes que se obtiene est desplazado en uno con el que
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 53






















Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 54


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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 55



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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 56



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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 57



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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 58


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 V(i) V(i-1) V(i-2) V(i-3) V(i-4) V(i-5)
0 5 - - - - -
1 3 5 - - - -
2 0.7 3 5 - - -
3 1 0.7 3 5 - -
4 -1 1 0.7 3 5 -
5 0 -1 1 0.7 3 5
6 2 0 -1 1 0.7 3

y as sucesivamente....

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


Al seleccionar de dicho men la ltima 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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 59


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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 60




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.





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 61



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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 62






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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 63




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 64


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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 65



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 de
extrado el
componente
Subcadena
despus de
extraer el
separador (/)
8/02/2005 0 8 /02/2005 02/2005
02/2005 1 02 /2005 2005
2005 2 2005

Como se puede apreciar por cada 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?):

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 66




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 67




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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 68




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 69



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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 70




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 71




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 72



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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 73





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 74



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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 75




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 76





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 77






Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 78


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 79







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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 80






Esta estructura est representada por un marco y un titular que representa el
rea donde se programa el cdigo asociado a la condicin de
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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 81


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:






Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 82





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 que
decidir segn su estado booleano cual cdigo realizar.




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 83






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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 84





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 85




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 86




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
punto segn las figuras siguientes:



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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 87




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 la paleta
de funciones numricas. El cdigo queda de la siguiente manera.



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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 88




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
seleccionando las flechas del titular , que muestra el marco de trabajo actual y la
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 89




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





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 90



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 Y
2
=(R
2
- X
2
).



Ejercicio 3:

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

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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 91




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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 92




Ahora usted puede notar que se aade un nuevo marco a la estructura de eventos con el
titular: lo que quiere decir que todo el cdigo que se
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




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 93















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.




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 94



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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 95




(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
es necesario (note que existe el indicador de indice para poder movernos entre los
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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 96




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 97




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




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 98


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 99






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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 100




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
Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 101


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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 102



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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 103



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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 104




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 105




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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 106





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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 107






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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 108


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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 109




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 110




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 111




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 112




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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 113




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 114


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:



y



El cdigo final se muestra en la siguiente figura:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 115




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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 116



TEMA VII Controles Forma de Onda. Implementacin de Funciones en LabVIEW

Aprender a utilizar los controles de tipo Forma de Onda
Aprender a realizar funciones (SubVI) 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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 117




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 118






Cualquier valor asociado con la grfica: Por ejemplo la etiqueta Waveform Chart o el valor
nmero e pueden modificar utilizando el cursor , tambin se puede modificar tanto la
escala en X o la Y.

El cdigo ahora muestra una variable de tipo DBL.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 119





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 120




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
ajustar la escala podemos hacerlo directamente con el cursor o dando clic derecho sobre la
grfica y seleccionando AutoScale X y AutoScale Y dentro de
X Scale y Y Scale respectivamente.












Ahora el resultado es:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 121





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 122




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





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 en la parte superior
derecha de la grfica. El resultado es el siguiente:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 123





Utilizando el cursor colocamos los nombres representativos de cada curva y si damos clic
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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 124




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



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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 125


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 X
0
y dX. Esto puede
ser modificado si en vez de conectar directamente el arreglo a la grfica utilizamos un cluster
que posea X
0
(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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 126




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


El resultado es:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 127



Observaciones:
Este tipo de grficos es muy til cuando el eje X est vinculado con el tiempo de adquisicin de
muestras. Por ejemplo: X
0
: 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:




Esta grfica es de tipo de datos Cluster el cluster que recibe est compuesto por dos
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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 128




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)


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 129


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 130







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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 131




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 132







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



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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 133





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
el rea del conector que va vincular con el cursor y luego seleccionar el control que servir
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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 134


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 135






Ahora aadiremos una tabla al panel frontal:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 136




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 137




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 X
0,j
de la matriz representan la fila 0
Los elementos X
1,j
de la matriz representan la fila 1
Los elementos X
i,0
de la matriz representan la columna 0.
Los elementos X
i,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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 138




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


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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 139





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 140















Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 141



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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 142



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
selecciona la opcin con lo cual la etiqueta del botn queda libre y
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 143




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 144



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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 145








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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 146




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 147




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 148




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 x
2
. Las
pantallas de cdigo y frontal para este ejercicio finalmente quedan:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 149






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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 150




Ejercicio 3:

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


Temperatura Habitacin 24 F
Consumo Elctrico 1000 V
: : :
: : :

Solucin:

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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 151


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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 152


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 153




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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 154


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 155


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 156




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
funcin y un tercer elemento siendo un carcter V (true) o un carcter F (false)
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 157




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 158




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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 159


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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 160


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.





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 161





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 162




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 (J P7). 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 J P7 existen 4 rangos
programables en cada caso. Para codificar estos cuatro estados son necesarios dos bits, ya
qu 2
2
=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 D7 D6 D5 D4 D3 D2 D1 D0
Value N/A N/A N/A N/A N/A N/A G1 G0

N/A: no importa cual es su valor
Rango de Entrada Cdigo del Rango
JP = 5 JP = 10 G1 G0
5 10 0 0
2.5 5 0 1
1.25 2.5 1 0
0.625 1.25 1 1


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 163


Para programar esta paso es necesario que el usuario sepa cual es el estado del interruptor
J P7. 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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 164


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
respectivamente. Si queremos cambiar el valor del control seleccionamos el cursor y
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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 165




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 166


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


Como existen 16 canales de entrada como mximo, codificar cada canal conlleva utilizar 4 bits
ya que 2
4
=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 D7 D6 D5 D4 D3 D2 D1 D0
Value 0 1 0 1 0 0 1 0

Valor del registro: 52 hexadecimal o 82 en decimal.


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

Valor del registro: 33 hexadecimal o 51 en decimal.


Para programar esta opcin debemos tener dos controles que me brinden Canal Inicio (entre 0-
15) 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)



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 167




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)



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 168


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 169




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 170





Observaciones:

En este paso si es necesario modificar los bits correspondientes al canal de inicio y al
canal de parada.

Para escribir comentarios en el cdigo se utiliza el cursor directamente sobre el diagrama.


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:

Por software
Por Hardware

Si:

ST1

ST0 Disparo
0 X Disparo por Software
1 0 Disparo por Hardware
1 1 Disparo por ?




BASE +9 (MODO ESCRITURA) Control
Bit D7 D6 D5 D4 D3 D2 D1 D0
Value NTE I2 I1 0 X DMAE ST1 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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 171


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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 172




Para dibujar el Icono correspondiente a la funcin damos clic derecho sobre la esquina superior
derecha y seleccionamos la opcin Edit Icon. Esto mustra la
ventana de edicin:




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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 173





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
el rea del conector que va vincular con el cursor y luego seleccionar el control que servir
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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 174




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 175








La ejecucin de esta aplicacin tiene como primer paso la configuracin de la tarjeta TAD PCL-
818L. 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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 176




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 177




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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 178


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 179


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 D7 D6 D5 D4 D3 D2 D1 D0
Value EOC N/A MUX NT CN3 CN2 CN1 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)

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 180





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 Hexadecimal Binario
82 52 0101 0010

indice 7 6 5 4 3 2 1 0
valor false true false true false false true 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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 181





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 D7 D6 D5 D4 D3 D2 D1 D0
Value AD3 AD2 AD1 AD0 C3 C2 C1 C0
ASE +1 (MODO LECTURA)
Bit D7 D6 D5 D4 D3 D2 D1 D0
Value AD11 AD10 AD9 AD8 AD7 AD6 AD5 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 2
12
=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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 182


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 1001 1010 0000 0000
BASE+0 OR 1011 0001
Variable de 16 bits 1001 1010 1011 0001



Operacin 4

Eliminar 4 bits menos significativos (dividir por 16):

Variable de 16 bits 1001 1010 0000 0000

Rotados

Variable de 16 bits 0000 1001 1010 1011

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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 183




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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 184





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 J P7 y luego de los rangos configurados por software.

Por ejemplo si se sabe que este rango es 10V sera

Valor convertido =0 implica -10V

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 185


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.






Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 186




Para seleccionar los rangos de voltaje necesitamos que el usuario diga cual el la configuracin
del J P7. 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:

1,25 10,00 5,00 2,50
0
Este arreglo constante define los rangos posibles cuando se
selecciona en el J P7 el valor 10 V

2,500 1,250 0,625 5,000
0
Este arreglo constante define los rangos posibles cuando se
selecciona en el J P7 el valor 5 V

El arreglo constante se define en la paleta de funciones:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 187




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:





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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 188





el arreglo queda
0,
0


El cdigo queda:



Note que la estructura sirve para seleccionar uno u otro arreglo constante en dependencia
del valor del control que representa el J P7. 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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 189





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



El cdigo queda:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 190


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 PCL-
818L.

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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 191






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)

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 192


Referencia Interna

Para escoger una de ellas se utiliza el interruptor J P4.

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 J P5.


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 2
12
=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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 193




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



El cdigo queda como sigue:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 194




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




El cdigo ahora debe quedar:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 195




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 196




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 197




El cdigo queda:



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

BASE +4 (MODO ESCRITURA)
Bit D7 D6 D5 D4 D3 D2 D1 D0
Value DA3 DA2 DA1 DA0 X X X X
BASE +5 (MODO ESCRITURA)
Bit D7 D6 D5 D4 D3 D2 D1 D0
Value DA11 DA10 DA9 DA8 DA7 DA6 DA5 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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 198


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 que e halla en la paleta de
funciones numricas:



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.




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 199


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. Establecer la velocidad de Tx y Rx (Baud rate).
5. Establecer la cantidad de bits de datos del protocolo de intercambio serie.
6. Establecer la cantidad de bits de parada del protocolo de intercambio serie.
7. Establecer la paridad del protocolo de intercambio serie.
8. 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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 200






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 en la paleta de
controles.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 201






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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 202






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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 203




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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 204


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 205




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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 206




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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 207






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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 208






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

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.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 209




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 210






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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 211





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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 212


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 en la paleta de
controles.

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 213







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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 214




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


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 215







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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 216





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 217




Observaciones:

La funcin se encuentra la paleta de funciones matemtica y devuelve el cociente
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
situada en la Paleta de funciones booleanas y la funcin Type Cast que
convierte un numero entero en su correspondiente carcter ASCII. Esta se encuentra
en:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 218


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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 219




Estudio individual:

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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 220


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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 221





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:






Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 222





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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 223




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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 224





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

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 225


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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 226





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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 227




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:

Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 228






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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 229










Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 230




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



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 231





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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 232




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 233






Indicaciones para ejecutar la aplicacin.

6. Usted debe introducir el mismo nmero de puerto en una y otra aplicacin.
7. Correr la aplicacin servidora (escritura).
8. Correr la aplicacin cliente (lectura).
9. Presionar el botn enviar.
10. 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 TCP-
IP. Asuma que los mensajes son siempre de tamao fijo (50 caracteres) en caso de que sea
menor debe completar con espacios.




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 234


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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 235





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:

Para ello presionamos el botn: que se encuentra en la parte inferior de la paleta de
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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 236


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:





Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 237


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 238




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.


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 239


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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 240




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:




Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 241



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:



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 242




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 243





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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 244




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:


Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 245






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.



Departamento de Automtica y Computacin Valery Moreno Vega & Adel Fernndez Prieto
http://visualinformatica.blogspot.com 246