Skip to content

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       // 跳转到LOOP

4.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秒)

              └────────────────┐


                          返回S0

6.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. 实际项目通常混合使用多种语言                   │
└────────────────────────────────────────────────────┘

思考题

  1. IEC 61131-3标准对PLC行业有什么意义?
  2. 为什么梯形图是最常用的PLC编程语言?
  3. 在什么情况下应该选择ST语言?
  4. SFC适合什么类型的控制任务?

← 上一章:第一章 PLC基础概述 | 下一节:2.2 梯形图编程入门 →

本教程由 AI (Claude Opus 4.5) 生成,仅供学习参考