功能块图(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,≥1 表示 OR,=1 表示 XOR,1 表示 NOT/BUF)。导线按数据类型着色(BOOL 黑色、INT 蓝色、REAL 橙色、TIME 品红色),遵循 TIA Portal 事实标准。它与**梯形图(§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·3.5 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)

三个网络:去抖 → 沿检测 → 计数 → 标志位。每个网络是一个有向无环图;渲染器通过曼哈顿路径进行走线。


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 双向计数器、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.