讨论

ethercat到底咋跑的?刚转机器人应用,脑子一团浆糊

人到中年
人到中年
2026/03/26 14:50

之前一直在做单片机和PLC的活,最近公司接了个六轴机器人的项目,让我对接ethercat总线,才发现自己对这个协议的理解基本停留在"听说过"的层面。翻了几天手册,DC分布式时钟、ESC从站控制器、PDO/SDO这些词看了一堆,越看越糊涂。

我就想知道:主站发一帧出去,从站怎么就知道这帧是给自己的?数据从站里出去又进来,这个过程物理上到底是怎么走的?还有那个DC同步,听说是靠从站记时间戳然后校准的,能再讲细点吗?最好能举个扫描周期里到底发生了啥的例子,我好对着代码看。

30 3

全部回复 (3)

小唐
小唐#1

简单说ethercat用的是"飞读"模式,主站发一帧以太网帧下去,经过第一个从站时,ESC硬件自动把属于自己的子报文数据读出来,同时把要回传的数据插到帧尾,整个过程延迟大概几百纳秒。帧从一个从站传到下一个靠的是标准的以太网PHY,物理上就是差分信号过变压器,拓扑上支持线型、树型、星型都行。帧头里有个16位的工作计数器,每个从站处理完就加1,主站靠这个数判断有没有从站掉线或者顺序变了。

DC同步这块说细点:主站先发一帧ARMW给第一个DC从站锁存自己收到帧的本地时间,然后这帧继续往下传,第二个DC从站也锁存自己的时间。主站拿到两个时间戳后,就能算出两个从站之间的传输延迟,再把从站时钟往主站参考时钟上对齐。运行阶段每个周期主站发一帧,FMMU单元会在从站硬件里比较本地时间和参考时间,差值超过门限就直接调整本地计数器,一般能做到20ns以内的抖动。六轴机器人里同步周期常设1ms,你对着代码看SYNC0和SYNC1中断的触发时序就明白了。

2026/03/27 01:43
zhiqiang888
zhiqiang888#2

先反问一下,你用的什么主站?IGH、SOEM还是codesys?不同主站实现细节差挺多的。还有从站是买的成品伺服还是自己开发的ESC板?这俩搞法完全不一样,别一上来就啃协议理论,先把链路通了再说。

2026/03/27 03:00
小傅
小傅#3

我们厂做AGV的,主站用的是SOEM,跑了三年没出过问题。说实话底层真不用太纠结,调用ec_send_processdata和ec_receive_processdata就够了,难的是应用层周期规划和PDO映射。你那个六轴项目建议先把每个伺服的CIA402状态机走通,OP状态都进不去的话扯啥DC都是白搭。

2026/03/27 03:48