第5章S7-200系列基本指令系统及应用

Download Report

Transcript 第5章S7-200系列基本指令系统及应用

第5章 S7-200系列PLC
基本指令系统及应用
 本章主要介绍SIMATIC指令集中的常用指令及其
使用方法,并以梯形图和语句表两种编程语言
为例,讲授指令的结构形式、功能和相关知识。
5.1 指令及结构
 5.1.1 指令的组成
 指令是程序的最小独立单位,用户程序是由若干条指令按
顺序排列组成的。
 S7-200的两种指令形式
 (1)SIMATC指令集—SIMEMENS公司专为S7系列PLC设计的,
特点是执行时间短,可用LAD、STL、FBD三种编程语言,
本书重点介绍LAD、STL语言。
 (2)IEC-1131-3指令集---国际电工委员会(IEC)为不
同PLC生产厂家制定的指令标准,IEC1131-3指令集中指令
较少,只能使用梯形图和功能块图两种编程语言。不能用
STL编程语言。
5.1 指令及结构
 5.1.1 指令的组成
 1.语句表指令
 是由各种指令组成的语言程序。使用NETWORK对程序分段。
可以实现某些不能用梯形图或功能块图实现的功能。
 指令是构成语句表的元素,由一个或几个容易记忆的字符
来表示。每一条指令带上必要的符号和参数就形成一个语
句,分别称为操作码和操作数,可完成一特点功能。程序
执行时,按从上到下的顺序逐条执行。
 2.梯形逻辑指令
 用图形元件来表示PLC要完成的操作,其操作码是图形符号
表示,操作数与STL语言相同。部分指令可以不带操作数。
5.1 指令及结构
 5.1.2 操作数
 1.操作数标识符及参数
 指令的操作数在PLC主机的存储器中,操作数由操作数标识符和参数
组成。
 操作数标识符由主标识符和辅助标识符组成。
主标识符列表
主标识符
注释
主标识符
注释
I
输入过程映像存储区
HC
高速计数器
Q
输出过程映像存储区
AC
累加器
V
变量存储区
SM
特殊存储器
M
位存储区
L
局部变量存储器
T
定时器存储区
AI
模拟量输入映像存储器
C
计数器存储区
AQ
模拟量输出映像存储器
5.1 指令及结构
 5.1.2 操作数
 辅助标识符有:X——位、B——字节、W——字、D——双字。
 S7-200系列PLC的物理存储器是以字节为单位的,所以存储单
元规定为字节单元。位地址参数用一个点与字节分开,如
M1.0/I0.2/Q4.5。
 当操作数为字或双字时,标识符后给出的标识参数是字或双字
内的最低字节单元号。
7 … 0
7 … 0
7 … 0
7 … 0
IB3
IB2
IB1
IB0
IW2
IW0
ID0
位地址
字节地址
字地址
双字地址
5.1 指令及结构
 5.1.2操作数
物理地址(绝对地址)表示法
 2.操作数表示法
符号表示法
 为物理地址定义一个有意义的符号名(符号地址),所定
义的符号地址的集合称为符号表。
符号地址包括
地址
符号地址特点:先定义后使用;可读
符号
性;不能重命名;需指明存储区、操
注释
作数的位数、具体位置及数据类型。
例如,Q4.0中的Q输出过程映像区中的输出位,具体位置是第4
个字节的第0位,允许用符号地址表示操作数。如“MOTOR-ON”
替代表示。
5.1 指令及结构
 3.数据区存储器的地址表示格式:
 PLC内部在数据区为每一种元件分配一个存储区域,并用字母
作为区域标识符,同时表示元件的类型。
 (1)位地址格式:
 存储器区域标识符.字节地址.位号,例如:I0.0、Q0.0、V
5.4、M0.0。
 (2)字节、字、双字地址格式:
 区域标识符.B(字节地址)例:IB0(表示I0.0~I0.7这8位)
 区域标识符.W(起始字节地址),最高有效字节为起始字节。
例:VW0表示由VB0、VB1两个字节组成的字。
 区域标识符.D(起始字节)且最高有效字节为起始字节。例:
VD0表示VB0~VB3 四个字节组成的双字。
5.1 指令及结构
I
I0.0~I0.7
I1.0~I1.7
IB0
IB1
I15.0 ~I15.7 IB15
位
字节
IW0
IW2
ID0
ID4
IW14
字
ID12
双字
 同理还可以写出输出映像寄存器(Q)、内部标志位存储器
(M)、变量存储器(V)、局部存储器(L)顺序控制继电器
存储器(S)的位、字节、字、双字的形式。
 数据区空间存储器区域中,还包括定时器存储器、计数器存储
器、累加器、高速计数器等。它们是模拟相关的电器元件的,
它们的地址格式为:区域标志符和元件号,例如T24表示某定
时器的地址,T是定时器的区域标志符,24是定时器号。
5.1 指令及结构




5.1.3 寻址方式:
1、立即寻址:数据在指令中以常数形式出现。
例:MOVD 2000,VD500
2、直接寻址:在指令中直接使用存储器的元件名称和地
址编号。由于PLC的存储单元是按字节进行编址,无论所
寻址的是何种数据类型,通常应指出它所在区域的字节地
址,这种直接指出元件名称的寻址方式称为直接寻址。
 (1)位寻址格式 按位寻址时的格式为元件名称、字节
地址和位号。如:I0.5。
 可以按位寻址的元件有:I、Q、M、SM、L(局部变量存储
器)、V、S(顺序控制继电器)。
5.1 指令及结构
 直接寻址方式
 (2)特殊器件存储器的寻址格式 在存储区内还有一些
元器件是具有一定功能的器件,不用指出它们的字节,
而是直接写出其编号。包括:T、C、HC、AC。如T37。
 (3)字节、字、双字的寻址格式 对字节、字和双字数
据,直接寻址时需指明元件名称、数据类型和存储区域
的首字节地址。如VB100,表示变量存储器V,数据类型
为字节首字地址为100。VW100,表示变量存储器V,数据
类型为W,包括字节地址VB100和VB101。 VD100,表示变
量存储器V,数据类型为双字D,包括字节地址VW100和
VW102。
5.1 指令及结构
 3、间接寻址
 指令给出了存放操作数地址的储存器单元的地址。在这种寻址方式中,
指令中的操作数并不是操作数本身而是操作数所在存储单元的地址。
 用间接寻址方式存取数据的步骤:
 (1)建立指针:由于储存器的物理地址是32位的,所以指针的长度应
当是双字长,可用作为指针的编程元件有:V、L、AC1、AC2、AC3.建
立指针必须用双字传送指令MOVD将存储器中所要访问的储存器单元的
地址装入用来作为指针的编程元件中,装的是地址而不是数据本身。
 例:MOVD &VB200, VD302

MOVD &MB,AC2

MOVD &C2,LD14
 &地址符号,与编程元件编号组合,表示对应单元的32位物理地址,
VB200只是一个直接地址编号,并不是它的物理地址,指令中的第二个
地址数据长度必须是双字长,如VD、AC(AC1-AC3)、LD,将指令中
的&VB200改为&VW200或&VD200,用于它们的起始地址是先同的 效
果一样。
5.1 指令及结构
 (2)间接取存:在指令中的操作数前加*,表示该操作数
为一个指针。
 例:MOVD &VB200,AC1----将VB200的物理地址装入
AC1,建立地址指针。
 MOVW *AC1,AC0---将指针所指的数据送到AC0
 (3)修改指针:由于地址指针是32位,必须用双字指令
来修改,常用INCD,当修该指针时,要根据所存的数据
长度正确调整指针。
 当存取字节数据时,执行一次INCD指令;
 当存取字数据时以及存取定时器、计数器的当前值时,执
行两次INCD指令;
 当存取双字数据时,连续执行4次INCD指令;
 应用于:存取连续地址的存储单元中的数据。
5.1 指令及结构
5.1.4 S7-200系列PLC编程数据类型
S7-200的基本数据类型及范围
基本数据类型 位数
说明
布尔BOOL
1
位 范围:0、1
字节B
8
不带符号的字节 范围:0~255
带符号的字节 范围:-128~127
字W
16
带符号的字节 范围:0~65535
整数INT
双字DW
不带符号的字节 范围:0~65535
32
不带符号的字节 范围:0~4294967295
带符号的字节 范围:-2147483648~2147483647
双整数
IEEE浮点数 范围:+1.175495e-38~+3.402823e+38
-1.175495e-38~+3.402823e+38
实数型REAL
32
字符串
每个字符以字节形式存储,最大长度为255字节
5.2 PLC指令分类及位逻辑指令
 位操作逻辑指令
 定时器/计数器和比较器指令
 算术运算指令
 关系运算指令又称逻辑运算指令
 数据传送指令/数据移位指令
 转换指令包括字节交换指令和存储器填充指令
 控制指令包括程序控制指令和子程序指令
5.2 PLC指令分类及位逻辑指令
 5.2.1 触点指令
 1.标准触点指令
指令名称
指令格式 指令举例
梯形图
功能
常开触点装载
LD bit
LD I0.2
在母线位置输入
常闭触点装载
LDN bit
LDN I0.1
在母线位置输入
常开触点与逻辑
A bit
A M2.4
串联常开触点
常闭触点与逻辑
AN bit
AN M2.4
串联常闭触点
常开触点或逻辑
O bit
O M2.6
并联常开触点
常闭触点或逻辑
ON bit
ON M2.6
并联常闭触点
5.2 PLC指令分类及位逻辑指令
 5.2.1 触点指令
 2.立即触点指令
不依赖扫描周期,立即刷新。只有I和Q
可以使用该指令。bit只有输入类型可用。
 当物理输入点状
指令格式
指令举例
功能
态为1时,常开
LDI bit
LDI I0.2
在母线位置输入
触点立即闭合;
当物理触点状态 LDNI bit LDNI I0.1 在母线位置输入
AI I2.4
串联常开触点
为 0 时 , 常 闭 触 AI bit
ANI bit
ANI I2.4
串联常闭触点
点立即闭合。
OI bit
OI I2.6
并联常开触点
ONI bit
ONI I2.6
并联常闭触点
说明:
 CPU执行LD(LDN)指令对栈而言,是将指令操作数的位装
入堆栈的栈顶;
 对应梯形图为在左侧母线或线路分支处初始装载一个常开
/常闭触点,可用与ALD、OLD指令配合使用分支回路的开
头。
 CPU执行A(AN),将操作数的数值“与”栈顶值运算结果
仍存入栈顶;
 在梯形图中表示串联单个常开/常闭触点。
 CPU执行O(ON ),将操作数的数值“或”栈顶值运算结果
仍存入栈顶
 触点代表CPU对储存器的读操作,常开触点和储存器的位
状态一致,常闭触点有和储存器的位状态相反。
5.2 PLC指令分类及位逻辑指令
 5.2.1 触点指令
 3.取反和跳变指令
指令名称
取反指令
正跳变指令
负跳变指令
指令格式
梯形图
功能
NOT
取反指令在梯形图中用来
改变能流“输入”的状态。
EU
以触点形式使用,检测脉
冲正跳变,利用跳变,让
能流接通一个周期。
ED
以触点形式使用,检测脉
冲负跳变,利用跳变,让
能流接通一个周期。
5.2 PLC指令分类及位逻辑指令
 5.2.2 线圈指令
指令名称
指令格式
指令示例
梯形图
功能
标准输出指令 = bit
= Q0.1
新值写入映像寄存器
立即输出指令 = I bit
= I Q1.0
新值立即执行
置位线圈指令 S bit, N
S Q0.0, 1
使输出线圈等接通
复位线圈指令 R bit, N
R Q0.0, 2
断开或清除
立即置位指令 SI bit, N
SI Q0.0, 1
立即接通输出线圈
立即复位指令 RI bit, N
RI Q0.2, 1
立即断开或清除
说明:
 CPU执行“=”,把栈顶值复制到由操作数地址指定的锁存器位,堆
栈各级栈值不变;
 对应梯形图则为线圈驱动,对同一元件只能用一次。“=”可以并
联使用,但不能串联。
 CPU执行O(ON ),将操作数的数值“或”栈顶值运算结果仍存入栈
顶。
 在语句表(STL)中,当栈顶值为1时,才执行置位指令S bit,N;
或复位指令R bit, N,把从指令操作数(bit)指定的地址开始N
个点都被置位且保持,置位后即使栈顶为0,仍保持;同理,执行
复位指令,R bit, N,把从指令操作数(bit)指定的地址开始N
个点都被复位且保持,复位后即使栈顶为0,仍保持。
 对同一元件(同一寄存器的位)可以多次使用S/R指令(与“=”指令
不同)。
 由于是扫描工作方式,当置位、复位指令同时有效时,写在后面
的指令具有优先权。
说明:
 立即指令
 立即类指令是指执行指令时不受S7-200循环扫描工作方式
的影响,而对实际的I/O点立即进行读写操作。分为立即
读指令和立即输出指令两大类。
 立即读指令用于输入I接点,立即读指令读取实际输入点
的状态时,并不更新该输入点对应的输入映像寄存器的值。
如:当实际输入点(位)是1时,其对应的立即触点立即
接通;当实际输入点(位)是0时,其对应的立即触点立
即断开。
 立即输出指令用于输出Q线圈,执行指令时,立即将新值
写入实际输出点和对应的输出映像寄存器。
说明:
 立即I/O指令—立即置位和复位指令
须指出:立即I/O指令是直接
访问物理输入输出点的,比一
般指令访问输入输出映象寄存
器占用CPU时间要长,因而不
能盲目地使用立即指令,否
则,会加长扫描周期时间,反
而对系统造成不利影响。
5.2 PLC指令分类及位逻辑指令
 5.2.3 RS触发器指令
置位优先型RS触发器
复位优先型RS触发器
参数
数据类型
(位地址)需要置位、
复位的位
S允许置位输入
BOOL
R允许置位输入
OUT的状态
置
位
优
先
触
发
器
指
令
S1
R
输出/位
0
0
保持前一状态
0
1
0
1
0
1
1
1
1
复
位
优
先
触
发
器
指
令
S
R1
输出/位
0
0
保持前一状态
0
1
0
1
0
1
1
1
0
5.2 PLC指令分类及位逻辑指令
 5.2.3 RS触发器指令
5.2 PLC指令分类及位逻辑指令
 5.2.4 逻辑堆栈指令
 S7-200PLC使用一个9层的堆栈来处理所有的逻辑操作。堆
栈是一组存放和取出数据的暂存单元,特点是“先进后出,
后进先出”。每进行一次入栈操作,新值放入栈顶,栈底
值丢失,而每进行一次出栈操作,栈顶值弹出,栈底值补
进随机数。逻辑堆栈指令一般用来完成对触点的复杂连接。
 1. 栈装载与指令
 栈装载与指令(与块)将堆栈第一层和第二层中的数值进
行逻辑AND(与)操作,并将结果载入堆栈顶部。执行ALD
后,堆栈深度减1。在梯形图中,用于将并联电路块串联
连接。
5.2 PLC指令分类及位逻辑指令
 2. 栈装载与指令
 栈装载或指令(或块)将堆栈第一层和第二层中的数值进
行逻辑OR(或)操作,并将结果载入堆栈顶部。执行OLD后,
堆栈深度减1。在梯形图中,用于将串联电路块并联连接。
 3. 逻辑入栈指令LPS
 其语句表形式为:LPS,不带操作数。执行该指令将复制栈
顶的值并将这个值推入栈顶,原堆栈中各级栈值依次下压
一级,栈底值将丢失。
 4. 逻辑读栈指令LRD
 其语句表形式为:LRD,不带操作数。执行该指令将把第二
级栈的值复制到栈顶,堆栈没有进行入栈、出栈操作,只
是栈顶的值被第二级栈的值覆盖。
5.2 PLC指令分类及位逻辑指令
 5.2.4 逻辑堆栈指令
 5. 逻辑出栈指令LPP
 其语句表形式为:LPP,不带操作数。执行该指令将把栈
顶的值弹出,原堆栈各级栈值依次上弹一级,堆栈第二
级的值成为新的栈顶值,而栈底值变为不确定数值。
 6. 装入堆栈指令LDS
 其语句表形式为:LDS n,操作数n表示第n级栈,范围
是0~8。执行该指令将复制堆栈中的第n级的栈值到栈顶,
原堆栈各级栈值依次下压一级,栈底值将丢失。
 LPS、LRD、LPP和LDS逻辑指令的堆栈操作过程如图所示:
5.2 PLC指令分类及位逻辑指令
逻辑堆栈指令
5.2 PLC指令分类及位逻辑指令
 5.2.4 逻辑堆栈指令
 7. 逻辑堆栈指令应用举例
堆栈操作指令说明:
 LD指令是从梯形图的左母线起,如果要生产一条分支母线,
则需要利用语句表的栈操作指令描述,推栈和弹栈指令必
须成对使用,最后依次读栈操作用弹栈指令,每一条LPS
指令必须有一条对应的LPP指令,中间的部分都用LRD指令,
处理最后一条支路时必须使用LPP指令。
 梯形图是使用最多的编程语言,它非常直观易懂,对每个
人都很适用,特别熟练的设计人员在某些情况下会直接用
语句表编程,虽然编写的程序比较简短,但是不直观。
 用于保存逻辑运算结果及断点的地址,有9层堆栈,堆栈
操作指令用于处理线路的分支点,在编制控制程序时,经
常遇到多分支电路同时受一个或一组触点控制,用堆栈操
作,则可方便的将梯形图转换成STL。
编程中应注意的几个问题
1. 程序应按自上而下,从左至右的顺序编写;
2. 同一操作数的输出线圈在一个程序中不能使用两次,不同
操作数的输出线圈可以并联输出;
3. 线圈不能直接同做母线相连,
若需要可用SM0.0来连接;
4. 串联多的支路尽量放在上部;
5. 并联多的支路应靠近左母线;
5.3 定时器、计数器和比较指令
 5.3.1 定时器指令
 1、组成:一个16位当前值寄存器PT,用以存放当前值
(16位);一个16位预置值寄存器,用以存放时间的设定
值(最大32767);一个状态位,用以反映触点的状态。
 工作原理:使能输入有效后,当当前值PT对PLC内部时基
脉冲增1计数,当计数值大于或等于定时器的预置值后,
状态位置1,其中最小计时单位为基脉冲宽度,从定时器
输入有效,到状态位输出有效经过的时间为定时时间。
5.3 定时器、计数器和比较指令
定时器及定时器指令
定时器号码
(0~255)
设定值:
1~32767
类型
TON:接通延时定时器
TOF:断开延时定时器
TONR:有记忆接通延时定时器
定时器分辨率(时基)有三种:1ms、
10ms、100ms。定时器的分辨率由定时器
号决定
定时器的实际设定时间T=设定值PT×分辨率
5.3 定时器、计数器和比较指令
 2.通电延时定时器 TON
使能输入
其工作波形图如下:
设定值
I0.1
Q0.1
TS=100*0.1=10S
设定值
计时值
TS
5.3 定时器、计数器和比较指令
 通电延时定时器(TON)指令工作原理
 当I0.1接通时即使能端(IN)输入有效时,驱动T38开始
计时,当前值从0开始递增,计时到设定值PT时,T38状态
位置1,其常开触点T38接通,驱动Q0.1输出,其后当前值
仍增加,但不影响状态位。当前值的最大值为32767。当
I0.1分断时,使能端无效时,T38复位,当前值清0,状态
位也清0,即回复原始状态。若I0.1接通时间未到设定值
就断开,T38则立即复位,Q0.1不会有输出。
5.3 定时器、计数器和比较指令
 3.断电延时定时器TOF
使能输入
设定值
其工作波形图如下:
TS
I0.1
TS=120*0.1=12S
Q0.1
设定值
计时值
5.3 定时器、计数器和比较指令
 断电延时型定时器用来在输入断开,延时一段时间后,才
断开输出。使能端(IN)输入有效时,定时器输出状态位
立即置1,当前值复位为0。使能端(IN)断开时,定时器
开始计时,当前值从0递增,当前值达到预置值时,定时
器状态位复位为0,并停止计时,当前值保持。
 如果输入断开的时间,小于预定时间,定时器仍保持接通。
IN再接通时,定时器当前值仍设为0。
5.3 定时器、计数器和比较指令
 4.记忆型通电延时定时器 TONR
 使能端(IN)输入有效时(接通),定时器开始计时,当
前值递增,当前值大于或等于预置值(PT)时,输出状态
位置1。使能端输入无效(断开)时,当前值保持(记
忆),使能端(IN)再次接通有效时,在原记忆值的基础
上递增计时。
 注意:TONR记忆型通电延时型定时器采用线圈复位指令R
进行复位操作,当复位线圈有效时,定时器当前位清零,
输出状态位置0。
使能输入
设定值
5.3 定时器、计数器和比较指令
其工作波形图如下:
输入端
TS= 120*10ms
TS
Q0.1
Q0.1
M0.1
最大值 32767
设定值 120
当前值
 程序分析如图所示。如T4,当输入IN为1时,定时器计时;当IN为0时,
其当前值保持并不复位;下次IN再为1时,T4当前值从原保持值开始
往上加,将当前值与设定值PT比较,当前值大于等于设定值时,T4状
态位置1,驱动Q0.1有输出,以后即使IN再为0,也不会使T4复位,要
使T4复位,必须使用复位指令。
5.3 定时器、计数器和比较指令
 1、以上介绍的3种定时器具有不同的功能。接通延时定时
器(TON)用于单一间隔的定时;有记忆接通延时定时器
(TONR)用于累计时间间隔的定时;断开延时定时器(TOF)
用于故障事件发生后的时间延时。
 2、TOF和TON共享同一组定时器,不能重复使用。即不能把
一个定时器同时用作TOF和TON。例如,不能既有TON/T32,
又有TOF/T32。
 定时器的指令操作数有三个,即编号、预设值和使能输入。
编号为Txxx,0~255,其中TONR的编号是单独使用的。预
设值为整型数INT,它与分辨率的乘积即是定时时间。使能
输入端是BOOL型数据,I、Q、M、SM、T、C、S、L均可。
5.3 定时器、计数器和比较指令
 定时器的刷新方式(难点)
 ① 1ms分辩率定时器
 每隔1ms刷新一次,刷新定时器位和定时器当前值,在一个扫描周
期中要刷新多次,而不和扫描周期同步。
 ② 10ms分辩率定时器
 10ms的定时器由系统在每个扫描周期开始时自动刷新,在每次程
序处理阶段,其状态位和当前值不变。
 ③ 100ms分辨率定时器
 100ms定时器启动后,定时器对100ms时间间隔进行计时。只有在
定时器指令执行时,100ms定时器的当前值才被刷新。
 在PLC的应用中,经常使用具有自复位功能的定时器,即利用定时
器自己的动断触点去控制自己的线圈,这时必须考虑定时器的刷
新方式,否则会出现错误。
5.3 定时器、计数器和比较指令
 5.3.2 计数器指令
 定时器是对PLC内部的时钟脉冲进行计数,而计数器是对
外部的或由程序产生的计数脉冲上升沿进行计数 。
 组成:由一个16位的预置值寄存器、一个16位的当前值寄
存器(16位有符号整数)和一位状态位组成。
 工作原理:计数器利用当前值寄存器累计输入脉冲上升沿
个数,当计数器当前值大于等于预置值时,状态位置1。
C0~C255。
 每个计数器只有一个16位的当前值寄存器地址。在一个程
序中,同一计数器号不要重复使用,更不可分配给几个不
同类型的计数器。
5.3 定时器、计数器和比较指令
 1. 增计数器
计脉冲数
复位
设定值:
0~32767
I0.1
I0.2
C20当 当 当
C20当 当 当 当
5.3 定时器、计数器和比较指令
 分析:
 当R=0时,计数脉冲有效; 当CU端有上升沿输入时,计数
器当前值加1。当计数器当前值大于或等于设定值(PV)
时,该计数器的状态位C-bit置1,即其常开触点闭合。计
数器仍计数,但不影响计数器的状态位。直至计数达到最
大值(32767)。当R=1时,计数器复位,即当前值清零,
状态位C-bit也清零。加计数器计数范围:0~32767。
5.3 定时器、计数器和比较指令
 2. 增/减计数器
 当R=0时,计数脉冲有效;当CU端(CD端)有上升沿输
入时,计数器当前值加1(减1)。当计数器当前值大于或
等于设定值时,C-bit置1,即其常开触点闭合。当R=1时,
计数器复位,即当前值清零,C-bit也清零。加减计数器计
数范围:–32768~32767。
增计数
减计数
复位
当前值
5.3 定时器、计数器和比较指令
 3. 减计数器
 分析:当复位LD有效时,LD=1,计数器把设定值(PV)
装入当前值存储器,计数器状态位复位(置0)。当LD=0,
即计数脉冲有效时,开始计数,CD端每来一个输入脉冲
上升沿,减计数的当前值从设定值开始递减计数,当前值
等于0时,计数器状态位置位(置1),停止计数。
计脉冲数
复位,装设定值
设定值
5.3 定时器、计数器和比较指令
 计数器扩展
 S7-200系列PLC计数器最大的计数范围是32767,若须更大
的计数范围,则须进行扩展。如图所示计数器扩展电路。
图中是两个计数器的组合电路,C1形成了一个设定值为100
次自复位计数器。
 计数器C1对I0.1的接通次数进行计数,I0.1的触点每闭合
100次C1自复位重新开始计数。同时,连接到计数器C2端C1
常开触点闭合,使C2计数一次,当C2计数到2000次时,
I0.1共接通100×2000次=200000次,C2的常开触点闭合,
线圈Q0.0通电。该电路的计数值为两个计数器设定值的乘
积,C总=C1×C2。
5.3 定时器、计数器和比较指令
 计数器的扩展
C总=C1×C2=100×2000=200000
举例:闪烁电路
 闪烁效果为一个灯泡的发亮与熄灭,并且设定闪烁间隔为
1秒。
 采用I0.0外接灯泡电源开关SB1,Q0.0外接驱动灯泡发光
的继电器KM。接通延时定时器采用时基为100ms的T37和
T38。
 此电路的梯形图及语句表如图所示:
闪烁电路分析:
 接通电源开关SB1,常开触点I0.0闭合,由于T37和T38均为
接通延时定时器,当启动信号IN为0时,定时器的状态也为0,
所以一开始常闭触点T38也闭合。紧接着IN为1时定时器T37
就开始计时,当计时到1秒时,T37由0变为1并保持不变,于
是常开触点T37闭合,线圈Q0.0得电从而使灯泡发亮;
 同时,定时器T38也开始计时,当计时到1秒时,T38由0变为
1并保持不变,于是常闭触点T38断开,使得定时器T37复位,
状态由1变为0,常开触点T37断开,灯泡熄灭;
 同时也使得定时器T38复位,状态由1变为0,常闭触点T38闭
合,定时器T37由开始计时…如此反复,从而达到灯泡闪烁
的目的。
定时器的扩展
 S7-200的定时器的最长定时时间为3276.7S,如果需要更长的
定时时间,可使用图所示的电路。图中最上面一行电路是一
个脉冲信号发生器,脉冲周期等于T37的设定值(60S)。
I0.0为OFF时,100ms定时器T37和计数器C4处于复位状态,它
们不能工作。
 T37产生的脉冲送给C4计数器,
记满60个数(即1h)后,C4当
前值等于设定值60,它的常开
触点闭合。设T37和C4的设定值
分别为KT 和KC ,对于100ms定
时器总的定时时间为:
 T=0.1KTKC(s)。
5.3 定时器、计数器和比较指令
 5.3.1 比较操作指令
 比较操作指令按操作数类型可分为字节比较、字比较、
双字比较和实数比较。
 比较指令的梯形图由比较数1(IN1)、比较数2(IN2)、
比较关系符和比较触点构成。
 其语句表形式由比较操作码(字节比较LDB、字比较LDW、
双字比较LDD和实数比较LDR)、比较关系符、比较数1
(IN1)和比较数2(IN2)构成。
 比较符有:等于(= =)、大于(>)、小于(<)、不等
(<>)、大于等于(>=)、小于等于(<=),相应的梯
形图和语句表格式见下图。
5.3 定时器、计数器和比较指令
比较操作指令(比较符为“等于”时)
输入/输出
数据类型
BYTE
IB、QB、MB、SMB、VB、SB、LB、AC、常数、*VD、
*AC、*LD
INT
IW、QW、MW、SMW、T、C、VW、LW、AIW、AC、常数、
*VD、*AC、*LD
DINT
ID、QD、MD、SMD、VD、LD、HSC、AC、常数、*VD、
*AC、*LD
REAL
ID、QD、MD、SMD、VD、LD、AC、常数、*VD、*AC、
*LD
BOOL
I、Q、V、M、SM、S、T、C、L
IN1/IN2
OUT
操作数
比较指令举例
 1、调整模拟调节电位器0,改变SMB28字节数值,当SMB
数值小于50时Q0.0输出,其状态指示灯打开,当SMB数值
大于或等于150是,Q0.1输出,其状态指示灯打开。
 教案67例题.mwp
 2、某轧钢厂的成品库可以放钢圈1000个,因为不断有钢
卷进库、出库,需要对库存的钢卷数量进行统计,当库
存低于下限100时,HL1亮,当库存高于900时,HL2亮,
当达到库存上限1000时,报警器HA响停止进库。设I0.0
为进库检测,I0.1为出库检测,I0.2为复位信号,Q0.0
控制HL1,Q0.1控制HL2,Q0.3控制HA。
 教案67例题2.mwp
5.4 运算和数学指令

算术运算指令

1.加减乘除指令

2.递增递减指令

逻辑运算指令

1.字节逻辑运算指令

2.字逻辑运算指令

3.双字逻辑运算指令
5.4 运算和数学指令
 运算功能是现代PLC与传统PLC的最大区别之一,随着计
算机技术的发展,PLC具有了越来越强的运算功能,从而
使其应用领域更加广泛了。
 本节里主要介绍一下指令:加法指令(ADD)、减法指令
(SUBTRACT)、乘法指令、除法指令、自增/自减指令、
数学函数指令、逻辑运算指令。
 在各个运算指令中,除了参与计算的输入端IN1、IN2以
外,还包括使能端EN,允许输出端ENO。ENO是LAD和FBD
中指令盒的布尔输出,可以使用串联方式连接功能块。
如果输入端EN有效,且功能框执行无误,将把使能位传
输到下一个功能框的使能端。
返回本章首页
5.4 运算和数学指令
 5.4.1 算数运算指令
 1、加减乘除指令
 (1)加法指令(ADD) 是对有符号数进行相加操作。
 加法指令把两个输入端(IN1、IN2)指定的数相加,结
果送到输出端(OUT)指定的存储单元中,包括整数加法、
双整数加法和实数加法。它们对应的操作数数据类型分
别是有符号整数(INT)、有符号双整数(DINT)和实数
(REAL)。指令格式分别为:
+I IN1 ,OUT
+D IN1 ,OUT
STL
+R IN1 ,OUT
返回本节
5.4 运算和数学指令
 说明:
 操作数IN2与OUT共用一个地址单元。
 当IN1、IN2和OUT操作数的地址不同时,在STL指令中,
首先用数据传送指令将IN1中的数值送入OUT,然后再执
行加、减运算即:例:求5000加400的和,5000在数据存
储器VW200中,结果放入AC0。
5.4 运算和数学指令
 (2)减法指令(Subtract)
 减法指令(Subtract)是对有符号数进行相减操作。减法
指令把两个输入端(IN1、IN2)指定的数相减结果送到输
出端(OUT)指定的存储单元中去。操作数IN1与OUT共用
一个地址单元。
 它可以分为整数、双整数、实数减法指令。它们各自对应
的 操 作 数 分 别 是 有 符 号 整 数 ( INT ) 、 有 符 号 双 整 数
(DINT)和实数(REAL)。如图所示。
-I INT2 ,OUT
-D INT2 ,OUT
-R INT2 ,OUT
STL
5.4 运算和数学指令
 (3)乘法指令
 ① 一般乘法指令(Multiply)
 一般乘法指令是对有符号数进行相乘运算,它包括整数乘
法、双整数乘法和实数乘法。它们各自对应的操作数分别
是有符号整数(INT)、有符号双整数(DINT)和实数
(REAL)。
 ② 完全整数乘法(Multiply Integer to Double Integer)
 完全整数乘法是将两个单字长(16位)的符号整数IN1和
IN2相乘,产生一个32位双整数乘积,并送到输出端(OUT)
指定的存储单元中去。
 指令名称分别为:MUL – I和 MUL。
5.4 运算和数学指令
 (3)乘法指令
 ① 一般乘法指令(Multiply)
 ② 完全整数乘法(Multiply Integer to Double Integer)
 一般乘法指令产生16位结果OUT,如
果结果大于32767,则产生溢出;完
全乘法指令产生32位双整数结果,超
过后产生溢出。
5.4 运算和数学指令
 (4)除法指令
 ① 一般除法指令(Divide)
 一般除法指令是对有符号数进行相除操作。一般除法指令
将两个输入端(IN1、IN2)指定的数相除,结果送到输
出端(OUT)指定的存储单元中去。
 ② 完全除法指令(Divide Integer to Double Integer)
 完全除法指令将两个16位的符号整数相除,产生一个32位
的结果,其中,低16位为商,高16位为余数。完全除法指
令输入数据类型为INT,输出数据类型为DINT。指令格式
为:/I IN2,OUT(整数除法);DIV IN2,OUT(完全整
数除法); /D(R) IN2,OUT(双整数/实数除法);
5.4 运算和数学指令
 2.算数运算指令举例
40
+
AC1
40
VW200
=
AC0
*
AC1
4000
60
20
AC0
=
VW100
/
40
VW10
100
800
VW100
=
100
VW200
5.4 运算和数学指令
 3. 自增/自减指令
 (1)自增指令(Increment)
 自增指令包括字节自增、字自增和双字自增指令。字节自
增指令输入输出均为字节,字自增指令输入输出均为INT,
双字自增指令输入输出均为DINT。
 (2)自减指令(Decrement)
 自减指令包括字节自减、字自减和双字自减指令。字节自
减指令输入输出均为字节,字自减指令输入输出均为INT,
双字自减指令输入输出均为DINT。
 输入操作数为:IB/W/D、QB/W/D、 MB/W/D、常数等
 输出操作数为:IB/W/D、QB/W/D、MB/W/D等;
5.4 运算和数学指令
 4. 自增/自减指令举例
自增/自减指令有效的操作数
输入/输出
数据类型
操作数
IN
BYTE/INT/DINT
QB、IB、VB、MB、SB、LB、AC、*VD、
常数、IW、QW、SMW、T、C、LW等等
OUT
BYTE/INT/DINT
QB、IB、VB、MB、SB、LB、AC、*VD、
常数、IW、QW、SMW、T、C、LW等等
5.4 运算和数学指令
 5. 数学函数指令
 1.平方根(Square Root)指令
 实数的开方指令(SQRT),把输入端(IN)的32位实数开方,得到32
位实数结果,并把结果存放到输出端(OUT)指定的存储单元中去。
 2.自然对数(Natural Logarithm)指令
 自然对数指令(LN),将输入端(IN)的32位实数取自然对数,结果
存放到输出端(OUT)指定的存储单元中去。
 求常数对数(lgx,即以10为底的对数)时,只要将其自然对数(lnx)
除以2.302585即可。
 3.自然指数(Natural Exponential)指令
 自然指数指令(EXP),将输入端(IN)的32位实数取以e为底的指数,
结果存放到输出端(OUT)指定的存储单元中去。
 4.正弦(sine)、余弦(cosine)和正切(tan)指令
5.4 运算和数学指令
 数学函数梯形图指令
 求45º正弦值。
 分析:先将45º转换为弧度:
(3.14159/180)*45,再求
正弦值。
5.4 运算和数学指令
 5.4.2 逻辑运算指令
 1.逻辑“与”运算指令(Logic And)
 2.逻辑“或”运算指令(Logic Or)
 3.逻辑“异或”运算指令(Logic Exclusive Or)
 4.取反指令(Logic Invert)
 逻辑运算按位进行(图中 处可为B、W、DW)。
5.5 数据处理指令
 5.5.1 传送类指令
 1.单一传送指令
 此指令可用来进行一个数据的传送,数据类型可以是字节、
字、双字和实数。这类指令影响允许输出ENO正常工作的
出错条件为SM4.3(运行时间),0006(间接寻址)。
指令名称
MOVB
MOVW
MOVD
MOVR
MOVB IN1,OUT
MOVW IN1,OUT
MOVD IN1,OUT
MOVR IN1,OUT
BIR
BIW
梯形图
STL格式
BIR IN1,OUT
BIW IN1,OUT
5.5 数据处理指令
 5.5.1 传送类指令
 2.块传送指令
 此指令可用来进行一次多个数据的传送,数据类型可以是
字节块、字块、双字块。这类指令影响允许输出ENO正常
工作的出错条件为SM4.3(运行时间),0006(间接寻
址),0091(数超界)。
指令名称
MOVB
MOVW
MOVD
BMB IN1,OUT,N
BMW IN1,OUT,N
BMD IN1,OUT,N
梯形图
STL格式
举例
 1、将变量存储器VW10中内容送到VW100中
 2、将变量存储器VB20开始的4个字节(VB20- VB23)中的
数据,移至VB100开始的4个字节中(VB100-VB103)。
5.5 数据处理指令
 5.5.2 移位指令
 1.左移和右移指令
 (1)指令特点 左移和右移指令的功能是将输入数据IN
左移或右移N位后,把结果送到OUT。特点如下:
 1)被移位的数据是无符号的、字节型数据。
 2)移位时,存放被移位数据的编程元件的移出端与特殊
存储器SM1.1连接,移出位进入SM1.1,另一端自动补0。
 3)移位次数N与移位数据长度有关。
 4)移位指令影响的特殊存储器为:SM1.0(0);SM(1.1)
溢出。
 5)影响允许输出ENO正常工作的出错条件为SM4.3,0006。
5.5 数据处理指令
 5.5.2 移位指令
 1.左移和右移指令
指令名称
SLB
SLW
SLD
STL格式
SLB OUT,N
SLW OUT,N
SLD OUT,N
指令名称
SRB
SRW
SRD
SRB OUT,N
SRW OUT,N
SRD OUT,N
梯形图
梯形图
STL格式
5.5 数据处理指令
 5.5.2 移位指令
 2.循环左移和右移指令
 该指令特点如下:
 1)被移位的数据是无符号的、移位次数N为字节型数据。
 2)在移位时,存放被移位数据的编程元件的移出端既与
另一端连接,又与特殊存储器SM1.1连接,移出位进入
SM1.1,另一端自动补0。
 3)移位次数N与移位数据长度有关。
 4)移位指令影响的特殊存储器为:SM1.0(0);SM(1.1)
溢出。
 5)影响允许输出ENO正常工作的出错条件为SM4.3,0006。
5.5 数据处理指令
 5.5.2 移位指令
 循环左移和右移指令格式
指令名称
ROLB
ROLW
ROLD
STL格式
ROLB OUT,N
ROLW OUT,N
ROLD OUT,N
指令名称
RORB
RORW
RORD
RORB OUT,N
RORW OUT,N
RORD OUT,N
梯形图
梯形图
STL格式
5.5 数据处理指令
 5.5.2 移位指令
 3.移位寄存器指令
SHRB DATA,S-BIT,N
 该指令特点如下:
 1)移位寄存器无数据类型区分,长度N(≤64)
 2)移位寄存器的组成:最低位为S-BIT;最高位的计算方
法为MSB=(|N|-1+(S-BIT的位号))/8;最高位的字
节号:MSB的商+S-BIT的字节号;最高位的位号:MSB的余
数。
 3)N>0时,为正向移位;N<0时,为反向移位; 。
 4)移位输出端与SM1.1(溢出)连接。当移位操作结果为
0时,SM1.0自动置位。溢出由每次溢出位的状态决定。
5.5 数据处理指令
 强调:
 移位次数N≥数据类型(B、W、D)时的移位位数的处理
 如果操作数是字节,当移位次数N≥8时,则在执行循环移位前,
先对N进行模8操作(N除以8后取余数),其结果0-7为实际移动位
数。
 如果操作数是字,当移位次数N≥16时,则在执行循环移位前,先
对N进行模16操作(N除以16后取余数),其结果0-15为实际移动
位数。
 如果操作数是双字,当移位次数N≥32时,则在执行循环移位前,
先对N进行模32操作(N除以32后取余数),其结果0-31为实际移
动位数。
 说明:在STL指令中,若IN和OUT指定的存储器不同,则须首先使
用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如:
 MOVB
IN,OUT
 SLB
OUT,N
举例
 用I0.0控制接在Q0.0~Q0.7上的8个彩灯循环移位,从
左到右以0.5s的速度依次点亮,保持任意时刻只有一个
指示灯亮,到达最右端后,再从左到右依次点亮。
 分析:8个彩灯循环移位控制,可以用字节的循环移位
指令。根据控制要求,首先应置彩灯的初始状态为
QB0=1,即左边第一盏灯亮;接着灯从左到右以0.5s的
速度依次点亮,即要求字节QB0中的“1”用循环左移位
指令每0.5s移动一位,因此须在ROL-B指令的EN端接一
个0.5s的移位脉冲(可用定时器指令实现)。
 循环左移指令成.mwp
梯形图程序和语句表程序
梯形图
语句表
注释
5.5 数据处理指令
 5.5.3 字节交换指令
 字节交换指令(Swap Bytes)
 字节交换(Swap Bytes)指令,把输入(IN)指定字的高
字节内容与低字节内容互相交换。交换结果仍存放在输入
(IN)指定的地址中。交换字节指令如图所示。操作数数
据类型为无符号整数型(WORD)。
 指令仅对字型数据进行处理,指令的执行不影响特殊存储
器位。
 影响允许输出ENO正常工作的出错条件为SM4.3(运行时
间),0006(间接寻址)
SWAP
VW10
5.5 数据处理指令
 5.5.4 字填充指令
 字填充(FILL)指令用输入IN存储器中的字值写入输出
OUT开始N个连续的字存储单元中。N的数据范围:1~255。
其指令格式为:FILL IN,OUT,N
 (1)IN为字型数据输入端,操作数为:VW, IW, QW, MW,
SW, SMW, LW, T, C, AIW, AC, 常量, *VD, *LD, *AC;
数据类型为:整数。
 (2)N的操作数为:VB, IB, QB, MB, SB, SMB, LB, AC,
常量, *VD, *LD, *AC; 数据类型:字节。
 (3)OUT的操作数为:VW, IW, QW, MW, SW, SMW, LW, T,
C, AQW, *VD, *LD, *AC;数据类型:整数。
5.5 数据处理指令
 影响允许输出ENO正常工作的出错条件为SM4.3(运行时
间),0006(间接寻址),0091(操作数出界)。
 举例:将0填入VW0~VW18(10个字),程序及运行结果从
图中可以看出程序运行结果将从VW0开始的10个字(20个
字节)的存储单元清零。
梯形图格式
5.5 数据处理指令
 5.5.5 表功能指令
 数据表是用来存放字型数据的表格,如图所示。表格的第
一个字地址即首地址,为表地址,首地址中的数值是表格
的最大长度(TL),即最大填表数。表格的第二个字地址
中的数值是表的实际长度(EC),指定表格中的实际填表
数。每次向表格中增加新数据后,EC加1。
 从第三个字地址开始,存放数
据 ( 字 ) 。 表 格 最多 可 存 放
100个数据(字),不包括指
定最大填表数(TL)和实际填
表数(EC)的参数。
VW200
0006
TL(最大填表数)
VW202
0002
EC(实际填表数)
VW204
1234
D0数据0
VW206
5678
D1数据1
VW208
× × × ×
VW210
× × × ×
VW212
× × × ×
VW214
× × × ×
5.5 数据处理指令
 方法:
 要建立表格,首先须确定表的最大填表数
 确定表格的最大填表数后,可用表功能指令在表中存取字
型数据。表功能指令包括填表指令,表取数指令,表查找
指令,字填充指令。所有的表格读取和表格写入指令必须
用边缘触发指令激活。
5.5 数据处理指令
 1. 填表指令
 表 填 表 ( ATT ) 指 令 : 向 表 格 ( TBL ) 中 增 加 一 个 字
(DATA)。指令格式:ATT DATA,TBL。
 说明:
 (1) DATA为数据输入端,其操作数为:VW, IW, QW, MW,
SW, SMW, LW, T, C, AIW, AC, 常量, *VD, *LD, *AC;
数据类型为:整数。
 (2)TBL为表格的首地址,其操作数为:VW, IW, QW, MW,
SW, SMW, LW, T, C, *VD, , *LD *AC;数据类型为:字。
 (3)指令执行后,新填入的数据放在表格中最后一个数
据的后面,EC的值自动加1。
填表指令应用举例。
 例:将VW100中的数据1111,填入首地址是VW200的数据表
中。
5.5 数据处理指令
 2. 表取数指令
 从数据表中取数有先进先出(FIFO)和后进先出(LIFO)
两种。执行表取数指令后,实际填表数EC值自动减1。
 先进先出指令(FIFO):移出表格(TBL)中的第一个数
(数据0),并将该数值移至DATA指定存储单元,表格中
的其他数据依次向上移动一个位置。
 后进先出指令(LIFO):将表格(TBL)中的最后一个数
据移至输出端DATA指定的存储单元,表格中的其他数据位
置不变。
5.5 数据处理指令
 2. 表取数指令格式
表取数指令应用举例
 从图的数据表中,用FIFO,LIFO指令取数,将取出的数值
分别放入VW300,VW400中,
梯形图及STL程序
运行结果
5.5 数据处理指令
 3. 表查找指令
 表格查找(TBL-FIND)指令在表格(TBL)中搜索符合条
件的数据在表中的位置(用数据编号表示,编号范围为
0~99)。TBL操作数:VW, IW, QW, MW, SW, SMW, LW,
T, C, *VD, *LD, *AC。数据类型:字。TBL:为表格的
实际填表数对应的地址(第二个字地址),即高于对应
的“增加至表格”、“后入先出”或“先入先出”指令
TBL操作数的一个字地址(两个字节)。
梯形图
STL
5.5 数据处理指令
 梯形图中各输入端的介绍
 PTN:是用来描述查表条件时进行比较的数据。PTN操作数:
VW, IW, QW, MW, SW, SMW, AIW, LW, T, C, AC, 常量,
*VD, *LD, *AC。数据类型:整数。
 INDX:搜索指针,即从INDX所指的数据编号开始查找,并
将搜索到的符合条件的数据的编号放入INDX所指定的存储
器。INDX操作数:VW, IW, QW, MW, SW, SMW, LW, T, C,
AC, *VD, *LD, *AC。数据类型:字。
 CMD:比较运算符,其操作数为常量1~4,分别代表 =、
<>、<, >。数据类型:字节 。
5.5 数据处理指令
 功能说明
 表格查找”指令搜索表格时,从INDX指定的数据编号开始,
寻找与数据PTN的关系满足CMD比较条件的数据。
 参数如果找到符合条件的数据,则INDX的值为该数据的编
号。要查找下一个符合条件的数据,再次使用“表格查找”
指令之前须将INDX加1。
 如果没有找到符合条件的数据,INDX的数值等于实际填表
数EC。
 一个表格最多可有100数据,数据编号范围:0~99。将
INDX的值设为0,则从表格的顶端开始搜索。
查表指令应用举例
 从EC地址为VW202的表中查找等于16#2222的数。
VW200
0006
EC
VW202
1111
D0
VW204
2222
D1
VW206
3333
D2
VW208
4444
D3
VW210
5555
D4
VW212
6666
D5
VW214
2222
D6
 为了从表格的顶端开始搜索,AC1的初始值=0,查表指令执行后AC1=1,找到
符合条件的数据1。继续向下查找,先将AC1加1,再激活表查找指令,从表中
符合条件的数据1的下一个数据开始查找,第二次执行查表指令后,AC1=4,
找到符合条件的数据4。继续向下查找,将AC1再加1,再激活表查找指令,从
表中符合条件的数据4的下一个数据开始查找,第三次执行表查找指令后,没
有找到符合条件的数据,AC1=6(实际填表数)。
5.6 程序控制指令与子程序指令
 5.6.1 程序控制指令
 1. 结束指令
 (1)END:条件结束指令,执行条件成立(左侧逻辑值为1)时结束
主程序,返回主程序的第一条指令执行。在梯形图中该指令不连在左
侧母线。END指令只能用于主程序,不能在子程序和中断程序中使用。
END指令无操作数。
 (2)MEND:无条件结束指令,结束主程序,返回主程序的第一条指
令执行。在梯形图中无条件结束指令直连接左侧母线。用户必须以无
条件结束指令,结束主程序。条件结束指令,用在无条件结束指令前
结束主程序。在编程结束时一定要写上该指令,否则出错;在调试程
序时,在程序的适当位置插入MEND指令可以实现程序的分段调试。必
须指出MicroWin32 STEP-7编程软件,在主程序的结尾自动生成无条
件结束指令(MEND)用户不得输入,否则编译出错。
5.6 程序控制指令与子程序指令
 2. 停止指令
 STOP:停止指令,执行条件成立,停止执行用户程序,令
CPU工作方式由RUN转到STOP。在中断程序中执行STOP指令,
该中断立即终止,并且忽略所有挂起的中断,继续扫描主
程序的剩余部分,在本次扫描的最后,将CPU由RUN切换到
STOP。指令格式如图所示。
5.6 程序控制指令与子程序指令
 END和STOP的区别
 如图当I0.0接通时,Q0.0有输出,
若I0.1接通,执行END指令,终止
用户程序,并返回主程序的起点,
这样,Q0.0仍保持接通,但下面的
程序不会执行。若I0.1断开,接通
I0.2,则Q0.1有输出,若将I0.3接
通,则执行STOP指令,立即终止程
序执行,Q0.0与Q0.1均复位,CPU
转为STOP方式。
5.6 程序控制指令与子程序指令
 3. 警戒时钟刷新指令WDR(又称看门狗定时器复位指令)
 警戒时钟的定时时间为300毫秒,每次扫描它都被自动复位
一次,正常工作时,如果扫描周期小于300毫秒,警戒时
钟不起作用。如果强烈的外部干扰使可编程控制器偏离正
常的程序执行路线, 警戒时钟不再被周期性的复位,定
时时间到, 可编程控制器将停止运行。若程序扫描的时
间超过300毫秒,为了防止在正常的情况下警戒时钟动作,
可将警戒时钟刷新指令(WDR)插入到程序中适当的地方,
使警戒时钟复位。这样,可以增加一次扫描时间。指令格
式如图所示。
5.6 程序控制指令与子程序指令
 工作原理:
 当使能输入有效时,警戒时钟复位。可以增加一次扫描时间。若
使能输入无效,警戒时钟定时时间到,程序将终止当前指令的执
行,重新启动,返回到第一条指令重新执行。注意:如果使用循
环指令阻止扫描完成或严重延迟扫描完成,下列程序只有在扫描
循环完成后才能执行:通信(自由口方式除外),I/O更新(立即I/O
除外),强制更新,SM更新,运行时间诊断,中断程序中的STOP
指令。10毫秒和100毫秒定时器对于超过25秒的扫描不能正确地累
计时间。
 注意:如果预计扫描时间将超过300毫秒,或者预计会发生大量中
断活动,可能阻止返回主程序扫描超过300毫秒,应使用WDR指令,
重新触发看门狗计时器。
5.6 程序控制指令与子程序指令
 4. 跳转及标号指令
 跳转及标号指令在程序执行时,由于条件的不同,可能会
产生一些分支,这时就需要用跳转操作来实现,跳转操作
由跳转及标号指令两部分构成。
 跳转指令的梯形图由跳转条件、标识符“JMP”和跳转标号
n构成,语句表形式由操作码“JMP”和跳转标号n构成;标
号指令的梯形图由标识符“LBL”和标号n构成,语句表形
式由操作码“LBL”和标号n构成。如图所示。
JMP n
STL指令
梯形图
LBL n
5.6 程序控制指令与子程序指令
 指令功能:跳转指令(JMP)可使程序流程转到同一程序中的
具体标号(n)处,当这种跳转执行时,栈顶的值总是逻辑1。
标号指令(LBL)标记跳转目的地的位置 (n)。操作数n:常数
0到255,数据类型WORD。跳转和标号指令必须用在主程序子
程序或中断程序中不能从主程序跳到子程序或中断程序同样
不能从子程序或中断程序跳出。
 图是跳转及标号指令的应用举例。当I0.0=1时,JMP跳转条
件成立,程序就跳转执行LBL标号以后的指令,而在JMP和
LBL之间的指令一概不执行,哪怕在这个过程中I0.1=1,
Q0.0也不会有输出;当JMP跳转条件不成立时,如果I0.1接
通,则Q0.0会有输出。
5.6 程序控制指令与子程序指令
 跳转指令示例
LD
JMP
I0.0
2
LD
=
I0.1
Q0.0
LBL
2
LD
=
I0.2
Q0.1
应用举例
 JMP、LBL指令在工业现场控制中,常用于工作方式的选择。如有3
台电动机M1~M3,具有两种起停工作方式:
 1)手动操作方式:分别用每个电动机各自的起停按钮控制M1~M3
的起停状态。
 2)自动操作方式:按下起动按钮,M1~M3每隔5s依次起动;按下
停止按钮,M1~M3同时停止。
 PLC控制的外部接线图,梯形图分别如图a、c所示
 从控制要求中,可以看出,需要在程序中体现两种可以任意选择
的控制方式。所以运用跳转指令的程序结构可以满足控制要求。
当操作方式选择开关闭合时,I0.0的常开触点闭合,跳过手动程
序段不执行,选择自动方式的程序段执行。而操作方式选择开关
断开时的情况与此相反,跳过自动方式程序段不执行,选择手动
方式程序段执行。
PLC接线图
梯形图
跳转指令举例
 某生产线对产品进行加工处理,同时利用计数器对成品进
行累计,每当检测到100个成品时,就要跳过某些控制程
序,直接进入小包装控制程序,每当检测到900个成品(9
个小包装),直接进入到大包装控制程序。
 教案78例题.mwp
5.6 程序控制指令与子程序指令
 5. 循环指令
 FOR指令和NEXT指令必须成对使用。FOR标记循环的开始,
NEXT标记循环的结束。必须给FOR指令指定当前循环计数
(INDX)、初值 (INIT) 和终值 (FINAL)。NEXT指令标记循
环的结束。
 例如给定初值 (INIT) 为1终值 (FINAL)为10,那么随着
当前计数值 (INDX)从1增加到10,FOR与NEXT之间的指令
被执行10 次。如果初值大于终值那么循环体不被执行,每
执行一次循环体,当前计数值增加1,并且将其结果同终
值作比较,如果大于终值,那么终止循环。
 循环指令可以嵌套,嵌套最多可以有8层。
5.6 程序控制指令与子程序指令
 程序循环结构用于描述一段程序的重复循环执行。
 循环指令由FOR指令和NEXT指令两部分构成。
 FOR指令的梯形图由标识符“FOR”、指令允许端EN、循环
起始值INIT、循环终止值FINAL、循环计数器INDX构成;
语句表形式由操作码“FOR”、循环计数器INDX、循环起始
值INIT和循环终止值FINAL构成。
 NEXT指令的梯形图由标识符“NEXT”构成,语句表形式由
操作码“NEXT”构成。
 梯形图及STL语句如图所示:
5.6 程序控制指令与子程序指令
 循环指令的操作数范围如下:
 INDX:VW、IW、QW、MW、SW、SMW、LW、T、C、AC。
 INIT:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、AIW、常数。
 FINAL:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、AIW、常数。
 循环指令应用举例
 例1:8个12位二进制数据存放在VW0开始的存储区内,用循环指
令求它们的平均值,并存放在VW0中,设计梯形图。
 教案80例题.mwp
 练习
 例2:当I0.0=1的上升沿将10,15,20…..35这6个数分别送到
VW10、…..vw20。
 教案81练习.mwp
5.6 程序控制指令与子程序指令
 5.6.2 子程序调用及子程序返回指令
 通常将具有特定功能、并且多次使用的程序段作为子程序。主
程序中用指令决定具体子程序的执行状况。当主程序调用子程
序并执行时,子程序执行全部指令直至结束。然后,系统将返
回至调用子程序的主程序。子程序用于为程序分段和分块,使
其成为较小的、更易于管理的块。在程序中调试和维护时,通
过使用较小的程序块,对这些区域和整个程序简单地进行调试
和排除故障。只在需要时才调用程序块,可以更有效地使用PLC,
因为所有的程序块可能无须执行每次扫描。在程序中使用子程
序,必须执行下列三项任务:建立子程序;在子程序局部变量
表中定义参数(如果有);从适当的POU(从主程序或另一个子
程序)调用子程序。
5.6 程序控制指令与子程序指令
 1. 建立子程序
 可采用下列一种方法建立子程序:
 ① 从“编辑”菜单,选择插入(Insert)/ 子程序(Subroutine)
 ② 从“指令树”,用鼠标右键单击“程序块”图标,并从弹出菜
单选择插入(Insert)→子程序(Subroutine)
 ③ 从“程序编辑器”窗口,用鼠标右键单击,并从弹出菜单选择
插入(Insert)→ 子程序(Subroutine)。
 程序编辑器从先前的POU显示更改为新的子程序。程序编辑器底部
会出现一个新标签,代表新的子程序。此时,可以对新的子程序
编程。
 用右键双击指令树中的子程序图标,在弹出的菜单中选择/重新命
名,可修改子程序的名称。如果为子程序指定一个符号名,例如
USR_NAME,该符号名会出现在指令树的“子例行程序”文件夹中。
5.6 程序控制指令与子程序指令
 2. 在子程序局部变量表中定义参数
 可以使用子程序的局部变量表为子程序定义参数。注意:
程序中每个POU都有一个独立的局部变量表,必须在选择
该子程序标签后出现的局部变量表中为该子程序定义局部
变量。编辑局部变量表时,必须确保已选择适当的标签。
每个子程序最多可以定义16个输入/输出参数。
 3. 子程序调用及子程序返回指令的指令格式
 子程序有子程序调用和子程序返回两大类指令 ,子程序
返回又分为条件返回和无条件返回。指令格式如图所示:
CALL
SBR_0:SBR0
5.6 程序控制指令与子程序指令
CALL SBRn:子程序调用指令。在梯形图中为指令盒的形式。子程
序的编号n从0开始,随着子程序个数的增加自动生成。操作数n为
0-63。
CRET:子程序条件返回指令,条件成立时结束该子程序,返回原
调用处的指令CALL的下一条指令。
RET:子程序无条件返回指令,子程序必须以本指令作结束。由编
程软件自动生成。
需要说明的是:
(1)子程序可以多次被调用,也可以嵌套(最多8层)还可以自
己调自己。
(2)子程序调用指令用在主程序和其它调用子程序的程序中,子
程序的无条件返指令在子程序的最后网络段,梯形图指令系统能
够自动生成子程序的无条件返回指令,用户无须输入。
5.6 程序控制指令与子程序指令
 4. 带参数的子程序调用指令
 1)带参数的子程序的概念及用途
 子程序可能有要传递的参数(变量和数据),这时可以在子
程序调用指令中包含相应参数,它可以在子程序与调用程序
之间传送。如果子程序仅用要传递的参数和局部变量,则为
带参数的子程序(可移动子程序)。
 为了移动子程序,应避免使用任何全局变量/符号(I、Q、
M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址),这
样可以导使子程序导入另一个项目。子程序中的参数必须有
一个符号名(最多为23个字符)、一个变量类型和一个数据
类型。子程序最多可传递16 个参数。传递的参数在子程序
局部变量表中定义。
5.6 程序控制指令与子程序指令
 2)变量的类型
局部变量表
 局部变量表中的变量有IN、OUT、IN/OUT和TEMP等4种类型。
 IN(输入)型:将指定位置的参数传入子程序。如果参数是
直接寻址(例如VB10),在指定位置的数值被传入子程序。
如果参数是间接寻址,(例如*AC1),地址指针指定地址的
数值被传入子程序。如果参数是数据常量(16#1234)或地
址(&VB100),常量或地址数值被传入子程序。
5.6 程序控制指令与子程序指令
 2)变量的类型
 IN_OUT(输入-输出)型:将指定参数位置的数值被传入子
程序,并将子程序的执行结果的数值返回至相同的位置。输
入/输出型的参数不允许使用常量(例如16#1234)和地址
(例如&VB100)。
 OUT(输出)型:将子程序的结果数值返回至指定的参数位
置。常量(例如16#1234)和地址(例如&VB100)不允许用
作输出参数。
 在子程序中可以使用IN,IN/OUT,OUT类型的变量和调用子
程序POU之间传递参数。
 TEMP型:是局部存储变量,只能用于子程序内部暂时存储中
间运算结果,不能用来传递参数。
5.6 程序控制指令与子程序指令
 3)数据类型
 局部变量表中的数据类型包括:能流、布尔(位)、字节、
字、双字、整数、双整数和实数型。
 能流:能流仅用于位(布尔)输入。能流输入必须用在局
部变量表中其他类型输入之前。只有输入参数允许使用。
在梯形图中表达形式为用触点(位输入)将左侧母线和子
程序的指令盒连接起来。
 布尔:该数据类型用于位输入和输出。如图中的qd、tz是
布尔输入。
 字节、字、双字:这些数据类型分别用于1、2或4个字节不
带符号的输入或输出参数。
 整数、双整数:这些数据类型分别用于2或4个字节带符号
的输入或输出参数。
 实数:该数据类型用于单精度(4个字节)IEEE浮点数值。
5.6 程序控制指令与子程序指令
 4)建立带参数子程序的局部变量表
 局部变量表隐藏在程序显示区,将梯形图显示区向下拖动,
可以露出局部变量表,在局部变量表输入变量名称、变量
类型、数据类型等参数以后,双击指令树中子程序(或选
择点击方框快捷按钮F9,在弹出的菜单中选择子程序项),
在梯形图显示区显示出带参数的子程序调用指令盒。
 局部变量表变量类型的修改方法:用光标选中变量类型区,
点击鼠标右键得到一个下拉菜单,点击选中的类型,在变
量类型区光标所在处可以得到选中的类型。
 子程序传递的参数放在子程序的局部存储器(L)中,局部
变量表最左列是系统指定的每个被传递参数的局部存储器
地址。
5.6 程序控制指令与子程序指令
 5)带参数子程序调用指令格式
 对于梯形图程序,在子程序局部变量表中为该子程序定义参数
后(如表),将生成客户化的调用指令块(如图),指令块中
自动包含子程序的输入参数和输出参数。在LAD程序的POU中插
入调用指令:第一步,打开程序编辑器窗口中所需的POU,光
标滚动至调用子程序的网络处。第二步,在指令树中,打开
“子程序”文件夹然后双击。第三步,为调用指令参数指定有
效的操作数。有效操作数为:存储器的地址、常量、全局变量
以及调用指令所在的POU中的局部变量(并非被调用子程序中
的局部变量)。
 注意:1如果在使用子程序调用指令后,然后修改该子程序的
局部变量表,调用指令则无效。必须删除无效调用,并用反映
正确参数的最新调用指令代替该调用。2子程序和调用程序共
用累加器。不会因使用子程序对累加器执行保存或恢复操作。
5.6 程序控制指令与子程序指令
 子程序举例
 1. 当I0.1为ON时,定时器T32 开始定时,产生每秒一次
的周期脉冲(即1S钟脉冲发生器),T32每次定时时间到,
调用一个子程序,在子程序中将模拟量输入AIW0的值送人
VW10,设计主程序和子程序。
 教案82例题.mwp
 2. 带参数的子程序例带参数的子程序.mwp
 3. 设计求周长的子程序,输入量为半径(<10000的整
数),输出量为圆周长(双字整数)。在I0.0的上升沿调
用子程序,半径为500mm,计算结果存放在VD10中。
 带参数子程序练习.mwp
5.7 中断指令
 S7-200设置了中断功能,用于实时控制、高速处理、通信和网络
等复杂和特殊的控制任务。中断就是终止当前正在运行的程序,
去执行为立即响应的信号而编制的中断服务程序,执行完毕再返
回原先被终止的程序并继续运行。
 5.7.1 中断源的类型
 中断源即发出中断请求的事件,又叫中断事件。为了便于识别,
系统给每个中断源都分配一个编号,称为中断事件号。S7-200系
列可编程控制器最多有34个中断源,分为三大类:通信中断、输
入/输出中断和时基中断。
 (1)通信中断
 在自由口通信模式下,用户可通过编程来设置波特率、奇偶校验
和通信协议等参数。用户通过编程控制通讯端口的事件为通信中
断。
5.7 中断指令
 5.7.1 中断源类型
 (2)I/O中断
 I/O中断包括外部输入上升/下降沿中断、高速计数器中断
和高速脉冲输出中断。
 S7-200用输入(I0.0、I0.1、I0.2或I0.3)上升/下降沿
产生中断。这些输入点用于捕获在发生时必须立即处理的
事件。
 高速计数器中断指对高速计数器运行时产生的事件实时响
应,包括当前值等于预设值时产生的中断,计数方向的改
变时产生的中断或计数器外部复位产生的中断。脉冲输出
中断是指预定数目脉冲输出完成而产生的中断。
5.7 中断指令
 5.7.1 中断源类型
 (3)时基中断
 时基中断包括定时中断和定时器T32/T96中断。定时中断用于支
持一个周期性的活动。周期时间从1毫秒至255毫秒,时基是1毫
秒。使用定时中断0,必须在SMB34中写入周期时间;使用定时
中断1,必须在SMB35中写入周期时间。将中断程序连接在定时
中断事件上,若定时中断被允许,则计时开始,每当达到定时
时间值,执行中断程序。定时中断可以用来对模拟量输入进行
采样或定期执行PID回路。定时器T32/T96中断指允许对定时间
间隔产生中断。这类中断只能用时基为1ms的定时器T32/T96构
成。当中断被启用后,当前值等于预置值时,在S7-200执行的
正常1毫秒定时器更新的过程中,执行连接的中断程序。
5.7 中断指令
 5.7.2 中断优先级和排对等候
 优先级是指多个中断事件同时发出中断请求时,CPU对中断事件
响应的优先次序。S7-200规定的中断优先由高到低依次是:通
信中断、I/O中断和定时中断。每类中断中不同的中断事件又有
不同的优先权。
 一个程序中总共可有128个中断。S7-200在各自的优先级组内按
照先来先服务的原则为中断提供服务。
 在任何时刻,只能执行一个中断程序。一旦一个中断程序开始
执行,则一直执行至完成。不能被另一个中断程序打断,即使
是更高优先级的中断程序。中断程序执行中,新的中断请求按
优先级排队等候。
 中断队列能保存的中断个数有限,若超出,则会产生溢出。
5.7 中断指令
 中断指令有4条,包括开、关中断指令,中断连接、分离
指令
5.7 中断指令
 开、关中断指令
 开中断(ENI)指令全局性允许所有中断事件 。关中断
(DISI)指令全局性禁止所有中断事件,中断事件的每次
出现均被排队等候,直至使用全局开中断指令重新启用中
断。
 PLC转换到RUN(运行)模式时,中断开始时被禁用,可以
通过执行开中断指令,允许所有中断事件。执行关中断指
令会禁止处理中断,但是现用中断事件将继续排队等候。
5.7 中断指令
 中断连接、分离指令
 中断连接指令(ATCH)指令将中断事件(EVNT)与中断程
序号码(INT)相连接,并启用中断事件。
 分离中断(DTCH)指令取消某中断事件(EVNT)与所有中
断程序之间的连接,并禁用该中断事件。
 注意:一个中断事件只能连接一个中断程序,但多个中断
事件可以调用一个中断程序。
5.7 中断指令
 5.7.3 中断程序
 1. 中断程序的概念
 中断程序是为处理中断事件而事先编好的程序。中断程序
不是由程序调用,而是在中断事件发生时由操作系统调用。
在中断程序中不能改写其他程序使用的存储器,最好使用
局部变量。中断程序应实现特定的任务,应“越短越好”,
中断程序由中断程序号开始,以无条件返回指令(CRETI)
结束。在中断程序中禁止使用DISI、ENI、HDEF、LSCR和
END指令。
5.7 中断指令
 5.7.3 中断程序
 2. 建立中断程序的方法
 方法一:从“编辑”菜单→选择插入(Insert)→ 中断
(Interrupt)。
 方法二:从指令树,用鼠标右键单击“程序块”图标并从
弹出菜单→选择插入(Insert)→ 中断(Interrupt)。
 方法三:从“程序编辑器”窗口,从弹出菜单用鼠标右键
单击插入(Insert)→ 中断(Interrupt)。
 程序编辑器从先前的POU显示更改为新中断程序,在程序
编辑器的底部会出现一个新标记,代表新的中断程序。
程序举例
 例编写由I0.1的上升沿产生的中断事件的初始化程序。
 分析:查表可知,I0.1上升沿产生的中断事件号为2。所以
在主程序中用ATCH指令将事件号2和中断程序0连接起来,
并全局开中断主程序:
例:编程完成采样工作,要求每10ms采样一次。
 分析:完成每10ms采样一次,需用定时中断,查表可知,定时中断0
的中断事件号为10。因此在主程序中将采样周期(10ms)即定时中断
的时间间隔写入定时中断0的特殊存储器SMB34,并将中断事件10和
INT-0连接,全局开中断。在中断程序0中,将模拟量输入信号读入,
程序如图 主程序
中断程序0
程序举例
 利用定时中断功能编制一个程序,实现如下功能:当I0.0
由OFF→ON,Q0.0亮1s,灭1s,如此循环反复直至I0.0由
ON→OFF,Q0.0变为OFF。