Como se ha comentado en el tema 3.1, Flowol ofrece una forma elemental de concurrencia o paralelismo, de modo que proporciona la posibilidad de programar procesos tales que su ejecución transcurra simultáneamente. Ésta es una característica propia de los lenguajes orientados al control automático y la robótica. Piénsese, por ejemplo, que en el caso de un robot industrial varias de sus articulaciones deben moverse simultáneamente. O, en el caso de una estación meteorológica, se debe atender a la recogida de datos simultáneamente en varios sensores. Hasta ahora sólo habíamos estudiado programas con una línea de flujo única. Pero según lo dicho, Flowol permite diseñar un programa con varios puntos de inicio simultáneos; por así decir, varios procesos o líneas de flujo que se ejecutan simultáneamente (aparentemente en "en paralelo"):
En una estructura de programa como la representada existen dos o más procesos de programa (4 como máximo en Flowol) que comienzan a ejecutarse a la vez, y cada uno termina (o continúa indefinidamente) independientemente de los demás a no ser que se habilite un sistema para sincronizar la ejecución de los procesos. Cada proceso independiente comienza con un terminador Inicio y finaliza con un terminador Alto. Pero si en alguno de los procesos se utiliza el terminado Páralo Todo en lugar de Alto, cuando éste se alcanza y finaliza dicho proceso, también detiene a todos los demás que se hallen en curso. El número máximo de procesos concurrentes en Flowol es de 4. Si en un programa se utilizan más, sólo los 4 primeros (según el orden en el que se han ido añadiendo) serán tenidos en cuenta. El uso o no de programación concurrente en un programa depende del problema concreto de control del que se trate y del tipo particular de solución que quiera o pueda dársele.
Sincronización de procesos concurrentes Hemos indicado antes que los procesos concurrentes trascurren independientemente unos de otros a no ser que se habilite un sistema para coordinar o sincronizar la ejecución de los mismos (si es que ello es necesario) Supón, por ejemplo, que deseas programar la intermitencia de una lámpara situada en la primera salida digital de la interfaz de control, con un período de 2 s (1 s de encendido y 1 s de apagado). Por otra parte, deseas hacer sonar un zumbador situado en la segunda salida digital durante 1.5 s cada 2 períodos de intermitencia. ¿Cómo podemos activar el zumbador cuando es debido sin dejar de seguir realizando los destellos?. Esto supone la ejecución simultánea de dos procesos independientes entre sí. Para llevarlo a cabo, podemos iniciar dos líneas de flujo simultáneas: una que controle el parpadeo de la lámpara y otra que controle el sonido del zumbador. Ahora bien: teniendo en cuenta que el sonido sólo debe activarse una vez cada dos destellos. Observa el siguiente programa, que ofrece una posible solución:
En este programa, se utiliza la variable Fuentes
|