当前位置: 首页 > news >正文

【原创】IgH EtherCAT主站详解(十二)--EtherCAT热插拔处理

热插拔处理

4.3 — 从站热插拔检测、配置恢复与 WKC 监控机制


概览

什么是热插拔?

热插拔 (Hot-plug) 是指在 EtherCAT 主站运行期间,动态添加或移除从站设备而不需要重启主站或重新加载内核模块的能力。IgH EtherCAT Master 通过 Master FSM 的周期性广播探测来自动检测总线拓扑变化,并在检测到变化时触发重新扫描和配置恢复。

核心机制

检测: Master FSM 周期性 BRD 广播读取从站数量,通过 WKC 和从站计数变化检测拓扑改变
扫描: 检测到变化后自动触发完整的拓扑扫描
配置: 扫描完成后,根据已有的从站配置 (ec_slave_config) 自动恢复
恢复: 将重新上线的从站配置到与之前相同的状态 (PDO/SDO/DC)


技术详情

热插拔检测机制

Master FSM 在 IDLE 线程的每次循环中都会执行广播读取:

flowchart TDA["Master FSM: broadcast 状态"] --> B["BRD 读取 0x0130<br/>slaves_responding[dev_idx]"]B --> C{"WKC 正确?<br/>WKC = 从站数"}C -->|是| D["更新 slaves_responding"]C -->|否| E["记录 WKC 错误"]D --> F{"从站数量变化?"}E --> FF -->|是| G["标记 rescan_required"]F -->|否| H["继续监控下一设备"]G --> I["触发重新扫描流程<br/>清除地址→测量延迟→扫描"]H --> A

WKC (Working Counter) 监控

WKC 是检测从站在线/离线的关键指标。每个 EtherCAT Datagram 都有一个 WKC 字段:

操作 WKC 增量 说明
读操作 +1 每个成功读取的从站使 WKC 加 1
写操作 +2 每个成功写入的从站使 WKC 加 2
读写操作 +3 每个成功读写的从站使 WKC 加 3
广播读 (BRD) = N 期望值等于在线从站总数 N

当 BRD 读取的 WKC 不等于预期的从站数量时,说明有从站上线或离线。

配置恢复流程

重新扫描完成后,Master FSM 会将已有的从站配置 (ec_slave_config) 与新扫描到的从站进行匹配:

sequenceDiagramparticipant FSM as Master FSMparticipant SCAN as Slave Scan FSMparticipant CFG as Slave Config FSMparticipant SLAVE as 从站设备Note over FSM: 检测到从站数量变化FSM->>SCAN: 触发重新扫描SCAN->>SCAN: 扫描所有从站(EEPROM+PDO)SCAN-->>FSM: 扫描完成,更新 slave 数组loop 每个在线从站FSM->>FSM: 查找匹配的 slave_config<br/>(VendorID+ProductCode+Alias/Position)alt 找到匹配的配置FSM->>CFG: 启动 Slave Config FSMCFG->>SLAVE: Init → Pre-Op (配置邮箱/SDO)CFG->>SLAVE: Pre-Op → Safe-Op (配置 PDO/FMMU)CFG->>SLAVE: Safe-Op → OpCFG-->>FSM: 配置恢复完成else 无匹配配置FSM->>FSM: 跳过,从站保留 Init 状态endend

从站配置匹配规则

匹配方式 优先级 匹配条件
Alias + Position 1 (最高) 从站 EEPROM 中的 Alias + 拓扑位置
Position only 2 仅按拓扑位置匹配
VendorID + ProductCode 必须 所有匹配都必须验证厂商/产品码

⚠ 注意事项

IDLE 阶段: 热插拔自动处理,扫描后自动配置
OPERATION 阶段: 默认禁止扫描 (allow_scan = 0),需要应用层调用 ethercat rescan 或编程式触发
从站掉线: 在 OPERATION 阶段,从站掉线不会导致主站崩溃,但该从站的 PDO 数据变为无效,WKC 异常


深入源码

检测关键代码路径

Master FSM broadcast 状态: master/fsm_master.c

ec_fsm_master_state_broadcast() 中:

  1. BRD 读取寄存器 0x0130,获取 slaves_responding[dev_idx]
  2. 验证 WKC 是否正确
  3. 对比前后值,如果变化:fsm->rescan_required = 1
  4. 在下一个循环中进入扫描阶段

扫描控制变量

源文件: master/master.c, master/master.h

字段 类型 说明
scan_busy unsigned int 扫描是否正在进行中
allow_scan unsigned int 是否允许新的扫描(OPERATION 时为 0)
scan_queue wait_queue_head_t 扫描完成的等待队列
config_busy unsigned int 从站配置是否正在进行中
slaves_responding[2] unsigned int 每个设备上的响应从站数(主/备)

配置恢复流程图

flowchart TDA["扫描完成<br/>更新 slave 数组"] --> B["遍历所有在线从站"]B --> C["ec_master_find_config<br/>查找匹配的 slave_config"]C --> D{"找到匹配?"}D -->|是| E["关联 slave → config"]D -->|否| F["无配置,保持 Init"]E --> G["启动 fsm_slave_config"]G --> H["Init → Pre-Op<br/>配置邮箱 SyncManager"]H --> I["配置 SDO (CoE)"]I --> J["Pre-Op → Safe-Op<br/>配置 PDO/FMMU"]J --> K["配置 DC 同步参数"]K --> L["Safe-Op → Op"]L --> M["下一个从站"]F --> MM --> B

手动重新扫描命令

源文件: master/master.c:ecrt_master_scan_slave()

当用户执行 ethercat rescan 时:

  1. 检查 allow_scan(OPERATION 阶段可能禁止)
  2. 设置 scan_busy = 1
  3. 清除旧的从站数组
  4. 触发 Master FSM 的扫描流程
  5. 等待 scan_busy 清零
http://www.jsqmd.com/news/641531/

相关文章:

  • dm_control:从仿真到现实的机器人控制终极桥梁
  • Spring Boot 缓存注解底层逻辑剖析
  • Jitsi Meet与Zoom API对比:功能与集成难度全面分析
  • Kettle循环变量传递实战:数仓数据重跑的高效解决方案
  • 终极教程:5步将电视盒子变身高性能Armbian服务器
  • 如何分析各种ANR第二篇?Google官方文档详细教你
  • 从子密钥逆推到完整密钥:DES算法在CTF中的实战密钥恢复指南
  • 东莞装修设计避坑分析:五类旧房精改方案与报价模式实测 - 速递信息
  • Pixel Couplet Gen部署教程:阿里云ACR镜像仓库+ACK集群灰度发布
  • 2026瓶装水贴牌加工厂家推荐:综合实力测评发布,口碑靠谱厂家盘点 - 博客湾
  • ejabberd用户管理终极指南:如何高效管理大规模用户群体
  • 2026年高权重新闻媒体发稿平台推荐,高效推广必备! - 博客湾
  • ANR高级经验2:No Focused Window类型ANR的各种案例汇总
  • Windows11如何开启ssh服务以及自动启动
  • 2026 年国内软文营销平台 TOP5 榜单:软文发稿天花板实测 - 博客湾
  • 【原创】IgH EtherCAT主站详解(十)--CoE、EoE、FoE和SII执行状态机
  • BOXMOT工具箱深度评测:YOLOv8/YOLO-NAS/YOLOX三大检测器在MOT17数据集的表现对比
  • 2026数字中国创新大赛个人赛-Web
  • 预算少就不做推广?五大 “性价比之王” 软文发布平台综合评测与选择指南 - 博客湾
  • 从L0原始日志到L4业务意图追踪:AIAgent全栈Trace建模方法论(基于37个客户POC验证的7阶抽象模型)
  • 多模态大模型驱动自动驾驶的临界突破(2024实测数据首次公开):时延<83ms、跨模态误检率下降67.4%、通过ISO 21448 SOTIF认证的关键路径
  • 如何5分钟搞定抖音批量下载:douyin-downloader开源工具终极指南
  • 2026媒体发稿平台实测榜:6大主流平台10大核心维度硬核全拆解 - 博客湾
  • 2026 年整合软文发稿平台 TOP5 榜单:从软文发稿到自媒体全网分发 - 博客湾
  • Jitsi Meet移动端热更新:无需应用商店的功能升级方案
  • 终极指南:如何用罗技鼠标宏在绝地求生中实现完美压枪
  • TOP5 媒体发稿平台推荐:高效传播助力品牌推广 - 博客湾
  • PyTorch中通过训练图像去雾数据集 建立基于SFNet图像去雾算法的完整系统
  • 告别数据孤岛:Mantle与Flutter混编实现跨平台数据无缝流动
  • Quill 编辑器光标跳转到顶部的解决方案