Sequential Function Chart (SFC)

Über Sequential Function Charts

Sequential Function Chart (SFC) ist die Zustandsmaschinen-Ansicht eines zyklischen PLC-Programms — was gerade aktiv ist und was den nächsten Schritt auslöst. Es ist die fünfte Sprache, die in IEC 61131-3:2013 §6.5 definiert wird, und die Engineering-Teilmenge von IEC 60848 GRAFCET. Während ladder und fbd kombinatorische Logik pro Scan beschreiben, beschreibt SFC die zeitliche Abfolge darüber hinaus: welcher Schritt aktiv ist, wann er übergibt, was parallel läuft.

Im Produktionscode sind ~10 % der Netzwerke in SFC geschrieben, aber ~100 % aller nicht-trivialen sequenziellen Maschinen besitzen mindestens ein SFC-Diagramm — Chargereaktoren, Roboterzellen, Verpackungslinien, Montagestationen. Bisher gab es kein gutes Open-Source-SFC-DSL: Hersteller-IDEs (Studio 5000, TIA Portal, CODESYS) waren die einzige Option. Schematex liefert eine IEC 61131-3 SFC-Teilmenge, die für KI-Generierung ausgelegt ist.

Zu unterscheiden von state (UML-Zustandsautomat für reaktive UIs und Lifecycle-FSMs): SFC hat zyklisch-scan-Semantik, doppelt umrandete Initialschritte, Action-Block-Qualifier (N/S/R/L/D/P) und balkenbasierte Verzweigungen (einfacher Balken = OR, doppelter Balken = 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·3.6 ms·5.0 KB SVG

1. Das erste Diagramm

Zwei Schritte, eine Transition, ein Initialmarker:

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

S0 wird als doppelt umrandetes Rechteck gerendert (IEC-Konvention für den Initialschritt); S1 als einfach umrandetes Rechteck. Zwischen ihnen befindet sich ein horizontaler Transitionsbalken mit dem Bedingungstext Trigger rechts daneben.

Fehlt [initial], wird der erste deklarierte Schritt automatisch zum Initialschritt.


2. Schritte

step S_Filling [label: "Filling tank"]
  N FillValve_Open
  D Mixer_Run T#30s
  P StartChime

Ein Schritt besitzt:

  • Eine ID (eindeutig im gesamten Diagramm) — wird in Transitionen und Sprüngen verwendet.
  • Ein optionales [label: "..."] für die Anzeige.
  • Ein optionales [initial] (genau eines erlaubt) oder [final] (herstellerspezifischer Stoppschritt, drei Ränder).
  • Null oder mehr Action-Blöcke, um eine Ebene eingerückt, jeweils mit einem Qualifier-Buchstaben.

3. Transitionen

Eine Transition definiert eine gerichtete Verbindung zwischen zwei Schritten mit einer booleschen Bedingung:

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

Der Bedingungstext ist opak — Schematex speichert ihn unverändert und rendert ihn neben dem Balken. Jede Transition muss eine nicht-leere Bedingung haben; für unbedingte Verbindungen ist TRUE zu verwenden.

Transitionen, deren from- und to-Schritte im Body linear aufeinanderfolgen, werden als Inline-Balken zwischen den Schritten gerendert. Transitionen, deren Paar nicht linear benachbart ist (z. B. ein Rücksprung zu einem früheren Schritt), werden als Randpfeile links oder rechts vom Diagramm gerendert.


4. Action-Qualifier

Actions werden an der rechten Seite eines Schritts angehängt und laufen entsprechend ihrem Qualifier-Buchstaben:

QualifierVerhalten
NAktiv, solange der Schritt aktiv ist (am häufigsten verwendet)
SGespeichert — beim Eintritt auf true gesetzt, bleibt bis zum passenden R
RReset — löscht eine zuvor gespeicherte Action
LZeitbegrenzt — aktiv bis zu T nach Schrittbeginn
DZeitverzögert — aktiviert sich T nach Eintritt
PPuls — true für genau einen PLC-Scan
P0Puls bei Deaktivierung (Siemens)
P1Synonym für P (Siemens)
SDGespeichert & Verzögert
DSVerzögert & Gespeichert
SLGespeichert & Zeitbegrenzt

Zeitparametrisierte Qualifier (L, D, SD, DS, SL) nehmen ein Dauerliteral:

step S1
  L LimitedRun T#5s
  D DelayedRun T#2s

5. Alternative Verzweigungen (einfacher Balken — OR)

Pro Scan wird nur eine Verzweigung ausgeführt, ausgewählt durch die Transitionsbedingung:

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

Die einfachen horizontalen Linien ober- und unterhalb der Verzweigungen sind die Divergenz- und Konvergenzbalken. Jede Verzweigung beginnt mit ihrer Eintrittstransition (zwischen Divergenzbalken und erstem Schritt) und endet mit einer Ausgangstransition (zwischen letztem Schritt und Konvergenzbalken).


6. Simultane Verzweigungen (doppelter Balken — AND)

Alle Verzweigungen laufen gleichzeitig; das Diagramm wartet an der Konvergenz, bis jede Verzweigung abgeschlossen ist:

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

Die zwei parallelen horizontalen Linien (Abstand 4 px) ober- und unterhalb der Verzweigungen sind die Simultanbalken. Die gemeinsame Transition oben (hier TRUE) löst die Divergenz aus; die gemeinsame Transition unten (Bake_Done AND Cool_Done) wird geprüft, bevor die Konvergenz ausgelöst wird.


7. Sprünge (Schleifen)

Eine Transition, deren Ziel ein früherer Schritt ist, wird als Randpfeil gerendert:

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

Der Vorwärtsverweis S2 → S1 (Rückkante) erhält den Randpfeil rechts; der T_Reset-Sprung zurück zu S0 erscheint links. Jeder Randpfeil zeigt seine Ziel-ID und die Bedingung.


8. Variablen

Übernommen aus ladder und fbd:

var StartBtn: bool
var TankLevel: real
var BakeReady: bool
var Counter: counter
var T1: timer

In Bedingungen und Actions deklarierte Variablen werden nicht validiert — Schematex behandelt Bedingungs- und Action-Body-Text als opake Strings, entsprechend dem Verhalten von state bei Guards und Actions.


9. Einschränkungen in v0.1

  • Verschachtelte Verzweigungen (alt-in-sim, sim-in-alt) werden geparst, aber die Layout-Heuristiken für den Kollaps sind einfach gehalten; tiefe Verschachtelungen können sich überlappen.
  • S/R-Action-Paar-Strichlinienkonnektoren (visuelle Verknüpfung einer S-Action mit dem passenden R an anderer Stelle) sind zurückgestellt.
  • Laufzeit-Aktiv-Schrittanzeige (gelbe Füllung des aktuell aktiven Schritts) ist zurückgestellt — nützlich für Debug-Integrationen, die den PLC-Laufzeitzustand anzeigen.
  • GRAFCET-Zwangsbefehle (außerhalb des Umfangs, da IEC 60848-exklusives Feature).
  • Finalschritt wird mit [final] geparst, aber mit demselben doppelten Rand wie der Initialschritt gerendert; die IEC-Dreifachrand-Konvention ist zurückgestellt.

Verwandte Beispiele

Sofort verwendbare Szenarien aus der Beispielgalerie:

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.