做电池焊接检测机之前,我一直用的是传统中小型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系列伺服驱动器。
- 从站2:XY移动平台的两路伺服驱动器。
- 从站3:检测升降轴的伺服驱动器。
- 从站4:EtherCAT远程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。这样即使现场出问题,也能快速定位到底是哪一代程序算出来的结果,比隔空猜“是不是程序有问题”要高效得多。