2、中断源与优先级:中断源分类、中断优先级概念、中断嵌套、中断响应时间
好,咱们接着聊中断。上一章我把中断的基本概念讲清楚了,这一章咱们深入一点,聊聊中断的“身份”和“规矩”。
你想想看,一个PLC系统里,可能同时有好几个事件等着处理。比如高速计数器计到设定值了,同时外部急停按钮也按下了,这时候CPU该先理谁?这就引出了我们今天要讲的核心——中断源分类和优先级。
2.1 中断源分类:谁有资格“插队”?
中断源,说白了就是能触发中断的那些“信号源”。不同品牌的PLC分类方式略有差异,但大体上可以归为这么几类。我个人习惯把它们分成“内部”和“外部”两大类,这样好记。
| 中断源类别 | 典型来源 | 我遇到过的场景 |
|---|---|---|
| 外部中断 | 数字量输入点(I0.0、I0.1等)的上升沿/下降沿 | 急停按钮、限位开关、光电传感器信号 |
| 定时中断 | CPU内部定时器,比如S7-1200的OB10、OB35 | 固定周期采样、PID运算、数据记录 |
| 高速计数器中断 | HSC模块的计数值到达、方向变化、外部复位 | 编码器定位、测速、长度测量 |
| 通信中断 | PROFINET、Modbus、串口接收完成 | 与上位机或变频器交换数据 |
| 硬件故障中断 | 模块掉线、电源故障、I/O短路 | 诊断报警、安全停机 |
2.2 中断优先级:谁先谁后?
优先级这个概念,其实很好理解。就像医院急诊室,心跳骤停的病人肯定比手指划伤的病人优先处理。PLC里也一样,每个中断源都有一个“优先级”数字,数字越小(或越大,看品牌定义),优先级越高。
为什么会这样设计?因为有些中断必须立刻响应,晚一毫秒都可能出事故。比如急停中断,必须第一时间切断动力电源。而定时中断晚个几毫秒,可能只是数据记录不太准,影响不大。
嗯,这里要注意:不同品牌PLC的优先级规则不一样。西门子S7-1200/1500里,硬件中断(比如输入点中断)的优先级默认高于定时中断。而三菱FX系列里,中断指针的编号(I0xx、I1xx)就隐含了优先级顺序。
2.3 中断嵌套:中断里还能再中断?
这个问题,很多初学者会问。答案是:可以,但有条件。
中断嵌套,就是CPU正在处理一个中断程序时,突然来了一个优先级更高的中断请求。这时候CPU会暂停当前的中断程序,转去处理那个更紧急的中断。处理完高优先级的中断后,再回来继续执行刚才被打断的中断程序。
听起来很合理对吧?但实际项目中,我不建议轻易使用多层嵌套。为什么?
- 响应时间不可控: 嵌套层数越多,最底层的中断被延迟的时间就越长。
- 堆栈溢出风险: 每个中断都会占用堆栈空间,嵌套太深可能把堆栈撑爆。
- 调试困难: 中断嵌套时,程序执行顺序变得非常复杂,出问题很难查。
2.4 中断响应时间:到底有多快?
这是大家最关心的实际问题。中断响应时间,就是从中断事件发生,到CPU开始执行中断程序的第一条指令,这中间的时间差。
它由两部分组成:
- 硬件延迟: 信号从输入端子传到CPU内部的时间。通常几微秒到几十微秒。
- 软件开销: CPU保存当前任务现场、查找中断向量表、跳转到中断程序入口的时间。这个跟CPU主频和系统负载有关。
拿西门子S7-1200举例,官方数据说硬件中断响应时间大约在10-20微秒。但这是理想情况。实际项目中,如果CPU正在处理一个耗时很长的程序循环,或者有多个中断排队,响应时间就会变长。
我建议你记住一个经验值:对于大多数中小型PLC,可靠的中断响应时间在50-200微秒之间。如果你的应用要求响应时间小于10微秒,那PLC可能不是最佳选择,得考虑FPGA或者专用运动控制器了。
2.5 知识体系总览
说了这么多,咱们用一张图把中断源和优先级的关系理清楚。这张图是我自己画的,你看完应该能对中断的“江湖地位”有个直观认识。
这张图把中断的“金字塔”结构画得很清楚。越靠近塔尖,优先级越高,响应越快。你在做项目规划时,可以照着这个思路,先把所有可能的中断事件列出来,然后按紧急程度排个序,再分配优先级。
好了,关于中断源和优先级,我就讲这么多。记住一句话:中断是PLC的“特种部队”,用好了事半功倍,用不好反而添乱。下一章咱们会结合高速计数器,讲讲具体怎么配置和编程,到时候你会对今天的内容有更深的理解。