IEC 61131-3标准精讲:五种编程语言与工程模型

各位工程师朋友,今天我们来聊聊IEC 61131-3这个标准。说实话,我刚入行那会儿,对这套标准也是半懂不懂。直到有一次,我在一个跨国项目里,发现德国团队写的代码我完全看不懂——他们用IL,我用LD,最后联调时出了大问题。那次之后,我才真正意识到:不懂标准,就是给自己挖坑。

一、五种编程语言:各有各的脾气

IEC 61131-3定义了五种编程语言。你想想看,为什么需要五种?因为不同的场景,需要不同的工具。就像你修车,扳手、螺丝刀、千斤顶,各有各的用处。

1. 梯形图(LD)—— 电工的母语

梯形图是最直观的。它长得就像继电器电路图,左边是电源线,右边是地线,中间是触点和线圈。我见过很多老工程师,他们不看手册,直接在屏幕上拖拽触点,几分钟就能写完一个电机启停程序。

适用场景:开关量逻辑、互锁保护、简单顺序控制。

我的经验:在写LD时,尽量保持网络简洁。一个网络里别超过10个触点,否则调试时你会疯掉。我曾经在一个项目里看到有人一个网络画了30多个触点,结果查故障查了整整两天。

2. 功能块图(FBD)—— 信号流的可视化

FBD有点像画电路框图。你把功能块拖出来,连线,数据就从输入流到输出。我个人习惯用FBD做模拟量处理,比如PID调节、滤波算法。

举个例子,一个简单的温度控制:

// 这不是代码,是FBD的连线逻辑
温度传感器 → 标定块 → 滤波块 → PID块 → 输出到加热器

你看,数据流一目了然。调试时,你可以在每个功能块后面加个监视点,看看中间值对不对。

3. 结构化文本(ST)—— 高级语言的思维

ST长得像Pascal或C语言。如果你有计算机背景,上手ST会非常快。我建议,凡是涉及复杂计算、数组操作、循环逻辑的,都用ST。

// 一个简单的ST示例:计算平均值
FOR i := 1 TO 10 DO
    sum := sum + values[i];
END_FOR
average := sum / 10;

注意:ST虽然强大,但别滥用。有些PLC的ST编译器优化不好,循环写多了会拖慢扫描周期。我曾经在一个项目中,用ST写了个冒泡排序,结果PLC扫描时间从10ms飙到了200ms——嗯,后来改成了FBD实现。

4. 指令表(IL)—— 汇编级的控制

IL是一种低级语言,有点像汇编。说实话,现在用IL的人越来越少了。但我在一些老设备上见过,比如西门子的STEP 5程序,全是IL写的。

// IL示例:将输入I0.0赋值给输出Q0.0
LD  I0.0
ST  Q0.0

IL的好处是执行效率高,坏处是难读、难维护。我的建议是:除非你维护老系统,否则尽量别用IL写新程序。

5. 顺序功能图(SFC)—— 流程的骨架

SFC是我个人最喜欢的一种语言。它把整个控制流程分成若干步(Step),步与步之间用转移条件连接。你想想看,一个复杂的自动化生产线,用SFC来组织,结构会非常清晰。

核心概念:步(Step)、转移(Transition)、动作(Action)。

举个例子,一个简单的物料搬运流程:

步1:等待启动按钮
  转移条件:启动按钮按下
步2:夹爪下降
  转移条件:下降到位传感器ON
步3:夹爪夹紧
  转移条件:夹紧压力到达
步4:夹爪上升
  转移条件:上升到位传感器ON
步5:移动到目标位置
  转移条件:位置到达
步6:释放物料
  转移条件:释放完成
步7:返回原点
  转移条件:原点到位

你看,整个流程清清楚楚。调试时,你一眼就能看出当前停在哪个步,为什么停。

二、软件模型与工程结构

IEC 61131-3不仅定义了语言,还定义了软件模型。说白了,就是告诉你程序应该怎么组织。

1. 配置、资源、任务、程序

这个模型是分层的:

  • 配置(Configuration): 相当于整个PLC系统。一个配置可以包含多个资源。
  • 资源(Resource): 相当于一个CPU或一个处理单元。比如一个多核PLC,每个核可以是一个资源。
  • 任务(Task): 控制程序的执行。你可以设置任务的优先级、周期时间。
  • 程序(Program): 你写的实际控制逻辑。

我记得有一次,一个客户抱怨说他们的PLC运行越来越慢。我一看,他们把所有的逻辑都放在一个任务里,周期10ms。我建议他们把高速逻辑(比如编码器计数)放在一个高优先级任务里,低速逻辑(比如HMI通信)放在低优先级任务里。问题立刻解决了。

2. 全局变量与局部变量

这个看似简单,但坑很多。我见过有人把所有变量都声明成全局变量,结果程序一复杂,变量名冲突、值被意外修改,查都查不出来。

避坑指南:我曾经在一个项目中,因为全局变量被两个程序同时写,导致输出抖动。从那以后,我严格规定:只有跨程序通信的变量才用全局,其他都用局部变量。

3. 功能块与函数

功能块(FB)和函数(FC)的区别,很多新手搞不清。简单说:

  • 函数(FC): 没有内部状态。同样的输入,永远得到同样的输出。比如加法、比较。
  • 功能块(FB): 有内部状态。比如计数器、定时器。你调用一次,它的内部值会变化。

我建议,凡是需要记忆的,都用FB;凡是纯计算的,都用FC。

三、标准的意义与选型策略

说了这么多,你可能会问:这个标准到底有什么用?

1. 标准的意义

  • 跨平台移植: 理论上,符合IEC 61131-3的程序,可以在不同品牌的PLC之间移植。当然,实际中会有一些差异,但至少逻辑结构是通用的。
  • 团队协作: 大家用同一种语言,同一种工程结构,沟通成本大大降低。
  • 降低培训成本: 新员工只要学过标准,就能快速上手不同品牌的PLC。

我的体会:有一次,我们团队从西门子换到倍福,程序结构几乎没变,只是把西门子的库函数换成了倍福的。这就是标准的力量。

2. 选型策略

怎么选语言?我的建议是:

场景 推荐语言 理由
简单开关量控制 LD 直观,电工都能看懂
模拟量处理、PID FBD 信号流清晰
复杂计算、数据处理 ST 语法强大,适合算法
顺序控制、流程管理 SFC 结构清晰,便于调试
老系统维护 IL 兼容旧代码

你想想看,如果你用LD去写一个复杂的PID算法,那得多痛苦?反过来,如果你用ST去写一个简单的互锁逻辑,又显得杀鸡用牛刀。选对语言,事半功倍。

四、知识体系总览

下面这张图,是我自己总结的IEC 61131-3知识体系。你可以把它当作一张地图,随时回来看看。

IEC 61131-3 知识体系 IEC 61131-3 五种编程语言 LD 梯形图 FBD 功能块图 ST 结构化文本 IL 指令表 SFC 顺序功能图 软件模型与工程结构 配置/资源/任务 全局/局部变量 功能块/函数 标准意义与选型策略

这张图把IEC 61131-3的核心内容都串起来了。你从中间的核心出发,左边是五种语言,中间是软件模型,下面是标准的意义。每次写程序前,先看看这张图,问问自己:我该用哪种语言?我的工程结构对吗?


公众号:蓝海资料掘金营,微信deep3321