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).

sfc·§
↘ preview
100%
SFC: Bottle Filling SFC with 3 step(s), 2 transition(s). Bottle Filling T0 StartBtn T1 TankLevel >= 80.0 S0 Filling Done N FillValve_Closed N FillValve_Open N Confirm_Done DoneBtn → S0
UTF-8 · LF · 19 lines · 328 chars✓ parsed·0.8 ms·5.0 KB SVG

1. Tu primer gráfico

Dos pasos, una transición, un marcador inicial:

sfc
step S0 [initial]
step S1
transition from: S0 to: S1: Trigger

S0 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 StartChime

Un 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: ResetBtn

El 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:

CalificadorComportamiento
NActivo mientras el paso está activo (el más común)
SAlmacenado — se pone a verdadero en la entrada, permanece hasta el R correspondiente
RReinicio — limpia una acción almacenada previamente
LLimitado en tiempo — activo hasta T después de la entrada al paso
DRetardado en tiempo — se activa T después de la entrada
PPulso — verdadero durante un solo barrido del PLC
P0Pulso en desactivación (Siemens)
P1Sinónimo de P (Siemens)
SDAlmacenado y retardado
DSRetardado y almacenado
SLAlmacenado 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#2s

5. 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: Shipped

Las 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_Done

Las 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 ResetBtn

El 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: timer

Las 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 S con su R correspondiente 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:

sfc·§ IEC 61131-3:2013 §6.5
SFC: Bottle Filling SFC with 3 step(s), 2 transition(s). Bottle Filling T0 StartBtn T1 TankLevel >= 80.0 S0 Filling Done N FillValve_Closed N FillValve_Open N Confirm_Done DoneBtn → S0
Bottle filling sequence (SFC)
Three-step sequential function chart for a bottle-filling station — idle with valve closed, fill while tank level rises, signal done. Exercises the IEC 61131-3 §6.5 initial-step double border, N-qualified actions, and condition expressions on transitions.
manufacturing
sfc·§ IEC 61131-3:2013 §6.5
SFC: Bake and cool concurrently SFC with 5 step(s), 3 transition(s). Bake and cool concurrently TRUE Bake_Done AND Cool_Done T0 BakeReady S0 S_Heat S_Bake S_Cool S_Done N Heater_On D Oven_Run T#15m L Cooler_On T#5m N AnnounceDone NOT BakeReady → S0
Bake & cool concurrent batch (SFC)
Simultaneous-branch SFC of a batch oven that bakes (15-minute D-qualified action) and cools the chamber jacket (5-minute L-qualified action) concurrently after a heat-up phase. Both branches must complete before the converge bar fires. Exercises the IEC 61131-3 §6.5.4 double-bar simultaneous divergence and time-parameterized action qualifiers.
chemical-processing
sfc·§ IEC 61131-3:2013 §6.5
SFC: Order routing SFC with 5 step(s), 5 transition(s). Order routing IsExpressShipping TRUE IsStandardShipping TRUE T0 ProductOrdered S0 S_Pick S_Express S_Standard S_Ship N PickFromBin N PrepExpressBox N PrepStandardBox N CarrierPickup Shipped → S0
Order routing — express vs standard shipping (SFC)
Alternative-branch SFC of an order-fulfillment routing decision. After picking the product, exactly one branch fires per scan based on the leftmost-true entry transition (priority 1 = express shipping first). Both branches converge to a common shipping step. Exercises the IEC 61131-3 §6.5.4 single-bar OR semantics, branch priority annotations, and per-branch entry/exit transitions.
logistics

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.