2.1.4 中断
1.中断的有关概念
中断是指PLC在平常按照顺序执行的扫描循环中,当有需要立即反应的请求发生时,立即中断其正在执行的扫描工作,优先地去执行要求所指定的服务工作;等该服务工作完成后,再回到刚才被中断的地方继续执行未完成的扫描工作。
可以举一个例子来说明中断的基本概念。某公司老总正坐在办公桌前批阅文件(正在执行扫描),突然电话铃响了(有中断请求),老总放下手头的工作(中断扫描工作)去接电话(执行中断服务),电话接听完毕(中断服务完成),老总又继续批阅文件(继续执行扫描)。
这个例子已经通俗地说明了中断的基本概念。
1)中断请求与中断源
中断也是一种程序流程转移,但这种转移大都是随机发生的,例如,故障报警、计数器当前值等于设定值、外部设备的动作等,事先并不知道这些事件发生的时刻,但这些事件出现后就必须尽快地对他们进行相应的处理,这时可用中断功能来快速完成上述事件的处理。另一种情况是对于大部分的应用,上述按照顺序扫描的控制方式已经足够,但对某些需要高速反应的应用场合(如模拟量控制、定位控制等),扫描时间的延时即代表误差的扩大,其反应时间甚至要到微秒,才能达到精度要求。在这种情况下,只有利用中断功能才能实现。
要求实行中断功能首先必须向PLC发出中断请求信号。发出中断信号的设备称为中断源,中断源可以是外部设备(各种开关信号),也可以是内部定时器、计数器,以及根据需要人为设置的中断源等。
2)断点与中断返回
当中断源向PLC发出中断请求信号后,PLC正在执行的扫描程序在当前指令执行完成后被停止执行,这样就在程序中产生一个断点,PLC必须记住这个断点,然后转移去执行副程序区的中断服务程序。
中断服务程序执行完后,PLC会再回到刚才中断的地方(称为中断返回),从断点处的下一条指令开始继续执行未完成的扫描工作。这一过程不受PLC扫描工作方式的影响,因此,可使PLC能迅速响应中断事件。换句话说,中断程序不是在每次扫描循环中进行处理的,而是在需要时被及时地处理。
2.中断优先与中断控制
继续上面电话的事例,如果该老总面前有三部电话,当老总正在接第一个电话时,又有一部电话铃响了,这时老总是听完第一个电话后,去接第二电话,还是中断第一个电话,马上去接第二个电话?这就涉及当发生多重中断时中断优先的问题。
什么是中断优先呢?在多重中断输入结构时,会将各个中断输入按照其重要性给予其不同的中断优先顺序。当CPU接受某一个中断请求且正执行该中断的服务程序的同时,如果有另一个中断请求发生,CPU将比较两个中断的中断优先级。如果其优先级低于正在执行的中断,CPU将不理会该中断,必须等执行完现行的中断服务程序后才会接受该中断,并按照产生中断请求的先后次序进行处理。但如果其优先顺序高于正在执行的中断,CPU将立即停止其正在执行的中断服务程序,跳入更高优先级的中断服务程序去执行。等执行完成后,再回到刚才被中断的较低优先级服务程序中去,继续完成未完成的工作。这种处理方式称为中断程序的嵌套应用。
回到上面的事例,如果第二个电话是董事长直线电话,其优先级最高,该老总会立即放下第一个电话去接第二个电话;如果第二个电话是下属来电,该老总会听完第一个电话后,再听第二个电话,听完第二个电话后,再继续批阅文件。
不同品牌的PLC关于中断优先的设定是不同的,三菱FX系列PLC的中断功能原则是不能嵌套的。也就是说,正在执行某一中断程序时,不能再接受其他中断程序的处理。但作为特殊处理,FX2N PLC运行时可以使用一次且仅可使用一次中断嵌套。
不是所有的应用程序都需要PLC的中断功能,用户一般也不需要处理所有的中断事件,因此,PLC设置了中断控制指令来控制是否需要中断和需要哪些中断。中断控制指令一般包含允许中断指令(又称开中断)和禁止中断指令(又称关中断)。在程序中设置允许中断指令后,则后面的扫描程序中,就允许处理事先设置的中断处理功能;在程序中设置了禁止中断指令后,则后面的扫描程序中,就禁止处理所有的中断功能,直到重新执行允许中断指令。
3.中断服务程序结构与编写
中断和子程序调用虽然同样用到副程序,但其调用(跳到副程序去执行)的方式却不同。子程序调用是在主程序中执行子程序调用指令(一般为CALL指令)时,PLC会记下CALL指令所指定的副程序名称,并到副程序区执行该标记名称的副程序,一直执行到子程序返回指令后,才会返回主程序。中断的调用则不是利用软件指令,而是由硬件电路发出中断信号给PLC,由PLC自行去辨别该中断的名称,自动跳入副程序中以该中断名称为标记的“中断服务程序”中去执行,执行到中断返回指令后,才返回到主程序。上述中断服务程序结构如图2-7所示。由“头”“尾”及中断服务程序组成。“头”即为该中断的唯一中断标志名称,而“尾”就是中断返回指令,告诉PLC中断程序的结束,头尾中间为中断服务程序本身,用来告知PLC在该中断发生时必须执行哪些控制操作。中断服务程序编写要注意下面两个问题。
图2-7 中断服务程序结构
(1)设计中断程序时应遵循“越短越好”的原则。中断服务程序的执行会延迟主程序执行的时间,如果中断服务程序执行时间过长,则有可能引起主程序所控制的设备操作发生异常。因此,必须对中断服务程序进行优化,使其尽量短小,以减少其执行时间,从而减少对主程序处理的延迟。
(2)中断服务程序是随机调用的,必须谨慎地设计中断服务程序的各种软元件,弄清楚中断服务子程序中软元件和主程序中软元件的关系,中断服务程序中的软元件最好是独立的,当然,与主程序相关的除外。