欧姆龙CJ/CP PLC在锂电池贴胶检测机中的程序设计实战
去年交付了一台全自动CE锂电池贴胶检测机客户指定用欧姆龙CJ/CP系列PLC做主控整机程序全部在CX-Programmer里开发。这里说的CE客户现场就是电芯Cell的意思对应锂电池卷绕后的下一道工序。这台设备的动作链很清晰电芯上料、方向校正、极耳区贴绝缘胶带、压合抚平、视觉检测、绝缘电阻测试最后按结果分选下料。流程听着不复杂但真正动笔写程序时你会发现气缸、伺服、真空、视觉、通信这些元素全部挤在一个节拍里任何一个信号晚到几十毫秒都会造成贴胶偏位或误判。这篇就围绕欧姆龙CJ/CP的程序设计展开从工艺拆解、程序架构到IO规划、贴胶检测的时序实现再到现场调试的典型问题把能直接拿去用的经验写出来。1. 设备工艺与程序需求的整体拆解1.1 这是一台怎样的设备所谓的全自动CE锂电池贴胶检测机常见于软包或方形铝壳电池的中段工序。电芯经过卷绕之后极耳裸露需要贴一层高温绝缘胶带防止后续入壳、组装过程中出现短路。机器一般由上下料机构、定位机构、拉胶带机构、切断机构、贴附压合机构、视觉检测工位和电性能测试工位组成。客户要求的节拍是单电芯4.5秒这意味着贴胶和检测是同时进行的上一个电芯在检测工位拍照时下一个电芯已经在贴胶工位处理。程序必须支持这种并行流水的动作而不是一个工位做完再做一个。从控制角度看这台设备最大的特点是“混合控制”。既有伺服电机负责贴胶头的精确定位也有大量气缸担当搬运、夹紧、压合动作还有真空回路负责吸附电芯。加上视觉控制器和绝缘电阻仪PLC要与多个第三方设备通信。所以程序不能简单写成一条顺序链而是要拆成多个并行任务同时还要保证它们之间的互锁关系。只有把工艺吃透才能写出真正稳定的程序这也是我接手项目后第一周只做一件事的原因蹲在现场看机械装配和调试把每个动作的因果关系记下来。1.2 为什么选欧姆龙CJ/CP而不是其他品牌客户产线现有备件都是欧姆龙维护工程师平时用的就是CX-Programmer所以主控选型几乎没有悬念。CJ2M的CPU处理速度在小型PLC里足够指令丰富而且带内置脉冲输出和高速计数做伺服定位不需要额外加定位模块整机成本能压下来。CP1H则用于客户预算更紧的方案程序语法和CJ系列同源把CJ2M工程用CX-Programmer切换型号后大部分逻辑可以直接复用对项目交付周期很有利。我更看重的是欧姆龙的功能块机制。贴胶动作封装成一个功能块以后内部用参数控制位置、速度、延时换项目时只要改功能块实例的参数主程序几乎不动。这种做法的好处在调试期特别明显现场调机往往是一边调机械一边改程序如果所有逻辑都堆在梯形图里改一个气缸动作就能牵连半个程序风险太大。用功能块隔离以后问题被限制在一个小范围内排查更快也不容易把已经调好的部分改坏。1.3 程序要解决的三个核心问题第一是时序问题。多工位并行必须有一个清晰的步进表每个工位在不同的时间点做不同的事。第二是检测同步问题。视觉拍照要在机构稳定停止之后执行不能抢拍否则图像模糊误判率会非常高。第三是安全防错问题。切刀、伺服、气缸都属于危险元件彼此必须联锁急停之后不能直接继续自动运行否则可能造成人身伤害或设备损坏。这三个问题贯穿整个程序设计。前面的工艺拆解和IO规划都是围绕它们展开的后面调试中遇到的大部分故障也都能追溯到其中一个环节没处理好。程序设计的核心不是指令用得多花哨而是把这三个问题想清楚。2. PLC程序架构与地址规划2.1 程序分层主循环、自动步进、手动维护我写CJ2M程序时通常不把自动、手动、报警全堆在一个梯形图里。主程序只写调用指令按条件调用初始化程序、手动操作程序、自动运行程序、报警处理程序和数据通信程序。这样单个程序段短查故障时能一眼看到当前在哪个工位而不是在几千条指令里找输出点。自动运行程序内部用步进指令控制每一步对应一个状态状态号保存在保持继电器HR区断电后不会丢。每一步开启时先复位本步对应的动作输出再触发下一步需要的动作等动作的到位信号反馈回来才允许切换到下一步。这里有个容易忽略的点初始化程序必须在PLC从编程模式切换到运行模式的第一个扫描周期执行把自动步进状态清零、把输出状态复位否则上电后会直接延续断电前的动作设备很可能窜出去。手动程序必须独立于自动程序。设备调试时很多点动动作要能随时手动执行比如单独测试拉胶带伺服是否走直线单独测试贴附气缸是否到位。如果手动逻辑被自动逻辑卡住现场会非常被动。我通常给每个气缸配一组“手动测试”按钮按钮信号直接在安全条件下驱动输出不经过步进状态。2.2 IO分配与地址规划思路如果IO地址乱后续维护就是灾难。我的习惯是“工位号加功能号”的方式分段规划不同工位用不同的地址区间同类功能尽量保持统一。区域地址规划用途输入CIO0.00~0.15操作面板按钮、模式旋钮、急停、安全门输入CIO1.00~2.15上料、定位、贴胶各工位传感器输入CIO3.00~3.15检测工位信号、视觉通信握手输出CIO10.00~11.15各工位电磁阀、三色灯、蜂鸣器输出CIO12.00~12.05伺服脉冲、方向、使能、切刀控制保持继电器HH0~H19自动步进号、报警锁存、产量数据数据寄存器DD100~D299贴胶位置、节拍时间、检测阈值数据寄存器DD1000~D2000配方参数区、MES报文缓冲区这张表看起来简单但约束力很强。比如上料夹爪气缸我固定用10.00到10.03贴胶压合气缸用10.10到10.13只要是同一类设备程序维护人员就会形成肌肉记忆不用每次翻图纸。扩展机架或远程IO也要提前规划地址区域别到最后加IO时把原有地址全部推翻。2.3 保持区与配方数据管理欧姆龙保持继电器H区专门用于断电保持步进状态、报警信息、已切胶带数量这类数据必须放这里掉电不能丢。数据寄存器D区大部分默认保持适合放配方参数。很多人会忽视一个问题H区里残留的上次运行数据会在上电后继续影响程序所以每个步进程序的初始条件一定要检查H区当前值。配方用HMI批量写入D区来实现。软包电芯、方形铝壳电芯、不同极耳间距对应不同贴胶长度、速度、补偿量配方号放在H区程序启动时根据配方号把D区参数加载到工作区。我习惯把配方分成两组一组是机械示教参数比如贴胶头X轴目标位置一组是工艺参数比如压合时间、视觉判定阈值。机械示教参数只能由维护人员在手动模式修改工艺参数可以开放给产线操作工避免误改。3. 贴胶与检测工序的程序实现3.1 贴胶时序的状态机写法贴胶工位是整个设备的灵魂。我把贴胶过程分成步进状态等待电芯、真空吸附、拉胶带、夹紧、切断、贴附、压合、复位。程序里每一步是一个网络用上一步完成标志触发下一步。状态切换的关键是每个动作必须等到位信号反馈不能只靠时间。比如拉胶带长度到了要等伺服驱动器返回定位完成信号而不是死等定时器切刀切断后要等切刀回归原位贴附气缸才能下去。后台用D区存当前步号HMI上实时显示“正在拉胶带”“正在贴附”“正在压合”等状态。如果设备卡住操作工看一眼状态号就知道卡在哪一步维护人员也能直接定位是哪个传感器没到位或者哪个阀没动作。这个状态机写法大概占整个自动程序的四分之一但换来的可维护性绝对值得。3.2 视觉检测触发的同步逻辑视觉拍照必须在电芯彻底静止后再触发。程序上先用一个输出点给视觉控制器发送触发信号等视觉控制器返回拍照完成和OK/NG结果。视觉处理需要几十到几百毫秒PLC和视觉之间用RS232或Ethernet/IP通信不能只靠一个IO点。CJ2M用内置串口接收字符串程序对ASCII报文解析提取OK或NG字段。比较稳的做法是PLC发送触发后计时等待如果超过500毫秒没有应答报警并暂停避免把上一颗电芯的结果错贴到下一颗。另外在满足节拍的前提下我习惯在拍照指令发出后加30到50毫秒的延时等机构振动衰减、光源稳定后再触发。这个延时看似浪费实际能压掉不少误判尤其在高频拍照时特别明显。3.3 不良品剔除与结果追踪检测结果要跟着电芯走。由于视觉检测工位和下料剔除工位不在同一位置中间隔着一段输送线程序里我使用一个FIFO队列保存每颗电芯的NG标志。电芯每走一个工位位置FIFO移位一次剔除气缸在对应电芯到达时动作。这里有个经典坑如果电芯中途卡滞输送线传感器重复计数FIFO就会错位。解决办法是只在传感器上升沿计数并且用输送电机运行状态做使能输送停了就不计数。NG码要记录下来方便追溯。我在D区里按电芯序号记录失败原因1代表胶带偏移2代表气泡3代表绝缘不良。HMI上可以按批次查询MES接口也会周期读取这些数据。这样做还有一个好处当连续多颗同一NG码程序能自动提示“切刀是否磨损”或“胶带是否需要更换”给操作工一个明确的处理方向。4. 运动控制与模拟量处理4.1 伺服和步进电机的控制程序贴胶头X轴、Y轴伺服以及拉胶带伺服是这台设备里仅有的三个运动轴。CJ2M发脉冲用PLS2指令做定位回原点用ORG指令。伺服电子齿轮比要在驱动器上设好PLC侧只需要按实际运动长度换算成脉冲数。比如导程10毫米编码器分辨率10000走1毫米就是1000脉冲。我把目标位置放在D区程序里用指令把D值传给PLS2加减速时间也做成参数。加减速时间要配合胶带特性速度太快胶带会被拉长甚至切断时变形太慢节拍又跟不上。通常先把加速时间设成100毫秒减速时间120毫秒现场根据贴胶效果微调。伺服运动过程中不要穿插气缸动作否则振动会直接影响定位精度。如果工艺流程允许最好先让伺服走完等待驱动器和机械都稳定后再让贴附气缸动作。4.2 气缸和真空互锁贴胶压合气缸最怕误动作。所有气缸动作都要带联锁条件手动模式下必须没有电芯在位且处于安全状态自动模式下真空检测OK才允许开始贴胶。真空吸附是电芯定位的关键真空检测开关如果检测到泄漏程序应立即停下拉带和贴附动作否则胶带会把电芯带歪甚至扯坏。气动回路里面电磁阀的响应时间、气缸的运动速度都会影响程序判定。气缸伸出到位的磁性开关信号不能只作为显示要真正参与逻辑判定。我见过不少设备气缸实际上没到位但因为程序没检查到位信号后续动作照样执行最后产品报废。这种低级错误在写程序阶段就要堵住。4.3 模拟量滤波与标定绝缘电阻测试仪输出4到20毫安代表测试电压或绝缘阻值。PLC用模拟量模块采集后程序里要先把AD值按线性关系标定成实际工程值。我习惯用欧姆龙的SCL指令完成缩放把0到6000的AD值映射成0到100兆欧再做上下限判定。模拟量采样会混入现场变频器干扰所以程序里做移动平均滤波取最近5次采样的平均值后再判定。这里提醒一句AD模块要设置断线报警。如果电流低于4毫安说明传感器或线缆出了问题程序应该按报警处理而不是当作正常的低阻值。锂电池设备的绝缘测试直接关系安全宁可停机也不能给出错误的合格信号。5. 现场调试中的常见问题与排查技巧5.1 程序下载和在线修改的坑CX-Programmer的在线编辑确实方便但CJ2M在线编辑时如果修改了程序区运行状态会发生变化有些客户不允许在设备运行中动逻辑。我的原则节拍运行中不做在线大修改只改参数真要改逻辑等设备停在安全位置再下载。下载前先做程序备份把当前PLC里的程序和注释同步出来防止现场调乱了之后找不到原始版本。还有一个容易忽略的问题修改保持区地址或IO分配后PLC内部残留的保持值会导致设备动作异常。所以程序初始化的第一个周期必须把自动步进状态清零、把输出状态复位。我吃过这个亏现场改程序后设备一上电贴胶气缸直接伸出幸好当时切刀还没通电否则就是一次设备事故。5.2 贴胶偏位与程序补偿贴胶偏位的原因很杂胶带卷径变化、切刀磨损、伺服累计误差、上一工序极耳位置公差都会造成胶带贴在偏左或偏右的位置。程序里我专门留了一组补偿参数对应X偏移、Y偏移、贴附压力、压合时间。视觉检测结果出来后如果连续3颗都偏向同一个方向程序自动把补偿量加上相当于做了一个简单的闭环纠偏。这个功能很实用但要在HMI上加上下限防止补偿量越调越大直到失控。另外补偿不能只在自动模式生效手动示教模式下应该把补偿量清空不然机械调整和程序补偿混在一起位置计算很容易乱。5.3 通信掉线和视觉误触发串口通信最常见的问题线缆接触不良、接地干扰、报文帧错位。我在通信程序里加了一个心跳定时器PLC每隔200毫秒向视觉控制器发送查询指令连续3次无应答立即产生通信报警并暂停自动运行。屏蔽双绞线单独接地走线远离伺服动力线是解决通信问题的根本手段。视觉误触发多半是IO信号被干扰。PLC输入侧加阻容滤波或者拍照触发输出使用专用输出点比普通DO点更稳。如果视觉结果是“时好时坏”不要急着改程序先用示波器看触发信号的时序再查通信报文。很多时候问题是接线端子松动或者地线环路造成的改程序解决不了。5.4 锂电池设备的断电与急停程序逻辑锂电池设备对安全和断电有特殊要求。急停按下时要立即切断伺服使能、电磁阀动力和输送电机电源PLC本身需要维持扫描来处理状态和报警。急停复位后不允许自动恢复运行必须人工复位并重新开始自动程序。程序里我用一个运行允许保持位只有启动条件全部满足、安全门关闭、急停释放时才置位一旦急停动作这个位马上复位。上电顺序上PLC先上电等待伺服驱动器准备好信号再使能控制电源避免突然得电导致机构窜动。锂电池还有一个特殊点电芯本身带电、怕短路贴胶和测试工位都要做接地和防静电处理。PLC程序里绝缘测试不合格的电芯绝对不能被当成良品流到下道工序这一点要写死在判级逻辑里。6. 写CJ/CP程序时我坚持的几个习惯每个程序段都写版本号和日期修改记录放在D区最后一个DM字现场翻历史方便。报警程序单独做用保持继电器锁存报警状态即使报警条件消失HMI上还能看到是哪一路先触发的。所有伺服定位指令都配超时监视伺服没到位时30毫秒开始提示60毫秒报警停止而不是让设备死等。步进程序的状态号全部从1开始递增0代表空闲这样初始化只需要清零一个区。如果再做一台我可能会把视觉通信改成EtherNet/IP或者SocketService比RS232更稳定传输数据量也更大。PLC本体还是CJ2M但IO连接改为远程IO减少现场布线量。程序层面把贴胶、检测、剔除三个功能块做成标准库机构和参数全部由配方控制以后换一个新电芯型号只改配方和机械手爪不需要改PLC程序。小型设备用CP1H方案时我会复制CJ工程后直接切换设备型号保留大部分功能块欧姆龙这种跨系列复用能力确实能省不少开发时间。