第 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 S M 5,0 // 检查 I/ O 错误
O S M 4,3 // 运行时刻检查编程
O I0,3 // 外部切换开关
S T OP // 条件满足,由 RUN
// 切换到 S T O P 方式
//
//
LD I0,5 // 外部停止控制
E ND // 停止程序执行
//
//
LD M 0,4 // 用触点重新触发
W DR // 看门狗定时器
A I 0.2 //?图 5.1 停止、结束、看门狗指令 返回本节
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) 子程序调用和返回指令
子程序调用
子程序条件返回
( 2)注意事项
可有 64个子程序,可以嵌套子程序,最大嵌套深度为 8
子程序内不能用 END指令
不允许直接递归(自己调用自己),可间接递归
( 3)应用实例
SBR1
EN
( RET )
图 5.3所示的程序实现用外部控制条件分别调用两个子程序 。
LD I 0,0 // 使能输入
C A L L S2 // 调用子程序 S2
//
LD I 0,0 // 使能输入
C A L L S B R _ 1 // 调用子程序
/ / S B R _ 1
图 5.3 子程序调用举例
( 1)子程序参数 ---最多可带 16个参数,每个参数包含:
变量名
变量类型 ( IN类型,IN/OUT,OUT)
数据类型 (位、字节、字、双字、实型)
( 2)参数子程序调用的规则
参数与局部变量标的定义相匹配
参数顺序是:输入,输入 /输出,输出
( 3)程序实例
3,带参数的子程序调用
LD I0,0 // 装入常开触点
CA L L S BR_ 0,I0,2,V B2 0,V D 3 0 / /
// 调用子程序 S BR_ 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 M 0,0 // 使能输入
F O R V W 1 0,+ 1,+ 2 0 // 循环开始
// 与第 2 个 N E X T
// 之间为一级循环体
LD M 0,1 // 使能输入
F O R V W 2 0,+ 1,+ 5 // 循环开始
// 与第 1 个 N E X T
// 之间为二级循环体
图 5.6 程序循环 (1)
返回本节
LD I0,0 // 使能输入
CA LL S BR_ 0 // 调用子程序 0
// 本梯级为二级
// 循环体的功能段
N EX T // 循环结束指令
LD S M0,0 // 使能输入
IN CW V W 1 0 0 // 字增指令
// 每执行一次一级
// 循环体,V W 1 0 0
// 的 值增 1
N EX T // 循环结束指令
图 5.6 程序循环 (2)
5.1.7 顺序控制继电器
顺序控制继电器 S是专门用于编写顺序控制程序 ( 常称为步进控制 ) 的 。
所谓顺序控制,使生产过程按生产工艺的要求预先安排的顺序自动地进行生产的控制方式 。
一个步进控制程序是由若干个 SCR段组成,每个 SCR段对应步进控制中的一个功能控制步 。
1,顺序继电器指令
( 1) 段开始指令
功能:标记一个 SCR段的开始,操作数是顺序继电器 Sx.y( 如 S0.0) 。
当顺序继电器 Sx.y=1启动 SCR x.y的顺序程序 。 即允许该 SCR段工作 。
( 2) 段转移
功能:是当 Sx.y=1,将当前的 SCR段停止,切换到下一个 SCR。 其操作数为下一个 SCR的标志位 ( 如
S0.1)
( 3) 段结束
功能:标记一个段的结束 。
SCR
Sx.y
LSCR Sn
Sn
(SCRT) SCRT Sn
Sn
(SCRE) SCRE
本例是用顺序继电器实现的顺序控制中的一个步的程序段,这一步实现的功能是使两个电机 M1和
M2 起动运行
20秒后停止,
切换到下一步 。
程序如图 5.7
所示 。
L SCR S0,5 // 由 S0,5 控制的
// 顺序步的开始
//
LD SM 0,0 // 装入常开触点
S Q1,2,2 // 将 Q1,2 和 Q1,3
// 置 1
T ON T 5 0,+ 2 0 0 // 通电延时
// 本步的持续时间
// 为 2 0 s
LD T 5 0 // 延时时间到
// 作为切换条件
SCR T S0,6 // 步转移
// 切换到下一步
// 同时关本步
//
SCRE // 本 步 结束标志返回本节
2,程序实例
3,结构形式
( 1)顺序结构
( 2)分支结构
选择性分支
并发性分支
( 3)循环结构
( 4)复合结构各顺序控制段的转换不带分支和汇合的顺控过程 。
将复杂的控制分解若干个独立控制功能步,用方框表示,根据动作顺序用箭头将各方框连接起来,在相邻的两步之间用段横线表示转换条件 。 在每步的右边画上要执行的控制程序 。
S0.1 ( )
Q0.0
S0.2 ( )
Q0.1
S0.3 ( )
Q0.2
I0.0
I0.1
I0.2
( 1)顺序结构
( 1)顺序结构
( 2)分支结构图 5.9 选择性分支
3736
3
32
3
3
5
4
38
31
A
FC
J
H
EB
IGD
1)选择分支执行完 1步,当 A或 D
或 G或 I为 1,1步复位,
2或 4或 6或 7开始执行;
8步执行,由 C或 F或 H
或 J为 1决定,执行时顺序继电器置 1,3、
5,6,7顺序继电器复位
2)并发性分支
当 A为 1,1步复位,
2467同时置位开始工作。
为提高工作效率,
各支路的工作时间尽量接近一致。
图 5.10 并发性分支用水平双线表示并行分支开始和结束。
( 3)循环结构
循环结构用于一个顺序过程的多次或往复执行。
功能图画法如图
5.11所示,这种结构可看作是选择性分支结构的一种特殊情况。

5.
11
循环结构
( 4)复合结构图 5.12 功能流程图举例返回本节
3M 0 1,0
3M 0 0,6
3M 0 0,7
3M 0 1,1
3M 0 0,0
I 0,4
I 1,0
I 0,6
I 0,0
3M 0 0,4
3
3
M 0 0,3
M 0 0,2
3M 0 0,5
3M 0 0,1
I 0,1
I 0,3
I 0,2
Q 0,3
Q 0,0等待
Q 0,1
Q 0,4Q 0,2
Q 0,0
Q 0,2
Q 0,5
等待
Q 1,0
I 0,5
I 1,1
I 1,2
几种结构组合练习 全自动洗衣机的自动控制
组成:洗衣桶(外桶)和脱水桶(内筒)
原理:进水和排水分别由进水阀和排水阀执行
洗涤电机驱动波盘正、反转实现,此时脱水桶不转,脱水时将离合器合上,洗涤电机正转带动脱水桶甩干。高低水位控制开关来检测高低水位。起动按钮起动洗衣机工作,停止按钮用来实现手动停止进水、排水、脱水及报警,排水按钮用来实现手动排水。洗完要有报警。
I0.0 I0.1
I0.3 I0.4
I0.2
Q0.0 Q0.1 Q0.2 Q0.3 Q0.4
Q0.5
由控制要求画出顺序控制功能图
控制要求:
1按起动按钮,洗衣机开始进水;
2水满(高水位)停进水;
3开始洗涤正转 15s,暂停 3s;
4反转洗涤 15s,暂停 3s;
5重复 3次动作 3,4后,开始排水;
6水位低,开始脱水并继续排水;
7脱水 10s;
8重复 1~7过程 3次,洗完报警 10s结束,停机。
Q0.2
I0.0
I0.3
Q0.0
Q0.1
Q0.3
Q0.4
Q0.5
S0.0
S0.0
S0.0
S0.0
S0.0
5.1.8 与 ENO指令
AENO,与 ENO指令。 ENO是梯形图和功能框图编程时指令盒的布尔能流输出端。如果指令盒的能流输入有效,同时执行没有错误,
ENO就置位,将能流向下传递。当用梯形图编程时,且指令盒后串联一个指令盒或线圈,
语句表语言中用 AENO指令描述。
指令格式,AENO( 无操作数 )
LD I 0,0 // 使能输入
+I V W 200,V W 20 4 // 整数加法指令,V W 200 + V W 204 = V W 204
A E N O // 与 E N O 指令,判断整数加法指令执行是否出错
A T C H I N T _0,10 // 如果加法指令执行正确,则将中断程序 I N T _0
// 与中断事件号 10 连接,并对该中断事件开放
图 5.13 与 ENO指令
AENO指令只能在语句表中使用,将栈顶值和 ENO位的逻辑与运算,运算结果保存到栈顶。程序如图 5.13所示。
返回本节
5.2 特殊指令
5.2.1 时钟指令
5.2.2 中断
5.2.3 通信
5.2.4 高速计数
5.2.5 高速脉冲输出
5.2.6 PID回路指令返回本章首页
5.2.1 时钟指令
1,读实时时钟
TODR,读实时时钟指令。当使能输入有效时,
系统读当前时间和日期,并把它装入一个 8字节的缓冲区。
2,写实时时钟
TODW,写实时时钟指令。用来设定实时时钟。
当使能输入有效时,系统将包含当前时间和日期,一个 8字节的缓冲区将装入时钟。
VB300首地址
READ_RTC
EN ENO
T
TODR T
SET_RTC
EN ENO
T
TODW T
VB300
表 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 //右移 4位
SEG VB0,QB1 //将分钟值低位
//从 QB1输出子程序 SBR_0
//作用为写时钟
5.2.2 中断
1,中断源
( 1) 中断源及种类
中断源,即中断事件发出中断请求的来源 。
S7-200可编程序控制器具有 34个中断源,每个中断源都分配一个编号用以识别,称为中断事件号 。 这些中断源大致分为三大类:通信中断,输入输出中断和时基中断 。
( 2)中断优先级
中断优先级由 高到低依次是:通信中断,输入输出中断,时基中断 。 每种中断中的不同中断事件又有不同的优先权 。
主机中的所有中断事件及优先级如表 5.4所示 。
表 5.4 中断事件及优先级
2,中断操作指令
包括:
( 1) 开中断指令 ENI---全局开放所有被连接的中断事件
( 2) 关中断指令 DISI---全局关断所有被连接的中断事件
( 3) 中断连接指令 ATCH
功能:建立一个中断事件 EVNT与一个标号为 INTn中断服务程序联系,并对该中断事件开放 。
(ENI)
(DISI)
ATCH
EN ENO
INT
EVNT
( 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 // 使能输入
A T CH IN T _ 1,2 // 中断调用
// 中断程序
// 为 IN T _ 1
// 事件号为 2
EN I // 全局开中断
//
LD SM 5,0 // 检查 I/O 错
D T CH 2 // 若 I/O 有错
// 断开本中
// 断连接
LD I0,5 // 外部条件
D ISI // 全局中断
// 禁止
图 5.10 中断调用程序
3,中断程序
( 1) 构成
中断程序必须由三部分构成:中断程序标号,
中断程序指令和无条件返回指令 。
( 2) 编制方法
建立中断程序 INT n
在 INT n中编写其服务程序
编写中断连接指令
允许中断返回本节定时中断 0,设定 100ms,在中断服务程序中进行数据采集和变换温度模拟量数据采集实例
0~200度范围测量的实际温度 =(AIW-6552)/[(32760-6552)/200]
2
复习思考题
一个温度检测系统,用 Pt100热电阻,测温范围为 0~200度 (电流输出 ),如测得环境温度为 35度,问 A/D转换后的数字量?
0~200度 对应 4~20mA
12为数字量
12为数字量
1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
3 2 7 6 0712 15 0001100110011655242032760
0 0 1 1 0 0 1 1 0 0 1 1 0 0 0
测量的实际温度 =(AIW-6552)/[(32760-6552)/200]
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
TBL
PORT
NETW
EN ENO
TBL
PORT
传送数据表
( 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模块中的数据 。
C P U 2 2 4 T D 2 0 0C P U 2 2 1C P U 2 2 1
P C / P P I 电缆站1站2 站3 站4
操作要求:
站 4要读写两个远程站 ( 站 2和站 3) 的状态字节和计数值 ( 分别放在 VB100和 VW101中 ) 。 如果某个远程站中的计数值达到 200,站 4将发生一定动作,
并将该远程站的计数值清 0,重新计数 。
分析:网络通信 ---要将站 4设置为 PPI主站模式
主站建立接收与发送数据表,用以读写从站
CPU 224通信端口号为 0,从 VB200开始设置接收和发送缓冲区 。 接收缓冲区从 VB200开始,发送缓冲区从 VB250开始,内容如表 5.6所示 。 该网络通信用户程序如图 5.18所示 。
C P U 2 2 4 T D 2 0 0C P U 2 2 1C P U 2 2 1
P C / P P I电缆站1站2 站3 站4
表 5.6 缓冲区设置
LD SM 0,1 // 初次扫描
M OV B 16 #0 2,SM B3 0 //
// 设置 CP U 22 4
// 允许 PPI 主站
// 模式
FIL L + 0,V W2 00,30 //
// 接收和发送缓
// 冲区清 0
L DN V200,6 // 网络读无效
AN V200,5 // 并且无错误
M OV B 2,VB 201 //
// 装入站 2 地址
M OV D & VB 100,VD 202 //
/ / 装入访问站 2
// 数据区的指针
//
//
M OV B 3,VB 206 //
// 装入读数据的
// 字节数
N ET R V B 200,0 //
// 网络读指令
//

5.
18
网络程序实例

1

图 8.18 网络程序实例( 2)
返回本节
L D N V 200,7 //
// 网络读完成
A W = V W 208,+ 200 / /
// 计数值达到 200
M O V B 2,V B 251 //
// 装入站 2 地址
M O V D & V B 101,V D 252
//
/ / 装入发送到
// 站 2 数据区
// 的指针
//
M O V B 2,V B 256 //
// 装入发送数据
// 的字节数
M O V B + 0,V W 257 //
// 将站 2 的计数
// 值清 0
N ET W V B 250,0 //
// 网络写指令
//
二,自由口通信
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
n:1=由用户禁止命令终止接收信息
r:1=终止接收信息:输入参数有错或缺少起始或结束条件
e:1=接收到结束字符
t:1=定时器超时终止接收信息
c:1=达到最大字符数终止接收信息
p:1=奇偶校验错误终止接收信息接收状态字节 sm86或 sm186
n r e 0 0 t c p
SM86见 p124
应用实例
1,控制要求
本程序实现的功能是,一台 CPU 224作为本地 PLC,
用另一台 CPU 224作为远程 PLC,本地 PLC接收来自远程 PLC的 20个字符,接收完成后,信息又发回对方 。
要求有一外部脉冲控制接收任务的开始,并且任务完成后用显示灯显示 。
2,参数设置
自由口通信模式 。
通信协议为:波特率 9600,无奇偶校验,每字符 8位 。
接收和发送用同一缓冲区,首地址为 VB100。
不设立超时时间 。
3,程序
主程序如右图 5.19所示 。 实现的功能是初始化通信口及缓冲区,建立中断联系,并开放全局中断 。 中断程序
INT_0,启动发送指令 。 如图 5.20所示 。
LD S M 0,1 //
// 初次扫描
M O V B 9,S M B3 0 //
// 初始化自由口
// 波特率 9600
// 8 位数据,无校验
M O V B 2 0,V B1 0 0 //
// 传送字节数 20
// 装入缓冲区首址
A T CH IN T _ 0,2 3 //
// 接收完成时
// 连接到中断
// 程序 IN T _ 0
//
A T CH IN T _ 1,9 //
// 发送完成时
// 连接到中断
// 程序 IN T _ 1
E N I //
// 全局开中断
LD I0,1 / / 外部脉冲
EU // 上跳沿
RCV V B1 0 0,0 //
// 发送指令
// 缓冲区 V B1 0 0
// 通信端口 0

5.
19
自由口通信例

主程序

图 5.20 自由口通信例(中断 0程序)
LD SM 0,0 //
// 运行时有效
X MT V B1 0 0,0 //
// 发送指令
// 缓冲区 V B1 0 0
// 通信端口 0
中断程序 INT_1,发结束时输出 。 如图 8.21所示 。
图 5.21 自由口通信例(中断程序 1)
返回本节
LD SM 0,0 //
// 运行时有效
= Q 1,0 //
// 发送完成,
// 经 Q 1,0 显示
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,高速计数指令
高速计数器指令有两条,HDEF和
HSC。
( 1) HDEF指令
HDEF,定义高速计数器指令 。 使能输入有效时,为指定的高速计数器选定一种工作模式 。
梯形图指令盒中有两个数据输入端:
HSC,高速计数器编号,为 0~5的常数,字节型; MODE,工作模式,为
0~11的常数,字节型 。
每个高速计数器在使用前,都要用
HDEF定义工作模式,并且只能定义一次
0
4
( 2) HSC指令
HSC,高速计数器指令 。 使能输入有效时,根据高速计数器特殊存储器位的状态,并按照
HDEF指令指定的工作模式,
使高速计数器 设置生效 并 执行计数操作 。 梯形图指令盒数据输入端 N:高速计数器编号,
为 0~5的常数,字型 。
4
每个高速计数器都有固定的特殊功能存储器与之相配合,完成高速计数功能 。
具体对应关系如表 5.11所示 。
3,高速计数器的使用方法反映工作状态见书表 3-7 启动或关闭计数器,控制方向等见书表 3-8
状态字节
每个高速计数器都有一个状态字节,程序运行时根据运行状况自动使某些位置位,可以通过程序来读相关位的状态,
用以作为判断条件实现相应的操作 。 状态字节中各状态位的功能如表 5.12所示 。
控制字节
表 5.13 控制位含义
1选择计数器及工作模式
2设置控制字节
3执行 HDEF指令
4设定当前值和预设值
5设置中断事件并全局开中断
6执行 HSC指令高速计数器编程步骤:
如:对一高速脉冲信号进行增减计数,计数当前值达到 120
产生中断,计数方向由外部信号控制(主机 CPU224)
( 1)选 HSC0模式 3,I0.0
计数 I0.1方向控制(书 P135)
( 2) SMB37---F8
( 3)执行 HDEF指令
( 4) 0— SMD38,120---
SMD42
( 5) 12---INT0
( 6)执行 HSC指令
4,应用实例
要对一高速事件精确控制,通过对脉冲信号进行增计数,计数当前值达到 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 S M 0,1 // 初次扫描脉冲
CA L L S BR_ 1 // 调用初始化
// 子程序 S BR_ 1
//
图 5.12 主程序
LD S M 0.0 // 运行脉冲
M O V B 16# F 8,S M B 37 //
// 设置控制字节
//
//
//
H D EF 0,4 // 定义高速
// 计数器
// 选用 H S C 0
// 工作模式 4
M O V D +0,S M D 38 //
// 当前值清 0
//
MOV D + 24,S MD42 //
// 将预设值 24
// 入装 S MD42
//
A TC H I N T _0,1 2 //
// 中断连接指令
// 中断程序为
/ / I N T _0
// 事件号为 12
EN I // 开全局中断
//
H S C 0 // 编程计数
// 器 H S C 0
// 使设置生效?图 5.13 初始化子程序
12
LD S M 0,0 // 运行
// 脉冲
I NC D VD 100 //
// 双字增指令
// 对中断次数
// 进行累计
// 存于 VD 100
M OV D + 0,S M D38 //
// 将 HSC 0 当
// 前值清 0
//
M OV B 16#C 8,S M B 37
// 重设控制字
// 节 S M B 37
// 不重装设
// 定值
HSC 0 // 编程 HSC 0
// 使设置重新
// 生效
图 5.14 中断程序返回本节
六层电梯平层信号产生。用高速计数器测距离,了解轿厢当前位置和平层信号产生。
见附加程序。
应用实例 2
5.2.5 高速脉冲输出
在需要对负载进行高精度控制时,
如对步进电机的控制,需要对步进电机提供一系列的脉冲,高速脉冲输出指令就是为满足这种需求而开发的 。
1,高速脉冲输出介绍
( 1)输出端子的确定
( 2)高速脉冲输出的形式
( 3)相关寄存器
( 4)脉冲输出指令
( 1)输出端子的确定
S7-200只有输出继电器 Q0.0和 Q0.1具有 高速脉冲输出功能。
不用高速脉冲时,作普通的数字量输出点用。
( 2)高速脉冲输出的形式
高速脉冲输出有两种的形式:
高速脉冲序列(或称高速脉冲串)输出 PTO
脉冲宽度调制输出 PWM
可通过特殊继电器来定义输出的形式。
每个高速脉冲发生器对应一定数量特殊标志寄存器,这些寄存器包括 控制字节寄存器,
状态字节寄存器 和 参数数值寄存器,用以控制高速脉冲的输出形式,反映输出状态和参数值 。 各寄存器分配如表 5.14所示 。
( 3)相关的 寄存器
每 个 高 速 脉 冲 输 出 都 有 一 个 状 态 字 节
( SMB66或 SMB76 ),程序运行时根据运行状况自动使某些位置位,可以通过程序来读相关位的状态,用以作为判断条件实现相应的操作 。 状态字节中各状态位的功能如表
5.15所示 。
状态字节
每个高速脉冲输出都对应一个控制字节,通过对控制字节中指定位的编程,可以根据操作要求设置字节中各控制位,如脉冲输出允许,PTO/PWM模式选择,单段 /多段选择,
更新方式,时间基准,允许更新等 。 控制字节中各控制位的功能如表 5.16所示 。
控制字节脉冲输出指令
PLS指令
功能,EN有效,检测各相关寄存器的状态,
激活由控制字节定义的高速脉冲输出操作。
Q取 0或 1对应 Q0.0和 Q0.1
PLS
EN ENO
Q0
2,高速脉冲串输出 PTO
( 1) 周期和脉冲数
( 2) PTO的种类
( 3) 中断事件类型
( 4) PTO的使用
( 1)周期和脉冲数
周期:单位可以是微秒 μs或毫秒 ms;为 16位无符号数据,周期变化范围是 50~65535μs或
2~65535ms,通常应 设定周期值为偶数,若设置为奇数,则会引起输出波形占空比的轻微失真 。 如果编程时设定周期单位小于 2,系统默认按 2进行设置 。
脉冲数:用双字长无符号数表示,脉冲数取值范围是 1~4294967295之间 。 如果编程时指定脉冲数为 0,则系统默认脉冲数为 1个 。
SM67.3
( 2) PTO的种类
PTO方式中,如果要输出多个脉冲串,允许脉冲串进行排队,形成管线,当前输出的脉冲串完成之后,
立即输出新脉冲串,这保证了脉冲串顺序输出的连续性 。
根据管线的实现方式分:
单段管线 ---管线中只能存放一个脉冲串的控制参数
(入口地址)。在当前脉冲串输出期间,要对下一个脉冲串的相关寄存器进行更新。当前脉冲串输出完成,即可开始输出新脉冲串。
多段管线 ---输出多个脉冲串。需要在变量存储区建包络表,在包络表中存储各脉冲串的参数,当执行
PLS指令时,CPU自动按顺序从包络表中调出各个脉冲串的入口地址,连续输出各个脉冲串。
多管线 PTO
包络表由 包络段数 和 各段 构成 。 每段长度为 8
个字节,包括:脉冲周期值 ( 16位 ),周期增量值 ( 16位 ) 和脉冲计数值 ( 32位 ) 。 以包络 3段的包络表为例,包络表的结构如表
5.17所示 。
( 3)中断事件类型
高速脉冲串输出可以采用中断方式进行控制,
各种型号的 PLC可用的高速脉冲串输出的中断事件有两个,如表 5.18所示 。
( 4) PTO的使用 ----编程要点
使用高速脉冲串输出时,要按以下步骤进行:
1,确定脉冲串的输出端及管线的实现方式(单段多段)
2,设置控制字节 ---将控制字写入 SMB67或 SMB77
3,写入周期值、周期增量值和脉冲数周期增量值 = (Tn+1-Tn)/N
其中,Tn-------该段开始的周期时间
Tn+1------该段结束的周期时间
N------该段脉冲数
4,装入包络的首地址
5,设置中断事件并全局开中断
6,执行 PLS指令
3,应用实例
( 1) 控制要求
步进电机转动过程中,要从 A点加速到 B点后恒速运行,又从 C点开始减速到 D点,完成这一过程时用指示灯显示 。 电机的转动受脉冲控制,A
点和 D点的脉冲频率为 2kHz,B点和 C点的频率为 10kHz,加速过程的脉冲数为 400个,恒速转动的脉冲数为 4000个,减速过程脉冲数为 200
个 。
工作过程如图 5.15所示 。
频率 ( K H z )
10
2
时间
A
B C
D
频率 ( K H z )
10
2
时间
A
B C
D
图 5.15 步进电机工作过程
400个脉冲
4000个脉冲 200个脉冲
( 2) 分析
确定脉冲发生器及工作模式
设置控制字节
写入周期值、周期增量值和脉冲数
装入包络表首地址
中断调用
执行 PLS指令
1用 Q0.0,多管线方式 — 3段
( AB段,BC段,CD段 )
2确定周期值的时基单位,
BC段频率最大 10KHZ,对应的周期值为 100us,时基单位为 us,所以 SMB67---16#A0
3确定初始周期,周期增量
初始周期:求每段的频率的倒数可得 AB段 500us,BC段
100us,CD段 100us
周期增量 = (Tn+1-Tn)/N,AB
段 -1,BC段 0,CD段 2
4设包络表首地址 VB400建立包络表。


包络表
( 3) 程序实现
本控制系统主程序如下图 5.16所示 。 初始化子程序 SBR_1如图 5.17所示 。 包络表子程序如图 5.18所示 。 中断程序如图 5.19所示 。
LD S M 0,1 // 初次扫描
R Q 0,0,1 // 复位高速
// 脉冲,使初值
// 为低电位
CA L L S BR _ 1 // 调用初始
// 化子程序 S BR _ 1
图 5.16 主程序
LD S M 0,0 // 运行脉冲
M OV B 16#A 0,S M B 67 // 设置控制字节
// 多段 P T O
// 增量单位 u s
// 允许 P T O
M OV W + 400,S M W 168 // 装入包络表的首地
// 址
C AL L S B R _0 // 调用子程程序 S B R _0
// 建立包络表
A T C H I NT _0,19 // 中断连接
// 事件号 19
E NI // 开全局中断
P L S 0 // 启动 P T O 脉冲
// 由 Q0,0 输出
//
图 5.17 初始化子程序 SBR_1

5.
18
包络表子程序SB
R_
0

1

MOVW+100,VW409 //
//第 2段周期初
//值为 100ms
//
//
MOVW0,VW411 //
//第 2段周期
//增量为 0
MOVD+4000,VD413//
//第 2段脉冲数
//为 4000个
LD SM0.0 // 运行脉冲
MOVB3,VB400 //
//定义开始字节
//为 VB400
// 装入段数3
MOVW+500,VW401 //
//第 1段周期初
//值为 500ms
//
//
MOVW- 1,VW403 //
//第 1段周期
//增量为- 1
MOVD+400,VD405 //
//第 1段脉冲数
//为 400个
M O V W + 1 0 0,V W 4 1 7 //
// 第 3 段周期初
// 值为 1 00 ms
//
//
M O V W + 2,V W 4 1 9 //
// 第 3 段周期
// 增量为 + 2 m s
M O V D + 2 0 0,V D 4 2 1 //
// 第 3 段脉冲数
// 为 2 00 个
图 5.18 包络表子程序 SBR_0( 2)
LD SM 0,0 // 运行脉冲
= Q 0.6 // 脉冲串全部输出
// 完成后将 Q 0,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指令应用举例 1--- (书例 3-46 )
将 Q0.1设置为 PWM输出形式,脉冲周期固定为 10s,初始脉冲宽度 1000ms,当 M0.0上升沿有效脉冲宽度改为 5000ms。
//控制字节设置,允许 PWM,选择 PWM单段操作,同步更新,时基 1ms脉冲数不更新,脉冲宽度更新,周期更新
//设置周期 10s,
设置脉冲宽度 1000
执行 PLS,Q0.1输出 PWM
重装控制字节,设为禁止更新周期后可更新脉冲宽度
//新脉冲宽度设为
5000ms
//执行 PLS
应用举例 2---电梯速度控制
5.2.6 PID回路指令在过程控制中经常涉及到模拟量的控制,构成闭环控制系统。而对模拟量的处理,除对模拟量的采样检测外,还要对采样值进行 PID运算。根据运算结果形成对模拟量的控制作用。
1,PID算法
2,PID指令
3,应用实例
1,PID算法
1,PID算法
如果一个 PID回路的输出 M(t)是时间的函数,
则可以看作是比例项,积分项和微分项三部分之和 。 即:
其中,Kc为回路增益,M0为回路输出的初始值
变成数字离散形式
dtdeKMed tKeKtM ctcc 0
0
10
1
nnDn
i
iInCn eeKMeKeKM
Mn----第 n个采样时刻计算出来的回路控制输出值
en ----第 n个采样时刻回路偏差
en -1 ----第 n-1个采样时刻回路偏差
KC ----回路增益
KI ----积分项的比例系数
KD ----微分项的比例系数
M0 ----初始值
上式可表示为
10
1
nnDn
i
iInCn eeKMeKeKM
nnnn MDMIMPM
nnnn MDMIMPM
Mn----第 n个采样时刻 PID计算值
MPn ----第 n个采样时刻比例项值
MIn ----第 n个采样时刻积分项值
MDn ----第 n个采样时刻微分项值
)( nnCn PVSPKMP
MXPVSPTTKMI nnIsCn )(/
)(/ 1 nnSDCn PVPVTTKMD
TS为采样周期
TI为积分时间常数
TD为微分时间常数
SPn第 n个采样时刻的给定值
VPn第 n个采样时刻过程变量值
MX第 n-1个采样时刻积分项的值


nn
S
D
C
nn
I
S
CnnCn
PVPV
T
T
KMX
PVSP
T
T
KPVSPKM


1
采样后的过程变量与给定值的偏差,
经上式 PID运算出控制量。
上式共包含 9个参数,在执行 PID指令前要建立一个 PID参数表 ----初始化处理。
PID参数表格式地址偏移量
PID参数 数据格式 I/O类型 描述
0 PVn 双字、实数 I 过程变量的当前值,0.0~1.0
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运算的过程变量
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分钟
回路表初始化程序实例:
如果给定值为
0.5,Kc为 0.4,
Ts为 0.2秒,Ti
为 30分钟,Td
为 15分钟,则可以建立一个子程序 SBR0用来对回路表进行初始化 。 表首地址 VD200
程 序 如 图 5.20
所示 。图 5.20 回路表初始化子程序 SBR0
PID,PID回路指令 。 使能输入有效时,
该指令利用回路表中的输入信息和组态信息,进行 PID运算 。 梯形图的指令盒中有 2个数据输入端,TBL,回路表的起始地址,是由 VB指定的字节型数据;
LOOP,回路号,是 0~7的常数 。
指令影响的特殊标志存储器位,SM1.1
( 溢出 ) 。
使能流输出 ENO 断开 的出错条 件:
SM1.1( 溢出 ) ; SM4.3( 运行时间 ) ;
0006( 间接寻址 ) 。
指令格式,PID TBL,LOOP
2,PID指令
PID的组合选择
在很多控制场合,往往只需要 PID中的 1种或
2种运算,如,PI,PD控制等。不同运算功能的组合选择可通过设定不同的参数来实现。
不需要积分运算 -----TI=无穷大
不需要微分运算 -----TD=0
不需要比例运算 -----KC=0(积分和微分项 KC=1)
输入模拟量的转换及标准化
用 PID指令通常要将过程变量和给定的实际值标准化为 0.0~1.0的相对值格式。转换公式:
RNorm工程实际值的标准化值
RRaw工程实际值的实数形式值
Span最大允许值减去最小值,取 32000(单极性)
或 64000 (双极性)
Offset取 0(单极性)或 0.5 (双极性)
O ffs e tSRR
pan
R a w
N o r m
输出模拟量转换为工程实际值
输出产生的控制作用是 0.0~1.0标准化值,需要转换成工程实际值。
Rscal工程标定的过程变量的实数格式
panns c a l SO ffs e tMR
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。