ファンクションブロックダイアグラム(FBD)

ファンクションブロックダイアグラムについて

ファンクションブロックダイアグラム(FBD)は、産業オートメーションの国際標準であるIEC 61131-3:2013が定める5つのPLCプログラミング言語のうちの1つです。生産コードにおいて2番目に多く使われるPLC言語(ラダーに次ぐ)であり、プログラムの一部がパワーレール・ラングリレーよりもデータフローとして読む方が分かりやすい場合の自然な選択です。AND/ORロジック、タイマー(TON/TOF/TP)、カウンター(CTU/CTD)、比較(EQ/NE/GT/GE/LT/LE)、数学(ADD/SUB/MUL/DIV/MOVE)、エッジ検出器(R_TRIG/F_TRIG)、バイステーブルラッチ(SR/RS) — すべて名前付きポートのボックスとして左→右に配線されます。

SchematexはIEC 61131-3 §6.4のビジュアル規約とIEC 60617-12の識別記号(ANDは &、ORは ≥1、XORは =1、NOT/BUFは 1)に従います。ワイヤーはTIA Portalのデファクトスタンダードに従いデータ型で色分けされます(BOOL黒、INT青、REALオレンジ、TIMEマゼンタ)。ladder(§6.3、ラングベース)および**sfc**(§6.5、シーケンスベース)の姉妹言語であり、これらが合わさってIEC 61131-3のビジュアル半分を構成します。

fbd·§
↘ preview
100%
FBD: Motor Control FBD with 2 network(s). 0 — Start/stop latch Start Latch Stop Latch OR ≥1 IN1 IN2 OUT AND & IN1 IN2 OUT 1 — Drive output Latch MotorOut MOVE IN OUT
UTF-8 · LF · 13 lines · 209 chars✓ parsed·4.5 ms·6.8 KB SVG

1. 最初のFBDネットワーク

最小限の実用的FBDネットワーク:1つのブロック、2つの入力、1つの出力。

fbd
network 0:
  Out = AND(A, B)

AB はBOOL入力として自動宣言され(左側端子)、Out はANDブロックの OUT ポートに自動配線されます(右側端子)。ブロックはポートスタブとラベルとともにそれらの間に配置されます。


2. 変数

ネットワークの前に変数を宣言します。各変数は名前、IECデータ型、およびオプションの初期値を持ちます。

fbd "Tank Control"

var StartBtn: bool
var TankLevel: real
var SetPoint: real = 80.0
var DwellTimer: timer
var Pulse: counter

サポートされる型:boolintdintuintudintreallrealtimedatetodstringwstringbyteworddwordtimercounter。その他の識別子はユーザー定義ファンクションブロック型として扱われます。

オプションのスコーププレフィックス(デフォルト = ローカル):var_inputvar_outputvar_in_outvar_globalvar_external


3. ネットワーク

ネットワークはデータフローの独立した一単位であり、内部では左→右に評価され、プログラム全体ではスキャンごとに上→下に評価されます。

network 0 "Start latch":
  ...

network 1:
  ...

番号はオプションです — 省略した場合は自動的に番号付けされます。タイトル(引用符で囲む)はネットワークフレームの左上に表示されます。


4. ブロック呼び出し — インライン式記法

組み合わせネットワークを記述する最も明確な方法は、単一のネストされた式として書くことです。

network 0:
  Out = OR(A, AND(B, ~C))

パーサーは呼び出しツリーを構築します:外部ORは入力1に A、入力2にANDの結果を持ち、ANDは B と否定された C を持ちます。レンダラーはそれらを左→右に配置します(入力はレイヤー0、ANDはレイヤー1、ORはレイヤー2、出力はレイヤー3)。

~C は入力ポートに否定バブル(小さな開いた円)を追加します — そのワイヤーにNOTブロックを挿入することと同等ですが、よりすっきりしています。


5. ブロック呼び出し — インスタンス名記法

ブロックの出力を別の場所から参照する必要がある場合、インスタンスタグを付けます。

network 0:
  Pulse = R_TRIG(CLK: Sensor)
  Count = CTU(CU: Pulse.Q, R: Reset, PV: 100)
  Done  = GE(IN1: Count.CV, IN2: 100)

Pulse.QCount.CV は名前付きインスタンスの出力ポートを参照します。インスタンスタグはブロックヘッダーの上にイタリック体で表示されます。

引数リストは名前付きポートCU: Pulse.Q)または位置指定CTU(Pulse.Q, Reset, 100))を受け付けます — 名前付きは可読性のために推奨され、ポートをスキップする際に必須です。


6. インライン定数

入力ポートはワイヤー不要でリテラルを直接受け取れます。

network 0:
  Dwell = TON(IN: BottleSensor, PT: T#50ms)
  Cap   = LIMIT(MN: 0.0, IN: Setpoint, MX: 95.0)
  Mode  = SEL(G: ManualSwitch, IN0: AutoMode, IN1: ManualMode)

T#50ms0.095.0 はポートの左に小さな黄色のボックステキストとして表示されます。時間リテラルはIEC 61131-3に従います:T#10msT#5sT#3m20sT#1h。ブール値は true / false(大文字小文字不問)。


7. 標準ブロックライブラリ

カテゴリブロック
ブールANDORNOTNANDNORXORXNORBUF
エッジ検出R_TRIGF_TRIG
バイステーブルSRRS
タイマーTONTOFTP
カウンターCTUCTD
数学ADDSUBMULDIVMODABSNEGMOVE
比較EQNEGTGELTLE
選択SELMUXMAXMINLIMIT

AND、OR、NAND、NOR、ADD、MUL、MAX、MINは任意の数の入力を受け付けます(デフォルト2)。追加の位置引数を渡すか [inputs: N] を使用して拡張してください。

network 0:
  All4 = AND(A, B, C, D)
  Sum  = ADD(X, Y, Z)

8. より大きな例 — ボトルカウンター

fbd "Bottle Counter"

var ConveyorRunning: bool
var BottleSensor: bool
var BatchDone: bool
var BatchSize: counter
var DwellTimer: timer

network 0 "Debounce sensor with 50ms dwell":
  Dwell = TON(IN: BottleSensor, PT: T#50ms)

network 1 "Count one bottle on rising edge of debounced signal":
  Pulse     = R_TRIG(CLK: Dwell.Q)
  BatchSize = CTU(CU: Pulse.Q, R: BatchDone, PV: 24)

network 2 "Batch done":
  BatchDone = MOVE(BatchSize.Q)

3つのネットワーク:デバウンス → エッジ検出 → カウント → フラグ。各ネットワークは1つのDAGであり、レンダラーはワイヤーをマンハッタンパスでルーティングします。


9. v0.1の制限事項

現在のエンジンは、多くのチームが日々使用する標準ブロックのサブセットを実装しています。以下は延期されており、フォローアップで追加される予定です:

  • EN/ENOパワーフローレール[en] ブロック属性、[rail: on] ヘッダー)— ネットワーク上部のイネーブルレールを追加。Studio 5000 / TIA Portalのベンダー規約。
  • ユーザー定義ファンクションブロックpins_in: / pins_out: 宣言付き)— カスタムモーターコントローラー、PIDインスタンスなど用。
  • ページコネクターconnector_out / connector_in)— 複数ページにまたがるワイヤー用。
  • ビット文字列ブロック(SHL、SHR、ROL、ROR、AND_BIT、OR_BITなど)。
  • 拡張数学(SQRT、LN、LOG、EXP、SIN、COS、TAN、ASIN、ACOS、ATAN)。
  • ANSI識別形状モード[shape: ansi])— logic エンジンはすでに純粋ブールダイアグラムにこれを提供しています。
  • CTUD 双方向カウンター、TP リテンティブタイマー(RTO)。

これらがすぐに必要な場合は、issueを開くか、IEC 61131-3 LDの完全なサブセットのために ladder エンジンを使用してください。


関連例

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

fbd·§ IEC 61131-3:2013 §6.4 + §2.5
FBD: Motor Control FBD with 2 network(s). 0 — Start latch Start Latch Stop EmergencyStop Latch OR ≥1 IN1 IN2 OUT AND & IN1 IN2 IN3 OUT 1 — Drive output Latch MotorOut MOVE IN OUT
Motor start/stop latch (FBD)
Two-network FBD of the canonical PLC seal-in circuit — start-button rising edge sets a latch, stop and emergency-stop break it. Exercises declared variables, multi-network programs, inline expression notation, and negation bubbles.
manufacturing
fbd·§ IEC 61131-3:2013 §6.4 + §2.5
FBD: Bottle Counter FBD with 3 network(s). 0 — Debounce sensor with 50ms dwell BottleSensor TON IN PT T#50ms Q ET 1 — Count one bottle on rising edge of debounced signal BatchDone BatchSize R_TRIG CLK Q CTU CU R PV 24 Q CV 2 — Latch batch done BatchDone MOVE IN OUT
Bottle counter — debounce → edge → count (FBD)
Three-network FBD pipeline that debounces a bottle sensor with a 50ms TON, takes the rising edge with R_TRIG, counts up to 24 bottles per case with CTU, and self-resets when the case is full. A real production-line pattern that exercises timer + edge-detector + counter + named-instance references in sequence.
manufacturing
fbd·§ IEC 61131-3:2013 §6.4 + §2.5
FBD: Tank Level Setpoint Limiter FBD with 2 network(s). 0 — Clamp setpoint to safe range DesiredSetpoint SafeSetpoint LIMIT MN 0.0 IN MX 95.0 OUT 1 — Alarm on out-of-range request DesiredSetpoint Alarm OR ≥1 IN1 IN2 OUT LT IN1 IN2 0.0 OUT GT IN1 IN2 95.0 OUT MOVE IN OUT
Tank setpoint limiter + alarm (FBD)
Two-network FBD that clamps an operator-entered tank-level setpoint to the safe range [0, 95]% via LIMIT, and raises an alarm if the operator types an out-of-range value. Uses LT and GT comparison blocks, the LIMIT selection block, and demonstrates REAL (orange) and BOOL (black) wires carrying different data types in one diagram.
chemical-processing

Found this useful?

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