Hay dos tipos de SEQUENCE: STACKED SEQUENCE y FLAT SEQUENCE.
La primera era la única disponible en versiones más antiguas de LabVIEW. Tiene un menú en la parte superior donde se indica la numeración del frame que se muestra, el número total de frames que contiene y además da la opción de situarse en otro. En la figura 2-2 se muestran superpuestos los dos frames de la misma estructura.
Figura 2-2. Frames de una secuencia.
El menú contextual puede desplegarse presionando con el botón secundario del ratón en el borde de la estructura. Este menú permite crear frames antes y después del mostrado, además de otras opciones. La opción Sequence Local crea unos ‘túneles’ entre un frame y los demás para compartir datos; en uno de ellos se escribirá un valor (simbolizado con una flecha hacia el exterior del frame) y en los posteriores podrá leerse (con una flecha hacia el interior); no se podrá leer en frames anteriores al de escritura porque evidentemente el dato en el túnel aún no ha sido escrito.
Figura 2-3. Sequence Local: permite compartir datos entre frames.
También pueden pasarse y recibirse datos desde una estructura SEQUENCE al exterior a través de túneles, representados mediante un pequeño cuadrado en el borde de la estructura. Cuando hay un dato de salida, sólo un frame de la estructura puede escribir valores en él.
FLAT SEQUENCE funciona de igual forma, sólo que es más visual: los frames se ven uno a continuación del siguiente, el orden de ejecución será de izquierda a derecha. En este caso no hay Sequence Local y los datos podrán cablearse directamente desde un frame a otro a través de túneles. El menú contextual también será el que permita añadir y eliminar frames. Se puede cambiar de un tipo de SEQUENCE a otro de forma automática.
En la figura 2-4 puede verse una estructura FLAT SEQUENCE con dos frames: en el primero se genera un número aleatorio y se pasa al segundo frame a través de un túnel.
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