
先说一下这个项目给我的第一感觉它表面上看是一个“接错线”的求教贴实际上一旦你把这套“H5U EtherCAT主站 CANopen伺服”的组合拆开你会发现背后牵扯出的是现场工程师每天都要面对的一类经典问题——两种完全不同的总线协议怎么让它们在一块儿协同工作。这也是我拿到“汇川H5U小型PLC使用EtherCAT总线通讯控制步科CANopen伺服”这个标题后第一时间想跟你聊透的东西不是背参数而是搞清楚原理、选对路径、避开调试现场那些坑。这个场景适合谁如果你是做非标设备电气设计的、搞PLC程序调试的或者正在研究伺服应用的项目工程师都会有用。尤其是那些“设备已经定版、伺服已经选完最后发现PLC和伺服接口不匹配”的棘手局面这篇文章里的几个方案基本都能覆盖。1. 混搭总线的难题先把这个项目的真实情况盘清楚1.1 H5U这颗“小钢炮”自带EtherCAT主站的小型PLC汇川H5U在国产小型PLC里算是一个特殊的存在。它的机身尺寸就是一台小型PLC但内部却集成了EtherCAT主站这在同类产品里并不常见。平时我们接触的小型PLC比如传统的三菱FX系列或者一些国产经济型PLC大多只支持脉冲输出控制伺服要么通过RS485走Modbus。H5U不一样它最吸引人的一点就是只要在编程软件里配好轴和从站就能直接用EtherCAT总线段去带伺服省掉了一大把脉冲线同时把同步精度提升到微秒级别。我记得第一次用H5U时我最关心的是它到底能带多少轴。这个根据固件版本和具体型号会有些差异现场比较保守的做法是用它带4到8个EtherCAT伺服性能表现比较稳。对小设备、小产线来说这套配置性价比非常高因为不需要再花一笔钱去买专门的运动控制器。EtherCAT主站带来的好处不止是“省线”。它真正解决的是多轴同步问题。用脉冲方式控制多台伺服会有累计误差而且每个轴的加减速处理都是独立完成的EtherCAT则把主站和所有从站挂在同一根总线上通过分布式时钟DC来统一时间基准各个轴可以按同一个时间拍子执行指令。H5U既然内置了主站大家在选型时就不必再纠结“要不要加运动控制卡”的问题了。1.2 步科伺服到底能走哪种总线步科的伺服产品线非常宽从早期的脉冲型AASD系列到后来支持CANopen通讯的FD系列再到支持EtherCAT的FD-EC系列品种相当多。问题就出在这里步科伺服不一定都能走EtherCAT很多现场“翻车”都是因为默认“伺服”两个字等于“所有总线都支持”结果买来的型号只支持CANopen。AASD系列是比较老的伺服主打脉冲/模拟量控制有些高端型号带CANopen通讯口。FD系列则更偏总线型FD标准型支持CANopenFD-EC系列专门为EtherCAT总线设计。你在现场如果看到伺服的编码器插头旁边还有一个小通讯头那大概率是支持总线通讯的但具体是CANopen还是EtherCAT必须看机身上的铭牌和通讯口的标识。所以看到标题“汇川H5U小型PLC使用EtherCAT总线通讯控制步科CANopen伺服”第一反应不应该是“怎么接线”而是“这个方案本身需要重新评估”。因为EtherCAT和CANopen虽然都属于现场总线但物理层和协议栈完全不同EtherCAT用的是以太网物理层CANopen用的是CAN物理层这两者没法直接硬接。直接连上去轻则设备无响应重则烧毁通讯接口根本不是一个数量级的东西。1.3 一条EtherCAT链路三条可行的实现路径既然是“用EtherCAT主站控制CANopen伺服”摆在面前的无非这几条路方案A把伺服本体换掉选用步科FD-EC系列支持EtherCAT的型号。这是最省心、性能最好的做法。轴多、运动要求高、现场维护周期长首选这个。方案B保留现有的CANopen伺服在H5U的EtherCAT总线上挂一个“EtherCAT转CANopen”网关。网关在EtherCAT侧作为从站在CANopen侧作为主站两边各配各的通过内部映射区交换数据。这种方案成本略低但会引入额外延迟调试也较繁琐。方案C放弃EtherCAT用H5U本体自带的串口走Modbus去控制步科伺服的CANopen参数如果该伺服支持Modbus或者用H5U的CAN口直接走CANopen总线。这个方案对点位控制是可行的但不要期望它有EtherCAT的同步性能。三条路的对比如下方案成本调试难度同步性能适用场景A换EtherCAT版伺服中等低优秀微秒级多轴联动、高精度定位B加协议网关低高一般毫秒级老设备改造、点位控制C走串口/CAN口最低低较差单轴点位、临时调试方案A很直接方案C大家都知道怎么做本文重点展开方案B因为它最考验技术功底也最容易踩坑。2. 配置前的准备工作硬件连线、拨码和软件里必须做对的事2.1 接线和拨码别小看“编码器那排开关”很多人在现场被“伺服编码器那排开关是什么”这种问题卡住其实就是伺服驱动器上面的拨码开关。这些拨码开关通常用来设定通讯地址站号、CANopen波特率、总线终端电阻等。部分伺服把拨码分成两排一排是状态显示和数字键盘另一排才是真正的“设定拨码”如果你看到驱动器正面有一组小的红色或白色的拨码上面标着1、2、4、8之类的数字那基本都是二进制地址设定用的。无论是EtherCAT还是CANopen从站的站号Node ID都不能冲突。用网关方案时CANopen伺服侧还要配置额外的波特率CANopen默认波特率一般是125kbit/s但不同厂家设备可能不一样常见还有250k、500k、1M。伺服和网关的波特率必须完全一致否则数据根本通不了。接线的时候每一项都要逐条对照说明书来。CANopen接线是“手拉手”式的菊花链结构每个节点都有标准的CAN_H、CAN_L接口最末端要接120Ω终端电阻。很多人会在总线两端忘记接电阻结果现场偶尔能通、偶尔通讯超时排查半天发现是终端电阻的问题。EtherCAT同样用标准网线连接但它靠的是以太网物理层接线相对简单不过也要注意使用高质量的屏蔽网线尤其是在电柜里动力线较多的情况下网线离动力线太近很容易出现偶发断站。2.2 XML从站文件让H5U认识这个“陌生设备”EtherCAT协议有一个特点每一个从站设备都对应一个XML描述文件ESI文件。这个XML文件里写清楚了这个设备支持哪些对象字典、哪些同步管理模式SM、PDO映射是什么样、支持哪些周期等。H5U的编程软件InoProShop在配置EtherCAT从站时就是靠这个XML文件去“认识”设备的。如果用的是方案AEtherCAT版伺服从步科官网下载对应型号的XML文件导入InoProShop之后基本所有参数都会自动带出来省力很多。如果是方案B网关需要导入的是网关在EtherCAT侧作为从站时的XML文件而不是伺服侧的。这两个XML不能搞混否则后面PDO映射全是错的。有一个非常重要的细节XML文件的版本必须和从站固件版本对应。伺服或者网关的固件升级之后对象字典可能有增减XML文件还是旧的话轻则某些参数读不出来重则从站直接进入OP状态失败。我习惯在导入XML后手动打开看一眼“设备描述”里的版本号再和实际设备上的固件版本核对一遍。2.3 通信周期与同步时钟1ms还是2ms怎么定EtherCAT在运动控制中最大的优势在于同步性能但是这种性能不是凭空来的它依赖分布式时钟DC。所有从站都能根据第一个从站的时间作为基准来对齐自己的本地时钟这样主站发过来的同步指令才能在同一个时刻被执行。通信周期Cycle Time的选择直接决定了同步精度和伺服控制效果。对于通用伺服应用我通常从1ms开始调试如果设备要求高一些比如飞剪、追剪这类动态响应的场景可以尝试0.5ms如果只是普通点位控制2ms也完全可以接受稳定性和抗干扰能力还会更好。建议参数如下应用场景通信周期DC同步说明简单点位控制2ms开启调试最简单稳定优先通用伺服定位1ms开启最常用的组合高速轨迹插补0.5ms开启需确认从站同步能力周期设得太短有一个隐藏风险主站负载过高导致周期任务溢出。H5U本身CPU性能再强也经不起所有逻辑任务都往1ms里塞。所以我在调试时一般把运动控制相关的任务放在1ms任务里HMI通信、气缸逻辑这些放到10ms或者50ms任务里去千万别一锅炖。3. 核心实操H5U配置EtherCAT从站并让伺服转起来3.1 新建工程与扫描从站或手动添加假设你走的是方案A手里有一台步科FD-EC系列EtherCAT伺服。打开InoProShop新建工程选择PLC型号为H5U然后进入“EtherCAT”配置界面。第一次调试时我强烈建议你用在线扫描的方式来添加从站前提是先把EtherCAT网线接好伺服驱动器的通讯口拨码或软件地址配置正确然后点击“扫描”。InoProShop会自动识别出总线上挂的伺服型号和站号并把它添加到配置树里。如果扫描不到先查物理链路H5U的EtherCAT口和伺服IN口之间有没有插反伺服最后一个IN/OUT口的连接是否正确。如果还是不行再检查XML文件是否匹配。在线扫描虽然方便但前提是设备要通电、网线要通、协议要匹配缺一不可。手动添加也可以在从站列表里选择“导入XML”再指定该从站的站号即可。这种方式适合设备不在手边、提前编辑程序的情况。注意站号不能重复否则后面总线启动时会报错。3.2 配置PDO映射主站和伺服之间到底“传什么”EtherCAT通讯里主站和从站之间周期交换的数据叫过程数据对象PDO。PDO映射表决定了每个周期主站发给伺服的命令里有哪几个参数伺服发给主站的状态里包含哪几个参数。对伺服控制来说最基础的PDO映射至少要包含控制字0x6040伺服启停和状态切换的控制位目标位置0x607A位置模式下命令位置目标速度0x60FF速度模式下命令速度状态字0x6041伺服当前状态反馈实际位置0x6064编码器反馈位置实际速度0x606C编码器反馈速度步科伺服出厂一般都预置了一组默认PDO映射InoProShop导入XML后会自动按照默认映射来配置。用厂家的默认映射做普通定位是够的但如果你的应用需要周期修改电子齿轮比、切换控制模式这类高级功能就得自己在PDO里手动添加对应的对象。修改PDO映射有一个原则必须在总线停止Pre-Op状态的情况下修改修改完重新下载配置并重启总线才能生效。如果现场出现“PDO内容错误”之类的报警多半是映射表里有无效索引或者SM通道的长度不够。把不需要的对象删掉保持PDO长度精简伺服响应会更稳定。3.3 用ST写一小段启动程序让轴正常上使能H5U的编程软件里运动控制通常不是让你直接写控制字和状态字去操作伺服内部状态机而是通过系统提供的一整套运动控制功能块来间接实现。我们最常用的几个功能块是MC_Power、MC_Home、MC_MoveAbsolute、MC_MoveVelocity。这些功能块的底层其实已经帮你把DS402状态机切换的时序封装好了。假设我定义了一个轴变量Axis1类型是AXIS_REF那么使能轴的ST程序大致如下// 上使能 MC_Power_0( Axis : Axis1, Enable : TRUE, bRegulatorOn : bPowerCmd, bDriveStart : TRUE, Status bPowerStatus, Error bPowerError, ErrorID wPowerErrorID );注意MC_Power的三个输入含义完全不同Enable是总使能开关bRegulatorOn才会真正接通伺服使能bDriveStart用于清除报警或者驱动器的启动实际项目里安全回路断开时要把Enable和bRegulatorOn同时关掉这样伺服才会立即断开动力输出这是安全设计的基本要求。使能成功后用绝对定位来做简单的点位测试MC_MoveAbsolute_0( Axis : Axis1, Execute : bMoveCmd, Position : rTargetPos, Velocity : rMoveSpeed, Acceleration : rAcc, Deceleration : rDec, Jerk : 0, Direction : MC_Direction_Positive, Done bMoveDone, Busy bMoveBusy );调试时建议先用极慢的速度比如位置模式下速度设成额定速度的5%以下跑一小段确认方向正确、位置反馈正常再逐步提高速度。第一次就让设备飞车在伺服调试里是大忌。3.4 如果必须直接操纵对象字典SDO也能干不少事运动控制功能块只负责“动”伺服内部像电子齿轮比、速度环增益、位置环增益这些参数还是得通过SDO服务数据对象来读写的。SDO和PDO的不同在于它每次传输的数据量更大、实时性不强但非常灵活适合参数配置。在InoProShop中可以通过EtherCAT诊断界面在线调试SDO也可以用自己的程序调用SDO读写功能块来改参数。这里稍微提醒一下不是所有对象都支持在运行状态下写入很多参数需要先进入“厂家设置”状态比如修改电子齿轮比时需要先断开使能否则系统会拒绝写入或者直接报警。常见的几个对象索引如下对象索引名称说明0x6091GearRatio电子齿轮比0x60C5MaxAcceleration最大加速度0x60C6MaxDeceleration最大减速度0x6081ProfileVelocity轮廓速度0x6060ModesOfOperation运行模式选择拿到一台新伺服我一般会先读一遍0x6060当前模式确认伺服当前处于哪种模式。调试时频繁切换模式如从位置模式切速度模式之前必须先把PDO里对应模式相关的对象映射好否则从站会报“不支持对象”错误。4. 网关方案用EtherCAT转CANopen把旧伺服“拉上高速”4.1 为什么会有这种需求网关到底干了什么现实项目里设备上一批伺服是CANopen的不可能全换掉但新PLC又只有EtherCAT口这时网关就派上用场了。把网关挂在H5U的EtherCAT总线上它是H5U眼中的从站同时它接在伺服那根CANopen总线上是伺服群里的主站。它的任务就是把EtherCAT报文里主站写的PDO数据转成CANopen报文发给伺服再把伺服反馈的PDO数据打包成EtherCAT周期的数据回给主站。有人会问这样接能不能满足运动控制的要求我的回答是能但有代价。CANopen本身的通讯机制和EtherCAT完全不一样CANopen总线的PDO传输更依赖波特率和总线负载。CANopen在125k波特率下一帧数据就接近1ms的传输时间再加上网关内部转发整体延迟轻松超过2ms。如果只是定点走位、泵站启停完全够用想让几个轴做高精度同步插补那基本不现实。4.2 网关配置要点CANopen波特率、站号、映射表网关的配置一般分三步。第一步配置CANopen侧的参数波特率、CANopen主站使能、周期间隔。波特率必须和伺服拨码设置保持一致切忌CANopen网络里混着两台用了不同波特率的设备这种低级错误在产线上很普遍结果就是整个网络谁也找不到谁。第二步配置CANopen侧的PDO映射网关作为主站要向伺服周期性发送控制字、目标位置等RPDO同时接收伺服反馈的TPDO包括状态字、实际位置等。这里的PDO方向要特别注意对伺服来说主站发给它是RPDOReceive-PDO伺服发回来是TPDOTransmit-PDO但站在网关的角度看它发RPDO给伺服同时接收伺服的TPDO。脑子一定要清醒搞反了映射表数据全是乱的。第三步配置EtherCAT侧的PDO映射。这一侧就是把CANopen侧收到的TPDO数据映射到EtherCAT从站的过程数据这样H5U的InoProShop里读到的地址就和CANopen侧对应上了。实际操作里这一步最烦人因为不同厂家的网关映射地址定义差别很大没有统一规范只能对着网关手册一页页翻。好在多数网关支持用配置软件可视化拖拽比纯文本配置省心得多。4.3 网关方案的体验和坑延迟、同步性、调试复杂度先说延迟。之前我调试过一个项目H5U带一台CANopen伺服走网关从主站下发指令到伺服真正动作肉眼能明显感知到滞后。这种滞后在单个点位控制场景下没问题比如气缸到位后启动电机但在连续轨迹加工里就不可接受了。再说同步性。CANopen的TPDO很多时候是“事件触发”或“定时触发”而EtherCAT靠的是主站周期扫描。网关要把CANopen的非周期数据“硬塞进”EtherCAT周期里就得靠缓存。缓存的本质是“等”等的时间长了数据新鲜度下降位置反馈滞后就变得明显。所以使用网关时建议通信周期至少设置为4ms或5ms留足网关内部处理和CANopen传输的时间。最后说调试复杂度。网关方案的设计思路是“让两种协议各自干各自擅长的事”但调试流程等于把两种协议栈都过一遍。哪里出了问题都不太好查不像单协议那么直观。我的建议是项目允许的情况下别把网关当长期方案它更适合临时改造或备件应急。5. 调试现场的故障排查速查表和心得5.1 从站扫描不到、站号冲突、XML版本错“扫描不到从站”是最常见的问题。排查顺序一定是先物理后逻辑查网线是否插对、伺服是否上电、编码器线是否接好再看InoProShop里的总线状态是否处于可扫描模式。如果之前已经把网口设置改过扫描时会发现H5U的IP或MAC被占用这种低级问题只要重启PLC和软件就能解决。扫描到了以后如果后续下载配置时报“从站设备与XML不匹配”大概率是XML版本太旧。这时候去厂家官网下载最新的XML重新导入替换掉旧版本。替换之后一定要“重新生成”一下从站配置否则软件里可能还残留旧的PDO映射。5.2 伺服使能失败、报警代码快速定位使能失败的排查十次里有八次是驱动器的状态机没有走到正确位置。伺服内部有一套标准的DS402状态机Switch On Disabled未使能、Ready To Switch On待使能、Switched On已使能、Operation Enabled运行使能。MC_Power的bRegulatorOn信号发出后PLC会等待驱动器进入Operation Enabled。如果驱动器参数配置错误比如模式和目标位置越限它可能永远停在“Switch On Disabled”那就要重点查报警代码。步科伺服的报警代码大致有规律可循常见的有过流A.01或类似编号、过压、欠压、编码器异常、总线通讯超时等。每个厂家的代码含义并不同务必照说明书速查。自己调试时最怕的是报警代码一闪而过解决办法是把驱动器的报警记录功能打开并保持报警不自动复位这样现场才能看清到底报的什么。有几个排查经验可以分享一是刚上电时先看驱动器面板有没有通讯状态指示二是通讯超时报警出现时优先怀疑站号或波特率不匹配而不是网线三是使能后立刻无报警但电机不动大概率是使能信号没激活到位或者模式选错了。5.3 总线抖动、位置漂移和“走不准”怎么破总线抖动在EtherCAT里常表现为同步误差过大甚至出现“DC同步丢失”报警。排除手段很简单把通信周期调大一点试试如果能恢复正常说明主站负载或从站响应速度跟不上如果还是抖就要检查DC时钟配置和从站固件版本。位置漂移的原因往往是电子齿轮比或者位置反馈分辨率设置不对。比如编码器每转是10000脉冲但PLC侧轴参数里写成了1000那么实际移动距离和理论值就差了10倍。排查位置不准第一步是在伺服面板或者PLC诊断里看实际位置反馈是否随电机转动而连续变化如果反馈正常问题就在轴参数如果反馈本身有跳变那就查编码器接线和滤波参数。现场还有一个常见的“走不准”原因是伺服增益偏低。位置模式下增益不够就会导致跟随误差偏大定位结果总是慢半拍。这时不仅要调增益还要看加加速度限制是否设得太低很多“定位不准”其实是被加加速度限制给拖累的。5.4 日常开发中的操作习惯建议调试过程中我慢慢养成了一些固定习惯虽然琐碎但真的很管用每次修改伺服参数前先把当前参数导出备份到电脑。厂家软件都有导出功能导出后文件名上备注日期和被调设备编号方便回滚。第一次上电不要急着让伺服带负载。把电机和负载脱开空载点动确认方向、反馈、加速度全部正常后再带负载测试。带负载炸机的教训我见过不止一次。在InoProShop的“Scope”功能里抓一下伺服的速度曲线和位置曲线形成习惯。别只看最终定位结果要看一下动态过程有没有超调、有没有震荡。很多隐性问题都是波形先暴露出来的。总线上设备较多时给每个从站设置明确易懂的名称比如“伺服_X轴”“伺服_Y轴”不要用默认的Station1、Station2。排查问题的时候谁也不想从站列表里全是默认名。写到这里我想到一个很真实的场景现场工程师对着H5U的EtherCAT口和步科伺服上的CANopen口总想找一根“转接线”一插了事。我见过太多次大家花了大量时间在找根本不存在的“转接线”上却忽略了真正要做的事情其实是重新理解和规划总线架构。要么换伺服版本要么用网关要么就干脆走串口这三条路无论如何都比硬接靠谱得多。最后再分享一个小技巧不管用哪种方案第一次调试前把H5U、伺服、网关各自的固件版本和软件版本全部检查一遍确保没有“老软件配新固件”的组合。很多莫名其妙的问题升级一次固件就全没了。做运动控制这行版本管理做得越认真你在现场流的汗就越少。