基于Omron NX与EtherCAT的电池焊接检测机控制系统设计
做电池焊接检测机之前我一直用的是传统中小型PLC加一堆独立模块的方案。直到上一个项目交期被压到极限甲方还提了一堆“要数据追溯”“要快速换型”“要和MES对接”的需求我才认真把Omron NX这套控制器从里到外捋了一遍。做完这个项目之后我的感受是电池焊接检测这种设备主控选对了后面调试能省一半的事。这篇文章就把这套系统的设计思路、EtherCAT远程IO的组网方式、焊接检测的核心逻辑以及“一键换型”这种看着简单、做起来全是坑的功能完整拆开讲一遍。1. 电池焊接检测机到底在测什么为什么非得上一套正经的控制器1.1 焊接检测的工艺痛点电池包的极耳焊接、连接片焊接、汇流排焊接用的基本都是电阻焊或者激光焊。焊接质量直接决定电池的过流能力、内阻和寿命焊不好轻则发热衰减重则直接引发热失控。所以焊接检测机在整个电池产线里不是“可选设备”是“必须设备”。但这里有个让人头疼的问题焊接质量的好坏不是光看外观就能判断的。焊点焊偏了、虚焊了、炸焊了、过焊了每种缺陷的成因不一样对应的检测手段也不一样。一台合格的电池焊接检测机至少要覆盖这几类检测焊点外观检测位置、大小、形状、有无飞溅。拉力/剪切力检测判断焊接强度是否达标这个项目里用的是拉力传感器加位移传感器。动态电阻检测通过焊机输出的电流、电压曲线算出焊接过程中的电阻变化间接判断熔核是否形成。焊后路径检测对于多焊点的电池模组还要按顺序逐个测不能漏点。这些检测项要在一个节拍内全部跑完而且数据要关联到每个电池的序列号上。如果用传统PLC加一堆离散判断硬凑程序会写得非常痛苦而且后期换型、改参数、排查故障都极其费劲。1.2 控制系统要满足的硬指标把需求往下拆这套控制系统至少要满足以下几个硬指标实时性焊接过程本身持续几十到几百毫秒检测动作必须与焊机输出、运动轴动作严格同步允许的偏差通常在几毫秒以内。EtherCAT总线在这个场景下几乎是唯一合适的选择。多轴协调焊机夹紧轴、XY移动平台、检测探头升降轴至少五六个轴要联动。各轴的速度、位置、力矩要在同一时间基准上刷新。数据追溯每个焊点的检测结果都要记录包括但不限于焊机实际电流、电压、压力、位移、判定结果、检测时间。快速换型电池型号越出越多极耳规格、焊接参数、检测阈值都不一样。换型时间如果超过半小时产线就得停摆。1.3 为什么是Omron NX而不是普通PLC这个项目之所以选Omron NX系列核心原因有三点。第一NX控制器内置EtherCAT主站而且是真正意义上的“工业级”实时主站。EtherCAT的分布式时钟同步精度能到亚微秒级别这在焊机与运动轴联动时特别关键。传统PLC如果走脉冲轴加独立IO模块光同步这一关就过不了。第二NX系列在Sysmac Studio里统一编程。逻辑用梯形图和ST混合写运动控制直接用轴配置视觉和IO也挂在同一个软件工程里。这跟以前“PLC一套软件、伺服另一套软件、视觉再一套软件”完全是两个时代的工作方式。我可以在一个工程里同时看到轴状态、IO状态、报警信息和数据缓冲区排故障的效率高很多。第三面向电池行业设备要接MES、要出追溯文件、要支持远程诊断。NX的EtherNet/IP、Socket通信、SQL指令这些功能都比较成熟和上位机对接不费劲。2. 硬件架构设计EtherCAT远程IO的组网与部署思路2.1 主控与总线的整体拓扑这套设备我最后定的架构是Omron NX主控NX1P2或NX102级别按节拍和数据量留了余量做为主站下面挂EtherCAT总线。伺服驱动器、远程IO耦合器、模拟量采集模块全部挂在同一条总线链路上。具体拓扑可以简化成下面这个链路主站NX控制器EtherCAT主站口输出。从站1焊机夹具轴的1S系列伺服驱动器。从站2XY移动平台的两路伺服驱动器。从站3检测升降轴的伺服驱动器。从站4EtherCAT远程IO耦合器安装在焊接工位旁边下面挂数字量输入输出模块、模拟量输入模块。从站5拉力传感器的模拟量采集模块直接挂远程IO站内。为什么用远程IO而不是把IO全部拉回电控柜因为焊接检测机的IO点分布在好几个工位上如果都走硬线光走线就是一大笔成本而且焊接现场的电磁干扰很厉害长距离的直流信号线最容易出问题。EtherCAT光纤或者屏蔽双绞线把数据传回主控抗干扰能力比硬线强得多这也是顺应总线化趋势的做法。2.2 EtherCAT远程IO站的设计细节远程IO站不是随便挂两个模块就完事。这里有几个我实际踩过坑之后总结出来的要点。第一耦合器选型要留意供电和IO模块的混搭。远程IO站里除了数字量输入输出还要放模拟量输入模块。拉力传感器输出的毫伏信号必须走模拟量模块而且要选分辨率足够高的型号。焊接压力信号要分辨到0.1公斤级别12位分辨率是底线16位更稳妥。第二IO点位的分配要留余量。电池焊接检测机看着不大实际IO点数很碎夹具到位、气缸夹紧到位、焊机启动握手、焊枪冷却水流量检测、安全门开关、启动按钮、三色灯、分拣气缸、治具锁紧……数下来轻轻松松上百点。我习惯是每个工位的数字量输入输出按“当前需求30%余量”来规划模块数量。第三EtherCAT的从站顺序要固定。总线扫描是自动的但从站顺序一变节点地址全乱。所以现场接线时要在每个从站上贴好编号并在Sysmac Studio里保存好拓扑配置。维护的时候最忌讳“哪根线松了拔了重插”一插错全链路报错。2.3 伺服轴与IO的实际分配这套检测机里我规划了五个伺服轴加一个变频轴视觉扫码的辅助旋转台频率不高但为了统一也挂EtherCAT轴里了。实际分配大概是这样的轴名称功能驱动器型号系列备注夹紧轴压紧极耳模拟焊接夹具压力1S系列伺服位置模式和拉力检测联动X轴焊点定位移动平台1S系列伺服脉冲/总线混合控制Y轴焊点定位移动平台1S系列伺服和X轴构成平面定位检测升降轴带动拉力传感器升降1S系列伺服低速高扭矩旋转轴辅助视觉扫码、翻转焊件1S系列伺服定位精度一般重在平稳远程IO站下面挂的是阀岛控制气缸、传感器、按钮指示灯、焊机IO握手。这些点在EtherCAT周期里相当于“回声”一样实时刷新我设置的刷新周期是1ms伺服轴和焊机联动的周期是500μs。这个配置实测下来稳定性很够。2.4 供电和接地的实战经验硬件架构里最容易被忽视的是供电。焊接设备有中频逆变焊机启动瞬间电流会拉得很猛如果控制系统和焊机共用一路电源分分钟把NX主控的电源拉出跌落轻则丢数据重则直接复位。我这个项目里给主控、伺服、IO站都配了独立的开关电源焊机电源单独走一路。接地也是分开的控制地、功率地、屏蔽层接地各自独立最后汇到一点接大地。这套做法执行以后EtherCAT通信再没因为焊机启动掉过线。3. 焊接质量检测的核心逻辑从传感器信号到判定结果的完整闭环3.1 检测项如何落地焊接检测不能只靠“看完外观再说”。我把检测逻辑分成三部分焊前检测、焊中监控、焊后检测。焊前检测主要确认工件是否到位、极耳位置是否正常、有无垫片或污物。这些通过远程IO站上的数字量传感器完成比如光电开关、接近开关、限位传感器。焊中监控是核心。我通过焊机给出的实际电流、电压、加压时间的模拟量反馈在PLC里实时计算焊接能量。同时读取压力传感器的值判断加压是否达到工艺设定范围。焊机与PLC之间走的是硬IO握手焊机启动、焊接完成、故障三个信号是硬接线连接的这样即使PLC卡顿也不至于出安全事故。焊后检测在这个项目里主要是拉力检测和焊点位移量检测。检测轴下压接触到焊点后继续微压直到达到设定的位移量这个过程中记录的峰值力就是焊接强度判定依据。3.2 用ST写检测判定的核心逻辑Omron NX支持IEC 61131-3标准ST语言是我最喜欢用的。拉力检测的判定逻辑用ST写出来逻辑很清晰// 焊接完成信号到达后触发拉力检测 IF bWeldFinish AND NOT bPullTestDone THEN // 开始下压动作 bPullStart : TRUE; // 记录当前上位机设定的目标位移 rTargetDisp : rDispSetpoint; // 清零峰值力寄存器 rPeakForce : 0.0; END_IF; // 在检测轴移动过程中持续采样拉力值 IF bPullStart THEN rCurrentForce : UDINT_TO_REAL(wForceADC) * rForceScale; IF rCurrentForce rPeakForce THEN rPeakForce : rCurrentForce; END_IF; // 到达目标位移或接触时间超限则停止 IF DIF( rCurrentPos rTargetDisp ) THEN bPullEnd : TRUE; END_IF; END_IF; // 判定 IF bPullEnd AND NOT bJudgeDone THEN IF rPeakForce rForceLowLim AND rPeakForce rForceHighLim THEN bWeldOK : TRUE; ELSE bWeldOK : FALSE; // 触发NG分拣 bRejectReq : TRUE; END_IF; bJudgeDone : TRUE; END_IF;这里要解释几个关键点。rForceScale是传感器标定系数每个传感器在安装后都要单独标定。我在交付时专门给电气人员留了标定模式用砝码加载生成新的标定系数而不是让他们改ST代码。这样维护人员不用懂程序也能把设备校准好。DIF()是上升沿检测指令防止在目标位移附近反复抖动导致判定误触发。这个细节是很多新手容易忽略的。3.3 与焊机、视觉的联锁时序检测机的核心时序是工件到位 → 扫码枪读取序列号 → 视觉系统识别极耳位置 → X/Y轴移动到目标焊点 → 焊机夹紧并焊接 → 拉力检测轴下压测力 → 判定 → 合格则移出不合格则抛料。这套流程在ST里用状态机实现整个状态机有十多个状态每拍循环都在更新。状态机最怕的是节拍被打乱比如工件歪了、视觉超时。我处理的方法是给每个状态设超时时间视觉超时5秒、焊机等待超时3秒、拉力检测超时2秒。任何一个状态超时就跳到“异常暂停”状态由操作员确认是继续还是复位。这个逻辑我用一张表来说明状态动作超时时间超时后的停机策略等待工件到位光电扫描10秒报警提示扫码确认读取条码5秒提示“扫码失败手动输入”视觉定位计算焊点坐标5秒暂停检查视觉通信移动到焊点轴定位3秒暂停检查轴卡阻焊机焊接焊机启动3秒复位焊机报警拉力检测升降轴下压2秒暂停检查传感器数据上传MES通信5秒重试两次仍失败则存本地缓存3.4 数据追溯的落地方式焊接检测机最怕“焊完了说不清”。我在系统里做了两级数据追溯本地缓存和远程上传。本地缓存PLC用一个数据缓冲区把每件电池的序列号、焊点坐标、焊机参数、拉力峰值、判定结果、操作员工号全部记录在非易失区。即使上位机挂了、网线断了数据也不会丢。上位机恢复连接后自动补传。远程上传通过Socket走TCP协议把数据推给MES报文格式是JSON。这里有个小心得不要把序列号作为唯一索引如果扫码失败、手动输入时输错了数据会写串行。我做法是每条记录生成一个设备内部流水号序列号只作为“关联字段”这样就算序列号录错了也能查出来不至于把记录顶掉。4. “一键换型”不是切配方那么简单它是一套安全机制4.1 换型需求的真实场景电池产线的型号切换有多频繁我这个项目交付后客户说他们的产线一周至少切两次型号有时候一天一换。极耳尺寸、焊点数量、焊点间距、焊接电流、保压时间、拉力标准全部不一样。如果靠人工在触摸屏上一个参数一个参数去改改漏一个就会焊出一批废品。“一键换型”的完整含义应该是按一个按钮把设备从当前的物理工装状态、软件参数状态、检测阈值状态完整切换到另一套“配方”下并且切换完成后还要自我验证确认当前状态和配方预期完全一致。4.2 配方管理在Sysmac Studio里的实现我把配方定义成一种“全局数据结构”涵盖了这几类信息轴参数各轴的出速度、加减速、软限位。焊机参数焊接电流、焊接时间、保压时间、压力设定。检测参数拉力上下限、位移目标值、允许的传感器增益系数。视觉参数模板ID、焊点数量、焊点间距。追溯参数产品型号、物料编码、有效期。在OPC UA和Sysmac Studio的配方功能里每套配方预先编好操作员在触摸屏上只能“选择确认”不能改配方里的数值。因为焊接工艺参数是工艺工程师说了算的操作员如果随时能改就容易改出批量不良。4.3 一键换型的动作顺序实际的一键换型PLC后台要做的事情远比表面看起来多一些。我的实现流程是这样的操作员在触摸屏选择目标型号点“一键换型”。PLC检查当前设备状态是否安全所有轴回到原点、焊机不在焊接中、安全门关闭。执行工装夹具切换提示气缸退回、夹具松开。如果是自动换型的治具直接驱动气缸如果是手动换型触摸屏上跳出“请更换治具”的指示。下载配方参数到轴、焊机、视觉系统。参数校验PLC读取焊机返回的实际参数确认和配方一致视觉系统返回模板加载结果。执行首件检测模式第一个工件只测不打确认所有检测项通过后才让设备进入自动生产模式。第5步是很多人会忽略的。参数下发后不代表设备真正用上了这套参数焊机是不是按命令设置了、视觉是不是加载了对应模板一定要读回确认。我在项目里吃过这个亏燃气焊机那边下发了参数实际焊机没写进去结果连焊了好几个工件才发现全是废品。4.4 换型防错机制换型最大的敌人是“新旧状态串了”。比如上一个型号还有工件没走完操作员就把配方切了设备里残留的旧工件按新检测标准测要么误判NG要么带着旧信息上传MES。我的防错机制有两条第一换型前必须确认设备为空。通过远程IO站上所有工位的光电传感器判断任一工位有工件则禁止换型。第二换型完成后所有缓存数据清零。包括拉力峰值寄存器、视觉检测缓存、焊机能量记录、缓冲区里的追溯数据。这个清零动作必须在参数校验通过后再做顺序不能反。我写这个逻辑时特别加了一个“换型进行中”标志位整个流程期间任何与生产相关的动作都会被锁住。4.5 触摸屏上的交互设计触摸屏上除了“一键换型”按钮我还放了当前配方名称、参数摘要、最近换型记录。操作员不用打开程序看参数直接看摘要就知道当前设备是什么状态。换型记录按时间戳和操作员工号记录这个不是为了变态管理而是万一出了批量问题能回溯知道是谁、在哪个时间点切换了什么。5. 现场调试与量产爬坡阶段踩过的坑5.1 EtherCAT远程IO在焊接设备上的干扰与解决电池焊接设备的现场干扰比普通机床严重得多。中频逆变焊机工作时焊接电流到几千安培哪怕连接螺栓有一点松动都会在瞬间产生强烈的电磁脉冲。EtherCAT是高速总线抗干扰能力虽然比普通串口强但也不能掉以轻心。我在这套设备调试初期遇到过一次诡异的现象焊机一启动远程IO站偶发断链几秒后自动恢复。后来排查下来有两个原因。第一个原因是屏蔽层单端接地没做好。EtherCAT电缆的屏蔽层必须在一端可靠接地而且接地点的电位要和电控柜一致。焊机那侧的地电位波动很大如果屏蔽层两端都接了反而形成地环路干扰。第二个原因是PLC和焊机之间有一条共享的220V电源线。焊机启动瞬间把那条线上的电压拉出了一个尖峰导致耦合器供电不稳。最后我把EtherCAT耦合器的电源改成从独立控制电源取电并加了防反接、滤波电容问题彻底消失。5.2 拉力传感器读数漂移的漫长排查项目量产第一周客户反馈说某个工位的拉力值越测越低从合格变成总是偏小但用手拉工件又觉得焊得挺牢。我一开始怀疑是传感器坏了专门去现场拿着万用表量了一遍静态读数正常。后来发现是机械结构的问题检测轴下压的导向套筒里进了焊渣阻力变大还没压到位就被卡住了。传感器拉力还没到峰值轴就停了。这台检测机每天工作下来都会产生少量焊渣飞溅我后来给导向套筒加了一套不锈钢风琴罩再在程序里加了“位移未达目标即判定设备故障”的保护逻辑不把这种状况当成“焊接不合格”而当成“设备故障停机”。这个区分很重要因为NG是会继续生产的而故障停机需要人来处理避免废品一直往下流。5.3 一键换型后的首件验证不能省一键换型功能做出来后我一度觉得换型只要点一下就行了。结果有一次换型完成后拉力检测阈值没有更新但因为设备空跑测试时读到的拉力值都在标准范围内没有暴露问题。直到上料后连打几个NG才发现视觉模板加载成功但拉力阈值还是旧配方。从那以后我把参数校验逻辑做成双向的PLC下发参数后不仅读回焊机视觉的确认还会把触摸屏上当前生效的拉力上下限和配方文件里的目标值逐位比较不一致就锁定设备。换型后首件检测模式也改成强制性的不跑完首件就不允许进入自动生产。5.4 给做同类设备的朋友几句实在话如果你也要做电池焊接检测机或者类似的焊接类专机有几点我特别想告诉你别省远程IO的钱。焊接设备里把IO拉到现场对调试、排障、抗干扰都有巨大好处。焊机与PLC的硬IO握手不要全部改成网络通信。焊机启动、焊接完成、故障这三个信号走硬接点其他参数走总线安全性更高。检测判定逻辑里一定要有“设备故障”和“产品不良”的区分。两者混在一起良品率报表根本没法看。换型功能一定要有参数读回校验和首件验证两步缺一个都会在量产阶段出漏子。数据缓存要分本地和远端别把MES通信当成稳定的前提条件。最后提一个小建议整套程序里把原料版本号、程序版本号、配方版本号都做成可查询的变量并把它们一起上传MES。这样即使现场出问题也能快速定位到底是哪一代程序算出来的结果比隔空猜“是不是程序有问题”要高效得多。