1473975874.Estructuras y variable local

Anuncio
Instrumentación Virtual con LabVIEW
 ESTRUCTURAS





WHILE
FOR..
CASE
SEQUENCE
Opciones de selección de CASE
Controles Visibles
Variables Locales
Do While Loop
Terminal de
Iteración
Do While condición is true
Execute Sub diagram
Loop
Terminal
Condicionante
Ejecuta una rutina hasta
que la condición terminal
se cumple.
•While Loop revisa la condición al final del ciclo.
•El ciclo se ejecuta al menos una vez.
•El terminal de iteración contiene el número de veces que el ciclo se ha
ejecutado.
Do While Loop
La primera iteración
inicia en cero
Con Click derecho
derecho podemos
cambiar la condición
For Loop
Contador de Ciclos:
indica cuantas veces
se repite el
subdiagrama
Si N es
cero o
negativo el
ciclo no se
ejecuta
For I=0 to N-1
Ejecuta Código
Next I
Dos atributos:
N – Terminal de conteo
i - Terminal de Iteración
Terminal de iteración
Contiene el número de
iteraciones completas
A partir de LabVIEW7, haciendo
click sobre “WHILE loop” en el
diagrama de bloques puede
cambiarse por “FOR loop”
EJECUTA UN
SUBDIAGRAMA
UN
DETERMINADO
NÚMERO DE
VECES
NOTA: El CERO es
indexado y aparece en
la primera iteración
Se obtiene el último resultado
Se almacenan en cada celda de la
matriz los resultados parciales
Shift Register
• “Shift registers” se utiliza tanto en los WHILE LOOP como en
FOR LOOP.
• Se usan para transferir datos desde una iteración a la siguiente.
• Son similares a las variables estáticas en los lenguajes de
programación basados en texto.
• Un “Shift register” se crea haciendo click sobre el borde
derecho o izquierdo del loop y seleccionando “Add Shift
registers” desde el menú emergente.
• Los datos a cablear en los terminales de cada SR deben ser del
mismo tipo.
Ejercicio: Obtener el penúltimo y último resultado del cuadrado de los
primeros cinco números naturales
“Shift Registers”
Para crear un Shift Register se hace clic derecho en cualquiera de los
bordes verticales y se abre el menú contextual que se ve a continuación y
elegimos Add Shift Register y se crea un par entrada - salida
Los valores previos están
disponibles en los terminales de
la izquierda
Shift Register 1
Contiene i – 1
Contiene i – 2
Contiene i – 3
Shift Register 2
El último valor
pasa al terminal
de la derecha
Contiene i
Para agregar mas elementos se hace clic derecho en el borde izquierdo o derecho,
según donde se quiera agregar el elemento, desde el mismo menú contextual
Sentencias de Selección: Case Structures
Esta estructura es equivalente a IF/ THEN/ ELSE
If condition=TRUE THEN
Execute code
ELSE
Execute Code
End If
CASE SELECT structures
CASE SELECT var
var=1, do code1
var=2, do code2
var=3, do code3
otherwise, do code
Case Structures
Botones para pasar de un diagrama a otro
Selector
Identificador del
Subdiagrama
La estructura CASE tiene al menos dos subdiagramas, uno para TRUE y
otro para FALSE
Acá podemos ver todas las posibilidades de variables de control para la
estructura case
Vamos a ver un ejemplo de uso de cada uno de ellos,
aplicándolos sobre la misma estructura CASE de solo dos
subestructuras con el fin de poder comparar, teniendo en
cuenta que la limitación la impone el control booleano, que
tiene sólo dos valores posibles: TRUE y FALSE
Usando un control numérico: el valor del indicador Numeric 2
cambiara sólo para los valores posibles, 0 y 1, para cualquier
otro valor no
Su valor va de acuerdo
al tipo de control que se
usa
Usando un control Booleano: el valor del indicador Boolean
cambiara sólo para los valores posibles, True y False
Su valor va de acuerdo
al tipo de control que se
usa
Usando un control Ring: 0 y 1
Previo a eso vamos a ver como trabaja el control Ring
El control ring lo que hace es establecer una
correspondencia entre un valor tipo string y un
número, asignando valores consecutivos desde 0 en
adelante.
Se encuentra en la paleta Controls en el Panel Frontal
En la figura lo vemos recuadrado en celeste
Su apariencia en el Panel Frontal es la siguiente:
Como vemos, similar a cualquier control
Con clic derecho abrimos el menú contextual y vamos propiedades:
Al abrir propiedades nos aparece la siguiente pantalla y vamos a ir a la pestaña
Edit Items:
Hacemos clic en Insert y colocamos el texto que corresponde al valor numérico 0
(Item A en nuestro ejemplo)
Hacemos nuevamente clic en Insert y colocamos el texto que corresponde al valor
numérico 1 (Item B en nuestro ejemplo)
Como vemos el valor 0 siempre corresponde al último ítem colocado, pero
podemos cambiar el orden de ser necesario con el uso de los botones Move Up y
Move Down :
Retomemos nuestro ejemplo con la configuración del cuadro original:
A el valor “A” le corresponde “1”
Usando un Tab control: Se encuentra en el Panel Frontal, en la
subpaleta Containers y aparece recuadrado en celeste
En el Panel Frontal nos aparecerá:
En cada pestaña podemos
poner elementos distintos
Vamos a hacer una pequeña modificación al programa para ver el uso del Tab
Control: Vamos a agregar un Indicador para el Producto y otro para la Suma
Producto
Vamos a hacer una pequeña modificación al programa para ver el uso del Tab
Control: Vamos a agregar un Indicador para el Producto y otro para la Suma
Suma
Vamos a usar con control rotativo (Knob) para hacer con un CASE las cuatro
operaciones aritméticas.
El Panel Frontal sería:
CASE: 0, Default
Se ha colocado una
constante para
forzar un 0 en el
resultado
CASE: 1
CASE: 2
CASE: 3
CASE: 4
Haciendo invisibles controles e indicadores
Vamos a ver como hacemos para mostrar u ocultar un control o indicador
Para nuestro ejemplo vamos a usar un indicador tipo termómetro
Panel Frontal
Diagrama de Bloques
Hacemos clic derecho en el ícono
del Diagrama de Bloques o en el
Panel Frontal y se despliega el
menú contextual, allí elegimos:
CreateProperty NodeVisible
En el Diagrama de Bloques nos aparece este instrumento:
Por defecto la variable
lógica “Visible” está
como salida (control),
con clic derecho
sobre este ícono lo
cambiamos por un
indicador (Change to
Write)
Ahora el ícono queda:
Agregamos una variable lógica en el panel de control y la conectamos a la
entrada “Visible”.
Al accionar el switch tenemos:
Sentencias de secuenciación
En lenguajes tradicionales basados en texto, el orden de
ejecución lo impone el orden en que las instrucciones están
escritas.
En LabVIEW sigue el modelo de Flujo de Datos, (un nodo
necesita tener disponibles todos los datos de sus entradas para
ejecutarse), por lo tanto no se puede determinar cual es el
orden de las tareas a ejecutar.
Puede presentarse el caso de nodos independientes, en
situación de ejecutarse simultáneamente, pero por manejo de
los datos, es necesario fijar el orden de los mismos, es decir
establecer una secuencia de ejecución.
Sentencias de secuenciación
• Se trata de un tipo de sentencia que garantiza la ejecución secuencial (uno detrás de
otro) de varios módulos de código.
• Cuando en el diagrama de LabVIEW son definidos varios módulos de código, en
realidad no se sabe en qué orden van a ser ejecutados, es decir, no se sabe cuál de ellos
se ejecutará en primer lugar y cuál en el último lugar.
Hay aplicaciones en las que este orden de ejecución no es importante, pero en otras es de
vital importancia. Por ello, en las aplicaciones donde el orden de ejecución de los
distintos módulos es crítico, resulta imprescindible utilizar las sentencias de
secuenciación para garantizar esa secuencia de ejecución de los módulos.
Sentencias de secuenciación
La herramienta de desarrollo de aplicaciones LabVIEW ofrece dos sentencias de secuenciación. La primera
es la Flat Sequence Structure y se encuentra en Functions/Programming/Structures. Cuando es insertada en
el diagrama de nuestra aplicación, aparece con una única ventana o Frame: es la unidad o elemento donde irá
un módulo dado del código de nuestra aplicación. Para añadir más ventanas, se pulsa sobre la ventana con el
botón derecho del ratón y se ejecuta Add Frame Before o Add Frame After, para añadir la ventana antes o
después de la actual, respectivamente.
En este ejemplo vemos un instrumento que primero simula el llenado de un tanque y luego el aumento de
temperatura.
Sentencias de secuenciación
Se pueden anidar estas estructuras sin problema ni límites de niveles
Sequence 3
Sequence 1
Sequence 2
Sequence 4
Ejemplo Flat Sequence
Ejemplo: hacer un instrumento que prenda en secuencia 5 leds en forma cíclica de izquierda a derecha
Sentencias de secuenciación
Cuando son necesarias muchas ventanas, porque así lo requiere la aplicación,
aparece el problema del espacio en el diagrama, de tener que desplazar varias
pantallas desde el inicio de la secuencia hasta su final. Entonces, lo lógico es
sustituir la sentencia Flat Sequence Structure por la sentencia Stacked Sequence
Structure, la cual funciona exactamente igual que la anterior, solo que apila las
ventanas una encima de otra. Aunque a simple vista no sea posible ver la
secuencia, resulta muy práctico su uso cuando el espacio disponible es pequeño.
Sentencias de secuenciación
Vamos a repetir el ejemplo del tanque y el termómetro con la estructura secuencial
apilada. Nos quedaría algo así:
Panel Frontal
Cuadro 0
Cuadro 1
Trabajando con Variables
Variable Local
Variable Global
Variable Compartida
Trabajando con Variables
Muchas veces dentro de la programación es necesario almacenar el valor de una
variable para poder usarla posteriormente.
En LabVIEW también puede realizarse estas sentencias, almacenando una
variable para luego usarla dentro de otro bloque del VI o bien en otro VI.
LabVIEW dispone de dos tipos de variables locales y globales y a partir de la
versión 8.0 las compartidas.
Creación de una Variable Local
Construimos el siguiente VI, utilizando una Flat Sequence Structure
Creación de una Variable Local
A continuación le agregamos un cuadro a la secuencia, que consistirá en una variable
local que almacenará el último número generado y lo presentará en el PF. La variable
local la seleccionamos
dentro de Data comunications
y es la que esta
recuadrada en celeste:
Creación de una Variable Local
A continuación hay dos pasos fundamentales a realizar:
Primero: determinar a que objeto del programa va a estar enlazado
Segundo: elegir si va a ser de lectura (read) o escritura (wirte).
Para el caso del ejemplo hacer click derecho sobre la variable local y
seleccionar Select Item/Numeric y luego Change to Read
De esta forma queda definido para guardar el
contenido de Numeric y pasarlo a la siguiente
etapa
Creación de una Variable Local
Finalmente le agregamos un indicador a la variable y ejecutamos el programa, comprobando
que este termina con dos indicadores con valores idénticos, es decir el último número
registrado:
Como podemos ver, después de la ejecución los dos indicadores quedan con el mismo valo,
tal como era de esperarse
Descargar