功能方塊圖(FBD)

關於功能方塊圖

功能方塊圖(FBD)IEC 61131-3:2013 所定義的五種 PLC 程式語言之一 — 這是工業自動化的國際標準。它是生產程式碼中繪製第二多的 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)。導線依資料類型著色(BOOL 黑色、INT 藍色、REAL 橙色、TIME 洋紅色),遵循 TIA Portal 的事實標準慣例。與 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·12.3 ms·6.8 KB SVG

1. 第一個 FBD 網路

最小可用的 FBD 網路:一個方塊、兩個輸入、一個輸出。

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)

三個網路:去彈跳 → 邊緣偵測 → 計數 → 旗標。每個網路是一個 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 或使用 ladder 引擎取得完整的 IEC 61131-3 LD 子集。


相關範例

範例庫中的即用場景:

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.