Cree una aplicación maestro / esclavo
El patrón de diseño maestro / esclavo consta de múltiples bucles paralelos. El bucle que controla a todos los demás es el maestro y los bucles restantes son esclavos. Un bucle maestro siempre controla uno o más bucles esclavos. Dado que la comunicación de datos directamente entre estos bucles interrumpe el flujo de datos, debe realizarse escribiendo y leyendo en arquitecturas de mensajería, es decir, variables locales o globales, ocurrencias, notificadores o colas en LabVIEW. La Figura 1 muestra cómo los diferentes bucles se conectan entre sí utilizando datos compartidos.
Figura 1: Descripción general de maestro / esclavo
Ejemplo: sincronizar bucles
Esta aplicación tiene los siguientes requisitos:
-
Cree un controlador de mensajes en cola para manejar la interfaz de usuario. La interfaz de usuario debe contener dos botones de proceso de alternancia con LED y un botón de salida.
-
Cree dos procesos separados que enciendan y apaguen un LED individual a diferentes velocidades (intervalos de 100 y 200 ms). Estos dos procesos se controlarán mediante la interfaz de usuario.
Nuestro primer paso será decidir qué proceso será el maestro y qué procesos serán los esclavos. En este ejemplo, la interfaz de usuario se colocará dentro del bucle maestro y los dos procesos LED parpadeantes serán los dos bucles esclavos. La interfaz de usuario controlará el funcionamiento de cada lazo esclavo con variables locales.
Ahora estamos listos para comenzar nuestra aplicación LabVIEW Master / Slave. Para ver la aplicación Master / Slave final, abra el VI adjunto (SynchLoops.vi).
Arquitecturas de mensajería (datos compartidos)
Problema : si varios bucles intentan escribir datos en la variable compartida al mismo tiempo, no hay forma de saber qué valor se puede escribir finalmente. Esto se conoce como condición de carrera.
Solución : coloque un par de "semáforo adquirir / liberar" alrededor de cualquier fragmento de código que escriba en el global. Esto asegura que varios bucles no intenten escribir en el global al mismo tiempo. Entre los ejemplos incluidos con LabVIEW hay un par que demuestran el uso de semáforos. Los semáforos bloquearán los datos globales mientras se escriben para evitar una condición de carrera.
Sincronización
Problema : Dado que el patrón de diseño maestro / esclavo no se basa en la sincronización, es posible que los bucles esclavos comiencen a ejecutarse antes que el bucle maestro. Por lo tanto, inicializar el bucle maestro antes de que los bucles esclavos comiencen a ejecutarse puede ser un problema.
Solución : las ocurrencias se pueden utilizar para resolver este tipo de problemas de sincronización.
Para encontrar ejemplos que demuestren el uso de ocurrencias consulte los ejemplos de envío de LabVIEW. La Figura 2 ilustra un ejemplo sobre cómo utilizar las ocurrencias.
Figura 2: Ejemplo de ocurrencia