汇川AM600作为高端运动控制器,在精密压铸、高速分拣等场景中,中断响应延迟是决定系统成败的关键。然而,许多工程师发现AM600的硬件中断有时会出现数毫秒抖动,远高于标称的50μs。本文从RTOS调度、中断嵌套与缓存一致性三个层面进行深度分析。
某压铸机项目使用AM600配合伺服压力控制,需要将压力传感器上升沿中断响应时间控制在200μs以内。实测中,中断触发到执行压力调节指令,最差达到2.1ms。通过AM600的“系统事件日志”查看,发现中断发生在主轴回零任务执行期间。AM600内嵌的CODESYS运行时,默认将任务优先级设为“中等”,而用户手动配置的中断优先级虽然设为最高,但系统内部的中断向量表处理中存在“中断屏蔽窗口”。当主轴任务执行到“NOP”或“数据同步”指令时,CPU会短暂关闭全局中断,导致延迟。
排查工具:使用AM600的“硬件断点”功能,在中断服务函数入口设置断点,配合逻辑分析仪抓取GPIO引脚电平。发现中断触发后,CPU平均在500μs内进入服务函数,但偶尔延迟至1.8ms。进一步分析,是AM600的L2缓存写回策略导致:当上位机通过EtherCAT频繁读写变量时,缓存行被污染,中断触发后需要等待缓存刷新。
优化方案:首先,将中断服务函数拆分为“快速响应”与“主处理”两部分,快速响应部分只设置标志位,而主处理由高优先级任务轮询。其次,在系统配置中,为中断相关的内存区域设置“非缓存”属性,避免缓存一致性问题。最后,调整RTOS任务调度:将所有非运动控制任务(如HMI通信、日志记录)分配给CPU核心1,而核心0专用于运动控制与中断处理,实现硬实时隔离。
维护经验:建议在AM600项目的初始阶段,就使用“响应时间测量”功能块(如SysTimeRtc)对每个中断进行在线统计,并设置阈值告警。对于要求高于100μs的应用,务必采用“中断任务”而非“循环任务”,并禁用中断内调试。