LabVIEW: Entorno gráfico de programación. José Pelegrí Sebastià
Чтение книги онлайн.
Читать онлайн книгу LabVIEW: Entorno gráfico de programación - José Pelegrí Sebastià страница 18
• El terminal inicializador permite dar un valor inicial al nodo, y equivale a conectar un valor al terminal izquierdo de shift register. Este terminal se coloca siempre en el borde izquierdo de la estructura a la misma altura que el Feedback Node.
• El Feedback Node es el otro terminal y tiene forma de flecha. En el extremo derecho se le conectará la salida, cuyo valor será leído por el extremo izquierdo en la siguiente iteración. En la primera iteración el valor leído por el extremo izquierdo será el conectado al terminal inicializador. Lógicamente, siempre se ejecuta primero la lectura y después la escritura.
El código de la figura 2-10 ilustra el uso del Feedback Node. El programa es igual al de la figura 2-9 (a).
Figura 2-10. Feedback Node.
En el menú Tools > Options > Block Diagram se tiene la opción de insertar automáticamente Feedback Nodes dentro de los bucles cuando sea necesario.
A través del menú contextual de los Feedback Nodes o de su panel de propiedades podremos configurar su aspecto, uno como el mostrado en la figura 2-10, y otro con z-1 (menú contextual > Z-Transform Delay Node), lo cual puede ser más natural en programas de procesado de señal. También se puede configurar cómo se le da el valor inicial (al compilarse el VI, al cargarse en memoria o al comenzar el bucle), el sentido de los datos (derecha a izquierda o al revés), mostrar un terminal de habilitación o el número de iteraciones que hay que esperar antes de que el Feedback Node comience a actuar.
Al igual que en otras estructuras, los datos que entren y salgan de una estructura WHILE lo harán a través de túneles. Una opción muy interesante de los túneles de los bucles (WHILE y FOR) es el Autoindexing, que se puede habilitar a través del menú contextual del túnel cuando se quiera trabajar con arrays. Cuando se cablea un array desde el exterior al interior de un bucle y se habilita el autoindexing, los valores leídos en el interior del bucle de ese terminal serán los elementos que componen el array, uno por cada iteración, en este caso la estructura funciona como un FOREACH
. Cuando el autoindexing está en una salida del bucle ocurre lo contrario: se construirá un array cuyos elementos serán los generados en cada iteración.
En la figura 2-11 puede verse un programa parecido al anterior. En el borde derecho pueden verse tres terminales: el superior es un túnel, el siguiente un shift register y el inferior una salida indexada. El valor de los dos primeros será el generado por el programa en su última iteración (15), mientras que el valor en el último terminal será una lista ordenada de todos los números generados en cada iteración (11, 12, 13, 14 y 15).
Figura 2-11. Ejemplo de túnel, shift register y autoindexing.
2.4. FOR
El bucle FOR es muy parecido al WHILE. También repite el código de su interior un número de veces pero, a diferencia del anterior, este número es fijado a priori y no puede cambiarse una vez empiece a ejecutarse.
Consta de dos terminales numéricos:
• El terminal de iteración se sitúa igual que en el bucle WHILE, está en el interior de la estructura y se va incrementando en una unidad por cada iteración empezando desde cero.
• El terminal de cuenta está colocado en la esquina superior izquierda de la estructura simbolizado con una «N». En él se conectará un valor numérico que será el que fije el número de repeticiones del bucle.
Figura 2-12. Estructura FOR.
Además, desde la versión 8.5 de LabVIEW se puede añadir un tercer terminal a través del menú contextual. Este terminal es el de condición que también tiene el WHILE para detener el bucle. Su utilización sería equivalente al empleo de un BREAK
en el interior de un FOR
. Hay que advertir que el rendimiento del bucle FOR puede disminuir al emplear el terminal de condición.
Todo lo dicho en la explicación del bucle WHILE respecto a los shift register, los Feedback Nodes y la salida indexada también es válido para el FOR. Tanto en el menú contextual del WHILE como del FOR existe la opción de sustituir uno por el otro.
Los túneles indexados son la opción por defecto en los bucles FOR. Cuando se cablea un array de forma indexada como entrada, puede obviarse el terminal de cuenta porque se toma el tamaño del array como el número de veces que se ha de repetir el bucle; es equivalente a un FOREACH
.
Si por cualquier motivo, como cablear un cero al terminal de iteraciones o una entrada indexada con un array vacío, provocara que el bucle FOR no tuviera ninguna iteración, a la salida aparecerán los valores por defecto.
2.5. EVENT
La estructura EVENT fue introducida por primera vez en la versión 6.1 de LabVIEW. Es una estructura muy útil en VI con los que interactúa el usuario porque mejora la eficiencia del programa.
Al igual que la estructura CASE, los EVENT tienen varios subdiagramas y un menú en la parte superior para cambiar el que se muestra. En este menú también se indica una condición que hace que el código del subdiagrama correspondiente se ejecute. La diferencia con CASE es que EVENT detiene la ejecución del hilo del programa hasta que se da esa condición, es decir, congela el programa hasta que ocurre un evento.
En la esquina superior izquierda hay un terminal llamado Event Timeout que se usa en el evento por defecto: el Timeout. El código del diagrama para el evento timeout se ejecutará cuando pase el número de milisegundos indicados en el terminal Event Timeout.
Figura 2-13. Estructura EVENT
Para añadir más subdiagramas hay que proceder de igual manera que con CASE, es decir, a través del menú contextual. Cada diagrama debe tener asociados uno o varios eventos, que se configuran desde la ventana Edit Events, como puede verse en la figura 2-14.
En esta ventana primero se muestra el número del diagrama (Events Case) y, a continuación, la lista de los eventos que pueden dar lugar a la ejecución del diagrama (Event Specifiers). Para añadir o eliminar eventos se usan los botones de abajo (Add Event y Remove). Para definir un evento primero hay que especificar su fuente en Event Sources, los eventos de las secciones Application y This VI están predefinidos y son acciones típicas como cerrar la ventana, presionar una tecla, etc. La fuente de eventos Dynamic sólo está disponible cuando se activa Show Dynamic Event Terminals y se cablean convenientemente. Para más información puede consultarse el tema dedicado a programación multihilo en la sección 10.5; Panes se activa cuando el Panel Frontal se divide en varias partes, Splitters sólo se activa cuando hay uno de estos elementos en el Panel Frontal y, finalmente, Controls muestra una lista de todos los controles que hay en el VI. En Events se podrá elegir el evento concreto asociado a la fuente seleccionada.