Está en la página 1de 16

Sistemas y Equipos de Medida

PRÁCTICA 2: PROGRAMACIÓN AVANZADA EN


LABVIEW.

1. CREACIÓN DE SUBPROGRAMAS
Una de las grandes ventajas del LabVIEW es la de poder trabajar con aplicaciones
ejecutables dentro de otras, de modo que una aplicación puede descomponerse en partes
más pequeñas totalmente independientes. De este modo es mucho más fácil localizar un
posible fallo.
A las aplicaciones que se incluyen dentro de una aplicación mayor se les denomina
subVIs (es el equivalente a lo que conocemos como subrrutinas). Por si mismos
mantienen todas las propiedades vistas hasta ahora para cualquier VI.
Para poder utilizar un subVI es necesario crearle un icono con su correspondiente
conector. LabVIEW permite utilizar distintos subVIs con el mismo icono y conector
puesto que sólo los distingue por el nombre con el cual se salvan. De todos modos es
recomendable que cada subVI se identifique con un icono específico con el fin seguir
fácilmente el diagrama de bloques.

1.1. Icono y conector


El icono de un subVI es un símbolo gráfico (aparece tanto en el panel frontal como
en el diagrama de bloques). El conector asigna terminales de entrada y salida a los
controles e indicadores que aparecen en el panel frontal respectivamente (aparece solo
en el panel frontal).

Modificación de un icono.
Para crear o modificar un icono ya existente haremos doble click sobre el icono de la
parte superior derecha de la ventana Panel o desplegaremos su menú (cliquear el botón
derecho del ratón situado sobre el icono del VI) y escogeremos la opción Editar icono.
El aspecto del editor de icono es el siguiente:

1
Modificación de un conector.
Podemos enviar datos a un subVI o recibirlos de él a través de los terminales de su
conector. Las conexiones vienen definidas por el número de terminales que queremos
para ese VI y por la asignación de un indicador o control del panel frontal a cada uno de
esos terminales. No todos los indicadores y controles tienen que tener un terminal en el
conector, sino sólo aquellos que consideramos necesarios para la aplicación. Cada
terminal está representado por un rectángulo. Todo conector tiene asociado un menú
desplegable:

Una vez elegido el conector en función del número de conexiones a hacer, tan sólo
queda asignar los terminales. Haciendo clic sobre un terminal aparece de forma
automática la herramienta wiring y el rectángulo que representa el terminal queda
marcado en negro. Haciendo clic sobre el indicador o control del panel frontal, éste
quedará asignado al terminal seleccionado.

1.2. Creación de subprogramas.

Un único panel frontal es, a menudo, insuficiente cuando se quieren presentar


numerosas opciones o pantallas. La mejor solución es organizar nuestros VIs de modo
que las opciones principales se presenten en un VI principal, mientras que las opciones
secundarias se incluyen en subVIs diferentes.
Cuando se llama a un subVI normalmente no se abre su panel frontal. Podemos usar
la opción de “configuración del VI” (VI properties) que aparece en el menú desplegable
para que cuando se abra, llamado por otro VI tenga la apariencia que queramos. La
pantalla que aparece por defecto es:

2
Sistemas y Equipos de Medida

Desde ella cambiando la selección que aparece en el Combo Box Category podemos
configurar la apariencia del panel frontal del subVI cuando se abra llamado por el VI
principal.

La opción Documentation no da la posibilidad de disponer de una documentación del


VI. Con ella puede hacerse un estudio de trabajo sobre ese VI, indicando cuantas veces
se ha guardado, grabar los comentarios que va generando el LabVIEW, indicar donde
encontrar su ayuda...
ATENCIÓN: Si desde la opción Window Appearance ocultamos la barra de menú y
la paleta de ejecución, no habrá modo visible de pasar del panel frontal al diagrama de
bloques. Podemos utilizar la combinación de teclas <Ctrl+M>, de este modo podremos
pasar al diagrama de bloques, donde la barra de menú y la paleta de ejecución si están
visibles.
Si elegimos la opción Execution veremos la siguiente ventana:

Una vez seleccionada su apariencia y modo de ejecución, para que cuando el VI


principal lo llame se abra el panel principal del subVI y se cierre después de su
ejecución, deberemos realizar los siguientes pasos:
Irnos al bloc diagram, seleccionar el subVI y cliquear el botón derecho del ratón para
desplegar el menú asociado al subVI:

3
Elegir la opción SubVI Node Setup y
aparecerá la ventana:

Las opciones presentadas tienen efecto únicamente cuando se está en modo de


ejecución. Sirven para cambiar el comportamiento de la ventana.

1.3. Creación automática de subprogramas

Es una opción que permite ahorrar mucho tiempo. Supongamos que disponemos de
un diagrama de bloques en el que nos convendría que una parte fuese un subVI ya que
posiblemente se utilizará más de una vez. Podemos crear un subVI de un modo muy
sencillo, es el siguiente:
1. Marcar o seleccionar el bloque que queremos que sea un subVI.
2. Elegir la opción Create SubVI del menú Edit.
3. Modificar el icono y conector a nuestro gusto y guardarlo con el nombre que
más represente a su función.
A1 (A1.vi): Implementar un programa que evalúe si el valor medio de una serie de
números (no fija) es mayor que cinco, si es cierto que encienda un led. Cada vez que
realice la comparación debe producirse una espera de 5 segundos. Durante la espera un
cartel debe parpadear avisando de la espera. El valor medio debe calcularse mediante la
implementación de un SubVI cuyo panel frontal se abrirá cada vez que calcule el valor
medio para desaparecer posteriormente. Comprobar que la media de los números
introducidos se hace correctamente.

4
Sistemas y Equipos de Medida

El subVI a implementar es:

Q 1 ¿crees que el programa hace siempre bien la media?


…………………………………………………………………………………………….
…………………………………………………………………………………………….
…………………………………………………………………………………………….
Q 2 Haz la media de los valores 1, 0, 0, 1. A continuación haz la media de los valores
1, 1 ¿el resultado es correcto? ¿Por qué?
…………………………………………………………………………………………….
…………………………………………………………………………………………….
…………………………………………………………………………………………….

5
Sistemas y Equipos de Medida

 ¿Cómo lo solucionarías si no es correcto?


…………………………………………………………………………………………….
…………………………………………………………………………………………….
…………………………………………………………………………………………….

2. VARIABLES LOCALES
En el LabVIEW todos los controles e indicadores que se introducen en el panel
frontal generan un terminal en el diagrama de bloques, estos terminales son variables
que se identifican por el nombre asignado a la etiqueta. Pero puede ocurrir que
queramos utilizar el valor de cierta variable en otro subdiagrama de un vi, o
simplemente guardar un valor intermedio. La forma más sencilla es generando variables
locales.
En las variables locales los datos se almacenan en algunos de los controles o
indicadores del panel frontal, por ello estas variables no son intercambiables entre
distintos VI’s. La principal ventaja de estas variables es que una vez creadas no importa
que proceda de un indicador o un control, ya que podrá utilizarse en un mismo diagrama
tanto de entrada (escritura) como de salida (lectura), es decir podrán ser modificadas
durante la ejecución.
Tenemos dos formas de generarlas:
1. En el Diagrama de Bloques seleccionamos el control o indicador al que le
queremos asociar una variable local. Desplegamos su menú y seleccionamos en él
Create/Local Variable.
2. En el Diagrama de Bloques, dentro del menú Functions/Programming/Structures
seleccionamos Local Variable. Al hacerlo se crea un nuevo terminal en el diagrama
de bloques, éste terminal debe asignarse a uno de los controles o indicadores del
panel frontal. Para ello debe desplegarse el menú asociado al nuevo terminal
(seleccionarlo, cliquear el botón derecho del ratón) y asignarle el “item” que
interese en la aplicación desarrollada.
Cada variable local tiene un menú asociado que nos permite cambiar sus
características. A la izquierda tenemos el panel frontal de un VI con cuatro elementos, a
la derecha tenemos la variable local de uno de ellos en el diagrama de bloques con su
menú desplegado.

Desde él podemos cambiar el elemento al que está asociada la variable local, cambiar
de lectura a escritura, etc.

6
Sistemas y Equipos de Medida

Change to Read o to Write  Permite escoger entre leer o escribir en la variable


local.
Select Item  Visualiza una lista de todos los controles/indicadores existentes en
panel frontal y de ella escogeremos el control/indicador al que queremos que haga
referencia nuestra variable. Por ello es necesario que cada control/indicador tenga una
etiqueta de identificación. Si en algún momento decidimos cambiar el nombre de
identificación será necesario cambiarlo en todos los puntos del programa ya que el
LabVIEW no actualiza los cambios.
Description and Tip  Permite añadir comentarios.
Replace  Sustituye la variable local por cualquier otra función.
A2 (A2.vi): Desarrollar un programa que, usando la estructura Staqued Sequence y
las variables locales, calcule la operación A+B (sequence 0), espere un tiempo indicado
por el usuario (sequence 1), pase el resultado de la operación a la variable de entrada B
(sequence 2), espere de nuevo el tiempo indicado (sequence 3), y finalmente inicialice
los controles (A y B) a cero (sequence 4). El programa debe tener tres controles (A, B,
espera) y un indicador (A+B). No deben utilizarse secuencias locales para pasar la
información de una secuencia a otra.

7
Sistemas y Equipos de Medida

Q 3 ¿Es posible ejecutar el programa sin que el control Espera en ms esté conectado
directamente a Wait(ms)? Razona la respuesta y prográmala en solucionA2.vi
…………………………………………………………………………………………….
…………………………………………………………………………………………….
…………………………………………………………………………………………….

3. VARIABLES GLOBALES
Como acabamos de ver en LabVIEW todos los controles e indicadores que se
introducen en el panel frontal generan un terminal en el diagrama de bloques, estos
terminales son variables que se identifican por el nombre asignado a la etiqueta. Pero
puede ocurrir que queramos utilizar el valor de cierta variable en otro subdiagrama u
otro subvi, o simplemente guardar un valor intermedio. La forma más sencilla es
generando variables globales.
Las variables globales son un tipo especial de VI, que únicamente dispone de panel
frontal, en él se define el tipo de dato de la variable y el nombre de identificación
imprescindible para después poder referirnos a ella. Este tipo de variables pueden ser
compartidas por cualquier VI.
Para crearlas vamos al Diagrama de Bloques, dentro del menú
Functions/Programming/Structures seleccionamos Global Variable.

Al hacerlo creamos un nuevo terminal en el diagrama, éste corresponde a un nuevo


VI que inicialmente está vacío ya que no contiene ninguna variable. Para añadir las
variables se hará doble click en el terminal y se abrirá su panel frontal. Puede crearse un
VI para cada variable global o por el contrario incluir todas las variables en un único VI

8
Sistemas y Equipos de Medida

que es el caso más recomendado. Si una vez cerrado el VI quieren añadirse más
variables tan sólo debemos abrir de nuevo el VI y añadirlas como si se tratase de
cualquier otro VI.
Para añadir nuevos terminales en el diagrama de bloques que hagan referencia a
variables globales ya creadas NO volveremos a ejecutar la función Global (ya que esto
crearía un nuevo VI), sino que abriremos el fichero ya existente de variables globales
mediante la opción “Select VI” de la paleta de funciones y desde ella seleccionaremos la
variable global deseada a través del menú desplegable. Una vez seleccionada y puesta
en el diagrama de bloques, cliqueando sobre ella el botón derecho desplegaremos un
menú (ver la siguiente figura), en el que podremos seleccionar el elemento al que
asociamos la variable global.
Para insertar la misma variable global en diferentes partes del VI en el que se trabaja
hay que ir a la paleta Functions/select VI y seleccionar el VI asociado a la variable
global y de las incluidas en ese fichero seleccionar la adecuada como se explica en el
párrafo anterior.
En la siguiente figura podemos ver la misma variable global llamada Global
cluster.vi con dos asignaciones distintas: boolean y signal out de escritura. Podemos
cambiarlas a lectura al igual que las variables locales en el mismo menú desplegable.

Change to Read o to Write  Permite escoger entre leer o escribir en la variable


global.
Select item  Visualiza una lista de todos los controles/indicadores existentes en
panel frontal de la variable global y de ella escogeremos el control/indicador al que
queremos que haga referencia nuestra variable. Por ello es necesario que cada
control/indicador tenga una etiqueta de identificación. Si en algún momento decidimos
cambiar el nombre de identificación será necesario cambiarlo en todos los puntos del
programa ya que el LabVIEW no actualiza los cambios.
Open Front Panel  Abre el panel frontal de la variable global a la que pertenece el
menú desplegado.
Description and Tip  Permite añadir comentarios.
Replace  Sustituye la variable global por cualquier otra función.
A3 (A3.vi): Vamos a implementar un VI que accede a dos subVIs (subVI_1.vi y
subVI_2.vi), que escriben y leen en la misma variable global.

9
Sistemas y Equipos de Medida

De este modo el programa lo que hace es inicializar el control llamado “inicializa”


que se encuentra en la variable global llamada variable global1.vi que vemos en la
siguiente figura:

A continuación ejecuta simultáneamente dos subVIs (subVI_1.vi y subVI_2.vi), y


nos muestra su salida. Esos subVI son:

Este subVI_1.vi escribe N veces en la variable global

Este subVI_2.vi solo escribe una vez en la variable global


Si los dos subVIs tardasen lo mismo en ejecutarse y el número de iteraciones fuese 6
sus dos salidas darían el mismo valor 15, de acuerdo a la siguiente tabla. Esta tabla
muestra los valores numéricos que toman las entradas del operador suma y su resultado
en cada iteración:

10
Sistemas y Equipos de Medida

Pero como cada subVI tiene un tiempo de ejecución diferente, solo una de las salidas
nos dará ese valor. Para entender su funcionamiento abrir todos los programas y
colocarlos como se indica en la siguiente figura:

De modo que los dos subVIs tengan activada la ejecución resaltada, y ejecutemos el
programa principal. Así veremos cómo los dos subVIs comienzan a ejecutarse a la vez
con la variable global inicializa a cero, pero uno acaba antes que el otro. De modo que
el subVI que queda activo toma como valor de la variable global inicializa el resultado
del finalizado y a partir de ese valor continúa su cálculo. Por eso los dos subVIs no
tienen la misma salida.

Ejecutarlos varias veces hasta entender el


funcionamiento.

11
Sistemas y Equipos de Medida

Las variables globales se deben usar cuando tenemos un programa que adquiere datos
que deben ser usados por otros programas que se están ejecutando simultáneamente.
Pero si no las gestionamos bien podemos estar sobrescribiendo la variable global desde
distintos VIs a la vez como en este ejemplo:

Si los dos bucles se ejecutan a la vez después de leer la variable global en el while de la
izquierda, LabView cambia la ejecución al segundo bucle while. Que modifica la
variable global. Cuando LabView acaba la ejecución del primer bucle escribe en la
varible global, de modo que el dato que genera el segundo bucle while es sobreescrito
por el resultado del primero. Es decir, nunca sabemos si el contenido de la variable
global es el resultado del primer while o del segundo. Es lo que se llama la condición de
carrera.

4. Nodos de atributo (Property Node)


Pueden considerarse como variables que dependen únicamente del terminal a partir
del que se han creado y que permiten leer o modificar atributos del panel frontal de un
control o indicador como puede ser: cambiar el color, hacerlo invisible, desactivarlo,
cambiar escalas, etc. Para crear un nodo de atributo basta con seleccionar la opción
Create del menú desplegable del objeto, apareciendo, entre otras, dos posibles opciones
que permiten crear bien una variable local o bien un nodo de atributo, property node.
Una vez creado puede utilizarse como lectura o como escritura. Una pequeña flecha a la
izquierda indica que es un nodo de escritura, mientras que una flecha a la derecha indica
que es un nodo de lectura.
Los nodos de atributo poseen su propio menú desplegable tal como se indica en la
figura:
Change all to read/to write 
Dependiendo de si el nodo es de escritura o
lectura aparecerá una opción u otra. Debido
a que cada nodo de atributo puede tener más
de un terminal usaremos esta opción cuando
queramos que todos ellos sean de lectura o
de escritura.
Find control  Encuentra el control
asociado al nodo de atributo en el panel
frontal.
Find terminal  Encuentra el control
asociado al nodo de atributo en el diagrama
de bloques.
Find Property Nodes  Muestra todos
los nodos de atributos asociados a un
control/indicador.

12
Sistemas y Equipos de Medida

Visible Itens  Oculta o visualiza la etiqueta identificadora del nodo de atributo.


Description and Tip Permite añadir comentarios.
Select Property  Visualiza todos los atributos disponibles para el control asociado
al nodo de atributo
Change to Read/to Write  Cambia a modo de escritura o lectura únicamente el
nodo seleccionado.
Add Element  Permite añadir propiedades que queremos cambiar.
Replace  Sustituye el nodo atributo por cualquier otra función.
Los atributos para un control/indicador depende de su tipo aunque muchos de ellos
son comunes.
La utilización de nodos de atributos así como la de variables locales, es muy
importante ya que permite resolver de forma sencilla problemas de una gran
complejidad, que serían prácticamente imposible de resolver de otro modo. Por eso es
aconsejable que su utilización quede totalmente clara.
A4 (A4.vi): Haciendo uso de los nodos de atributo implementar un programa que a
partir de dos datos de entrada realice la suma de éstos. Si A+B  [10,20[, debe aparecer
un led en la pantalla y parpadear, de lo contrario el led debe desaparecer de la pantalla.
El programa debe finalizar cuando pulsemos un botón de Stop.

13
Sistemas y Equipos de Medida

A5 (A5.vi): Partiendo del programa A10.vi desarrollado en la actividad 10 de la


práctica 1 modificar el programa de modo que:
1.- El programa no inicie el cálculo de las operaciones hasta que se pulse un botón de
actualización.
2.- Si A o B  [10.4, 40] debe aparecer un indicador tipo cadena que indique que se
está fuera de rango.
3.- Si A y B  [10.4, 40] debe aparecer el indicador tipo cadena que indique que se
está dentro de rango.
4.- Compruebe el rango de los valores de entrada y actúe en consecuencia:
A,B  [10.4, 20]  Actúen únicamente los leds indicadores y los indicadores
numéricos desaparezcan.
A,B  [20.1, 29]  Actúen los leds y se visualicen los resultados numéricos.
A,B [29.01,40]  Sólo se visualicen los resultados en los indicadores
numéricos y los leds indicadores desaparezcan.
5.- Debe ser posible introducir nuevos datos sin interrumpir la ejecución del
programa.
6.- Debe ser posible salir del programa en cualquier momento que el usuario lo desee
pulsando solo un botón.
A6 (A6.vi): Crear un programa formado por varias pantallas.
1ª Pantalla
1. El usuario debe elegir el tiempo que luce cada led y el número de leds a
visualizar.
2. Si queremos que se desplace de izquierda a derecha, de derecha a izquierda o
de modo continuo (coche fantástico, es decir el led se desplaza de derecha a
izquierda, al acabar de izquierda a derecha, al a acabar de derecha a izquierda
y así sucesivamente hasta que el usuario quiera acabar la secuencia).
3. Botones SIGUIENTE para pasar a la siguiente pantalla (subVI) y botón
SALIR para finalizar la ejecución del programa.
2ª Pantalla
1. Mostrar los leds luciendo en función de la opción elegida.
2. Opción que permita en la misma pantalla modificar tiempos y números de
leds.
3. Botón SALIR para volver a la pantalla principal sin dar por finalizada la
ejecución del programa.

14
Sistemas y Equipos de Medida

Front Panel del SubVI

Front Panel del VI principal


Como ayuda para realizar este ejercicio implementar estos dos ejemplos:

Front Panel del SubVI

Front Panel del VI principal

Front Panel del SubVI

Front Panel del VI principal


Una vez entendidos estos ejemplos y la relación entre ellos, pasar a implementar el
desplazamiento de izquierda a derecha:

Front Panel del VI principal

15
Front Panel del SubVI
Posteriormente implementar el desplazamiento de derecha a izquierda:

Front Panel del VI principal

Front Panel del SubVI


Una vez entendidos cómo se producen esto desplazamientos, os toca pensar en cómo
diseñar la ejecución del “coche fantástico” sin que el primer led y el último estén
encendidos el doble de tiempo que los demás.
Por supuesto esta no es la única forma de programarlo ¿se os ocurre otra más
eficiente o sencilla? Prográmala en PropiaA6.vi

16

También podría gustarte