Gráfico de Función Secuencial (SFC)
Acerca de los gráficos de función secuencial
El Gráfico de Función Secuencial (SFC) es la vista de máquina de estados de un programa PLC cíclico — qué está ocurriendo ahora y qué desencadena la siguiente fase. Es el quinto lenguaje definido por IEC 61131-3:2013 §6.5 y el subconjunto de ingeniería de IEC 60848 GRAFCET. Donde ladder y fbd describen la lógica combinacional por barrido, el SFC describe la secuenciación temporal entre ellos: qué paso está activo, cuándo cede el control y qué corre en paralelo.
En código de producción, ~10% de las redes se escriben en SFC, pero ~100% de las máquinas secuenciales no triviales tienen al menos un gráfico SFC — reactores por lotes, celdas robóticas, líneas de empaque, estaciones de ensamble. Hasta ahora no había un buen DSL de SFC de código abierto: los IDEs de los proveedores (Studio 5000, TIA Portal, CODESYS) eran la única opción. Schematex incluye un subconjunto SFC de IEC 61131-3 diseñado para generación por IA.
Distinto de state (diagrama de estados UML para UIs reactivas y FSM de ciclo de vida): el SFC tiene semántica de barrido cíclico, pasos iniciales con doble borde, calificadores de bloque de acción (N/S/R/L/D/P) y ramas basadas en barras (barra simple = OR, barra doble = AND).
1. Tu primer gráfico
Dos pasos, una transición, un marcador inicial:
sfc
step S0 [initial]
step S1
transition from: S0 to: S1: TriggerS0 se renderiza como un rectángulo de doble borde (la convención de paso inicial de IEC); S1 como un rectángulo de borde simple. Entre ellos hay una barra de transición horizontal con el texto de condición Trigger a su derecha.
Si olvidas [initial], el primer paso declarado se promueve automáticamente a inicial.
2. Pasos
step S_Filling [label: "Filling tank"]
N FillValve_Open
D Mixer_Run T#30s
P StartChimeUn paso tiene:
- Un id (único en todo el gráfico) — se usa en transiciones y saltos.
- Un
[label: "..."]opcional para la visualización. - Un
[initial]opcional (solo uno permitido) o[final](paso de parada del proveedor, tres bordes). - Cero o más bloques de acción, indentados un nivel, cada uno con una letra calificadora.
3. Transiciones
Una transición declara un enlace dirigido entre dos pasos con una condición booleana:
transition from: S0 to: S1: StartBtn
transition from: S1 to: S2: TankLevel >= 80.0 AND NOT EmergencyStop
transition T_Reset from: S5 to: S0: ResetBtnEl texto de condición es opaco — Schematex lo almacena literalmente y lo renderiza junto a la barra. Cada transición debe tener una condición no vacía; usa TRUE para enlaces incondicionales.
Las transiciones cuyo from y to son linealmente adyacentes en el cuerpo se renderizan como barras en línea entre los pasos. Las transiciones cuyo par no es linealmente adyacente (ej. un salto de vuelta a un paso anterior) se renderizan como flechas de margen en el lado izquierdo o derecho del gráfico.
4. Calificadores de acción
Las acciones se adjuntan al lado derecho de un paso y se ejecutan según su letra calificadora:
| Calificador | Comportamiento |
|---|---|
N | Activo mientras el paso está activo (el más común) |
S | Almacenado — se pone a verdadero en la entrada, permanece hasta el R correspondiente |
R | Reinicio — limpia una acción almacenada previamente |
L | Limitado en tiempo — activo hasta T después de la entrada al paso |
D | Retardado en tiempo — se activa T después de la entrada |
P | Pulso — verdadero durante un solo barrido del PLC |
P0 | Pulso en desactivación (Siemens) |
P1 | Sinónimo de P (Siemens) |
SD | Almacenado y retardado |
DS | Retardado y almacenado |
SL | Almacenado y limitado en tiempo |
Los calificadores parametrizados por tiempo (L, D, SD, DS, SL) toman un literal de duración:
step S1
L LimitedRun T#5s
D DelayedRun T#2s5. Ramas alternativas (barra simple — OR)
Solo una rama se dispara por barrido, elegida por la condición de transición:
step S0 [initial]
step S_Pick
alt from: S_Pick:
branch [priority: 1]:
transition: IsExpressShipping
step S_Express
N PrepExpressBox
transition: TRUE
branch [priority: 2]:
transition: IsStandardShipping
step S_Standard
N PrepStandardBox
transition: TRUE
merge_to: S_Ship
step S_Ship
transition from: S0 to: S_Pick: ProductOrdered
transition from: S_Ship to: S0: ShippedLas líneas horizontales simples encima y debajo de las ramas son las barras de divergencia y convergencia. Cada rama comienza con su transición de entrada (entre la barra de divergencia y el primer paso) y termina con una transición de salida (entre el último paso y la barra de convergencia).
6. Ramas simultáneas (barra doble — AND)
Todas las ramas corren concurrentemente; el gráfico espera en la convergencia hasta que cada rama termine:
sim from: S_Heat: TRUE
branch:
step S_Bake
D Oven_Run T#15m
branch:
step S_Cool
L Cooler_On T#5m
merge_to: S_Done: Bake_Done AND Cool_DoneLas dos líneas horizontales paralelas (separación de 4px) encima y debajo de las ramas son las barras simultáneas. La transición compartida superior (TRUE aquí) dispara la divergencia; la transición compartida inferior (Bake_Done AND Cool_Done) se verifica antes de que se dispare la convergencia.
7. Saltos (bucles)
Una transición cuyo destino es un paso anterior se renderiza como una flecha de margen:
step S0 [initial]
step S1
step S2
transition from: S0 to: S1: A
transition from: S1 to: S2: B
transition T_Reset from: S2 to: S0: ResetBtn
transition from: S2 to: S1: NOT ResetBtnEl salto hacia adelante S2 → S1 (arco trasero) obtiene la flecha de margen en el lado derecho; el salto T_Reset de vuelta a S0 va en el lado izquierdo. Cada flecha de margen muestra su id de destino y condición.
8. Variables
Reutilizadas de ladder y fbd:
var StartBtn: bool
var TankLevel: real
var BakeReady: bool
var Counter: counter
var T1: timerLas variables declaradas en condiciones y acciones no se validan — Schematex trata el texto del cuerpo de condición / acción como cadenas opacas, de la misma manera que state maneja guardas y acciones.
9. Limitaciones de v0.1
- Ramas anidadas (alt-en-sim, sim-en-alt) se parsean pero las heurísticas de diseño de colapso son básicas; los nidos profundos pueden superponerse.
- Conectores punteados de pares de acción S/R (que vinculan visualmente una acción
Scon suRcorrespondiente en otro lugar) están diferidos. - Indicador de paso activo en tiempo de ejecución (relleno amarillo en el paso actualmente activo) está diferido — útil para integraciones de depuración que exponen el estado del PLC en tiempo de ejecución.
- Órdenes de forzado GRAFCET (fuera de alcance, característica solo de IEC 60848).
- Paso final se parsea con
[final]pero se renderiza con el mismo doble borde que el inicial; la convención de triple borde IEC está diferida.
Ejemplos relacionados
Escenarios listos para usar de la galería de ejemplos:
Found this useful?
Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.