由于中断方式可以随机地、高速地处理若干事件,因此在PLC的应用中是经常使用的,因此在本书扼要介绍S7-200的中断功能及其编程的概要。
S7-200的中断能力中断源
在CPU 212中,可有下述六种不同的中断源:
1.二个I/O事件中断(I0.0的上升沿和下降沿);
2.一个定时中断;
3.二个串行通信中断(port 0的接收和发送);
4.一个高速计数器HSC0中断。
在CPU 214中,可有下述21种不同的中断源:
1.八个I/O事件中断(I0.0—I0.3的上升沿和下降沿);
2.二个定时中断;
3.二个串行通信中断(port 0的接收和发送);
4.七个高速计数器中断;
5.二个脉冲输出中断(PLS0和PLS1脉冲计数完成)。
在CPU 215中,可有下述24种不同的中断源:
1.八个I/O事件中断(I0.0—I0.3的上升沿和下降沿);
2.二个定时中断;
3.二个串行通信中断(port 0的接收和发送);
4.七个高速计数器中断;
5.二个脉冲输出中断(PLS0和PLS1脉冲计数完成);
6.定时器T32和T96的CT=PT的二个中断;
7.一个port 0的完成接收信息中断。
在CPU 216中除具有CPU 215的24种不同的中断源外,还具有下述三个不同的中断源:
1.Port 1的完成接收信息中断;
2.Port 1接收字符中断;
3.Port 1完成发送的中断。
中断的优先级
S7-200中的中断优先级别从大的方面可按下列顺序分级:
通信(最高级);
I/O(含HSC和脉冲序列输出);
定时(最低级);
在每一级又按表所示的级别分级。
S7-200的中断优先级别
中断说明 | 优先组别 | 组中优先级 | 事件号 | CPU 212 | CPU 214 | CPU 215 | CPU 216 |
Port 0接收字符 | 通信最高级 | 0 | 8 | Y | Y | Y | Y |
Port 0发送结束 | 0* | 9 | Y | Y | Y | Y | |
Port 0接收信息结束 | 0* | 23 | Y | Y | |||
Port 1接收信息完 | 1 | 24 | Y | ||||
Port 1接收字符 | 1* | 25 | Y | ||||
Port 1发送结束 | 1* | 26 | Y | ||||
I0.0上升沿** | I/O中间级 | 0 | 0 | Y | Y | Y | Y |
I0.1上升沿 | 1 | 2 | Y | Y | Y | ||
I0.2上升沿 | 2 | 4 | Y | Y | Y | ||
I0.3上升沿 | 3 | 6 | Y | Y | Y | ||
I0.0下降沿** | 4 | 1 | Y | Y | Y | Y | |
I0.1下降沿 | 5 | 3 | Y | Y | Y | ||
I0.2下降沿 | 6 | 5 | Y | Y | Y | ||
I0.3下降沿 | 7 | 7 | Y | Y | Y | ||
HSC0 CV=PV | 0 | 12 | Y | Y | Y | Y | |
HSC1 CV=PV | 8 | 13 | Y | Y | Y | ||
HSC1改变计数方向 | 9 | 14 | Y | Y | Y | ||
HSC1外部复位 | 10 | 15 | Y | Y | Y | ||
HSC2 CV=PV | 11 | 16 | Y | Y | Y | ||
HSC2 改变计数方向 | 12 | 17 | Y | Y | Y | ||
HSC2外部复位 | 13 | 18 | Y | Y | Y | ||
PLS0完成计数 | 14 | 19 | Y | Y | Y | ||
PLS1完成计数器 | 15 | 20 | Y | Y | Y | ||
定时器0中断 | 定时最低级 | 0 | 10 | Y | Y | Y | Y |
定时器1中断 | 1 | 11 | Y | Y | |||
定时器T32 CT=PT | 2 | 21 | Y | Y | |||
定时器T96 CT=PT | 3 | 22 | Y | Y |
** 如果时间12(HSC0,PV=CV)连接到一个中断,则事件0和1都不能连接到中断链中。相反,如果事件0和1被连接到中断,则事件12就不能连接到中断链中。
优先级还有下列约定:
1.在指定的优先级内按先来先服务的原则;
2.任何情况下只执行一个中断服务程序,即没有中断嵌套功能(即在执行一个中断服务程序过程中不能再响应并执行另一中断服务程序);
3.一个中断正在处理时又有若干中断的申请,则需要按级别分别排列(形成队列),待以后陆续处理。
队列深度
所谓队列深度是指队列的最大长度。表中给出了S7-200系统中对不同队列的深度。如果队列超出队列深度则对应的队列溢出标志位置1。
队列名 | 队列深度 | 溢出标志位 | |||
CPU 212 | CPU 214 | CPU 215 | CPU 216 | ||
通信中断队列 | 4 | 4 | 4 | 8 | SM 4.0 |
HSC脉冲输出,I/O中断队列 | 4 | 16 | 16 | 16 | SMB 4.1 |
定时中断队列 | 2 | 4 | 8 | 8 | SMB 4,2 |
1.全局禁止与开放(使能)
全局禁止与开放统管PLC中的所有的中断,即禁止或开放所有的中断。但需指出的一点是,若PLC处全局禁止状态时有内部或外部的中断申请要求,则虽然PLC不予响应,但仍将生成各中断的队列。
当PLC进入RUN状态时,自动进入全局中断禁止状态。如需在适当的时候要开放全局中断,可在用户程序中使用全局中断开放指令ENI来实现。反之如需要再次作全局中断禁止时,可在程序的适当位置使用全局中断禁止指令DISI来实现。执行DISI指令不会影响当前正在执行中的中断服务程序的继续执行。只有当该中断服务程序执行完毕后,该功能才有效。
2.单个中断的开放与禁止
单个中断的开放与禁止(相对全局中断开发的条件下)。所有的指令分别位ATCH和DHCH。
保护的内容
PLC在执行中断服务程序嵌,自动将累加器AC和存有指令操作和累加器状态的特殊标志寄存器的内容推入堆栈保存起来;待PLC执行完中断服务程序后返回主程序前,又自动从堆栈弹出(恢复)这些数据,从而起到了保护中断前的现场的作用,使主程序能继续从中断前的状态继续执行下去。
中断程序的编程要点
中断程序的基本格式
1.在主程序中应有开放全局中断的指令,否则PLC不会响应任何中断的申请。
2.在主程序中应定义中断事件(请求)与中断服务程序的入口地址之间的关系,这是用attach指令来实现的。例如指令:attach 5,7(定义了事件号为7的事件如果申请中断,则执行5#(INT 5)中断服务子程序。有关事件号与事件的关系见表中的最后一列。
3.应在主程序的后面输入各准备调用的中断服务子程序,每个中断服务子程序的开始应用编号(即指令INT n)来定义其首地址,末尾应有中断返回指令(RET1)。
编程的
在编制中断程序时,应注意下述:
1.所有的备用的中断服务子程序必须放在主程序的后面。
2.在中断服务子程序中不能使用DISI,ENI,CALL,HDEF,FOR/NEXT和END等指令。
3.必须用中断无条件返回指令来结束中断服务子程序。
关于中断服务程序的几点说明
1.由于中断是随机产生的,也即是在主程序执行过程中随时都可能被中断,因此要求被中断的时间应越短越好,否则可能会产生不良的影响。这就要求用户编写的中断服务子程序应尽可能简洁,一方面使它只干那些只能在中断时期内干的事(可以不在中断期间干的事尽量在其它时间里去做),另一方面是要优化程序,使之长度短,执行又要快。
2.在使用attach指令作有关定义时,自动开放本项中断的申请。
3.多个事件可定义为执行同一个中断服务子程序,但同一个事件不能同时定义为执行多个服务子程序,如果在程序中为同一事件定义了多个服务子程序,则只有最后一个是有效的。