Sequential Function Chart(SFC)

Schematex の SFC エンジンを使って、IEC 61131-3 §6.5 準拠のシーケンシャル・ファンクション・チャートをテキスト DSL から生成する方法を解説します。

シーケンシャル・ファンクション・チャートについて

Sequential Function Chart(SFC) は、サイクリック PLC プログラムのステートマシン表現です。現在何が起きているか、次のフェーズへのトリガーが何かを示します。IEC 61131-3:2013 §6.5 で定義される 5 番目の言語であり、IEC 60848 GRAFCET のエンジニアリングサブセットです。ladderfbd がスキャンごとの組み合わせロジックを記述するのに対し、SFC はそれらをまたいだ時系列の順序付けを記述します:どのステップがアクティブか、いつ次に引き渡すか、何が並列実行されるか。

製造コードでは、ネットワークの約 10% が SFC で記述されていますが、非自明なシーケンシャルマシンのほぼ 100% に少なくとも 1 つの SFC チャートがあります。バッチ反応器、ロボットセル、梱包ライン、組立ステーションなどが典型例です。これまで優れたオープンソースの SFC DSL が存在せず、ベンダーの IDE(Studio 5000、TIA Portal、CODESYS)が唯一の選択肢でした。Schematex は AI 生成向けに設計された IEC 61131-3 SFC サブセットを提供します。

state(リアクティブ UI とライフサイクル FSM 向けの UML ステートチャート)とは異なります:SFC にはサイクリックスキャンセマンティクス、二重境界線の初期ステップ、アクションブロック修飾子(N/S/R/L/D/P)、バーベースの分岐(単一バー = OR、二重バー = 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·2.7 ms·5.0 KB SVG

1. はじめてのチャート

2 つのステップ、1 つのトランジション、初期マーカー:

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

S0二重境界線矩形(IEC 初期ステップ規則)でレンダリングされ、S1 は単一境界線矩形でレンダリングされます。その間に条件テキスト Trigger が右に表示された水平トランジションバーがあります。

[initial] を忘れた場合、最初に宣言されたステップが自動的に初期に昇格されます。


2. ステップ

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

ステップには以下があります。

  • ID(チャート内で一意)— トランジションとジャンプで使用されます。
  • オプションの [label: "..."] — 表示用。
  • オプションの [initial](1 つのみ許可)または [final](ベンダーストップステップ、三重境界線)。
  • 1 レベルインデントされた 0 個以上のアクションブロック、それぞれに修飾子文字。

3. トランジション

トランジションはブーリアン条件を持つ 2 つのステップ間の有向リンクを宣言します。

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

条件テキストは不透明なものとして扱われます。Schematex はそのまま保存してバーの横にレンダリングします。すべてのトランジションには空でない条件が必要です;無条件リンクには TRUE を使用します。

fromto がボディ内で線形に隣接しているトランジションはステップ間のインラインバーとしてレンダリングされます。線形に隣接していないペア(例:前のステップへのジャンプ)は、チャートの左右にマージン矢印としてレンダリングされます。


4. アクション修飾子

アクションはステップの右側に付属し、修飾子文字に従って実行されます。

修飾子動作
Nステップがアクティブな間アクティブ(最も一般的)
Sストア — エントリー時に true に設定、対応する R まで維持
Rリセット — 以前にストアされたアクションをクリア
L時間制限 — ステップエントリーから T まで有効
D時間遅延 — エントリーから T 後にアクティベート
Pパルス — PLC 1 スキャンのみ true
P0ディアクティベート時にパルス(Siemens)
P1P の同義語(Siemens)
SDストア&遅延
DS遅延&ストア
SLストア&時間制限

時間パラメーター付き修飾子(L、D、SD、DS、SL)は継続時間リテラルを取ります。

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

5. 選択分岐(単一バー — OR)

スキャンごとに1 つの分岐のみが実行され、トランジション条件によって選択されます。

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

分岐の上下にある単一の水平線が発散バーと収束バーです。各分岐はエントリートランジション(発散バーと最初のステップの間)で始まり、エグジットトランジション(最後のステップと収束バーの間)で終わります。


6. 同時分岐(二重バー — AND)

すべての分岐が並行して実行され、チャートはすべての分岐が完了するまで収束で待機します。

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

分岐の上下にある 2 本の平行水平線(4px ギャップ)が同時バーです。共有の上部トランジション(ここでは TRUE)が発散をトリガーし;共有の下部トランジションBake_Done AND Cool_Done)が収束の前にチェックされます。


7. ジャンプ(ループ)

ターゲットが前のステップであるトランジションはマージン矢印としてレンダリングされます。

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

前進方向の S2 → S1(バックエッジ)は右側にマージン矢印を取り;S0 への T_Reset ジャンプは左側に取ります。各マージン矢印にはターゲット ID と条件が表示されます。


8. 変数

ladderfbd から再利用されます。

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

条件とアクションで宣言された変数はバリデーションされません。Schematex は state がガードとアクションを扱うのと同様に、条件 / アクションのボディテキストを不透明な文字列として扱います。


9. v0.1 の制限事項

  • 入れ子分岐(alt-in-sim、sim-in-alt)はパースできますが、レイアウトの縮小ヒューリスティックが基本的なため、深い入れ子は重複が生じる場合があります。
  • S/R アクションペアの破線コネクターS アクションと別の場所の対応する R を視覚的にリンク)は後回しです。
  • アクティブステップのランタイムインジケーター(現在アクティブなステップへの黄色塗りつぶし)は後回しです。PLC ランタイム状態を表示するデバッグ統合に有用です。
  • GRAFCET 強制オーダー(IEC 60848 のみの機能のためスコープ外)。
  • Final ステップ[final] でパースできますが、initial と同じ二重境界線でレンダリングされます;IEC の三重境界線規則は後回しです。

関連サンプル

サンプルギャラリーからすぐに使えるシナリオ:

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.