4、PLC编程语言:梯形图(LD)、指令表(IL)、功能块图(FBD)、结构化文本(ST)、顺序功能图(SFC)
说到PLC编程语言,很多刚入行的朋友会问:到底学哪一种好?
我的回答是:别纠结,全得会。因为在实际项目中,这五种语言各有各的用武之地。今天我就把这五种语言掰开揉碎了讲给你听。
4.1 梯形图(LD)—— 最直观的“电路思维”
梯形图,说白了就是把继电器电路图搬到了电脑屏幕上。我个人习惯用梯形图做逻辑控制,因为它最符合电工的思维习惯。
核心特点:
- 图形化编程,左母线、右母线、触点、线圈
- 触点代表输入条件,线圈代表输出结果
- 从上到下、从左到右扫描执行
举个例子:一个简单的电机启停控制
| 启动按钮 | 停止按钮 | 电机线圈 |
|----[ ]----+---[/]----+----( )----|
| | | |
| 电机自锁 | | |
|----[ ]----+ | |
我在项目中遇到过这样一个坑:有同事把停止按钮画成了常开触点,结果按停止按钮电机反而启动了。嗯,这里要注意——急停按钮在梯形图里通常用常闭触点表示。
我的经验:梯形图最适合做开关量逻辑控制,比如传送带启停、报警灯控制。但如果你要做复杂数学运算,梯形图会写得你怀疑人生。
4.2 指令表(IL)—— 最底层的“汇编思维”
指令表,你可以把它想象成PLC的“汇编语言”。它用助记符来表示操作,比如LD(加载)、AND(与)、OR(或)。
核心特点:
- 文本化编程,一行一条指令
- 执行效率高,占用内存少
- 适合简单逻辑,复杂逻辑可读性差
示例:同样的电机启停控制
LD 启动按钮
OR 电机自锁
AND NOT 停止按钮
ST 电机线圈
说实话,现在用指令表的人越来越少了。但我建议你还是得看懂它——因为有些老设备、进口设备的程序就是用IL写的。我曾经在调试一条德国产的生产线时,整个程序全是IL,看不懂就真抓瞎了。
注意:指令表没有统一的国际标准,不同品牌的PLC指令集可能不同。换品牌时得重新学。
4.3 功能块图(FBD)—— 最像“搭积木”的编程方式
功能块图,你把它想象成在画电路板原理图。每个功能块就是一个“黑盒子”,有输入有输出,用连线把它们连起来就行。
核心特点:
- 图形化,用功能块表示运算
- 适合模拟量处理、PID控制
- 信号流向清晰,调试方便
举个例子:模拟量信号处理
传感器信号 ——[SCALE]—— 工程量值 ——[PID]—— 控制输出
量程转换 PID调节
我个人特别喜欢用FBD做模拟量处理。你想想看,一个温度传感器进来,先做量程转换,再做滤波,最后进PID,用FBD画出来一目了然。如果用梯形图写,那代码量能翻好几倍。
避坑指南:我曾经在FBD里把两个功能块的连线接反了,结果PID输出一直在反向调节。从那以后,我每次画完FBD都会用“信号追踪”功能走一遍。
4.4 结构化文本(ST)—— 最像“高级语言”的编程方式
结构化文本,说白了就是PLC界的C语言。它用IF-THEN-ELSE、CASE、FOR循环这些高级语言结构来编程。
核心特点:
- 文本化编程,语法类似Pascal/C
- 适合复杂算法、数据处理
- 代码复用性强,可读性好
示例:用ST写一个平均值滤波
FUNCTION AvgFilter : REAL
VAR_INPUT
RawValue : REAL;
END_VAR
VAR
Sum : REAL := 0.0;
Count : INT := 0;
END_VAR
IF Count < 10 THEN
Sum := Sum + RawValue;
Count := Count + 1;
AvgFilter := Sum / INT_TO_REAL(Count);
ELSE
AvgFilter := Sum / 10.0;
END_IF;
嗯,这里要注意:ST虽然强大,但很多老工程师不太习惯。我建议你在团队里用ST时,一定要写好注释,不然别人接手你的代码会想骂人。
我的教训:有一次我用ST写了一个复杂的配方管理程序,自我感觉良好。结果半年后设备出问题,我自己看代码都费劲。从那以后,我规定自己:ST代码的注释量不能少于代码量的30%。
4.5 顺序功能图(SFC)—— 最像“流程图”的编程方式
顺序功能图,你把它想象成画工艺流程图。它用步(Step)和转换(Transition)来描述设备的动作顺序。
核心特点:
- 图形化,按步骤描述动作
- 适合顺序控制、步进控制
- 程序结构清晰,调试直观
举个例子:一个简单的自动门控制
[初始步]
|
[检测到人]
|
[开门步] —— 开门到位?
| |
[延时等待] |
| |
[关门步] —— 关门到位?
| |
[回到初始步]
我个人觉得SFC是做顺序控制最爽的语言。你想想看,一个自动化生产线有几十个动作步骤,用梯形图写出来就是一团乱麻,但用SFC画出来,每一步做什么、什么条件触发下一步,清清楚楚。
经验之谈:我曾经用SFC做了一个8工位的转盘机程序,每个工位有独立的动作序列。调试时直接在SFC界面上看当前执行到哪一步,哪个工位卡住了,一眼就能找到问题。这要是用梯形图写,光找故障点就得花半天。
4.6 五种语言怎么选?—— 我的建议
| 应用场景 | 推荐语言 | 理由 |
|---|---|---|
| 简单开关量控制 | 梯形图(LD) | 直观,电工都能看懂 |
| 模拟量处理 | 功能块图(FBD) | 信号流向清晰 |
| 复杂算法 | 结构化文本(ST) | 语法强大,效率高 |
| 顺序控制 | 顺序功能图(SFC) | 步骤清晰,调试方便 |
| 老设备维护 | 指令表(IL) | 兼容老旧程序 |
最后说一句:别指望只学一种语言就能走天下。我见过太多工程师,只会梯形图,遇到复杂算法就傻眼。反过来,只会ST的工程师,到了现场连个急停逻辑都画不明白。
我的建议是:梯形图打底,FBD和SFC做主力,ST做杀手锏,IL能看懂就行。这样搭配,什么项目来了你都不怵。