Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Objetivos:
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.
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
Y en el diagrama de bloques:
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.
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.
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.
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)
b. InitializeArray
c. BuildArray
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:
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.
Puede cambiar de posición y redimensionar el tamaño del contenedor en el Panel Frontal, luego
coloque los controles deseados dentro del contenedor.
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.
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.
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.
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).
Línea → Dibuja líneas. Presiona la tecla shift para dibujar líneas verticales,
horizontales o diagonales.
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.
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
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.
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.
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.
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.
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.