Guía de Ingeniería: FSM y Logic Designer
Bienvenido al entorno de diseño lógico de UniControl S.A.S. Estas herramientas están diseñadas para forzar una arquitectura robusta y estandarizada en la programación de Controladores Lógicos Programables (PLC), separando la topología de la máquina de su implementación booleana.
El Flujo de Trabajo
- Abstracción Mental: Definir los estados en los que puede estar la máquina (reposo, llenado, falla, etc.) y qué eventos provocan el cambio de un estado a otro.
- FSM Designer: Dibujar gráficamente el Autómata Finito (Estados y Transiciones). Esto genera el esqueleto topológico sin pensar en código. Luego, exportar el archivo JSON.
- Logic Designer: Importar el esqueleto. Declarar las I/O (Entradas, Salidas, Timers). Escribir las ecuaciones lógicas de cada transición y asignar Prioridades a las bifurcaciones. Asignar ecuaciones a las salidas basándose únicamente en los estados, evitando la lógica combinacional pasante ("pass-through").
- Exportación: Exportar a Ladder (TXT) o CSV para transcribir el código al entorno del PLC y/o a documentación del proyecto.
Manual de Uso
1. FSM Designer (Diseño Topológico)
Esta herramienta se enfoca exclusivamente en la arquitectura de la máquina, sin escribir código lógico. Crea un mapa mental limpio.
- Crear Estados: Ingresa un ID numérico único y un nombre corto (ej:
1,Reposo). Haz clic en+. Arrastra la caja del estado libremente por el lienzo. Usa el botón ✏️ para editar el nombre sin perder las conexiones de las flechas. - Crear Transiciones: Indica el ID de origen (De) y el ID de destino (A). El sistema nombrará automáticamente la flecha como
X_Origen_Destino. - Ajuste Visual: En la tabla de transiciones verás dos "sliders" (deslizadores). Úsalos para acomodar la posición de la flecha en la curva y desplazar el texto, asegurando que el esquema unifilar sea perfectamente legible.
- Lienzo Infinito: Haz clic sostenido en el fondo para mover la cámara (Pan), y usa la rueda del ratón para hacer Zoom. Activa la 🌐 Grilla para que los bloques se ajusten de forma magnética (Snap) y queden prolijos.
2. Logic Designer (Diseño Lógico y Booleano)
Aquí le damos "vida" al esqueleto. Importa tu JSON generado en el FSM Designer y comienza a programar las condiciones.
- Gestión de I/O (Entradas/Salidas): En la barra lateral, declara tus variables. Para los temporizadores (TON), incluye el Preset Time (ej.
10s). Para las salidas discretas (DO), marca la casilla "Trigger" si la salida es un pulso (Flanco) y no un estado sostenido. - Manejo de Prioridades: ¡Crucial! Si de un mismo estado salen varias transiciones (divergencias), debes usar las flechas ⬆️ y ⬇️ en la tabla para ordenarlas. La que esté arriba se evaluará primero. El sistema inyectará automáticamente bloqueos
NOT (!)en las transiciones inferiores para evitar Race Conditions (condiciones de carrera). - Ecuaciones de Transición: Haz clic en ✏️ Editar. Usa el teclado virtual en pantalla. Qué está permitido: Puedes usar Entradas Digitales (DI), Entradas Analógicas con comparadores (
>,<,==), Temporizadores, y evaluar si estás en un Estado determinado (ST_...). - Ecuaciones de Salida: Haz clic en ✏️ Editar. Regla Estricta: NO puedes usar Entradas directamente. Para encender un motor o abrir una válvula, solo puedes basarte en la topología, es decir, evaluar Estados (
ST_...), Transiciones (X_...) o Timers. Esto elimina la lógica "spaghetti". - Compilador Ladder: Al presionar 🪜 Ladder (TXT), el sistema leerá tus ecuaciones booleanas, validará los paréntesis y la sintaxis, y dibujará matemáticamente un esquema Ladder en formato ASCII respetando los estándares industriales.
Caso de Estudio: Reactor Batch de Mezcla
📄 Pliego de Condiciones (Requerimiento del Cliente):
"Necesitamos automatizar un tanque de mezcla. El sistema debe arrancar desde un botón en el SCADA. Primero, debe asegurarse de que el tanque esté vacío. Si está vacío, debe abrir las válvulas de dos productos hasta alcanzar 1000 litros. Al llegar al nivel, debe agitar la mezcla durante 10 segundos y luego descargar el producto encendiendo una bomba de achique.
El operador debe tener un botón para Abortar el proceso y vaciar el tanque en cualquier momento. Al finalizar la descarga normal, el sistema vuelve a reposo, a menos que se haya seleccionado la opción de 'Lavado CIP', en cuyo caso debe hacer un ciclo de lavado de 15 segundos antes de quedar listo para el próximo lote. Queremos alarmas si algún proceso tarda más de lo debido."
"Necesitamos automatizar un tanque de mezcla. El sistema debe arrancar desde un botón en el SCADA. Primero, debe asegurarse de que el tanque esté vacío. Si está vacío, debe abrir las válvulas de dos productos hasta alcanzar 1000 litros. Al llegar al nivel, debe agitar la mezcla durante 10 segundos y luego descargar el producto encendiendo una bomba de achique.
El operador debe tener un botón para Abortar el proceso y vaciar el tanque en cualquier momento. Al finalizar la descarga normal, el sistema vuelve a reposo, a menos que se haya seleccionado la opción de 'Lavado CIP', en cuyo caso debe hacer un ciclo de lavado de 15 segundos antes de quedar listo para el próximo lote. Queremos alarmas si algún proceso tarda más de lo debido."
⚙️ El Análisis del Programador:
Al leer el pliego, un programador inexperto empezaría a cruzar relés y bobinas en serie. Nosotros usaremos un FSM. El análisis revela los siguientes desafíos:
Al leer el pliego, un programador inexperto empezaría a cruzar relés y bobinas en serie. Nosotros usaremos un FSM. El análisis revela los siguientes desafíos:
- La Validación Inicial: No podemos pasar de 0_Standby a Llenado directamente. Necesitamos un estado 1_Pre_Arranque que chequee el sensor de vacío. Si no está vacío, no se debe arruinar el producto.
- Bifurcaciones de Error (Timeouts): Los sensores fallan. ¿Qué pasa si la válvula se rompe y el nivel nunca llega a 1000 litros? El tanque rebasaría o el programa quedaría colgado en 2_Llenado para siempre. Solución: Agregaremos un Timer de 30s. Desde Llenado, debe haber una transición a un estado seguro 10_Falla_Proceso.
- Prioridades Cruciales: Desde 2_Llenado ahora salen 3 caminos posibles:
- El camino normal (Llegó a 1000L -> va a Agitación).
- El camino de error (Pasaron 30s -> va a Falla).
- El camino de Aborto (El operario pulsó 'Parar' -> salta directo a Descarga para vaciar).
NOT (!)automáticamente. - Aislamiento de Salidas: La válvula del Producto B solo debe abrirse en el estado de Llenado, pero solo cuando el nivel pase de 500L. La ecuación de la salida será:
ST_2_Llenado AND (nivel_litros >= 500). El PLC nunca abrirá la válvula si no estamos formalmente en ese paso del proceso.
Descarga del Ejercicio Resuelto
Para ver cómo se resolvieron matemáticamente estos desafíos, descarga los siguientes archivos de proyecto y cárgalos en sus respectivas herramientas.