4、PLC编程语言标准IEC 61131-3:LD、FBD、ST、IL、SFC五种语言概述与选型

各位工程师朋友,咱们今天聊聊IEC 61131-3标准。这个标准,说白了就是PLC编程界的“普通话”。

我刚入行那会儿,各家PLC的编程语言五花八门,换个品牌就得重新学。直到这个标准出来,才算是有了统一的规范。它定义了五种编程语言:LD、FBD、ST、IL、SFC。每种语言都有自己的脾气秉性,选对了,事半功倍;选错了,够你喝一壶的。

4.1 梯形图(LD)—— 电工的“老伙计”

梯形图,大家最熟悉了。它长得就像继电器电路图,左母线、右母线,中间是触点和线圈。电气工程师一看就懂,几乎零门槛。

核心特点:

  • 直观:逻辑关系一目了然,像画电路图一样。
  • 适合简单逻辑:与、或、非、自锁、互锁,这些基本逻辑用LD写最顺手。
  • 调试方便:在线监控时,哪一路通了,哪一路断了,看得清清楚楚。

我个人的习惯是:凡是涉及安全联锁、急停回路、手动操作这些逻辑,我首选LD。为什么?因为现场维护的电工师傅不一定懂ST,但一定看得懂LD。你写个复杂的ST,人家修设备时可能直接懵了。

举个简单的例子:一个电机启动/停止控制。

| 启动按钮 | 停止按钮 | 电机 |
|----|----|----|
|--[ ]----[ ]----( )--|

嗯,就这么简单。但要注意,实际项目中,停止按钮通常用常闭触点,这是为了“断线保护”。

我曾经踩过一个坑:在大型项目中,用LD写了上百行的复杂逻辑,结果发现扫描周期太长,CPU都快扛不住了。LD虽然直观,但执行效率不如ST。所以,复杂运算、数据处理,别用LD硬扛。

4.2 功能块图(FBD)—— 信号流的“高速公路”

FBD,有点像电子电路中的逻辑门电路图。它用方框表示功能,用连线表示信号流向。适合处理模拟量、PID控制、信号处理这些场景。

核心特点:

  • 数据流清晰:信号从左到右流动,处理过程一目了然。
  • 模块化:每个功能块可以独立封装,复用性高。
  • 适合连续控制:比如PID调节、滤波算法、数学运算。

你想想看,一个PID控制回路,如果用LD写,你得把比例、积分、微分拆成一个个触点,那画面太美我不敢看。但用FBD,直接拖一个PID功能块,设定好参数,连线就完事了。

我的建议是:FBD特别适合做过程控制,比如化工、水处理这些行业。我在做锅炉控制系统时,温度、压力、流量的PID调节全部用FBD实现,调试效率非常高。

一个简单的加法运算:

  [输入1]---|
             |---[ADD]---[输出]
  [输入2]---|

说白了,就是把两个数加起来。但FBD的魅力在于,你可以把多个功能块串联起来,形成复杂的处理链。

4.3 结构化文本(ST)—— 程序员的“瑞士军刀”

ST,长得像Pascal或C语言。它是五种语言中功能最强大的,没有之一。如果你有计算机背景,ST会让你感到亲切。

核心特点:

  • 语法灵活:支持IF、CASE、FOR、WHILE等高级语句。
  • 数据处理能力强:数组、结构体、指针,都能玩得转。
  • 执行效率高:编译后的代码运行速度最快。

举个例子:一个简单的温度判断逻辑。

IF Temp > 100 THEN
    Alarm := TRUE;
    Heater := FALSE;
ELSIF Temp < 50 THEN
    Heater := TRUE;
ELSE
    Heater := Heater;  // 保持状态
END_IF

你看,这种逻辑用LD写,得画一堆比较触点,用ST几行就搞定了。

我个人强烈推荐:凡是涉及复杂算法、数据处理、通信协议解析、配方管理这些场景,直接用ST。我在做视觉定位系统时,坐标变换、矩阵运算全部用ST实现,代码量少,还容易维护。

但ST也有缺点。它不直观,现场维护人员可能看不懂。所以,我的原则是:核心算法用ST,外围逻辑用LD或FBD

4.4 指令表(IL)—— 汇编语言的“远房亲戚”

IL,有点像汇编语言。它用指令助记符来编程,比如LD(加载)、AND(与)、OR(或)、ST(存储)。

核心特点:

  • 底层:直接操作寄存器和内存。
  • 执行效率极高:代码紧凑,运行速度快。
  • 可读性差:写起来像天书,维护起来想哭。

一个简单的与逻辑:

LD  Input1
AND Input2
ST  Output

说白了,就是“如果输入1和输入2都为真,输出就为真”。

说实话,我现在很少用IL了。除非是做一些底层驱动、中断服务程序,或者对扫描周期有极致要求的场合。我曾经在一个老项目里见过几千行的IL代码,那维护起来,简直是噩梦。能用ST,就别用IL。

4.5 顺序功能图(SFC)—— 流程控制的“导演剧本”

SFC,它不是用来写具体逻辑的,而是用来描述整个控制流程的。它把复杂的工艺分解成一个个“步”(Step)和“转移条件”(Transition)。

核心特点:

  • 结构化:把大问题拆成小步骤,每个步骤做什么,清清楚楚。
  • 适合顺序控制:比如机械手的“抓取-搬运-放置”流程。
  • 并行与选择:支持分支、合并、并行执行。

一个简单的机械手流程:

  [初始步] ----> [抓取步] ----> [搬运步] ----> [放置步] ----> [返回步]
      ↑              |              |              |              |
      |              |              |              |              |
      +--------------+--------------+--------------+--------------+

每个步里面,你可以嵌套LD、FBD或ST来写具体的动作。转移条件就是“什么时候进入下一步”。

我的经验是:SFC特别适合做设备的主控流程。比如包装机、装配线、自动化产线。我在做锂电池卷绕机时,整个控制逻辑就是用SFC搭起来的,每个工位一个步,调试时一目了然,哪里卡住了,一眼就能看出来。

4.6 如何选型?—— 我的“三看”原则

说了这么多,到底该用哪种语言?我总结了一个“三看”原则:

场景 推荐语言 理由
简单逻辑、安全联锁 LD 直观,电工看得懂,维护方便
模拟量处理、PID控制 FBD 数据流清晰,模块化好
复杂算法、数据处理 ST 功能强大,执行效率高
底层驱动、极致性能 IL 代码紧凑,但慎用
顺序控制、工艺流程 SFC 结构化好,流程清晰

第一看:看应用场景。 是逻辑控制,还是过程控制?是简单逻辑,还是复杂算法?

第二看:看维护团队。 现场维护的是电工还是程序员?电工多,就多用LD;程序员多,可以多用ST。

第三看:看性能要求。 对扫描周期有极致要求吗?有的话,考虑ST或IL。

最后,我想说:别死磕一种语言。一个成熟的项目,往往是多种语言混用的。比如,主流程用SFC,每个步里面用LD或FBD,复杂算法用ST。这才是工业PLC编程的正确打开方式。

好了,关于五种语言的概述和选型,就聊到这儿。下一章,咱们深入讲讲梯形图的那些“坑”和“技巧”。