2.1 PLC编程语言概述
本节将介绍IEC 61131-3标准定义的PLC编程语言
学习目标
- 了解PLC编程语言的国际标准
- 掌握五种标准编程语言的特点
- 能够选择合适的编程语言
1. IEC 61131-3标准介绍
1.1 什么是IEC 61131-3?
IEC 61131-3 是国际电工委员会(IEC)制定的PLC编程语言国际标准,是IEC 61131系列标准的第三部分。
IEC 61131系列标准:
┌─────────────────────────────────────────────────────┐
│ IEC 61131 │
├─────────────────────────────────────────────────────┤
│ 第1部分:一般信息 │
│ 第2部分:设备要求和测试 │
│ 第3部分:编程语言 ← 最重要,定义5种编程语言 │
│ 第4部分:用户指南 │
│ 第5部分:通信 │
│ 第6部分:功能安全 │
│ 第7部分:模糊控制编程 │
│ 第8部分:OPC UA应用指南 │
└─────────────────────────────────────────────────────┘1.2 标准的意义
| 方面 | 说明 |
|---|---|
| 统一性 | 统一全球PLC编程语言规范 |
| 可移植性 | 程序可在不同厂商PLC间移植 |
| 学习成本 | 学一种标准,适用所有品牌 |
| 软件复用 | 功能块可跨项目、跨平台复用 |
1.3 五种标准编程语言
IEC 61131-3定义的5种编程语言:
┌─────────────────────────────────────────────────────┐
│ 图形化语言 文本语言 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ LD │ │ FBD │ │ SFC │ │
│ │ 梯形图 │ │功能块图 │ │顺序功能图│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ ┌─────────┐ ┌───────┐│
│ │ IL │ │ ST ││
│ │ 指令表 │ │结构化 ││
│ │ │ │ 文本 ││
│ └─────────┘ └───────┘│
└─────────────────────────────────────────────────────┘2. 梯形图(LD - Ladder Diagram)
2.1 概述
梯形图是最常用的PLC编程语言,起源于继电器控制电路图,直观易懂。
2.2 基本形式
梯形图基本结构:
左母线 右母线
│ │
├──┤ ├──┬──┤/├─────────────────────────( )──┤
│ I0.0 │ I0.1 Q0.0 │
│ │ │
│ I0.2 │ │
├──┤ ├──┘ │
│ │
├──┤ ├──────────────────────────────────(S)──┤
│ I0.3 Q0.1 │
│ │
说明:
┤ ├ 常开触点(Normally Open)
┤/├ 常闭触点(Normally Closed)
( ) 输出线圈
(S) 置位线圈2.3 特点
| 优点 | 缺点 |
|---|---|
| ✅ 直观,类似电气原理图 | ❌ 复杂算法表达困难 |
| ✅ 电气人员容易理解 | ❌ 程序较长时不易阅读 |
| ✅ 在线监控方便 | ❌ 数据处理能力有限 |
| ✅ 故障排查直观 |
2.4 适用场景
- ✅ 开关量控制
- ✅ 逻辑控制
- ✅ 顺序控制
- ✅ 初学者入门
3. 功能块图(FBD - Function Block Diagram)
3.1 概述
功能块图采用图形化的功能块来表示控制逻辑,类似于数字电路图。
3.2 基本形式
功能块图示例:
┌─────────┐
I0.0─┤ │
│ AND ├───┐ ┌─────────┐
I0.1─┤ │ │ │ │
└─────────┘ └────┤ │
│ OR ├────Q0.0
┌─────────┐ ┌────┤ │
I0.2─┤ NOT ├───┘ │ │
└─────────┘ └─────────┘
等效梯形图:
I0.0 I0.1
──────┤├────┤├────┬──────────────( )──
│ Q0.0
I0.2 │
──────┤/├─────────┘3.3 常用功能块
常用标准功能块:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ AND │ │ OR │ │ NOT │
│ ─┬─ │ │ ─┬─ │ │ ─┬─ │
│ │ & ──│ │ │ ≥1 ──│ │ │ o ──│
│ ─┴─ │ │ ─┴─ │ │ ─┴─ │
└──────────┘ └──────────┘ └──────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐
│ TON │ │ CTU │ │ ADD │
│IN─┬─ Q │ │CU─┬─ Q │ │IN1─┬─OUT│
│ │TON │ │ │CTU │ │ │ADD │
│PT─┴─ ET │ │PV─┴─ CV │ │IN2─┴─ │
└──────────┘ └──────────┘ └──────────┘
接通延时 加计数器 加法运算3.4 特点
| 优点 | 缺点 |
|---|---|
| ✅ 数据流清晰 | ❌ 复杂逻辑连线多 |
| ✅ 适合模拟量运算 | ❌ 占用屏幕空间大 |
| ✅ 功能块可复用 | |
| ✅ 便于模块化编程 |
3.5 适用场景
- ✅ 模拟量处理
- ✅ PID控制
- ✅ 数学运算
- ✅ 复杂功能块组合
4. 指令表(IL - Instruction List)
4.1 概述
指令表是一种类似汇编语言的低级文本编程语言,由一条条指令组成。
4.2 基本形式
指令表示例:
标号 操作码 操作数 注释
────────────────────────────────────────
LD I0.0 // 装载I0.0
AND I0.1 // 与I0.1
OR I0.2 // 或I0.2
ST Q0.0 // 存储到Q0.0
LOOP: LD M0.0 // 标号LOOP
ADD 1 // 加1
ST M0.0 // 存储
JMP LOOP // 跳转到LOOP4.3 常用指令
| 指令 | 功能 | 示例 |
|---|---|---|
| LD | 装载(开始新逻辑) | LD I0.0 |
| LDN | 装载(取反) | LDN I0.0 |
| AND | 与运算 | AND I0.1 |
| OR | 或运算 | OR I0.2 |
| ST | 存储输出 | ST Q0.0 |
| S | 置位 | S Q0.1 |
| R | 复位 | R Q0.1 |
| JMP | 跳转 | JMP LABEL |
| CAL | 调用 | CAL FB1 |
4.4 特点
| 优点 | 缺点 |
|---|---|
| ✅ 执行效率高 | ❌ 可读性差 |
| ✅ 程序紧凑 | ❌ 调试困难 |
| ✅ 适合简单控制 | ❌ 不直观 |
4.5 适用场景
- ✅ 资源受限的小型PLC
- ✅ 对执行效率要求高的场合
- ⚠️ 目前使用越来越少
注意:IEC 61131-3第三版已将IL列为"不推荐使用"。
5. 结构化文本(ST - Structured Text)
5.1 概述
结构化文本是一种高级文本编程语言,语法类似于Pascal/C语言,功能强大。
5.2 基本形式
pascal
// 结构化文本示例
// 变量声明
VAR
StartButton : BOOL;
StopButton : BOOL;
Motor : BOOL;
Counter : INT := 0;
Temperature : REAL;
END_VAR
// 程序代码
IF StartButton AND NOT StopButton THEN
Motor := TRUE;
Counter := Counter + 1;
END_IF;
// CASE语句
CASE State OF
0: // 初始状态
Motor := FALSE;
1: // 运行状态
Motor := TRUE;
2: // 故障状态
Motor := FALSE;
Alarm := TRUE;
END_CASE;
// FOR循环
FOR i := 1 TO 10 DO
Array[i] := i * 2;
END_FOR;
// WHILE循环
WHILE Temperature > 100.0 DO
CoolingValve := TRUE;
Temperature := ReadTemperature();
END_WHILE;5.3 主要语法结构
ST语言主要结构:
┌─────────────────────────────────────────────────────┐
│ 条件语句 │
│ ───────── │
│ IF condition THEN │
│ statements; │
│ ELSIF condition THEN │
│ statements; │
│ ELSE │
│ statements; │
│ END_IF; │
├─────────────────────────────────────────────────────┤
│ 选择语句 │
│ ───────── │
│ CASE selector OF │
│ value1: statements; │
│ value2: statements; │
│ ELSE: statements; │
│ END_CASE; │
├─────────────────────────────────────────────────────┤
│ 循环语句 │
│ ───────── │
│ FOR i := start TO end BY step DO │
│ statements; │
│ END_FOR; │
│ │
│ WHILE condition DO │
│ statements; │
│ END_WHILE; │
│ │
│ REPEAT │
│ statements; │
│ UNTIL condition; │
└─────────────────────────────────────────────────────┘5.4 特点
| 优点 | 缺点 |
|---|---|
| ✅ 功能强大,适合复杂算法 | ❌ 对电气人员不友好 |
| ✅ 代码简洁,易于维护 | ❌ 在线监控不如梯形图直观 |
| ✅ 支持完整的编程结构 | ❌ 需要编程基础 |
| ✅ 便于程序复用 |
5.5 适用场景
- ✅ 复杂算法实现
- ✅ 数据处理和运算
- ✅ 通信协议处理
- ✅ 有编程基础的工程师
6. 顺序功能图(SFC - Sequential Function Chart)
6.1 概述
顺序功能图用于描述顺序控制过程,直观展示程序的步骤和流程。
6.2 基本形式
顺序功能图示例(自动洗车程序):
┌───────────┐
│ 初始步 │ S0:等待
│ S0 │
└─────┬─────┘
│
══════╪══════ T0:启动按钮按下
│
┌─────┴─────┐
│ S1 │ 喷水
└─────┬─────┘
│
══════╪══════ T1:喷水完成(10秒)
│
┌─────┴─────┐
│ S2 │ 打泡沫
└─────┬─────┘
│
══════╪══════ T2:打泡沫完成(15秒)
│
┌─────┴─────┐
│ S3 │ 刷洗
└─────┬─────┘
│
══════╪══════ T3:刷洗完成(20秒)
│
┌─────┴─────┐
│ S4 │ 冲洗
└─────┬─────┘
│
══════╪══════ T4:冲洗完成(15秒)
│
┌─────┴─────┐
│ S5 │ 烘干
└─────┬─────┘
│
══════╪══════ T5:烘干完成(30秒)
│
└────────────────┐
│
▼
返回S06.3 SFC基本元素
| 元素 | 符号 | 说明 |
|---|---|---|
| 步(Step) | 矩形框 | 表示一个状态或动作 |
| 转换(Transition) | 横线 | 步之间的转换条件 |
| 动作(Action) | 矩形框 | 步中执行的操作 |
| 有向连线 | 箭头线 | 表示执行顺序 |
6.4 分支与汇合
选择分支: 并行分支:
┌───┐ ┌───┐
│ S1│ │ S1│
└─┬─┘ └─┬─┘
│ │
═══╪═══ ════╪════
/ \ ║ ║
│ │ ║ ║
┌─┴─┐ ┌─┴─┐ ┌──┴──┐┌──┴──┐
│S2a│ │S2b│ │ S2a ││ S2b │
└─┬─┘ └─┬─┘ └──┬──┘└──┬──┘
│ │ ║ ║
═══╪═══ ════╪════
│ │
┌─┴─┐ ┌─┴─┐
│ S3│ │ S3│
└───┘ └───┘
二选一执行 同时并行执行6.5 特点
| 优点 | 缺点 |
|---|---|
| ✅ 流程清晰直观 | ❌ 只适合顺序控制 |
| ✅ 适合复杂顺序控制 | ❌ 不适合连续控制 |
| ✅ 便于设计和维护 | ❌ 需要配合其他语言使用 |
| ✅ 支持并行分支 |
6.6 适用场景
- ✅ 批处理控制
- ✅ 自动化生产流程
- ✅ 机械动作顺序
- ✅ 状态机实现
7. 五种语言对比总结
7.1 对比表
| 语言 | 类型 | 难度 | 适用场景 | 使用频率 |
|---|---|---|---|---|
| LD | 图形 | ★☆☆ | 逻辑控制 | ★★★★★ |
| FBD | 图形 | ★★☆ | 模拟量处理 | ★★★☆☆ |
| IL | 文本 | ★★☆ | 简单控制 | ★☆☆☆☆ |
| ST | 文本 | ★★★ | 复杂算法 | ★★★★☆ |
| SFC | 图形 | ★★☆ | 顺序控制 | ★★★☆☆ |
7.2 语言选择建议
语言选择决策流程:
控制类型?
│
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
逻辑控制 运算处理 顺序控制
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────────┐ ┌─────┐
│ LD │ │复杂算法?│ │ SFC │
└─────┘ └────┬────┘ └─────┘
│
┌─────┴─────┐
│ │
▼ ▼
┌─────┐ ┌─────┐
│ ST │ │ FBD │
└─────┘ └─────┘
复杂算法 简单运算7.3 混合编程
实际项目中,通常混合使用多种语言:
典型项目语言组合:
┌──────────────────────────────────────────────┐
│ 项目程序结构 │
├──────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────┐ │
│ │ 主程序(OB1)- 使用LD/FBD │ │
│ │ · 基本逻辑控制 │ │
│ │ · 设备联锁 │ │
│ └────────────────────────────────────────┘ │
│ │ │
│ ┌───────────┼───────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 功能块FB │ │ 功能块FB │ │ 功能块FB │ │
│ │ 电机控制 │ │ PID运算 │ │ 通信处理 │ │
│ │ (LD) │ │ (FBD) │ │ (ST) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└──────────────────────────────────────────────┘本节小结
IEC 61131-3编程语言要点:
┌────────────────────────────────────────────────────┐
│ 1. 国际标准定义了5种PLC编程语言 │
│ │
│ 2. LD(梯形图):最常用,适合逻辑控制,入门首选 │
│ │
│ 3. FBD(功能块图):适合模拟量处理和运算 │
│ │
│ 4. ST(结构化文本):功能最强,适合复杂算法 │
│ │
│ 5. SFC(顺序功能图):适合顺序控制流程 │
│ │
│ 6. IL(指令表):已不推荐使用 │
│ │
│ 7. 实际项目通常混合使用多种语言 │
└────────────────────────────────────────────────────┘思考题
- IEC 61131-3标准对PLC行业有什么意义?
- 为什么梯形图是最常用的PLC编程语言?
- 在什么情况下应该选择ST语言?
- SFC适合什么类型的控制任务?