0% encontró este documento útil (0 votos)
67 vistas34 páginas

Capítulo 4

Cargado por

Rafael St
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
67 vistas34 páginas

Capítulo 4

Cargado por

Rafael St
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

CAPÍTULO

PROGRAMACIÓN
ESTRUCTURADA

4.1 INTRODUCCIÓN: ESTRUCTURAS BÁSICAS


4.2 ESTRUCTURAS ITERATIVAS: FOR LOOP
YWHILELOOP
4.3 LA TEMPORIZACIÓN EN LA EJECUCIÓN
DE CÓDIGO
4.4 REGISTROS DE DESPLAZAMIENTO
4.5 ESTRUCTURAS CASE Y EVENT
4.6 ESTRUCTURAS SEQUENCE
4.7 FÓRMULA NODE
4.8 VARIABLES LOCALES Y GLOBALES
4.9 PROPERTY NODE
4.10 EJERCICIOS PRÁCTICOS
4.11 RESUMEN DE PALABRAS CLAVE
56 LabVIEW 7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

4.1 INTRODUCCIÓN: ESTRUCTURAS BÁSICAS

A la hora de programar, muchas veces es necesario ejecutar un mismo


conjunto de sentencias un número determinado de veces, o que éstas se repitan
mientras se cumplan ciertas condiciones. También puede ocurrir que queramos
ejecutar una u otra sentencia dependiendo de las condiciones fijadas o simplemente
forzar que unas se ejecuten siempre antes que otras.

Para ello LabVIEW dispone de cuatro estructuras básicas fácilmente diferen-


ciables por su apariencia y disponibles en la opción All Functions»Structures
del menú Functions de la ventana Diagram:

Case Structure For Loop While Loop

4.2 ESTRUCTURAS ITERATIVAS: FOR LOOP Y WHILE LOOP

FOR LOOP

Usaremos For Loop cuando queramos que una operación se repita un


número determinado de veces. Su equivalente en lenguaje convencional es:

For i = O to N - 1
Ejecuta subdiagrama

Al colocar un For Loop en la ventana Diagram observamos que tiene


asociados dos terminales:

1. Terminal contador: contiene el número de veces que se ejecutará el


subdiagrama creado en el interior de la estructura. El valor del contador
se fijará externamente (véase también Arrays en el capítulo 5).

2. Terminal de iteración: indica el número de veces que se ha ejecutado


la estructura: cero durante la primera iteración, uno durante la segunda
y así hasta N - 1.

Ambos terminales son accesibles desde el interior de la estructura, es decir,


sus valores podrán formar parte del subdiagrama, pero en ningún caso se podrán
modificar.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 57

Valor del contador Terminal contador Shift Register

Valor inicial

Túnel
Terminal de iteración Subdiagrama

Figura 4.1 For Loop.

WHILE LOOP

Usaremos While Loop cuando queramos que una operación se repita


mientras una determinada condición sea cierta o falsa. Su equivalente en lenguaje
convencional es:

Do ejecutar subdiagrama
While condición ¡s TRUE (or FALSE)

(aunque esta estructura es más similar al comando Repeat-Until, ya que se repite


como mínimo una vez, independientemente del estado de la condición).

Al igual que For Loop contiene dos terminales:

1. Terminal condicional: a él conectaremos la condición que hará que


se ejecute el subdiagrama. LabVIEW comprobará el estado de este
terminal al final de cada iteración. Podemos configurar este terminal
de manera que pare si la condición es cierta (Stop if True ¡H) o bien
que pare si la condición es falsa (Continué if True

2. Terminal de iteración: indica el número de veces que se ha ejecutado


el bucle y que, como mínimo, siempre será una (i = 0).

© ITES-Paraninfo
58 LabVIEW 7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

Shift Register Subdiagrama

Valor inicial

\
Terminal de iteración Condición Terminal condicional

Figura 4.2 While Loop.

Los menús shortcut correspondientes al For Loop y While Loop se


presentan a continuación:

Visible ítems Visible ítems >


Help Help
Descriptor! and Tip... Description and Tip,,,
Set Breakpoint Set Breakpoint

Execution Control Palette Structures Palette ^


y Auto Grow •/ Auto Grow
Replace with For Loop Replace with While Loop
Replace with Timed Loop Remove For Loop
Remove Vv'hile Loop
Add Shift Register
Add Shift Register

J 5top if True
Continué if True

ForLoop Vvhile Loop

• Visible ítems: oculta o visualiza la etiqueta de identificación y, si no exis-


te, permite ponerla.
• Description and Tip: permite añadir comentarios.
• Set Breakpoint: establece un punto de ruptura para depurar nuestro VI.
• Replace: cambia el For Loop o el While Loop por cualquier otra función
de la paleta Functions.
• Remove Loop: borra la estructura While o For pero sin eliminar el sub-
diagrama de su interior.

> ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 59

• Add Shift Register: añade los Shift Register (Registros de Desplaza-


miento).
• Stop if True/Continue if True: controla la condición de finalización del
While.
En el Block Diagram, si accedemos a Functions/Execution Control en la
versión LabVIEW 7.1, disponemos de la etructura While/Loop que incorpora el
botón de control para parar el bucle; esta estructura ya nos incluye el botón
Stop en el panel de controles. En la figura 4.3 podemos ver su apariencia en el
diagrama de bloques.

Figura 4.3 While Loop en LabVIEW 7.1.

4.3 LA TEMPORIZACIÓN EN LA EJECUCIÓN DE CÓDIGO

Para sincronizar actividades disponemos de las funciones Wait Until Next


ms Múltiple fe\ y Wait ms I , que podemos encontrar en Functions/AII

Functions/Time&Dialog.
Si colocamos en un bucle la función Wait Until Next ms Múltiple, esta
función monitoriza un contador de milisegundos y espera hasta que el contador
alcanza un múltiplo de la cantidad que hemos especificado. Esta función espera
hasta que el reloj interno del computador se encuentra en el múltiplo especificado.
La función Wait (ms) agrega el tiempo de espera al tiempo de ejecución para
alcanzar el retardo programado.

TIMED LOOP
La estructura Timed Loop (figura 4.4) nos permite la temporización en la
ejecución de código. El caso más sencillo es utilizarlo para ejecutar un número
determinado de veces por segundo una parte de código. La fuente de dock utilizada
(Vil kHz I y otros parámetros como el período de ejecución dt IIQQQ | y el desfase
to |o | se pueden configurar mediante las propiedades del Timed Loop, como
vemos en la figura 4.5, o como parámetros de entrada si seleccionamos la opción
Use Terminal.

© ITES-Paraninfo
60 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

Figura 4.4 Timed Loop.

Loíp riar»
¡LIOSO

— Timed Leap Kíioa en late ftfi


Diseca mssed pKütk
P Lte« terffirtól
natitan oríjlral chas*

Figura 4.5 Configuración del Timed Loop.

En un computador personal, la fuente de clock puede ser interna o externa.


Como fuente interna podemos utilizar los tics del sistema operativo que nos
permiten una resolución de 1 ms (1 KHz o 1.000 tics por segundo). En el caso
de sistemas de tiempo real podríamos disponer de una resolución de hasta 1 us
(1 MHz o 106 tics por segundo). Como fuente externa podemos utilizar alguno de
los canales de una tarjeta de adquisición de datos configurando el Source Type
con un terminal de entrada (Use Terminal).

) ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 61

Ejemplo lEWiái

iteraciones bucle I iteraciones bucle ;


:8 " 9

stop bucle 1 stop bucle 2


STOP j

Figura 4.6 Dos bucles ejecutándose en paralelo sincronizados con un desfase


de 500 ms.

Como ejemplo podemos ver en la figura 4.6 una aplicación de dos bu-
cles que se ejecutan en paralelo a una velocidad de 1 iteración por segundo con
un desfase de 500 ms. Cuando ejecutemos la aplicación primero empezará a
ejecutarse el bucle 2 una vez por segundo (dt = 1.000).Transcurridos 500 ms
(to = 500) empezará la ejecución del bucle 1 también con un periodo de una vez
por segundo. Implementar una sincronización de dos bucles y configurar el tiem-
po de desfase que habrá entre uno y otro es ahora mucho más sencillo gracias
a esta estructura.

© ITES-Paraninfo
62 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

4.4 REGISTROS DE DESPLAZAMIENTO

Los registros de desplazamiento o Shift Register son variables locales,


disponibles tanto en el For Loop como en el While Loop, que permiten transferir
los valores del final de una iteración al principio de la siguiente.
Inicialmente Shift Register tiene un par de terminales colocados a ambos
lados del Loop; el terminal de la derecha almacena el valor final de la iteración
hasta que una nueva hace que este valor se desplace al terminal de la izquierda,
quedando en el de la derecha el nuevo valor. Un mismo registro de desplazamiento
puede tener más de un terminal en el lado izquierdo; para añadirlo escogeremos la
opción Add Element (Añadir Elemento) del menú Pop-up. Cuantos más terminales
tengamos en el lado izquierdo más valores de iteraciones anteriores podremos
almacenar.
Un mismo Loop puede tener varios registros de desplazamientos, siendo
conveniente inicializarlos para que los terminales de la izquierda tengan el valor
deseado cuando se produzca la primera iteración. Shift Register puede trabajar
con cualquier tipo de datos siempre y cuando los datos que se conecten a cada
terminal sean del mismo tipo.
Al finalizar la ejecución de todas las iteraciones el último valor quedará en
el terminal de la derecha; uniéndolo a un indicador del mismo tipo de dato fuera
del Loop podremos obtener su valor.
Pero existe otra posibilidad para pasar datos de forma automática desde
el interior de la estructura al exterior. Cuando un cable atraviesa los límites
del Loop, aparece en el borde un nuevo terminal llamado túnel que hace de
conexión entre el interior y el exterior, de forma que los datos fluyen a través de
él después de cada iteración del Loop, pudiendo guardar de esta manera no sólo
el último valor de todas las iteraciones sino también los valores intermedios. A
esta posibilidad que tienen tanto el For como el While de acumular arrays en sus
límites automáticamente se le llama auto-indexing o autoindexado.
LabVIEW habilita por defecto auto-indexing en el For Loop, ya que es más
frecuente utilizar esta estructura para crear arrays que no el While Loop, en el
cual esta opción está deshabilitada por defecto y cuya utilización podría provocar
problemas de memoria debido a que no sabemos cuántas veces se va a ejecutar.
No obstante, haciendo Pop-up en el túnel se puede habilitar o deshabilitar esta
opción.

4.5 ESTRUCTURAS CASE Y EVENT

Este tipo de estructuras se diferencia de las iterativas en que pueden tener


múltiples subdiagramas, de los cuales solamente uno es visible a la vez. En la

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 63

parte superior de cada estructura existe una pequeña ventana que muestra el
identificador del subdiagrama que se está mostrando. A ambos lados de esta
ventana existen dos botones que decrementan o incrementan el identificador de
forma que podamos ver el resto de subdiagramas.

CASE

Usaremos la estructura Case (figura 4.7) en aquellas situaciones en las que


el número de alternativas disponibles sean dos o más. Según qué valor tome el
selector dentro de los n valores posibles, se ejecutará en correspondencia uno
de los n subdiagramas.

La estructura Case consta de un terminal llamado selector y un conjunto


de subdiagramas, cada uno de los cuales está dentro de un case o suceso y
etiquetado por un identificador del mismo tipo que el selector. En cualquier caso
siempre habremos de cubrir todo el rango de posibles valores, y al menos habrá
de haber un case por defecto, el cual se ejecutará en caso de que el selector no
corresponda a ninguno de los previstos.

Identificador
Decrementar I Incrementar
Selector numérico

Selector booleano

Túnel correcto Túnel incorrecto

Figura 4.7 Estructura Case.

En este caso la estructura Case engloba dos sentencias diferentes de otros


lenguajes convencionales:

1. If condición true then ejecutar case true


else ejecutar case false
2. Case selector of
1: ejecutar case 1;

n: ejecutar case n
end

© ITES-Paraninfo
64 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

Case no cuenta con los registros de desplazamiento de las estructuras


iterativas pero sí podemos crear los túneles para sacar o introducir datos. Si un
case o suceso proporciona un dato de salida a una determinada variable será
necesario que todos los demás también lo hagan; si no ocurre de esta manera
será imposible ejecutar el programa.

EVENT

Una de las nuevas estructuras de programación de la versión LabVIEW


7.1 es Event Structure. La podemos encontrar junto con el resto de estructuras
de programación en el diagrama de bloques, paleta de funciones, subpaleta de
estructuras; en la figura 4.8 podemos ver el aspecto que presenta.

1
i[01 Ti -Hi

1 Type
Time

Figura 4.8 Event Structure.

Event Structure es una estructura parecida a la estructura Case;


nos permite ejecutar una u otra parte de código, en función de diferentes
eventos relacionados con nuestra aplicación, tales como clics o movimientos
del ratón, de ventanas para maximizar o minimizar, pulsación de teclas del te-
clado, etc.

Esta estructura nos permite añadir tantas ventanas como eventos


queramos controlar y configurar. Cuando la ejecución del programa llega al Event
Structure, por defecto el programa espera hasta que se dé alguno de los eventos
programados. También existe la posibilidad de programar un evento de Time Out
y configurar el tiempo de espera mediante una conexión al símbolo |ü

La configuración de los eventos para cada uno de los casos se realiza


mediante el cuadro de diálogo de la figura 4.9. En la ventana de Event Sources
disponemos de las diferentes fuentes de eventos como pueden ser los diferentes
controles e indicadores del panel frontal, acciones relativas a un VI en concreto o
a cualquier VI que forme parte de la aplicación. Tal como ya hemos comentado,
algunos de los eventos que podemos utilizar son movimientos y clics del ratón, del

) ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 65

teclado y de ventanas. Para cada uno de los diferentes casos del Event Structure
se puede configurar más de un evento por caso, que iremos añadiendo con el
botón [+].

f>entí Bancfcíi fn¡ Cas

clhíSVI;

5i the Add c« Deiece butto'i on r he fett to dehr»? ¿rirthei event speoher to be


ed by chis case or rernove che ÍUM eríly íelecíed evert, CliCijna n 'he t^erí
Súu;í,t áfidEverií ssw be!&« i'-«!l cíiirige tr-e cijiientl» sefecíed rveni: ¿pscifer.

1
cOO»'jer:,j.J,js, del cM. ¡App)
• <AIB«nerts>

±r
¡y Loci- ftont panel und the event oase fot tras ev'eot completes
Of í '"antel Help

Figura 4.9 Configuración del Event Structure.

En la figura 4.10 podemos ver una aplicación que cuenta cuántos clics se
realizan con el ratón sobre el panel frontal, y muestra si el clic se ha hecho con el
botón derecho, el izquierdo, y la posición dentro de la pantalla. Se ha configurado
un tiempo de 100 ms de espera. Cada vez que hacemos un clic con el ratón, se
ejecuta el código que aparece en la figura e incrementamos en 1 el número de
clics. Mediante el shift register disponemos del valor anterior.

i ITES-Paraninfo
66 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

ranero de cfcte tetón ¡muerdo o dífKfw


7 2 üteqtMfdo
2; daetb

-i.;

Figura 4.10 Ejemplo de Event Structure para contar el número de clics del ratón.

4.6 ESTRUCTURAS SEQUENCE

Esta estructura no tiene su homologa en los diferentes lenguajes


convencionales, ya que en éstos las sentencias se ejecutan en el orden de
aparición pero, como ya sabemos, en LabVIEW una función se ejecuta cuando
tiene disponible todos los datos de entrada. Se produce de esta manera una
dependencia de datos que hace que la función que recibe un dato directa o
indirectamente de otra se ejecute siempre después, creándose un flujo de
programa.

Identificador
Decrementar Incrementar
D n n u u n a dipi| -j 'rn ^ ^|n a n n u

Frame 1 Túnel

~m —, •--—- |

n gi n
j o ' "Q"'t>cr*t3 o a D n a .p:^ qTJTiTr^gji.jj'tf

Secuencia local destino 3 Secuencia local origen Secuencia local no utilizable

Figura 4.11 Estructura Sequence.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 67

Pero hay ocasiones en que esta dependencia de datos no existe y es


necesario que un subdiagrama se ejecute antes que otro; es en estos casos
cuando usaremos la estructura Sequence para forzar un determinado flujo de
datos. Cada subdiagrama estará contenido en un frame o marco, y éstos se
ejecutarán en orden de aparición: primero el frame O o marco O, después el frame
1 y así, sucesivamente, hasta el último.
Al contrario del Case, si un frame aporta un dato de salida a una variable
los demás no tendrán por qué hacerlo. Pero tendremos que tener en cuenta que
el dato estará solamente disponible cuando se ejecute el último frame y no cuando
se ejecute el frame que transfiere el dato.
En la versión de LabVIEW 7.1 disponemos de dos estructuras sequence:

DDDC nonnaoc
I O [O..n] ^
I

Stacked Sequence y Fíat Sequence


i I
L0_uj3_.u un. n a . n n. 0 o pjj.r.CLLLEL-

Si la secuencia se ejecuta en orden sin paso de datos entre frames, no


hay secuencias locales y se emplea el Fíat Sequence. El Stacked Sequence es
la estructura Sequence de que se disponía en versiones anteriores.
Debido a la similitud de los menús Pop-up de la estructuras Case y Stacked
Sequence, vamos a estudiarlos de forma conjunta indicando en cada caso las
posibles diferencias que puedan existir:
• Visible ítems: oculta o visualiza la etiqueta de identificación de la estructura
y, si no existe, permite ponerla.
• Description and Tip: permite añadir comentarios.
• Set Breakpoint: pone un punto de ruptura para depuración.
• Replace: cambia la estructura Case o Sequence por cualquier otra
función de la paleta Functions.
• Remove case Structure o Sequence: borra completamente la estructura
Case o Sequence, y todos los subdiagramas menos el que se esté
visualizando en el momento de la ejecución de este comando.
• Add Sequence Local (Añadir secuencia local): esta opción está sólo
disponible en el menú de la estructura Sequence y se utiliza para pasar
datos de un frame a otro. Una pequeña flecha con la punta hacia el exterior
de la estructura indica el frame de origen de la secuencia local, mientras

© ITES-Paraninfo
LabVIEW 7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

que una flecha apuntando hacia el interior indica que la secuencia local
contiene un dato de salida. Todos los frames posteriores al que contiene
la secuencia local que origina el dato podrán disponer de él, no siendo
así para los frames anteriores, en los cuales aparecerá un cuadrado vacío
que indicará que los datos no están disponibles.

Visible ítems Visible ítems ^


Help Help
Description and Tip... Description and Tip,,.
Set Breakpoint Set Breakpoint

Structures Palette Execution Control Palette ^


Auto Grow Auto Grow
Replace Replace with Stacted Sequence
Add Sequence Local Remove Case Structure
Remove Sequence
Add Case After
Add Sequence Local Add Case Before
Add Frame After Duplícate Case
Add Frame Before Delete This Case
Duplícate Frame Remove Empty Cases
Delete This Frame
Show Lase False
Show Frame O Mate This Case False
Make This Frame O

Stacked Sequence Case (para selector booleano)

• Show Case o Show Frame: nos permite ir directamente al subdiagrama


que queremos visualizar sin tener que pasar por todos los case o
frame intermedios que pudiera haber. Al pulsar esta opción, un menú
conteniendo todos los identificadores se desplegará y sólo tendremos
que señalar con el cursor del ratón el que deseemos ver. Si sólo hubiese
dos subdiagramas nos aparecerá directamente el nombre del único
identificador que podemos visualizar, como es el caso del case con
selector booleano.

• Add Case After o Add Frame After: este comando inserta un subdiagrama
vacío inmediatamente después del que se está visualizando.

• Add Case Before o Add Frame Before: inserta un subdiagrama vacío


justo un nivel por encima del que se está visualizando.

• Duplícate Case o Duplícate Frame: inserta una copia del subdiagrama


visible inmediatamente después de él.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 69

• Make This Case o Make This Frame: mueve un subdiagrama a otra po-
sición.
• Remove Case o Remove Frame: borra el subdiagrama visible. Este co-
mando no está disponible si solamente existe un case o un frame.

4.7 FORMULA NODE

Formula Node o Nodo de Fórmula es una función de características


similares a las estructuras vistas anteriormente, disponible en la paleta Structures
del menú Functions, pero que, en lugar de contener un subdiagrama, contiene
una o más fórmulas separadas por un punto y coma. Usaremos Formula Node
cuando queramos ejecutar fórmulas matemáticas que serían complicadas de crear
utilizando las diferentes herramientas matemáticas que LabVIEW incorpora en
sus librerías.
Una vez escrita la fórmula en el interior del rectángulo sólo tendremos que
añadir los terminales que harán la función de variables de entrada o de salida; para
ello desplegaremos el menú Pop-up de la estructura y ejecutaremos el comando
Add Input (Añadir Entrada) o Add Output (Añadir Salida).

.Menú Pop-up Formula Node


Visible ítems ^
Help
Menú Pop-up Variable de Salida
Descriptor» and Tip...
Fórmula
Set Breakpoint

Change to Uutput
Variable de Entrada Remove

Menú Pop-up Variable de Entrada


Figura 4.12 Formula Node.

Cada variable, además, tendrá otro menú Pop-up que permitirá definirla
como de salida si anteriormente era de entrada, o de entrada si en un principio era
de salida (Change to Output o Cambiara Salida, Change to Input o Cambiar
a Entrada). También podremos eliminarla mediante el comando Remove.

© ITES-Paraninfo
70 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

No hay límite para el número de variables o de fórmulas, y nunca podrá


haber dos entradas o dos salidas con el mismo nombre, aunque una salida sí
podrá tener el mismo nombre que una entrada. Todas las variables de salida
deberán estar asignadas a una fórmula por lo menos una vez.
La tabla 4.1 muestra algunas de las funciones de Formula Node.

FUNCIÓN DESCRIPCIÓN

abs(x) Devuelve el valor absoluto de x


acos(x) Calcula el coseno inverso de x en radianes
acosh(x) Calcula el coseno hiperbólico inverso en radianes
asin(x) Calcula el seno inverso de x en radianes
asinh(x) Calcula el seno hiperbólico inverso en radianes
atan(x,y) Calcula la tangente inversa de y/x en radianes
atanh(x) Calcula la tangente hiperbólica inversa en radianes
cos(x) Calcula el coseno de x en radianes
cosh(x) Calcula el coseno hiperbólico de xen radianes
cot(x) Calcula la cotangente de x en radianes
csc(x) Calcula la cosecante de x en radianes
exp(x) Calcula el valor de e elevado a x
ln(x) Calcula el logaritmo natural de x
log(x) Calcula el logaritmo de x en base 10
Iog2(x) Calcula el logaritmo de x en base 2
max(x,y) Compara x con y, y devuelve el mayor valor
min(x,y) Compara x con y, y devuelve el menor valor
mod(x,y) Calcula el cociente de x/y
randQ Genera un número aleatorio entre O y 1
sec(x) Calcula la secante de x en radianes
sign(x) Devuelve 1 si x es mayor que O, O si x es igual a O y -1 si x es
menor que O
sin(x) Calcula el seno de x en radianes
sinc(x) Calcula el seno de x dividido por x en radianes
sinh(x) Calcula el seno hiperbólico de xen radianes
sqrt(x) Calcula la raíz cuadrada de x
tan(x) Calcula la tangente de x en radianes
tanh(x) Calcula la tangente hiperbólica de x en radianes
xAy Calcula el valor de x elevado a y

Tabla 4.1

Si únicamente queremos implementar una ecuación compuesta sólo por una


variable podemos utilizar la función Expression Node (figura 4.13) que aparece en
la subpaleta de númenes, de la paleta de funciones. Las funciones que podemos
utilizar y la sintaxis es idéntica a la estructura Formula Node.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 71

\va\o' numérico de entrada]


~~~» — 1\ i '

Exp'ession Node *m
1 Iffiager de una Fundón de 1 variable
1 y. W-— -— — — —
pfpjí \í J~rX- J pf

Figura 4.13 Uso de Expression Node para ecuaciones de una sola variable.

4.8 VARIABLES LOCALES Y GLOBALES

Las variables son imprescindibles en cualquier tipo de problemas, ya que


permiten almacenar la información necesaria para su resolución.

En LabVIEW todos los controles introducidos en el panel frontal que


generan un terminal en la ventana Diagrama van a ser variables, identificables
por el nombre asignado en la etiqueta. Pero puede ocurrir que queramos utilizar
el valor de cierta variable en otro subdiagrama o en otro VI o, simplemente, que
queramos guardar un resultado intermedio. La forma más sencilla de hacerlo es
generando variables locales y/o globales dependiendo de la aplicación.

VARIABLES LOCALES

En las variables locales los datos se almacenan en algunos de los controles


o indicadores existentes en el panel frontal del VI creado; es por eso que estas
variables no sirven para intercambiar datos entre Vis. La principal utilidad de estas
variables radica en el hecho de que una vez creada la variable local no importa
que proceda de un indicador o de un control, ya que se podrá utilizar en un mismo
diagrama, tanto de entrada como de salida.

Las variables locales están disponibles en el menú All Functions/Structures


de la paleta Functions y disponen del siguiente menú Pop-up:

ítems > |
F
¡™1 > Control
Selec! ítem » Terminal
Ctiangs TD Read Lnca'V^fpblí-3
Hdp

ÍHi reakpoint

Qeaie »
Replace I»

Qpen FnaH Panel _

i ITES-Paraninfo
72 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

• Visible ítems: oculta o visualiza la etiqueta de identificación de la estructura


y, si no existe, permite ponerla.

• Find: permite encontrar el control y terminal del cual procede la variable


local, así como otras variables locales de ese mismo control.

• Change To Read o Change To Write: permite escoger entre leer o escribir


en el control.

• Select ítem: visualiza una lista con el nombre de todos los controles
existentes en el panel frontal y de ella escogeremos el control al cual
queremos que haga referencia nuestra variable. Es por esto que para
poder crear la variable local será imprescindible que el control tenga
asignado un nombre de identificación. Una vez creada la variable local,
si en algún momento se cambia el nombre del control origen, no será
necesario cambiar también el nombre de la variable local, ya que LabVIEW
actualiza los cambios.

• Description and Tip: permite añadir comentarios.

• Set Breakpoint: pone un punto de ruptura para depuración.

• Créate: crea un control, indicador o constante conectados a esa variable


local.

• Replace: sustituye la variable local por cualquier otra función.

VARIABLES GLOBALES

Las variables globales son un tipo especial de VI, que únicamente dispone
de panel frontal, en el cual se define el tipo de dato de la variable y el nombre de
identificación imprescindible para después podernos referir a ella.

Cuando escogemos la función Global del menú All Functions/Structures


creamos un nuevo terminal en el diagrama; este terminal corresponde a un VI que
inicialmente no contiene ninguna variable. Para poderlas añadir haremos doble
clic en el terminal y se abrirá el panel frontal. Una vez abierto, las variables se
definirán igual que cualquier control o indicador de un VI normal. Podemos crear
un VI para cada variable global o definirlas todas en el mismo, que es la opción
más indicada para cualquier aplicación. Cuando terminemos de colocar todas
las variables grabaremos el VI y lo cerraremos. Si una vez cerrado queremos
añadir nuevas variables, bastará con volverlo a abrir e introducir los cambios
necesarios. Para añadir nuevos terminales que hagan referencia a las variables
globales creadas, no volveremos a ejecutar la función Global ya que esto crearía

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 73

un nuevo Vi, sino que abriremos el ya existente mediante el comando Select a


VI... del menú Functions y seleccionaremos la variable en concreto a través de
la ventana Choose the VI to open. El menú asociado a una variable global es
prácticamente similar al de una local.

Visible I terns }
Fínd fr |
Select I tero >• |
Change To flead j
Help ;

Créate
Replace

R*lir.k ¡¡

Show VI Hierarchjí

4.9 PROPERTY NODE

Los property nodes o nodos de propiedad se pueden considerar como


variables que dependen únicamente del terminal a partir del cual se han creado,
y que permiten leer o modificar atributos del panel frontal de un control o
indicador como, por ejemplo, cambiarlo de color, hacerlo invisible, desactivarlo,
leer posiciones de cursores, cambiar escalas, etc. Para crear un property node
basta con seleccionar la opción Créate » Property Node del menú Pop-up de
cualquier control del panel frontal o terminal del diagrama de bloques. Una vez
creado aparece en el diagrama un nuevo nodo que puede ser tanto de escritura
como de lectura. Una pequeña flecha a la izquierda del nodo indica que éste
es de escritura, mientras que una flecha a la derecha indica que es de lectura.
Además los property nodes tienen su propio menú Pop-up como se muestra en
la imagen.
• Change All To Read o Change All To Write: dependiendo de si el nodo es
de escritura o de lectura aparecerá una opción u otra que nos permitirá
cambiar entre ambas. Debido a que un mismo property node puede
tener más de un terminal usaremos esta opción cuando queramos que
todos ellos sean de escritura o de lectura.
• Find: hay diferentes opciones:

© ITES-Paraninfo
74 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

— Control: encuentra el control asociado a dicho property node en el


panel frontal.

— Terminal: encuentra el terminal asociado a dicho property node en el


diagrama de bloques.

— Property Nodes: muestra todos los property nodes existentes en el


diagrama y que están asociados a dicho control.

— Local Variables: muestra las variables locales asociadas al control.

!¡ , JVisible
. >
Change All To Write
Find
Visible ítems
Help For Property Node
Help For Visible
Description and Tip..,
Set Breakpoint

Properties

Change To Write
Add Element

Application control Palette


Express Boolean Palette
Créate
Replace

Select Class

Ñame Forrnat
Disconnect From Control
Linkto
Ignore Errors inside Node

• Visible ítems: oculta o visualiza la etiqueta identificativa del property


node.

• Description and Tip: permite añadir comentarios.

• Replace: sustituye el property node por cualquier otra función.

• Change To Read o Change To Write: cambia a modo de escritura o de


lectura únicamente el terminal seleccionado dejando los demás tal y como
estaban.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 75

• Properties: visualiza todas las propiedades disponibles para el control


asociado al property node y permite cambiar una propiedad por otra
diferente. Podemos acceder directamente a esta opción colocándonos
encima del atributo que deseamos cambiar y pulsando el botón izquierdo
del ratón.

Por ejemplo, algunas de las propiedades para un control numérico son:

— Add Element: añade un nuevo terminal.

— Remove Element: borra el terminal seleccionado.

Position
Bounds

Viable
Disahled
Key Focus
Blinking
Caption
Labe!
Valué

Algunos controles como los graph tienen un gran número de propiedades.


Muchas de estas propiedades se agrupan en categorías, como es el caso de Y
Scale para un indicador XY Graph. Una pequeña flecha a la derecha del atributo
nos indica que se trata de una categoría.

Se pueden seleccionar todos los atributos de una categoría de una sola


vez mediante el comando All elements (Todos los elementos), aunque también
podemos seleccionarlos individualmente escogiendo el atributo específico.

La utilización de property nodes, así como de variables locales y globa-


les, es muy importante ya que permite resolver de forma muy sencilla proble-
mas de una gran complejidad que, de otra manera, serían prácticamente im-
posibles de solucionar. Por eso se aconseja al programador que se familiarice
con el uso de estos tres nodos que le permitirán ahorrar mucho tiempo en un
futuro.

© ITES-Paraninfo
76 LabVIEW 7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

4.10 EJERCICIOS PRÁCTICOS

1. Aplicación estructura Bucle FOR

Deseamos realizar una aplicación que nos permita, dado un número entero,
obtener como resultado la potencia en base 2 que nos indica ese número.

La solución es:

En la figura 4.14 observamos el diagrama de bloques empleando la función


Scale by 2 A n que localizaremos en Functions/Arithmetic&Comparisson/Numeric.
En la figura 4.15 se visualiza el resultado de 2 elevado a 9, en un panel con un
control y un indicador numéricos.

Potencia?
Lili .fc N

Resultado
gsun
U ».§IÍ

J7

Figura 4.14 Ejemplo de estructura FOR.

Potencia? resultaste
r)Í9 .J512

Figura 4.15 Panel frontal compuesto por un control y un indicador numéricos.

2. Aplicación estructura Bucle WHILE

Deseamos introducir un valor numérico y obtener a la salida ese mismo


valor incrementado en uno. Deseamos que esa operación se realice de modo
continuo hasta que pulsemos el botón STOP.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 77

La solución es:

En la figura 4,16 observamos el diagrama de bloques empleando la función


Increment que localizaremos en Functions/Arithmetic&Comparisson/Numeric. En
la figura 4.17 se visualiza el panel frontal.

vajonentradal h/ajgrjglida

'• •'.

3
aro del procesol

STOP

Figura 4.16 Diagrama de bloques empleando estructura WHILE DO.

valor entrada

8-

Figura 4.17 Panel frontal con control e indicador numéricos, así como botón de paro.

© ITES-Paraninfo
78 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

3. Aplicación estructura Bucle WHILE y conexión túnel

Dado un valor numérico entero entre O y 100, y empleando la variable


aleatoria, indicar cuántas veces intenta el programa la concordancia con el número
propuesto hasta alcanzar el valor especificado.

La solución es:

En la figura 4.18 observamos el diagrama de bloques empleando la función


Random Number (0-1) que localizaremos en Functions/Arithmetic&Comparisson/
Express Numeric. En la figura 4.19 se visualiza el panel frontal.

¡fakir número aleatorio!

júmero que busco!

Icuantas veces lo ha intentado]

Figura 4.18 Diagrama de bloques empleando estructura WHILE DO y conexión túnel.

Número que busco


19
Boolean
Valor número aleatorio
19

Cuantas veces lo ha intentado


'35

Figura 4.19 Panel frontal con variable entrada (valor a buscar) e indicadores valor
actual, número de iteraciones y led de valor encontrado.

Ajustar el rango de datos. Si al introducir el valor a buscar se coloca un


valor fuera del rango especificado, veremos que el programa nunca finaliza ya que

) ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 79

estamos comparando 100, en el mejor de los casos, con otro valor mucho mayor.
Para evitar este problema, vamos a fijar el rango de variación de nuestro control
numérico de entrada entre O y 100 con incrementos de 1. Para ello debemos
realizar clic con el botón derecho en el control numérico Número que busco y
seleccionar Data Range.

Número que busco

3J Visible ítems ^
Find Terminal
,, Change to Indicator

Description and Tip...

, Créate ^
1 Replace ^
Data Operations ^
Advanced ^

Representaron

Format & Precisión.,.

Properties

Al seleccionar Data Range nos aparece la pantalla que se muestra en la


figura 4.20, donde introducimos los valores del rango, valor máximo, mínimo e
incremento.
• Se quita la marca de Use Default Range.
• Se ajusta el Default Valué al valor deseado, por ejemplo 10.
• Se ajusta el valor mínimo a 0. Out of range action a Coerce.
• Se ajusta el valor máximo a 100. Out of range action a Coerce.
• Se ajusta el Increment a 1 . Out of range action a Coerce to Nearest.
• La representación se ajusta a la más idónea. En este caso Integer
18 byte.
Una vez ajustado el rango de valores, veremos que si intentamos dar al control
numérico un valor mayor o menor del rango establecido, el programa nos fija el
valor introducido al máximo o mínimo permitido según sea el caso.

ITES-Paraninfo
80 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

;; : :
•• ¡

Appearance ! Data Range i Format and Precisión ' Documentaron

Representation
Default valué
! 0,0000

__ Double precisión
0 Use Default Range
Out of range action
Mínimum --inf Ignore

ignore

OK ] [ Cancel ] | Help

Figura 4.20 Pantalla para definir el rango y formato de los datos.

En la opción Format and Precisión podremos acabar de definir la presen-


tación de los datos en pantalla.

4. Funciones de espera

En el ejercicio anterior hemos comprobado cómo la ejecución del progra-


ma prácticamente es instantánea y no permite ver la evolución en tiempo de
ejecución. Podemos incorporar funciones de espera como Wait Until Next ms
Múltiple para controlar la velocidad de ejecución del bucle.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 81

Número que busco

Boolean
Valor número aleatorio

15

Cuantas veces lo ha intentado

57

Knob

400 600
V /

200-;; -800

o' 1000

Figura 4.21 Panel frontal con variable entrada (valor a buscar) e indicadores valor
actual, número de iteraciones, y led de valor encontrado y valor del retardo.

j^alornúmero aleatorio]

ÍO

júmero que busco!


:H¿ Igojeanl

t»~
[Cuantas veces lo ha intentado!
->HSDi

Figura 4.22 Diagrama de bloques empleando estructura WHILE DO, sincronización


de actividades y conexión túnel.

) ITES-Paraninfo
82 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

5. Aplicación registro de desplazamiento

Deseamos realizar una aplicación que nos permita, dado un número entero,
obtener como resultado 2 elevado a ese valor numérico.

La solución es:

En la figura 4.23 observamos el diagrama de bloques empleando la función


Multiply que localizaremos en Functions/Arithmetic&Comparisson/Numeric. En la
figura 4.24 se visualiza el resultado de 2 elevado a 8.

Figura 4.23 Diagrama de bloques empleando FOR.

Valor de la potencia?
3

Figura 4.24 Panel frontal con variable entrada (valor a buscar) e indicadores valor
actual, número de iteraciones, y led de valor encontrado y valor del retardo.

Los registros de desplazamiento o shift register tienen un par de


terminales colocados a ambos lados del Loop, disponibles tanto en el For
Loop como en el While Loop, que permiten transferir los valores del final de
una iteración al principio de la siguiente. El terminal de la derecha almacena el
valor final de la iteración hasta que una nueva hace que este valor se desplace
al terminal de la izquierda, quedando en el de la derecha el nuevo valor. Un
mismo registro de desplazamiento puede tener más de un terminal en el lado
izquierdo; para añadirlo escogeremos la opción Add Element (Añadir elemento)
del menú Pop-up.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 83

6. Aplicación estructura Case

Deseamos realizar una aplicación que nos permita elegir entre realizar el
producto o la división de dos valores numéricos de entrada y, una vez elegida la
opción, que realice la operación.

La solución es:

Se emplea una estructura Case con una variable selectora booleana, que
permitirá acceder a la realización de la operación de multiplicación en la opción
true (véase figura 4.26), y a la de división en la de False. En ese segundo caso
hemos de considerar la división por O, caso que se considera en el panel frontal
de la figura 4.27, y se desarrolla en los diagramas de las figuras 4.28 y 4.29.

Dato uno
'ir""
Dato dos

MU;.TÜffcA

Resultado Dato uno operación dato 2


Er "
Figura 4.25 Panel frontal con variable selectora booleana de entrada que indica la
operación a realizar, dos controles y un indicador, valores todos numéricos.

Resultado Dato uno operación dato 2\

Jjj.2:
C r;..

Figura 4.26 Diagrama de bloques utilizando estructura Case.

> ITES-Paraninfo
84 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

Dato uno

Dato dos

E ^
Resultado Dato uno operación (Jato 2

División por cero

OK

Figura 4.27 Panel frontal de la aplicación empleo de la estructura Case en el que se


considera el tratamiento de la división por 0.

Dato uno
Resultado Dato uno operación dato 2|
; 'íi'isft
•>¡í.23"

Figura 4.28 Diagrama de bloques si el denominador vale cero. Empleo One Button
Dialog de la paleta Time&Dialog de All Functions para colocar el texto que sale en
pantalla al dividir por cero; este botón de dialogo espera que aceptemos el error con un
clic en OK.

) ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 85

^esultado Dato uno operación dato 2¡

III

Figura 4.29 Diagrama de bloques con denominador distinto de cero. Funciones


matemáticas de división y Equal to O en carpeta Arithmetic&Comparison de Functions.

7. Aplicación estructura Sequence


En el ejercicio 4 hemos diseñado una aplicación donde, dado un valor nu-
mérico entero, se intenta encontrarlo mediante el empleo de una variable aleatoria.
Ahora deseamos saber cuántos milisegundos se tardará en encontrar ese valor.
La solución es:
Emplear la estructura Sequence. En la primera casilla insertamos la función
Tick Count (ms) del menú All Functions/Time&Dialog, que devuelve el valor del
tiempo actual. En la segunda casilla se realiza la búsqueda y en la tercera se
conoce el valor actual al que se le resta el de la primera. De ese modo sabemos
cuánto se ha tardado en realizar la búsqueda.

Número que busco

íl567

Vaíor número aleatorio


567

Cuantas veces ío ha intentado


1155

Tiempo transcurrido en mili segundos


1

Figura 4.30 Panel frontal del tiempo empleado en la búsqueda del valor rango de
O a 100.000.

) ITES-Paraninfo
86 LabVIEW7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

.y n i ,1 LJ u _U ! ijjjj n i

CLQ ruj'D n u n o rLELEJ r_LL3_n ruin. njU3. njj_n_a jifljg .nJLg n_uj3 n_¡)_QJl LLJHJ! n.o q .n.liS_TL

yalor'núrnero aleatorio]

¡Cuantas veces lo ha intentado

1 Q._i-Lñ.n n_G..g. Q_u...g

rnpg transcurrido en mijisegundosl

JÉ.
. q n.ri M g n u Q p n g Q.D u a G ri u P n u p.a r.¡ q p n u p a M p p njj^j n u a o.r-! o n nJ¿j:J n..u P t

Figura 4.31 Diagrama de bloques del cálculo del tiempo invertido en la búsqueda
del valor numérico.

© ITES-Paraninfo
PROGRAMACIÓN ESTRUCTURADA 87

Dado que el tiempo de ejecución para un valor de búsqueda tan pequeño


es casi instantáneo, hemos cambiado el rango del valor de entrada del ejercicio
3 a un rango entre O y 100.000.
Otra alternativa de solución del ejercicio se muestra en la figura 4.32,
donde no se emplea Sequence Local para pasar valores de unas casillas a otras
posteriores. Se emplea la herramienta túnel para acceder a determinados valores
en cualquiera de las casillas del Sequence.

opoonn

f numero aleatorio]

^JúmerQ que busco]

s veces lo ha intentado
m
q..n..o.B..n p a..a o a a iri n u n n u n n u ri n u n n r j 11 u n n 1 1 u p p o o q g p a g q o o p o o p p at

! [0iil] ,^¡n p n n n n n o p n g n p o n o n n n n n.n

[tiempG transcurrido en mili segundos]

IÍ.23Í

Lo üMOOV'o o b a O Q - B O D O O

Figura 4.32 Diagrama de bloques del cálculo del tiempo invertido en la búsqueda del
valor numérico accediendo a los valores de la función Tick Count (ms) mediante túnel.

© ITES-Paraninfo
88 LabVIEW 7.1 PROGRAMACIÓN GRÁFICA PARA EL CONTROL DE INSTRUMENTACIÓN

4.11 RESUMEN DE PALABRAS CLAVE


• Case: cada uno de los sucesos de una estructura condicional.
• Case Structure: estructura condicional.
• Diagram (diagrama): nombre con que se identifica al Panel donde se
encuentran todos los nodos.
• For Loop: estructura de repetición hasta i = N - 1.
• Formula Node: nodo que contiene una ecuación o fórmula.
• Frame: marco que contiene cada uno de los subdiagramas a ejecutar de
una estructura secuencial.
• Function (función): nombre que identifica el menú de funciones del
Diagrama de Bloques.
• Property node: nodos que permiten variar los atributos de un control o
indicador.
• Sequence Structure: estructura secuencial.
• Shift Register. registros de desplazamiento.
• While Loop: estructura de repetición hasta que la condición sea falsa.

> ITES-Paraninfo

También podría gustarte