
干工控这些年脉冲加伺服的老方案我闭着眼都能接但这两年新项目一提就是“总线伺服、带HMI、以后还要上视觉”方案选型直接绕不开汇川H5U加EtherCat这套组合。H5U这个中型PLC最大的吸引点就是本体自带EtherCat主站不用另插运动控制卡配合汇川SV660N系列伺服一根网线把动力线之外的所有通信全搞定。这篇文章就把我实际调设备时积累的轴控制功能块和气缸功能块的封装思路、硬件组态细节、HMI联动写法以及踩过的坑一次讲清楚。适合谁看刚接触总线伺服、过去一直用脉冲方案想切换过来或者手头正好有H5U项目要写的工程师。我会按组态、轴FB、气缸FB、HMI、调试排查的顺序走尽量把每一步为什么这么做也讲明白。读完你至少能照着这个框架搭出一套能跑、好改、可复用的设备程序骨架。1. 整套方案的架构与设计思路1.1 为什么是H5U加EtherCat总线方案到底赢在哪以前用三菱Q系列PLC配QD77MS2定位模块控制MR-J4伺服那是典型的模块化脉冲/ SSCNET方案功能很稳但硬件成本高线多调试时每个轴要查脉冲线、方向线、编码器反馈线。换成汇川H5U加EtherCat之后一条标准网线就从主站串到从站伺服的位置反馈、报警代码、电流、速度全部走总线回传不需要额外接编码器线。现场接线量肉眼可见地减少而且总线诊断信息直接能读出来排查问题不用拿万用表对着端子一个一个量。从控制逻辑的角度看总线方案的本质并没有变还是“给轴一个目标位置、轴走完、回一个到位信号”那一套只是通信介质从脉冲变成了以太网报文。所以老工程师转过来不会有认知障碍反而会爽在以下几点上参数一致性伺服参数、电机铭牌、编码器分辨率可以通过总线直接读回PLC换驱动不會担心参数没备份。同步性能EtherCat的DC分布式时钟能做到微秒级同步双轴龙门、电子齿轮这类需求不再是难题。排查效率伺服报警码直接映射成PLC内的统一报警HMI上直接看中文描述不用跑现场看七段数码管。1.2 功能块化的核心价值把设备逻辑变成积木很多新手写H5U程序最容易犯的毛病就是把轴控制代码和气缸逻辑全堆在主程序里一个项目下来几千行梯形图改一个动作要翻半天。我封装功能块的习惯是凡是重复出现三次以上的逻辑一律抽成FB。轴控制FB负责一个轴从使能、回零到定位的全生命周期气缸FB负责单只气缸的伸出、缩回、到位检测、超时报警。这样设备程序就变成了搭积木主状态机只负责“下一步该让哪个轴动、哪个气缸伸”具体怎么动、怎么保护FB内部自己去管。这套设计里轴FB和气缸FB其实是两类完全不同的节奏。轴FB运行在较快的运动任务周期里内部要调用PLCopen标准的MC_Power、MC_MoveAbsolute这类功能块气缸FB跑在10毫秒或者50毫秒的逻辑任务里就行它本质是状态机加延时器。把两类FB分开后续扩展非常舒服——比如这个工位原本是单轴加四个气缸下个项目变成双轴加六个气缸程序框架一个字都不用改只是多实例化几个FB而已。1.3 程序模块划分从HMI到伺服的层次关系我在InoProShop里建程序时会把工程分成几层。最上层是HMI交互层主要是一堆全局变量比如轴的使能命令、目标位置、速度倍率、当前坐标、气缸指令和状态HMI直接绑定这些符号变量。中间是工艺逻辑层也就是主状态机按工序步骤去调用各个功能块的接口。最底层是设备控制层就是那些封装好的轴FB和气缸FB的实例。运动任务和逻辑任务分开配置保证轴控制的实时性和逻辑层扫描周期互不拖累。分层的好处是调试时可以用不同视角看同一台设备操作员在HMI只看得到状态和按钮工艺工程师改主状态机不管底层FB怎么实现设备工程师单独验证某个轴和气缸时不需要跑整条流程。后续加视觉定位也只是在工艺逻辑层加一个“等待视觉坐标”的步骤然后把坐标塞给轴FB的绝对定位接口而已。2. 硬件组态与EtherCat通信配置2.1 组态步骤接线、扫描、站号、PDO映射先讲硬性步骤顺序不对后面全是坑。首先伺服驱动器供电和电机动力线、编码器线要按手册接好然后把EtherCat网线顺着主站往从站串联。H5U的EtherCat口是RJ45标准口注意网线插到标着EtherCat的口上别和普通以太网调试口搞混很多新手第一次没扫到从站就是插错口了。打开InoProShop后新建工程选择H5U的CPU型号在左侧项目树里找到EtherCat配置。第一步点扫描让主站去发现总线上挂了几台从站。扫描之前所有伺服必须先上电站号不能冲突如果驱动器是出厂默认一般也能扫到但站号可能都是0必须手动给每台伺服分配唯一站号。我习惯按物理顺序从1开始编号并且把编号写到图纸上这样现场换驱动器后能快速核对。站点建立后要做PDO映射也就是约定“主站和从站之间每周期交换哪些数据”。对伺服轴来说基本都会用到这些对象控制字6040、状态字6041、目标位置607A、实际位置6064、目标速度60FF、实际速度606C还有跟随误差6085和回零相关对象。在组态界面里把需要的对象勾选映射到RxPDO和TxPDO里映射错了轴根本动不了或者位置反馈全是0。做完映射要下装一次配置让从站把新的PDO映射表固化下来。2.2 DC时钟同步让所有轴听见同一声“起跑”EtherCat最常见的两个字母缩写就是DC和CSPCSP是循环同步位置控制模式轴在位置环上跑DC则是这套控制能不能同步的底子。我用一个生活化的比喻解释DC时钟同步的过程一群人要同时起跳如果每个人都低头看自己的手表表与表之间总有零点几秒的误差动作就不齐现在有个裁判拿着秒表倒数所有人听同一声口令再跳动作就整齐了。EtherCat的DC就是这个“裁判”它让主站和所有从站共享同一个系统时间并周期性地通过SYNC0、SYNC1中断事件对齐各站的采样时刻误差被压到微秒级。为什么必须强调DC最直观的例子是双伺服龙门。两个轴分别驱动横梁两侧如果两侧伺服各自按自己的时间基准去执行位置指令哪怕差几百微秒高速运行时长边和短边就会互相“较劲”设备表现为抖动、异响、或者横梁歪斜。开启DC同步之后两个轴的采样和执行时刻对齐运动指令同时生效横梁才能走直线。H5U的EtherCat配置界面里默认会启用DC我一般不去动它但会去检查从站的DC状态寄存器是否显示“同步完成”没同步完成的标志通常是红色的。2.3 伺服驱动器参数设置以SV660N为例以汇川SV660N为例每台从站驱动器在首次接入总线时都要确认几组参数。02组参数是EtherCat通信相关比如从站站号、报文模式选择、掉电后运行方式等我基本保持默认只改站号。真正最常调的是回零方式和回零速度这一块有些工程师喜欢在PLC侧用MC_Home配置有些习惯在驱动器面板上设。实测下来我更推荐把回零方式和速度统一放在PLC侧的轴FB里管理因为HMI参数页可以直接改这些值不至于每台驱动器都要爬到柜子前面按面板。伺服侧还要注意开启绝对值编码器功能如果电机带多圈绝对值编码器否则断电后重新上电PLC读到的位置是上一次保存的位置但驱动器内部可能认为当前位置是0导致回零逻辑错乱。开启绝对值模式后要把“上电读取实际位置”这个动作做进轴FB的初始化流程里每次复位后轴FB第一件事就是读6064实际位置把它作为当前坐标基准。没有绝对值编码器的老普通增量式方案就只能靠回零来建立坐标了。2.4 总线周期与任务分配影响设备“手感”的关键总线周期设多少合适取决于轴数和设备精度。单轴定位加几个气缸的小设备我一般设2毫秒双轴联动的设备设1毫秒轴再多或者有视觉配合的场合保持在1毫秒甚至要优化PDO映射来节省带宽。千万别图省事把总线周期放到4毫秒以上伺服位置环的刷新率降下来之后设备运行的声音会发闷定位停止时还会多晃两下很容易被验收方挑毛病。周期性任务也要跟着分好。运动任务默认周期要和总线周期匹配逻辑任务我习惯开10毫秒或20毫秒气缸FB和主状态机放逻辑任务里跑轴FB的使能、定位触发等接口也尽量在逻辑层调用但轴FB内部真正干活的PLCopen标准功能块是挂在运动任务里的。这样配置的体会是气缸和状态机再多也不会拖累轴控制轴在高速运动中即使有外部干扰运动任务也能独立维持稳定的执行周期。3. 轴控制功能块封装一台可复用的轴3.1 接口设计一个轴FB让HMI和逻辑层都用得顺手轴功能块我命名为FB_Axis_Control内部实例化一个PLCopen的轴句柄。输入参数主要分两类一类是来自HMI和逻辑层的命令比如使能、回零请求、绝对定位请求、目标位置、运行速度、加减速时间、停止命令另一类是配置参数比如正负软限位、跟随误差报警阈值、回零速度和方式。输出参数则包括轴的当前状态枚举、当前位置、当前速度、报警代码、回零完成标志和运动中标志。接口设计有个原则功能块外部不直接操作轴句柄所有动作都通过接口变量触发。这样HMI上哪怕误操作连续点了好几次“启动”FB内部也能通过边沿检测只执行一次外部逻辑层更不会因为直接调用MC_MoveAbsolute导致多轴同时抢占运动资源。我在实际项目里吃过这个亏早期没封装时两个气缸互锁逻辑不小心同时触发了同一个轴的两次定位程序直接报“轴忙”现在把轴FB封装好层层命令都走队列再也没出现这种乌龙。3.2 内部状态机从使能到定位的完整流转轴FB内部一定要有一个状态机否则逻辑会乱。我常用的状态序列是IDLE空闲→ POWERING上电使能→ HOMING回零中→ READY已就绪→ MOVING运动中→ ERROR故障。每拍扫描先处理故障逻辑再处理命令逻辑最后更新输出状态。硬件使能通过MC_Power的bEnable管脚控制bEnable接了急停链和伺服报警复位信号没有使能成功之前后面的定位命令一律拒绝执行。进入READY状态后外部可以发绝对定位或相对定位命令。这个时候轴FB内部调用MC_MoveAbsolute把目标位置、速度、加减速参数填进去并用MC_ReadActualPosition持续刷新当前位置输出。运动过程中出现跟随误差超限、硬限位触发、驱动器报警状态机立刻跳ERROR同时将对应的报警代码放到输出变量上。这里有个细节H5U的PLCopen库在轴报错后必须先MC_Reset清错误再重新MC_Power不然轴会一直卡在错误状态里。所以轴FB里报警复位命令要和回零命令做顺序联动复位成功后自动进入回零阶段而不是让操作员在HMI上点了复位还要再点一次回零。3.3 回零、报警复位与安全互锁回零是整个设备自动运行的前提。H5U的MC_Home支持多种方式我现场最常用的是“当前位置设为原点”和“限位开关回零”两种。设备结构简单、原点位置允许每次手动对出来的用当前位置回零最省事把工件推到基准面后按一下HMI的回零按钮该位置就成了零点。需要全自动重复定位的设备一般选带原点开关和减速开关的回零方式设置好快速接近速度和爬行速度让轴先快跑压到减速开关再慢速找原点。回零完成后FB输出一个HomeDone信号自动运行条件里必须检查所有轴的这个信号。安全互锁也在这个FB里做。正负软限位是必须项超过立即停止我一般把软限位做成HMI可修改的参数方便现场根据模具尺寸调整。急停信号则通过硬件回路直接切断伺服使能回路同时PLC程序里也会把MC_Power的bEnable拉低双保险。伺服报警复位要格外小心如果驱动器的根本故障还在比如过载未消除复位按钮怎么点都没用HMI上得同时显示“复位失败——检查驱动器报警代码”否则操作员会一直点按钮以为设备坏了。这一点配合SV660N的面板报警码看排查效率非常高。3.4 手轮跟随与电子齿轮Easy521同思路的扩展玩法有项目需要用手轮手动控制伺服轴跟随运动其实就是电子齿轮的用法和汇川Easy521以及所有Codesys内核PLC思路一致。做法是把手轮编码器信号接进PLC的高速计数通道每个扫描周期把手轮累积脉冲数映射到一个虚拟主轴的位置上然后伺服轴通过MC_GearIn作为从轴以可调的电子齿轮比跟随这个虚拟主轴运动。手轮正转轴正走手轮反转轴反走倍率改成10比1、100比1都行。这种实现比单纯的点动按钮手感好很多因为它是真正的位置跟随不是启停式点动。调试要点是虚拟主轴的位置在程序里要自己累加并做限幅防止手轮一直转导致内部鼓包位置溢出齿轮啮合前必须先确保伺服轴已回零并处于使能状态从轴上还要保留急停和限位优先级电子齿轮关系不能让轴撞到硬限位。掌握了这个玩法后续做视觉伺服引导也只是把“虚拟主轴位置”换成“视觉反馈位置”而已底层的轴跟随框架不用推倒重来。4. 气缸功能块把散落的继电器逻辑收进标准件4.1 FB_Cylinder接口与内部实现气缸功能块的封装目标只有一个让调用者不用关心传感器怎么接、延时怎么算、报警怎么出。我给这只FB取名FB_Cylinder输入有伸出命令Extend、缩回命令Retract、手动模式标志、超时时间输出有伸出到位OutPos、缩回到位RetPos、运动中IsMoving、报警代码ErrorCode。两个到位信号一般来自气缸上的磁性开关也有的用接近开关或气缸自带的传感器。内部实现核心是一个单稳态结构检测到当前要求的伸出指令后FB置位内部的控制输出同时启动一个TON延时器延时长度就是超时时间。如果伸出过程中磁性开关迟迟没亮或者一直在闪内部状态机就判定“伸出超时”把报警代码置出来并把控制输出清掉。这样气缸卡住、缺气、磁性开关坏掉这类问题都能在几十毫秒内被捕捉到不会让设备傻等。4.2 双电控阀的互锁与超时诊断气缸控制里最容易被忽视的是双电控电磁阀的互锁。双电控阀两个线圈同时得电轻则阀芯卡滞重则烧线圈气缸动作也会变得没法预测。所以FB内部强制做了逻辑互锁Extend有效时Retract输出必然为0Retract有效时Extend输出必然为0。如果外部逻辑误操作让两个指令同时为真FB不会盲目执行而是直接把两个控制输出都清掉并输出一个“气缸指令冲突”的报警。超时诊断不能只看伸出方向缩回方向同样要设。很多时候气缸伸出正常缩回时因为气路节流阀调得太紧或者弹簧复位机构卡住磁性开关迟迟不亮这时候如果没有缩回超时报警主状态机就会一直等设备就像“死机”一样。我给这只FB的退出策略是超时后自动断开输出并报警具体是继续下一步还是停机交给上一层的工艺状态机去判断。这样FB保持通用不同设备对异常的处理策略不同也不会被一只气缸的逻辑拖死。4.3 轴与气缸的时序协调顺序控制才是设备灵魂有了轴FB和气缸FB接下来最难的是时序协调。我的做法是上一层再写一个设备主状态机比如“等待上料→夹紧气缸伸出→轴A快进→轴A工进→检测→轴A退回→夹紧气缸缩回→下料”。主状态机每个步骤之间都要加过渡条件轴到位、气缸到位、延时完成都是条件。这里有个实战经验气缸FB的到位信号必须取“从非到位到到位的上升沿后的稳定状态”不能直接拿到位信号当条件不然气缸刚碰到的瞬间信号抖动会导致主状态机误判设备走位会时好时坏。另一个经验是把“所有轴回零完成”“所有气缸缩回到位”作为自动启动的前置条件写进主状态机里。很多设备撞模、撞机事故就发生在人工调整后没做复位气缸还伸着、轴还在半路操作员直接按了启动。前置条件检查能挡住一大批低级事故。如果设备有安全门、光栅、双手启动按钮这些信号也要串在这个前置条件里。5. HMI程序与画面设计5.1 页面布局手动、自动、参数、报警四件套HMI画面我习惯按四页来排手动页面、自动运行页面、参数设置页面、报警记录页面。手动页面是调试和单步操作用的把每个轴的“点动加、点动减、回零、使能、当前位置显示”排成一行一行的卡片下面再排每个气缸的“伸出、缩回、到位状态指示灯”。自动运行页面则克制很多只放启动、暂停、复位、急停以及当前工步文本、各轴位置、气缸状态、产量和节拍时间。参数页面放软限位、速度、加减速、气缸超时时间、电子齿轮比这些并设置操作员和管理员两级权限。报警页面就是一张实时和历史报警表格显示时间和报警文本。这样划分的核心逻辑是手动页面给调试人员用信息要全自动页面给操作员用信息要精参数页面权限分明避免操作员误改速度导致撞机。我在早期项目里把HMI所有按钮全堆在一屏里结果现场操作工误触过手动按钮设备在自动运行中突然被切到手动作从那以后手动和自动页面严格分开而且只在停机状态下允许模式切换。5.2 变量绑定与权限控制HMI绑变量时我坚持绑PLC里的全局符号变量不直接绑轴FB内部的局部变量也不去碰EtherCat从站的对象字典。先把轴FB的输出状态映射到全局变量比如GVL_Axis[1].ActualPos、GVL_Axis[1].AlarmCodeHMI再去绑定这些全局变量。这样轴FB内部怎么重构都不影响HMI换台设备也只需要调整全局变量映射。权限控制这块操作员登录默认只能启动、暂停、复位管理员权限才能进参数页改数据。HMI的参数修改要做两步确认输入新值→弹出确认框显示“新目标速度3000确认修改”→确认后写PLC。很多误操作其实都发生在直接改数值没确认就下发加了确认框之后基本杜绝大多数现场误改。参数值写到PLC后PLC侧还要做上下限检查比如速度不能超过轴FB内部设定的最大速度软限位不能越过机械硬限位两层保护更稳。5.3 HMI上的状态显示与操作保护状态显示不只是“数字和文本”还要配合指示灯颜色和按钮禁用逻辑。比如伺服未回零时自动启动按钮在HMI上就置灰操作员即便点击也没反应轴正在运动时“点动”按钮禁用避免轴在运动中突然收到新的点动命令。气缸的到位状态用绿色表示到位、灰色表示未到位、红色表示超时报警报警时旁边直接显示报警文本不用操作员去翻PLC程序查报警代码。HMI上还应该显示轴FB状态机的枚举文本比如“空闲/使能中/回零中/就绪/运行中/故障”写一个文本映射数组就可以。配合当前位置实时显示调试时站在触摸屏前面就能看出整个设备状态卡在哪个环节不用插电脑看InoProShop。我做手轮跟随功能时还在HMI上加了一个“当前电子齿轮比”显示和“手轮使能”状态操作工调机时反馈非常好因为能直观看到自己是处于“10比1慢速对刀”还是“1比1快速移动”模式。6. 常见问题与调试心得6.1 总线扫描不到从站 / 通信频繁掉线总线扫不到从站百分之八十是站号冲突或接线问题。先看伺服面板有没有显示EtherCat状态SV660N面板上通常会有一个RUN/ERR指示灯RUN常亮说明从站状态正常。然后检查网线头做工工业现场振动大劣质压线头经常会偶发性断线。最好用带屏蔽层的工业网线屏蔽层单端接地。还有一点容易被忽略从站的24V电源GND必须和主站侧可靠共地如果伺服和PLC分别取电两地之间电位差大了通信就会间歇性抽风。频繁掉线且报警是“同步丢失”的话先把总线周期调大一个档试试看看是不是拓扑链路太长导致报文超时再把不用的从站从组态里临时去掉缩小链路范围。实测下来很多“掉线”其实是被现场变频器和大功率伺服动力线干扰的动力线和总线必须分层走线槽间隔至少20厘米别图省事捆成一束。6.2 伺服报警复位不成功 / 定位偏差与跟随误差伺服报警复位不成功先别急着点复位按钮去伺服驱动器面板上看当前报警代码。常见的有过流、过压、过载、编码器异常、跟随误差超限。前三个属于硬故障电机烧了或者机械卡死复位多少次都没用必须先把机械和电气根因处理掉。跟随误差超限则多半是速度环增益太低、加减速太快或者机械负载太重导致实际位置追不上目标位置。定位偏差的排查思路是先从单轴低速验证一遍排除机械间隙后再看总线同步。H5U里可以读伺服的实际位置6064把它和指令目标位置比对偏差如果总是在同一点出现优先怀疑丝杠背隙或联轴器松动如果偏差是无规律的再查DC同步和干扰。我处理过一台设备定位总差0.1毫米排查到最后是丝杠端部的锁紧螺母松了换伺服、改参数全都没用这类经验教训是位置问题先从机械查起不要一上来就怀疑程序。6.3 掉电丢位置与回零异常设备关机再开机轴位置对不上这是绝对值编码器没有正确配置或者没有开启“绝对位置功能”的典型表现。开启后还需要在PLC侧配置每次上电读取绝对位置H5U的轴配置界面里有对应选项勾上后上电轴FB会自动把当前位置读进坐标系里不需要重新回零。如果设备用的还是增量式伺服或者带电池掉电保持但电池没电了那断电时间长了位置就是会丢这种场合程序里必须强制回零谁也没办法绕过。回零异常要重点检查回零方向和限位开关的触发顺序。方向反了回零时直接往硬限位方向冲过去轻则报警重则撞机。第一次调试回零我建议把速度设成很慢的值比如爬行速度设为10毫米每秒这样就算方向错了也能及时拍急停。回零方式里如果有减速开关要确认PLC组态里选择的减速信号逻辑和实际接的是常开还是常闭NPN和PNP接法反了也会导致回零逻辑反向。6.4 推荐的调试顺序最后整理一套我每次验收设备都用的调试顺序照着走能少踩很多坑。第一步通电后先面板点动每台伺服确认电机转向和编码器方向一致。第二步在PLC里建好组态和PDO用H5U自带的简单使能功能验证总线通信正常。第三步轴FB先不接自动流程只用手动页面点动验证方向和速度单位把“用户单位”确认清楚——我的原则是HMI上全部显示毫米PLC内部统一换算成脉冲或者用户单位这样调机时大脑不用来回切换。第四步做慢速回零回零完成后再走几次绝对定位确认坐标系和软限位正确。第五步单独测气缸FB特别是超时报警和互锁逻辑。第六步进入主状态机空跑联调先把轴速度降到百分之二十气缸手动预摆到一个安全位然后走完整套工序。第七步全速跑加断电重启测试确认绝对值位置和报警恢复逻辑都正常。整套流程走完设备基本可以放心交付了。我自己的习惯是每台设备都留一个“调试模式”的全局开关打开后主状态机不动作只有手动页面和FB的单独测试接口生效关闭后进入自动流程。这个开关救了我很多次现场临时改工艺的情况希望你也尽快养出这个习惯。