
做锂电设备这几年最绕不开的工艺就是激光焊接。今年接手了一套动力电池模组的焊接线拿到需求清单时看了一遍轴表当场有点头皮发麻——26根伺服轴全部走EtherCAT总线配欧姆龙NJ501运动CPU。项目本身不复杂但这么多轴要在同一套程序里管好、调好、干出稳定的焊缝靠传统的“PLC发脉冲专用控制卡”那套思路基本走不通。这篇文章不打算把完整程序贴出来那也没法贴毕竟每个项目都有自己的工艺细节。我重点想聊的是26轴系统到底该怎么规划拓扑、运动控制逻辑怎么写、EtherCAT怎么调、激光焊接对控制有什么特殊要求以及调试过程中踩过哪些坑。适合正在做新能源锂电设备、或正准备把多轴系统从脉冲方案切换到总线方案的朋友参考。1. 为什么是NJ501加EtherCAT这个方案的选型逻辑1.1 26轴系统用传统脉冲方案会怎样很多人对EtherCAT总线的第一反应是“接线少”这确实是好处但远不是关键好处。拿脉冲方案来说26个伺服轴意味着每个轴至少需要脉冲、方向、使能、报警等几根信号线。一个伺服驱动器脉冲口接PLC高速输出口组态时还得数点数够不够26个轴高速输出口全部算下来一个中型PLC基本不够要加扩展模块加完模块还得考虑输出频率上限、脉冲丢失、线缆干扰。更头疼的是同步精度。激光焊接这个工艺尤其是走连续轨迹时各轴之间的协同性直接决定焊缝质量。脉冲方式下每个轴的脉冲输出是独立定时器生成的轴多了以后定时器抢占、扫描周期波动都会造成轴与轴之间的微小错位。焊缝跑出来粗细不均、拐角处有堆积最后拆下来看就是过焊或虚焊。所以这个项目从方案阶段我就确定必须走总线而且是EtherCAT。1.2 EtherCAT的核心优势分布式时钟与同步机制EtherCAT有一个很关键的特性叫分布式时钟DCDistributed Clock。说白了就是主站发一个同步帧所有从站在同一时刻采集输入、锁存输出。不同伺服驱动器虽然物理上分散在网络各处但在逻辑上它们的控制周期是严格对齐的。这个同步抖动可以做到微秒级甚至亚微秒级。对于26轴的焊接设备这个级别的同步意味着什么意味着你在程序里同时触发10个轴做插补它们在物理世界里的启动时刻几乎完全一致不会因为你扫描周期多跑了几个毫秒就出现一前一后。焊接轨迹是多轴插补时这一点尤其重要。另外EtherCAT的数据帧是边收边转发的“processing on the fly”机制让从站对帧的延迟只有纳秒级。26个伺服再加若干IO模块一个周期跑1毫秒完全没问题实际项目里我用的是1ms主站周期后续如果想提精度改到0.5ms或0.25ms也留有余量。1.3 NJ501作为主站和运动控制核心的定位欧姆龙NJ501是NJ系列里运动控制能力较强的一款Sysmac Studio开发环境支持IEC 61131-3标准的ST、梯形图、FBD这些语言。它内部集成了EtherCAT主站和运动控制引擎PLC程序和运动控制不需要两套软件来回导一个工程搞定。这个选型跟项目整体架构有很大关系。设备里除了26个伺服轴还有几十个气缸、十几个真空传感器、若干模拟量输入激光功率反馈、温度变送器、视觉拍照结果这些逻辑如果放到独立的运动控制卡里做PLC和运动控制卡之间的数据交换就是个大麻烦。NJ501的定位是“逻辑运动”合一的控制器一个CPU包干所有工作省去了中间通信的不确定性。我把几种方案放在一起对比过结论比较直观对比维度传统脉冲方案运动控制卡PLC双系统NJ501EtherCAT26轴接线量数百根双系统间通信复杂一根网线串联所有从站同步精度依赖定时器轴多易漂移主站与控制卡间有延时风险分布式时钟微秒级同步程序框架梯形图为主运动控制弱两套软件、两套程序单软件、单程序故障诊断需要逐点查线跨系统查问题很难EtherCAT从站诊断信息直接读后期维护节点多易松动版本匹配麻烦拓扑清晰替换方便当然NJ501不是唯一选择倍福Twincat或者西门子1500T也都能做类似的事。但项目本身是欧姆龙体系的现有配套而且欧姆龙1S伺服配合NJ使用参数自动配置省了很多手动调参的时间。所以最终定了这套方案。2. 26轴到底是谁功能分组与拓扑规划2.1 轴清单每一根轴都不是白来的很多朋友看到“26轴”就觉得夸张但你把设备拆开看就知道锂电焊接设备里的轴就是这么细碎。我这套设备的轴分配如下轴组轴数量具体用途焊接龙门组5轴X轴、Y1/Y2龙门双驱、Z轴、焊接旋转轴模组输送定位组6轴输送线体2轴、顶升定位2轴、侧向夹紧2轴上料/下料机械手组6轴左右两个三轴机械手分别负责上料和下料视觉检测平台3轴XY平面移动加旋转调整用于焊缝检测定位压装组2轴极柱压装、端板压装伺服力控辅助调整组4轴焊接工装微调、料盒切换、挡停机构等合计正好26轴。从功能上看这26根轴的地位完全不一样。焊接龙门组是设备的核心它的轨迹控制精度直接决定焊接品质所以是“主站轴”。输送定位组、上下料机械手这些虽然也要定位准确但要求没焊接那么变态。辅助调整组就是纯粹的位置控制精度要求一般。这种差异决定了程序里不能一刀切地用一个标准去调所有轴。我规划时的思路是把轴分为三个等级A类焊接轴高同步、高精度、B类定位轴重复精度要求高但无轨迹要求、C类辅助轴逻辑简单、开环定位等级不同伺服增益、速度规划、调试标准都不同。2.2 EtherCAT拓扑设计主干菊花链与分支26个伺服驱动器的网络拓扑需要提前规划好不能随手串联。EtherCAT理论上支持线型、树型、星型多种拓扑NJ501作为主站也支持这些结构。但实际项目中我建议尽量用菊花链线型主干不要搞太多分支。分支越多网络状态越难排查一旦掉站你得挨个找是哪个分支出的问题。我的网络结构大概是这样主站NJ501的EtherCAT口出来第一段网线到焊接工位区龙门X/Y/Z/旋转轴四个伺服用短网线串在一起然后出线到输送定位区输送、顶升、夹紧、压装这些轴串下去再到上下料机械手区两组三轴机械手中的6个伺服串好最后接视觉平台的3个轴和一组远程IO模块作为网络末端。全程没有做星形分支全是链式。这样做的好处是网线走向跟设备走线槽完全一致排查故障时从主站往下逐段测就行。实际工程中每个伺服驱动器旁边我会留一个稍长的网线环方便把驱动器拉出来测试这个细节不值钱但很实用。2.3 从站设备选型与远程IO伺服这块用了欧姆龙1S系列因为NJ501和1S之间通过Sysmac Studio做功能块对接特别方便很多参数自动映射。1S的双轴型还能在一个驱动器里同时带两台电机对空间紧张的电柜帮助很大。我这个项目里部分工位就是这么干的省了一排驱动器。除了伺服EtherCAT网络上还挂了一些远程IO从站和阀岛。气缸的电磁阀、真空传感器、报警灯、按钮信号统统通过EtherCAT从站模块接入。这里有个经验不要图省事把所有IO都挂到网络末端与安全相关的信号急停、门开关、光栅我全部走了硬接线到安全继电器PLC程序里再通过网络读状态做二次确认。网络IO再稳定也不能成为唯一的安全保障。3. 激光焊接工艺对运动控制的核心要求3.1 焊接为什么不是“动一动”那么简单激光焊接在锂电行业的应用场景很多Busbar焊接、顶盖焊接、防爆阀焊接、极耳焊接都有。焊接本身看着也简单——激光出光轴走轨迹就完了。但实际搞工艺的朋友都懂焊接质量的好坏70%在运动控制上。光纤激光器出光后焊接熔池的状态跟焊接速度、激光功率、焦点位置直接相关。速度不稳焊缝宽度就会不均匀轨迹轮廓偏差大焊缝就偏出预定位置出光和运动的时序配合不行起焊点和收焊点就会出现焊穿或虚焊。所以这套系统的核心不是“让轴动起来”而是“让轴在正确的时刻、以正确的速度、走到正确的位置同时激光在正确的时机开和关”。3.2 轨迹规划连续轨迹与拐角处理焊接轨迹通常不是简单的一条直线。比如Busbar焊接往往是一条矩形或异形路径有直线段、有圆弧、有拐角。运动控制里最怕的就是拐角——轴在拐角处需要减速速度如果降得太多相当于局部焊接速度变慢焊得太深或太宽如果减速不够轨迹轮廓超差焊偏。NJ501的运动控制指令里MC_MoveLinear支持直线插补MC_MoveCircular支持圆弧插补。在程序里把整条焊缝拆成若干段路径然后通过连续的插补指令衔接。关键在每段衔接时可以做“拐角过渡”处理允许系统在精度允许范围内提前规划下一条轨迹的速度而不是每条指令都从头加速到尾。同一条焊缝尽量在同一个运动任务里连续执行不要拆到多个任务里否则任务间切换会带来微小的时间间隙。实际调试时我给焊缝的每个拐角设置了不同的过渡速度。比如直线段目标速度120mm/s拐角处允许的轨迹误差0.05mm系统会自动计算一个合理的拐角速度大概是60-70mm/s。这个值不能一刀切拐角大的慢点拐角小的快点要对着CCD拍出来的焊缝一点点调。3.3 激光开光时序位置触发比时间触发靠谱激光开光这个问题新手最容易忽略。很多人写程序时是“轴动起来之后延时几毫秒然后把激光打开”这种做法在简单的点位焊接里可能能用但在连续轨迹焊接里就露馅了。时间触发的本质问题是轴的启动延迟不是常数。伺服使能、摩擦力、负载大小都会影响轴从指令发出到实际运动到位的时间。你固定的延时可能这次刚好下次负载变了就不行。起焊点要么提前出光烧了个大坑要么晚了没焊上。我在这个项目里的方案是用位置触发。Sysmac Studio里运动控制指令本身带有触发输出的功能可以配置当轴的实际位置到达某个设定值时自动置位一个输出信号这个输出直接接到激光器的出光控制端。这样无论轴跑得快还是慢出光时刻始终以轴的位置为基准彻底摆脱了时间延时的不确定性。激光器的功率控制也是一样。通过模拟量输出给定的激光功率不是简单给个固定值而是让功率设定值跟当前焊接速度做联动。速度慢了自动降功率速度快了自动升功率保证单位长度焊缝上的激光能量密度基本恒定。这个逻辑用ST写成一个速度-功率映射函数块是整套程序里对焊接质量贡献最大的模块之一。3.4 龙门双驱同步Y1和Y2的协作焊接龙门里有一对很关键的轴——Y1和Y2它们是典型的龙门双驱结构。两根轴共用一根横梁一左一右如果这两个轴运动不同步横梁就会扭斜焊接轨迹自然就偏了。NJ501做龙门同步的常规做法是设置一个主轴和一个从轴从轴通过跟随指令类似MC_GearIn以1:1的位置比跟随主轴。这样程序里只需要给主轴发运动指令从轴会自动跟随。但这里有两个坑。第一龙门两侧的机械结构如果刚性不一致从轴只按位置跟随会导致两侧受力不均时间长了机械精度下降。所以我在龙门同步里加了扭矩补偿从轴在位置跟随的基础上叠加一个由两侧扭矩差计算的修正量。第二龙门同步必须设置到位偏差监控一旦Y1和Y2的偏差超过0.1mm立即停机报警防止把横梁扭坏。这个监控阈值可以通过Sysmac Studio的轴监视参数设置。4. 程序骨架任务分配、轴管理与工艺模块4.1 Sysmac Studio的任务配置主任务、辅助任务和事件任务NJ501的程序结构核心是“任务”。任务其实就是不同扫描周期的程序执行分支。这个项目的任务分配方式很有代表性如果任务规划乱了26轴的运动控制逻辑会变得一团糟。主任务我设置为1ms周期负责运行所有跟运动控制、激光同步、插补相关的代码。1ms的周期内要完成所有A类轴的位置处理和插补计算这也是EtherCAT的周期设定PLC运动和网络刷新完全同步。辅助任务设置为10ms周期负责HMI通信、配方管理、数据统计、普通数字量逻辑。这些逻辑不需要那么高的实时性放在1ms任务里反而会干扰运动控制——比如在1ms任务里处理一条HMI读写操作可能阻塞几个扫描周期对焊接连续性不利。事件任务则用来处理报警、急停后的恢复流程。事件任务的特点是触发优先级高、执行时间短适合做故障后的快速锁定和伺服禁能。这种任务划分最核心的原则是运动控制相关代码必须独占最高优先级的实时任务其他所有非实时逻辑都往外挪。很多朋友26轴系统跑起来总有莫名其妙的问题先看看是不是任务里混了太多非运动逻辑。4.2 用ST语言写运动控制逻辑从轴使能到插补NJ501的运动控制功能块遵循PLCopen标准MC_Power使能、MC_Home回原点、MC_MoveAbsolute绝对定位、MC_MoveLinear直线插补这些功能块的名字和接口跟其他支持PLCopen的平台基本一致。如果你以前用过倍福或西门子的运动控制库上手几乎零成本。我习惯用ST语言写运动控制模块简洁直观。下面是一段典型的焊接轴直线插补逻辑结构大家可以参考// 开启焊接X轴电源 MC_Power_Inst_X( Enable : bXServoEnable, bRegulatorOn : bXServoEnable, bDriveStart : TRUE, Axis : Axis_X, Status wXPowerStatus, Error bXPowerError, ErrorID wXPowerErrorID ); // 插补指令从当前位置走到目标位置速度为120mm/s IF bStartWeldPath THEN MC_MoveLinear_Inst( Execute : bStartWeldPath, Axis : Axis_X, Destination : rWeldEndX, Velocity : 120.0, Acceleration : 500.0, Deceleration : 500.0, Jerk : 2000.0, BufferMode : eAborting, Done bWeldPathDone, Error bWeldPathError, ErrorID wWeldPathErrorID ); END_IF;需要注意几个细节。第一MC_Power的Enable和bRegulatorOn都要置TRUE才能稳定使能很多初次用NJ的人只置了Enable结果发现轴没有真正进入伺服使能状态。第二BufferMode参数很关键。如果是一段连续轨迹中的多个插补指令前一段还没结束时后一段就Executed这里必须选合适的缓冲模式比如缓冲模式为连续否则轨迹会断开。第三Jerk加加速度对激光焊接影响很大设得太高会有机械振动设得太低焊速提不起来需要反复试。4.3 HMI数据交换与配方管理26轴的设备HMI上要监控的状态数非常多。每个轴的位置、速度、报警、IO状态都要实时显示。NJ501和NB或NS系列HMI之间通过EtherNet/IP标签通信这个很方便——PLC里的全局变量可以直接被HMI引用不需要像传统方案那样在HMI里做变量映射表。但方便归方便也要注意数据规划。我的做法是专门建立一个叫HmiData的全局结构体里面把所有要在HMI上显示和修改的数据集中起来。这样HMI只跟这个结构体交互不会出现程序里零散变量被改乱的情况。配方管理是焊接设备的重要需求。不同规格的电池模组焊接速度、激光功率、焦点位置、压装力度都不一样。我把所有工艺参数按配方编号存储HMI上可以选择当前生产配方。PLC启动时根据配方号加载对应参数运动指令里的速度、位置、加速度全部取自配方变量而不是硬编码在程序里。这样换型时不需要改程序操作工在HMI上输个配方号就完事。4.4 与激光器的握手时序出光不是只管开和关激光器控制不是单纯给个开信号就完了。激光器内部有自检、预燃、出光、关光、故障几个状态PLC和激光器之间要做完整的状态握手。我这套设备的激光器控制逻辑是PLC发出激光器启动命令等待激光器返回“准备好”信号PLC给激光器发送模拟量功率设定值并确认功率反馈值在合理范围内运动轴开始运动当到达起焊触发位置时位置触发模块输出出光信号焊接过程中持续监控激光器“出光中”状态信号和反射光监测信号焊接轨迹走完后位置触发模块撤销出光信号激光器关光PLC收到“关光完成”信号后才允许轴进行下一步动作。这个时序里最容易出问题的就是第5步。如果出光信号撤销得太早焊缝尾部会缺一段太晚薄片材料直接焊穿。配合位置触发模块来做出光时长完全由运动轨迹长度和速度决定跟程序执行耗时无关非常可靠。5. 调试阶段避坑EtherCAT、伺服与工艺的实战问题5.1 EtherCAT网络扫描与从站状态排查接好线之后第一步就是扫描网络。Sysmac Studio里可以直接扫描EtherCAT从站列出所有设备。这里有个新手容易踩的坑扫描结果顺序和物理连接顺序不一定完全一致。EtherCAT从站的地址是主站分配的逻辑地址跟网线顺序无关。所以你看到扫描列表里的从站名称顺序变了不要惊讶按每个从站的站号Node Address去核对物理位置。如果某个从站扫描不到排查顺序是先看该从站之前的网络段是否正常前一个从站的Link/Active指示灯、再看网线是否插紧很多总线断线是接头松了不是网线坏了、然后看终端电阻是否在该从站出口正确设置串行链路中间节点的OUT口要继续连接末端节点必须配备终端电阻。26轴系统里有一种典型的掉站情况某个伺服驱动器的网线接口氧化或虚接设备跑着跑着这个轴突然掉线EtherCAT网络报错。排查这类问题我习惯在程序里做“从站在线监控”周期读取每个从站的AL状态。一旦某个从站离线立刻记录下站号和时间并在HMI上提示操作工检查哪个位置的从站。有了这个监控比靠感觉找故障要快得多。5.2 伺服参数调整26轴同时使能的电流冲击26个伺服同时上电是一大考验。电柜的进线容量、伺服母线的电容充电电流、各路断路器整定值都要考虑。我第一次做类似项目时直接所有轴同时使能结果瞬间电流太大DC24V控制电源电压被拉低PLC通信直接卡死。后来改进为分批使能方案。程序启动时先使能焊接工位核心轴A类轴等母线电压稳定后再依次使能B类定位轴最后使能C类辅助轴。每个批次之间间隔500ms。这个分批逻辑我写成了一个标准功能块在程序启动阶段调用。伺服增益调试也是个体力活。1S伺服配合NJ501有个好处Sysmac Studio里有半自动的伺服调整向导会通过试运行自动算出比较合理的增益值。但它给的只是初值激光焊接对速度稳定性要求高我最终还是在自动计算的基础上手动微调了每根轴的速度环增益和积分时间常数确保焊接过程中速度反馈波动控制在目标范围内。5.3 焊接轨迹的实际问题末端振痕与过烧调试焊接轨迹时最容易看到的问题就是焊缝末端出现振痕或过烧。这通常是因为轴在轨迹末尾急停。速度瞬间降到0但激光功率还没来得及跟随下调末端的激光能量密度突然增大。解决思路有两步。第一步在轨迹末尾增加一段减速距离让速度平滑下降到较低值再执行收光。第二步把速度-功率映射曲线末尾的功率下限调低这样速度降下来后功率也同步降下来末端能量密度就能控制在稳定范围内。另外我强烈建议在程序里给每条焊缝加上“焊接质量自检”逻辑——通过读取激光器反馈功率和实际焊接时间的乘积计算每段焊缝的激光能量总量。如果某段焊缝的能量总量超过设定范围说明工艺参数漂移了程序自动标记该产品为可疑品。这个逻辑看着简单但在产线上能帮你拦住不少批量报废。5.4 程序下载与固件版本的兼容性最后一个坑说大不大但很烦人Sysmac Studio软件版本和NJ501固件版本不匹配时有些运动控制功能块的参数会不同。比如老版本里MC_MoveLinear没有Jerk参数新版本加了你用新版本软件写了程序下载到旧固件的PLC里会直接报错。所以我的习惯是项目开始时先确认PLC固件版本和Sysmac Studio版本记录在项目文档里后续修改程序时尽量用同一版本的软件如果必须升级软件先升级PLC固件并验证所有功能块行为一致后再继续开发。这个习惯帮我避免过很多次“程序昨天还好好的今天突然下不进去”的尴尬。调试阶段还遇到过程序刷写时轴报警的问题——程序下载过程中PLC的运动控制引擎会暂时停止所有轴处于无指令状态此时如果伺服还在使能状态轴会因失去目标位置而报警。现在我的做法是下载程序前先通过HMI或软件把所有轴置于Servo Off状态下载完成后再统一恢复。这个流程看着多了一步但能避免大量重复报警和复位操作。最后再分享一点个人体会整套26轴的激光焊接程序从上位设计方案到调试稳定用了大概两个月的时间。回过头来看最难的不是某个功能块的用法也不是EtherCAT网络的搭建而是如何把设备工艺、机械设计、激光器特性和运动控制四样东西融合在一套程序里。我个人这几年做项目的体会是多轴系统控制尤其是带激光焊接这种高动态工艺的控制程序架构比代码本身更重要。任务怎么分、轴怎么分级、数据怎么规划、故障怎么监控这些框架性问题如果在项目初期没想清楚后面调试时会是无穷无尽的返工。反过来先把架构理清楚哪怕细节代码写得糙一点调试过程反而顺很多。希望这篇分享对正在做锂电焊接设备或者准备上EtherCAT多轴项目的朋友有帮助。如果你也在做类似的东西遇到什么好玩的坑或者好用的方法欢迎一起交流这些经验都是一个个项目磨出来的比教科书上的理论实在得多。