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能看懂就行。这样搭配,什么项目来了你都不怵。