第4章 S7-1200程序设计基础与指令
资料来源
- PPT:
第3.1章 S7-1200程序设计基础.pptx - PPT:
第3.2章 S7-1200的指令260322.pptx - 辅导书:
S7-1200 PLC编程及应用 第3版,对应第2章“S7-1200程序设计基础”和第3章“S7-1200的指令”。
1. 本章脉络
S7-1200程序设计基础与指令
├─ PLC编程语言
│ ├─ LAD梯形图
│ ├─ FBD函数块图
│ └─ SCL结构化控制语言
├─ PLC工作原理
│ ├─ 逻辑运算
│ ├─ 模块化编程
│ ├─ OB/FC/FB/DB
│ └─ 扫描周期
├─ 数据类型与系统存储区
├─ 编写用户程序与变量表
└─ S7-1200常用指令
├─ 位逻辑指令
├─ 定时器指令
├─ 计数器指令
├─ 数据处理指令
├─ 数学运算指令
├─ 程序控制指令
├─ 日期时间、字符串指令
└─ 高速脉冲输出与高速计数器
2. PLC编程语言
IEC 61131-3是PLC编程语言标准。S7-1200常用语言包括LAD、FBD、SCL。
| 编程语言 | 中文 | 特点 | 适合场景 |
|---|---|---|---|
| LAD | 梯形图 | 类似继电器电路,直观 | 数字量逻辑、启保停、联锁 |
| FBD | 函数块图 | 用与门、或门等功能块表达逻辑 | 逻辑关系清晰、功能块连接 |
| SCL | 结构化控制语言 | 类似高级语言,适合算法封装 | 复杂运算、循环、分支、函数块内部逻辑 |
2.1 梯形图 LAD
梯形图有“假想能流”,逻辑从左到右执行,程序段通常自上而下循环扫描。常开触点、常闭触点和线圈分别对应逻辑条件与输出结果。
工程意义:电气工程师容易从继电器电路迁移到PLC程序。
2.2 函数块图 FBD
FBD用功能块表达逻辑关系,如“&”表示与,“>=1”表示或。它与梯形图在逻辑上可等价转换。
2.3 SCL
SCL适合复杂算法、循环、判断和封装功能块。它更接近C/Pascal语言,适合处理数学运算、数组、复杂数据结构。
3. PLC工作原理
3.1 逻辑运算
PLC控制主电路时,并不是直接把按钮串到接触器线圈中,而是读取输入点状态,在程序中用软触点进行逻辑运算,再通过输出映像寄存器控制Q点输出。
位变量只有两种状态,可用0和1表示:
| 状态 | 物理含义 |
|---|---|
| 1 | 高电平、线圈通电、条件成立 |
| 0 | 低电平、线圈断电、条件不成立 |
3.2 模块化编程
模块化编程把复杂自动化任务分成若干功能子任务,每个子任务用一个块实现。
| 块 | 名称 | 作用 |
|---|---|---|
| OB | 组织块 | 操作系统和用户程序接口,决定程序执行结构 |
| FC | 功能 | 可重复调用的无固定存储区子程序 |
| FB | 功能块 | 有背景数据块,适合需要记忆状态的功能 |
| DB | 数据块 | 存储用户数据或FB背景数据 |
3.3 组织块 OB
OB由操作系统调用,不能由用户指令直接调用。
常见OB:
| OB类型 | 作用 |
|---|---|
| 程序循环OB | 如OB1,循环执行主程序 |
| 启动OB | CPU从STOP到RUN时执行一次,用于初始化 |
| 时间延迟中断OB | 延迟时间到达后执行 |
| 周期中断OB | 按固定周期执行 |
| 硬件中断OB | 外部硬件事件触发执行 |
| 时间错误OB | 扫描超时等时间错误处理 |
| 诊断错误OB | 模块或系统诊断错误处理 |
3.4 FC与FB
FC没有固定存储区,执行结束后临时变量丢失。FB有背景数据块,输入、输出、静态变量可以保存在背景DB中,适合电机控制、阀门控制、定时计数等需要保持状态的对象。
4. PLC扫描工作过程
PLC采用循环扫描方式,一个扫描周期通常包括:
输入采样 → 程序执行 → 输出刷新 → 通信/诊断/中断处理 → 下一周期
4.1 输入采样
程序执行前,CPU集中读取外部输入状态并存入输入映像区I。程序执行过程中,即使外部输入变化,当前周期中通常仍使用采样时的I区值。
4.2 程序执行
CPU按顺序执行用户程序,计算内部变量和输出映像区Q的状态。
4.3 输出刷新
程序执行结束后,CPU把Q区状态集中写到实际输出端子。
易错点:程序执行过程中Q映像区会更新,但实际输出通常在输出刷新阶段集中改变。
5. CPU工作模式
| 模式 | 含义 |
|---|---|
| STOP | 不执行用户程序,可下载项目 |
| STARTUP | 启动阶段,执行启动OB并初始化 |
| RUN | 循环执行程序,处理通信、诊断和中断 |
CPU模块上通常没有物理模式开关,可通过STEP 7在线工具或程序指令控制模式。
6. 数据类型与系统存储区
6.1 物理存储器
| 类型 | 作用 | 类比 |
|---|---|---|
| 装载存储器 | 保存用户程序、数据、组态,非易失 | 硬盘 |
| 工作存储器 | CPU运行时使用,高速RAM | 内存 |
| 保持性存储器 | 断电后保持指定数据 | 掉电保持区 |
| 存储卡 | 可选,用于程序传送和存储 | 外部存储介质 |
6.2 常用数据类型
| 类型 | 位数 | 用途 |
|---|---|---|
| Bool | 1 | 开关量、触点、线圈 |
| Byte | 8 | 字节数据 |
| Word | 16 | 字数据、位组合 |
| DWord | 32 | 双字数据 |
| SInt/Int/DInt | 8/16/32 | 有符号整数 |
| USInt/UInt/UDInt | 8/16/32 | 无符号整数 |
| Real | 32 | 浮点数 |
| Time | 32 | 时间值,如定时器PT、ET |
| Char/String | 字符/字符串 | 文本处理 |
6.3 寻址方式
| 地址 | 含义 | 例子 |
|---|---|---|
| I | 输入映像区 | I0.0 |
| Q | 输出映像区 | Q0.0 |
| M | 位存储区/标志位 | M0.0 |
| DB | 数据块 | DB1.DBX0.0 |
7. 位逻辑指令
位逻辑指令用于处理Bool变量,是PLC中最基础、最常考的内容。
| 指令 | 作用 |
|---|---|
| 常开触点 | 条件为1时导通 |
| 常闭触点 | 条件为0时导通 |
| 取反触点 | 对逻辑结果取反 |
| 输出线圈 | 把逻辑结果赋给输出位 |
| 置位S | 条件成立后置1并保持 |
| 复位R | 条件成立后清0 |
| RS/SR锁存器 | 处理置位和复位优先关系 |
| 上升沿检测 | 检测0→1瞬间 |
| 下降沿检测 | 检测1→0瞬间 |
7.1 启保停基本逻辑
常见表达:
[ Q=(Start \lor Q)\land \lnot Stop ]
| 符号 | 含义 |
|---|---|
| (Start) | 启动按钮 |
| (Stop) | 停止按钮 |
| (Q) | 输出或自保持状态 |
适用条件:最常见电机启停、自锁控制。
物理/工程意义:按启动后输出保持,按停止后解除保持。
常见变形:增加热继电器、急停、限位等串联保护条件:
[ Q=(Start \lor Q)\land StopOK\land OverloadOK\land EStopOK ]
8. 定时器指令
S7-1200常用IEC定时器包括TP、TON、TOF、TONR。定时器本质上是功能块,调用时需要背景数据块。
| 定时器 | 中文 | 功能 |
|---|---|---|
| TP | 脉冲定时器 | 输入上升沿后输出保持指定时间 |
| TON | 接通延时定时器 | 输入为1持续达到PT后输出为1 |
| TOF | 断开延时定时器 | 输入变0后输出延迟一段时间再变0 |
| TONR | 保持型接通延时 | 累计输入为1的时间,复位端清零 |
8.1 定时器参数
| 参数 | 类型 | 含义 |
|---|---|---|
| IN | Bool | 启动输入 |
| R | Bool | TONR复位输入 |
| PT | Time | 预设时间 |
| Q | Bool | 定时器输出 |
| ET | Time | 已经过时间 |
| DB | 数据块 | 定时器背景数据 |
适用条件:需要延时启动、延时停止、脉冲保持、累计运行时间等场合。
易错点:TON输入断开时ET通常清零;TONR需要R复位。
9. 计数器指令
S7-1200常用软件计数器:CTU、CTD、CTUD。
| 计数器 | 功能 |
|---|---|
| CTU | 加计数 |
| CTD | 减计数 |
| CTUD | 加减计数 |
计数器最大计数速率受所在OB扫描周期限制;高速脉冲应使用高速计数器HSC。
常用参数:
| 参数 | 含义 |
|---|---|
| CU | 加计数输入,上升沿计数 |
| CD | 减计数输入,上升沿计数 |
| R | 复位输入 |
| LD | 装载输入 |
| PV | 预置值 |
| CV | 当前计数值 |
| Q | 达到条件后的输出 |
10. 数据处理与数学运算指令
10.1 比较指令
比较指令用于判断两个数据大小关系,如等于、不等于、大于、小于、大于等于、小于等于。
用途:液位上下限判断、温度报警、计数值判断、模拟量阈值控制。
10.2 移动指令
移动指令用于把一个变量值复制到另一个变量。常用于初始化、数据暂存、参数传递。
10.3 转换指令
转换指令用于不同数据类型之间转换,如Int转Real、DInt转Real等。
易错点:整数除法会丢失小数,模拟量工程转换时常需先转Real或先乘后除。
10.4 数学运算指令
包括加、减、乘、除、求绝对值、平方根、三角函数等。Calculate指令可把复杂表达式封装为一个计算块。
11. 程序控制、字符串、日期时间指令
| 指令类型 | 用途 |
|---|---|
| 程序控制指令 | 跳转、返回、条件执行等 |
| 日期时间指令 | 读取系统时间、时间戳、定时记录 |
| 字符串指令 | 字符串连接、查找、转换、通信报文处理 |
12. 高速脉冲输出与高速计数器
12.1 PTO与PWM
| 类型 | 含义 | 用途 |
|---|---|---|
| PTO | Pulse Train Output,脉冲串输出 | 步进/伺服位置控制,脉冲数决定位移,频率决定速度 |
| PWM | Pulse Width Modulation,脉宽调制 | 调速、功率控制、模拟量近似输出 |
S7-1200 CPU通常有两个高速脉冲发生器,可分配给Q0.0和Q0.1等高速输出点。
12.2 高速计数器 HSC
HSC用于高速脉冲计数,如编码器、流量计、测速齿盘。它不受普通OB扫描周期限制。
常见模式包括单相计数、带方向输入计数、双相加减计数、A/B正交计数。
正交计数中,A相和B相相差90°,可根据相位超前/滞后判断方向;4x模式可提高分辨率。
13. 图表索引
| 图表 | 来源位置 | 作用 |
|---|---|---|
| LAD/FBD等价图 | 第3.1章PPT约第3-4页 | 理解梯形图与函数块图对应关系 |
| PLC扫描周期图 | 第3.1章PPT约第23页 | 理解输入采样、程序执行、输出刷新 |
| CPU模式转换图 | 第3.1章PPT约第26-29页 | 理解STOP/STARTUP/RUN |
| 数据类型表 | 第3.1章PPT约第31页 | 掌握Bool、Byte、Word、Real等 |
| 定时器时序图 | 第3.2章PPT定时器部分 | 区分TP、TON、TOF、TONR |
| 计数器功能图 | 第3.2章PPT计数器部分 | 掌握CTU、CTD、CTUD |
| 高速计数器模式图 | 第3.2章PPT后部 | 理解单相、双相、正交计数 |
14. 易错点
- PLC程序中触点可以重复使用,但输出线圈重复赋值可能导致覆盖问题。
- 输入采样后,当前扫描周期内外部输入变化通常不会立即改变程序读取的I区值。
- 定时器和计数器是功能块,需要背景数据块。
- TON和TOF的触发条件相反,TON是接通延时,TOF是断开延时。
- CTU等软件计数器不适合高速脉冲,编码器应使用HSC。
- SCL适合复杂运算,但考试和工程入门常以LAD为主。
- 模拟量计算要注意数据类型转换和运算顺序。
15. 考前补充:程序分析与指令细节
15.1 扫描周期类题目的答题模板
输入采样:把外部输入状态集中读入I映像区
程序执行:按程序顺序计算逻辑,更新M、DB、Q映像区等
输出刷新:把Q映像区状态集中送到物理输出端子
通信/诊断/中断:由操作系统在扫描周期中穿插处理
判断题常考:程序执行过程中,普通输入端子变化一般要到下一次输入采样后才反映到I区;普通输出线圈状态变化也通常到输出刷新阶段才真正作用到端子。
15.2 沿触发与普通触点区别
| 指令/触点 | 动作特点 | 典型用途 |
|---|---|---|
| 常开/常闭触点 | 条件持续为真时持续接通 | 普通联锁、启保停 |
| 上升沿检测 | 0变1时只接通一个扫描周期 | 启动一次动作、计数脉冲 |
| 下降沿检测 | 1变0时只接通一个扫描周期 | 松开按钮触发、信号消失报警 |
沿触发需要记忆上一扫描周期状态,所以要有边沿存储位或由触发器内部保存状态。
15.3 定时器、计数器常考口径
TP:输入上升沿触发固定宽度脉冲,脉冲期间输入再变化通常不重新开始。TON:输入为1开始计时,达到预置时间后Q为1;输入变0则复位。TOF:输入为1时Q立即为1,输入变0后延时一段时间再变0。TONR:保持型接通延时,累计时间保持,需要复位信号清零。CTU:加计数,CV >= PV时Q置1;R复位。CTD:减计数,通常从预置值向下减。CTUD:可加可减,注意加减输入同时动作时的处理规则以软件帮助为准。
16. 本章预测题与答案
题1:S7-1200常用编程语言有哪些?各有什么特点?
答案:常用语言有LAD、FBD、SCL。LAD类似继电器电路,适合数字量逻辑;FBD用功能块表达逻辑关系,适合块连接;SCL类似高级语言,适合复杂运算、分支、循环和封装算法。
题2:说明PLC一个扫描周期的基本过程。
答案:PLC一个扫描周期通常包括输入采样、程序执行、输出刷新以及通信/诊断/中断处理。输入先集中读入I区,程序按顺序计算并更新Q区,扫描结束后再把Q区输出到实际端子。
题3:OB、FC、FB、DB分别是什么?
答案:OB是组织块,由操作系统调用,决定程序执行结构;FC是无固定存储区的功能子程序;FB是有背景数据块的功能块,可保存状态;DB是数据块,用于存储全局数据或FB背景数据。
题4:FC和FB最核心区别是什么?
答案:FB有专用背景数据块,能保存输入、输出和静态变量,适合需要记忆状态的设备控制;FC没有固定存储区,执行结束后临时变量丢失,适合无状态计算或可重复操作。
题5:写出启保停逻辑表达式并说明含义。
答案:(Q=(Start \lor Q)\land \lnot Stop)。Start按下时Q置1,Q自身触点实现保持;Stop动作时条件断开,Q复位。
题6:TON、TOF、TP、TONR分别适合什么场景?
答案:TON用于接通延时,如延时启动;TOF用于断开延时,如延时停机;TP用于产生固定宽度脉冲;TONR用于累计运行时间,需要复位端清零。
题7:为什么定时器和计数器调用时需要背景数据块?
答案:IEC定时器和计数器属于功能块,需要保存ET、CV、Q等内部状态,这些状态必须存放在背景数据块中,否则下一扫描周期无法保持定时或计数过程。
题8:软件计数器和高速计数器有什么区别?
答案:软件计数器由程序扫描执行,计数速率受OB扫描周期限制;高速计数器由CPU硬件高速通道处理,适合编码器、脉冲流量计等高速脉冲信号。
题9:PTO和PWM有什么区别?
答案:PTO输出固定占空比、频率可调的脉冲串,常用于步进/伺服位置控制;PWM输出占空比可调的脉冲,常用于调速和功率控制。
题10:模拟量工程计算为什么要注意“先乘后除”?
答案:PLC中若使用整数运算,先除会截断小数造成精度损失;先乘后除能尽量保留有效数值。更可靠的方法是转换为Real后进行浮点运算。