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开始执行中断程序的第一条指令,这中间的时间差。

它由两部分组成:

  1. 硬件延迟: 信号从输入端子传到CPU内部的时间。通常几微秒到几十微秒。
  2. 软件开销: CPU保存当前任务现场、查找中断向量表、跳转到中断程序入口的时间。这个跟CPU主频和系统负载有关。

拿西门子S7-1200举例,官方数据说硬件中断响应时间大约在10-20微秒。但这是理想情况。实际项目中,如果CPU正在处理一个耗时很长的程序循环,或者有多个中断排队,响应时间就会变长。

我建议你记住一个经验值:对于大多数中小型PLC,可靠的中断响应时间在50-200微秒之间。如果你的应用要求响应时间小于10微秒,那PLC可能不是最佳选择,得考虑FPGA或者专用运动控制器了。

怎么测响应时间? 我常用的方法是:在中断程序里立即翻转一个输出点,用示波器同时抓输入信号和输出信号,看时间差。这个方法简单粗暴,但很有效。

2.5 知识体系总览

说了这么多,咱们用一张图把中断源和优先级的关系理清楚。这张图是我自己画的,你看完应该能对中断的“江湖地位”有个直观认识。

中断源分类与优先级体系 CPU 中断控制器 优先级最高:硬件故障中断 / 急停中断 优先级高:高速计数器中断 / 外部中断 优先级中:定时中断 / 通信中断 优先级低:主程序循环(OB1) 中断嵌套规则 • 高优先级可打断低优先级 • 同级中断按FIFO排队 • 不建议超过2层嵌套 • 中断程序尽量短小 • 避免在中断中调用 耗时子程序 💡 关键点总结 • 中断源分类:外部、定时、高速计数器、通信、硬件故障 • 优先级决定响应顺序,安全相关中断永远最高 • 中断嵌套要谨慎,实际项目中能不用就不用

这张图把中断的“金字塔”结构画得很清楚。越靠近塔尖,优先级越高,响应越快。你在做项目规划时,可以照着这个思路,先把所有可能的中断事件列出来,然后按紧急程度排个序,再分配优先级。

好了,关于中断源和优先级,我就讲这么多。记住一句话:中断是PLC的“特种部队”,用好了事半功倍,用不好反而添乱。下一章咱们会结合高速计数器,讲讲具体怎么配置和编程,到时候你会对今天的内容有更深的理解。

课后思考: 假设你有一个项目,需要同时处理编码器定位(高速计数器中断)和急停按钮(外部中断),你会怎么设置它们的优先级?为什么?