Social Icons

miércoles, 6 de marzo de 2013

GUÍA LABVIEW (PARTE 1.6 - ESTRUCTURAS DE EJECUCIÓN)

1.6 ESTRUCTURAS DE EJECUCIÓN

Ciclos While

Similar a un Ciclo Do o a un Ciclo Repeat-Until en los lenguajes de programación basados en texto, un Ciclo While, que se muestra en la Figura 1, ejecuta el código que contiene hasta que ocurre una condición.


Figura 1. Un Ciclo While en LabVIEW, un Diagrama de Flujo equivalente a la Funcionalidad de Ciclo While y un Código de Ejemplo Pseudo de la Funcionalidad del Ciclo While

El Ciclo While está ubicado en la paleta Structures. Seleccione el While Loop en la paleta y después use el cursor para arrastrar una selección rectangular alrededor de la sección del diagrama de bloques que desea repetir. Cuando suelte el botón del mouse, un borde del Ciclo While encierra la sección que seleccionó.

Añada objetos del diagrama de bloques al Ciclo While al arrastrarlos dentro del Ciclo While.

El Ciclo While ejecuta el código que contiene hasta la Conditional Terminal, una terminal de entrada, recibe un valor Booleano específico.

También puede realizar manejo básico de error usando la terminal condicional de un Ciclo While. Cuando cablea un cluster de error a la terminal condicional, solamente el valor TRUE o FALSE del parámetro Status del cluster de error pasa a la terminal. También, los elementos del menú de acceso directo Stop if True y Continue if True cambian a Stop if Error y Continue while Error.


La Iteration Terminal es una terminal de salida que contiene el número de iteraciones terminadas. La cantidad de iteraciones para el Ciclo While siempre comienza en cero.

Nota: El Ciclo While siempre se ejecuta por lo menos una vez.

Ciclos Infinitos

Los ciclos infinitos son un error común de programación que involucra un ciclo que nunca se detiene. Si la Conditional Terminal es Stop if True, usted coloca la terminal de un control Booleano afuera de un Ciclo While y el control es FALSE cuando el ciclo comienza, provoca un ciclo infinito.


Figura 2. Control Booleano Fuera del Ciclo While

Cambiar el valor del control no detiene al ciclo infinito ya que el valor es de lectura una vez, antes que el ciclo inicie. Para usar un control para detener un Ciclo While, debe colocar la terminal del control dentro del ciclo. Para detener un ciclo infinito, debe abortar el VI al dar clic en el botón Abort Execution de la barra de herramientas.

En la Figura 3, el Ciclo While se ejecuta hasta que la salida de la función Random Number es mayor o igual que 10.00 y el control Enable es TRUE. La función And regresa a TRUE solamente si ambas entradas son TRUE. De lo contrario, regresa a FALSE.

En la Figura 3, hay un ciclo infinito ya que la función random nunca genera un valor mayor que 10.00.

Figura 3. Ciclo Infinito

Túneles de Estructura

Los túneles alimentan datos desde y hacia estructuras. El túnel aparece como un bloque sólido en el borde el Ciclo While. El bloque es el color del tipo de datos cableado al túnel. Los datos salen fuera de un ciclo después de que el ciclo termina. Cuando un túnel pasa datos a un ciclo, el ciclo se ejecuta solamente después que los datos llegan al túnel.

En la Figura 4, la Iteration Terminal está conectada a un túnel. El valor en el túnel no pasa al indicador de iteraciones hasta que el Ciclo While termina de ejecutarse. Solamente el último valor de la Iteration Terminal se muestra en el indicador de iteraciones.

Figura 4. Túnel de Ciclo While

Ciclos For

Un Ciclo For ejecuta un subdiagrama un número de veces establecido. La Figura 5 muestra un Ciclo For en LabVIEW, un diagrama de flujo equivalente a la funcionalidad de Ciclo For y un código de ejemplo pseudo de la funcionalidad del Ciclo For.


 
Figura 5. Un Ciclo For en LabVIEW, un Diagrama de Flujo equivalente a la Funcionalidad de Ciclo For y un Código de Ejemplo Pseudo de la Funcionalidad del Ciclo For.
 El Ciclo For está ubicado en la paleta Structures. También puede colocar un Ciclo While en el diagrama de bloques, dar clic con botón derecho en el Ciclo While y seleccionar Replace with For Loop en el menú de acceso directo para cambiar un Ciclo While a Ciclo For.


La terminal Loop Count es una terminal de entrada cuyos valores indican cuantas veces se repite el subdiagrama


La Iteration Terminal es una terminal de salida que contiene el número de iteraciones terminadas. La cantidad de iteraciones para el Ciclo For siempre comienza en cero.


El Ciclo For difiere del Ciclo While en que el Ciclo For ejecuta un número de veces establecido. Un Ciclo While detiene la ejecución solamente si existe el valor en la Conditional Terminal.


El Ciclo For en la Figura 6 genera un número aleatorio cada segundo por 100 segundos y muestra los números aleatorios en un indicador numérico.


Figura 6. Ejemplo de Ciclo For

Añadir Temporización a los Ciclos

Cuando un ciclo termina de ejecutar una iteración, inmediatamente comienza la próxima iteración, a menos que alcance una condición de paro. A menudo se necesita controlar la frecuencia y la temporización de la iteración Por ejemplo, si está adquiriendo datos y desea adquirir los datos una vez cada 10 segundos, necesita una manera de temporizar las iteraciones del ciclo para que ocurran una vez cada 10 segundos. Aún si no necesita que la ejecución ocurra a una cierta frecuencia, necesita proporcionar al procesador el tiempo para completar otras tareas, como responder a la interfaz de usuario.

Función de Espera

Coloque una función de espera dentro del ciclo para permitir que un VI se duerma por un cierto tiempo. Esto permite que su procesador maneje otras tareas durante el tiempo de espera. Las funciones de espera utilizan el reloj de milisegundos del sistema operativo.


La función de Espera (ms) espera hasta que el contador de milisegundos cuenta una cantidad igual a la entrada que usted especificó. Esta función garantiza que la razón de ejecución del ciclo sea por lo menos la cantidad de la entrada que usted especificó.



Estructuras de Casos



Una estructura de Casos tiene dos o más subdiagramas o casos. Solamente un subdiagrama es visible a la vez y la estructura ejecuta solamente un caso a la vez. Un valor de entrada determina cual subdiagrama se ejecuta. La estructura de Caso es similar a las instrucciones del interruptor o las instrucciones si...después... en lenguajes de programación basados en texto.


La etiqueta Case Selector en la parte superior de la Estructura de Casos contiene el nombre del valor del selector que corresponde al caso en el centro y a las flechas de incremento y reducción a cada lado. Haga clic en las flechas de Decrement y Increment para desplazarse en los casos disponibles. También puede hacer clic en la flecha hacia abajo a lado del nombre del caso y seleccionar un caso en el menú desplegable.


Cablee un valor de entrada o selector a la Selector Terminal para determinar qué caso se ejecuta. Debe cablear un entero, valor Booleano, secuencia o valor de tipo enumerado a la Selector Terminal. Puede colocar la Selector Terminal en cualquier parte del borde izquierdo de la Estructura de Casos. Si el tipo de datos de la terminal del selector es Booleano, la estructura tiene un caso TRUE o un caso FALSE. Si la Selector Terminal es un entero, secuencia o valor de tipo enumerado, la estructura tiene cualquier número de casos.

Nota: Los valores de cadena de caracteres que cablea a la terminal del selector son sensibles a las mayúsculas/minúsculas de forma predeterminada. Para mostrar resultados no sensibles a las mayúsculas/minúsculas, cablee un valor de caracteres a la terminal del selector, haga clic con botón derecho en el borde de la estructura de Casos y seleccione Case Insensitive Match del menú.

Si no especifica un caso de forma predeterminada para la estructura de Casos para manejar los valores fuera del rango, debe enlistar de forma explícita cada valor de entrada. Por ejemplo, si el selector es un entero y usted especifica los casos para 1, 2 y 3, debe especificar un caso de forma predeterminada a ejecutar si el valor de entrada es 4 o cualquier otro valor entero no especificado.

Nota: Usted no puede especificar un caso de forma predeterminada si cablea un control Booleano al selector. Si hace clic con botón derecho en la etiqueta del selector de casos, Make This The Default Case no aparece en el menú de acceso directo. Haga el control Booleano TRUE o FALSE para determinar cuál caso se ejecuta.

Haga clic con botón derecho en el borde de la estructura de Casos para añadir, duplicar, eliminar o reorganizar casos, así como para seleccionar un caso predeterminado.
Seleccionar un Caso

La Figura 7 muestra un VI que utiliza una estructura de Caso para ejecutar código diferente dependiendo si el usuario selecciona °C o °F para las unidades de temperatura. El diagrama de bloques de arriba muestra el caso TRUE en primer plano. En el diagrama de bloques del centro, el caso FALSE es seleccionado. Para seleccionar un caso, proporcione el valor en el identificador Case Selector o use la herramienta de Etiquetado para editar los valores. Después de seleccionar otro caso, el caso seleccionado es mostrado en el diagrama de bloques, como se muestra en la parte inferior del diagrama de bloques de la Figura 7.


Figura 7. Cambiar la Vista de Casos de una Estructura de Casos

Si usted proporciona un valor de selector que no es del mismo tipo que el objeto cableado a la terminal del selector, el valor aparece en rojo. Esto indica que el VI no se ejecutará hasta que elimine o edite el valor. También, por el posible redondeo de error inherente a la aritmética de punto flotante, no puede usar los números de punto flotante como valores de selector de casos. Si cablea un valor de punto flotante al caso, LabVIEW redondea el valor al entero más cercano. Si escribe un valor de punto flotante en la etiqueta del selector de casos, el valor aparece en rojo para indicar que debe eliminar o editar el valor antes que la estructura pueda ejecutarse.
 
Túneles de Entrada y Salida

Puede crear múltiples túneles de entrada y salida para una estructura de Casos. Las entradas están disponibles para todos los casos, pero los casos no necesitan usar cada unidad. Sin embargo, debe definir un túnel de salida para cada caso.

Considere el siguiente ejemplo: una estructura de Casos en el diagrama de bloques tiene un túnel de salida, pero por lo menos en uno de los casos, no hay valor de salida cableado al túnel. Si ejecuta este caso, LabVIEW no sabe qué valor regresar a la salida. LabVIEW indica este error al dejar el centro del túnel en blanco. El caso no cableado no debe ser el caso que está visible en el diagrama de bloques.

Para corregir este error, muestre los casos que contienen el túnel de salida sin cablear y cablee una salida al túnel. También puede dar clic con botón derecho en el túnel de salida y seleccionar Use Default If Unwired en el menú de acceso directo para usar el valor predeterminado para el tipo de datos de túnel para todos los túneles no cableados. Cuando la salida está cableada en todos los casos, el túnel de salida está en color sólido.

Evite usar la opción Use Default If Unwired. Al usar esta opción no documenta el diagrama de bloques bien y puede confundir a otros programadores que utilizan su código. La opción Use Default If Unwired también hace difícil la depuración del código. Si utiliza esta opción, tome en cuenta que el valor predeterminado usado es el valor predeterminado para el tipo de datos que es cableado al túnel. Por ejemplo, si el tipo de datos es Booleano, el valor predeterminado es FALSE.

Tabla 1. Valores Predeterminados de Tipo de Datos

Otras Estructuras

LabVIEW tiene otros tipos más avanzados de estructuras de ejecución como estructuras de Eventos (usadas para manejar tareas dirigidas por interrupciones como interacción UI) y estructuras de Secuencia (usadas para forzar el orden de ejecución), las cuales están fuera del alcance de este material introductorio. Para aprender más sobre estas estructuras, consulte el tema apropiado en LabVIEW Help.

Pasar Datos entre Iteraciones de Ciclo en LabVIEW

Al programar con ciclos, generalmente debe tener acceso a datos desde iteraciones anteriores del ciclo en LabVIEW. Por ejemplo, si está adquiriendo una parte de los datos en cada iteración de un ciclo y debe promediar cada cinco partes, debe retener los datos de iteraciones anteriores del ciclo.

Registros de Desplazamiento


Use los registros de desplazamiento cuando quiera pasar valores de iteraciones anteriores a través del ciclo a la siguiente iteración. Un registro de desplazamiento aparece como un par de terminales directamente opuestas en las partes verticales del borde del ciclo.

La terminal en la parte derecha del ciclo contiene una flecha hacia arriba y almacena datos de la terminación de una iteración. LabVIEW transfiere los datos conectados en la parte derecha del registro a la próxima iteración. Después que el ciclo se ejecuta, la terminal en la parte derecha del ciclo regresa al último valor almacenado en el registro de desplazamiento.

Cree un registro de desplazamiento al dar clic con botón derecho en el borde izquierdo o derecho de un ciclo y seleccione Add Shift Register en el menú de acceso directo.

Un registro de desplazamiento transfiere cualquier tipo de datos y cambia automáticamente al tipo de datos del primer objeto cableado al registro de desplazamiento. Los datos que usted cablea a las terminales de cada registro de desplazamiento deben ser del mismo tipo.

Puede añadir más de un registro de desplazamiento a un ciclo. Si tiene múltiples operaciones que usan valores de iteraciones anteriores en su ciclo, use múltiples registros de desplazamiento para almacenar los valores de datos desde esos procesos en la estructura, como se muestra en la Figura 8.

Figura 8. Usar Múltiples Registros de Desplazamiento
Iniciar Registros de Desplazamiento

Al iniciar un registro de desplazamiento se restablece el valor que el registro de desplazamiento pasa a la primera iteración del ciclo cuando se ejecuta el VI. Inicie un registro de desplazamiento al cablear un control o constante a la terminal del registro de desplazamiento en la parte izquierda del ciclo, como se muestra en la Figura 9.

Figura 9. Registro de Desplazamiento Iniciado

En la Figura 9, el Ciclo For se ejecuta cinco veces, incrementando el valor que el registro de desplazamiento contiene por uno cada vez. Después de cinco iteraciones del Ciclo For, el registro de desplazamiento pasa el valor final, 5, al indicador y el VI se detiene. Cada vez que ejecuta el VI, el registro de desplazamiento comienza con un valor de 0. Si usted no inicia el registro de desplazamiento, el ciclo utiliza el valor escrito en el registro de desplazamiento cuando el último ciclo es ejecutado o el valor pre determinado para el tipo de datos si el ciclo nunca ha sido ejecutado. Use un registro de desplazamiento no iniciado para conservar la información del estado entre ejecuciones subsecuentes de un VI.

Figura 10. Registro de Desplazamiento No Iniciado

En la Figura 10, el Ciclo For se ejecuta cinco veces, incrementando el valor que el registro de desplazamiento contiene por uno cada vez. La primera vez que ejecuta el VI, el registro de desplazamiento comienza con un valor de 0, el cual es el valor predeterminado para un entero de 32 bits. Después de cinco iteraciones del Ciclo For, el registro de desplazamiento pasa el valor final, 5, al indicador y el VI se detiene. La próxima vez que ejecuta el VI, el registro de desplazamiento comienza con un valor de 5, el cual es el último valor de la ejecución anterior. Después de cinco iteraciones del Ciclo For, el registro de desplazamiento pasa el valor final, 10, al indicador. Si ejecuta el VI otra vez, el registro de desplazamiento comienza con un valor de 10 y así sucesivamente. Los registros de desplazamiento no iniciados retienen el valor de la iteración anterior hasta que usted cierra el VI.
 
Registros de Desplazamiento Apilados

Con registros de desplazamiento apilados, usted puede tener acceso a los datos de iteraciones de ciclo anteriores. Los registros recuerdan los valores de múltiples iteraciones anteriores y llevan esos valores a las próximas iteraciones. Para crear un registro de desplazamiento apilado, haga clic con botón derecho en la terminal izquierda y seleccione Add Element en el menú de acceso directo.

Los registros de desplazamiento apilados pueden ocurrir solamente en la parte izquierda del ciclo porque la terminal derecha transfiere los datos generados solamente desde la iteración actual a la siguiente iteración.


Figura 11. Usar Registros de Desplazamiento ApiladosSi añade otro elemento a la terminal izquierda en el diagrama de bloques anterior, los valores desde las últimas dos iteraciones se llevan a la siguiente iteración, con el valor de la iteración más reciente almacenado en el último registro de desplazamiento. La primera terminal almacena los datos pasados a ella desde la iteración anterior.

DESCARGATE EL PDF AQUÍ
TODOS LOS DERECHOS DE NATIONAL INSTRUMENTS 2013.
 



0 comentarios: