1. 项目缘起与整体方案设计
1.1 为什么选H5U加EtherCAT这套组合
汇川H5U这台PLC在小型自动化设备里出镜率很高,本体自带EtherCAT主站口,不用额外插模块就能挂总线伺服,这一点对成本敏感的产线改造项目来说非常关键。我最早接触H5U是在一条包装线上,原来用的是脉冲控制,四轴联动的时候接线一大堆,调试时稍微有点干扰就丢脉冲,后来换成EtherCAT总线方案,一根网线串起四台伺服,接线量直接砍掉大半,定位精度也稳了。
EtherCAT本身是实时工业以太网协议,采用主从架构,主站发送数据帧经过每个从站时,从站芯片在数据帧“路过”的瞬间就把自己的数据读写完成,不需要整帧接收再处理,所以循环周期可以做到很短。H5U作为主站,典型循环周期能跑到1ms甚至更低,对于大多数点位控制和速度控制场景完全够用。AutoShop是汇川自家的编程软件,把EtherCAT组态、轴配置、功能块调用都集成在一个界面里,不用在多个工具之间来回切换,这是它比一些通用方案省心的地方。
这套方案适合谁?如果你手上有H5U,要控制汇川SV660系列或者其他支持EtherCAT的伺服,做位置控制或者速度控制,那这篇内容基本可以照着走。就算你用的是别的品牌伺服,只要支持标准EtherCAT协议,组态思路也是一样的,区别主要在PDO映射和对象字典的细节上。
1.2 整体控制架构拆解
整个系统的数据流是这样的:AutoShop里配置好EtherCAT网络,扫描到从站伺服,然后建立轴对象,轴对象通过PDO(过程数据对象)和伺服驱动器交换数据。主站每个循环周期发一次过程数据,里面包含控制字、目标位置、目标速度这些,从站返回状态字、实际位置、实际速度这些。程序里调用运动控制功能块,功能块把指令翻译成PDO数据,主站硬件负责发出去。
位置控制和速度控制的区别在于工作模式。位置模式走的是CSP(循环同步位置)或者PP(轮廓位置)模式,速度模式走的是CSV(循环同步速度)或者PV(轮廓速度)模式。H5U的轴配置里可以直接选模式,选完之后PDO映射会自动调整,不需要手动去改对象字典,这是AutoShop比较人性化的一点。
提示:EtherCAT组态之前,先把伺服的站号设好。汇川伺服默认站号是1,如果挂多台,每台都要改,站号不能重复。站号一般在伺服面板里改,改完断电重启才生效。
2. 硬件接线与软件环境准备
2.1 硬件清单与接线要点
先列一下需要的东西。PLC用H5U任意型号,只要带EtherCAT口就行,一般本体上标着“EtherCAT”的那个网口就是。伺服方面,汇川SV660N或者SV670N都支持EtherCAT,选型的时候注意看型号里有没有“N”后缀,有N的才是总线型。电机按实际负载选,选型手册里根据扭矩和转速查就行,这里不展开。
接线就简单了:H5U的EtherCAT口接到第一台伺服的IN口,第一台伺服的OUT口接到第二台伺服的IN口,依次串下去。最后一台的OUT口空着或者接终端电阻。网线用标准超五类屏蔽网线,长度别超过100米,实际项目里一般几米到十几米,完全没问题。
注意:EtherCAT网线一定要用屏蔽线,屏蔽层要可靠接地。我遇到过因为网线没屏蔽导致通讯偶发丢帧的情况,换了屏蔽线立马就好了。另外伺服的动力线和编码器线尽量远离通讯线,走线槽里分开走,减少干扰。
电源方面,H5U用24V直流供电,伺服主回路根据电机功率接三相或单相交流,控制回路也是24V。上电顺序建议先给伺服控制电,再给PLC电,最后给伺服主电,这样避免上电瞬间通讯异常。
2.2 AutoShop软件安装与工程创建
AutoShop在汇川官网可以下载,安装过程没什么坑,一路下一步就行。装完之后打开,新建工程,选择对应的PLC型号,H5U系列选“H5U”就行。工程建好之后,左边项目树里能看到“EtherCAT配置”这一项,双击进去就是总线组态界面。
软件版本建议用比较新的,老版本可能不支持某些伺服型号的XML文件。汇川伺服的EtherCAT XML文件(ESI文件)在官网下载或者随伺服附带的光盘里都有,AutoShop组态的时候需要加载这个文件才能识别到伺服。如果扫描不到从站,八成是ESI文件没装或者版本不对。
2.3 EtherCAT从站扫描与组态
在EtherCAT配置界面里,点“扫描”按钮,软件会自动扫描总线上挂的从站。扫描之前确保PLC和伺服都上电,网线接好。扫描到之后,从站会出现在列表里,显示站号、名称、版本这些信息。
扫描到从站之后,需要把从站添加到组态里。选中从站,点“添加”,然后配置PDO映射。AutoShop一般会自动加载默认的PDO映射,对于位置和速度控制,默认映射通常就够用了。如果不够用,可以手动添加对象,比如要读伺服的实际扭矩,就得把扭矩对象加到输入PDO里。
| 配置项 | 位置模式 | 速度模式 |
|---|---|---|
| 工作模式 | CSP或PP | CSV或PV |
| 控制字 | 0x6040 | 0x6040 |
| 状态字 | 0x6041 | 0x6041 |
| 目标位置 | 0x607A | 不适用 |
| 目标速度 | 0x60FF | 0x60FF |
| 实际位置 | 0x6064 | 0x6064 |
| 实际速度 | 0x606C | 0x606C |
这张表是核心,PDO映射就是围绕这些对象来的。位置模式下重点看0x607A和0x6064,速度模式下重点看0x60FF和0x606C。控制字和状态字两种模式都要用,控制字用来使能、启动、停止,状态字用来读伺服当前状态。
3. 轴配置与功能块编程实操
3.1 建立轴对象与参数设置
组态完从站之后,下一步是建立轴对象。在项目树里找到“运动控制”或者“轴配置”,新建一个轴,绑定到刚才组态的EtherCAT从站。一个从站对应一个轴,几台伺服就建几个轴。
轴参数里几个关键项要设对。一个是“轴类型”,选“总线轴”或者“EtherCAT轴”,不同版本叫法可能不一样。另一个是“单位换算”,这个很重要,要把脉冲数换算成毫米或者度。比如伺服编码器是23位,一圈是8388608个脉冲,丝杠导程是10mm,那一个脉冲对应的距离就是10除以8388608,约等于0.00000119mm。在软件里填好“每转脉冲数”和“每转距离”,软件会自动算。
提示:单位换算设错了,位置就会差一个比例系数。调试的时候先用手动模式走一段固定距离,量一下实际走了多少,反推一下比例对不对。这个步骤别省,省了后面程序里怎么调都调不准。
速度参数方面,要设最大速度、加减速时间这些。最大速度根据电机额定转速和机械结构算,加减速时间根据负载惯量来,一般先设个保守值,调试的时候再优化。
3.2 位置控制功能块的使用
AutoShop里位置控制常用的功能块有MC_Power、MC_MoveAbsolute、MC_MoveRelative、MC_MoveVelocity、MC_Stop这些,跟PLCopen标准运动控制功能块是一致的。用起来跟西门子、三菱的类似,学过其他品牌的话上手很快。
MC_Power是使能功能块,Enable引脚给TRUE,轴就使能了。使能之后Status引脚变TRUE,Busy变FALSE,表示轴准备好了。如果使能不了,看Error引脚和ErrorID,常见原因是伺服没上电、通讯没建立、或者伺服有报警没复位。
MC_MoveAbsolute是绝对定位,给定目标位置、速度、加减速,功能块执行完Done引脚变TRUE。Execute引脚用上升沿触发,触发一次走一次。目标位置是绝对坐标,相对于原点。原点怎么定?可以用回零功能块MC_Home,也可以用伺服自己的原点开关。回零方式在轴参数里选,有找Z相信号、找原点开关加Z相、直接设当前位置为零点等几种。
MC_MoveRelative是相对定位,走的是相对于当前位置的距离。Execute上升沿触发,走完Done变TRUE。相对定位适合那种不需要知道绝对位置、只走固定距离的场景,比如送料、推料。
MC_MoveVelocity是速度控制功能块,给定速度值,轴就按这个速度一直转,直到收到停止指令或者触发其他条件。Direction引脚控制方向,0是正转,1是反转。这个功能块在速度模式下用,位置模式下也能用,但底层实现不一样。
3.3 速度控制功能块的使用
速度控制比位置控制简单一些,核心就是MC_MoveVelocity。使能轴之后,调用MC_MoveVelocity,给个速度值,轴就转起来了。速度值单位是用户单位每秒,比如mm/s或者度/s,取决于轴参数里的单位换算。
速度模式下如果要读实际速度,用MC_ReadActualVelocity功能块,输出就是当前速度。要读实际位置,用MC_ReadActualPosition,速度模式下位置也会变,只是不控制位置而已。
速度控制的一个典型应用是收放卷。收卷轴用速度模式,根据卷径变化调整速度,保持线速度恒定。这时候需要实时读卷径,算目标速度,然后写给MC_MoveVelocity。卷径怎么算?可以用超声波测距,也可以用编码器算,看具体机械结构。
注意:速度模式下切换方向的时候,最好先减速到零再反向,直接反向对机械冲击很大。我见过直接反向把联轴器拧断的案例,减速时间设长一点,让电机有个缓冲。
3.4 功能块调用顺序与状态机设计
功能块不能乱调,要有顺序。典型的状态机是这样的:先MC_Power使能,等Status为TRUE;然后判断是位置模式还是速度模式,位置模式调MC_MoveAbsolute或MC_MoveRelative,速度模式调MC_MoveVelocity;运行过程中监控Error和Status;要停的时候调MC_Stop或者把速度给零。
每个功能块的Execute引脚都要用上升沿触发,不能一直给TRUE,否则功能块会反复执行。用PLC的上升沿指令,比如上升沿触点,或者功能块自带的Execute上升沿检测。AutoShop里功能块的Execute引脚本身就是上升沿有效的,给一个扫描周期的脉冲就行。
状态机用梯形图或者ST语言写都行。梯形图直观,适合逻辑简单的场景;ST语言适合复杂逻辑,写起来紧凑。我一般用ST写状态机,用CASE语句分状态,每个状态里调对应的功能块,清晰好维护。
4. 调试过程与常见问题排查
4.1 通讯建立与轴使能调试
第一次调试,先别急着写程序,先把通讯和使能调通。上电之后,在AutoShop的EtherCAT配置界面看从站状态,正常应该是“OP”状态,如果是“INIT”或者“PREOP”,说明通讯没建立。检查网线、站号、ESI文件,这三个是最常见的原因。
通讯正常之后,在轴配置界面点“使能”按钮,看伺服能不能使能。使能成功的话,伺服面板上会显示“run”或者类似的指示。如果使能失败,看错误码,汇川伺服的错误码手册里有,常见的有编码器故障、过载、欠压这些。
使能之后,用手动模式点动一下,看电机转不转,方向对不对,速度对不对。手动模式在轴配置界面里有,给个速度值,点正转反转,电机应该按预期转动。如果方向反了,改轴参数里的方向取反,或者改伺服参数里的方向。
4.2 位置控制精度问题排查
位置控制最常见的问题是定位不准。原因可能有几个:一是单位换算错了,这个前面说过,用手动模式验证;二是机械间隙,丝杠或者齿轮有间隙,反向的时候会有偏差,这个靠程序补偿或者机械调整;三是伺服增益没调好,定位的时候有超调或者振荡,用AutoShop的伺服调试工具调增益。
还有一个容易被忽略的是原点偏移。回零之后,原点位置和机械零点可能差一点,可以在轴参数里设原点偏移量,补偿这个差值。偏移量怎么定?回零之后手动走到机械零点,读当前位置,把这个值填到偏移量里。
提示:调试位置精度的时候,用千分表或者激光测距仪量实际位置,别靠眼睛看。眼睛看误差至少0.5mm,千分表能到0.01mm,差别很大。
4.3 速度控制稳定性问题排查
速度控制常见的问题是速度波动。原因可能是负载变化、增益不够、或者速度指令本身在变。如果是负载变化导致的,调大速度环增益,或者加前馈补偿。如果是速度指令在变,检查程序里速度值的来源,是不是有干扰或者计算错误。
速度模式下还有一个问题是低速爬行。电机在很低的速度下转不平稳,一顿一顿的。这是伺服低速特性决定的,可以调小速度环积分时间,或者用位置模式代替速度模式,位置模式低速性能通常更好。
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 通讯不上 | 网线、站号、ESI | 检查接线和站号 | 换屏蔽网线,改站号,重装ESI |
| 轴使能失败 | 伺服报警、通讯未建立 | 看伺服面板和错误码 | 复位报警,检查通讯状态 |
| 定位不准 | 单位换算、机械间隙 | 手动模式验证 | 改换算参数,机械调整 |
| 速度波动 | 增益、负载变化 | 监控速度曲线 | 调增益,加前馈 |
| 低速爬行 | 伺服低速特性 | 低速测试 | 调积分时间,改位置模式 |
这张表是我调试时总结的,基本上覆盖了八成以上的问题。遇到问题先查表,查不到再深入分析。
4.4 实操心得与避坑经验
说几个我踩过的坑。第一个是ESI文件版本,汇川伺服不同批次的ESI文件可能不一样,用错了版本组态会报错。解决办法是每次都用随伺服附带的ESI文件,别图省事用旧的。
第二个是PDO映射,默认映射有时候不够用,比如要读扭矩,默认映射里没有。这时候要手动加,加完之后要重新下载组态,不然不生效。加PDO的时候注意输入输出别搞反了,输入是从站到主站,输出是主站到从站。
第三个是循环周期,H5U的EtherCAT循环周期设太小了CPU负载高,设太大了响应慢。一般1ms到4ms之间,根据轴数和程序复杂度调。轴多、程序复杂就设大一点,轴少、要求高就设小一点。
第四个是接地,EtherCAT通讯对干扰敏感,接地不好容易丢帧。PLC和伺服的PE端子都要可靠接地,接地电阻小于4欧姆。网线屏蔽层两端都要接地,别只接一端。
5. 程序优化与扩展应用
5.1 程序结构优化建议
程序写大了之后,要分模块。我一般把轴控制封装成功能块,每个轴一个功能块实例,输入输出用结构体,这样主程序里看起来很清爽。功能块内部处理使能、定位、速度、停止这些逻辑,外部只需要给指令和读状态。
状态机用ST写,每个轴一个CASE语句,状态包括Idle、PowerOn、Homing、Moving、Stopping、Error。状态之间用条件跳转,比如PowerOn状态等Status为TRUE就跳到Idle,Idle状态收到定位指令就跳到Moving,Moving状态等Done为TRUE就跳回Idle。Error状态处理错误,错误清除后跳回Idle。
提示:功能块实例要放在静态变量区,别放在临时变量区,否则每个扫描周期都重新初始化,状态保持不住。这个坑我踩过,调了半天才发现是变量类型的问题。
5.2 多轴同步与插补应用
H5U支持多轴同步,可以做简单的插补。比如XY平台走直线,两个轴同时动,保持速度比例。用MC_MoveLinearAbsolute功能块,给定终点坐标和速度,两个轴会自动协调。插补精度取决于循环周期和伺服响应,周期越小精度越高。
多轴同步的难点是轴之间的耦合。比如一个轴是主轴,另一个是从轴,从轴位置跟随主轴。这种用电子齿轮或者电子凸轮功能,H5U支持这些。电子齿轮就是从轴速度等于主轴速度乘以一个比例,比例可以实时改。电子凸轮是从轴位置是主轴位置的函数,函数关系用凸轮表定义。
5.3 与上位机通讯和数据采集
H5U本身支持Modbus TCP和EtherNet/IP,可以和上位机通讯。上位机读PLC的数据,包括轴状态、实际位置、实际速度、报警信息这些。写数据可以改速度、改目标位置、启动停止。
数据采集用PLC的变量记录功能,或者上位机轮询。轮询周期别太快,100ms到500ms就行,太快了PLC通讯负载高。要高速采集的话,用PLC内部的高速记录功能,先存到PLC内存,再批量传给上位机。
5.4 后续扩展方向
这套方案后续可以扩展的地方不少。比如加视觉,视觉定位之后把坐标给PLC,PLC控制轴走到位置。或者加力控,读伺服扭矩,做力位混合控制。再或者加安全功能,接安全PLC或者安全继电器,做安全停止。
EtherCAT本身也支持更多从站类型,除了伺服,还可以挂IO模块、编码器模块、阀岛这些。H5U的EtherCAT主站能力有限,挂太多从站循环周期会变长,一般挂十几二十个从站没问题,再多就要考虑换更高级的PLC了。
我个人在实际操作中的体会是,这套方案最大的优势是省心。接线省心,组态省心,编程也省心。AutoShop把很多底层细节封装好了,不用去啃EtherCAT协议栈,也不用去记对象字典,选好模式调好参数就能跑。当然省心的代价是灵活性差一点,有些特殊需求可能实现不了,但对于大多数常规应用来说,完全够用了。