Manual de Ingeniería & Documentación de Arquitectura
Bienvenido a la guía técnica oficial de UniControl S.A.S. para el diseño de lógica secuencial e industrial. Esta plataforma permite modelar Autómatas Finitos (FSM) y sintetizar ecuaciones booleanas bajo norma IEC 61131-3 con máxima confiabilidad, determinismo y aislamiento de fallas.
💡 1. Filosofía y Metodología IEC 61131-3
El desarrollo de control industrial tradicional en PLC suele sufrir del síndrome de "código spaghetti": relés y bobinas cruzadas donde las entradas físicas accionan directamente actuadores en cualquier punto de la rutina.
UniControl impone la Arquitectura Basada en Estados (FSM):
- Abstracción Topológica (FSM Designer): Diseñar primero el mapa de estados de la máquina (ej: Reposo, Llenado, Agitación, Descarga, Falla). En esta etapa no se escribe código.
- Implementación Booleana (Logic Designer): Declarar variables I/O y escribir las ecuaciones que permiten transicionar entre estados.
- Aislamiento de Salidas ("Pass-Through Protection"): Las salidas físicas (válvulas, motores) NO se activan directamente desde sensores de campo. Se activan basándose estrictamente en los Estados (
ST_...) o Timers (t_...) del autómata. Si un sensor falla, la máquina no responderá si no se encuentra en el paso correcto.
🗺️ 2. FSM Designer (Manual Topológico 2D)
El diseñador FSM en fsm.html gestiona la geometría 2D y la arquitectura de la máquina.
Creación de Estados e ID de Estado
- Crear Estado: Ingresa un ID numérico entero (ej:
0,10,160) y su nombre descriptivo (ej:Standby). Haz clic en+. - Estado Especial
ANY(Parada Global/Emergencia): Al hacer clic en+ ANYse crea el nodo globalANY. Las transiciones desdeANYaplican a todos los estados del autómata para paradas de emergencia o resets globales. - Interposición y Desplazamiento de IDs (Shift IDs): Si intentas agregar un estado con un ID ya existente (ej: ID
10), el editor te preguntará si deseas desplazar automáticamente los IDs posteriores (10..Na11..N+1). Todo el mapa de transiciones se actualiza dinámicamente sin romper enlaces.
Transiciones y Recálculo Dinámico de Etiquetas
- Etiquetas Canónicas
X_[origen]_[destino]: Cada transición mantiene strictly su tag determinista (ej:X_0_160). Si mueves o reordenas los IDs de los estados, el editor **recalcula automáticamente** la etiqueta en tiempo real, garantizando que nunca queden etiquetas "inerciales" desfasadas. - Controles Deslizantes (Flecha, Texto, Curva): En la tabla lateral puedes ajustar la curvatura de transiciones bidireccionales, posición de la punta de flecha y desplazamiento del texto.
Herramientas Avanzadas: Pathfinder y Desenredado 🌀
- Algoritmo Desenredador 🌀 (`unentangleSingleTransition` / `runAutoUnentangle`): Ajusta iterativamente la física y curvatura de las flechas para evitar que se pisen visualmente con los nombres de los estados.
- Herramienta Pathfinder (Búsqueda de Rutas Neón): Selecciona 2 estados y presiona P o haz clic en Pathfinder. El editor resaltará todas las rutas posibles en una gama de colores neón (rojos a verdes) proyectados al fondo del lienzo. La ruta más corta se muestra por defecto y las transiciones desde el estado
ANYse des-priorizan automáticamente para no falsear el camino del proceso principal.
⚡ 3. Logic Designer (Variables & Ecuaciones)
En logic_designer.html le damos inteligencia al autómata.
Declaración de Variables I/O
di(Entradas Digitales): Sensores o pulsadores booleanos (ej:cmd_start,sensor_vacio).ai(Entradas Analógicas): Sensores continuos evaluados con comparadores en las ecuaciones (ej:nivel_litros >= 1000).ton(Temporizadores al Trabajo): Declarados con tiempo de retardo (ej:pt = 10s). Se activan mediante binding explícito:t_mezcla@( ST_3_Agitacion ).do(Salidas Digitales): Salidas continuas o por flanco (marcando la casilla Trigger para compilación con relé `R_TRIG`).
nombre_timer@( condicion_activacion ). De lo contrario, el compilador reportará error de sintaxis.
🚨 4. Array de Prioridades y Prevención de Race Conditions
Cuando desde un mismo estado origen salen múltiples transiciones divergentes (ej. desde State 2 salen paso a Agitación, Aborto del operador y Timeout de seguridad), se pueden producir Condiciones de Carrera (Race Conditions) si dos eventos ocurren al mismo milisegundo.
UniControl resuelve esto mediante el Array de Prioridades:
- Usa los botones ⬆️ y ⬇️ en la tabla de prioridades para ordenar las transiciones.
- La transición en la posición `0` tiene la prioridad máxima (ej. Paradas de Emergencia o Abortos).
- Inyección Automática de Bloqueos `NOT (!)`: El compilador inyecta automáticamente prefijos de negación en las transiciones de menor prioridad:
FullEq_Prioridad2 = !X_2_Aborto AND !X_2_Timeout AND ( nivel_litros >= 1000 )
De este modo, si el nivel llega a 1000L pero el operador presiona Abortar, la máquina siempre obedece al comando humano prioritario.
🏷️ 5. Títulos Descriptivos vs Tags Canónicos
Para mejorar la legibilidad del código sin romper el determinismo:
- Tag Canónico: Mantiene la nomenclatura estricta
X_[origen]_[destino](ej.X_0_160) que une la FSM con la lógica. - Título Humano: En la barra del editor de ecuaciones, al lado del target, dispones del campo `Título / Nombre` (ej:
Llenado de Tanque Principal). - El título se almacena en
data.logic.titlesytr.title, y se visualiza en las tablas de trabajo y en las cabeceras del diagrama Ladder.
🔄 6. Sistema de Conciliación Interactiva de FSM
Al modificar un autómata en fsm.html e importarlo en logic_designer.html (vía 📥 FSM), las rutas de los estados pueden haber cambiado.
- Conservadas (Preserved): Transiciones con mismo origen y destino. Se mantienen intactas con sus ecuaciones y títulos.
- Nuevas (New): Transiciones creadas en el nuevo FSM.
- Huérfanas (Orphaned): Ecuaciones escritas anteriormente cuya transición fue modificada o eliminada en FSM.
En la ventana emergente Conciliación de Estructura FSM, el sistema calcula **Sugerencias Inteligentes (`💡 Sugerido`)** basadas en coincidencia de nombres e IDs de estados, permitiéndote re-asignar ecuaciones huérfanas a las nuevas transiciones con un solo clic o descartar ecuaciones obsoletas.
🪜 7. Compilador Ladder & Previsualización Real-Time
El motor incluye un parser sintáctico que compila las ecuaciones booleanas en un Árbol de Sintaxis Abstracta (AST) y genera redes Ladder industriales.
- Previsualización en Tiempo Real: En el editor de ecuaciones, la ventana inferior dibuja instantáneamente la red SVG Ladder a medida que tipeas. Su contenedor cuenta con scroll inteligente anclado al origen (`scrollTop = 0`) para evitar que ramas `OR` complejas queden recortadas.
- Exportación Multiformato:
- 🪜 TXT: Código Ladder ASCII formateado para documentación rápida.
- 🖼️ Visualizar / HTML: Documento HTML interactivo listo para imprimir en formato A4 con encabezado UniControl.
- 📊 CSV: Tabla ordenada para importación en planillas de ingeniería.
🤖 8. UniCo-Pilot (Motor IA Integrado)
UniCo-Pilot es un asistente de ingeniería que se ejecuta 100% en el navegador utilizando la API de Google Gemini (AI Studio).
- Configuración: Haz clic en ⚙️ e ingresa tu API Key personal. Selecciona entre modelos como
Gemini 3.5 FlashoGemini 3.1 Pro. Ningún dato se guarda en servidores externos. - Pensamientos e Insights en Segundo Plano (`cp-insight-card`): Analiza periódicamente el proyecto e informa sobre riesgos operacionales, condiciones de bloqueo o faltantes de parada de emergencia.
- Botón 💡 Tip (con Cooldown): Solicita un consejo de ingeniería en tiempo real.
⌨️ 9. Tabla de Atajos de Teclado y Gestos
| Atajo / Acción | Entorno | Función |
|---|---|---|
Click + Drag (Fondo) |
FSM Canvas | Mover la cámara (Pan en 2D) |
Rueda del Ratón |
FSM Canvas | Acercar / Alejar (Zoom in/out) |
Shift / Ctrl + Click |
FSM Canvas | Selección múltiple de nodos de estado |
Enter (2 estados sel.) |
FSM Canvas | Crear rápida transición entre los estados seleccionados |
| P (2 estados sel.) | FSM Canvas | Ejecutar herramienta Pathfinder (Rutas Neón) |
| Delete / Supr | FSM Canvas | Eliminar estados o transiciones seleccionadas |
| Escape | FSM Canvas | Limpiar selección activa o cancelar Pathfinder |
Ctrl + Z |
FSM / Logic | Deshacer cambio (Undo) |
Ctrl + Y / Ctrl + Shift + Z |
FSM / Logic | Rehacer cambio (Redo) |
📦 10. Caso de Estudio Resuelto: Reactor Batch de Mezcla
"Se requiere automatizar un tanque de mezcla batch. El proceso inicia desde un botón SCADA y debe validar que el tanque esté completamente vacío. Luego, abre válvulas de dosificación hasta alcanzar 1000L. Al completar el nivel, mezcla durante 10 segundos y luego descarga el producto con una bomba de achique. El operador cuenta con botón de Abortar en todo momento. Si se selecciona la opción CIP, realiza un lavado automático de 15 segundos antes de retornar a reposo."
- Estado
0_Standby&1_Pre_Arranque: Validasensor_vacioantes de habilitar la carga. - Bifurcación Prioritaria en Llenado: Prioridad 0 a Aborto (
X_2_4), Prioridad 1 a Timeout 30s (X_2_10), Prioridad 2 a Nivel 1000L (X_2_3). El compilador inyecta los `NOT (!)` requeridos. - Estado Especial
ANY: La parada de emergencia física salta desdeANYhacia10_Falla_Proceso(X_ANY_10) activando la alarma sonora por flanco (`R_TRIG`).
Descarga de Proyectos de Ejemplo
Descarga los archivos oficial de UniControl para cargarlos en los diseñadores: