ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EtherCAT DC同步原理与TwinCAT 3配置实战:从分布式时钟到运动控制

EtherCAT DC同步原理与TwinCAT 3配置实战:从分布式时钟到运动控制 搞运动控制这些年我一直觉得EtherCAT的DC同步是个“看着玄妙、实际一戳就破”的东西。先说一个真实场景一套8轴伺服设备TwinCAT 3做主站额定周期1ms四轴插补画圆机械没问题、伺服也没问题但圆总是走不圆误差忽大忽小。排查到最后问题出在从站同步模式没选对还在用默认的SM同步总线上多个轴的输出时刻被帧转发顺序拉开差了接近100微秒这个级别的偏差在高速插补里早够让轨迹变样了。换成DC-Synchronous模式把同步偏移量调好同样的设备圆立即圆了。这就是我想写这篇文章的原因——DC-Synchronous不是高深算法它就是一套把“各从站执行动作的时刻”拉齐的机制难点在于理解它怎么工作然后把参数配到和设备本身的处理时序对上。这篇文章里我会先讲EtherCAT同步模式的几种选择再拆解DC同步的原理然后给出TwinCAT 3里配置DC-Synchronous模式的完整步骤包括部署时最常碰到的Win11跑Run模式报0x1024这类问题怎么处理最后用文字时序图把SYNC信号、数据帧和从站执行时间轴的关系讲清楚再把同步抖动排查的经验一次性说透。适合正在搞伺服运动控制、EtherCAT从站开发或者在用TwinCAT做设备集成的工程师参考。1. EtherCAT同步模式全景为什么DC-Synchronous不可替代很多工程师对EtherCAT的认知就是“主站发一帧下去从站跟着更新就行了”这个认知在低速IO场合勉强够用在运动控制里会栽大跟头。EtherCAT的从站数据更新发生在帧经过从站的那一刻如果整个网络挂着十几个从站帧经过每个站的时间点天然不同单靠帧到达来触发动作各站之间一定会有先后差别。要理解DC-Synchronous得先看清EtherCAT同步模式的全貌。1.1 从站同步的三种常见工作模式EtherCAT从站的数据刷新通常有三种工作模式FreeRun、SM-Synchronous、DC-Synchronous。FreeRun从站完全按自己的本地节拍工作不和主站做同步。优点是简单缺点是各从站各自为政数据时刻完全对不上只能用于温度采集、状态监视这类对实时性不敏感的场景。SM-Synchronous以SMSync Manager事件触发。主站帧到达从站后SM2输出方向事件产生一个信号从站用这个信号来触发数据更新。这个模式实现简单很多设备出厂默认就是这个模式但触发时刻等于“帧到达时刻”而帧到达每个从站的时间是沿着拓扑一步步延迟的从站越多各站之间的触发时间差就越大。DC-Synchronous基于分布式时钟Distributed Clock工作。每个从站维护一个与主站基准时钟逐步校准对齐的本地时钟主站周期性下发SYNC信号从站在本地DC时间到达设定点时才执行输入输出刷新不再依赖帧实际到达的时刻。三种模式用一张表对比会更直观同步模式触发源抖动水平典型应用FreeRun从站本地时钟依赖从站晶振us级甚至ms级非实时IO、状态监控SM-Synchronous帧到达事件(SM中断)受传输延时和帧顺序影响us~百us级低速同步、批量IO刷新DC-SynchronousDC本地时钟SYNC信号理想可达ns级实际几十~几百ns伺服运动控制、高速同步采集这里要特别提醒很多从站虽然写着支持EtherCAT但出厂默认工作在FreeRun或SM如果你不做任何设置就上伺服轴总线协议层面它可能根本没有承诺同步。这也是很多“看起来配置没问题”的设备实际运动效果差的深层原因。1.2 为什么非要“拉齐”执行时刻在运动控制里各轴伺服驱动器的位置设定值必须在一个统一的时刻被同时采信。举个例子插补算法计算了“第1000个插补周期各轴目标位置”如果1号轴在T时刻执行2号轴在T90us时刻执行那么2号轴已经晚了差不多一个周期的十分之一速度越快、周期越短这个偏差对轨迹的影响越明显。四轴画圆不圆、龙门双驱两端互相较劲很多时候就是这里出了问题。DC-Synchronous从机制上消除了帧传送顺序造成的时间差所有从站共享一个时间基准都等到同一个DC时间点才更新输出。正因为这一点它成了多轴伺服同步控制的首选方案。当然DC也并非完美它额外的复杂度在配置和调试阶段都会找上门接下来就先把原理讲透。2. DC同步原理拆解同步信号从哪里来、到哪里去理解了“为什么”接下来就得搞明白“是什么”。DC全称Distributed Clock翻译过来是分布式时钟。它的本质是让总线上所有从站拥有一块“对准了”的本地时钟并且能在这个时钟的指定时刻产生同步信号。2.1 分布式时钟解决的核心问题每个从站硬件里都有本地计时器但每块晶振都有频率偏差上电时刻也不一致。一群人各拿一块表表走得快慢不同、零点不同报出的时间就没法统一使用。DC要做的事情是在系统启动阶段通过周期性的报文交换测出每个从站的时钟偏移和传输时延并在整个运行过程中持续校正让每个从站的本地时钟都尽可能对齐到参考时钟。主站会用ARMWAuto-Read-Multiple-Write和MWR这样的广播命令把参考时钟发送给所有从站从站记录自己的本地时间主站回收后计算偏移和延迟再把修正值写回从站。这个过程在运行时一直持续所以晶振温度漂移带来的误差也会被修正掉。实际EtherCAT从站都需要在ESCEtherCAT Slave Controller里实现这部分逻辑常见的是倍福ET1100/ET1200以及一些国产ESC芯片。如果你是做从站开发的DC相关的实现主要在ESC底层包括时间寄存器和SYNC信号发生逻辑硬件上通常需要一颗带DC能力的ESC芯片与本地晶振回路配合不是光靠软件模拟就行的。2.2 DC参数里最关键的几项Cycle TimeTcyc同步周期一般和主站任务周期一致比如1ms、2ms。它决定了SYNC信号的重复频率。Shift TimeTshiftSYNC信号相对任务周期起点的偏移时间。它决定了从站在周期内哪个时间点触发。传输延时补偿Propagation Delay主站到每个从站的报文传输时间。这个值直接影响Tshift的设计因为从站必须先把数据收下来才能等SYNC到来后锁存。Sync0/Sync1DC产生的两路同步信号。Sync0通常用于输出刷新和主同步Sync1可以用于输入采样或第二同步事件。多数运动控制场景用Sync0就够。这里有一个容易搞混的点很多人以为“主站下发SYNC信号”是一个显式的网络报文实际不是。SYNC是每个从站基于本地DC时间自行产生的硬件信号主站只是周期性广播参考时间让所有从站的本地时间对齐。SYNC信号更像“闹钟”——闹钟时间提前在0x0980、0x0981这些寄存器里设置好当本地DC时钟跑到设定时刻从站自己响。2.3 从站在DC-Synchronous模式下到底怎么动作在DC-Synchronous模式下从站的SM事件通常会被DC事件取代。收到EtherCAT帧后从站只是把数据写入缓冲区并不马上更新硬件输出等本地DC时间到达设定点SYNC中断触发从站才把缓冲区里的最新输出数据锁存到物理输出把当前输入采样锁存到输入缓冲区。这样一来无论帧先进过谁、后经过谁各从站真正“动手”的时刻都被拉到了同一个DC时间点。打个比方一列火车在多个站点卸货各站点不是一到货就开门营业而是等车站钟楼的钟指向整点才统一开门。所以哪怕前面站点先收到货后面站点后收到货真正开始营业的时刻是同一个。EtherCAT的“钟楼”就是DC参考时钟“整点”就是SYNC触发点。3. TwinCAT 3配置DC-Synchronous完整实操现在到动手环节。我会按从环境准备到参数调整的顺序走一遍同时也把实际项目中踩得最多的Hyper-V报错问题放在这里一起说因为很多人在配置阶段就卡在了这一步。3.1 环境准备与Win11报错0x1024处理TwinCAT 3.1运行在Windows上时对底层实时性要求很高。硬件方面EtherCAT主站网卡建议优先选Intel I210、I211、I225或者直接用倍福的CX控制器Realtek网卡虽然偶尔能用但实时性和兼容性问题多不建议用在运动控制项目里。安装完TwinCAT后需要把网卡驱动切换为TwinCAT实时以太网驱动这一步在TwinCAT XAE的“Show Realtime Ethernet Compatible Devices”里完成。很多人全新安装TwinCAT 3.1.4024.xx之后一激活配置进入Run模式就报错报错原文是“Setting TwinCAT in Run Mode inside Hyper-V (virtual machine) is not possible”错误码0x1024。这不是说你真的在虚拟机里而是Windows检测到Hypervisor虚拟机监控程序正在运行TwinCAT的实时驱动无法接管网卡和系统资源。排查顺序建议这样打开Windows功能关闭“Hyper-V”、“虚拟机平台”、“Windows虚拟机监控程序平台”如果没用到这些功能直接全部取消勾选。以管理员身份运行命令提示符执行bcdedit /set hypervisorlaunchtype off重启后检查“系统信息”里“基于虚拟化的安全性”是否变为未启用。关闭Windows安全中心的“内核隔离”中的“内存完整性”这个功能在Win11上默认开着也会触发Hypervisor。如果是老工程师习惯用虚拟机做开发另一个思路是TwinCAT支持的虚拟化方案里VMware配合倍福官方文档给出的配置可以跑但实时性会有损失不能作为正式设备运行环境。生产设备尽量用物理机或倍福控制器。这块内容在时间线上独立但对很多读者来说比后面的配置步骤更救命所以单独列出来。如果你已经能正常进Run模式跳过这个坑。3.2 扫描设备并启用从站DC功能假设你的TwinCAT已经能正常进入运行模式接下来按步骤来在Solution Explorer里新建一个I/O Device类型选择EtherCAT。扫描网卡上的从站Scan Devices扫描完成后把从站逐个切换到OP状态先确认基础通信正常。如果这一步都磕磕绊绊优先查接线、从站供电和网卡类型。在“Device”下选中EtherCAT主站进入它的设置页面找到与DC相关的选项。TwinCAT 3中主站设备一般有“DC”配置页或者需要在从站属性里逐站设置。在从站比如EL系列端子或伺服驱动器的“DC”选项卡里勾选启用DCEnable DC把Operation Mode选为DC-Synchronous。有些国产伺服或第三方设备不叫这个名称通常会用CoE对象0x1C32和0x1C33里的“Sync Mode”来对应。这里特别强调从站的DC使能不能只看界面是否勾上还需要看从站是否真正支持。在倍福的从站信息里通常有“DC Supported”等标识第三方设备则建议查手册确认DC实现是否完整否则会出现配置成功但实际不工作的情况。如果是从站开发场景还要确认EEPROM中的DC能力描述字段有的设备为了兼容性把这个字段写得很保守导致主站默认不敢使能DC。3.3 主站任务与同步参数的联动配置光有从站还不够TwinCAT里的PLC任务周期也要和EtherCAT同步周期形成闭环。右键解决方案中的PLC任务在Task Settings里把循环周期设置成和EtherCAT的Cycle Time一致。不要出现任务周期1ms、EtherCAT周期2ms这种不匹配否则每次任务执行对应的总线数据可能新旧不一致。在TwinCAT的System Manager或新版界面里可以查看EtherCAT主站的DC状态比如Cycle Time、Shift Time以及当前SYNC漂移等。激活配置后观察所有从站是否都稳定在OP状态。如果有的从站一直跳回PreOP先去看DC参数是否超出该从站能力再看Sync0周期和Shift Time的搭配。3.4 一个8轴系统的参数计算与调整实例拿我之前调试的那个8轴伺服项目来说实际网络结构是主站Windows工控机一块Intel I210网卡下面挂8个伺服驱动器加2个IO端子线缆长度大概15米。第一步选周期。运动控制常用的1ms周期可以跑考虑整条总线数据量不算大最终选择2ms周期来降低CPU占用和总线负载。如果你的设备对插补精度要求高、轴数少可以尝试500us甚至250us但网卡和从站压力会成倍增加不是所有从站都顶得住。第二步估算帧传输时间。在100Mbps的EtherCAT链路上1字节的理论传输时间大约是80ns。一帧按600字节算理论时间约48us加上各个从站转发和处理的开销实际到最后一个从站可能需要100us左右的延时。这意味着Tshift不能设得太小否则后面的从站可能还没收到这轮数据Sync0就已经触发锁存到的就是上一轮甚至更旧的输出值。第三步定Shift Time。工程习惯上我先把Shift Time设为Cycle Time的50%~75%比如2ms周期先填1200us然后往下调用运动效果或示波器波形来微调。如果把Shift Time调太大接近周期末尾那从站执行结果返回主站的窗口会被压缩可能导致主站来不及在下一个任务周期读取反馈通信上表现为周期超时。第四步验证。激活配置后在从站信息里查看DC时钟状态确认Sync0是否有漂移统计。有条件的用示波器量两个远端从站的IO同步输出边沿边沿差控制在几百纳秒内基本没问题。这一步千万不能省我在现场见过太多把Tshift随便填个默认值就交机的案例后面运动一复杂就开始出鬼。4. 时序图详解SYNC信号、数据帧与从站执行时间轴这一章同样重要。我把一个典型DC-Synchronous周期用事件表和时间轴拆开帮你建立直观概念。4.1 一个完整同步周期的事件顺序假设主站任务周期是1ms网络中有4个从站顺序是S1、S2、S3、S4。从T0开始的1ms周期里事件大致如下时间事件T0主站任务启动准备过程数据发送EtherCAT帧T030us帧到达从站S1S1把下行数据写入缓冲但暂不执行T055us帧到达从站S2S2数据写入缓冲暂不执行T080us帧到达从站S4最后一个从站数据写入缓冲前向传输结束T0100us各从站本地DC时间到达设定点Sync0触发所有从站同时锁存输出/采样输入T0200us帧从最远端返回主站主站回收状态与反馈数据这里的Tshift就是T0到T0100us之间的偏移。注意一个关键点Tshift必须大于帧到达最后一个从站的时间否则最后一个从站还没拿到新的输出数据就触发了Sync0用的就是上一轮的数据。用文字画时间轴示意T0 T080us T0100us T0200us T01ms |---------------|------------|----------------------|-----------------| 任务发送帧 最远端收帧 各站Sync0触发 帧返回主站 下一周期开始这种图在EtherCAT调试时非常有用你把实际测量的帧传输时间和抖动替代进去就能知道自己配置的参数是否合理。4.2 为什么DC模式不依赖帧到达时刻在SM同步模式下从站的执行点就是帧到达点。帧到得早有优势、到得晚就吃亏各站执行时刻天然错开。在DC模式下帧到达只是“数据备料”的过程真正触发动作的是Sync0。只要帧在Sync0前到达晚到早到都不影响执行时刻。这也是DC模式的根本优越性。不过这里有个隐藏前提所有从站必须能看到同一个参考时钟并且系统运行期间能一直保持校正。如果某个从站的DC校准链断了或者从站ESC的时钟晶振质量太差Sync0的产生点就会出现漂移同步质量随之下降。这也是同一套系统里倍福端子表现稳定、某些低端从站却偶发不同步的原因之一。4.3 时间抖动从哪里来实际工程里Sync0不可能像理想图里那样一条垂直线。抖动的来源主要有这几个主站任务抖动Windows下的TwinCAT虽然有实时内核但CPU中断、PCIe总线延迟仍然会造成任务启动时刻的微小时变。网卡DMA延迟帧从应用下到网卡、中断回传的时间不固定。从站DPRAM总线仲裁某些从站的本地主控也要访问DPRAMDMA与DPRAM的竞争会影响数据锁存。时钟晶振漂移DC对从站时钟会持续修正但修正不是瞬时的。实测下来一套配置良好的系统两个从站IO边沿的时间差可以稳定在正负几百纳秒内。如果到了微秒级一般先从主站抖动和从站时钟质量两个方向查。4.4 示波器验证的实战方法要验证同步质量最简单的方法是同时测两个从站的同步输出边沿。我把两个EL系列数字量输出端子接到示波器的CH1和CH2触发模式设在CH1上升沿让它们输出周期脉冲看CH2相对CH1的延迟。如果DC配置正确这个延迟应接近0且在很小范围波动如果在微秒级波动说明同步还没做好。这一步看似简单却是很多工程师忽略的。改Shift Time、换网卡驱动、换从站时钟配置后波形会有直观变化比看错误码更可靠。5. 常见问题与排查技巧实录最后一章专门讲实操中踩过的坑。5.1 从站状态跳动OP变PreOP如果你的从站配置完DC后状态机在OP和PreOP之间反复跳动大概率是DC参数没下对。先看从站支持的最小和最大同步周期有些第三方伺服只支持500us以上的周期你把Cycle Time设成250us就必然出问题。其次查从站EEPROM里的DC特性描述EtherCAT从站信息里有DC字段如果显示不支持说明这台设备硬件上就没做DC同步你只能退回到SM模式或者换硬件。5.2 轴间轨迹误差明显、圆度不好这个问题在前面已经提过核心排查路径是先确认每个从站都处于DC-Synchronous模式而不是某个站用了默认FreeRun再检查Shift Time是否大于帧到达最远端从站的时间最后看从站的同步状态寄存器0x0990等里有没有漂移或错误标志。特别是多个品牌从站混用的系统不同从站在相同DC参数下的表现常常有差异需要按从站分别微调Sync0周期。5.3 TwinCAT无法进入运行模式前文已经详细说了Hyper-V报错0x1024的解决流程这里补一个类似的坑如果把网卡驱动换成了TwinCAT驱动但Windows依然显示该网卡被占用可能会报“Adapter is occupied”之类的错误通常与Windows网络服务或虚拟交换机占用有关。在“网络连接”里禁用该网卡再在TwinCAT里重新激活一般能解决。5.4 第三方从站DC支持不到位国产伺服或IO从站这两年做得越来越好但DC实现参差不齐。遇到过的情况是国产伺服从站在倍福下配置DC-Synchronous后单轴看起来正常多轴一起跑就偶发同步丢失。这批设备的解决办法常常是把从站固件升级或者改从站EEPROM中的DC配置如果主站允许也可以尝试把Sync0宽度调大一点、把输入采样点和输出刷新点分开配置给从站更多余量。做从站开发的朋友尤其要注意DC寄存器组的实现必须遵循ETG规范不要只做表面上的寄存器映射。5.5 排查用到的工具一览TwinCAT System Manager里的EtherCAT状态与DC统计。从站寄存器在线查看工具比如读取0x0900开始的时间寄存器、0x092C开始的系统时间等。示波器或逻辑分析仪建议至少2通道用来对比两个从站的同步信号。现场总线分析仪能解码EtherCAT帧结构抓每个从站的寄存器和状态机适合做深度定位。整理成速查表现象可能原因处理方向从站OP/PreOP反复跳动DC参数超出从站能力查从站手册与EEPROM调整Cycle Time/Shift Time圆度差、轨迹抖动从站未真正DC同步逐个确认Sync Mode抓同步IO边沿TwinCAT进不了Run模式Hypervisor运行关闭Hyper-V/虚拟化安全bcdedit关闭Hypervisor多轴偶发同步丢失第三方从站DC实现弱升级固件调整Sync0宽度分散采样点从站反馈周期超时Shift Time太靠近周期末尾调小Shift Time留出帧返回窗口最后聊点个人经验。每次配完一套EtherCAT DC同步我都习惯先量从站IO边沿再看运动轨迹顺序不能反。很多“偶发抖动”在示波器上一目了然反而比看一堆错误码更直观。Shift Time这个参数也别照搬默认值你总线拓扑每加一个从站、每长一米线缆它都可能要跟着动。等项目跑顺了再回头把DC状态寄存器里的漂移记录导出来留个底后面运维排查会省很多事。如果你也遇到类似“配了DC还是抖”的怪问题欢迎带着拓扑和波形来交流这类实战话题永远聊不完。
返回列表