拓冰建站拓冰建站
首页 / 资讯中心 / 正文

EtherCAT与CANopen深度融合:H5U控制步科伺服实战解析

前阵子给一条小型装配线做设备改造控制柜里原来是一台普通脉冲型PLC加六台步科伺服脉冲线拉了满满一扎高速定位时偶尔丢脉冲上电回零全靠限位开关硬撞。后来整体换成了汇川H5U小型PLC用EtherCAT总线和步科伺服通信一套下来接线清爽很多定位精度和同步性能也完全不是一个级别。不过这个项目配置过程中不少同行被“EtherCAT控制CANopen伺服”这个说法绕晕了——EtherCAT是工业以太网CANopen是传统现场总线这两者到底怎么组成一套系统把这个问题彻底弄清楚后面从AutoShop配置、PDO映射到程序调试就顺了。这篇就把整个项目的完整过程和踩坑经验写出来适合正在做小型设备运动控制、或者在H5U和步科伺服之间做选型和调试的朋友参考。1. EtherCAT和CANopen到底什么关系控制步科伺服的协议“组合拳”1.1 CoE的本质EtherCAT是传输层CANopen是应用层很多人第一次看到项目标题时都会疑惑H5U的EtherCAT主站怎么能控制一台“CANopen伺服”实际上“EtherCAT控制CANopen伺服”这个说法本身不准确准确的描述是用EtherCAT总线通过CANopen over EtherCAT简称CoE协议控制一台符合CiA402驱动行规的步科伺服。EtherCAT在物理层和链路层用的是标准以太网技术主站往网线里发一个数据帧这个帧会在各个从站之间高速“流过”每个从站通过硬件从站控制器ESC在帧经过的瞬间取出属于自己的数据、塞入要返回的数据整个过程不需要CPU参与所以速度极快、同步性极好。用大白话讲EtherCAT就是一条高速公路主站的车队在高速上按固定时刻表跑每个站台在车经过的瞬间就能完成装卸货。而CANopen本来是跑在CAN总线上的应用层协议在EtherCAT体系里被完整保留下来称为CoE。它不仅保留了CANopen的对象字典Object Dictionary、SDO服务数据对象和PDO过程数据对象还保留了CiA402伺服驱动行规。所以你用EtherCAT控制步科伺服时写0x6040控制字、读0x6041状态字、配置0x607A目标位置、设置0x6060运行模式这些操作和你用传统CANopen总线时的做法几乎一模一样。这也是为什么在EtherCAT伺服的项目文档里经常还能看到大量“CANopen”字样的原因——它没有消失只是换了传输载体。1.2 从站状态机和NMT状态别被“进入离开”绕晕调试EtherCAT系统时你在主站软件里看到的从站状态通常是INIT初始化、PRE-OP预操作、SAFE-OP安全操作、OP操作。这四个状态正好可以对应CANopen NMT里的初始化、预操作、操作状态。网上搜“canopen超线进入离开”多半就是指这组状态切换。每个状态能做的事情不一样EtherCAT从站状态能做哪些事常见故障现象INIT仅有底层链路同步基本不能通信主站扫描不到/从站不响应PRE-OP邮箱通信可用可以通过SDO读写对象字典能连上但PDO不发数据轴不动SAFE-OP输入数据有效伺服的位置/状态能上传但输出被冻结能看到反馈但控制字写不进去OP完整的输入输出过程数据通信伺服可以被真正控制正常运行的必需状态H5U作为EtherCAT主站上电后会自动把所有配置好的从站从INIT一步步推向OP。任何一个环节出错从站就会卡在某个状态最常见的现象就是伺服“连上了但动不了”。后面调试章节我会专门讲怎么从状态字下手排查。1.3 对象字典是伺服的“数据库”PDO是实时快递通道步科伺服的内部参数、运行状态、指令数据都放在一张对象字典表里。这张表用十六进制索引来定位比如对象索引对象名称作用0x6040Controlword 控制字主站往伺服写控制命令0x6041Statusword 状态字伺服往主站回报当前状态0x6060Modes of operation 运行模式设置位置/速度/转矩模式0x607ATarget position 目标位置位置模式下发送目标位置0x6064Position actual value 实际位置读回实际位置0x606CVelocity actual value 实际速度读回实际速度这些对象字典里的数据有的适合通过SDO去读写比如调试时修改参数有的则必须在每个周期都实时交换比如控制字、目标位置、实际位置。EtherCAT的解决办法就是PDO映射把需要实时交换的对象打包成一个“快递箱”在每个同步周期主站和从站之间自动交换。主站发给伺服的那个箱子叫RxPDO伺服回报给主站的叫TxPDO。你只要在AutoShop里配置好PDO映射把这些对象放进对应的箱子程序里就不用再关心底层怎么传了。2. 硬件选型与总线接线H5U当主站步科伺服别买错版本2.1 H5U的本体EtherCAT主站能力汇川H5U系列虽然定位是小型PLC但它本体内置了EtherCAT主站接口这是一个很关键的差异化点。如果换成传统小型PLC多轴伺服控制往往只能靠脉冲输出口一个轴要占2个高速输出口脉冲方向六轴就是12个输出点接线复杂还容易受干扰。H5U的EtherCAT主站把这些都省了网线一插就是一个完整的运动控制网络。具体选型时要注意H5U的后缀和轴容量比如H5U-A8、H5U-A16这类型号从名字上就能看出带几个EtherCAT轴。实际项目里以官方选型手册为准一般8轴以内的小型设备用A8规格就够如果后面要再加轴最好直接上更大容量型号免得后期扩展受限。编程软件用的是汇川AutoShop支持LD、ST、FBD等IEC 61131-3语言也支持MC运动控制指令集后面写程序都在这个环境里做。2.2 步科伺服要选带EtherCAT通信口的版本步科Kinco伺服用得比较多的是FD系列比如FD422、FD424等。这个系列早期产品有脉冲型、CANopen总线型后来也有带EtherCAT通信口的版本。做这个项目时一定要和供应商明确“我要EtherCAT版”不要买成纯CANopen版。怎么快速区分看驱动器上的通信接口。EtherCAT版通常有两个RJ45网口一个标IN、一个标OUT用于菊花链级联纯CANopen版则是一个DB9或接线端子式的CAN接口。如果手头已经有一台伺服又不确定直接查驱动器侧面的铭牌型号或说明书里的“通信接口”一栏。需要说明的是EtherCAT版步科伺服内部的应用层依然是CoECANopen over EtherCAT它兼容CiA402驱动行规。这也是为什么你的配置文档里看到的参数还是那些CANopen味的对象字典而不是什么全新的东西。2.3 线型菊花链接线IN和OUT千万别接反EtherCAT最常见的接线方式是线型拓扑也叫菊花链。接线顺序很简单汇川H5U的EtherCAT主站口 → 伺服1的IN口 → 伺服1的OUT口 → 伺服2的IN口 → 伺服2的OUT口 → …… 最后一台伺服的OUT口空着不用再接。这种接法最大的好处是省网络交换机从站之间一根网线串过去就行。但有两个细节要特别注意。第一从站的IN和OUT方向不能接反。接反的后果是主站扫描不到后续所有从站或者链路时断时续。大部分伺服驱动器上IN和OUT口边上会有丝印标识接线前看一眼。第二网线质量直接影响系统稳定性。EtherCAT虽然是工业以太网物理层但不是随便拿一根办公室网线就能用。尽量用工业屏蔽超五类/六类双绞线最好用带金属屏蔽层的水晶头。现场有变频器、伺服驱动器这种强电设备线一定要和动力电缆分开走不要捆扎在一起。我见过一个案例EtherCAT网线和伺服动力线绑在同一段桥架里设备一跑起来就从站掉线后来重新走线才解决。2.4 站号拨码主站找不到伺服的最大嫌疑总线型伺服驱动器上通常有一排拨码开关写着SW1、SW2之类。这排开关用于设置从站站号也就是伺服在EtherCAT网络里的地址。有的伺服也支持通过参数设置站号但很多驱动器上电后以拨码值优先。现场调试时最经典的问题就是AutoShop里给从站分配的地址是1但驱动器拨码拨的是3结果主站怎么都找不到这台伺服或者网络里出现两个站号相同的设备导致一个从站上线另一个掉线。处理办法查看步科驱动器说明书确定拨码是二进制还是十六进制编码再把拨码拨到和AutoShop配置一致的站号。建议在设备标签上用油性笔写上每个轴的站号后期维护不用再数拨码。2.5 供电与接地的安全细节伺服系统调试前务必检查主回路供电、控制回路供电、电机制动电阻这些基础接线。特别强调一下接地EtherCAT的屏蔽层最好做到单端接地避免形成接地环路。伺服驱动器的PE端子要和设备总接地排可靠连接编码器线、动力线的屏蔽层也要按要求接地。很多总线“偶发抖动”“无缘无故报警”的问题最后都发现是接地不良。3. AutoShop从站配置ESI文件、PDO映射与单位换算3.1 拿到ESI文件是第一步版本要匹配配置EtherCAT从站第一步不是去PLC程序里写代码而是拿到从站设备描述文件——ESI文件。步科伺服的EtherCAT版会提供一个XML格式的ESI文件里面描述了该从站的所有能力对象字典结构、支持的PDO映射、同步管理器Sync Manager配置、是否支持DC分布式时钟等。这个文件从哪来步科官网下载或者直接找伺服供应商售后要。要注意匹配固件版本我踩过一次坑伺服固件已经升级过了结果现场还在用老版本的XML导入AutoShop后从站显示名称和设备不匹配主站怎么都推不到OP。后来找了新版XML导入后一切正常。所以拿到文件和伺服批次一定要核对固件版本。导入操作大体是这样打开AutoShop工程找到左侧工程树里的EtherCAT配置节点打开从站配置文件管理或从站库选择导入XML。导入成功后XML里描述的伺服设备会出现在从站列表里直接添加即可。3.2 添加从站、分配站号、设置同步周期添加从站后需要给它分配一个站地址。这个地址要和伺服驱动器的拨码设置保持一致。如果是单台伺服一般用默认站号1就行多台伺服依次排2、3、4……注意站号不要重复。同步周期也叫EtherCAT周期、过程数据刷新周期是调试时一个很重要的参数。以H5U实际项目为例如果只控制一台到两三台伺服做简单定位1ms周期完全够用如果做插补、电子凸轮、龙门同步这类任务可以尝试500us甚至250us。但要注意周期越小主站CPU负载越高从站越多越容易超时。这不是一个“越小越好”的参数要根据实际运动需求来。3.3 DC分布式时钟多轴同步的关键开关如果你做的只是单轴定位、或者多轴之间没有严格联动关系DC分布式时钟不开启也能跑。但如果项目里有两轴以上需要精确同步——比如龙门结构、XY平台插补、飞剪追剪——就一定要开启DC。EtherCAT的DC机制是通过主站给所有从站同步系统时钟再补偿每个从站的传输延迟确保所有伺服在同一个时刻执行指令而不是“一个接一个地”执行。AutoShop配置界面里一般有DC相关选项按默认开启即可。开启后主站会自动计算延迟参数不需要你手动计算。3.4 PDO映射到底该映射哪些对象新建从站配置后AutoShop会根据ESI文件加载默认的PDO映射。大多数情况下步科伺服的默认映射已经覆盖了位置控制的常用数据。以我常用的配置为例PDO方向对象索引对象名称数据类型说明RxPDO0x6040ControlwordUINT16控制字使能/触发运动RxPDO0x6060Modes of operationINT8设定运行模式RxPDO0x607ATarget positionINT32目标位置TxPDO0x6041StatuswordUINT16状态字TxPDO0x6061Modes of operation displayINT8当前运行模式TxPDO0x6064Position actual valueINT32实际位置TxPDO0x606CVelocity actual valueINT32实际速度如果系统默认映射里没有你需要的对象可以手动添加。比如速度模式下要把0x60FF目标速度、0x6043速度限制等加进RxPDO转矩模式要加0x6071目标转矩。灵活运用PDO映射可以按项目需求精简过程数据减少通信负载。3.5 单位换算为什么程序里发100mm实际只走了32mm新手调试总线伺服时最常碰到的奇怪现象就是程序里MC_MoveAbsolute发了100mm实际用卡尺量只有32mm或者伺服转了不知道多少圈。这通常不是通信问题而是“单位换算”没配对。整个换算链路是这样的伺服驱动器端有“电子齿轮比/指令单位倍率”决定了每转需要多少个指令单位。步科伺服的默认值以说明书为准常见的是每转10000个指令单位也可能是根据编码器分辨率来的一个值。H5U端在做轴配置时会要求填入电机每转脉冲数、减速比、负载每转位移量比如丝杆导程。AutoShop会自动计算出一个轴单位换算系数然后你在程序里就能用mm、mm/s这种直观单位去编程了。关键公式其实很简单负载移动距离 电机旋转圈数 ×1 / 减速比× 丝杆导程如果程序里的位置单位是mm而电机每转对应的指令单位和机械行程不匹配就会出现“发100mm实际走了其他距离”这种问题。调试时千万别一个劲去改伺服增益先把单位换算捋明白。4. 运动控制程序的结构使能、回零、定位与故障复位4.1 在AutoShop里先建立逻辑轴AutoShop的轴配置里每台EtherCAT从站伺服要映射到一个逻辑轴对象。这个逻辑轴是你在程序里操作的对象PLCopen标准的MC指令都作用在它上面。配置好逻辑轴后MC_Power的Axis管脚接轴引用MC_MoveAbsolute的Position/Velocity管脚直接用用户单位默认mm和mm/s。程序结构建议按功能块划分每个轴独立建一个轴控制功能块里面包含使能、回零、往复定位、点动、停止、故障复位等逻辑。外层再用一个“设备总启动/总停止”控制所有轴。这样调试单轴时不会牵一发动全身。4.2 使能背后的CiA402状态机必须理解伺服驱动器的使能不是简单把Enable置TRUE就完了。CiA402定义了一个严格的状态机控制字0x6040和状态字0x6041按位配合逐步驱动状态机从“未使能”走到“运行使能”。状态字的关键位定义状态字位含义bit0Ready to switch on准备好上电bit1Switched on已上电bit2Operation enabled运行使能bit3Fault故障bit6Switch on disabled禁止上电控制字常用命令值控制字值命令含义触发动作0x06Shutdown使状态机进入Ready to switch on0x07Switch on进入Switched on0x0FEnable operation进入Operation enabled伺服才能运行0x80Fault reset复位故障在H5U里MC_Power功能块把这个状态机转换的过程封装起来了。Enable从FALSE变TRUE时MC_Power内部会自动依次发0x06、0x07、0x0F把轴拉到运行使能状态。所以程序上要做的是给Enable信号然后等待MC_Power的Status输出为TRUE再执行后续运动指令。不要在Enable刚给上就去触发MC_MoveAbsolute那样很容易报“轴未使能”错误。4.3 回零选对方式能省很多事回零方式要根据机械结构选不是越复杂越好。如果伺服配了绝对编码器可以考虑上电自动读取当前位置把当前位置设为零点或已知坐标省掉每次开机回零。增量编码器系统一般用原点开关Z脉冲找零先在原点开关下降沿减速再找编码器Z信号作为精确零点。设备比较简单、对零位要求不苛刻的也可以用限位开关回零。MC_Home的Mode参数选择回零方式Position是回零后的坐标值Direction是回零方向。回零速度不建议设太快尤其是找Z脉冲阶段速度快了容易冲过原点开关甚至撞机。设备首次调试时手动模式低速走一遍确认限位和原点开关的接线逻辑再让程序自动回零。4.4 定位控制的程序骨架参考下面给一个简化版的ST程序结构用来展示逻辑框架。实际工程中建议在每个运动指令后检查Done、Error等输出做成完整的轴状态管理。// 轴使能 MC_Power_0( Enable : bEnableAxis, Axis : Axis_X, bRegulatorOn : TRUE, bDriveStart : TRUE ); // 使能完成后才允许走定位 IF MC_Power_0.Status AND bStartMove THEN MC_MoveAbsolute_0( Execute : TRUE, Axis : Axis_X, Position : rTargetPos, Velocity : rMoveSpeed, Acceleration : rAccel, Deceleration : rDecel, Jerk : rJerk ); END_IF; // 停止信号优先 IF bStopAxis THEN MC_Stop_0( Execute : TRUE, Axis : Axis_X, Deceleration : rStopDecel ); END_IF;这种写法的核心逻辑是先使能后运动运动指令用脉冲式的Execute触发而不是持续置TRUE停止信号要放在前面保证异常时能优先停。加减速参数的设置也很重要加速度太大容易造成跟随误差报警太小影响节拍通常先按设备最大伺服能力的70%试跑再逐步调整。4.5 故障复位程序里不要只做MC_Reset伺服过流、过压、编码器异常、跟随误差超差等都会触发故障。在CiA402里故障发生后状态字bit3变1轴会进入Fault状态此时必须在排除故障源后发送Fault reset命令才能重新使能。MC_Reset可以做这件事但程序逻辑上要注意顺序先停轴再清故障再重新使能。有不少人直接在一个按钮里同时给MC_Stop、MC_Reset、MC_Power的Enable结果复位时序乱掉轴报错更频繁。建议的做法是HMI上显示故障码读0x603F故障码对象操作人员确认设备无异常后点复位按钮程序里先输出停止等轴完全停止且故障存在再触发MC_ResetMC_Reset的Done输出为TRUE后再允许MC_Power重新使能。5. 上电后的调试过程从卡在Pre-OP到稳定运行5.1 调试第一步确认EtherCAT主站已经进入OP设备上电后不要急着操作触摸屏先在AutoShop里在线连接PLC打开EtherCAT诊断页面看主站和每个从站当前的通信状态。正常情况下主站状态应该是OP每个从站的状态也应该是OP。如果从站卡在PRE-OP或者SAFE-OP系统是不能正常运行的。常见原因按经验排序ESI文件与伺服固件版本不匹配从站站号拨码和AutoShop分配不一致同步周期设置太短主站负载过高从站之间的网线接触不良或线序不对排查方法就是从上往下逐项检查。有一次现场设备卡在Pre-OP查了半小时没找到问题最后把伺服重启一下就好了——个别从站上电时序和主站不同步会陷入一个启动竞争的怪圈。遇到这种“莫名奇妙”的状态先从站断电重启往往最有效。5.2 学会读状态字比瞎调参数快十倍总线伺服调试最大的优势是数据透明。如果伺服使能不成功不要急着改增益、改参数先把0x6041状态字读出来转成二进制对照位定义看它停在哪个环节。我用过的最有效调试方法是把状态字的值直接在HMI上显示或者用AutoShop的监视表监视变量。比如状态字显示0x0231二进制展开后bit0、bit1、bit2都是1表示已经在Operation enabled状态如果bit3是1说明处于Fault状态如果bit6是1说明Switch on disabled此时要先检查急停回路、使能端子或者驱动器面板上的使能拨码。状态机卡住时可以手动向0x6040写控制字一步一步推先写0x06看看状态字有没有变化再写0x07最后写0x0F。这一招在排查伺服“为什么不动”时特别管用能快速定位问题是在主站程序逻辑还是在伺服自身状态。5.3 轴不动和轴猛冲两种完全不同的问题轴完全不动方向是先检查状态字。如果已经进入Operation enabled但发目标位置没反应重点看运行模式0x6060是不是设成了位置模式PP或CSP再看目标位置和实际位置差值是否在软件限位范围内。有时候是TORQUE/速度被限成0看上去像轴坏了其实是某条速度限制参数没改。轴一上电猛冲就是所谓的“飞车”遇到这种情况先别慌马上断使能或拍急停然后查编码器反馈。编码器线接触不良、编码器方向设置颠倒、电子齿轮比差一个数量级都可能导致速度失控。有些伺服驱动器支持“编码器线断线检测”功能建议开启能从根源上减少飞车风险。5.4 总线抖动和偶发报警的排查顺序设备运行一段时间后偶发EtherCAT从站掉线或者伺服报警“通信超时”是现场最难缠的问题之一。我一般的排查顺序是网线和接头重新压水晶头换成带屏蔽的工业网线检查网线是不是被设备运动部分拖拽磨损走线EtherCAT网线是否和伺服动力线、变频器输出线平行走线距离太近要拉开或加金属桥架隔离接地确认PLC、伺服、电机、开关电源的工作接地用万用表量一下PE对地电压异常要处理周期参数把EtherCAT同步周期调大一档比如从500us改成1ms观察是否还掉线如果调大就好了说明主站负载或网络余量不足从站数量确认H5U的实际从站带载数量没有超限。不要一上来就认定是PLC或伺服硬件坏了总线系统出问题90%以上是物理层和环境干扰。5.5 一个提高调效率的实用技巧HMI监控页总线系统的好处是变量都在PLC里直接把它们丢到HMI画面里就能做一屏“轴状态监控页”。我习惯在触摸屏上加这么几项主站/从站OP状态、每台伺服的0x6041状态字、0x603F故障码、当前实际位置、目标位置、运行模式。调试时看着屏幕操作哪里卡住一目了然比拿个螺丝刀对说明书查半天效率高得多。6. 选型延伸EtherCAT和CANopen怎么选才不花冤枉钱6.1 两张表看懂两者差异每次做方案时都有人问能不能用CANopen总线控制步科伺服为什么非要用EtherCAT我一般用下面两张表解释。通信能力对比项目EtherCATCANopen物理层100M以太网全双工CAN总线通常最高1Mbps典型同步周期250us~2ms多轴同步可达微秒级通常几毫秒到十几毫秒负载高时抖动明显接线方式RJ45网线菊花链简洁CAN双绞线需要终端电阻分支要谨慎从站容量实际可带几十个从站一般建议不超过32个波特率越低节点越少调试工具ESI文件自动配置主站扫描EDS文件配置NMT管理手工分配PDO较多适用场景对比设备条件推荐方向新项目、轴数多、节拍快、需要多轴联动EtherCAT一步到位老产线改造轴向不多于4轴、定位精度要求一般可以保留CANopen或脉冲控制成本现场已有CANopen总线伺服不想换硬件加EtherCAT转CANopen网关过渡但实时性要重新评估6.2 如果现场只有CANopen版步科伺服怎么办标题场景里如果伺服不是EtherCAT版而是纯CANopen版方案就要调整。一种做法是加EtherCAT转CANopen网关H5U的EtherCAT主站发CANopen报文给网关网关再转成CANopen帧下发给伺服。这个方案在低速、少轴的场景下能跑但通信链路多了一层周期变长同步精度下降多轴联动基本不现实。另一种做法是直接把伺服换成EtherCAT版。单看单价确实多花钱但省掉的网线、端子、走线工时和后期调试时间往往比硬件差价钱更值。这不是“消费升级”而是方案风险控制——一个节拍要求高的设备如果因为总线瓶颈限制导致效率上不去得不偿失。6.3 只是“用从站”不需要自己写协议栈有同行问过我学EtherCAT是不是要先会移植协议栈会不会要写大量代码实际上在H5U步科伺服这种“主站PLC第三方从站”的项目里我们只使用从站的设备描述文件和PDO配置协议栈由PLC主站和伺服从站的硬件固件完成完全不需要自己开发。只有当你自己动手做一台EtherCAT从站设备时才需要研究ESC芯片、SSC从站协议栈、XML生成这些底层内容。所以初学者的学习路径很清晰先把CoE/CiA402对象字典、PDO映射、EtherCAT从站状态机、主站配置流程这些概念吃透就已经能应对绝大多数设备调试工作了。底层协议栈是你的加分项不是入门必需项。做完这个项目我个人最深的体会是总线运动控制调试协议理解比记接线图更重要。把状态字、故障码、PDO映射这几个核心抓手掌握了遇到问题照着逻辑链去查基本不会走弯路。再分享一个小技巧把0x6041和0x603F做进HMI监控页面设备交付后客户报障时远程看一眼监控画面就能判断是机械问题、伺服问题还是程序问题售后成本能省下不少。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门