第5章应用指令

Download Report

Transcript 第5章应用指令

第5章
应用指令
5.1 程序控制类指令
5.2 特殊指令
5.1 程序控制类指令







5.1.1结束及暂停指令
5.1.2看门狗指令
5.1.3跳转指令
5.1.4子程序指令
5.1.5程序循环指令
5.1.6顺序控制继电器指令
5.1.7与ENO指令
返回本章首页
5.1.1 结束及暂停





1. 结束指令
结束指令有两条:END和MEND。两条指令在
梯形图中以线圈形式编程。
END,条件结束指令。使能输入有效时,终
止用户主程序。
MEND无条件结束指令。无条件终止用户程序
的执行,返回主程序的第一条指令。
用Micro/Win32编程时,编程人员不需手工
输入MEND指令,而是由软件自动加在主程序
结尾。指令格式:END
(无操作数)




2. 暂停指令
STOP,暂停指令。使能输入有
效时,该指令使主机CPU的工作
方式由RUN切换到STOP方式,
从而立即终止用户程序的执行。
STOP指令在梯形图中以线圈形
式编程。指令不含操作数。指令
的执行不考虑对特殊标志寄存器
位和能流的影响。
指令格式:STOP (无操作数)
返回本节
5.1.2





看门狗
WDR,看门狗复位指令。当使能输入有效时,执行
WDR指令,每执行一次,看门狗定时器就被复位一
次。
S7的看门狗WDR的设定值为300ms,有时在循环
或调用子程序,响应中断服务程序时,扫描时间超
过300ms, WDR会认为出错。
可用本指令可用以延长扫描周期,从而可以有效避
免看门狗超时错误。
指令格式:WDR
(无操作数)
程序实例:指令STOP、END、WDR的应用如图
5.2所示。
LD
SM5.0
//检查 I/O 错误
O
SM4.3
//运行时刻检查编程
O
I0.3
//外部切换开关
STOP
//条件满足,由 RUN
// 切换到 STOP 方式
//
//
LD
I0.5
//外部停止控制
END
//停止程序执行
//
//
LD
M0.4
//用触点重新触发
WDR
A
•图5.1
//看门狗定时器
I0.2
//
停止、结束、看门狗指令
返回本节
5.1.3






跳转
1. 跳转指令
与跳转相关的指令有下面两条:
(1)跳转指令
JMP,跳转指令。使能输入有效时,使
程序流程跳到同一程序中的指定标号n
处执行。执行跳转指令时,逻辑堆栈的
栈顶值总是1。
(2)标号指令
LBL,标号指令。标记程序段,作为跳
转指令执行时跳转到的目的位置。操作
数n为0~255的字型数据。
程序实例:


某生产线对产品进行加工处理,同时用增减
计数器对成品进行计数,如果检测到100个成
品就要跳过某些控制程序直接进入小包装控
制程序;若检测到900个成品,则程序跳转到
大包装控制程序。
程序如下:
•
.
图
5
2
程
序
跳
转
实
例
5.1.4
子程序指令
编写子程序的步骤
1 .建立子程序
2. 编写子程序
3.在主程序、其他子程序、或中断程序中
调用子程序(带参数的子程序)
1. 建立子程序

可用编程软件Edit菜单中的Insert选项,选择
Subroutine,以建立或插入一个新的子程序,
同时在指令树窗口可以看到新建的子程序图
标,默认的程序名是SBR_n,编号n从0开始
按递增顺序生成,可以在图标上直接更改子
程序的程序名。在指令树窗口双击子程序的
图标就可对它进行编辑。
2. 子程序调用




(1)子程序调用和返回指令
SBR1
子程序调用
EN
子程序条件返回
( RET )
(2)注意事项




可有64个子程序,可以嵌套子程序,最大
嵌套深度为8
子程序内不能用END指令
不允许直接递归(自己调用自己),可间
接递归
(3)应用实例

图5.3所示的程序实现用外部控制条件
分别调用两个子程序。
LD
I0.0
//使能输入
CALL
S2
//调用子程序 S2
//
LD
I0.0
//使能输入
CALL
SBR_1
//调用子程序
//SBR_1
•图5.3 子程序调用举例
3. 带参数的子程序调用

(1)子程序参数---最多可带16个参数,每
个参数包含:




(2)参数子程序调用的规则



变量名
变量类型 (IN类型、IN/OUT、OUT)
数据类型 (位、字节、字、双字、实型)
参数与局部变量标的定义相匹配
参数顺序是:输入,输入/输出,输出
(3)程序实例
LD
I0.0
//装入常开触点
CALL
SBR_0, I0.2, VB20, VD30 //
//调用子程序 SBR_0
//含有 3 个参数:
//分别为布尔、字节
//和双字型
•图5.5 带参数的子程序调用
返回本节

以上面指令为例,局部变量表分配如表
5.1所示,程序段如图5.5所示。
•表5.1 局部变量表例
5.1.5
程序循环
计数值
1.循环开始FOR
初值
每执行一次循环计数值 终值
加1,当计数值大于
终值,则循环终止。
2.循环结束 NEXT
3. 程序实例
FOR
EN
ENO
INDX
INIT
FINAL
(NEXT)
LD
M0.0 // 使能输入
FOR
VW10, +1, +20 //循环开始
//与第 2 个 NEXT
//之间为一级循环体
LD
M0.1
//使能输入
FOR
VW20, +1, +5
//循环开始
//与第 1 个 NEXT
//之间为二级循环体
•图5.6
程序循环(1)
LD
I0.0
//使能输入
CALL
SBR_0
//调用子程序 0
//本梯级为二级
//循环体的功能段
NEXT
//循环结束指令
LD
SM0.0
//使能输入
INCW
VW100
//字增指令
//每执行一次一级
//循环体,VW100
//的值增 1
NEXT
•图5.6
//循环结束指令
程序循环(2)
返回本节
5.1.7



顺序控制继电器
顺序控制继电器S是专门用于编写顺序控
制程序(常称为步进控制)的。
所谓顺序控制,使生产过程按生产工艺
的要求预先安排的顺序自动地进行生产
的控制方式。
一个步进控制程序是由若干个SCR段组
成,每个SCR段对应步进控制中的一个
功能控制步。








Sx.y
1. 顺序继电器指令
SCR
LSCR Sn
(1)段开始指令
功能:标记一个SCR段的开始,操作数是顺序继电
器Sx.y(如S0.0)。
当顺序继电器Sx.y=1启动SCR x.y的顺序程序。即允
Sn
许该SCR段工作。
(SCRT)
SCRT Sn
(2)段转移
功能:是当Sx.y=1,将当前的SCR段停止,切换到下
一个SCR 。其操 作数为 下一个 SCR的标 志位 ( 如
Sn
S0.1)
(SCRE)
SCRE
(3)段结束
功能:标记一个段的结束。


本例是用顺序
2. 程序实例
继电器实现的
顺序控制中的
一个步的程序
段,这一步实
现的功能是使
两个电机M1和
M2 起 动 运 行
20秒后停止,
切换到下一步。
程 序 如 图 5.7
所示。
LSCR
S0.5
//由 S0.5 控制的
//顺序步的开始
//
LD
SM0.0
//装入常开触点
S
Q1.2, 2
//将 Q1.2 和 Q1.3
//置 1
TON T50, +200
//通电延时
//本步的持续时间
//为 20s
LD
T50
//延时时间到
//作为切换条件
SCRT
S0.6
//步转移
//切换到下一步
//同时关本步
//
SCRE
//本步结束标志
返回本节
3. 结构形式






(1)顺序结构
(2)分支结构
选择性分支
并发性分支
(3)循环结构
(4)复合结构
(1)顺序结构
I0.0
Q0.0
S0.1
( )
I0.1
Q0.1
S0.2
( )
I0.2
S0.3
Q0.2
( )
各顺序控制段的转换不带
分支和汇合的顺控过程。
 将复杂的控制分解若干
个独立控制功能步,用
方框表示,根据动作顺
序用箭头将各方框连接
起来,在相邻的两步之
间用段横线表示转换条
件。在每步的右边画上
要执行的控制程序。
(1)顺序结构
(2)分支结构
1)选择分支
31
执行完1步,当A或D
或G或I为1,1步复位, 23
2或4或6或7开始执行;
A
D
43
B
8步执行,由C或F或H
或J为1决定,执行时
顺序继电器置1,3、
5、6、7顺序继电器
复位
G
3
36
E
C
F
38
图5.9
37
H
53
选择性分支
I
J
用水平双线表示并行分支
开始和结束。



2)并发性分支
当A为1,1步复位,
2467同时置位开始
工作。
为提高工作效率,
各支路的工作时间
尽量接近一致。
图5.10
并发性分支
(3)循环结构

图
5
11
.
循环结构用于一
个顺序过程的多
次或往复执行。
功能图画法如图
5.11所示,这种
结构可看作是选
择性分支结构的
一种特殊情况。
循
环
结
构
(4)复合结构
I1.2
M 00.0
3
几种结构组合
Q0.0
I0.0
M 00.1
3
Q0.1
Q0.2
M 00.6
3
I0.6
I0.2
I0.1
M 00.2
3
Q0.2
M 00.4
3
I0.3
M 00.3
3
Q0.4
M 00.7
3
Q0.5
I1.0
I0.5
Q0.3
M 01.0
3
µÈ´ý
I0.4
M 00.5
3
µÈ´ý
Q0.0
I1.1
M 01.1
3
图5.12
Q1.0
功能流程图举例
返回本节
5.1.8


与ENO指令
AENO,与ENO指令。ENO是梯形图和功能框
图编程时指令盒的布尔能流输出端。如果指
令盒的能流输入有效,同时执行没有错误,
ENO就置位,将能流向下传递。当用梯形图编
程时,且指令盒后串联一个指令盒或线圈,
语句表语言中用AENO指令描述。
指令格式:AENO(无操作数)
•AENO指令只能在语句表中使用,将栈顶值
和ENO位的逻辑与运算,运算结果保存到栈
顶。程序如图5.13所示。
LD
I0.0
//使能输入
+I
VW200, VW204
//整数加法指令,VW200+VW204=VW204
//与 ENO 指令,判断整数加法指令执行是否出错
AENO
ATCH
INT_0, 10
//如果加法指令执行正确,则将中断程序 INT_0
//与中断事件号 10 连接,并对该中断事件开放
•图5.13
与ENO指令
返回本节
5.2 特殊指令






5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
时钟指令
中断
通信
高速计数
高速脉冲输出
PID回路指令
返回本章首页
5.2.1 时钟指令
首地址




VB300
READ_RTC
EN
T
ENO
VB300
SET_RTC
EN
T
ENO
1. 读实时时钟
TODR T
TODW T
TODR,读实时时钟指令。当使能输入有效时,
系统读当前时间和日期,并把它装入一个8字
节的缓冲区。
2. 写实时时钟
TODW,写实时时钟指令。用来设定实时时钟。
当使能输入有效时,系统将包含当前时间和
日期,一个8字节的缓冲区将装入时钟。
•表5.2
时钟缓冲区格式




程序实例
控制要求:
编写一段程序,可实现读、写实时时钟,并以
BCD码显示分钟。时钟缓冲区从VB100开始。
程序中的子程序SBR_0为写时钟子程序,将当
前时间写入从VB100开始的8字节时间缓冲区,
时间设置如下表5.3所示。程序实现:读写时
钟程序如图5.9所示。
LD I0.4 //装入触点
EU
//上跳沿触发
CALL SBR_0 //调用子程序
LD SM0.0
//运行有效
TODR VB100 // 从 VB100
//读时钟值
MOVB VB104, VB0 //传送指令
SEG VB0,QB0 //将分钟值低位
//从QB0输出
SRB VB0,4
SEG VB0,QB1
//右移4位
//将分钟值低位
//从QB1输出
子程序SBR_0
//作用为写时钟
5.2.2 中断



1. 中断源
(1)中断源及种类
中断源,即中断事件发出中断请求的来源。
S7-200可编程序控制器具有34个中断源,每
个中断源都分配一个编号用以识别,称为中
断事件号。这些中断源大致分为三大类:通
信中断、输入输出中断和时基中断。



(2)中断优先级
中断优先级由高到低依次是:通信中断、输
入输出中断、时基中断。每种中断中的不同
中断事件又有不同的优先权。
主机中的所有中断事件及优先级如表5.4所示。
•表5.4
中断事件及优先级
ATCH
EN






ENO
INT
2. 中断操作指令
EVNT
包括:
(1)开中断指令ENI---全局开放所有被
(ENI)
连接的中断事件
(2)关中断指令DISI---全局关断所有
(DISI)
被连接的中断事件
(3)中断连接指令ATCH
功能:建立一个中断事件EVNT与一个
标号为INTn中断服务程序联系,并对该
中断事件开放。





(4)中断分离指令DTCH
功能:取消某个中断事件EVNT与所有中断程序的关
联,并对该事件关中断。
(5)中断返回指令RETI和CRET
有条件返回
无条件返回
注意事项
中断服务程序中,不能使用开中断指令ENI、关中
断指令DISI、定义高速计数器指令HDEF、步进开始
指令LSCR、条件结束指令END。
程序实例




(3)程序实例
控制要求:
程序实现的功能是
用I0.4 调用I0.1输 入
点的上升沿中断,
若发现I/O错误,则
禁止本中断,用外
部条件I0.5可以禁止
全局中断。
程序实现:本程序
如图5.10所示。
LD
I0.4
ATCH
INT_1, 2
//使能输入
//中断调用
//中断程序
//为 INT_1
//事件号为 2
ENI
//全局开中断
//
LD
SM5.0
//检查 I/O 错
DTCH
2
//若 I/O 有错
//断开本中
//断连接
LD
DISI
I0.5
//外部条件
//全局中断
//禁止
•图5.10
中断调用程序




3. 中断程序
(1)构成
中断程序必须由三部分构成:中断程序标号、
中断程序指令和无条件返回指令。
(2)编制方法




建立中断程序INT n
在INT n中编写其服务程序
编写中断连接指令
允许中断
返回本节
温度模拟量数据采集实例
0~200度范围
定时中断0,设定100ms,在中断
服务程序中进行数据采集和变换
2
测量的实际温度=(AIW-6552)/[(32760-6552)/200]
复习思考题
测量的实际温度=(AIW-6552)/[(32760-6552)/200]


一个温度检测系统,用Pt100热电阻,测
温范围为0~200度(电流输出),如测得环
境温度为35度,问A/D转换后的数字量?
0~200度 对应 4~20mA
12为数字量
0
0
1
1
0
0
1
1
0
0
1
1
32760
 4  6552  1100110011000
20
0
0
0
215  1  7  32760
12为数字量
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
5.2.3






通信
通信指令包括:
XMT,自由口发送指令
RCV,自由口接收指令
NETR,网络读指令
NETW,网络写指令
GPA,获取口地址指令
一、S7-200的网络通信
字符数据格式
(1)10位字符数据
传送数据由1个起始位、8个数据位、无校验位、一
个停止位组成。传送速率一般为9600波特。
(2)11位字符数据
传送数据由1个起始位、8个数据位、1个偶校验位、
一 个 停 止 位 组 成 。 传 送 速 率 一 般 为 9600 波 特 或
19200波特。

S7-200被默认为是从站。在采用PPI通信协议时,
若设置为PPI主站模式,PLC主机可以在RUN工作
方式下为主站,可以用通信指令读取其他PLC主机
的数据。
通信协议控制寄存器
SMB30控制和设置通信端口0,如果PLC主机上有通
信端口1,则用SMB130来进行控制和设置。 SMB30
和SMB130的各位及其的含义如下:
将特殊标志寄存器中的SMB30和SMB130的低2位
置为2#10,其他位为0,即SMB30和SMB130的值
为16#2,则可以控制将S7-200 CPU设置为PPI主站
模式。

(1)PP位:奇偶选择
(2)D位:有效位数
(3)BBB位:自由口波特率
(4)MM位:协议选择
MM:00=PPI从站模式
01=自由口协议
10=PPI主站模式
11=保留
网络通信指令






在S7-200的PPI主站模式下,网络通信指令有两条:
1 网络读指令(NETR)
功能:EN有效通过端口PORT从远程设备接收数据,
并形成数据表。
NETR指令最多可以从远程设备上接受16字节的信
息。
2网络写指令(NETW)
功能:EN有效通过端口PORT将数据表TBL中的数
据发送到远程设备。最多可以向远程设备发送16字
节的信息。
NETR
EN
ENO
NETW
EN
TBL
TBL
PORT
PORT
ENO
传送数据表
(1)数据表格式
 执行网络读写指令时,PPI主站与从站之间的
数据以数据表的格式传送。传送数据表的格
式描述如表5.5示。
表5.5 传送数据表格式


(2)状态字节
传送数据表中的第一个字节为状态字节,
各位及其的含义如下:
D—完成状态。D=0未完成,D=1完成
A—有效状态。 A=0无效,A=1有效操作已
被排队
E—错误状态。 E=0无错误,E=1有错误
0—无效位
E1、E2、E3、E4错误编码。如果执行指令
后E位为1,则由这4位返回一个错误码。这
4位组成的错误编码及含义如表5.6所示。
错误编码表
应用实例
有一简单网络,结构如下图8.17所示。其中
TD200为主站,在RUN模式下,CPU 224在用户
程 序 中 允 许 PPI 主 站 模 式 , 可 以 利 用 NETR 和
NETW指令来不断读写两个CPU 221模块中的数
据。

站2
CPU 221
站3
CPU 221
站4
站1
CPU 224
TD200
PC/PPI µçÀÂ
站2

操作要求:
CPU 221
站3
CPU 221
站4
站1
CPU 224
TD200
PC/PPI µçÀÂ
站4要读写两个远程站(站2和站3)的状态字节和
计数值(分别放在VB100和VW101中)。如果某个
远程站中的计数值达到200,站4将发生一定动作,
并将该远程站的计数值清0,重新计数。
分析:网络通信---要将站4设置为PPI主站模式

主站建立接收与发送数据表,用以读写从站
CPU 224通信端口号为0,从VB200开始设置接收
和发送缓冲区。接收缓冲区从VB200开始,发送缓
冲区从VB250开始,内容如表5.6所示。该网络通信
用户程序如图5.18所示。

表5.6 缓冲区设置
LD SM0.1 //初次扫描
MOVB 16#02, SMB30 //
//设置 CPU 224
//允许 PPI 主站
//模式
FILL
+0, VW200, 30 //
//接收和发送缓
//冲区清 0
LDN
V200.6 //网络读无效
AN
V200.5 //并且无错误
MOVB 2, VB201
//
//装入站 2 地址
NETR
VB200, 0
//
//网络读指令
//
.
MOVD &VB100,VD202 //
//装入访问站 2
//数据区的指针
//
//
MOVB 3, VB206
//
//装入读数据的
//字节数
图
5
18
网
络
程
序
实
例
(
1
)
LDN
AW=
MOVB
MOVD
//
V200.7 //
//网络读完成
VW208, +200 //
//计数值达到 200
2, VB251
//
//装入站 2 地址
&VB101,VD252
//装入发送到
//站 2 数据区
MOVB +0, VW257
//
//的指针
//将站 2 的计数
//
//值清 0
MOVB 2, VB256
//
//装入发送数据
//的字节数
NETW VB250, 0
//
//网络写指令
//
图8.18 网络程序实例(2)
返回本节
二、 自由口通信




1 相关寄存器及标志
2 自由口指令
3 应用实例
自由口通信是用户可自定义通信协议,通过
建立通信中断事件,使用通信指令控制PLC
串口与其他设备进行通信。
返回本章首页
1 相关寄存器及标志



1). 控制寄存器
2). 特殊标志位及中断
3). 特殊存储器字节
1)控制寄存器SMB30 或SMB130
用以设置自由口通信协议
SMB30控制和设置通信端口0,如果PLC主机上有通
信端口1,则用SMB130来进行控制和设置。SMB30
和SMB130的各位及其的含义如下:

(1)PP位:奇偶选择
00—无奇偶,01---偶校验,10--无奇偶,11--奇校验
(2)D位:有效位数
0---8位/字符, 1--- 7位/字符
(3)BBB位:自由口波特率 选择
000=38400 bit/s , 001=19200 bit/s , 010=9600 bit/s …….
(4)MM位:协议选择
11---保留
00—PPI从站模式,01—自由口协议, 10—PPI主站模式
2. 特殊标志位及中断
中断
接收中断:中断事件号为8(口0)和25(口1)。
发送完成中断:中断事件号为9(口0)和26(口
1)。
接 收 完 成 中 断 : 中 断 事 件 号 为 23( 口 0) 和 24
(口1)。
特殊标志位
SM4.5和SM4.6:分别用来表示口0和口1发送空
闲状态

3. 特殊存储器字节
接收信息时用到一系列特殊功能存储器。对端口0用
SMB86到SMB94;对端口1用SMB186到SMB194。各字
节及内容描述如下表5.7所示。

返回本节
2 自由口指令



1. XMT指令
XMT,发送指令。使能
输入有效时,指令初始
化通信操作,通过通信
端口PORT将数据表TBL
中的数据发送到远程设
备。
发送缓冲区(数据表)
TBL的格式如表5.8所示。
XMT



2. RCV 指令
RCV,接收指令。使能输
入有效时,指令初始化通
信操作,通过通信端口
PORT从远程设备上接收
数据并放到缓冲区(数据
表)TBL。
接收缓冲区TBL的格式如
表5.8所示。
返回本节
应用实例---例3-41


以自由口通信方式向个人计算机不断地发送
“S7-200”六个ASCII码。
编程思路:



建立通信协议-----设置SM30或SM130
建立发送数据表
编写发送指令(一秒钟发送一次)
程序如下
//初始化自由口
选9600bit/s,8为数据,无奇偶校验
//建发送数据表---将s7字符送表地址VW100
//将-2字符送表地址VW102
//将00字符送表地址VW104
//数据表长度送VB99
//发送指令
例3-42


个人计算机和PLC之间接受和发送信息。
编程思路:用接收完成中断,发送完成中断
实现接受和发送。






接收完成中断
主程序建立通信协议
建立数据表
引发定时中断
建立接收完成中断事件连接
建立发送完成中断事件连接
开中断
设有三个中断程序:接收完成中断,定时中断,
发送完成中断
通信协议设置SMB30
0 0 0 0 1 0 0 1
接收信息控制字节SMB87
EN接收允许1
SC是否用SM88检测起始信息0
EC是否用SM89检测结束信息1
IL是否用SM90检测空闲状态1
C/M定时器定时性质0
TMR是否用SM92的值终止接收0
BK是否用中断条件检测起始信息0
SM86见p124
应用实例
1. 控制要求
本程序实现的功能是,一台CPU 224作为本地PLC,
用另一台CPU 224作为远程PLC,本地PLC接收来自远
程PLC的20个字符,接收完成后,信息又发回对方。
要求有一外部脉冲控制接收任务的开始,并且任务完
成后用显示灯显示。
2. 参数设置
自由口通信模式。
通信协议为:波特率9600,无奇偶校验,每字符8位。
接收和发送用同一缓冲区,首地址为VB100。
不设立超时时间。



3. 程序
主程序如右图5.19所示。实现的功能
是初始化通信口及缓冲区,建立中断
联系,并开放全局中断。中断程序
INT_0,启动发送指令。如图5.20所
示。
LD
SM0.1
//
//初次扫描
MOVB
9, SMB30 //
//初始化自由口
ATCH
INT_1, 9
//
//发送完成时
//连接到中断
//程序 INT_1
ENI
//
//全局开中断
LD
I0.1
EU
//外部脉冲
//上跳沿
RCV VB100, 0
//
//发送指令
//缓冲区 VB100
//通信端口 0
图
5
19
.
MOVB
//波特率 9600
INT_0, 23 //
//8 位数据,无校验
//接收完成时
20, VB100 //
//连接到中断
//传送字节数 20
//程序 INT_0
//装入缓冲区首址
//
ATCH
自
由
口
通
信
例
(
主
程
序
)
LD
SM0.0
//
//运行时有效
XMT VB100, 0
//
// 发送指令
//缓冲区 VB100
//通信端口 0
图5.20 自由口通信例(中断0程序)

中断程序INT_1,发结束时输出。如图8.21所示。
LD
SM0.0
//
//运行时有效
=
Q1.0
//
//发送完成,
//经 Q1.0 显示
图5.21 自由口通信例(中断程序1)
返回本节
5.2.4
高速计数
高速计数器HSC---High-speed counter
1. 高速计数器介绍
2. 高速计数指令
3. 高速计数器的使用方法
4. 应用实例

1. 高速计数器介绍
普通计数器是按照顺序扫描的方式进行工作,
每个扫描周期中,对计数脉冲值进行一次累加,
当输入脉冲的频率比PLC扫描频率高时,则不能
准确计数。可用高速计数器。
 高速计数器最大计数频率可达20kHz,主要用于
电机转速的检测,距离检测等。
 (1)数量及编号
 高速计数器在程序中使用时的地址编号用HCn
来表示(在非程序中有时用HSCn),HC表示编
程元件名称为高速计数器,n为编号。



HCn除了表示高速计数器的编号之外,还代
表两方面的含义:高速计数器位和高速计数
器当前值(字)。编程时,从所用的指令可
以看出是位还是当前值(字) 。
不同型号的PLC主机,高速计数器的数量对
应如表5.7所示。


(2)中断事件类型
高速计数器的计数和动作可采用中断方式进
行控制。各种型号的PLC可用的高速计数器
的中断事件大致分为3类:

当前值等于预设值中断
输入方向改变中断

外部复位中断。


所有高速计数器都支持当前值等于预设值中
断。
每个高速计数器的3种中断的优先级由高到低,
不同高速计数器之间的优先级又按编号顺序
由高到低。具体对应关系如表5.8所示。
高速计数器的中断的优先级





(3)工作模式
高速计数器的工作模式共有12种。6个计数
器功能不完全一样。
可通过编程,使用定义高速计数器指令
HDEF来选定工作模式。
可分为四类:-----以HSC0为例




带内部方向控制的单相计数器(一个输入I0.0端
或加,或减)-----设置SM37.3(0减计数,1加计数)
带外部方向控制的单相计数器(两个输入,一个
I0.0计数输入,一个方向控制I0.1—0减;1加)
带增减计数器的双向计数器(两个计数输入端,
一增I0.0一减I0.1)
正交计数器两个时钟输入端A相I0.0 ,B相I0.1相
差900(A相超前B相90顺时针转动---增计数, A
相滞后B相90逆时针转动---减计数)
(4)输入端连接
•选用某个高速计数器在某种工作模式下工作,
高速计数器的输入端不是任意选择,必须按系
统指定的专用输入点。如表5.9所示。
上述输入点在不使用高速计数器时,可作为一般的数字量输入点
2. 高速计数指令




0
4

高 速 计 数 器 指 令 有 两 条 : HDEF 和
HSC。
(1)HDEF指令
HDEF,定义高速计数器指令。使能
输入有效时,为指定的高速计数器
选定一种工作模式。
梯形图指令盒中有两个数据输入端:
HSC,高速计数器编号,为0~5的常
数,字节型;MODE,工作模式,为
0~11的常数,字节型。
每个高速计数器在使用前,都要用
HDEF定义工作模式,并且只能定义
一次


4
(2)HSC指令
HSC,高速计数器指令。使能
输入有效时,根据高速计数器
特殊存储器位的状态,并按照
HDEF指令指定的工作模式,
使高速计数器设置生效并执行
计数操作。梯形图指令盒数据
输入端N:高速计数器编号,
为0~5的常数,字型。
3. 高速计数器的使用方法

每个高速计数器都有固定的特殊功能存
储器与之相配合,完成高速计数功能。
具体对应关系如表5.11所示。
反映工作状态见书表3-7
启动或关闭计数器,控制方向等
见书表3-8
状态字节

每个高速计数器都有一个状态字节,程
序运行时根据运行状况自动使某些位置
位,可以通过程序来读相关位的状态,
用以作为判断条件实现相应的操作。状
态字节中各状态位的功能如表5.12所示。
控制字节
•表5.13 控制位含义
高速计数器编程步骤:






•如:对一高速脉冲信号进行增
减计数,计数当前值达到120
产生中断,计数方向由外部信
号控制(主机CPU224)
1选择计数器及工作模式 •(1)选HSC0模式3, I0.0
计数I0.1方向控制(书P135)
2设置控制字节
•(2)SMB37---F8
3执行HDEF指令
•(3)执行HDEF指令
4设定当前值和预设值 •(4)0—SMD38,120--SMD42
5设置中断事件并全局开中断
•(5)12---INT0
•(6)执行HSC指令
6执行HSC指令
4. 应用实例1



要对一高速事件精确控制,通过对脉冲信号
进行增计数,计数当前值达到24产生中断,
重新从0计数,对中断次数进行累计。计数方
向用一个外部信号控制,并能实现外部复位。
所用的主机型号为CPU221。
设计步骤:
①选择高速计数器HSC0,并确定工作方式4。
②令SM37=16#F8 ③执行HDEF指令,输
入端HSC为0,MODE为4。④装入当前值,
令SMD38=0。⑤装入设定值,令
SMD42=24。⑥执行中断连接ATCH指令,
输入端INT为INT0,EVNT为12。

主程序、初始化子程序和中断程序分别
如图5.12、图5.13和图5.14所示。
LD
SM0.1
//初次扫描脉冲
CALL
SBR_1
//调用初始化
//子程序 SBR_1
//
•图5.12 主程序
LD
MOVB
HDEF
MOVD
SM0.0
//运行脉冲
16#F8, SMB37
//
//设置控制字节
//
//
//
0, 4
//定义高速
//计数器
//选用 HSC0
//工作模式 4
+0, SMD38
//
//当前值清 0
//
MOVD +24, SMD42 //
//将预设值 24
//入装 SMD42
//
ATCH
12
ENI
HSC
INT_0, 10
//
//中断连接指令
//中断程序为
//INT_0
//事件号为 12
//开全局中断
•图5.13
//
0 //编程计数
//器 HSC0
//使设置生效
初始化子程序
LD
INCD
MOVD
MOVB
HSC
•图5.14 中断程序
SM0.0
//运行
//脉冲
VD100 //
//双字增指令
//对中断次数
//进行累计
//存于 VD100
+0, SMD38 //
//将 HSC0 当
//前值清 0
//
16#C8, SMB37
//重设控制字
//节 SMB37
//不重装设
//定值
0
//编程 HSC0
//使设置重新
//生效
返回本节
应用实例2


六层电梯平层信号产生。用高速计数器测距
离,了解轿厢当前位置和平层信号产生。
见附加程序。
5.2.5






高速脉冲输出
在需要对负载进行高精度控制时,
如对步进电机的控制,需要对步进
电机提供一系列的脉冲,高速脉冲
输出指令就是为满足这种需求而开
发的。
1. 高速脉冲输出介绍
(1)输出端子的确定
(2)高速脉冲输出的形式
(3)相关寄存器
(4)脉冲输出指令
(1)输出端子的确定




S7-200只有输出继电器Q0.0和Q0.1具有高速
脉冲输出功能。
不用高速脉冲时,作普通的数字量输出点用。
(2)高速脉冲输出的形式
高速脉冲输出有两种的形式:



高速脉冲序列(或称高速脉冲串)输出PTO
脉冲宽度调制输出PWM
可通过特殊继电器来定义输出的形式。
(3)相关的寄存器

每个高速脉冲发生器对应一定数量特殊标志
寄存器,这些寄存器包括控制字节寄存器、
状态字节寄存器和参数数值寄存器,用以控
制高速脉冲的输出形式、反映输出状态和参
数值。各寄存器分配如表5.14所示。
状态字节

每个高速脉冲输出都有一个状态字节
(SMB66或SMB76 ),程序运行时根据运行
状况自动使某些位置位,可以通过程序来读
相关位的状态,用以作为判断条件实现相应
的操作。状态字节中各状态位的功能如表
5.15所示。
控制字节

每个高速脉冲输出都对应一个控制字节,通
过对控制字节中指定位的编程,可以根据操
作要求设置字节中各控制位,如脉冲输出允
许、PTO/PWM模式选择、单段/多段选择、
更新方式、时间基准、允许更新等。控制字
节中各控制位的功能如表5.16所示。
脉冲输出指令



PLS指令
功能:EN有效,检测各相关寄存器的状态,
激活由控制字节定义的高速脉冲输出操作。
Q取0或1对应Q0.0和Q0.1
PLS
EN
0
Q
ENO
2. 高速脉冲串输出PTO




(1)周期和脉冲数
(2)PTO的种类
(3)中断事件类型
(4)PTO的使用
(1)周期和脉冲数


SM67.3
周期:单位可以是微秒μs或毫秒ms;为16位
无符号数据,周期变化范围是50~65535μs或
2~65535ms,通常应设定周期值为偶数,若
设置为奇数,则会引起输出波形占空比的轻
微失真。如果编程时设定周期单位小于2,系
统默认按2进行设置。
脉冲数:用双字长无符号数表示,脉冲数取
值范围是1~4294967295之间。如果编程时指
定脉冲数为0,则系统默认脉冲数为1个。
(2)PTO的种类
PTO方式中,如果要输出多个脉冲串,允许脉冲串
进行排队,形成管线,当前输出的脉冲串完成之后,
立即输出新脉冲串,这保证了脉冲串顺序输出的连
续性。
 根据管线的实现方式分:
 单段管线---管线中只能存放一个脉冲串的控制参数
(入口地址)。在当前脉冲串输出期间,要对下一
个脉冲串的相关寄存器进行更新。当前脉冲串输出
完成,即可开始输出新脉冲串。
 多段管线---输出多个脉冲串。需要在变量存储区建
包络表,在包络表中存储各脉冲串的参数 ,当执行
PLS指令时,CPU自动按顺序从包络表中调出各个脉
冲串的入口地址,连续输出各个脉冲串。

多管线PTO

包络表由包络段数和各段构成。每段长度为8
个字节,包括:脉冲周期值(16位)、周期
增量值(16位)和脉冲计数值(32位)。以
包络3段的包络表为例,包络表的结构如表
5.17所示。
(3)中断事件类型

高速脉冲串输出可以采用中断方式进行控制,
各种型号的PLC可用的高速脉冲串输出的中断
事件有两个,如表5.18所示。
(4)PTO的使用----编程要点

1.
2.
3.
4.
5.
6.
使用高速脉冲串输出时,要按以下步骤进行:
确定脉冲串的输出端及管线的实现方式(单段
多段)
设置控制字节---将控制字写入SMB67或SMB77
写入周期值、周期增量值和脉冲数
周期增量值= (Tn+1-Tn)/N
其中:Tn-------该段开始的周期时间
Tn+1------该段结束的周期时间
N------该段脉冲数
装入包络的首地址
设置中断事件并全局开中断
执行PLS指令
3. 应用实例
频率(KHz)
B
A
2



C
10
D
时间
(1)控制要求
步进电机转动过程中,要从A点加速到B点后恒速
运行,又从C点开始减速到D点,完成这一过程时
用指示灯显示。电机的转动受脉冲控制,A点和D
点的脉冲频率为2kHz,B点和C点的频率为10kHz,
加速过程的脉冲数为400个,恒速转动的脉冲数
为4000个,减速过程脉冲数为200个。
工作过程如图5.15所示。
4000个
脉冲
频率(KHz)
400个
脉冲
10
B
A
200个
脉冲
C
D
2
时间
•图5.15
步进电机工作过程







(2)分析
1用Q0.0,多管线方式—3段
确定脉冲发生器及工作模 (AB段、BC段、 CD段 )
式
2确定周期值的时基单位,
设置控制字节
BC段频率最大10KHZ,对应
的周期值为100us,时基单位
写入周期值、周期增量值 为us,所以SMB67---16#A0
和脉冲数
3确定初始周期,周期增量
装入包络表首地址
•初始周期:求每段的频率
的倒数可得AB段500us,BC段
中断调用
100us,CD段100us
执行PLS指令
•周期增量= (Tn+1-Tn)/N ,AB
段-1,BC段0,CD段2
√
4设包络表首地址VB400建立
√
包络表。
包络表


(3)程序实现
本控制系统主程序如下图5.16所示。初始化
子程序SBR_1如图5.17所示。包络表子程序
如图5.18所示。中断程序如图5.19所示。
LD
SM0.1
//初次扫描
R
Q0.0, 1
//复位高速
//脉冲,使初值
//为低电位
CALL
SBR_1
//调用初始
//化子程序 SBR_1
•图5.16
主程序
LD
SM0.0
//运行脉冲
MOVB 16#A0, SMB67 //设置控制字节
//多段 PTO
//增量单位 us
//允许 PTO
MOVW +400, SMW168 //装入包络表的首地
// 址
CALL SBR_0
//调用子程程序 SBR_0
//建立包络表
ATCH INT_0, 19
ENI
PLS
//中断连接
//事件号 19
//开全局中断
0
•图5.17
//启动 PTO 脉冲
//由 Q0.0 输出
//
初始化子程序SBR_1
•
LD
SM0.0
// 运行脉冲
MOVB 3, VB400 //
//定义开始字节
//为VB400
//
3装入段数
MOVW+500, VW401 //
//第1段周期初
//值为500ms
//
//
.
图
5
18
MOVW-1, VW403 //
//第1段周期
//增量为-
1
MOVD +400, VD405 //
//第1段脉冲数
//为400个
MOVW0, VW411 //
//第2段周期
//增量为
0
MOVD +4000, VD413
//
//第2段脉冲数
//为4000个
SBR_
MOVW+100, VW409 //
//第2段周期初
//值为100ms
//
//
包
络
表
子
程
序
0
(
1
)
MOVW
+100, VW417
//
//第 3 段周期初
//值为 100ms
//
//
MOVW
+2, VW419
//
//第 3 段周期
//增量为+2ms
MOVD
+200, VD421
//
//第 3 段脉冲数
//为 200 个
•图5.18 包络表子程序SBR_0(2)
LD
SM0.0
//运行脉冲
=
Q0.6
//脉冲串全部输出
//完成后将 Q0.6 置 1
•图5.19 中断程序
4. 宽度可调脉冲输出PWM





从Q0.0或Q0.1输出周期固定,脉冲宽度变化的
脉冲信号
(1)周期和脉冲宽度
周期同PTO。脉冲宽度为16为无符号数,脉冲
宽度增量单位为us或ms。范围0~65535,占空
比为0~100%。当脉冲宽度大于或等于周期时
输出将连续接通。为0时,输出一直被关断。
(2)更新方式
根据在改变脉冲宽度时是否需要改变时间基准,
可分为同步更新和异步更新。
返回本节


同步更新:脉宽的改变和PWM脉冲的新周期同步
发生。适用于不需要改变时间基准的情况,常用
中断实现。
异步更新:需要改变时间基准时使用。异步更新
可能会导致PWM功能暂时失效,造成被控装置的
振动。
(3)PWM的使用---编程要点


确定高速PWM的输出端(Q0.0或
Q0.1)
初始化设置




设置控制字节---将控制字写入SMB67
或SMB77
写入周期值SMW68(78)、
写入脉冲宽度值SMW70(80)
执行PLS指令
应用举例--
(书例3-46 )
将Q0.1设置为PWM输出形式,脉冲周期固定
为10s,初始脉冲宽度1000ms,当M0.0上升
沿有效脉冲宽度改为5000ms。

//控制字节设置,允许PWM,选择PWM单段操
作,同步更新,时基1ms脉冲数不更新,脉冲
宽度更新,周期更新

//设置周期10s,

设置脉冲宽度1000

执行PLS,Q0.1输出PWM

重装控制字节,设为禁止更新周期后可更新脉
冲宽度


//新脉冲宽度设为
5000ms
//执行PLS
5.2.6
PID回路指令
在过程控制中经常涉及到模拟量的控制,构
成闭环控制系统。而对模拟量的处理,除
对模拟量的采样检测外,还要对采样值进
行PID运算。根据运算结果形成对模拟量
的控制作用。
1. PID算法
2. PID指令
3. 应用实例
1. PID算法


1. PID算法
如果一个PID回路的输出M(t)是时间的函数,
则可以看作是比例项、积分项和微分项三部
分之和。即:
t
de
M t   K c e  K c 0edt  M 0  K c
dt
•其中:Kc为回路增益,M0为回路输出的初始值
•变成数字离散形式
M n  K C en  K I  ei  M 0  K D en  en1 
n
i 1
M n  K C en  K I  ei  M 0  K D en  en1 
n
i 1








Mn----第n个采样时刻计算出来的回路控制输出值
en ----第n个采样时刻回路偏差
en -1 ----第n-1个采样时刻回路偏差
KC ----回路增益
KI ----积分项的比例系数
KD ----微分项的比例系数
M0 ----初始值
M n  MPn  MI n  MDn
上式可表示为
M n  MPn  MI n  MDn




Mn----第n个采样时刻PID计算值
MPn ----第n个采样时刻比例项值
MIn ----第n个采样时刻积分项值
MDn ----第n个采样时刻微分项值
MPn  KC (SPn  PVn )
MI n  KCTs / TI (SPn  PVn )  MX
TS为采样周期
TI为积分时间常数
TD为微分时间常数
SPn第n个采样时刻的给
定值
VPn第n个采样时刻过程
变量值
MDn  KCTD / TS ( PVn1  PVn )
MX第n-1个采样时刻积分
项的值
TS
M n  K C SPn  PVn   K C SPn  PVn 
TI
TD
 MX  K C  PVn1  PVn 
TS
采样后的过程变量与给定值的偏差,
经上式PID运算出控制量。
上式共包含9个参数,在执行PID指令前
要建立一个PID参数表----初始化处理。
PID参数表格式
地址偏
移量
PID参数
数据格式
I/O类型
0
PVn
双字、实数 I
4
SPn
I
给定值,0.0~1.0
8
Mn
I/O
输出值,0.0~1.0
12
KC
I
回路增益,正负长值
16
TS
I
采样周期,单位s,正数
20
TI
I
积分时间常数,单位min,正数
24
TD
I
微分时间常数,单位min,正数
28
MX
I/O
积分项前值,0.0~1.0
32
PVn-1
I/O
最近一次PID运算的过程变量
描述
过程变量的当前值,0.0~1.0


回路表初始化
程序实例:
如果给定值为
0.5,Kc为0.4,
Ts 为 0.2 秒 , Ti
为 30 分 钟 , Td
为 15 分 钟 , 则
可以建立一个
子 程 序 SBR0 用
来对回路表进
行初始化。表
首 地 址 VD200
程 序 如 图 5.20
所示。
LD SM0.0//运行脉冲
MOVR0.5, VD204 //
//开始位置
//为VD200
//在VD204
装
//入设定值
MOVR0.4, VD212 //
//装入回路增益
//值为
0.4
//
//
MOVR0.2, VD216 //
//装入采样时间
//为0.2秒
MOVR30.0, VD220 //
//装入积分时间
//为30分钟
//
MOVR15.0, VD224 //
//装入微分时间
//为15分钟
•图5.20 回路表初始化子程序SBR0
2. PID指令




PID,PID回路指令。使能输入有效时,
该指令利用回路表中的输入信息和组态
信息,进行PID运算。梯形图的指令盒
中有2个数据输入端:TBL,回路表的起
始地址,是由VB指定的字节型数据;
LOOP,回路号,是0~7的常数。
指令影响的特殊标志存储器位:SM1.1
(溢出)。
使 能 流 输 出 ENO 断 开 的 出 错 条 件 :
SM1.1(溢出);SM4.3(运行时间);
0006(间接寻址)。
指令格式:PID
TBL, LOOP
PID的组合选择

在很多控制场合,往往只需要PID中的1种或
2种运算,如:PI、PD控制等。不同运算功
能的组合选择可通过设定不同的参数来实现。



不需要积分运算-----TI=无穷大
不需要微分运算-----TD=0
不需要比例运算-----KC=0(积分和微分项KC=1)
输入模拟量的转换及标准化

用PID指令通常要将过程变量和给定的实际值标准
化为0.0~1.0的相对值格式。转换公式:
RNorm 




RRaw
S pan
 Offset
RNorm工程实际值的标准化值
RRaw工程实际值的实数形式值
Span最大允许值减去最小值,取32000(单极性)
或64000 (双极性)
Offset取0(单极性)或0.5 (双极性)
输出模拟量转换为工程实际值

输出产生的控制作用是0.0~1.0标准化值,需
要转换成工程实际值。
Rscal  M n  Offset S pan

Rscal工程标定的过程变量的实数格式
PID控制方式

S7-200没有内装自动控制和手动控制方式


当PID指令使能有效就可以执行PID运算---自动控
制方式
当PID指令使能无效就不执行PID运算---手动控制
方式
3. 应用实例






(1)控制要求
一水箱有一条进水管和一条出水管,出水管的水流
量随时间不断变化,要求控制进水管阀门的开度,
使水箱内的液位始终保持在水满时液位的75%。系
统使用比例积分控制,假设采用下列控制参数值:
Kc为0.25,Ts为0.1秒,Ti为30分钟,Td为0分钟。
(2)分析
本系统标准化时可采用单极性方案,系统的输入来
自液位计的液位测量采样;设定值是液位的75%,
输出是单极性模拟量用以控制阀门的开度,可以在
0%~100%之间变化。
(3)程序实现
本程序的主程序如图5.21所示,回路表初始化子程
序SBR0如图5.22所示,中断程序INT0如图5.23所
示。
//参数表给定值0.75
回路增益
采样周期
积分时间常数
微分时间常数
定时中断0---0.1
//过程变量的标准化
转换
//整形变双整形
//双整形变实形
除以基准值
送PID参数表首地址
中断程序INT-0
练习

设计一个温度调节系统,温度调节范围
0~100度。现根据实际需要,控制温度在80
度,采用PID控制。假定控制参数值为:Ts
为0.5min,Kc为0.65,Ti为5min,Td为
1min。