ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

IGH主站偶发无法进入OP状态的问题分析与解决方案

IGH主站偶发无法进入OP状态的问题分析与解决方案 一、问题现象IGH主站在实际使用中偶尔出现以下三类异常序号现象描述1确认safeop超时并报出sync manager watchdog错误2从站拒绝状态改变报出no sync error/fatal sync error/PLL error等错误3最严重从站无法进入INIT状态无任何回复且 SDO 数据无法读写。通过读取从站邮箱缓冲寄存器发现邮箱缓冲区虽有数据但从站已“挂死”无法再接收新数据必须重启从站才能恢复OP状态二、尝试过的初步方案对比 TwinCAT 的 ENI 文件分析其从站初始化流程并据此修改了fsm_slave_config.c中的相关逻辑。未明显起效修改详情可参考博客fsm_slave_config.c-CSDN博客该方案未明显解决上述问题。三、根本原因分析原始流程缺陷原始主站状态机流程进入配置状态机的逻辑情况1主站APP先启动从站后启动主站直接进入操作线程master-config_changed置 1从站在扫描结束后直接进入配置状态机。情况2从站先启动主站驱动后启动主站 APP 再后启动从站在扫描结束后因主站尚未激活主站状态机进入else分支调用ec_fsm_master_restart重启重新进入ec_fsm_master_state_broadcast此时config_changed 0APP未启动进入另一个else分支该分支会确认从站当前状态并通过配置状态机将从站转为PREOP其中ec_fsm_master_action_configure根据主站是否激活决定行为若已激活则进入ec_fsm_master_enter_write_system_times计算时钟偏移并请求所有从站进入OP若未激活则配置为PREOP扫描时分配状态若从站存在错误标志则进入ec_fsm_master_state_acknowledge调用fsm_change状态机读取寄存器0x0134查看 AL 状态并向0x0124写入无错误标志的当前状态以清除错误。关键故障点多次测试发现进不了 OP的典型流程是主站在配置状态机的“设置状态”阶段检测到从站异常al_code随后在确认清除错误状态时从站清除超时导致无法进入OP但若该超时发生在扫描结束后、配置状态机尚未开始之前后续进入配置状态机时错误已被清除从站可正常进入OP。结论原始流程中扫描结束后立即进入配置状态机过于仓促未预先清理从站的错误状态导致后续配置阶段因错误清除超时而失败。四、最终解决方案修改状态机流程核心思路在扫描结束与进入配置状态机之间强制插入“确认并清除错误状态”环节确保所有从站错误码被清理干净后再进入配置流程。具体修改内容代码级序号修改动作1删除扫描完成后直接进入配置状态机的代码改为执行restart2删除ec_fsm_master_state_broadcast中进入ec_fsm_master_enter_write_system_times的代码3删除ec_fsm_master_action_configure中进入ec_fsm_master_enter_write_system_times的代码4在确认状态结束后于ec_fsm_master_action_next_slave_state轮询完所有从站后统一进入ec_fsm_master_enter_write_system_times记得在末尾添加return5在ec_fsm_master_state_broadcast的recan_request下当主站处于 OP 线程即主站激活时将master-config_changed置 1因为删除了原入口需在此补上修改后固定流程不依赖启动顺序从站开始扫描 ↓ 扫描结束 ↓ 进入“确认状态机” → 检查各从站是否有错误码如有则清除 ↓ 所有从站状态确认完成 ↓ 主站激活后进入配置状态机 ↓ 配置完成 → 主站正常通讯OP无论从站、主站驱动、主站 APP三者以何种顺序启动均遵循上述统一流程。五、验证结果经后续反复测试该方案成功解决了 IGH 主站无法进入 OP 的问题所有从站可稳定进入运行状态。六、流程图Mermaid
返回列表