3. PLC扫描周期详解
在工业AI实时性设计中,PLC(可编程逻辑控制器)是产线控制的核心执行单元。AI推理结果最终要转化为对执行机构的动作指令,必须经由PLC的扫描周期进行调度。理解PLC扫描周期的内部结构、时间参数和影响因素,是设计低延迟工业AI系统的前提。本节将系统拆解扫描周期的组成,给出典型时间参数范围,并分析影响扫描周期的关键因素,帮助你在实际项目中准确估算端到端延迟。
3.1 扫描周期的四阶段组成
PLC采用循环扫描的工作方式,一个完整的扫描周期由四个顺序执行的阶段构成。理解每个阶段的时间开销和功能边界,是进行延迟预算的基础。
- 输入采样阶段(I/O刷新):PLC读取所有数字量输入模块和模拟量输入模块的物理信号,将其状态存入输入映像寄存器。此阶段的特点是批量读取,即无论程序是否使用某个输入点,都会被刷新。输入滤波时间(如RC滤波、数字滤波)也在此阶段消耗。
- 程序执行阶段:CPU从第一条指令开始,逐条执行用户程序(梯形图、ST、FBD等),直到END指令。程序中的触点/线圈读写的是输入/输出映像区,而非直接操作物理I/O。此阶段是扫描周期中耗时最不确定的部分,取决于程序长度、指令类型和分支复杂度。
- 输出刷新阶段:CPU将输出映像区的状态一次性传送到输出模块,驱动物理执行器(继电器、晶体管、晶闸管等)。输出模块的电气响应时间(如继电器线圈吸合时间)也计入此阶段。
- 通信与系统服务阶段:处理通信任务(以太网、PROFINET、Modbus TCP等)、执行系统诊断、自检、固件维护等。此阶段的时间随通信负载和诊断事件波动。
3.2 典型时间参数与量级参考
不同档次的PLC,其扫描周期差异显著。下表给出了常见PLC类型的典型时间参数,供延迟估算时参考。
| PLC类型 | 扫描周期范围 | 输入采样时间 | 程序执行时间(1K指令) | 输出刷新时间 | 通信抖动 |
|---|---|---|---|---|---|
| 微型PLC(如LOGO!) | 5~20ms | 0.5~2ms | 0.3~1ms | 0.2~0.5ms | ±1~3ms |
| 中小型PLC(如S7-1200) | 1~10ms | 0.1~0.5ms | 0.05~0.2ms | 0.1~0.3ms | ±0.5~1ms |
| 大型PLC(如S7-1500) | 0.5~5ms | 0.05~0.2ms | 0.02~0.1ms | 0.05~0.2ms | ±0.2~0.5ms |
| 运动控制器(如SIMOTION) | 0.25~2ms | 0.02~0.1ms | 0.01~0.05ms | 0.02~0.1ms | ±0.1~0.3ms |
需要注意的是,上述数据为典型值,实际项目中应通过PLC的在线诊断功能(如S7-1500的"循环时间"监控)获取实测值。扫描周期的最大值比平均值更重要,因为AI系统的实时性设计必须保证在最坏情况下仍满足动作窗口要求。
3.3 影响扫描周期的关键因素
扫描周期并非固定不变,以下因素会显著影响其长度和稳定性,在工业AI项目设计时必须逐一评估。
- 程序复杂度与指令类型:浮点运算、PID运算、字符串处理等指令比位逻辑指令耗时高10~100倍。AI推理结果的处理若涉及大量浮点转换或数组操作,会明显拉长程序执行时间。
- I/O点数与模块类型:模拟量模块的采样转换时间(如4~20mA信号需0.1~1ms稳定)比数字量模块长。分布式I/O(通过PROFINET等总线连接)还会增加通信延迟。
- 通信负载:PLC与HMI、SCADA、AI服务器之间的以太网通信会占用系统服务时间。当通信数据量增大或报文频率提高时,扫描周期会相应延长。
- 中断与事件触发:硬件中断(如高速计数器、输入边沿中断)会暂停当前扫描,执行中断服务程序后再返回。频繁的中断会导致扫描周期抖动。
- 系统诊断与固件功能:启用在线监控、Trace功能、诊断缓冲区记录等会额外消耗CPU时间。
3.4 案例拆解:AI质检系统的扫描周期优化
某汽车零部件产线部署了基于机器视觉的AI质检系统,要求将缺陷信号在50ms内传送至PLC并触发剔除气缸动作。初始方案中,AI推理服务器通过Modbus TCP将结果写入PLC的保持寄存器,PLC程序每周期读取该寄存器。
初始现象与数据:PLC为S7-1200,实测扫描周期平均4.2ms,最大6.8ms。AI推理平均耗时28ms,通信传输约3ms。端到端延迟实测为:传感器触发→AI推理完成→PLC读取→输出动作,总计约65ms,超出50ms要求。
分析判断过程:通过PLC在线监控发现,程序执行阶段耗时2.1ms,其中包含对AI结果寄存器的字符串解析(将ASCII码转换为浮点数)耗时0.8ms。通信阶段耗时1.5ms,原因是AI服务器每50ms发送一次结果,但PLC的通信处理被安排在扫描周期的末尾,导致数据到达后需等待下一个周期才能被程序读取。
优化操作步骤:
- 将AI结果的数据格式从ASCII字符串改为16位整数(缺陷类型编码),省去字符串解析,程序执行时间降至1.3ms。
- 在PLC中启用循环中断OB30(周期5ms),在中断中直接读取AI结果寄存器并置位输出标志,避免等待主扫描周期。
- 将AI服务器的通信周期从50ms缩短至20ms,并采用PROFINET IRT(等时同步实时通信)替代Modbus TCP,通信抖动从±1.2ms降至±0.3ms。
结果对比:优化后,端到端延迟实测为:传感器触发→AI推理完成(28ms)→通信传输(2ms)→PLC中断读取(<1ms)→输出动作(1ms),总计约32ms,满足50ms要求。扫描周期虽因中断增加而略有波动(最大7.2ms),但关键路径延迟大幅缩短。
风险与代价:循环中断的使用增加了程序复杂度,需注意中断服务程序不能执行耗时操作(如通信请求)。同时,PROFINET IRT需要PLC和交换机硬件支持,项目成本略有上升。
复盘经验:工业AI延迟优化不能只看AI推理速度,必须将PLC扫描周期结构纳入整体设计。优先采用中断机制处理高实时性信号,将AI结果数据格式设计为PLC易于解析的简单类型,并选用支持实时通信的工业协议。
3.5 常见误区与设计要点
RD_SINFO(读取系统信息)或GET_CYCLIC_INFO(S7-1500)指令可以实时获取当前扫描周期值,建议在调试阶段将其记录到数据日志中,用于验证延迟预算。- 误区一:认为扫描周期是固定值。实际上,扫描周期随程序分支、通信负载和中断事件动态变化。设计时必须以最大扫描周期为基准。
- 误区二:忽略输入滤波时间。PLC输入模块的滤波设置(如0.1ms、0.5ms、1ms)会直接增加信号采集延迟。对于高速AI触发信号,应设置为最小滤波或使用中断输入。
- 误区三:将AI结果写入普通数据区。如果AI结果写入掉电保持区(如DB的保持属性),会触发额外的EEPROM写入操作,增加通信阶段耗时。应使用非保持数据区。
- 误区四:在程序执行阶段频繁读写通信数据。每次调用通信指令(如TCON、TSEND)都会消耗数百微秒。应集中在一个周期内完成数据交换。
总结而言,PLC扫描周期是工业AI实时性设计的核心约束之一。通过理解其四阶段组成、掌握典型时间参数、识别影响因素,并采用中断、数据格式优化和实时通信等手段,可以有效压缩端到端延迟,确保AI系统在严苛的工业环境中稳定运行。