摘要:
传统的PLC程序通常采用循环扫描模式,主组织块(OB1)周期性执行。
然而,某些关键事件(如硬件中断、时间中断、更新中断)要求PLC必须立即响应,而不是等待下一个扫描周期。
TIA Portal提供了一系列事件型组织块(Event OB),允许工程师为特定系统事件编写独立的处理程序。
本文将深入探讨不同类型事件OB的应用场景、配置方法以及基于事件编程的设计模式,帮助读者构建响应更及时、结构更清晰、资源利用更高效的PLC程序。
引言
想象一个场景:一个高速计数模块检测到物料到达位置,需要立即触发拍照检测,如果等待OB1扫描到该信号,可能已经晚了数百毫秒,物料已经错过最佳拍照位置。
这就是事件驱动编程的价值所在——它让PLC能够“即时响应”外部世界的变化。
事件型组织块是中断服务程序,当预设的事件发生时,CPU会暂停当前正在执行的程序,跳转执行相应的事件OB,执行完毕后返回断点继续执行。
一、 事件型组织块的分类与特点
TIA Portal根据S7-1200/1500系列CPU的能力,提供了多种事件OB:
循环中断OB(OB3x):按固定时间间隔触发,不受扫描周期影响。适用于周期性采样、PID控制等需要精确时序的任务。
硬件中断OB(OB4x):由特定硬件事件触发,如数字量输入上升沿/下降沿、高速计数器比较值到达、HSC门控信号等。适用于对实时性要求极高的场合。
延时中断OB(OB2x):在设定的延迟时间后触发一次。适用于需要精确延时执行的单次任务。
时间中断OB(OB1x):在设定的日期和时间触发。适用于定时启停、数据归档等周期性日历任务。
诊断中断OB(OB8x):当模块发生诊断事件(如断线、短路)时触发。配合诊断指令,可实现设备故障的即时响应和自动处理。
二、 典型应用场景与配置方法
场景1:高速位置捕捉
在包装线上,一个光电传感器检测到产品时,需要立即记录编码器的当前计数值(用于定位)。
配置:将高速计数器模块的“比较值到达”事件分配给一个硬件中断OB(如OB40)。
编程:在OB40中,编写程序读取编码器的当前值,存入全局数据区。整个过程在微秒级完成,不受OB1扫描周期影响。
场景2:设备故障自动响应
当某个分布式IO模块发生断线故障时,自动触发一个应急处理流程。
配置:在CPU属性中,启用诊断中断,并将其分配给一个诊断中断OB(如OB82)。
编程:在OB82中,编写程序判断故障模块,并自动将相关输出切换到安全状态(如紧急停机)。同时,生成一个报警,发送到HMI。
三、 基于事件编程的设计模式
分离关键任务与常规任务:
将实时性要求高的代码放在事件OB中,将状态管理、人机交互等非实时任务放在OB1中。
事件OB应保持代码简短,只做最必要的处理(如数据采集、信号置位),避免在中断中执行复杂计算或长时间循环。
事件与主程序的通信:
事件OB通常通过全局数据块或函数块接口与OB1交换数据。
例如,OB40检测到信号后,将计数器的值存入一个缓冲区,并在全局标志中置位“新数据可用”。
OB1在下一个周期检测到该标志后,再对数据进行后续处理。
避免重入与数据一致性:
如果事件OB与OB1访问同一数据区,需要考虑数据一致性。
可以使用“DIS_AIRT”和“EN_AIRT”指令(禁止/允许更高优先级中断),或使用临时变量和原子操作来保护共享数据。
四、 高级应用:同步循环中断与工艺对象
对于运动控制等高级应用,CPU的循环中断OB(如OB91)可以与工艺对象(如轴)同步执行。
在OB91中,可以直接调用运动控制指令,这些指令将按照精确的插补周期执行,实现高精度的多轴同步控制。
这是实现复杂运动轨迹的基础。

