EtherCAT IGH单域与多域
对于所有伺服电机采用相同周期、严格同步的机器人控制场景,通常建议将所有轴的数据放在单一Domain中。EtherLab 官方邮件中指出,一个物理耦合的从站簇(如同一EK1100集线器下的所有驱动器)使用单域可减少报文元数据开销;而如果采用多域,每增加一个Domain就需要在EtherCAT帧中添加额外的12字节元数据,增大通信负担。因此,当所有轴都在同一分支(或同一周期)下工作时,将所有PDO映射到一个Domain效率最高。当然,如果系统物理上存在多个独立分支(如多个耦合器)或确实需要不同周期更新,则可以为每个分支分别创建Domain
单域和多域优缺点比较
- 同步性: 对于相同控制周期,单域和多域都能实现同步控制,但细节不同。单域将所有轴数据一次性通过同一个EtherCAT帧更新,可保证帧内同步;多域情况下,只要在同一周期中依次处理所有域并调用一次ecrt_master_send,理论上也能达到总线同步,只是实现稍复杂。
- 实时性/通信负担: 单域减少EtherCAT帧数和协议开销,传输效率更高。正如EtherLab邮件所述,“使用单域减少数据传输开销”,而多域“每个域都要增加额外报文元数据”。因此,单域方案下每周期只需要发送一个包含所有PDO的帧,延迟和抖动更小;多域则每增设一个域,在帧中增加约12字节开销,如果域数量较多甚至可能拆分为多帧,增加通信延迟。
- 诊断与容错:单域时,任何从站通信异常都会使整个域状态变为EC_WC_INCOMPLETE,但无法直接从域状态定位到是哪台从站出错
。这时通常需要依赖从站输出的循环计数器等信号来判断故障位置。多域方案下,每个域一般要么完全更新(EC_WC_COMPLETE)要么全为零(EC_WC_ZERO),更容易快速确定故障发生在具体哪个域或从站组。此外,多域允许针对不同组的从站使用不同周期,也可兼容某些老旧从站只支持LRD/LWR(只读/只写PDO)的限制。不过,对纯粹同步的机器人控制系统而言,这些多域优势并不明显。
EtherLab IGH框架下的最佳配置建议
- 域划分: 建议将所有同步的伺服驱动器挂在同一个Domain上。如前所述,一个物理簇内的所有从站使用单域最节省报文开销。如果未来需要增加诊断、慢速量或不同更新速率的数据,可以另起Domain,但应尽量少用域,以免占用从站FMMU资源。注意:EtherCAT从站通常有有限数量的FMMU(映射单元),每创建一个Domain,每个相关从站至少会占用一个FMMU,超出从站支持的FMMU数会导致配置失败。
- 分布式时钟同步: 严格同步所有轴的关键在于使用EtherCAT的**分布式时钟(DC)**功能。EtherLab IGH自1.5版本起支持DC,可通过ecrt_slave_config_dc(sc, assign_activate, cycle, shift, …)为每个伺服驱动器配置DC同步参数。在运行时,每个周期应调用ecrt_master_sync_slave_clocks(master)进行时钟偏移和漂移补偿,使所有从站时钟与参考时钟保持同步。(注:调用ecrt_master_sync_slave_clocks会自动生成同步报文,确保所有从站的本地时钟同步于参考时钟)确保周期内先执行ecrt_master_receive()、ecrt_domain_process()等数据收发操作后,再进行DC同步补偿,最后调用ecrt_master_send()发送当前周期的输出数据。
- 实时调度与系统配置: 在PREEMPT_RT内核下,务必将EtherCAT通信循环置于实时调度(例如SCHED_FIFO)并绑定专用CPU核,避免其他任务干扰周期准确性。选择高性能网卡(如Intel系列)并禁用多余的网络特性(Flow Control、Energy Efficient Ethernet等),以降低驱动延迟。
- 调试与故障处理: 使用ecrt_domain_state等方法监控域状态。如果采用单域,可在从站的周期输出(如PDO计数器)内置心跳标志,以便检测是否有更新停滞。多域时可通过各域状态快速定位故障组。在开发过程中,可借助EtherLab提供的ethercat工具(–configlist、–verbose等)检查从站配置和域映射是否正确。
- 其他注意事项: 确保PDO映射不重叠且完整,避免漏映射影响同步。若使用EK1100或其它多链路耦合器,物理拓扑应与软件域配置保持一致。对于分布式时钟,要正确设置Sync0/Sync1的周期和偏移,使伺服驱动器生成的同步脉冲对齐控制周期;错误的sync_shift配置可能导致固定的控制延迟。