ABB AC500(AC500‑eCo/V3)基于 CODESYS IEC61131‑3 运行时,没有传统西门子 / 三菱那种写在主程序里的中断 OB 块;中断本质就是事件触发型任务(Event Task,外部中断任务 External‑task),依靠任务抢占调度实现中断效果。 软件:Automation Builder;任务优先级:0 最高,31 最低,高优先级任务可以打断低优先级任务执行ABB。
一、AC500 三种任务类型
自由运行任务 Freewheeling:主程序 PLC_PRG,循环反复跑,优先级最低,相当于三菱 / 西门子主扫描。
周期任务 Cyclic:固定时间间隔执行(1ms、10ms),定时触发。
事件任务 Event(中断任务):硬件 DI 边沿、内部事件触发,就是中断程序,外部硬件中断源只能绑定给事件任务eero。
AC500‑eCo 本体 DI0‑DI3 支持硬件外部中断,硬件电路检测边沿,不依赖主扫描周期,最高 5kHz 响应eero。
二、中断完整执行流程(硬件 DI 外部中断)
中断事件产生硬件输入端子检测到上升 / 下降沿,硬件产生中断请求;若中断未被屏蔽,向操作系统提交事件。
抢占当前任务,保存现场CPU 执行完当前正在执行的那一条指令后,暂停正在运行的低优先级任务(自由运行主任务 / 普通周期任务); 把断点地址、寄存器、堆栈现场保存,不是从头重启主任务,中断结束后从断点继续往下跑。
不会打断单条指令,指令执行中途不能被切走。
执行中断事件任务(中断服务程序)跳转到绑定该中断源的事件任务,按顺序执行该任务下所有 POU 程序(梯形图 / SCL/FBD)。
中断任务内部程序同样从上向下执行;
中断任务执行时间必须尽量短,每个任务自带看门狗,超过看门狗时间 CPU 报任务溢出故障停机ABB;
中断任务运行期间,更高优先级的中断还可以再次抢占本中断(中断嵌套)。
中断任务执行完毕所有逻辑跑完,任务退出。操作系统恢复之前保存的现场。
返回被打断的低优先级任务断点处,继续执行剩下的程序,不是重新扫描主程序。
如果中断到来时 CPU 正在执行更高优先级任务:中断请求进入事件队列 FIFO 排队,等高优先级任务结束才处理。
三、两种中断类型
1、硬件外部中断(DI 硬件边沿)
本体 DI0‑DI3,使用功能块OBIOInterruptPara开启硬件中断,绑定事件任务;硬件电路捕获边沿,不受主扫描周期约束,可以捕捉窄脉冲信号ABB。
注意:扩展模块 DI 一般不支持硬件中断,只有本体高速 DI 支持。
2、软件事件中断
内部 BOOL 变量上升沿触发事件任务;属于软件层面,响应会受系统调度抖动,适合非高速场景。
四、特性
I/O 映像不自动锁存中断任务内部读取物理 IO 变量,直接读取硬件缓冲区;中断执行过程中 IO 硬件状态可以继续变化。
最佳实践:中断任务开头,把需要的输入复制到局部变量,后续逻辑全部使用局部变量,模拟映像区锁存。
全局变量共享风险中断任务和主任务读写同一个全局变量时,会出现数据撕裂:主任务写到一半被中断打断,中断读取到不完整数据。 对策:简短数据;复杂数据使用互锁,或者拷贝副本。
中断嵌套优先级更高的事件任务可以抢占正在运行的低优先级中断;不要做多层深度嵌套,容易溢出看门狗。
中断禁止(屏蔽)调用功能块可以临时关闭中断,此时发生的中断事件进入队列缓存;打开中断后按 FIFO 顺序执行排队事件。队列溢出,丢失中断事件。
和传统 PLC 中断 OB 区别
西门子 S7‑1200:主 OB1 循环扫描,中断 OB 是 OB 块,主程序被打断,执行 OB,结束回到 OB1 断点。
三菱 FX5U:中断指针 I***,主 END 扫描结束才响应中断。
ABB AC500:中断就是事件任务,没有 OB 块概念,完全靠任务调度实现中断。
五、横向对比三家 PLC 中断机制
表格
| 项目 | 西门子 S7‑1200 | 三菱 FX5U | ABB AC500 |
|---|---|---|---|
| 中断载体 | 中断 OB 块 | I 中断指针 | Event 事件任务 |
| 调度模式 | 抢占式,打断 OB1 | 扫描周期末尾响应,非抢占 | 抢占式任务调度,支持嵌套 |
| 现场保存 | 保存 OB1 断点,返回断点 | END 处跳转,无中途抢占 | 保存任务断点,返回断点继续执行 |
| 硬件中断源 | 高速 DI | 高速 DI | 本体 DI0‑DI3 |
| IO 映像 | 进入中断瞬间锁存 I 映像 | 中断内部 X 不锁存 | 不自动锁存,需要手动拷贝 |
六、实操编写要点
新建一个Event 事件任务,设置高优先级,绑定硬件中断源;
将中断处理 POU 分配给这个事件任务;
在普通循环任务调用
OBIOInterruptPara功能块,使能硬件中断,设置滤波时间,防止抖动触发大量中断ABB;中断任务内部逻辑尽量简短,禁止写长延时、MSG 通讯;
任务配置看门狗时间,略大于中断最坏执行时间;
中断内部使用局部变量,减少直接读写全局变量。
误区:不要把中断逻辑写在普通自由运行任务里;普通任务不会被硬件边沿触发,依旧受扫描周期限制。





