很多人知道中断,但没有用过,也有很多人不知道中断,我是爱吃辣的老唐,一个用大白话聊工控的小老头。今天我打算以打比方举例的方式聊聊这这个问题,如果写的不好多多包涵,轻点喷。喜欢的话给个关注,点个赞什么的我会特别高兴。闲话不多说我们下面进入正题。
我们就以银行办理业务为例,银行办理业务有一套自己的流程,按照顺序一个客户办理。这套流程就是我们PLC的工作流程,而我们知道银行客户分为普通客户和VIP客户,VIP客户可以优先办理业务。中断程序就是PLC用户程序的VIP。
中断程序主要是处理特定事件的用户程序。在PLC执行正常扫描周期的工作时,中断是随时随机发生,只要中断事件发生,且PLC必须立即做出响应,这是与子程序不同之处。当中断事件发生,优先去执行中断事件所设定的工作。直至执行到中断工作完成后,再回到被中断的位置继续往下执行正常的的扫描周期流程。
假如我现在去银行办理业务,并且只要一个窗口可以办理业务,我拿到的号码是3号,2号业务完成以后应该就到我了。这时突然来了一个VIP客户,心情一下堕落到谷底,因为我要被VIP插队了,银行会先给VIP客户办理,我只能乖乖继续等待VIP业务办理完成。
如需执行中断程序必须要有引发执行中断请求的信号,告诉PLC“不好意思,我VIP客户,我要插一下队”,这个就是中断源。发出中断请求的信号源被称为中断源,中断源可以是PLC外部输入信号,也可以是PLC内部定时器、计数器等。每个中断信号都有一个编号加以识别,PLC执行哪个中断服务是靠这些不同编号来区分。
2)中断程序执行
PLC如何处理中断执行呢?
就像前面说的,到我办理业务的时候,突然来了VIP客户插队,这时正常排队就被在这里打断了,先办理VIP客户的业务,VIP客户办理完成以后在继续往下办理。PLC执行程序也同样道理,在接收到中断信号后,就会停止正常程序执行,先去执行中断程序。当中断程序执行完毕后,PLC会回到之前主程序继续往下执行被打断的程序。
银行窗口一次只能办理一个客户业务,PLC执行中断程序也一样,在任何时刻都只能执行一个中断服务程序。如果有多个中断事件同时发生时,来了好几个VIP客户怎么办呢?那就只能根据号码排队。PLC一般按照中断指针编号大小排列优先级,编号越小的优先级越高。比如中断指针I001小于I101,PLC会先处理I001中断事件。
对于中断程序我一直把它看做一种特殊的子程序,与子程序一样都写在主程序之外,用指针“I”作为入口地址标号。只要有中断信号就执行中断程序。PLC根据该中断信号找到相对应的中断程序去执行,直到执行到中断返回指令IRET后返回到断点(主程序或子程序中)处继续往下执行。
三菱PLC中断指令总共三个,分别是:EI(允许中断指令)、DI(禁止中断指令)、IRET(中断返回指令)
EI:允许中断指令。PLC通常为禁止中断状态。使用这个指令开启PLC中断功能,此指令是不需要驱动条件的独立指令。
DI:禁止中断指令。在改为允许中断功能以后,使用EI指令关闭PLC中断功能。此指令是不需要驱动条件的独立指令。
IRET:中断返回指令。此指令使程序从中断子程序返回到主程序的指令。
上面说了一大堆废话,看的是不是有点懵,我们实例分析一下。
- 实例1:输入中断
此程序利用X0与X1的输入信号通过中断程序,并使用输入输出刷新指令(REF/FNC 50)获得最新的输入信息,并能立即输出运算结果,从而可以实现不受可编程控制器运算周期影响的高速控制。FEND 指令为主程序的结束,中断子程序必须在FEND之后。
1)指针I001:当X0接通后,检测出其上升沿,执行中断子程序,无条件地执置位Y000,使用输出刷新指令将Y000~Y007的输出改写成最新的信息,没有输出刷新指令时,通过IR E T指令返回到主程序。
2)指针I100:当X1接通再断开后,检测出其下降沿,执行中断子程序,无条件地执复位Y000,使用输出刷新指令将Y000~Y007的输出改写成最新的信息,没有输出刷新指令时,通过IR E T指令返回到主程序。
- 实例2:时间中断