Manual Técnico de Ingeniería & Especificación
Guía oficial de arquitectura para la sintaxis de lógica secuencial, diseño autómata y compilación Ladder bajo norma IEC 61131-3 — UniControl S.A.S.
💡 1. Filosofía y Metodología IEC 61131-3
El desarrollo de lógica de control en PLCs industriales sufre habitualmente de acoplamiento directo y lógica desestructurada ("código spaghetti"), donde las entradas de campo activan directamente salidas físicas sin validar el estado operativo de la máquina.
La suite de control de UniControl S.A.S. impone la arquitectura estricta basada en Autómatas Finitos de Estado (FSM):
Modelar los estados físicos y operacionales de la máquina (ej: Standby, Llenado, Agitación, Descarga, Falla) y las vías de transición permitidas. En este nivel no se escribe código.
Declarar el mapa de variables I/O y escribir las ecuaciones que rigen el salto entre estados, ordenadas por rigurosa prioridad de evaluación.
Las salidas físicas (válvulas, motores, bombas) NUNCA son accionadas directamente por sensores o pulsadores de campo. Se activan evaluando únicamente los Estados (ST_...), Transiciones (X_...) o Timers (t_...) del autómata.
🗺️ 2. FSM Designer (Manual Detallado del Editor 2D)
El diseñador FSM en fsm.html gestiona la geometría 2D, estados y transiciones del autómata.
2.1 Creación y Gestión de Estados
- Crear Estado: Ingresa un ID numérico entero positivo (ej.
0,10,160) y el nombre representativo. Haz clic en+. - Estado Especial
ANY(Parada Global/Emergencia): Al pulsar+ ANYse crea el estado globalANY. Las transiciones que parten desdeANYaplican automáticamente como interrupciones o paradas de emergencia globales desde cualquier punto del autómata. - Interposición y Desplazamiento de IDs (Shift IDs): Si intentas registrar un ID ya existente (ej: ID
10), el sistema detecta el conflicto y te ofrece desplazar en +1 los estados contiguos (10..Na11..N+1). Toda la matriz de transiciones se actualiza de forma transparente.
2.2 Transiciones y Recálculo Dinámico de Tags Canónicos
- Tags Canónicos Deterministas: Cada transición posee el tag invariantemente formateado como
X_[origen]_[destino](ej.X_0_160). - Recálculo Dinámico Inmediato: Al mover, renumerar o desplazar IDs de estados, las etiquetas de transición se recalculan dinámicamente en tiempo real (
t.label = X_${t.from}_${t.to}), eliminando permanentemente el problema de etiquetas "inerciales" o desfasadas. - Títulos Humanos Descriptivos: Puedes asignar un título representativo a cada transición (ej:
Llenado de Tanque Principal) que se sincroniza automáticamente con Logic Designer y los diagramas Ladder. - Controles Deslizantes (Flecha, Texto, Curva): En la tabla lateral dispones de deslizadores para acomodar la posición de la flecha, la curvatura de transiciones bidireccionales y la altura del texto.
2.3 Desenredado Físico 🌀 y Motor Pathfinder
- Algoritmo Desenredador 🌀 (`unentangleSingleTransition` / `runAutoUnentangle`): Ajusta iterativamente la física y curvatura de las flechas para evitar que las líneas de transición pisen o tapen las cajas de los estados.
- Motor Pathfinder (Navegación de Rutas Neón): Selecciona 2 estados y presiona P o haz clic en Pathfinder. El sistema ejecutará una búsqueda BFS/Dijkstra y proyectará todas las rutas posibles al fondo del lienzo usando un gradiente HSL neón (de rojo a verde). La ruta más corta se marca por defecto y las transiciones desde el estado
ANYse des-priorizan automáticamente para revelar el flujo del proceso principal.
⚡ 3. Logic Designer (Variables & Ecuaciones Booleanas)
En logic_designer.html se implementan las ecuaciones matemáticas de control.
3.1 Declaración del Mapa I/O
di(Entradas Digitales): Declaración de pulsadores y detectores booleanos (ej.cmd_start,sensor_vacio).ai(Entradas Analógicas): Variables continuas evaluadas mediante comparadores relacionales (>,<,>=,<=,==,!=), por ejemplo:nivel_litros >= 1000.ton(Temporizadores al Trabajo): Se definen especificando el Preset Time (ej.pt = 10s,500ms). Su activación en las ecuaciones requiere la sintaxis estricta:nombre_timer@( condicion_activacion )
Ejemplo:t_mezcla@( ST_3_Agitacion )do(Salidas Digitales):- Salida Sostenida (`isTrigger: false`): Activa mientras la ecuación sea verdadera.
- Salida de Pulso / Flanco (`isTrigger: true`): Compilada automáticamente con un relé de flanco de subida
R_TRIG(...).
timer@( condicion ) es requerida por el compilador AST para vincular el temporizador con la red Ladder correspondiente.
🚨 4. Array de Prioridades y Prevención de Race Conditions
Cuando desde un mismo estado divergente (ej: State 2 - Llenado) parten múltiples transiciones (ej: Abortar X_2_4, Timeout X_2_10, Nivel Completo X_2_3), se corre el riesgo de Condiciones de Carrera (Race Conditions) si varios eventos ocurren al mismo escaneo del PLC.
Formulación Matemática de Negaciones Inyectadas
El evaluador de prioridades ordena las transiciones de la posición $0$ (máxima prioridad) a la posición $K-1$. Para cualquier transición en el índice $k > 0$, el compilador expande e inyecta automáticamente prefijos de bloqueo `NOT (!)` sobre todas las transiciones superiores:
$$\text{FullEq}_k = \left( \bigwedge_{i=0}^{k-1} \neg \text{Label}_i \right) \land (\text{Eq}_k)$$Ejemplo para la transición de Nivel Completo `X_2_3` (Prioridad 2), donde Abortar `X_2_4` es Prioridad 0 y Timeout `X_2_10` es Prioridad 1:
FullEq = !X_2_4 AND !X_2_10 AND ( nivel_litros >= 1000 )
Esto garantiza que si el operador pulsa Abortar al mismo instante en que se alcanzan los 1000L, el PLC ejecutará la orden de seguridad humana sin dudar.
🏷️ 5. Títulos Descriptivos Humanos vs Tags Canónicos
Para simplificar el mantenimiento sin alterar el determinismo matemático:
- Tag Canónico Invariante: Mantiene la nomenclatura estricta
X_[origen]_[destino](ej.X_0_160) que vincula 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 registra en
data.logic.titlesy se despliega en las tablas de trabajo, en los selectores de conciliación y en las cabeceras del diagrama Ladder.
🔄 6. Sistema de Conciliación Interactiva de FSM
Cuando un proyecto ha sufrido cambios estructurales en `fsm.html` (estados renumerados, transiciones agregadas o reorientadas) y se re-importa en `logic_designer.html`, el sistema inicia el flujo de **Conciliación Interactiva**.
- Conservadas (Preserved): Transiciones cuyo par $from \rightarrow to$ coincide. Se conservan sus ecuaciones y títulos intactos.
- Nuevas (Added): Transiciones introducidas en la nueva FSM.
- Huérfanas (Orphaned): Ecuaciones escritas en el proyecto previo cuya transición fue modificada o removida en FSM.
En el modal Conciliación de Estructura FSM, el sistema calcula una matriz de similitud basada en nombres e IDs de estados y resalta las **Sugerencias Inteligentes (`💡 Sugerido`)**, 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 parsea las ecuaciones booleanas en un Árbol de Sintaxis Abstracta (AST) y genera redes Ladder industriales.
- Previsualización Real-Time Sin Recorte: En la parte inferior del editor de ecuaciones, la ventana redibuja instantáneamente la red SVG Ladder. Su contenedor utiliza alineación `align-items: flex-start` con scroll anclado a `scrollTop = 0`, eliminando el problema de recorte de píxeles en ramas `OR` complejas.
- Formatos de Exportación:
- 🪜 TXT: Esquema Ladder ASCII ideal para documentación rápida.
- 🖼️ Visualizar / HTML: Documento vectorial interactivo listo para imprimir en A4.
- 📊 CSV: Tabla estructurada para ingeniería de detalle.
🤖 8. UniCo-Pilot (Motor IA Integrado)
UniCo-Pilot es un agente de auditoría y asistencia que opera 100% en el navegador utilizando la API de Google Gemini (AI Studio).
- Configuración Segura: Haz clic en ⚙️ e ingresa tu API Key personal. Selecciona entre modelos como
Gemini 3.5 FlashoGemini 3.1 Pro. Tu clave nunca abandona tu navegador. - Insights Silenciosos (`cp-insight-card`): Evalúa en segundo plano condiciones de bloqueo, interlocks faltantes o violaciones de la norma IEC 61131-3.
- Acciones Rápidas: Auditoría de prioridades (`prio`), eliminación de pass-through (`passthrough`), amarres de seguridad (`interlocks`) y recomendación de temporizadores anti-rebote (`debounce`).
🏭 9. Guía de Transcripción a PLCs Industriales
Para implementar la lógica generada en plataformas de automatización comerciales:
9.1 Siemens TIA Portal (S7-1200 / S7-1500)
- Crea un Data Block global
DB_FSMcon una variable enteroActualState(INT). - En un FC en lenguaje Ladder (LAD), crea un segmento (Network) por cada transición.
- Usa un bloque comparador
CMP ==para validarDB_FSM.ActualState == Origen. Agrega los contactos de entrada y las negaciones de prioridades superiores (`NOT`). En la bobina, asigna el salto de estadoMOVE (Destino -> DB_FSM.ActualState).
9.2 Rockwell Studio 5000 (Logix5000)
- Define un Tag `DINT` denominado `Current_State`.
- En la rutina Ladder, usa la instrucción `EQU Current_State Origen` al inicio del Rung.
- Inserta las condiciones booleanas de la transición y finaliza con `MOV Destino Current_State`.
9.3 CODESYS / Schneider EcoStruxure Machine Expert
- Puedes implementar la estructura directamente en Texto Estructurado (`ST`) usando una sentencia `CASE Current_State OF` o en Diagrama de Funciones Secuenciales (`SFC` / Grafcet).
⌨️ 10. Cheatsheet Completa de Atajos de Teclado y Gestos
| Entorno | Atajo / Acción | Función y Comportamiento |
|---|---|---|
| FSM Canvas | Click + Drag (Fondo) |
Desplazar la cámara (Pan 2D) |
| FSM Canvas | Rueda del Ratón |
Zoom in / Zoom out en el cursor |
| FSM Canvas | Click + Drag (Nodo) |
Mover nodo de estado (magnético con Grilla ON) |
| FSM Canvas | Shift / Ctrl + Click |
Selección múltiple de nodos para arrastre en grupo |
| FSM Canvas | Enter (con 2 estados sel.) |
Crear instantáneamente una transición entre ambos estados |
| FSM Canvas | P (con 2 estados sel.) | Ejecutar herramienta Pathfinder (Rutas Neón) |
| FSM Canvas | Delete / Supr | Eliminar estados o transiciones seleccionadas |
| FSM Canvas | Escape | Limpiar selección o cancelar trazado de Pathfinder |
| FSM / Logic | Ctrl + Z |
Deshacer cambio (Undo Trajectory Stack) |
| FSM / Logic | Ctrl + Y / Ctrl + Shift + Z |
Rehacer cambio (Redo) |
📦 11. Caso de Estudio Resuelto & Proyectos Descargables
"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 de dos productos 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. El sistema debe contar con alarmas por timeout y parada de emergencia física."
- Validación Inicial: Estado
0_Standbypasa a1_Pre_Arranqueal pulsarcmd_start. Sólo sisensor_vacioes verdadero transiciona a2_Llenado. - Bifurcación Prioritaria en Llenado: Prioridad 0: Abortar (
X_2_4), Prioridad 1: Timeout 30s (X_2_10), Prioridad 2: 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 100% Compatibles
Descarga los archivos oficiales de UniControl para cargarlos en los editores: