第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。