4、PLC编程语言基础:LAD、FBD、SCL、STL对比与选择
做风电控制这些年,我经常被问到同一个问题:
“到底该学哪种PLC编程语言?”
说实话,这问题没有标准答案。但如果你让我选,我会说——别只学一种。每种语言都有自己的脾气,就像工具箱里的扳手和螺丝刀,各有各的用处。
4.1 四种语言,先混个脸熟
IEC 61131-3标准定义了五种编程语言,风电行业最常用的是下面四种。我一个个说。
| 语言 | 全称 | 特点 | 风电场景 |
|---|---|---|---|
| LAD | 梯形图 | 图形化,像继电器电路 | 逻辑控制、急停、连锁 |
| FBD | 功能块图 | 模块化,数据流清晰 | PID、滤波、算法封装 |
| SCL | 结构化文本 | 类Pascal,适合复杂计算 | 变桨角度计算、功率曲线 |
| STL | 指令表 | 汇编风格,效率高 | 底层驱动、中断处理 |
4.2 LAD(梯形图)—— 电工师傅的最爱
梯形图长什么样?说白了,就是左右两条竖线,中间一堆触点线圈。左边是电源,右边是输出。
我在风电现场调试时,最常用LAD来处理急停逻辑。你想想看,一个急停按钮按下,所有继电器都得断开,这个用LAD画出来,一目了然。
// 一个简单的电机启动/停止梯形图逻辑
// 启动按钮 I0.0,停止按钮 I0.1,电机输出 Q0.0
// 自锁回路
I0.0 I0.1 Q0.0
---| |-------|/|-------( )---
| |
Q0.0 |
---| |---------------|
优点:
- 直观,电工出身的人一看就懂
- 调试时在线监控方便,哪个触点通了一目了然
- 适合简单的开关量控制
缺点:
- 复杂运算写起来要命
- 超过100行就乱成一锅粥
- 数组、循环?别想了
4.3 FBD(功能块图)—— 模块化思维的好帮手
FBD就像搭积木。你把一个个功能块拖出来,连上线,数据就从输入流到输出了。
我记得做变桨系统时,PID调节器就是用FBD搭的。比例、积分、微分三个模块,输入是角度偏差,输出是转矩指令。调试的时候改参数特别方便。
// FBD风格示意(文字描述)
// 输入:角度设定值 Setpoint,实际角度 Actual
// 输出:转矩指令 TorqueCmd
Setpoint ──┬──[SUB]──┬──[PID]── TorqueCmd
│ │
Actual ───┘ │
│
Kp ──[MUL]───────────┘
Ki ──[INT]
Kd ──[DER]
优点:
- 模块化,复用性强
- 数据流清晰,适合信号处理
- 封装好的功能块可以直接调用
缺点:
- 逻辑分支多了,连线像蜘蛛网
- 调试时看不到中间变量,得自己加监控
4.4 SCL(结构化文本)—— 程序员的菜
SCL长得很像Pascal,也像C语言。如果你写过高级语言,上手SCL基本没难度。
风电里最复杂的计算,比如变桨角度查表、功率曲线拟合、故障诊断逻辑,我全用SCL写。为什么?因为能写注释,能写循环,能写条件判断,代码结构清晰。
// SCL 示例:变桨角度限幅
// 输入:目标角度 TargetAngle (REAL)
// 输出:限幅后的角度 LimitedAngle (REAL)
IF TargetAngle > 90.0 THEN
LimitedAngle := 90.0;
ELSIF TargetAngle < 0.0 THEN
LimitedAngle := 0.0;
ELSE
LimitedAngle := TargetAngle;
END_IF;
// 顺便做个故障判断
IF ABS(TargetAngle - ActualAngle) > 5.0 THEN
FaultFlag := TRUE;
ELSE
FaultFlag := FALSE;
END_IF;
优点:
- 处理复杂逻辑得心应手
- 代码可读性好,能写注释
- 支持数组、结构体、循环
缺点:
- 对电工师傅不友好
- 在线监控不如LAD直观
4.5 STL(指令表)—— 老司机的选择
STL是汇编风格的PLC语言。一条指令一个操作,效率极高,但可读性极差。
说实话,我现在很少用STL写完整程序了。只有在两种情况下会用:一是做底层驱动,比如高速计数器、脉冲输出;二是程序空间不够了,用STL能省几个字节。
// STL 示例:简单的位操作
// 将 M0.0 置位,然后延时 100ms
SET
= M0.0
L S5T#100MS
SE T1
A T1
R M0.0
优点:
- 执行效率最高
- 占用内存最少
- 能实现一些其他语言做不到的底层操作
缺点:
- 可读性差,维护困难
- 写100行就头晕
- 新人根本看不懂
4.6 怎么选?我的实战经验
说了这么多,到底怎么选?我给你一个简单粗暴的原则:
- 逻辑控制、连锁保护、急停 → LAD
- 信号处理、PID、滤波、封装算法 → FBD
- 复杂计算、数据处理、故障诊断 → SCL
- 底层驱动、中断、优化性能 → STL(慎用)
但说实话,实际项目中很少只用一种语言。我写变桨程序时,主逻辑用SCL,安全链用LAD,PID用FBD。混着用,取长补短。
4.7 知识体系一览
下面这张图,是我自己总结的四种语言在风电项目中的定位。你一看就明白。
嗯,这张图你看懂了吗?简单说就是:没有最好的语言,只有最合适的场景。
最后说一句:别纠结学哪种。先精通一种(我建议SCL,因为通用性强),然后慢慢拓展。等你四种都玩过一遍,自然就知道什么时候该用哪个了。
公众号:蓝海资料掘金营,微信deep3321