LabVIEW: Entorno gráfico de programación. José Pelegrí Sebastià
Чтение книги онлайн.
Читать онлайн книгу LabVIEW: Entorno gráfico de programación - José Pelegrí Sebastià страница 17
Figura 2-4. FLAT SEQUENCE con dos frames.
2.2. CASE
La estructura CASE es el equivalente a varias de los lenguajes basados en texto: IF
, SWITCH
y TRY
. Su utilidad es ejecutar un código u otro dependiendo de una condición.
Al igual que una estructura SEQUENCE, en este caso también se tiene un menú en la parte superior donde se puede elegir el subdiagrama que se muestra. En este menú se puede ver la condición para ejecutar el código del subdiagrama correspondiente. En la figura 2-5 se muestra un CASE con dos subdiagramas: uno se ejecutará cuando la condición que se evalúa sea FALSE y otro cuando sea TRUE.
Figura 2-5. Estructura CASE.
El terminal que aparece en el lado izquierdo marcado con el símbolo «?» es llamado selector. El valor que llega a este selector es la condición que se evalúa para seleccionar el subdiagrama a ejecutar. Si el tipo de datos que se conecta al selector del CASE es booleano, éste actuará como una sentencia IF… THEN…ELSE
de un lenguaje de texto tradicional. También pueden conectarse otros tipos de datos; en este caso actuará como un SWITCH…CASE
. Pueden conectarse al selector datos booleanos, numéricos (incluidos enum y ring), strings y clusters de error. En la figura 2-6 pueden verse todos estos casos.
Figura 2-6. Tipos de datos que son válidos en un CASE.
Para un selector booleano sólo se tendrán dos casos: verdadero o falso. Para numéricos, la condición será que el dato del selector sea igual al mostrado en el menú del CASE, para datos enum o ring se puede escribir el nombre del ítem en lugar del valor numérico. Con los strings sucede lo mismo que con los numéricos enum o ring: el valor mostrado en el menú aparecerá como un texto encerrado en comillas dobles. En caso de conectar al selector un cluster de error, cambiará el color del borde de la estructura, y los subdiagramas se ejecutarán dependiendo de si el selector marca un error o no.
Cuando el selector se conecta a un string o a un dato numérico, es obligatorio tener algún caso que se ejecute por defecto, es decir, debe haber un caso que se ejecute cuando en el selector haya un valor que no esté asignado explícitamente a algún subdiagrama. Para hacer que un subdiagrama sea ejecutado por defecto, debe seleccionarse Make This The Default Case en el menú contextual.
Se pueden agrupar varios casos en los CASE numéricos y strings escribiendo los valores separados por comas. Por ejemplo, en el caso de strings se podría escribir «“texto1”, “texto2”
».
Además, en los numéricos se puede asignar un rango de valores; por ejemplo, si se desea ejecutar el mismo código cuando la entrada tiene el valor 4, 5, 6, 7 y 8, en el menú del CASE se escribirá «4..8
». También se puede combinar esta técnica con la anterior.
Para pasar datos a los subdiagramas del CASE se utilizarán los túneles. En el caso de datos de salida, todos los subdiagramas deben proporcionar un valor; hasta que esto no ocurra LabVIEW indicará el error missing assignament to tunnel y aparecerá el túnel con el interior vacío, como se muestra en la parte derecha de la figura 2-7. También existe la opción de marcar sobre el túnel Use Default If Unwired, con lo que se consigue que se asigne el valor por defecto para todos aquellos casos en los que no se ha cableado un valor en el túnel de salida. Finalmente, a través del menú contextual del túnel se pueden cablear de forma automática los túneles en todos los subdiagramas con la opción Linked Input Tunnel.
Figura 2-7. Error en un CASE: túnel vacío.
Por último, también hay que decir que se puede cambiar el orden de los subdiagramas desde la opción Rearrange Cases… del menú contextual.
2.3. WHILE
El bucle WHILE repetirá el código de su interior hasta que se cumpla una condición, que es evaluada en cada iteración.
En la figura 2-8 puede verse el aspecto de este bucle, en el que se aprecian dos terminales:
• El terminal de iteración es el cuadrado azul con el símbolo «i». El valor de este terminal es un número entero que irá aumentando en una unidad por cada iteración del bucle, empezando a contar desde cero.
• La condición de stop es el terminal verde de la esquina inferior derecha de la imagen. A este terminal se podrá conectar bien un valor booleano, bien un cluster de error. A través del menú contextual podrá elegirse para los booleanos que el bucle se detenga cuando el valor sea TRUE (Stop if True) o FALSE (Continue if True). En el caso de los cluster de error sucede algo parecido con Stop on Error y Continue while Error.
Figura 2-8. Estructura WHILE.
Otra de las opciones que muestra el menú contextual es Add Shift Register. Esta herramienta añade dos terminales a cada lado de la estructura, terminales que sirven para transferir un valor desde una iteración del bucle a la siguiente. Los valores se pasarán a la siguiente iteración en el terminal de la derecha y se leerán en el de la izquierda. Si se conecta un valor al terminal de la izquierda en el exterior de la estructura, éste será el valor inicial que circulará por ese cable en la primera iteración.
En la figura 2-9 (a) se muestra el uso de un shift register. En la primera iteración se leerá el valor 10 del terminal de la izquierda, se le sumará 1 y se escribirá en el terminal de la derecha el valor 11. En la siguiente iteración este valor será el leído en el terminal de la izquierda, después se le volverá a sumar 1 y así sucesivamente hasta que se cumpla la condición de parada del bucle, en este caso que el número sea mayor o igual a quince. Este proceso puede comprobarse ejecutando el código de la figura con la opción de Highlight Execution activada.
Figura 2-9. (a) Shift register en un bucle WHILE. (b) Varios shift registers.
El shift register de la izquierda puede extenderse para mostrar más terminales. El terminal superior tendrá el valor que se escribió en la derecha en la iteración anterior; el siguiente terminal tendrá el valor que se escribió en la derecha dos iteraciones antes, y así sucesivamente. El concepto es similar al retraso (z-1) en procesado digital de señales.
En el ejemplo de la figura 2-9 (b) se puede ver un ejemplo del uso de varios shift register. La tabla 2-1 muestra los valores que tendrán cada uno de los terminales en cada iteración.
Tabla 2-1. Valores de los shift register en cada iteración.