MP 系列:周期任务、硬件中断任务共用同一套 0‑7 优先级体系,数值越大优先级越高(7 最高,0 最低)。 硬件中断任务不是硬件层面无条件抢占一切;它和周期任务、自由运行任务在操作系统调度器中平等参与优先级竞争。
一、核心调度规则
高优先级的周期任务,可以抢占低优先级的硬件中断任务如果正在执行一个优先级 = 7 的高速周期任务(运动闭环),此时来了一个优先级 = 3 的硬件外部中断:中断请求进入就绪队列排队,不能打断当前 7 级周期任务;要等 7 级周期任务执行完毕退出,CPU 才会去执行这个 3 级中断任务。
高优先级硬件中断任务,可以抢占低优先级周期任务CPU 正在运行优先级 = 2 的普通周期任务;来了优先级 = 6 的硬件中断;执行完当前单条指令,保存现场,立刻抢占,执行中断图纸;中断
IRET返回后,回到周期任务断点继续执行,周期任务不会从头扫描。同优先级:不能互相抢占
正在运行某优先级任务(不管是周期任务,还是硬件中断任务);再来同优先级的周期 / 中断请求,不会抢占,进入队列排队,等当前任务执行结束才执行。
例:正在跑 5 级硬件中断,此时 5 级周期任务触发,周期任务排队等待中断结束。
中断嵌套规则同样适用于周期任务对中断的抢占正在运行一个 4 级中断;此时 7 级周期任务定时触发;7 级周期任务抢占 4 级中断;7 级周期任务结束,回到 4 级中断继续执行;4 级中断执行完
IRET再回到原来被打断的任务。
很多人误区:硬件中断一定优先于周期任务。MP 不是这样,硬件中断只是触发源是硬件,执行优先级依然受 0‑7 等级约束;高优先级周期任务可以压住低等级中断,造成中断响应延迟。
二、两种典型现象
现象 1:低等级中断响应被高优先级周期任务延迟
场景:
周期任务 A:优先级 7,周期 2ms,每次执行 1.2ms(运动闭环)
硬件外部中断:优先级 2,外部 DI 边沿触发。
DI 硬件边沿来了,产生硬件中断信号,但 CPU 正在跑 7 级周期任务;中断不能抢占,只能排队,要等到 2ms 周期任务跑完,才执行中断程序。 后果:硬件中断实际响应时间被拉长,不再是硬件实时响应,会出现抖动、滞后。
工程经验:对响应时间要求严苛的硬件中断,中断等级要设置得高于所有会同时运行的周期任务优先级。
现象 2:中断正在执行,被更高优先级周期任务打断
中断任务优先级 4 正在运行;
7 级周期任务定时时间到达;
7 级周期任务抢占中断任务;周期任务跑完,回到中断断点继续执行。
会造成中断服务程序被切分,中断总处理时间变长。
三、EI / DI 指令的作用
EI、DI指令:全局屏蔽所有中断任务,同时也屏蔽周期任务的调度。
在程序执行
DI期间:不管周期任务定时到,还是硬件中断边沿到来,都不会执行;请求被锁存排队。执行
EI之后,排队的周期任务、中断任务按优先级依次执行。
DI不只是屏蔽硬件中断,同样会阻止周期任务调度;临界区保护要注意,不要长时间 DI,否则高速周期任务直接丢周期。
四、IO 与共享变量风险
周期任务、中断任务各自拥有独立 IO 快照;
高优先级周期任务改写全局变量,低优先级中断读取该变量,会发生数据撕裂;反之亦然。
解决:访问共享数据临界区使用
DI‑EI包裹,或者拷贝局部副本。
五、实操配置原则
高速硬件中断,它的优先级必须高于所有普通周期任务,否则会被高优先级周期任务阻塞,丧失硬件快速响应能力。
运动闭环高速周期任务(7 级),尽量不要让中断任务优先级达到 7,避免频繁互相抢占,带来系统抖动。
不要把关键硬件中断设置为低等级(0‑3),系统存在高优先级周期任务时,中断响应会被延迟。
在线监控:MPE720 可以查看中断任务的响应延迟,判断是否被高优先级周期任务阻塞。
六、对比其他 PLC 差异
表格
| PLC | 周期任务与硬件中断抢占关系 |
|---|---|
| 尼得科 MP | 周期任务、硬件中断共用 0‑7 优先级,数字越大越高;高优先级周期任务可以抢占低优先级硬件中断 |
| 西门子 S7‑1200 | 硬件中断 OB 优先级高于普通周期 OB;周期任务不能抢占硬件中断 OB |
| ABB AC500 | 事件任务(中断)、周期任务共用一套优先级;高优先级周期任务可以抢占低优先级事件任务 |
西门子 S7‑1200 的硬件中断 OB 本质上优先级天然高于循环 OB;而 MP 没有这种特殊优待,硬件中断只是 “触发源是硬件”,调度上和周期任务完全平等竞争。

