首页 理论教育 中断程序的基本概念与优化

中断程序的基本概念与优化

时间:2026-01-23 理论教育 对我是小斗 版权反馈
【摘要】:CPU暂停正在执行的程序,调用中断源对应的中断程序。执行完中断程序后,返回被中断的程序的断点处继续执行原来的程序。如果在执行中断程序时,又检测到一个中断请求,CPU将比较两个中断源的中断优先级。这种处理方式称为中断程序的嵌套调用。编写中断程序时,应使中断程序尽量短小,以减少中断程序的执行时间,减少对其他处理的延迟,否则可能引起主程序控制的设备操作异常。

1.中断过程

中断处理用来实现对特殊内部事件或外部事件的快速响应。如果没有中断,CPU循环执行组织块OB1。当CPU检测到中断源的中断请求时,操作系统在执行完当前程序的当前指令(即断点处)后,立即响应中断。CPU暂停正在执行的程序,调用中断源对应的中断程序。在S7-300/400中,中断用OB来处理。执行完中断程序后,返回被中断的程序的断点处继续执行原来的程序。

PLC的中断源可能来自I/O模块的硬件中断,或是CPU模块内部的软件中断,例如日期时间中断、延时中断、循环中断和编程错误引起的中断。

如果在执行中断程序(OB)时,又检测到一个中断请求,CPU将比较两个中断源的中断优先级。如果优先级相同,按照产生中断请求的先后次序进行处理。如果后者的优先级比正在执行的OB的优先级高,将中止当前正在处理的OB,改为调用较高优先级的OB。这种处理方式称为中断程序的嵌套调用。

一个OB被另一个OB调用时,操作系统对现场进行保护。被中断的OB的局域数据压入L堆栈(局域数据堆栈),被中断的断点处的现场信息保存在I堆栈(中断堆栈)和B堆栈(块堆栈)中。

中断程序不是由程序块调用,而是在中断事件发生时由操作系统调用。因为不能预知系统何时调用中断程序,中断程序不能改写其他程序中可能正在使用的存储器,应在中断程序中尽可能地使用局域变量。

编写中断程序时,应使中断程序尽量短小,以减少中断程序的执行时间,减少对其他处理的延迟,否则可能引起主程序控制的设备操作异常。设计中断程序时应遵循“越短越好”的原则。

2.OB的分类

OB只能由操作系统起动,它由变量声明表和用户编写的控制程序组成。

(1)起动OB

起动OB用于系统初始化,CPU上电或操作模式改为RUN时,根据起动的方式执行起动程序OB100~OB102中的一个。

(2)循环执行的OB(https://www.xing528.com)

需要连续执行的程序存放在OBI中,执行完后又开始新的循环。

(3)定期执行的OB

包括日期时间中断组织块OB10~OB17和循环中断组织块OB30~OB38,可以根据设定的日期时间或时间间隔执行中断程序。

(4)事件驱动的OB

延时中断OBZO~OB23在过程事件出现后延时一定的时间再执行中断程序;硬件中断OB40~OB47用于需要快速响应的过程事件,事件出现时马上中止循环程序,执行对应的中断程序。异步错误中断OB80~OB87和同步错误中断OB121、OB122用来决定在出现错误时系统如何响应。

3.中断的优先级

中断的优先级也就是OB的优先级,较高优先级的OB可以中断较低优先级的OB的处理过程。如果同时产生的中断请求不止一个,最先执行优先级最高的OB,然后按照优先级由高到低的顺序执行其他OB。

中断的优先级由低到高的排列顺序是:背景循环、主程序扫描循环、日期时间中断、时间延时中断、循环中断、硬件中断、多处理器中断、冗余错误、异步故障(OB80~87)、起动和CPU冗余。

需要指出的是,同一个优先级可以分配给几个OB,具有相同优先级的OB按起动它们的事件出现的先后顺序处理。被同步错误起动的故障OB的优先级与错误出现时正在执行的OB的优先级相同。

4.对中断的控制

日期时间中断和延时中断有专用的允许处理中断和禁止中断的系统功能(SFC)。其中,SFC39“DIS_INT”用来禁止所有的中断、某些优先级范围的中断或指定的某个中断;SFC 40“EN_INT”用来激活(使能)新的中断和异步错误处理。如果用户希望忽略中断,可以下载一个只有块结束指令BEU的空的OB;SFC41“DIS_AIRT”延迟处理比当前优先级高的中断和异步错误;SFC 42“EN_AIRT”允许立即处理被SFC 41暂时禁止的中断和异步错误。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈