3.9 S7-200的特殊功能指令
1. 中断指令
PLC 的 CPU在整个控制过程中, 有些控制要取决于外部事件。 比如只有 外部设备请求 CPU发送数
据时,CPU才能向这个设备发送数据。这类控制的进行是取决于 外部设备的请求和 CPU 的响应,当
CPU在接受了 外部设备的请求时, CPU就要暂停其当前的工作,去完成外部过程的请求,这种工作方
式就叫 中断方式。
在启动中断程序之前,必须使中断事件与发生此事件时希望执行的程序段建立联系。使
用中断连接指令(ATCH)建立中断事件(由中断事件号码指定)与 程序段(由中断程序号码指定)
之间的联系。将中断事件连接于中断程序时,该中断自动被启动。
使用中断分离指令(DTCH)可删除中断事件与中断程序之间的联系,因而关闭单个中断
事件。中断分离指令使中断返回未激活或被忽略状态。
S7-200可以引发的中断事件总共有5大类34项。 其中输入信号引起的中断事件有8项,
通讯口引起的中断事件有 6 项,定时器引起的中断事件 4 项,高速计数器引起的中断事件有
14 项, 脉冲输出指令引起的中断事件有 2 项。如表
S7-200 可以在梯形图编辑器内的任何位置右击鼠标并选择插入中断。S7-200 也可以从
指令树,右击程序块图标并从弹出菜单选择插入中断。S7-200 还可以从程序编辑器窗口, 从 菜单右击插入中断。一旦一个新的中断被建立,会在程序编辑器的底部将出现新的标签,
代表新的中断程序。
(1)中断连接指令
·中断连接指令的表示:中断连接指令由指令的允许端 EN、 指令助记符
ATCH、中断程序号(入口号)INT n和中断事件的事件号 EVNT 构成。用梯
形图或语句表表示如图 3-9-1。
·中断连接指令的操作:中断连接指令(ATCH)使中断事件(EVNT)与中断程
序号码(INT)相联系,并启动中断事件。根据指定事件优先级组,PLC按照先 来先服务的顺序对中断提供服务。
任何时刻只能激活一个用户中断。其它中断处于激活状态时,CPU发出
中断暂时入队,等待以后处理。如果发生的中断数目过多,队列无法处理,
则设定 队列溢出状态位。当队空时,重置这些位。
·数据范围:
INT;0~127
EVENT:0~33
图 3-9-1
(2)中断分离指令
· 中断分离指令的表示: 中断分离指令由指令的允许端 EN、 指令助记符 DTCH
和中断事件的事件号 EVNT 构成。用梯形图或语句表表示如图 3-9-2。 ·中断分离指令的操作:中断分离指令(DTCH)取消中断事件(EVNT)与全部中
断程序之间的联系,并关闭此中断事件 ·数据范围:
EVENT:0~33
(3) 中断返回指令
·中断返回指令的表示:中断返回指令由 指令助记符 RETI
构成。用梯形图或语句表表示如图 3-9-3。
·中断返回指令的操作:中断返回指令(RETI条件返回)可用
于根据先前逻辑条件从中断返回。
·注意事项:
Micro/WIN 32 自动为各中断程序添加无条件返回。在
编写程序时,用户不必要再书写无条件返回指令了。 中断处理提供了对特殊的内部或 外部中断事件的响应。
编写 中断服务程序时,使中断程序短小而简单,加快执行速
度而且不要延时过长。否则,未预料条件可能引起主程序控
制的设备操作异常。对于 中断服务程序 ,俗语说“越短越好,”这是绝对正确的。
在中断程序内不能使用 DISI、ENI、HDEF、LSCR、END指令。
图 3-9-3
(4)中断允许指令
·中断允许指令的表示:中断允许指令由
指令助记符 ENI构成。用梯形图或语句表
表示如图 3-9-4。 · 中断允许指令的操作:中断允许指令
(ENI)指令全局性地启动全部中断事件。 一
旦进入运行模式,就允许执行各个已经激
活的中断事件。
(5)中断禁止指令
·中断禁止指令的表示:中断禁止指令由
指令助记符 DISI 构成。用梯形图或语句表表示如图 3-9-4。
·中断禁止指令的操作:中断禁止指令(DISI)可以全局性地关闭所有中断事件。中断禁止指
令允许中断入队,但不允许启动中断程序。
(6)中断中进一步说明的几个问题
1)关于在中断中调用 子程序:从中断程序中可以调用一个嵌套 子程序。 累加器和逻辑堆栈
在中断程序和被调用的 子程序中是共用的。
2)关于共享数据:可以在主程序和一个或多个中断程序间共享数据。例如,用户主程序的某
个地方可以为某个中断程序提供要用到的数据,反之亦然。如果 用户程序共享数据,必须考
虑中断事件异步特性的影响,这是因为中断事件会在用户主程序执行的任何地方出现。共享
数据一致性问题的解决要依赖于主程序被中断事件中断时中断程序的操作。
这里有几种可以确保在用户主程序和中断程序之间正确共享数据的编程技巧。 这些技巧
或限制共享 存储器单元的访问方式,或让使用共享 存储器单元的指令序列不会被中断。
语句表 程序共享单个变量。如果共享数据是单个字节、字、双字变量,而 用户程序用
STL 编写,那么通过把共享数据操作得到的中间值,只存储到非共享的 存储器单元或 累加器中,可以保证正确的共享访问。
梯形图 程序共享单个 变量。如果共享数据是单个字节、字或双字 变量,而且用户程序用
梯形图编写,那么通过只用 Move 指令(MOVB、MOVW、MOVD、MOVR)访问共享 存储器单元,
可以保证正确的共享访问。这些 Move 指令执行时不受中断事件影响。
语句表或梯形图 程序共享多个 变量,如果共享数据由一些相关的字节、字或双字组成,
那么可以用中断禁止/允许指令(DISI 和 ENI)来控制中断程序的执行。在 用户程序开始
对共享 存储器单元操作的地方禁止中断,一旦所有影响共享存储器单元的操作完成后,再允
许中断,但这种方法会导致对中断事件响应的延迟。
3)关于通讯口中断:
PLC 的 串行通讯口可由梯形图或语句表程序来控制。通讯口的这种操作模式称为自由端
口模式。在自由端口模式下,用户可用程序定义 波特率、每个字符位数、 奇偶校验和通讯协
议。利用接收和发送中断可简化程序对通讯的控制。
4)关于I/O中断:
I/O 中断包含了上升沿或下降沿中断、高速计数器中断和脉冲串输出(PTO)中断。 S7
-200 CPU 可用输入 I0.0至 I0.3 的上升沿或下降沿产生中断。上升沿事件和下降沿事件可
被这些输入点捕获。 这些上升沿或下降沿事件可被用来指示当某个事件发生时必须引起注意
的条件。
高速计数器中断允许响应诸如当前值等于预置值、 计数器计数方向改变和计数器外部复
位等事件而产生中断。每种高速计数器可对高速事件实时响应,而 PLC 扫描速率对这些高速
事件是不能控制的。脉冲串输出中断给出了已完成指定脉冲数输出的指示。脉冲串输出的一
个典型应用是步进电机。 可以通过将一个中断 程序连接到相应的 I/O 事件上来允许上述的每
一个中断。
5)关于时基中断:
时基中断包括定时中断和定时器 T32/T96 中断。CPU 可以支持定时器中断。可以用定时
中断指定一个周期性的活动。周期以 1ms 为增量单位,周期可以从 5ms 到255ms。对定时中
断 0,把周期时间写入 SMB34;对定时中断 1,把周期时间写入 SMB35。每当定时器溢出时,
定时中断事件把控制权交给相应的中断程序。 通常可用定时中断以固定的时间间隔去控制模
拟量输入的采样或者执行一个 PID回路。
当把某个中断 程序连接到一个定时中断事件上, 如果该定时中断被允许, 那就开始计时。
在连接期间,系统捕捉周期时间值,因而后来的变化不会影响周期。为改变周期时间,首先
必须修改周期时间值,然后重新把中断 程序连接到定时中断事件上。当重新连接时,定时中
断功能清除前一次连接时的任何累计值,并用新值重新开始计时。
一旦允许, 定时中断就连续地运行, 指定时间间隔的每次溢出时执行被连接的中断程序。
如果退出 RUN 模式或分离定时中断,则定时中断被禁止。如果执行了全局中断禁止指令,定
时中断事件会继续出现,每个出现的定时中断事件将进入中断 队列等待,直到中断允许或队
列满。
定时器 T32/T96 中断允许及时地响应一个给定时间间隔。 这些中断只支持 lms 分辨率的
延时接通定时器(TON)和延时断开定时器(TOF)T32 和 T96。T32 和 T96 定时器在其它方面
工作正常。一旦中断允许,当有效定时器的当前值等于预置值时,在 CPU 的正常 lms 定时
刷新中,执行被连接的中断程序。首先把一个中断 程序连接到 T32/T96 中断事件上,然后允
许该中断。
6)关于中断的优先级和排队:
中断按以下固定的优先级 顺序执行。通讯(最高优先级) ,I/O 中断,时基中断(最低
优先级) 。 在各个指定的优先级之内,CPU 按先来先服务的原则处理中断。任何时间点上,只有一
个用户中断程序正在执行。一旦中断程序开始执行,它要一直执行到结束。而且不会被别的
中断程序,甚至是更高优先级的中断程序所打断。当另一个中断正在处理中,新出现的中断
需排队等待处理。
有时,可能有多于队列所能保存数目的中断出现,因而,由 系统维护的队列溢出 存储器
位表明丢失的中断事件的类型。只在中断程序中使用这些 队列溢出存储器位,因为在队列变
空或控制返回到主程序时,这些位会被复位。
7)关于使用中断的限制:
一个程序内最多可有 128 个中断。在各自的优先级范围内,PLC 采用先来先服务的原
则处理中断。在任何时刻,只能执行一个用户中断程序。一旦一个中断程序开始执行,则一
直执行至完成。不能被另一个中断程序打断,即使另一程序的优先级较高。正在处理中断时
发生的新的中断需要排队等待处理。
在中断程序内不能使用 DISI、ENI、HDEF、LSCR 和 END指令。
(7) 中断程序编程步骤
·建立中断程序 INT n(同建立 子程序方法相同)
·在中断程序 INT n 中编写其应用程序
·编写中断连接指令(ATCH)
·允许中断(ENI)
·如果需要的话,可以编写中断分离指令(DTCH) 例 3-9-1:图 3-9-5 是一个应用定时中断去读取一个
模拟量的编程例子。
主程序 OB1 有一条语句,其功能是当 PLC 上电以
后首次扫描(SMO.l=1),调用子程序 SBRO,进行初始 化。
子程序 SBR0 的功能是设置定时中断。其中,设
定定时中断 0 时间间隔为 l00ms。传送指令 MOV 把
100存入SMB34中, 就是设定定时中断0的时间间隔。
而中断连接指令 ATCH 则把定时中断 0(中断事件号
为 10)和中断程序 0(中断入口为 INT0)连接起来,
并对该事件允许中断。 子程序的最后一句是全局允许
中断(ENI) ,只有有了这一条,已经允许中断的中断
事件才能真正被执行。
中断服务程序 INT0 的功能是每中断一次,执行
一次读取模拟量 AIW0 的操作,并将这个数值传送给
VW0。