ARTICLE DETAIL

资讯详情

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

H5U PLC通过CANopen控制步进伺服全流程实战指南

H5U PLC通过CANopen控制步进伺服全流程实战指南 先说结论H5U这颗PLC的CANopen主站能力完全够用配一台带CANopen协议的步进伺服驱动器控制步进电机做点位运动、回零、速度控制整套流程比想象中简单但坑也比想象中多。这篇不是官方手册复读是我自己从零开始配完一整套H5U 步进伺服 CANopen之后的实战记录。文章会按“硬件准备 → 接线与拨码 → 软件配置 → 程序编写 → 问题排查”的顺序走尽量把每一步“为什么这么做”也讲清楚。适合手里有H5U、正准备把步进电机挂到CANopen总线上但又不想翻几百页手册的工程师。也适合第一次玩CANopen、对CiA 402协议还比较陌生的朋友照着做基本能跑起来。1. 整体思路为什么用CANopen控制步进伺服1.1 方案选型H5U走CANopen的定位和适用场景汇川H5U本身是以EtherCAT为招牌的中型PLC很多人的第一反应是直接用EtherCAT总线伺服。但实际项目中步进电机的应用场景通常是“点位控制为主、同步性要求不高、成本敏感”的工位比如小型贴标机、切割台、定长送料机构。这种场合用EtherCAT伺服成本偏高而且把轴资源浪费了。CANopen作为老牌现场总线最大的优势就是成熟、稳定、便宜。国产主流步进驱动器品牌基本都有CANopen版本也提供EDS文件。H5U内置了CAN接口本身支持CANopen主站这意味着不需要额外挂一个CANopen网关模块PLC直接就能当主站用。我这次选型的思路很简单只要现场对“多轴同步”没有硬性要求能够接受毫秒级的通讯响应那CANopen控制步进伺服就是性价比很高的方案。H5U的CANopen主站支持标准NMT管理、PDO/SDO通讯带几十个从站节点也没问题中小型设备完全够用。1.2 CANopen控制步进伺服的核心机制对象字典、PDO、SDO、NMT要玩转这套系统必须先明白CANopen的四个基本概念不然配置界面里一堆英文字段会直接看懵。对象字典Object DictionaryOD这是每个CANopen从站设备内部参数的“字典”所有数据都通过索引Index和子索引Subindex来访问。比如控制字在0x6040状态字在0x6041目标位置在0x607A。伺服驱动器的转速、电流、细分、回零速度等参数本质上都是OD里的对象。PDOProcess Data Object过程数据对象用于周期性、高速地传输实时数据比如控制字、目标位置、实际位置、实际速度。PDO又分发送PDOTxPDO从站传给主站和接收PDORxPDO主站传给从站。PDO的特点是“广播式”传输不需要应答速度快但也不可靠丢了就丢了所以实时控制走PDO参数配置走SDO。SDOService Data Object服务数据对象用于偶发、非实时的数据读写比如修改驱动器参数、读取报警代码。SDO是一问一答的机制可靠但有延迟。NMTNetwork Management网络管理负责从站节点的启动、停止、复位。主站上电后要发送NMT命令让从站进入Operational状态从站才能真正开始PDO通讯。用一句话概括SDO用来“配置”PDO用来“控制”NMT用来“管理”。步进伺服的控制逻辑就是先通过SDO设置工作模式然后在运行中周期性地通过PDO发控制字和目标位置再从PDO读回状态字和实际位置。2. 硬件准备与接线细节决定成败2.1 材料清单与选型注意点核心硬件就四样H5U PLC本体、带CANopen接口的步进伺服驱动器、步进电机、CANopen通讯线。H5U自带的CAN接口是CANopen主站口。有些型号的H5U可能有多个通讯口配置前先确认一下你这个型号的CAN口定义。驱动器方面我用的是一款国产一体式步进伺服支持CANopen协议带标准RJ45/CAN端子接口。购买时一定问清楚支持的CANopen协议版本和波特率范围最好让商家提供EDS文件没有EDS文件后面配置会非常痛苦。CANopen通讯线推荐使用带屏蔽层的双绞线两端线色对应一致。CANH接CANHCANL接CANL千万不要接反这个错误会让通讯完全不通而且容易烧驱动器的通讯芯片。2.2 驱动器拨码设置站地址、波特率、终端电阻这是整个项目里最容易被忽略、又最容易出问题的环节。步进伺服驱动器的CANopen通讯参数一般通过拨码开关设定。CANopen站地址也就是节点ID范围是1到127。每个从站的地址必须唯一不能重复。我习惯把站地址和设备的物理位置对应起来比如工位1的送料轴设1号工位2的切刀轴设2号这样排查问题的时候看地址就知道是哪台设备。CANopen波特率常见的有125K、250K、500K、1M。波特率设置必须和主站H5U保持一致否则从站根本收不到数据。500K是大多数设备默认的平衡选择兼顾距离和速度我用的是500K。终端电阻CAN总线两端必须接终端电阻一般是120Ω。如果总线上只有两台设备PLC和驱动器那么PLC内部已经带有终端电阻驱动器端需要把拨码开关拨到“ON”位置启用终端电阻。如果总线上有多个从站那么只有物理最远端的两个设备需要接终端电阻。我踩过一次坑只接了一台从站结果从站终端电阻没拨上去总线通讯时通时断高频干扰特别明显。除了通讯参数步进驱动器还有细分设置电子齿轮比和电流设置拨码。细分直接影响位置分辨率比如设置2000脉冲/圈那么走一圈需要2000*电子齿轮比换算成PLC侧的位置单位。2.3 接线拓扑单台设备和多台设备的区别单台步进伺服挂H5U时接线最简单CAN_H接CAN_HCAN_L接CAN_L接好24V电源和电机相线即可。多台设备时必须用“手拉手”菊花链拓扑从PLC的CAN口出去先到第一台驱动器再从这台驱动器的下一个CAN口到第二台依次类推。千万不要用星形拓扑一条主线分成多路CAN总线对分支线长度很敏感分支太长会导致信号反射通讯异常。我在实际项目里带过8台步进伺服用菊花链串联总线长度大概30米500K波特率下运行稳定。如果总长超过100米建议降到250K波特率保险。3. AutoShop软件配置实操一步一步来3.1 新建H5U工程并启用CANopen主站打开AutoShop软件新建工程PLC型号选择对应的H5U系列。建好工程后左侧项目树里找到“CANopen配置”或“通讯配置”入口。在CANopen配置界面先把H5U的CAN口设为主站模式波特率设为500K。这里必须和驱动器的拨码一致。有人会问我怎么确认主站配置成功其实很简单配置完成后编译下载到PLC如果从站没接入H5U的CAN通讯指示灯会显示异常接入并配置正确之后指示灯状态会正常。有个细节H5U的CANopen主站配置界面支持两种方式添加从站一种是手动输入从站地址和名称另一种是直接从EDS文件导入。强烈建议用EDS文件导入因为EDS文件里已经包含了驱动器的PDO映射信息和对象字典参数手动配很容易漏掉关键映射。3.2 导入EDS文件并从站参数配置EDS文件一般是厂商提供的一个.eds后缀文本文件里面用标准格式描述了驱动器的对象字典、PDO信息、设备信息等。在AutoShop的CANopen配置界面右键“从站列表”选择“导入EDS”选中驱动器的EDS文件然后给这个从站分配一个节点地址也就是刚才拨码设置的站号。导入成功后能看到该从站的详细信息包括设备类型、厂商代码、产品代码等。此时需要检查几个关键参数从站地址必须和驱动器拨码一致波特率跟随主站500KPDO参数驱动器的RxPDO和TxPDO里默认映射了哪些对象一般默认会映射控制字、状态字、目标位置、实际位置等项目确认即可启动选项是否允许主站自动启动从站通常勾选“自动启动”配置完成后AutoShop会在IO映射表中自动分配输入输出地址用于后续PLC程序读写。这一步很关键后面写程序就是操作这些映射地址。3.3 PDO映射的规划与理解PDO映射决定了“哪些数据周期性地在总线上跑”。我常用的映射方案是发送PDO从站→主站映射状态字0x6041、实际位置0x6064、实际速度0x606C接收PDO主站→从站映射控制字0x6040、目标位置0x607A、目标速度0x60FF如果驱动器EDS文件里默认的PDO映射缺少某个对象可以在AutoShop里手动修改映射。需要注意每个PDO映射的对象数量是有限制的一般不超过8个字节。别贪多够用就行。我见过有人想把所有无关参数都塞进PDO里结果PDO长度超标通讯都建立不起来。用一个形象的比喻PDO就像一个快递包裹空间有限你只放“最重要的几件东西”就好其他不常用的走SDO慢慢寄。3.4 SDO的用途参数配置场景PDO解决的是“运行时周期数据”而驱动器“上电之后才能知道的一些参数”必须通过SDO来配置比如控制模式位置、速度、回零电子齿轮比分子分母加减速时间回零方式和回零速度报警清除方式SDO可以手动在AutoShop里添加访问对象也可以在PLC程序里通过通讯指令主动读写。我的建议是调试初期先在AutoShop的在线监控里用SDO直接写几个参数验证通讯是通的再写PLC程序。有一个坑必须提有些驱动器的参数修改后需要重启驱动才能生效SDO写成功不代表立即生效。具体看厂商手册H5U这边只是忠实地把SDO报文发出去了。4. 程序编写从使能到定位运动4.1 CANopen控制步进伺服的状态机基础CiA 402标准里驱动器内部有一个状态机从“未就绪”到“运行使能”要经过一系列状态转换。很多新手直接给驱动器发“使能”指令却没反应就是因为状态机没走对。状态机核心转换过程驱动器上电后处于“启动”状态或未就绪发送控制字0x06进入“就绪”Ready to Switch On发送控制字0x07进入“已就绪”Switched On发送控制字0x0F进入“运行使能”Operation Enabled此时电机才能接受运动指令控制字的几个关键位bit0切换就绪/使能bit1切换主接触器bit2切换电压bit3使能运行bit4触发新点位PP模式必用bit7复位故障对应的十六进制值就是上面说的0x06、0x07、0x0F。状态字0x6041的bit0~bit3会反馈当前状态bit10表示“目标位置到达”Target Reached。4.2 H5U的CANopen数据区读写以ST语言编写控制逻辑H5U支持ST、梯形图、FBD等多种编程语言我个人习惯用ST写运动控制逻辑结构清晰调试方便。首先我们需要知道AutoShop为CANopen从站分配的IO映射地址。比如从站的接收PDO数据映射到了%QW100~%QW101发送PDO数据映射到了%IW100~%IW101。不同项目分配的地址不同以你实际生成的映射表为准。下面给出一套最基础的点位运动ST程序框架可直接参考修改。// 控制字状态机 IF bEnablePos THEN // 使能流程06 - 07 - 0F // 此处通过延时或条件跳转实现时序 IF wStatus 0 THEN qwControlWord : 16#06; // 进入Ready To Switch On wStatus : 1; ELSIF wStatus 1 THEN qwControlWord : 16#07; // 进入Switched On wStatus : 2; ELSIF wStatus 2 THEN qwControlWord : 16#0F; // 进入Operation Enabled wStatus : 3; END_IF; ELSE qwControlWord : 16#00; wStatus : 0; END_IF; // 当处于使能状态时写入目标位置并触发新点位 IF wStatus 3 AND bStartMove THEN qwTargetPos : rTargetPosL; // 目标位置单位取决于电子齿轮比和位置单位 qwControlWord : 16#1F; // 0F bit4触发新点位 END_IF; // 将控制字写入CANopen输出映射区 %QW100 : qwControlWord; // 发送PDO的第1个字 %QW101 : qwTargetPos; // 发送PDO的第2个字 // 读取从站返回的状态字和实际位置 wDriveStatus : %IW100; // 接收PDO的第1个字 rActualPos : %IW101; // 接收PDO的第2个字这里要注意位置数据一般占32位也就是两个寄存器。PLC侧的数据类型要和对齐方式匹配比如一个32位目标位置占用%QD100如果起始地址是100占100和101两个字。具体要看AutoShop生成映射表时地址是字对齐还是双字对齐。4.3 位置控制模式PP与速度控制模式PV的程序差异位置控制模式PPProfile Position的特点是PLC把目标位置发给驱动器驱动器按照预设的加减速参数自动跑过去。适用于“点到点定位”场景。速度控制模式PVProfile Velocity的特点是PLC发目标速度驱动器持续以这个速度运转直到PLC发速度0或停机指令。适用于连续送料、点胶等需要连续动作的场景。两种模式的选择通过SDO写0x6060对象实现1表示PP3表示PV。PP模式下触发运动的关键是控制字bit4“New Setpoint”。每次改变目标位置后必须将bit4从0变成1驱动器才会接收新目标。如果目标位置没变bit4不变驱动器不会重新触发。我实际调试中遇到过程序里连续两次发相同目标位置第二次电机没动。原因就是bit4没有做“0→1→0”的边沿处理。解决办法是先把bit4清0延时一个扫描周期再置1。4.4 回零功能的实现思路步进伺服一旦断电位置就丢了。每次上电后必须回零。CANopen标准里有回零模式Homing Mode0x60606。回零的流程是通过SDO设置回零方式0x6098比如“当前位置回零”“负限位回零”“正限位回零”“Z脉冲回零”等设置回零速度0x6099控制字发0x0F使能控制字发0x1F触发回零等待状态字bit12Homing Attained置1步进驱动器一般没有编码器做不了Z脉冲回零。常见的做法是接一个原点接近开关通过硬限位信号回零。有些驱动器支持“当前位置作为原点”这种情况下只要上电后手动把机械结构放到原点位置然后发指令把当前位置清零即可程序更简单。4.5 加减速和电子齿轮比的换算实例位置单位的换算是一个绕不开的坎。驱动器内部是以“用户单位”为位置单位的但用户单位需要和PLC里的数据换算对上。举个例子步进驱动器细分设为20000脉冲/圈机械结构上电机转一圈走10mm丝杆导程。那么1mm 20000 / 10 2000脉冲PLC要发送的目标位置如果以mm为单位实际上要转换成内部的用户单位具体换算要看驱动器的“电子齿轮比”设置。如果驱动器默认位置单位已经是“脉冲”那么PLC发目标位置数据时需要自己把mm换算成脉冲数。如果在驱动器里设置了电子齿轮比让位置单位变成0.1mm或0.01mm那么PLC直接发整数值就可以了。我的习惯是在驱动器参数里把电子齿轮比分母设置为“10”分子保持默认这样位置单位就是0.1mmPLC程序中目标位置直接填10代表1mm可读性很高调试也方便。5. 常见问题排查亲测踩坑记录5.1 CANopen通讯建不上先查硬件再查软件这是大家问得最多的一个问题出现“从站扫描不到”时按顺序排查看能解决90%的问题检查硬件接线CANH、CANL是否接反屏蔽层是否接地24V电源是否正常检查波特率和站地址用万用表量一下驱动器拨码确认和主站配置一致检查终端电阻总线两端是否都有终端电阻检查EDS文件EDS文件是否和驱动器固件版本匹配不匹配会导致从站参数异常检查DRIVE状态有些驱动器上电后CAN功能没有使能需要用面板或软件先开启CANopen通讯功能我碰到过一个典型案例从站配置怎么都建不上最后发现是驱动器的CANopen通讯功能被设置为“禁用”只在本地面板模式下运行。把通讯模式改回CANopen后问题立刻解决。5.2 使能了但电机不转控制字时序和设备状态不对电机不转时第一步看状态字。如果状态字一直停在一个固定值说明控制字没有让状态机走到“运行使能”。排查思路在线监控里看从站的IO映射值确认控制字真的发出去了确认状态机路径是否正确0x06→0x07→0x0F缺一步都不行检查是否处于报警状态如果状态字bit7Warning或对应报警位为1需要先清故障检查是否处于回零模式但从未完成回零有些驱动器在PP模式下必须先回零才能接受位置指令有一次最搞笑的是控制字发得很正常状态字也显示运行使能但电机纹丝不动。查了一下午最后发现驱动器内部回零点没有被搜索过驱动器认为当前位置不可信拒绝接收目标位置。解决办法是先用回零指令让它确认原点。5.3 位置不准或越走越偏电子齿轮比和单位换算问题CANopen步进伺服出现位置偏差通常不是通讯问题而是电子齿轮比设置错误。我在现场遇到过一次走了100mm实际跑了90mm。查下来是电子齿轮比分子分母设反了导致位置单位换算比例不对。还有一次是伺服配置里位置单位是“用户单位”PLC里用了脉冲数两个单位对不上导致发10万的位置实际只走了一点点。排查方法很简单让驱动器走一个已知量比如发10000个单位用卡尺量一下实际行程反推电子齿轮比是否正确。换算公式驱动器收到用户位置单位的个数 × 电子齿轮比 实际脉冲数实际脉冲数 / 细分 电机圈数电机圈数 × 导程 实际行程如果实际行程差一个固定比例那几乎可以肯定电子齿轮比设错了。5.4 CAN通讯偶发中断、报警检查总线负载和屏蔽系统运行一段时间后偶发通讯报警是最难排查的问题。我处理的几个案例第一个是总线分支太长导致信号反射把总线改成菊花链后解决。第二个是屏蔽层没有单端接地导致高频干扰耦合进总线把屏蔽层在电气柜侧单端接地后问题消失。第三个是某台驱动器电源滤波不好开关电源的高频噪声窜到CAN总线上给驱动器单独加了滤波器后恢复稳定。另外如果总线上从站比较多建议在H5U的CANopen配置里把“心跳监控”或“节点保护”打开这样如果有从站掉线PLC能在1秒内捕获并报警方便快速定位。5.5 排查速查表现象可能原因排查顺序扫描不到从站接线错误、波特率不一致、站号冲突、终端电阻缺失1.接线 2.拨码 3.终端电阻 4.EDS使能没反应控制字时序不对、报警未复位、驱动器参数禁止使能1.状态字 2.控制字 3.报警代码电机不转未回零、目标位置为0、模式配置错误1.回零状态 2.目标位置 3.工作模式位置不准电子齿轮比错、细分设置错、机械打滑1.电子齿轮比 2.细分 3.机械结构偶发通讯中断分支过长、屏蔽未接地、电源干扰1.总线拓扑 2.屏蔽接地 3.电源滤波走完报跟随误差加减速太快、力矩不够、机械卡滞1.加减速时间 2.驱动器电流 3.机械检查5.6 我常用的调试小技巧先给一个通用建议分步验证别一上来就指望全系统一次跑通。第一步用AutoShop的在线监控功能直接往从站写SDO确认通讯正常。第二步用SDO写控制字0x06、0x07、0x0F确认状态机能走到使能。第三步用SDO写目标位置确认电机能动作。第四步把SDO操作换成PDO映射确认PDO数据一致。第五步最后才写完整的PLC程序。这样每一层都有验证点出了问题能快速定位在哪一层。还有一个小技巧H5U的IO映射表里把发送PDO和接收PDO的地址提前记到纸上写程序的时候直接按地址索引。有些数据是32位的注意PLC地址是“字”还是“双字”搞错了数据全乱。6. 写在最后的经验这套H5UCANopen控制步进伺服的方案我前后做过三个项目从最初的一脸蒙圈到现在的半个老手最大的体会是CANopen这东西原理不复杂但细节极其磨人。如果你在做的项目对同步性要求不高、点位精度在0.1mm级别CANopen控制步进伺服绝对是成本最优解。但如果你的设备需要多轴精准联动、高速同步插补那还是老老实实上EtherCAT伺服不要用CANopen硬扛。给后来者三个建议。第一把驱动器的EDS文件当成宝贝备份好不同固件版本的EDS不能混用重装软件或者换PLC时找不到EDS文件会非常尴尬。第二回零逻辑一定要放在开机流程的最前面没有完成回零就进行点位运动是各种异常问题的头号来源。我甚至会在H5U程序里加一个“未回零禁止运动”的联锁宁可麻烦一点也不给自己留隐患。第三CANopen通讯一旦不稳定别急着怀疑PLC先用排除法确认物理层是否正常。很多时候问题出在看起来很不起眼的拨码开关、终端电阻和接地线路上。按照上面的步骤做完正常情况从零到电机能转起来半天时间就够了。剩下的时间主要用来调加减速、跑点位精度测试。祝顺利。
返回列表