第三课:PLC核心编程语言——梯形图、功能块图、结构化文本入门

好,咱们直接进入正题。PLC 编程,说白了就是让机器听懂你的话。但机器听不懂人话,它只认逻辑。所以我们需要一种“中间语言”。

IEC 61131-3 标准定义了五种编程语言。但说实话,真正天天用的,就三种:梯形图(LD)、功能块图(FBD)、结构化文本(ST)。

我个人习惯是:简单逻辑用梯形图,复杂控制用功能块图,数学运算和数据处理用结构化文本。今天我就带你把这三样东西摸透。

一、梯形图(LD)—— 电工的“电路图”

梯形图,长得就像继电器电路。左边一根竖线是火线,右边一根竖线是零线。中间那些触点、线圈,就是你的逻辑。

为什么它最流行?因为电工师傅一看就懂。我在项目现场遇到过好几次,电工拿着图纸跟我对信号,我说“这是常开触点”,他立马就明白了。

基本元素:

  • 常开触点(-||-):信号为 1 时闭合,电流通过。
  • 常闭触点(-|/|-):信号为 0 时闭合,电流通过。
  • 线圈(-( )-):电流流到线圈,输出置 1。
  • 输出(-( )-):控制电机、阀门等。

核心规则: 梯形图是从左到右、从上到下扫描的。不是同时动作!

举个例子,一个简单的“启动-保持-停止”电路:

|  启动按钮  停止按钮  接触器线圈 |
|----||--------|/|--------( )----|
|    |                    |       |
|    |  接触器自保触点    |       |
|    |----||-------------|       |

嗯,这里要注意:启动按钮按一下,线圈得电。同时自保触点闭合,把启动按钮旁路掉。这样即使松开启动按钮,线圈依然保持。停止按钮一按,常闭断开,线圈失电。

避坑指南: 我曾经在调试一条包装线时,发现电机启动后无法自保。查了半天,原来是自保触点写成了常闭。你想想看,常闭触点一开始就通着,线圈一得电它反而断开了,这不就自锁了吗?所以,自保触点一定要用常开。

二、功能块图(FBD)—— 画“逻辑框图”

功能块图,说白了就是把你的控制逻辑画成一个个“盒子”。每个盒子代表一个功能,比如“与门”、“或门”、“定时器”、“计数器”。

我建议你把它想象成搭积木。输入信号从左边进盒子,经过处理,从右边输出。盒子之间用线连起来,就形成了完整的控制逻辑。

常用功能块:

功能块 符号 说明
与门 & 所有输入为 1,输出才为 1
或门 >=1 任一输入为 1,输出为 1
非门 1 输入取反
RS触发器 SR 置位/复位,有记忆功能
TON定时器 TON 延时接通

举个例子,一个“延时启动”功能:

|  启动信号  |   TON   |  输出 |
|----||------|IN   Q|----( )----|
|            |PT    ET|         |
|            |  #5s   |         |

启动信号一给,定时器开始计时。5 秒后,Q 输出为 1,输出线圈得电。这就是延时启动。

个人经验: 我在做一条自动化产线时,需要判断“两个传感器同时检测到工件”才启动机械手。用梯形图写要好几行,用功能块图,一个“与门”就搞定了。你想想看,是不是很直观?

小技巧: 功能块图特别适合做“状态机”。把每个状态画成一个功能块,状态切换用连线表示,逻辑清晰,调试方便。

三、结构化文本(ST)—— 像写 C 语言一样写 PLC

结构化文本,说白了就是高级语言。它用 IF、CASE、FOR 这些语句,处理复杂逻辑和数学运算。

为什么需要它?因为梯形图和功能块图处理不了“PID 运算”、“数组排序”、“字符串处理”这些事。这时候,ST 就派上用场了。

基本语法:

  • 赋值: 变量名 := 表达式;
  • IF 语句: IF 条件 THEN ... ELSE ... END_IF;
  • CASE 语句: CASE 变量 OF ... ELSE ... END_CASE;
  • FOR 循环: FOR i:=1 TO 10 DO ... END_FOR;

举个例子,一个简单的“温度控制”逻辑:

IF 温度 > 100 THEN
    加热器 := FALSE;  // 停止加热
    报警灯 := TRUE;   // 报警
ELSIF 温度 < 80 THEN
    加热器 := TRUE;   // 开始加热
    报警灯 := FALSE;
ELSE
    加热器 := 加热器;  // 保持原状态
    报警灯 := FALSE;
END_IF;

这段代码的意思是:温度超过 100 度,停止加热并报警;低于 80 度,开始加热;在 80-100 之间,保持现状。

避坑指南: 我曾经在写一个 PID 程序时,忘记给变量赋初值。结果一运行,输出直接飞了。后来我养成了习惯:所有变量在程序开头都赋一个初始值。比如 温度 := 0.0;,这样就不会出问题。

警告: ST 语言虽然强大,但不要滥用。简单的启停逻辑,用梯形图更直观。复杂的数学运算,用 ST 更高效。选对工具,事半功倍。

四、三种语言怎么选?

我个人的经验是:

  • 梯形图: 适合开关量控制、简单逻辑、现场调试。电工师傅看得懂,维护方便。
  • 功能块图: 适合流程控制、状态机、模拟量处理。逻辑清晰,容易复用。
  • 结构化文本: 适合复杂算法、数据处理、通信协议。效率高,功能强。

你想想看,一个项目里,这三种语言可以混用。比如主程序用梯形图,调用一个功能块图写的“状态机”,再调用一个 ST 写的“PID 运算”。这就是 IEC 61131-3 标准的魅力。

好了,这一课就到这里。下一课,我会带你实际动手,用这三种语言写一个“电机正反转控制”程序。到时候你就知道,它们到底怎么配合了。