西门子S7-200 PLC指令简介及实例分析

更新时间:2023-11-17 07:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据处理、运算指令及应用

本章要点

? 数据传送、字节交换、字节立即读写、移位、转换指令的介绍、应用及实训 ? 算术运算、逻辑运算、递增/递减指令的介绍、应用及实训

? 表的定义、填表指令、表取数指令、填充指令、表查找指令的介绍

5.1 数据处理指令

5.1.1 数据传送指令

1. 字节、字、双字、实数单个数据传送指令MOV

数据传送指令MOV,用来传送单个的字节、字、双字、实数。指令格式及功能如表5-1所示。

表5-1单个数据传送指令MOV指令格式

LAD STL 操作数及数据类型 MOVB IN,OUT SMB, LB, AC, 常量 SB, SMB, LB, AC MOVW IN,OUT MOVD IN,OUT MOVR IN,OUT SD, SMD, LD, AC, 常量 SD, SMD, LD, AC IN:VB, IB, QB, MB, SB, IN:VW, IW, QW, MW, IN:VD, ID, QD, MD, SD, IN:VD, ID, QD, MD, SW, SMW, LW, T, C, SMD, LD, HC, AC, 常量 OUT:VW, T, C, IW, QW, SD, SMD, LD, AC SW, MW, SMW, LW, AC, AQW 字节 字、整数 双字、双整数 实数 OUT:VB, IB, QB, MB, AIW, 常量, AC OUT:VD, ID, QD, MD, OUT:VD, ID, QD, MD, 功能 使能输入有效时,即EN=1时,将一个输入IN的字节、字/整数、双字/双整数或实数送到OUT指定的存储器输出。在传送过程中不改变数据的大小。传送后,输入存储器IN中的内容不变

使ENO = 0即使能输出断开的错误条件是:SM4.3(运行时间),0006(间接寻址错误)。 【例5-1】将变量存储器VW10中内容送到VW100中。程序如图5-1所示。

LD I0.1

MOVW VW10, VW100

图5-1 例5-1题图

2. 字节、字、双字、实数数据块传送指令BLKMOV

数据块传送指令将从输入地址IN开始的N个数据传送到输出地址OUT开始的N个单元中,N的范围为1至255,N的数据类型为:字节。指令格式及功能如表5-2所示。

表5-2 数据传送指令BLKMOV指令格式

LAD STL 操作数及数据类型 BMB IN,OUT SMB, LB。 SMB, LB。 BMW IN,OUT SMW, LW, T, C, AIW。 SMW, LW, T, C, AQW。 数据类型:字 BMD IN,OUT SD, SMD, LD。 IN:VB, IB, QB, MB, SB, IN:VW, IW, QW, MW, SW, IN/ OUT :VD, ID, QD, MD, OUT:VB, IB, QB, MB, SB, OUT:VW, IW, QW, MW, SW, 数据类型:双字 数据类型:字节 N:VB, IB, QB, MB, SB, SMB, LB, AC, 常量;数据类型:字节;数据范围:1-255 功能 使能输入有效时,即EN=1时,把从输入IN开始的N个字节(字、双字)传送到以输出OUT开始的N个字节(字、双字)中 使ENO

= 0的错误条件:0006(间接寻址错误)0091(操作数超出范围)。

【例5-2】程序举例:将变量存储器VB20开始的4个字节(VB20- VB23)中的数据,移至VB100开始的4个字节中(VB100-VB103)。程序

如图5-2所示。

LAD STL

LD I0.0

BMB VB20 ,VB100, 4

图5-2 例5-2图

程序执行后,将VB20~VB23中的数据30、31、32、33送到VB100~VB103。 执行结果如下:数组1数据 30 31 32 33

数据地址 VB20 VB21 VB22 VB23

块移动执行后:数组2数据 30 31 32 33

数据地址 VB100 VB101 VB102 VB103

5.1.2 字节交换、字节立即读写指令

1. 字节交换指令

字节交换指令用来交换输入字IN的最高位字节和最低位字节。指令格式如表5-3所示。

表5-3 字节交换指令使用格式及功能

LAD STL 功能及说明 功能:使能输入EN有效时,将输入字INSWAP IN 的高字节与低字节交换,结果仍放在IN中 IN:VW, IW, QW, MW, SW, SMW, T, C, LW, AC。数据类型:字 ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间) 【例5-3】字节交换指令应用举例。如图5-3所示。

程序执行结果:

指令执行之前VW50中的字为:D6 C3 指令执行之后VW50中的字为:C3 D6

2. 字节立即读写指令

字节立即读指令(MOV-BIR)读取实际输入端IN给出的1个字节的数值,并将结果写入OUT所指定的存储单元,但输入映像寄存器未更新。

字节立即写指令从输入IN所指定的存储单元中读取1个字节的数值并写入(以字节为单位)实际输出OUT端的物理输出点,同时刷新对应的输出映像寄存器。指令格式及功能如表5-4所示。

表5-4字节立即读写指令格式

LAD STL 功能及说明 功能:字节立即读 BIR IN,OUT IN: IB OUT:VB, IB, QB, MB, SB, SMB, LB, AC。 数据类型:字节 功能:字节立即写 BIW IN,OUT IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量 OUT:QB 数据类型:字节 使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。注意:字节立即读写指令无法存取扩展模块。

5.1.3 移位指令及应用举例

移位指令分为左、右移位和循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的长度又分字节型、字型、双字型3种。

1. 左、右移位指令

左、右移位数据存储单元与SM1.1(溢出)端相连,移出位被放到特殊标志存储器SM1.1位。移位数据存储单元的另一端补0。移位指令格式见表5-5。

(1)左移位指令(SHL)

使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向左移N位后(右端补0),将结果输出到OUT所指定的存储单元中,如果移位次数大于0,最后一次移出位保存在“溢出”存储器位SM1.1。如果移位结果为0,零标志位SM1.0置1。

(2)右移位指令

使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向右移N位后,将结果输出到OUT所指定的存储单元中,移出位补0,最后一移出位保存在SM1.1。如果移位结果为0,零标志位SM1.0置1。

(3)使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)

表5-5 移位指令格式及功能

LAD STL 操作数及数据类型 SLB OUT,N SRB OUT,N SMB, LB, AC, 常量。 SMB, LB, AC。 数据类型:字节 SLW OUT,N SRW OUT,N SLD OUT,N SRD OUT,N SMD, LD, AC, HC, 常量。 说明:在STL指令中,若IN和OUT指定的存储器不同,则须首先使用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如: OVB IN,OUT LB OUT,N

2. 循环左、右移位指令 循环移位将移位数据存储单元的首尾相连,同时又与

IN:VB, IB, QB, MB, SB, IN:VW, IW, QW, MW, SW, IN:VD, ID, QD, MD, SD, SMW, LW, T, C, AIW, AC, 常OUT:VB, IB, QB, MB, SB, 量。 SMW, LW, T, C, AC。 数据类型:字 N:VB, IB, QB, MB, SB, SMB, LB, AC, 常量;数据类型:字节;数据范围:N≤数据类型(B、W、D)对应的位数 OUT:VD, ID, QD, MD, SD, 数据类型:双字 OUT:VW, IW, QW, MW, SW, SMD, LD, AC。 功能 SHL:字节、字、双字左移N位;SHR:字节、字、双字右移N位 溢出标志SM1.1连接,SM1.1用来存放被移出的位。指令格式见表5-6。

(1)循环左移位指令(ROL)

使能输入有效时,将IN输入无符号数(字节、字或双字)循环左移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是零时,零标志位SM1.0为1。

(2)循环右移位指令(ROR)

使能输入有效时,将IN输入无符号数(字节、字或双字)循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是零时,零标志位SM1.0为1。

(3)移位次数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为实际移动位数。

(4)使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。

表5-6 循环左、右移位指令格式及功能

LAD STL 操作数及数据类型 RLB OUT,N RRB OUT,N SMB, LB, AC, 常量。 SMB, LB, AC。 数据类型:字节 RLW OUT,N RRW OUT,N RLD OUT,N RRD OUT,N SMD, LD, AC, HC, 常量。 说明:在

STL指令中,若IN和OUT指定的存储器不同,则须首先使用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如:MOVB IN,OUT

LB OUT,N 【例5-4】程序应用举例,将AC0中的字循环右移2位,将VW200中的字左移3位。程序及运行结果如

IN:VB, IB, QB, MB, SB, IN:VW, IW, QW, MW, SW, IN:VD, ID, QD, MD, SD, SMW, LW, T, C, AIW, AC, 常OUT:VB, IB, QB, MB, SB, 量。 SMW, LW, T, C, AC。 数据类型:字 N:VB, IB, QB, MB, SB, SMB, LB, AC, 常量;数据类型:字节。 OUT:VD, ID, QD, MD, SD, 数据类型:双字 OUT:VW, IW, QW, MW, SW, SMD, LD, AC。 功能 ROL:字节、字、双字循环左移N位;ROR:字节、字、双字循环右移N位。 图5-4所示。

图5-4 例5-4题图

【例5-5】用I0.0控制接在Q0.0~Q0.7上的8个彩灯循环移位,从左到右以0.5s的速度依次点亮,保持任意时刻只有一个指示灯亮,到达最右端后,再从左到右依次点亮。

分析:8个彩灯循环移位控制,可以用字节的循环移位指令。根据控制要求,首先应置彩灯的初始状态为QB0=1,即左边第一盏灯亮;接着灯从左到右以0.5s的速度依次点亮,即要求字节QB0中的“1”用循环左移位指令每0.5s移动一位,因此须在ROL-B指令的EN端接一个0.5s的移位脉冲(可用定时器指

图5-5 例5-5题图

令实现)。梯形图程序和语句表程序如图5-5所示。

LD SM0.1 //首次扫描时 MOVB 1, QB0 //置8位彩灯初态

LD I0.0 //T37产生周期为 AN T37 0.5s的移位脉冲 TON T37, +5

LD T37 //每来一个脉冲

RLB QB0, 1 彩灯循环左移1位

3. 移位寄存器指令(SHRB)

移位寄存器指令是可以指定移位寄存器的长度和移位方向的移位指令。其指令格式如图5-6所示。

说明:(1)移位寄存器指令SHRB将DATA数值移入移位寄存器。梯形图中,EN为使能输入端,连接移位脉冲信号,每次使能有效时,整个移位寄存器移动1位。DATA为数据输入端,连接移入移位寄存器的二进制数值,执行指令时将该位的值移入寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的长度和移位方向,移位寄存器的最大长度为64位,N为正值表示左移位,输入数据(DATA)移入移位寄存器的最低位(S_BIT),并移出移位寄存器的最高位。移出的数据被放置在溢出内存位(SM1.1)中。N为负值表示右移位,输入数据移入移位寄存器的最高位中,并移出最低位(S_BIT)。移出的数据被放置在溢出内存位(SM1.1)中。

(2)DATA和S-BIT的操作数为I, Q, M, SM, T, C, V, S, L 。数据类型为:BOOL变量。N的操作数为VB, IB, QB, MB, SB, SMB, LB, AC, 常量。数据类型为:字节。

(3)使ENO = 0的错误条件:0006(间接地址),0091(操作数超出范围),0092(计数区错误)。 (4)移位指令影响特殊内部标志位:SM1.1(为移出的位值设置溢出位)。 【例5-6】移位寄存器应用举例。程序及运行结果如图5-7所示。 溢出位(SM1.1)

S-BIT I0.1

S-BIT I0.1 S-BIT I0.1

溢出位(SM1.1) 溢出位(SM1.1) 溢出位 第一次移位 第一次移位后 第二次移位后 第一次移位前

时序图 MB10

I0.0 I0.1

MB10 MB10

图5-7 例5-6梯形图、语句表、时序图及运行结果

【例5-7】用PLC构成喷泉的控制。用灯L1~L12分别代表喷泉的12个喷水注。

(1)控制要求:按下起动按钮后,隔灯闪烁,L1亮0.5秒后灭,接着L2亮0.5秒后灭, 接着L3亮0.5秒后灭,接着L4亮0.5秒后灭,接着L5、L9亮0.5秒后灭,接着L6、L10亮0.5秒后灭,接着L7、L11亮0.5秒后M10.4 M10.3 M10.1 M10.0 灭,接着L8、L12亮0.5秒后灭,L1亮0.5秒后灭,如此循环下去,直至按下停止按钮。如图5-8所示。 M10.7 M10.6 M10.5 M10.2 M11.0

图5-8 喷泉控制示意图

(2)I/O分配

输入 输出

(常开)起动按钮:I0.0 L1:Q0.0 L5、L9: Q0.4 (常闭)停止按钮:I0.1 L2:Q0.1 L6、L10:Q0.5

L3:Q0.2 L7、L11:Q0.6 L4:Q0.3 L8、L12:Q0.7

(3)喷泉控制梯形图

梯形图程序如图5-10所示。

分析:应用移位寄存器控制,根据喷泉模拟控制的8位输出(Q0.0~Q0.7),须指定一个8位的移位寄存器(M10.1~M11.0),移位寄存器的S-BIT位为M10.1,并且移位寄存器的每一位对应一个输出。如图5-9所示。

DATA

Q0.7 Q0.6 Q0.5 Q0.4 Q0.3 Q0.2 Q0.1 Q0.0 图5-9 移位寄存器的位与输出对应关系图

在移位寄存器指令中,EN连接移位脉冲,每来一个脉冲的上升沿,移位寄存器移动一位。移位寄存器应0.5s移一位,因此需要设计一个0.5s产生一个脉冲的脉冲发生器(由T38构成)。

M10.0为数据输入端DATA ,根据控制要求,每次只有一个输出,因此只需要在第一个移位脉冲到来时由M10.0送入移位寄存器S-BIT位(M10.1)一个“1”,第二个脉冲至第八

T38构成0.5s产生一个机器扫描周期脉冲的脉冲发生器

8位的移位寄存器

移位寄存器的每一位 对应一个输出

图5-10 例5-7喷泉模拟控制梯形图

个脉冲到来时由M10.0送入M10.1的值均为“0”,这在程序中由定时器T37延时0.5s导通一个扫描周期实现,第八个脉冲到来时M11.0置位为1,同时通过与T37并联的M11.0常开触点使M10.0置位为1,在第九个脉冲到来时由M10.0送入M10.1的值又为1,如此循环下去,直至按下停止按钮。按下常闭停止按钮(I0.1),其对应的常闭触点接通,触发复位指令,使M10.1~M11.0的8位全部复位。

5.1.4 转换指令

转换指令是对操作数的类型进行转换,并输出到指定目标地址中去。转换指令包括数据的类型转换、数据的编码和译码指令以及字符串类型转换指令。

不同功能的指令对操作数要求不同。类型转换指令可将固定的一个数据用到不同类型要求的指令中,包括字节与字整数之间的转换,整数与双整数的转换,双字整数与实数之间的转换,BCD码与整数之间的转换等。

1. 字节与字整数之间的转换

字节型数据与字整数之间转换的指令格式见表5-7所示。

表5-7 字节型数据与字整数之间转换指令

LAD STL 操作数及数据类型 型:字节 OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC,数据类型:整数 功能及 说明 BTI指令将字节数值(IN)转换成整数值,并将结果置入OUT指定的存储单元。因为字节不带符号,所以无符号扩展 BTI IN,OUT IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量, 数据类ITB IN,OUT IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量,数据类型:整数 OUT:VB, IB, QB, MB, SB, SMB, LB, AC, 数据类型:字节 ITB指令将字整数(IN)转换成字节,并将结果置入OUT指定的存储单元。输入的字整数0至255被转换。超出部分导致溢出,SM1.1=1。输出不受影响 0006 间接地址 SM1.1 溢出或非法数值 SM4.3 运行时间 ENO=0的错误条件 0006 间接地址 SM4.3 运行时间 2. 字整数与双字整数之间的转换

字整数与双字整数之间的转换格式、功能及说明,如表5-8所示。 3. 双整数与实数之间的转换

双整数与实数之间的转换的转换格式、功能及说明,如表5-9所示。

表5-8 字整数与双字整数之间的转换指令

LAD STL ITD IN,OUT DTI IN,OUT IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, IN:VD, ID, QD, MD, SD, SMD, LD, HC, AC,常量,操作数及数据类型 常量, 数据类型:整数 OUT:VD, ID, QD, MD, SD, SMD, LD, AC,数据类型:双整数 数据类型:双整数 OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC, 数据类型:整数 DTI指令将双整数值(IN)转换成整数值,并将结功能及 说明 ITD指令将整数值(IN)转换成双整数值,并将结果置入OUT指定的存储单元。符号被扩展 果置入OUT指定的存储单元。如果转换的数值过大,则无法在输出中表示,产生溢出SM1.1=1,输出不受影响 ENO=0的错误条件 0006 间接地址 SM4.3 运行时间 0006 间接地址 SM1.1 溢出或非法数值 SM4.3 运行时间 表5-9 双字整数与实数之间的转换指令

LAD STL DTR IN,OUT LD, HC, AC, 常量 操作数及数据类型 数据类型:双整数 SMD, LD, AC 数据类型:实数 DTR指令将32位带符号整数IN转换成32位实数,并将结果置入OUT指定的存储单元 ROUND IN,OUT LD, AC, 常量 数据类型:实数 LD, AC 数据类型:双整数 ROUND指令按小数部分四舍五入的原则,将实数(IN)转换成双整数值,并将结果置入OUT指定的存储单元 0006 间接地址 SM1.1 溢出或非法数值 SM4.3 运行时间 TRUNC IN,OUT LD, AC, 常量 数据类型:实数 LD, AC 数据类型:双整数 TRUNC(截位取整)指令按将小数部分直接舍去的原则,将32位实数(IN)转换成32位双整数,并将结果置入OUT指定存储单元 0006 间接地址 SM1.1 溢出或非法数值 SM4.3 运行时间 IN:VD, ID, QD, MD, SD, SMD, IN:VD, ID, QD, MD, SD, SMD, IN:VD, ID, QD, MD, SD, SMD, OUT:VD, ID, QD, MD, SD, OUT:VD, ID, QD, MD, SD, SMD, OUT:VD, ID, QD, MD, SD, SMD, 功能及 说明 ENO=0的错误条件 0006 间接地址 SM4.3 运行时间 值得注意的是:不论是四舍五入取整,还是截位取整,如果转换的实数数值过大,无法在输出中表示,则产生溢出,即影响溢出标志位,使SM1.1=1,输出不受影响。

4. BCD码与整数的转换

BCD码与整数之间的转换的指令格式、功能及说明,如表5-10所示。

表5-10 BCD码与整数之间的转换的指令

LAD STL BCDI OUT IBCD OUT 操作数及数据类型 IN :VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量 OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC IN/OUT数据类型:字 BCD-I指令将二进制编码的十进制数IN转换成整数,并将结果送入OUT指定的存储单元。IN的有效范围是BCD码 0至9999 I-BCD指令将输入整数IN转换成二进制编码的十进制数,并将结果送入OUT指定的存储单元。IN的有效范围是0至9999 功能及 说明 ENO=0的错误条件 0006 间接地址,SM1.6 无效BCD数值,SM4.3 运行时间 注意:(1)数据长度为字的BCD格式的有效范围为:0~9999(十进制),0000~9999(十六进制)0000 0000

0000 0000~1001 1001 1001 1001(BCD码)。 (2)指令影响特殊标志位SM1.6(无效BCD)。

(3)在表5-10的LAD和STL指令中,IN和OUT的操作数地址相同。若IN和OUT操作数地址不是同一个存储器,对应的语句表指令为: MOV IN OUT

BCDI OUT

5. 译码和编码指令

译码和编码指令的格式和功能如表5-11所示。

表5-11 译码和编码指令的格式和功能

LAD STL DECO IN,OUT IN:VB, IB, QB, MB, SMB, LB, SB, AC, 常量。数据操作数及数据类型 类型:字节 数据类型:字 功能及 说明 译码指令根据输入字节(IN)的低4位表示的输出字的位号,将输出字的相对应的位,置位为1,输出字的其他位均置位为0 ENCO IN,OUT IN:VW, IW, QW, MW, SMW, LW, SW, AIW, T, C, AC, 常量。数据类型: 字 型:字节 编码指令将输入字(IN)最低有效位(其值为1)的位号写入输出字节(OUT)的低4位中 OUT:VW, IW, QW, MW, SMW, LW, SW, AQW, T, C, AC。OUT:VB, IB, QB, MB, SMB, LB, SB, AC。数据类ENO=0的错误条件 0006 间接地址, SM4.3 运行时间 【例5-8】译码编码指令应用举例。如图5-11所示。

若(AC2)=2,执

行译码指令,则将输出字VW40的第二位置1,VW40中的二进制数为2#0000 0000 0000 0100;若(AC3)=2#0000 0000 0000 0100,执行编码指令,则输出字节VB50中的错误码为2。

6. 七段显示译

图5-12 与七段显示码对

应的代码

码指令

七段显示器的abcdefg段分别对应于字节的第0位~第6位,字节的某位为1时,其

对应的段亮;输出字节的某位为0时,其对应的段暗。将字节的第7位补0,则构成与七段显示器相对应的8位编码,称为七段显示码。数字0~9、字母A~F与七段显示码的对应如图5-12所示。

七段译码指令SEG将输入字节16#0~F转换成七段显示码。指令格如表5-12所示。

表5-12七段显示译码指令

LAD STL 功能及操作数 功能:将输入字节(IN)的低四位确定的16进制数(16#0~F),产生相应的七段显示码,SEG IN,OUT 送入输出字节OUT IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。 OUT:VB, IB, QB, MB, SMB, LB, AC。IN/OUT的数据类型:字节 使ENO = 0的错误条件:0006 间接地址,SM4.3 运行时间。

【例5-9】编写显示数字0的七段显示码的程序。程序实现如图5-13所示。

LD I0.1 SEG 0, AC1

图5-13 例5-9题图

程序运行结果为AC1中的值为16#3F(2#0011 1111)。

7. ASCII码与十六进制数之间的转换指令

ASCII码与十六进制数之间的转换指令指令格式和功能如表5-13所示。

表5-13 ASCII码与十六进制数之间转换指令的格式和功能

LAD STL 操作数及数据类型 ATH IN,OUT,LEN HTA IN,OUT,LEN IN/ OUT: VB, IB, QB, MB, SB, SMB, LB。数据类型:字节 LEN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。数据类型:字节。最大值为255 ASCII至HEX(ATH)指令将从IN功能及 说明 开始的长度为LEN 的ASCII字符转换成十六进制数,放入从OUT开始的存储单元 HEX至ASCII (HTA)指令将从输入字节(IN)开始的长度为LEN的十六进制数转换成ASCII字符,放入从OUT开始的存储单元 ENO=0的错误条件 0006 间接地址, SM4.3 运行时间 ,0091 操作数范围超界 SM1.7 非法ASCII数值(仅限ATH) 注意:合法的ASCII码对应的十六进制数包括30H到39H,41H到46H。如果在ATH指令的输入中包含非法的ASCII码,则终止转换操作,特殊内部标志位SM1.7置位为1。

【例5-10】将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数。 梯形图和语句表程序如图5-14所示。

LD I1.0

ATH VB10, VB20, 3

图5-14 例5-10题图

程序运行结果如下:

可见将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数3E和Ax ,放在VB20和VB21中,“x”表示VB21的“半字节”即低四位的值未改变。

5.1.5 天塔之光的模拟控制实训

1. 实训目的

(1)掌握移位寄存器指令的应用方法

(2)用移位寄存器指令实现天塔之光控制系统 (3)掌握PLC的编程技巧和程序调试的方法 2. 控制要求

如图5-15所示的天塔的灯光,可以用PLC控制灯光的闪耀移位及时序的变化等。控制要求如下:按起动按钮,L12→L11→L10→L8→L1→L1、L2、L9→L1、L5、L8→L1、L4、L7→L1、L3、L6→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L6→L1、L3、L7→L1、L4、L8→L1、L5、L9→L1→L2、L3、L4、L5→L6、L7、L8、L9→L12→L11→L10 ……循环下去,直至按下停止按钮。

3. I/O分配

输入 输出

起动按钮:I0.0 L1:Q0.0 L4 Q0.3 L7:Q0.6 L10 Q1.1

停止按钮:I0.1 L2:Q0.1 L5 Q0.4 L8:Q0.7 L11 Q1.2

L3:Q0.2 L6 Q0.5 L9:Q1.0

L12 Q1.3

4. 程序设计

分析:根据灯光闪亮移位,分为19步,因此可以指定一个19位的移位寄存器(M10.1~M10.7,M11.0~M11.7,M12.0~M12.3),移位寄存器的每一位对应一步。而对于输出,如:L1(Q0.0)分别在“5、6、7、8、9、10、13、14、15、16、17”步时被点亮,即其对应的移位寄存器位“M10.5、M10.6、M10.7、M11.0、M11.1、M11.2、M11.5、M11.6、M12.0、M12.1”置位为1时,Q0.0置位为1,所以需要将这些位所对应的常开触点并联后输出Q0.0,以此类推其它的输出。参考程序如图5-16所示。

5-16天塔之光控制梯形图

图5-16 天塔之光控制梯形图(续)

5. 输入、调试程序并运行程序

6. 思考题

如果控制要求改为L12→L11→L10→L8→L1→L2、L3、L4、L5→L6、L7、L8、L9,循环如何修改程序。输入程序,调试观察现象。

5.2 算术运算、逻辑运算指令

算术运算指令包括加、减、乘、除运算和数学函数变换,逻辑运算包括逻辑与或非指令等。

5.2.1 算术运算指令

1. 整数与双整数加减法指令

整数加法(ADD-I)和减法(SUB-I)指令是:使能输入有效时,将两个16位符号整数相加或相减,并产生一个16位的结果输出到OUT。

双整数加法(ADD-D)和减法(SUB-D)指令是:使能输入有效时,将两个32位符号整数相加或相减,并产生一个32位结果输出到OUT。

整数与双整数加减法指令格式如表5-14所示。

表5-14 整数与双整数加减法指令格式

LAD MOVW IN1,OUT -I IN2,0UT IN1-IN2=OUT MOVD IN1,OUT +D IN2,0UT IN1+IN2=OUT STL 功能 MOVW IN1,OUT +I IN2,0UT IN1+IN2=OUT MOVD IN1,OUT +D IN2,0UT IN1-IN2=OUT IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, IN1/IN2: VD, ID, QD, MD, SMD, SD, LD, AC, HC, 操作数及数据类型 AC, LW, AIW, 常量, *VD, *LD, *AC AC, *VD, *LD, *AC IN/OUT数据类型:整数 ENO=0的错误条件 常量, *VD, *LD, *AC *LD, *AC IN/OUT数据类型:双整数 OUT:VW, IW, QW, MW, SW, SMW, T, C, LW, OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, 0006 间接地址, SM4.3 运行时间, SM1.1 溢出 说明: (1)当IN1、IN2和OUT操作数的地址不同时,在STL指令中,首先用数据传送指令将IN1中的数值送入OUT,然后再执行加、减运算即:OUT+IN2=OUT、OUT-IN2=OUT。为了节省内存,在整数加法的梯形图指令中,可以指定IN1或IN2=OUT,这样,可以不用数据传送指令。如指定INI=OUT,则语句表指令为:+I IN2,OUT;如指定IN2=OUT,则语句表指令为:+I IN1,OUT。在整数减法的梯形图指令中,可以指定IN1=OUT,则语句表指令为:-I IN2,OUT。这个原则适用于所有的算术运算指令,且乘法和加法对应,减法和除法对应。

(2)整数与双整数加减法指令影响算术标志位SM1.0(零标志位),SM1.1(溢出标志位)和SM1.2(负数标志位)。

【例5-11】求5000加400的和,5000在数据存储器VW200中,结果放入AC0。程序如图5-17所示。

LD I0.0

MOVW VW200, AC0 //VW200→AC0

+I +400, AC0 //VW200+400=AC0

图5-17 例5-11题图

2. 整数乘除法指令

整数乘法指令(MUL-I)是:使能输入有效时,将两个16位符号整数相乘,并产生一个16位积,从OUT指定的存储单元输出。

整数除法指令(DIV-I)是:使能输入有效时,将两个16位符号整数相除,并产生一个16位商,从OUT指定的存储单元输出,不保留余数。如果输出结果大于一个字,则溢出位SM1.1置位为1。

双整数乘法指令(MUL-D):使能输入有效时,将两个32位符号整数相乘,并产生一个32位乘积,从OUT指定的存储单元输出。

双整数除法指令(DIV-D):使能输入有效时,将两个32位整数相除,并产生一个32位商,从OUT指定的存储单元输出,不保留余数。

整数乘法产生双整数指令(MUL):使能输入有效时,将两个16位整数相乘,得出一个32位乘积,从OUT指定的存储单元输出。

整数除法产生双整数指令(DIV):使能输入有效时,将两个16位整数相除,得出一个32位结果,从OUT指定的存储单元输出。其中高16位放余数,低16位放商。

整数乘除法指令格式如表5-15所示。

整数双整数乘除法指令操作数及数据类型和加减运算的相同。 整数乘法除法产生双整数指令的操作数:IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, LW, AC, AIW, 常量, *VD, *LD, *AC。数据类型:整数。

OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 。数据类型:双整数。 使ENO = 0的错误条件:0006(间接地址),SM1.1(溢出),SM1.3(除数为0)。 对标志位的影响:SM1.0(零标志位),SM1.1(溢出),SM1.2(负数),SM1.3(被0除)。

表5-15 整数乘除法指令格式

LAD STL 功能 MOVW IN1,OUT MOVW IN1,OUT MOVD IN1,OUT MOVD IN1,OUT MOVW IN1,OUT MOVW IN1,OUT *I IN2,0UT IN1*IN2=OUT /I IN2,0UT *D IN2,0UT /D IN2,0UT MUL IN2,OUT IN1/IN2=OUT IN1*IN2=OUT IN1/IN2=OUT IN1*IN2=OUT DIV IN2,OUT IN1/IN2=OUT 【例5-12】乘除法指令应用举例,程序如图5-18所示。

LD I0.0 MUL AC1 VD100 DIV VW10 VD200

(1)每个高速计数器都有一个32位当前值和一个32位预置值,当前值和预设值均为带符号的整数值。要设置高速计数器的新当前值和新预置值,必须设置控制字节(表6-7),令其第五位和第六位为1,允许更新预置值和当前值,新当前值和新预置值写入特殊内部标志位存储区。然后执行HSC指令,将新数值传输到高速计数器。当前值和预置值占用的特殊内部标志位存储区如表6-10所示。

表6-10 HSC0-HSC5当前值和预置值占用的特殊内部标志位存储区

要装入的数值 新的当前值 新的预置值 HSC0 HSC1 HSC2 HSC3 HSC4 HSC5 SMD38 SMD48 SMD58 SMD138 SMD148 SMD158 SMD42 SMD52 SMD62 SMD142 SMD152 SMD162 除控制字节以及新预设值和当前值保持字节外,还可以使用数据类型HC(高速计数器当前值)加计数器号码(0、1、2、3、4或5)读取每台高速计数器的当前值。因此,读取操作可直接读取当前值,但只有用上述HSC指令才能执行写入操作。

(2)执行HDEF指令之前,必须将高速计数器控制字节的位设置成需要的状态,否则将采用默认设置。默认设置为:复位和起动输入高电平有效,正交计数速率选择4×模式。执行HDEF指令后,就不能再改变计数器的设置,除非CPU进入停止模式。

(3)执行HSC指令时,CPU检查控制字节和有关的当前值和预置值。

3. 高速计数器指令的初始化

高速计数器指令的初始化的步骤如下:

(1)用首次扫描时接通一个扫描周期的特殊内部存储器SM0.1去调用一个子程序,完成初始化操作。因为采用了子程序,在随后的扫描中,不必再调用这个子程序,以减少扫描时间,使程序结构更好。

(2) 在初始化的子程序中,根据希望的控制设置控制字(SMB37、SMB47、SMB137、SMB147、SMB157),如设置SMB47=16#F8,则为:允许计数,写入新当前值,写入新预置值,更新计数方向为加计数,若为正交计数设为4×,复位和起动设置为高电平有效。

(3)执行HDEF指令,设置HSC的编号(0-5),设置工作模式(0-11)。如HSC的编号设置为1,工作模式输入设置为11,则为既有复位又有起动的正交计数工作模式。

(4)用新的当前值写入32位当前值寄存器(SMD38,SMD48,SMD58 ,SMD138, SMD148, SMD158)。如写入0,则清除当前值,用指令MOVD 0,SMD48实现。

(5)用新的预置值写入32位预置值寄存器(SMD42 ,SMD52, SMD62, SMD142 ,SMD152, SMD162)。如执行指令MOVD 1000,SMD52,则设置预置值为1000。若写入预置值为16#00,则高速计数器处于不工作状态。

(6)为了捕捉当前值等于预置值的事件,将条件CV=PV中断事件(事件13)与一个中断程序相联系。

(7)为了捕捉计数方向的改变,将方向改变的中断事件(事件14)与一个中断程序相联系。 (8)为了捕捉外部复位,将外部复位中断事件(事件15)与一个中断程序相联系。 (9)执行全局中断允许指令(ENI)允许HSC中断。 (10)执行HSC指令使S7-200对高速计数器进行编程。 (11)结束子程序。

【例6-4】高速计数器的应用举例。 (1)主程序

如图6-11所示,用首次扫描时接通一个扫描周期的特殊内部存储器SM0.1去调用一个子程序,完成初始化操作。

(2)初始化的子程序

如图6-12所示,定义HSC1的工作模式为模式11(两路脉冲输入的双相正交计数,具有复位和起动输入功能),设置SMB47=16#F8(允许计数,更新新当前值,更新新预置值,更新计数方向为加计数,若为正交计数设为4×,复位和起动设置为高电平有效)。HSC1的当前值SMD48清零,预置值SMD52=50,当前值 = 预设值,产生中断(中断事件13),中断事件13连接中断程序INT-0。

(3)中断程序INT-0,如图6-13所示。

LD SM0.0

MOVD +0 SMD48 // HSC1的当前值清0

MOVB 16#C0 SMB47 //只写入一个新当前值,

预置值不变,计数方向不变, HSC1允许计数

HSC 1 //执行HSC1指令

6.3.5 高速脉冲输出

1. 脉冲输出(PLS)指令

脉冲输出(PLS)指令功能为:使能有效时,检查用于脉冲输出(Q0.0或Q0.1)的特殊存储器位(SM),然后执行特殊存储器位定义的脉冲操作。指令格式如表6-11所示。

表6-11脉冲输出(PLS)指令格式

LAD STL 操作数及数据类型 Q:常量(0或1) 数据类型 字 PLS Q 2. 用于脉冲输出(Q0.0或Q0.1)的特殊存储器

(1)控制字节和参数的特殊存储器

每个PTO/PWM发生器都有:一个控制字节(8位)、一个脉冲计数值(无符号的32位数值)和一个周期时间和脉宽值(无符号的16位数值)。这些值都放在特定的特殊存储区(SM),如表6-12所示。执行PLS指令时,S7-200读这些特殊存储器位(SM),然后执行特殊存储器位定义的脉冲操作,即对相应的PTO/PWM发生器进行编程。

表6-12 脉冲输出(Q0.0或Q0.1)的特殊存储器 Q0.0和Q0.1对PTO/PWM输出的控制字节 Q0.0 SM67.0 SM67.1 SM67.2 SM67.3 SM67.4 SM67.5 SM67.6 SM67.7 Q0.0 SMW68 Q0.1 SM77.0 SM77.1 SM77.2 SM77.3 SM77.4 SM77.5 SM77.6 SM77.7 Q0.1 SMW78 说明 PTO/PWM刷新周期值 PWM刷新脉冲宽度值 PTO刷新脉冲计数值 0 :不刷新; 1 :刷新 0 :不刷新; 1:刷新 0 :不刷新; 1:刷新 PTO/PWM时基选择 0 :1 μs; 1:1ms PWM更新方法 0 :异步更新;1:同步更新 PTO操作 0 :单段操作;1:多段操作 PTO/PWM模式选择 0 :选择PTO 1 : 选择PWM PTO/PWM允许 0:禁止; 1 :允许 Q0.0和Q0.1对PTO/PWM输出的周期值 说明 PTO/PWM周期时间值(范围:2至 65 535) Q0.0和Q0.1对PTO/PWM输出的脉宽值 Q0.0 SMW70 Q0.1 SMW80 说明 PWM脉冲宽度值(范围:0至65 535) Q0.0和Q0.1对PTO脉冲输出的计数值 Q0.0 SMD72 Q0.1 SMD82 说明 PTO脉冲计数值(范围:1至4 294 967 295) Q0.0和Q0.1对PTO脉冲输出的多段操作 Q0.0 SMB166 SMW168 Q0.0 SM66.4 SM66.5 SM66.6 SM66.7 Q0.1 SMB176 SMW178 Q0.1 SM76.4 SM76.5 SM76.6 SM76.7 说明 段号(仅用于多段PTO操作),多段流水线PTO运行中的段的编号 包络表起始位置,用距离V0的字节偏移量表示(仅用于多段PTO操作) Q0.0和Q0.1的状态位 说明 PTO包络由于增量计算错误异常终止 PTO包络由于用户命令异常终止 0 :无错; 1 : 异常终止 1 :异常终止 0 : 无错; PTO流水线溢出 0 :无溢出; 1 : 溢出 PTO空闲 0 :运行中; 1 : PTO空闲 【例6-5】设置控制字节。用Q0.0作为高速脉冲输出,对应的控制字节为SMB67,如果希望定义的

输出脉冲操作为PTO操作,允许脉冲输出,多段PTO脉冲串输出,时基为ms,设定周期值和脉冲数,则应向SMB67写入2#10101101,即16#AD。

通过修改脉冲输出(Q0.0或Q0.1)的特殊存储器SM区(包括控制字节),既更改PTO或PWM的输出波形,然后再执行PLS指令。

注意:所有控制位、周期、脉冲宽度和脉冲计数值的默认值均为零。向控制字节(SM67.7或SM77.7)的PTO/PWM允许位写入零,然后执行PLS指令,将禁止PTO或PWM波形的生成。

(2)状态字节的特殊存储器

除了控制信息外,还有用于PTO功能的状态位,如表6-12所示。程序运行时,根据运行状态使某些位自动置位。可以通过程序来读取相关位的状态,用此状态作为判断条件,实现相应的操作。

3. 对输出的影响

PTO/PWM生成器和输出映像寄存器共用Q0.0和Q0.1。在Q0.0或Q0.1使用PTO或PWM功能时,PTO/PWM发生器控制输出,并禁止输出点的正常使用,输出波形不受输出映像寄存器状态、输出强制、执行立即输出指令的影响;在Q0.0或Q0.1位置没有使用PTO或PWM功能时,输出映像寄存器控制输出,所以输出映像寄存器决定输出波形的初始和结束状态,即决定脉冲输出波形从高电平或低电平开始和结束,使输出波形有短暂的不连续,为了减小这种不连续有害影响,应注意:

(1)可在起用PTO或PWM操作之前,将用于Q0.0和Q0.1的输出映像寄存器设为0。 (2)PTO/PWM输出必须至少有10%的额定负载,才能完成从关闭至打开以及从打开至关闭的顺利转换,即提供陡直的上升沿和下降沿。

4. PTO的使用

PTO是可以指定脉冲数和周期的占空比为50%的高速脉冲串的输出。状态字节中的最高位(空闲位)用来指示脉冲串输出是否完成。可在脉冲串完成时起动中断程序,若使用多段操作,则在包络表完成时起动中断程序。

(1)周期和脉冲数

周期范围从50微秒至65,535微秒或从2毫秒至65,535毫秒,为16位无符号数,时基有μs和ms两

种,通过控制字节的第三位选择。注意:

? ? 如果周期< 2个时间单位,则周期的默认值为2个时间单位。 ? ? 周期设定奇数微秒或毫秒(例如75毫秒),会引起波形失真。

脉冲计数范围从1至4,294,967,295,为32位无符号数,如设定脉冲计数为0,则系统默认脉冲计数值为1。

(2)PTO的种类及特点

PTO功能可输出多个脉冲串,现用脉冲串输出完成时,新的脉冲串输出立即开始。这样就保证了输出脉冲串的连续性。PTO功能允许多个脉冲串排队,从而形成流水线。流水线分为两种:单段流水线和多段流水线。

单段流水线是指:流水线中每次只能存储一个脉冲串的控制参数,初始PTO段一旦起动,必须按照对第二个波形的要求立即刷新SM,并再次执行PLS指令,第一个脉冲串完成,第二个波形输出立即开始,重复此这一步骤可以实现多个脉冲串的输出。

单段流水线中的各段脉冲串可以采用不同的时间基准,但有可能造脉冲串之间的不平稳过渡。输出多个高速脉冲时,编程复杂。

多段流水线是指在变量存储区V建立一个包络表。包络表存放每个脉冲串的参数,执行PLS指令时,S7 –200 PLC自动按包络表中的顺序及参数进行脉冲串输出。包络表中每段脉冲串的参数占用8个字节,由一个16位周期值(2字节)、一个16位周期增量值Δ(2字节)和一个32位脉冲计数值(4字节)组成。包络表的格式如表6-13所示。

表6-13 包络表的格式

从包络表起始地址的字节偏移 段 说明 段数(1~255);数值0产生非致命错误,无PTO输出 初始周期(2至65 535个时基单位) 段1 每个脉冲的周期增量Δ(符号整数:-32 768至32 767个时基单位) 脉冲数(1至4 294 967 295) 初始周期(2至65535个时基单位) 段2 每个脉冲的周期增量Δ(符号整数:-32 768至32 767个时基单位) 脉冲数(1至4 294 967 295) 初始周期(2至65 535个时基单位) 段3 每个脉冲的周期增量值Δ(符号整数:-32 768至32 767个时基单位) 脉冲数(1至4 294 967 295) VBn VBn+1 VBn+3 VBn+5 VBn+9 VBn+11 VBn+13 VBn+17 VBn+19 VBn+21 注意:周期增量值Δ为整数微秒或毫秒

多段流水线的特点是编程简单,能够通过指定脉冲的数量自动增加或减少周期,周期增量值Δ为正值

会增加周期,周期增量值Δ为负值会减少周期,若Δ为零,则周期不变。在包络表中的所有的脉冲串必须采用同一时基,在多段流水线执行时,包络表的各段参数不能改变。多段流水线常用于步进电机的控制。

【例6-6】根据控制要求列出PTO包络表。

步进电机的控制要求如图6-14所示。从A点到B点为加速过程,从B到C为恒速运行,从C到D为减速过程。

图5-18 例5-12题图

注意:因为VD100包含:VW100和VW102两个字,VD200包含:VW200和VW202两个字,所以在语句表指令中不需要使用数据传送指令。

3. 实数加减乘除指令

实数加法(ADD-R)、减法(SUB-R)指令:将两个32位实数相加或相减,并产生一个32位实数结果,从OUT指定的存储单元输出。

实数乘法(MUL-R)、除法(DIV-R)指令:使能输入有效时,将两个32位实数相乘(除),并产生一个32位积(商),从OUT指定的存储单元输出。

操作数:IN1/IN2: VD, ID, QD, MD, SMD, SD, LD, AC, 常量, *VD, *LD, *AC。

OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 。

数据类型:实数。

指令格式如表5-16所示。

表5-16 实数加减乘除指令

LAD STL 功能 ENO=0的错误条件 对标志位的影响 MOVD IN1,OUT +R IN2,0UT IN1+IN2=OUT MOVD IN1,OUT -R IN2,0UT IN1-IN2=OUT MOVD IN1,OUT *R IN2,0UT IN1*IN2=OUT MOVD IN1,OUT /R IN2,0UT IN1/IN2=OUT 0006 间接地址, SM4.3 运行时间, SM1.1 0006 间接地址 ,SM1.1 溢出,SM4.3 运行时间,溢出 SM1.3 除数为0 SM1.0(零),SM1.1(溢出) , SM1.2(负数),SM1.3 (被0除) 【例5-13】实数运算指令的应用,程序如图5-19所示。

LD I0.0 +R AC1, VD100 /R VD100, AC0

图5-19 例5-13题图

4. 数学函数变换指令

数学函数变换指令包括平方根、自然对数、指数、三角函数等。 (1)平方根(SQRT)指令:对32位实数(IN)取平方根,并产生一个32位实数结果,从OUT指定的存储单元输出。

(2)自然对数(LN)指令:对IN中的数值进行自然对数计算,并将结果置于OUT指定的存储单元中。

求以10为底数的对数时,用自然对数除以2.302585(约等于10的自然对数)。

(3)自然指数(EXP)指令:将IN取以e为底的指数,并将结果置于OUT指定的存储单元中。

将“自然指数”指令与“自然对数”指令相结合,可以实现以任意

数为底,任意数为指数的计算。求yx,输入以下指令:EXP (x * LN (y))。

例如:求23=EXP(3*LN(2))=8;27的3次方根=271/3=EXP(1/3*LN(27))=3。

(4)三角函数指令:将一个实数的弧度值IN分别求SIN、COS、TAN,得到实数运算结果,从OUT指定的存储单元输出。

函数变换指令格式及功能如表5-17所示。

表5-17 函数变换指令格式及功能

LAD STL SQRT IN,OUT 功能 SQRT(IN)=OUT IN: VD, ID, QD, MD, SMD, SD, LD, AC, 常量, *VD, *LD, *AC OUT:VD, ID, QD, MD, SMD, SD, LD, AC, *VD, *LD, *AC 数据类型:实数 LN IN,OUT EXP IN,OUT SIN IN,OUT COS IN,OUT TAN IN,OUT LN(IN)=OUT EXP(IN)=OUT SIN(IN)=OUT COS(IN)=OUT TAN(IN)=OUT 操作数及数据类型 使ENO = 0的错误条件:0006(间接地址),SM1.1(溢出)SM4.3(运行时间) 对标志位的影响:SM1.0(零),SM1.1(溢出),SM1.2(负数) 【例5-14】求45o正弦值。 分析:先将45o转换为弧度:(3.14159/180)*45,再求正弦值。程序如图5-20所示。

LD I0.1

MOVR 3.14159, AC1 /R 180.0, AC1 *R 45.0, AC1 SIN AC1, AC0

图5-20 例5-14题图

5.2.2 逻辑运算指令

逻辑运算是对无符号数按位进行与、或、异或和取反等操作。操作数的长度有B、W、DW。指令格式如表5-18所示。

1. 逻辑与(WAND)指令:将输入IN1,IN2按位相与,得到的逻辑运算结果,放入OUT指定的存储单元。

2. 逻辑或(WOR)指令:将输入IN1,IN2按位相或,得到的逻辑运算结果,放入OUT指定的存储单元。

3. 逻辑异或(WXOR)指令:将输入IN1,IN2按位相异或,得到的逻辑运算结果,放入OUT指定的存储单元。

4. 取反(INV)指令:将输入IN按位取反,将结果放入OUT指定的存储单元。

表5-18 逻辑运算指令格式

LAD ANDB IN1,OUT STL 功能 B 操作数 DW W ANDW IN1,OUT ANDD IN1,OUT IN1,IN2按位相与 ORB IN1,OUT ORW IN1,OUT ORD IN1,OUT IN1,IN2按位相或 XORB IN1,OUT XORW IN1,OUT XORD IN1,OUT IN1,IN2按位异或 INVB OUT INVW OUT INVD OUT 对IN取反 IN1/IN2:VB, IB, QB, MB, SB, SMB, LB, AC, 常量, *VD, *AC, *LD OUT:VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD IN1/IN2:VW, IW, QW, MW, SW, SMW, T, C, AC, LW, AIW, 常量, *VD, *AC, *LD OUT:VW, IW, QW, MW, SW, SMW, T, C, LW, AC, *VD, *AC, *LD OUT:VD, ID, QD, MD, SMD, LD, AC, *VD, *AC, SD, *LD IN1/IN2:VD, ID, QD, MD, SMD, AC, LD, HC, 常量, *VD, *AC, SD, *LD 说明:

(1)在表5-18中,在梯形图指令中设置IN2和OUT所指定的存储单元相同,这样对应的语句表指令如表中所示。若在梯形图指令中,IN2(或IN1)和OUT所指定的存储单元不同,则在语句表指令中需使用数据传送指令,将其中一个输入端的数据先送入OUT,在进行逻辑运算。如MOVB IN1,OUT ANDB IN2,OUT

(2)ENO=0的错误条件:0006 间接地址,SM4.3 运行时间

(3)对标志位的影响:SM1.0(零)

【例5-15】逻辑运算编程举例,程序如图5-21所示。

//字节与操作 LD I0.0 ANDB VB1, VB2 //字或操作

MOVW VW100, VW300 ORW VW200, VW300 //双字异或操作 XORD AC0, AC1 //字节取反操作 MOVB VB5, VB6 INVB VB6

图5-21 例5-15题图

运算过程如下:

VB1 VB2 VB2 0001 1100 WAND 1100 1101 → 0000 1100 VW100 VW200 VW300

0001 1101 1111 1010 WOR 1110 0000 1101 1100→ 1111 1101 1111 1110 VB5 VB6 0000 1111 INV 1111 0000

5.2.3 递增、递减指令

递增、递减指令用于对输入无符号数字节、符号数字、符号数双字进行加1或减1的操作。指令格式如表5-19所示。

1. 递增字节(INC-B)/递减字节(DEC-B)指令

递增字节和递减字节指令在输入字节(IN)上加1或减1,并将结果置入OUT指定的变量中。递增和递减字节运算不带符号。

2. 递增字(INC-W)/递减字(DEC-W)指令

递增字和递减字指令在输入字(IN)上加1或减1,并将结果置入OUT。递增和递减字运算带符号(16#7FFF > 16#8000)。

3.递增双字(INC-DW)/递减双字(DEC-DW)指令

递增双字和递减双字指令在输入双字(IN)上加1或减1,并将结果置入OUT。递增和递减双字运算带符号(16#7FFFFFFF > 16#80000000)。

表5-19 递增、递减指令格式

LAD STL 功能 操作及数据类型 INCB OUT 字节加1 DECB OUT 字节减1 INCW OUT 字加1 DECW OUT 字减1 INCD OUT 双字加1 DECD OUT 双字减1 IN:VB, IB, QB, MB, SB, IN: VW, IW, QW, MW, SW, SMB, LB, AC, 常量, *VD, SMW, AC, AIW, LW, T, C, 常量, *LD, *AC SMB, LB, AC, *VD, *LD, *AC IN/OUT数据类型:字节 *VD, *LD, *AC SMW, LW, AC, T, C, *VD, *LD, *AC 数据类型:整数 OUT:VB, IB, QB, MB, SB, OUT:VW, IW, QW, MW, SW, IN:VD, ID, QD, MD, SD, SMD, LD, AC, HC, 常量, *VD, *LD,*AC OUT;VD, ID, QD, MD, SD, SMD, LD, AC, *VD, *LD, *AC 数据类型:双整数 说明: (1)使ENO = 0的错误条件:SM4.3(运行时间),0006(间接地址),SM1.1溢出) (2)影响标志位:SM1.0 (零),SM1.1(溢出),SM1.2(负数)。

(3)在梯形图指令中,IN和OUT可以指定为同一存储单元,这样可以节省内存,在语句表指令中不需使用数据传送指令。

5.2.4 运算单位转换实训

1. 实训目的

(1)掌握算术运算指令和数据转换指令的应用。 (2)掌握建立状态表及通过强制调试程序的方法。

(3)掌握在工程控制中,进行运算单位转换的的方法及步骤。 2. 实训内容

将英寸转换成厘米,已知C10的当前值为英寸的计数值,1英寸=2.54厘米。 3. 写入程序、编译并下载到PLC

分析:将英寸转换为厘米的步骤为:将C10中的整数值英寸→双整数英寸→实数英寸→实数厘米→整数厘米。参考程序如图5-22所示。

//(VD4)=2.54

LD SM0.1 MOVR 2.54, VD4

// 将计数器数值(英寸)载入AC1 LD I0.0 ITD C10 AC1 // 将数值转换为实数 DTR AC1 VD0 MOVR VD0 VD8 // 乘以2.54(转换为厘米) *R VD4 VD8

// 将数值转换回整数 ROUND VD8 VD12

图5-22 将英寸转换为厘米参考程序

注意:在程序中VD0、VD4、VD8、VD12,都是以双字(4个字节)编址的。 4. 建立状态表,通过强制,调试运行程序。

(1)创建状态表

用鼠标右键单击目录树中的状态表图标或单击已经打开的状态表,将弹出一个窗口,在窗口中选择“插入状态表”选项,可创建状态表。在状态表的地址列输入地址I0.0、C10、AC1、VD0、VD4、VD8、VD12。

(2)起动状态表

与可编程控制器的通信连接成功后,用菜单“调试→状态表”或单击工具条上的状态表图标

,可

起动状态表,再操作一次关闭状态表。状态表被起动后,编程软件从PLC读取状态信息。

(3)用状态表强制改变数值

通过强制C,模拟逻辑条件,方法是在显示状态表后,在状态表的地址列中选中“C”操作数,在“新数值”列写入模拟数值,然后单击工具条的“强制”图标

,被强制的数值旁边将显示锁定图标

(4)在完成对“C”的“新数值”列的改动后,可以使用“全部写入”,将所有需要的改动发送至PLC。 (5)运行程序并通过状态表监视操作数的当前值,记录状态

表的数据。

5.3 表功能指令

数据表是用来存放字型数据的表格,如图5-23所示。表格的第一个字地址即首地址,为表地址,首地址中的数值是表格的最大长度(TL),即最大填表数。表格的第二个字地址中的数值是表的实际长度(EC),指定表格中的实际填表数。每次向表格中增加新数据后,EC加1。从第三个字地址开始,存放数据(字)。表格最多可存放100个数据(字),不包括指定最大填表数(TL)和实际填表数(EC)的参数。

图5-23 数据表

要建立表格,首先须确定表的最大填表数。如图5-24所示。

// 输入表格的最大填表数 LD SM0.1 MOVW +6, VW200

图5-24 输入表格的最大填表数

确定表格的最大填表数后,可用表功能指令在表中存取字型数据。表功能指令包括填表指令,表取数指令,表查找指令,字填充指令。所有的表格读取和表格写入指令必须用边缘触发指令激活。

5.3.1 填表指令

表填表(ATT)指令:向表格(TBL)中增加一个字(DATA)。如图5-25所示。 说明: (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。 (4)使ENO = 0的错误条件:0006(间接地址),0091(操作数超出范围),SM1.4(表溢出),SM4.3(运行时间)。

(5)填表指令影响特殊标志位:SM1.4(填入表的数据超出表的最大长度,SM1.4=1)。

【例5-16】填表指令应用举例。将VW100中的数据1111,填入首地址是VW200的数据表中(图5-23)。程序及运行结果如图5-26所示。

LD I0.0

ATT VW100, VW200

图5-26 例5-16题图

5.3.2 表取数指令

从数据表中取数有先进先出(FIFO)和后进先出(LIFO)两种。执行表取数指令后,实际填表数EC值自动减1。

先进先出指令(FIFO):移出表格(TBL)中的第一个数(数据0),并将该数值移至DATA指定存储单元,表格中的其他数据依次向上移动一个位置。

后进先出指令(LIFO):将表格(TBL)中的最后一个数据移至输出端DATA指定的存储单元,表格中的其他数据位置不变。

表取数指令格式如表5-20所示。

表5-20 表取数指令格式

LAD STL 说明 FIFO TBL,DATA LIFO TBL,DATA 输入端TBL为数据表的首地址,输出端DATA为存放取出数值的存储单元 操作数及数据类型 TBL:VW, IW, QW, MW, SW, SMW, LW, T, C, *VD, *LD, *AC。数据类型:字。 DATA:VW, IW, QW, MW, SW, SMW, LW, AC, T, C, AQW, *VD, *LD, *AC。 数据类型:整数。 使ENO = 0的错误条件:0006(间接地址),0091(操作数超出范围),SM1.5(空表)SM4.3(运行时间)。

对特殊标志位的影响:SM1.5(试图从空表中取数,SM1.5=1)。

【例5-17】表取数指令应用举例。从图5-26 的数据表中,用FIFO,LIFO指令取数,将取出的数值分别放入VW300,VW400中,程

序及运行结果如图5-27所示。

LD I0.1

FIFO VW200, VW300 LIFO VW200, VW400

图5-27 例5-17题图

5.3.3 表查找指令

表格查找(TBL-FIND)指令在表格(TBL)中搜索符合条件的数据在表中的位置(用数据编号表示,编号范围为0~99)。其指令格式如图5-28所示。

(1)梯形图中各输入端的介绍

TBL:为表格的实际填表数对应的地址(第二个字地址),即高于对应的“增加至表格”、“后入先出”

或“先入先出”指令TBL操作数的一个字地址(两个字节)。TBL操作数:VW, IW, QW, MW, SW, SMW, LW,

T, C, *VD, *LD, *AC 。数据类型:字。

图5-29 例5-18题图TN:是用

来描述查表条件时进行比较的数据。 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,分别代表 =、<>、<, >。数据类型:字节 。 (2)功能说明

表格查找”指令搜索表格时,从INDX指定的数据编号开始,寻找与数据PTN的关系满足CMD比较条件的数据。参数如果找到符合条件的数据,则INDX的值为该数据的编号。要查找下一个符合条件的数据,再次使用“表格查找”指令之前须将INDX加1。如果没有找到符合条件的数据,INDX的数值等于实际填表数EC。一个表格最多可有100数据,数据编号范围:0~99。将INDX的值设为0,则从表格的顶端开始搜索。

(3)使ENO = 0的错误条件:SM4.3(运行时间),0006(间接地址),0091(操作数超出范围)。 【例5-18】查表指令应用举例。从EC地址为VW202的表中查找等于16#2222的数。程序及数据表如图5-29所示。

为了从表格的顶端开始搜索,AC1的初始值=0,查表指令执行后

AC1=1,找到符合条件的数据1。继续向下查找,先将AC1加1,再激活表查找指令,从表中符合条件的数据1的下一个数据开始查找,第二次执行查表指令后,AC1=4,找到符合条件的数据4。继续向下查找,将AC1再加1,再激活表查找指令,从表中符合条件的数据4的下一个数据开始查找,第三次执行表查找指令后,没有找到符合条件的数据,AC1=6(实际填表数)。

5.3.4 字填充指令

字填充(FILL)指令用输入IN存储器中的字值写入输出OUT开始N个连续的字存储单元中。N的数据范围:1~255。其指令格式如图5-30所示。说明如下:

(1)IN为字型数

据输入端,操作数为:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量, *VD, *LD, *AC;数据类型为:整数。

N的操作数为:VB, IB, QB, MB, SB, SMB, LB, AC, 常量, *VD,

图5-31 例5-19题图

*LD, *AC; 数据类型:字节。

OUT的操作数为:VW, IW, QW, MW, SW, SMW, LW, T, C, AQW, *VD, *LD, *AC;数据类型:整数。 (2)使ENO = 0的错误条件:SM4.3(运行时间),0006(间接地址),0091(操作数超出范围)。 【例5-19】将0填入VW0~VW18(10个字)。程序及运行结果如图5-31所示。

从图5-31中可以看出程序运行结果将从VW0开始的10个字(20个字节)的存储单元清零。

5.4 习题

1. 已知VB10=18,VB20=30,VB21=33,VB32=98。将VB10,VB30,VB31,VB32中的数据分别送到AC1,VB200,VB201,VB202中。写出梯形图及语句表程序。

2. 用传送指令控制输出的变化,要求控制Q0.0~Q0.7对应的8个指示灯,在I0.0接通时,使输出隔位接通,在I0.1接通时,输出取反后隔位接通。上机调试程序,记录结果。如果改变传送的数值,输出的状态如何变化,从而学会设置输出的初始状态。

3. 编制检测上升沿变化的程序。每当I0.0接通一次,使存储单元VW0的值加1,如果计数达到5,输出Q0.0接通显示,用I0.1使Q0.0复位。

4. 用数据类型转换指令实现将厘米转换为英寸。已知1英寸=2.54厘米。 5. 编写输出字符8的七段显示码程序。

6. 编程实现下列控制功能,假设有8个指示灯,从右到左以0.5s的速度依次点亮,任意时刻只有一个指示灯亮,到达最左端,再从右到左依次点亮。

7. 舞台灯光的模拟控制。控制要求:L1、L2、L9→L1、L5、L8→L1、L4、L7→L1、L3、L6→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L6→L1、L3、L7→L1、L4、L8→L1、L5、L9→L1→L2、L3、L4、L5→L6、L7、L8、L9→L1、L2、L9→L1、L5、L8……循环下去。

按下面的I/O分配编写程序。

输入 输出

起动按钮:I0.0 L1:Q0.0 L6:Q0.5 停止按钮:I0.1 L2:Q0.1 L7:Q0.6

L3:Q0.2 L8:Q0.7

L4:Q0.3 L9:Q1.0 L5:Q0.4

8. 用算术运算指令完成下列的运算。

1)53 2)求COS30°

9. 将VW100开始的20个字的数据送到VW200开始的存储区。 10. 读程序,给程序加注释。

第6章 特殊功能指令

本章要点

? ? 立即类指令的功能

? ? 中断指令的功能应用举例及实训

? ? 高速计数器指令、高速脉冲输出指令功能应用举例及实训 ? PID指令的原理及PID控制功能的应用 ? ? 时钟指令

6.1 立即类指令

立即类指令是指执行指令时不受S7-200循环扫描工作方式的影响,而对实际的I/O点立即进行读写操作。分为立即读指令和立即输出指令两大类。

立即读指令用于输入I接点,立即读指令读取实际输入点的状态时,并不更新该输入点对应的输入映像寄存器的值。如:当实际输入点(位)是1时,其对应的立即触点立即接通;当实际输入点(位)是0时,其对应的立即触点立即断开。

立即输出指令用于输出Q线圈,执行指令时,立即将新值写入实际输出点和对应的输出映像寄存器。 立即类指令与非立即类指令不同,非立即指令仅将新值读或写入输入/输出映像寄存器。 立即类指令的格式及说明如表6-1所示。

表6-1 立即类指令的格式及说明

LAD LDI bit STL AI bit OI bit 说明 常开立即触点可以 LDNI bit ANI bit ONI bit 常闭立即触点可以立即输出 立即置位 Bit:Q,数据类型:布尔 N: VB, IB, QB, MB, SMB, SB, LB, AC, 常量, *VD, *AC, *LD 数据类型:字节 立即复位 =I bit SI bit,N RI bit,N 装载,串联,并联。 装载,串联,并联。 Bit:I 数据类型:BOOL 操作数及数据类型 Bit:Q 数据类型:BOOL 6.2 中断指令

S7-200设置了中断功能,用于实时控制、高速处理、通信和网络等复杂和特殊的控制任务。中断就是

终止当前正在运行的程序,去执行为立即响应的信号而编制的中断服务程序,执行完毕再返回原先被终止的程序并继续运行。

6.2.1 中断源

1. 中断源的类型

中断源即发出中断请求的事件,又叫中断事件。为了便于识别,系统给每个中断源都分配一个编号,称为中断事件号。S7-200系列可编程控制器最多有34个中断源,分为三大类:通信中断、输入/输出中断和时基中断。

(1)通信中断

在自由口通信模式下,用户可通过编程来设置波特率、奇偶校验和通信协议等参数。用户通过编程控制通讯端口的事件为通信中断。

(2)I/O中断

I/O中断包括外部输入上升/下降沿中断、高速计数器中断和高速脉冲输出中断。S7-200用输入(I0.0、I0.1、I0.2或I0.3)上升/下降沿产生中断。这些输入点用于捕获在发生时必须立即处理的事件。高速计数器中断指对高速计数器运行时产生的事件实时响应,包括当前值等于预设值时产生的中断,计数方向的改变时产生的中断或计数器外部复位产生的中断。脉冲输出中断是指预定数目脉冲输出完成而产生的中断。

(3)时基中断

时基中断包括定时中断和定时器T32/T96中断。定时中断用于支持一个周期性的活动。周期时间从1毫秒至255毫秒,时基是1毫秒。使用定时中断0,必须在SMB34中写入周期时间;使用定时中断1,必须在SMB35中写入周期时间。将中断程序连接在定时中断事件上,若定时中断被允许,则计时开始,每当达到定时时间值,执行中断程序。定时中断可以用来对模拟量输入进行采样或定期执行PID回路。定时器T32/T96中断指允许对定时间间隔产生中断。这类中断只能用时基为1ms的定时器T32/T96构成。当中断被启用后,当前值等于预置值时,在S7-200执行的正常1毫秒定时器更新的过程中,执行连接的中断程序。

2. 中断优先级和排对等候

优先级是指多个中断事件同时发出中断请求时,CPU对中断事件响应的优先次序。S7-200规定的中断优先由高到低依次是:通信中断、I/O中断和定时中断。每类中断中不同的中断事件又有不同的优先权,

如表6-2所示。

一个程序中总共可有128个中断。S7-200在各自的优先级组内按照先来先服务的原则为中断提供服务。在任何时刻,只能执行一个中断程序。一旦一个中断程序开始执行,则一直执行至完成。不能被另一个中断程序打断,即使是更高优先级的中断程序。中断程序执行中,新的中断请求按优先级排队等候。中断队列能保存的中断个数有限,若超出,则会产生溢出。中断队列的最多中断个数和溢出标志位如表6-3所示。

表6-2中断事件及优先级

优先级分组 组内优先级 中断事件号 中断事件说明 0 0 通信中断 0 1 1 1 0 1 2 3 4 5 6 7 8 9 10 I/O中断 11 12 13 14 15 16 17 18 19 20 21 22 23 0 定时中断 1 2 3 8 9 23 24 25 26 19 20 0 2 4 6 1 3 5 7 12 27 28 13 14 15 16 17 18 32 29 30 31 33 10 11 21 22 通信口0:接收字符 通信口0:发送完成 通信口0:接收信息完成 通信口1:接收信息完成 通信口1:接收字符 通信口1:发送完成 PTO 0脉冲串输出完成中断 PTO 1脉冲串输出完成中断 I0.0上升沿中断 I0.1上升沿中断 I0.2上升沿中断 I0.3上升沿中断 10.0下降沿中断 I0.1下降沿中断 I0.2下降沿中断 I0.3下降沿中断 HSC0当前值=预置值中断 HSC0计数方向改变中断 HSC0外部复位中断 HSC1当前值=预置值中断 HSC1计数方向改变中断 HSC1外部复位中断 HSC2当前值=预置值中断 HSC2计数方向改变中断 HSC2外部复位中断 HSC3当前值=预置值中断 HSC4当前值=预置值中断 HSC4计数方向改变 HSC4外部复位 HSC5当前值=预置值中断 定时中断0 定时中断1 定时 高速计数器 外部输入 脉冲输出 通信口1 通信口0 中断事件类别 定时器T32 CT=PT中断 定时器T96 CT=PT中断 定时器 表6-3 中断队列的最多中断个数和溢出标志位

队列 CPU 221 CPU 222 CPU 224 CPU 226和CPU 226XM 4 16 8 4 16 8 8 16 8 溢出标志位 SM4.0 SM4.1 SM4.2 通讯中断队列 4 I/O中断队列 16 定时中断队列 8 6.2.2 中断指令

中断指令有4条,包括开、关中断指令,中断连接、分离指令。指令格式如表6-4所示。 1. 开、关中断指令

开中断(ENI)指令全局性允许所有中断事件。关中断(DISI)指令全局性禁止所有中断事件,中断事件的每次出现均被排队等候,直至使用全局开中断指令重新启用中断。

PLC转换到RUN(运行)模式时,中断开始时被禁用,可以通过执行开中断指令,允许所有中断事件。执行关中断指令会禁止处理中断,但是现用中断事件将继续排队等候。

2. 中断连接、分离指令

中断连接指令(ATCH)指令将中断事件(EVNT)与中断程序号码(INT)相连接,并启用中断事件。 分离中断(DTCH)指令取消某中断事件(EVNT)与所有中断程序之间的连接,并禁用该中断事件。 注意:一个中断事件只能连接一个中断程序,但多个中断事件可以调用一个中断程序。

表6-4中断指令格式

LAD DTCH EVNT EVNT:常量, 数据类型:字节 STL 操作数及数据类型 ENI 无 DISI 无 ATCH INT,EVNT INT:常量 0-127 INT/EVNT数据类型:字节 EVNT:常量,CPU 224: 0-23; 27-33 CPU 224: 0-23; 27-33 6.2.3 中断程序

1. 中断程序的概念

中断程序是为处理中断事件而事先编好的程序。中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。在中断程序中不能改写其他程序使用的存储器,最好使用局部变量。中断程序应实现特定的任务,应“越短越好”,中断程序由中断程序号开始,以无条件返回指令(CRETI)结束。在中断程序中禁止使用DISI、ENI、HDEF、LSCR和END指令。

2. 建立中断程序的方法

方法一:从“编辑”菜单→选择插入(Insert)→ 中断(Interrupt)。 方法二:从指令树,用鼠标右键单击“程序块”图标并从弹出菜单→选择插入(Insert)→ 中断(Interrupt)。 方法三:从“程序编辑器”窗口,从弹出菜单用鼠标右键单击插入(Insert)→ 中断(Interrupt)。 程序编辑器从先前的POU显示更改为新中断程序,在程序编辑器的底部会出现一个新标记,代表新

的中断程序。

6.2.4 程序举例

【例6-1】编写由I0.1的上升沿产生的中断事件的初始化程序。

分析:查表6-2可知,I0.1上升沿产生的中断事件号为2。所以在主程序中用ATCH指令将事件号2和中断程序0连接起来,并全局开中断。程序如图6-1所示。

【例6-2】编程完成采样工作,要求每10ms采样一次。

分析:完成每10ms采样一次,需用定时中断,查表6-2可知,定时中断0的中断事件号为10。因此在主程序中将采样周期(10ms)即定时中断的时间间隔写入定时中断0的特殊存储器SMB34,并将中断事件10和INT-0连接,全局开中断。在中断程序0中,将模拟量输入信号读入,程序如图6-2所示。

【例6-3】利用定时中断功能编制一个程序,实现如下功能:当I0.0由OFF→ON,Q0.0亮1s,灭1s,如此循环反复直至I0.0由ON→OFF,Q0.0变为OFF。

程序如图6-3所示。

6.2.5 中断程序编程实训

1. 实训目的

(1)熟悉中断指令的使用方法。 (2)掌握定时中断设计程序的方法。 2. 实训内容

(1)利用T32定时中断编写程序,要求产生占空比为50%,周期为4s的的方波信号。 (2)用定时中断实现喷泉的模拟控制,控制要求如【例5-7】。 3. 参考程序

(1)产生占空比为50%,周期为4s的的方波信号,主程序和中断程序如图6-4所示。

(2)喷泉的模拟控制参考程序如图6-5所示。

分析:程序中采用定时中断0,其中断号为10,定时中断0的周期控制字SMB34中的定时时间设定值的范围为1-255ms。喷泉模拟控制的移位时间为0.5s,大于定时中断0的最大定时时间设定值255ms,所以将中断的时间间隔设为100ms,这样中断执行5次,其时间间隔为0.5s,在程序中用VB0来累计中断的次数,每执行一次中断,VB0在中断程序中加1,当VB0=5时,即时间间隔为0.5s,QB0移一位。

4. 输入并调试程序

用状态图监视程序的运行,并记录观察到的现象。

6.3 高速计数器与高速脉冲输出

前面讲的计数器指令的计数速度受扫描周期的影响,对比CPU扫描频率高的脉冲输入,就不能满足控制要求了。为此,SIMATIC S7-200系列PLC设计了高速计数功能(HSC),其计数自动进行不受扫描周期的影响,最高计数频率取决于CPU的类型,CPU22x系列最高计数频率为30KHz,用于捕捉比CPU扫描速更快的事件,并产生中断,执行中断程序,完成预定的操作。高速计数器最多可设置12种不同的操作模式。用高速计数器可实现高速运动的精确控制。

SIMATIC S7-200 CPU22x系列PLC还设有高速脉冲输出,输出频率可达20KHz,用于PTO(输出一个频率可调,占空比为50%的脉冲)和PWM(输出占空比可调的脉冲),高速脉冲输出的功能可用于对电动机进行速度控制及位置控制和控制变频器使电机调速。

6.3.1 占用输入/输出端子

1. 高速计数器占用输入端子

CPU224有六个高速计数器,其占用的输入端子如表6-5所示。

表6-5 高速计数器占用的输入端子

高速计数器 HSC0 HSC1 HSC2 HSC3 HSC4 HSC5 使用的输入端子 I0.0, I0.1, I0.2 I0.6, I0.7, I1.0, I1.1 I1.2, I1.3, I1.4, I1.5 I0.1 I0.3, I0.4, I0.5 I0.4 各高速计数器不同的输入端有专用的功能,如:时钟脉冲端、方向控制端、复位端、起动端。

注意:同一个输入端不能用于两种不同的功能。但是高速计数器当前模式未使用的输入端均可用于其他用途,如作为中断输入端或作为数字量输入端。例如,如果在模式2中使用高速计数器HSC0,模式2使用I0.0和I0.2,则I0.1可用于边缘中断或用于HSC3。

2. 高速脉冲输出占用的输出端子

S7-200有PTO、PWM两台高速脉冲发生器。 PTO脉冲串功能可输出指定个数、指定周期的方波脉冲(占空比50%);PWM功能可输出脉宽变化的脉冲信号,用户可以指定脉冲的周期和脉冲的宽度。若一台发生器指定给数字输出点Q0.0,另一台发生器则指定给数字输出点Q0.1。当PTO、PWM发生器控制输出时,将禁止输出点Q0.0、Q0.1的正常使用;当不使用PTO、PWM高速脉冲发生器时,输出点Q0.0、Q0.1恢复正常的使用,即由输出映像寄存器决定其输出状态。

6.3.2 高速计数器的工作模式

1. 高速计数器的计数方式

(1)单路脉冲输入的内部方向控制加/减计数。即只有一个脉冲输入端,通过高速计数器的控制字节的第3位来控制作加计数或者减计数。该位=1,加计数;该位=0,减计数。如图6-6所示内部方向控制的单路加/减计数 。

(2)单路脉冲输入的外部方向控制加/减计数。即有一个脉冲输入端,有一个方向控制端,方向输入信号等于1时,加计数;方向输入信号等于0时,减计数。如图6-7所示外部方向控制的单路加/减计数。

(3)两路脉冲输入的单相加/减计数。即有两个脉冲输入端,一个是加计数脉冲,一个是减计数脉冲,计数值为两个输入端脉冲的代数和。如图6-8所示。

(4)两路脉冲输入的双相正交计数。即有两个脉冲输入端,输入的两路脉冲A 相、B相,相位互差90°(正交),A 相超前B相90°时,加计数;A 相滞后B相90°时,减计数。在这种计数方式下,可选择1x 模式(单倍频,一个时钟脉冲计一个数)和4x 模式(四倍频,一个时钟脉冲计四个数)。如图6-9,图6-10所示。

2. 高速计数器的工作模式

高速计数器有12种工作模式,模式0~模式2采用单路脉冲输入的内部方向控制加/减计数;模式3~模式5采用单路脉冲输入的外部方向控制加/减计数;模式6~模式8采用两路脉冲输入的加/减计数;模式9~模式11采用两路脉冲输入的双相正交计数。

S7-200 CPU224有 HSC0-HSC5六个高速计数器,每个高速计数器有多种不同的工作模式。HSC0和HSC4有模式0、1、3、4、6、7、8、9、10;HSC1和HSC2有模式0~模式11;HSC3和HSC5有模式只有模式0。每种高速计数器所拥有的工作模式和其占有的输入端子的数目有关。如表6-6所示。

表6-6 高速计数器的工作模式和输入端子的关系及说明 HSC编号及其对应 的输入 端子 HSC模式 功能及说明 HSC0 HSC4 HSC1 HSC2 HSC3 I0.0 I0.3 I0.6 I1.2 I0.1 占用的输入端子及其功能 I0.1 I0.4 I0.7 I1.3 × I0.2 I0.5 I1.0 I1.4 × × × I1.1 I1.5 × HSC5 0 1 2 3 4 5 6 7 8 9 10 11 单路脉冲输入的内部方向控制加/减计数。控制字SM37.3=0,减计数; SM37.3=1,加计数。 单路脉冲输入的外部方向控制加/减计数。方向控制端=0,减计数; 方向控制端=1,加计数。 两路脉冲输入的单相加/减计数。 加计数有脉冲输入,加计数; 减计数端脉冲输入,减计数。 两路脉冲输入的双相正交计数。 A相脉冲超前B相脉冲,加计数; A相脉冲滞后B相脉冲,减计数。 I0.4 脉冲输入端 × × × × 方向控制端 × × 复位端 复位端 × 复位端 复位端 × 复位端 复位端 × 复位端 复位端 × × × 起动 × × 起动 × × 起动 × × 起动 脉冲输入端 加计数脉冲输入端 减计数脉冲输入端 A相脉冲输入端 B相脉冲输入端 说明:表中×表示没有

选用某个高速计数器在某种工作方式下工作后,高速计数器所使用的输入不是任意选择的,必须按系统指定的输入点输入信号。如HSC1在模式11下工作,就必须用I0.6为A相脉冲输入端,I0.7为 B相脉冲输入端,I1.0为复位端,I1.1为起动端。

6.3.3 高速计数器的控制字和状态字

1. 控制字节

定义了计数器和工作模式之后,还要设置高速计数器的有关控制字节。每个高速计数器均有一个控制字节,它决定了计数器的计数允许或禁用,方向控制(仅限模式0、1和2)或对所有其他模式的初始化计数方向,装入当前值和预置值。控制字节每个控制位的说明如表6-7所示。

2. 状态字节

每个高速计数器都有一个状态字节,状态位表示当前计数方向以及当前值是否大于或等于预置值。每个高速计数器状态字节的状态位如表6-8所示。状态字节的0-4位不用。监控高速计数器状态的目的是使外部事件产生中断,以完成重要的操作。

表6-7 HSC的控制字节

HSC0 SM37.0 HSC1 SM47.0 SM47.1 SM47.2 SM47.3 SM47.4 SM47.5 HSC2 SM57.0 SM57.1 SM57.2 SM57.3 SM57.4 SM57.5 HSC3 HSC4 SM147.0 HSC5 说明 复位有效电平控制: 0=复位信号高电平有效;1=低电平有效 起动有效电平控制: 0=起动信号高电平有效;1=低电平有效 正交计数器计数速率选择: 0=4×计数速率;1=1×计数速率 计数方向控制位: 0 = 减计数1 = 加计数 向HSC写入计数方向: 0 = 无更新1 = 更新计数方向 向HSC写入新预置值: 0 = 无更新1 = 更新预置值 SM37.2. SM37.3 SM37.4 SM37.5 SM147.2 SM137.3 SM147.3 SM157.3 SM137.4 SM147.4 SM157.4 SM137.5 SM147.5 SM157.5 SM37.6 SM47.6 SM57.6 SM137.6 SM147.6 SM157.6 向HSC写入新当前值: 0 = 无更新1 = 更新当前值 HSC允许: 0 = 禁用HSC 1 = 启用HSC SM37.7 SM47.7 SM57.7 SM137.7 SM147.7 SM157.7 表6-8 高速计数器状态字节的状态位

HSC0 HSC1 HSC2 HSC3 HSC4 HSC5 说明 当前计数方向状态位: 0 = 减计数;1 = 加计数 当前值等于预设值状态位: 0 = 不相等;1 = 等于 当前值大于预设值状态位: 0 = 小于或等于;1 = 大于 SM36.5 SM46.5 SM56.5 SM136.5 SM146.5 SM156.5 SM36.6 SM46.6 SM56.6 SM136.6 SM146.6 SM156.6 SM36.7 SM46.7 SM56.7 SM136.7 SM146.7 SM156.7 6.3.4 高速计数器指令及举例

1. 高速计数器指令

高速计数器指令有两条:高速计数器定义指令HDEF、高速计数器指令HSC。指令格式

如表6-9所示。

(1)高速计数器定义指令HDEF。指令指定高速计数器(HSCx)的工作模式。工作模式的选择即选择了高速计数器的输入脉冲、计数方向、复位和起动功能。每个高速计数器只能用一条“高速计数器定义”指令。

(2)高速计数器指令HSC。根据高速计数器控制位的状态和按照HDEF指令指定的工作模式,控制高速计数器。参数N指定高速计数器的号码。

表6-9 高速计数器指令格式

LAD STL 功能说明 HDEF HSC,MODE 高速计数器定义指令HDEF HSC N 高速计数器指令HSC HSC:高速计数器的编号,为常量(0~5)N:高速计数器的编号,为常量(0~5)操作数 数据类型:字节 MODE工作模式,为常量(0~11) 数据类型:字节 SM4.3(运行时间),0003(输入点冲突), SM4.3 (运行时间),0001(HSC在ENO=0的出错条件 0004(中断中的非法指令),000A(HSC重复定义) HDEF之前),0005(HSC/PLS同时操作) 数据类型:字 2. 高速计数器指令的使用

本文来源:https://www.bwwdw.com/article/v7fv.html

Top