中断处理用来实现对特殊内部事件或外部事件的快速响应。CPU检测到中断请求时,立即响应中断,调用中断源对应的中断程序(OB)。执行完中断程序后,返回被中断的程序中。
中断源类型主要有:I/O模块的硬件中断,软件中断,例如日期时间中断、延时中断、循环中断和编程错误引起的中断等。
1.日期时间中断组织块
日期时间中断组织块有OB10~OB17.CPU318只能支持OB10和OB11,其余的S7-300CPU只支持OB10.S7-400支持的日期时间中断OB的个数与CPU的型号有关。
日期时间中断可以在某一特定的时间和日期执行一次,也可以从设定的日期时间开始,周期性地重复执行,例如每分钟、每小时、每天、甚至每年执行一次。
1)设置日期时间中断有两种方法
A.采用SFC28“SET_TINT”和SFC30“ACT_TINT”设置和激活日期时间中断。
B.在硬件组态界面,通过右击CPU模块,设置选项卡”Time-Of-Day Interrupts"进行设置。在“Time-Of-Day Interrupts”选项卡中设置好时间,同时选择“Active”激活多选框,将硬件下载到CPU中,即可实现日期时间中断的自动启动。
C.结合A、B两种方法,使用B中的方法,但是不勾选“Active”复选框,用来设置中断循环周期及相关中断参数;在代码中使用SFC30“ACT_TINT"来激活日期时间中断。
2)查询日期时间中断
使用SFC31”ORY_TINT“可以查询出程序中都设置了哪些日期时间中断,以及这些中断什么时候发生。SFC31输出的状态字节如下表所示:
3)禁止和激活日期时间中断
SFC28用于取消日期时间中断、SFC29用于重新设置时间中断、SFC30用于激活日期时间中断。
在调用SFC28设置循环周期”OB10_PERIOD_EXE"时,可以设置以下参数:
W#16#0000(仅执行一次)、W#16#0201(每分钟执行一次)、W#16#0401(每小时执行一次)、W#16#1001(每天执行一次)、W#16#1201(每周执行一次)、W#16#1401(每月执行一次)、W#16#1801(每年执行一次)和W#16#2001(月末执行一次)
4)下面通过一个示例来说明日期中断的使用
例:在I0.0的上升沿时启动日期时间中断OB10,在I0.1为1时禁止日期时间中断,每次中断使用MW2加1。从2015年2月19日8时开始,每分钟中断一次,每次中断MW2被加1.
本程序使用了SFC3“D_TOD_DT"用于将日期和时间整合成日期时间类型,程序编写如下:
a.日期时间中断设置及激活功能FC1
b.OB块调用功能FC1
c.OB10实现NW2增1功能
d.程序运行后效果图
2.延时中断
PLC中的普通定时器的工作与扫描工作方式有关,其定时精度受到不断变化的循环周期的影响。使用延时中断可以获得精度较高的延时,延时中断以ms为单位定时。
S7提供4个延时中断OB(OB20~OB23),CPU可以使用延时中断OB的个数与CPU的型号有关,S7-300(不含CPU318)只能使用OB20,。用SFC32”SRT_DINT"启动,经过设定的时间触发中断,调用SFC32指定的OB。延时中断可以用SFC33“CAN_DINT"取消。用SFC34”ORY_DINT"查询延时中断的状态,它输出的状态字节STATUS如表所示。
例:在I0.0的上升沿用SFC32启动延时中断OB20,10s后OB20被调用,在OB20中将Q4.0置位,并立即输出。在延时过程中如果I0.1由0变为1,在OB1中用SFC33取消延时中断,OB20不会再被调用。I0.2由0变为1时Q4.0被复位。
程序编写如下:
1)OB块设置延时中断定时器
2.延时中断定时器中置位输出
程序代码可以在此下载。