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编程的正确打开方式。
好了,关于五种语言的概述和选型,就聊到这儿。下一章,咱们深入讲讲梯形图的那些“坑”和“技巧”。