# 第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. 易错点

  1. PLC程序中触点可以重复使用,但输出线圈重复赋值可能导致覆盖问题。
  2. 输入采样后,当前扫描周期内外部输入变化通常不会立即改变程序读取的I区值。
  3. 定时器和计数器是功能块,需要背景数据块。
  4. TON和TOF的触发条件相反,TON是接通延时,TOF是断开延时。
  5. CTU等软件计数器不适合高速脉冲,编码器应使用HSC。
  6. SCL适合复杂运算,但考试和工程入门常以LAD为主。
  7. 模拟量计算要注意数据类型转换和运算顺序。

# 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后进行浮点运算。