Вы находитесь на странице: 1из 30

UNIVERSIDAD NACIONAL FEDERICO VILLARREAL

FACULTAD DE INGENIERÍA ELECTRÓNICA E INFORMÁTICA


ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA
Microelectrónica – IX CICLO

Profesor: Ing. Rubén Gil Chacaltana Sesión V


TEMA: Tipos de datos avanzados en LabVIEW

Objetivos:

• Crear y manipular arreglos.


• Agrupar distintos tipos de datos utilizando Clusters.
• Extraer datos de un Cluster.
• Crear y manipular variables globales y locales.

INTRODUCCIÓN

Muchas aplicaciones trabajan con gran cantidad de datos por lo que el trabajo con controles para
cada uno de éstos se hace poco recomendable; entonces existen otros tipos de datos derivados que
permiten llevar gran cantidad de información en una sola variable.
En este capítulo se verán estos tipos de datos derivados, los arrays que llevan información del mismo
tipo de dato y los cluster que llevan información de distintos tipos de datos.
Además, se crearán Sub VI’s, el equivalente a funciones en otros lenguajes haciendo con esto la
programación más portable.

ARRAYS.
Un array (matriz) es una colección de elementos de datos. Los elementos de datos en una matriz
pueden ser numéricos, booleanos, string (cadena) o cluster, pero de todos los elementos deben ser
del mismo tipo dentro del array. Los array pueden ser de uno o dos dimensiones.

Arrays de una dimensión:

El array (matriz) de una dimensión tiene elementos e índice. A continuación se muestra un array de
una dimensión de 10 elementos. Note que el primer elemento tiene el índice 0, el segundo elemento
tiene el índice1, etc.
Índice 0 1 2 3 4 5 6 7 8 9

Array de 10 elementos 1.2 3.2 8.2 8.0 4.8 5.1 6.0 1.0 2.5 1.7

a. Creando un Array de una Dimensión.


Un array es creado con la combinación de un contenedor de array con un objeto numérico,
booleano, string o cluster, para esta parte solo se hace referencia a los tipos de datos numéricos.
Para colocar un contenedor de array vació, en el Panel Frontal, seleccione de la paleta de
controles Controls>Array, Matrix&Cluster>Array, y colóquelo en el Panel Frontal.

Verá un contenedor de array vacío en el Panel Frontal y su terminal en el Diagrama de


Bloques.
Note que el Terminal del array en el Diagrama de Bloques de color negro indica que el
contenedor esta vació.
Luego, arrastre un objeto data (en nuestro caso un control numérico) dentro del contenedor
array. Este automáticamente se ajusta al tipo de data del objeto. Verá que el terminal del array
cambiará para indicar el tipo de data del array.

Y en el diagrama de bloques:

b. Añadiendo y Revisando el contenido del Array manualmente.


Por defecto solo se puede ver el primer elemento del array. Para poder ver más elementos del
array, selecciónelo con el mouse y alargue el array hacia la derecha. Asegúrese decoger el
contorno del marco general y no el marco del elemento interno.

La figura de arriba solo muestra los primeros cinco elementos del array. Todos los elementos
están vacíos. Para ingresar data en los elementos, seleccione los elementos uno a la vez e
ingrese la data. A manera de ejemplo se ingresa la data que tenga el mismo valor de los índices
del 0 al 4. Para desplazarse a través del array en forma manual, haga clic en la ventana del índice
para incrementar/decrementar su valor. Note que elemento actual indicado en el índice esta
siempre al lado izquierdo de la fila del array.

Arrays de dos dimensiones.

Este array (matriz) requiere de dos índices: un índice para la fila y un índice para la columna. Estos
índices son usados como direcciones para buscar los elementos de data en el array. Ambos índices
comienzan en cero como el array de una dimensión. A continuación, se presenta un array de 5-filas
y 7-columnas que pueden almacenar hasta 35 elementos de data.
Array (matriz) de 35 elementos → 5 filas x 7 columnas.

a. Creando un Array de dos dimensiones.


Crea un array de dos dimensiones modificando el array de una dimensión. Haga clic
derecho en el display y del menú seleccione AddDimension y la otra manera es
acercarse con el cursor en la parte inferior del display de índices hasta que tome la
apariencia de una doble flecha, a continuación, hacer clic y deslizar hasta la cantidad de
dimensiones que se requiera.

Creando Arrays de una dimensión con un Loop.

Crear y añadir data a arrays manualmente puede ser una tarea tediosa. Por tanto, los Loops son a
menudo usados para crear arrays de una y dos dimensiones. Tanto ForLoops y WhileLoops pueden
crear arrays y sus límites con auto-indexación. ForLoops comúnmente son más usados para crear
arrays. A continuación se muestra un ejemplo con un ForLoop que auto-indexa seis elementos, de
un array de una dimensión.

Note que, al conectar el número aleatorio a la salida array, éste mostrará los valores solo cuando el
for haya terminado su ejecución además de visualizarse de manera distinta a un tunel de conexión
(cuadro de color entero), y esto debido a que el for loop por defecto presenta un tunel con indexado,
es decir, los datos se almacenan hasta terminar con el bucle y los visualiza en un array.
Wire Tunnels (Tunel de Conexión)
Notará que cuando un cable (conexión) sale del loop se crea un túnel llamado WireTunnels. En este
caso tenemos un Indicador de Array (matriz) fuera del Loop porque queremos el dato al final de
todas las iteraciones del Loop.

Creando arrays de do dimensiones con Loops anidados.


Puede usar ForLoops anidados para crear Arrays de 2D. El loop exterior crea los elementos fila y el
loop interno crea los elementos columna. En el ejemplo siguiente se crea un Array 2D de seis
columnas y cuatro filas. El Display de los elementos de la matriz se ha redimensionado para mostrar
siete elementos de columnas y cinco elementos de fila. Note que la data no es rellenada solo se
rellenan al final de la última iteración.
Limpiando el Array de Datos
Para limpiar el Array de Datos, haga clic derecho en el Display de Índice y del menu seleccione
Data Operations > Empty Array.

Funciones de Array
Los Arrays pueden ser creados y controlados por Funciones de Array. Estos se encuentran en el
Diagrama de Bloques en la Paleta de Funciones Functions>Programming>Array.
a. ArraySize (Tamaño de la matriz)

Lafunción ArraySize retorna el número de elementos de la matriz a la cual ha sido


conectada.

b. InitializeArray

La función InitializeArray crea una matriz de dimensión especificada en dimensión size


cuyos elementos son inicializados con el valor especificado en element.

c. BuildArray

La función BuildArray vincula múltiples arrays. Indexa elementos a un array.


d. ArraySubset

La función ArraySubset retorna una porción de una matriz que comienza en el valor
conectado al Index(0) y contiene una cantidad de elementos indicado en la conexión de
Length.

Polimorfismo
Las funciones aritméticas como Add(suma), Multiply(multiplicación), Divide(división), etc. son
polimorfitas, esto significa que lla estructura de los datos en sus entradas puede ser escalares o
matrices. Si cualquiera de las entradas es una estructura de datos tipo matriz, la salida será una
estructura de datos tipo matriz. Si las entradas tienen una estructura de matrices de diferentes
dimensiones, la salida será una matriz del mismo tamaño que la matriz más pequeña que se haya
ingresado.
CLÚSTERS

a. Definición:

Un cluster, es análogo a un struct en la programación en C, combina uno o más tipos de datos en un


solo tipo de dato. El cluster puede contener diferentes tipos de data como un booleano, cadena o
enteros. El cableado en el Diagrama de Bloques que lleva data de un cluster puede pensarse como
un conjunto de alambres agrupados dentro de un cable telefónico.

b. Creando Controles e Indicadores Cluster en el Panel Frontal.

Puede crear controles e indicadores cluster en el Panel Frontal colocando un contenedor Cluster.
Los objetos dentro de un contenedor cluster debes ser todos controles ó todos indicadores.

Para crear un cluster vació en el Panel Frontal de la Paleta de Controles seleccione


Controls>Array&Cluster>Cluster.
Colóquelo en el Panel Frontal. Note que aparece el nodo cluster en el Diagrama de Bloques.

Puede cambiar de posición y redimensionar el tamaño del contenedor en el Panel Frontal, luego
coloque los controles deseados dentro del contenedor.

c. Creando un Indicador Cluster.


Para crear un Indicador Cluster en el Panel Frontal se realiza exactamente que, en los pasos
anteriores, excepto que se colocan indicadores dentro del contenedor cluster en vez de controles.
d. Conectando Dos Clusters
A continuación, se muestra una imagen de cómo puede conectar cluster uno indicador y el otro
control con un solo cable. Note que el tipo de Dato es Cluster y que transfiere tres tipos de datos
(numérico, booleano y cadena de caracteres) todos en un solo cable.

Orden de los Objetos en un Cluster.

Los objetos en el clusters tienen un orden lógico que es el orden en el cual los objetos fueron
colocados dentro del contenedor cluster. El primer objeto dentro del contenedor es el Componente
0, el segundo objeto colocado es el Componente 1, etc. El orden se ajusta automáticamente cuando
un componente es añadido o borrado.

Funciones Cluster en el diagrama de bloques.

a. Ensamblando un Cluster en el Diagrama de Bloque usando la Función Bundle.


Puede ensamblar componentes individuales en un único cluster usando la función bundle en el
Diagrama de Bloques. De la Paleta de Funciones seleccione Functions>Cluster>Bundle.
Coloque el mouse en la esquina inferior donde el mouse cambia a doble flecha, haga clic y arrástrelo
para añadir el número de entradas que se necesite y luego conecte cada componente.

a. Desensamblando un Cluster en el Diagrama de Bloque usando la función Unbundle.


Utilizando la función Unbundle se logra desensamblar el cluster en sus componentes, esta función
se encuentra en la Paleta de Funciones en Functions>Cluster>Unbundle.

A continuación, se muestra como las funciones bunble y unbundle trabajan juntas para ensamblar
y desensamblar clusters.
b. Usando el Terminal de Entrada Clusterde la Función Bundle para Reemplazar Objetos de un
Cluster.

Si conecta un cluster existente al Terminal de Entrada Cluster de la función Bundle (en la parte
superior), puede conectar nuevos objetos al cluster que reemplazará a uno o más de los objetos
existentes.

A continuación, se muestra un ejemplo con el cluster control e indicador que se creó anteriormente
se le ha añadido un control slider fuera del contenedor cluster en el Panel Frontal. En el Diagrama
de Bloque el control cluster está conectado al Terminal de entrada Cluster y el control slide está
conectado a la entrada numérica de la función bundle. Observe que el control de data numeric ha
sido reemplazado por la data del control slider en el indicador del cluster.
d. Usando la Función UnbundlebyName.

Trabaja en forma similar a la función Unbundle, la diferencia esta que en vez de hacer referencia a
los componentes del cluster por su orden en el cluster, esta función hace referencia a sus propias
etiquetas. Cuando conecta un cluster existente a la función unbundle by Name, los nombres de las
etiquetas de los objetos del cluster aparecen automáticamente. Pueda que tenga que
redimensionar la función para ver todos.

e. Creando Cluster Constantes.

Para crear un clúster constante, en la Paleta de Funciones seleccione


Functions>Cluster>ClusterConstant.

Puede simplificar la creación de una constante haciendo clic derecho sobre un Cluster y del menú
seleccionar Create>Constant.
Sub Vi’s
El Sub VI es considerado como un VI de menor nivel dentro de un VI de mayor nivel. Esto reduce el
número de iconos en el Diagrama de Bloques, que simplifica y modulariza el VI. Sub VIs son como
funciones o subrutinas en la programación basada en texto.

En el siguiente ejemplo se crea un Sub VI que Calcula la Pendiente a partir de dos puntos dados.
Creando el Ícono del Sub VI

El primer paso en la creación de un Sub VI es modificar su icono para que pueda reconocerse cuando
es usado por otro VI. Cada VI tiene un icono por defecto en la esquina superior – derecha tanto en
el Panel Frontal como en el Diagrama de Bloques.

Para personalizar el icono, haga clic derecho en él y seleccione EditIcon…

Y aparece la ventana Icon Editor.


El área grande de la derecha es donde se ve el ícono por defecto. Aquí es donde se edita el icono
usando las Herramientas de Edición.
Este menú es nuevo a diferencia de las versiones anteriores conteniendo propiedades interesantes
como:

Icon Text → Se pueden editar cuatro líneas de texto, a la vez modificar el color, formato y posición.
De esta manera se puede editar cuatro líneas de texto de manera programática, si se quiere hacer
de manera manual se utiliza las herramientas de edición que se encuentran en la parte derecha
(Símbolo T).

Glyphs→ Se pueden seleccionar íconos predeterminados en base a la aplicación deseada.


Herramientas de Edición del Ícono:

Lápiz → Dibuja y borra un píxel a la vez.

Línea → Dibuja líneas. Presiona la tecla shift para dibujar líneas verticales,
horizontales o diagonales.

Cuenta gotas → Selecciona el color de fondo de un elemento.

Balde → Rellena un área seleccionada con el color seleccionado en ese


momento.

Rectángulo → Dibuja el borde de un rectángulo.

Rectángulo rellenado → Dibuja un borde de un rectángulo rellenando el


fondo con el color seleccionado en ese momento.

Elipse → Dibuja el borde de una elipse.

Elipse rellenado →Dibuja un borde de una elipse rellenando el fondo con


el color seleccionado en ese momento.

Borrador → Borra la porción a la cual se le haga clic en el gráfico.

Seleccionar →Selecciona un área rectangular para editarlo. Si hace doble


clic sobre este ícono y presiona la tecla Borrar, esto borrará el ícono
entero.

Texto → Ingresa texto en el área de edición. Si hace doble clic sobre este
ícono puede seleccionar diferentes tipos de letra y tamaño.

Rotación → Rota la imagen 90º según escoja a la derecha o izquierda.


Foreground/Background→ Muestra los colores seleccionados (actuales)
del fondo defrente y atrás, para usarse por las otras herramientas.

Se dibuja o escoge el ícono adecuado y damos clic a OK, automáticamente la ventana del VI
mostrará el cambio:
Asignando conectores a un SubVI

Esto permite a Controles e Indicadores de un VI de más alto nivel conectarse a un SubVI.


En el Panel Frontal haga clic derecho en el ícono y del menú seleccione Show Connector.

El ícono cambiará para mostrar todos sus conectores. En nuestro ejemplo se parecerá a:

En la opción Patterns escogerá la forma de conexión que mejor se adapte al programa, es decir, 4
entradas y una salida.
Observe que se seleccionó el de cuatro conectores a la izquierda y uno a la derecha. Los cuatro
conectores en la izquierda se utilizarán para conectar la data entrante (desde controles), el conector
de la derecha se conectará a la data saliente (hacia un indicador).

El siguiente paso es conectar los Controles e Indicadores, esto se realiza utilizando el Carrete de la
Paleta de Herramientas, haga clic en el conector y luego en su respectivo Control o Indicador en el
Panel Frontal. Los conectores irán cambiando de color a medida que va conectando.

Después de realizar todas las conexiones guardar el SUbVI, note que el almacenamiento es como un
VI cualquiera (formato .VI).

Usando un SUBVI

Usar un Sub VI por otro VI de mayor nivel es simple, cargaremos la función Pendiente.
Para cargar el VI creado anteriormente en el Diagrama de Bloques seleccione de la Paleta de
Funciones Functions>Select a VI…

Aparece una ventana para abrir un VI, seleccione el Sub VI deseado y colóquelo en el Diagrama de
Bloques.
Conecte los controles e indicadores de la misma manera como lo hemos hecho con otras funciones
de LabVIEW.

Para abrir un Sub VI desde el Diagrama de Bloques, simplemente haga doble clic sobre este.

VARIABLES GLOBALES Y LOCALES EN LABVIEW

Las variables globales son usadas cuando un valor de algún dato necesita ser manipulada por
diferentes VIs (programas).

Nota. A menudo durante el curso usaremos el termino VIs, para referirnos a una aplicación o
programa hecho con LabVIEW.

La ventaja de usar una variable global es que solo tiene que definirlo una sola vez. Esta después
puede ser leída o cambiar su valor desde múltiples VIs. El uso de las variables globales se considera
una práctica pobre de programación, ya que oculta el flujo de la data en su aplicación y usa recursos
adicionales de la máquina. Se recomienda usar variables globales en casos estrictamente necesarios.

Creación de una variable global.

Trabajaremos con variables globales como medio de intercambio de información entre VIs.

PROGRAMA 1:
En el Panel frontal coloque:
- un potenciómetro, haga clic derecho en el panel y aparecerá un submenú de controles, elija la
categoría Numeric ->Knob.

- un Waveform Chart, haga clic derecho y del submenú de controles elija la categoría Graph -
>Waveform Chart.
Y colóquelos como se muestra a continuación:
Trabajemos ahora en la ventana del Diagrama de Programación.

Para crear una variable global, hacemos clic derecho en el diagrama de programación, aparecerá el
submenú de Funciones, elegimos la categoría Structures -> Global Variable.
Y lo colocamos en el panel, y será mostrado con el siguiente icono . Hacemos doble clic sobre
este icono y aparecerá un panel frontal. Este panel frontal no tiene la ventana de Diagrama de
bloques.

En este panel haga clic derecho y del submenú de controles, elija Numeric ->Numeric Control y
coloque en el panel, etiquételo con el nombre Tanque. Guarde este panel y ciérrelo.

Luego en el diagrama de programación haga clic sobre el icono , y elija la variable global a
utilizar.

. El ícono cambiará a , complete el diagrama de programación tal como


se muestra a continuación.
PROGRAMA 2:

Diagrama de Programación: La variable global a utilizar es la misma que la del programa


anterior, puede seleccionar y copiarlo del programa anterior. Otra manera de llamar a una
variable global es siguiendo los mismos pasos para llamar a un subVI, es decir del Diagrama de
Bloques seleccione de la Paleta de Funciones Functions>Select a VI…y busque el archivo de la
variable global creada anteriormente.

Las variables globales tienen dos modos de trabajo: Read (cuando se va a leer el valor de la
variable) y Write (cuando se quiere modificar el valor de la variable), es similar a los objetos de
LabVIEW cuando son Indicador o Control.
Para cambiar al modo Write (para modificar el valor de la variable) haga clic derecho sobre la
variable global y del menú seleccione ChangetoWrite.
Para cambiar al modo Read (para leer el valor de la variable) haga clic derecho sobre la variable
global y del menú seleccione ChangetoRead.
Ejecute los dos programas a la vez y observe el comportamiento de la variable global.
Manipule el primer programa que tiene el Potenciómetro, observará que a pesar de ser aplicaciones
diferentes el valor se actualiza en los dos programas.

Creación de una variable local.

La principal diferencia entre una variable local y una variable global es el acceso. La variable local
solo está disponible en el diagrama de bloques donde fue creado. La variable global puede usarse
en cualquier VI o subVI. La aparente flexibilidad en el uso de la variable global puede resultar en una
pérdida del control de datos, por ejemplo, si la variable global es colocada en varios VIs, uno de
estos VIs puede ser usado en otra aplicación, y pudiendo cambiar el valor de la variable global en su
programa principal, sin que lo hubiera planificado de esa manera. Con una variable local usted sabe
en qué lugar la data es modificada dentro de su VI, y los problemas referidos al flujo de datos son
más fáciles de encontrar.

Las variables locales rompen con el paradigma de programación de flujo de datos, permitiendo que
los datos sean pasados sin necesidad de cables.
Una manera de crear una variable local de algún elemento de un VI, seleccione de la paleta de
funciones AllFunctions>Structures> Local Variable.
Para crear una variable local primero debe habercreado otros objetos.
Crea el Panel Frontal que se muestra a continuación:

En el Diagrama de bloque inserte una variable local, la que tiene esta forma , para asignarle un
objeto haga clic en él y de la lista seleccione Potenciómetro.

. Al igual que en las Variables Globales, las Variables Locales también tienen
dos modos de Trabajo Read (cuando se va a leer el valor de la variable) y Write (cuando se quiere
modificar el valor de la variable), es similar a los objetos de LabVIEW cuando son Indicador o
Control.

Para cambiar al modo Write (para modificar el valor de la variable) haga clic derecho sobre el
variable global y del menú seleccione ChangetoWrite.

Para cambiar al modo Read (para leer el valor de la variable) haga clic derecho sobre el variable
global y del menú seleccione ChangetoRead.
Otra forma de crear una variable local de un objeto es hacer clic derecho sobre el objeto en el
Diagrama de bloque y del menú seleccione Create> Local Variable.

El uso de variables locales es útil en programas muy grandes, donde el cablear sea muy
complicado.