做焊装线的自动化项目,十有八九会碰上“西门子S7-1500配FANUC机器人”这对组合。严格讲型号是S7-1500,但行业里调设备的老师傅都直接喊“1500PLC”。我最近刚完成一个汽车零部件焊装项目:6台FANUC R-30iB Plus机器人、4个气动焊钳和2个伺服焊钳、节拍45秒,整套线用一台S7-1500做主控,机器人和PLC之间全部走PROFINET。这篇文章就把这个项目里涉及到的通信搭建、PNS选序、焊钳时序、安全回路、现场联调踩坑完整拆一遍,给准备做焊装集成或者正在啃这类项目的电气工程师、机器人工程师一个可参考的干活思路。
1. 焊装线为什么绕不开“S7-1500 + FANUC”这个组合
1.1 焊装工艺对控制系统提了三个硬要求
焊装项目表面看是机器人和PLC在配合,实际上整个系统要管三件事:节拍、质量、安全。先说节拍。以我这个项目为例,45秒要完成一个分总成的装夹、定位、机器人搬运、十几处点焊、焊钳修磨、下料,中间任何一次网络抖动、信号丢失或者时序错位,都会直接变成生产节拍的损失。焊装车间的电磁环境又比一般机床单机项目恶劣得多:大功率焊机频繁通断、焊钳电缆大电流、变频器起停,这些全是干扰源。
再说质量。焊点质量不仅靠焊机参数,更靠机器人和PLC之间的动作时序。焊钳有没有夹紧、工件定位是否到位、电极磨损到没到极限,每个环节都要有信号反馈或者数据记录。最后是安全。焊装线里机器人、变位机、输送线挤在一个区域,急停回路、安全门连锁、机器人保护停止、焊机电源切断,这些必须环环相扣,不能只靠PLC里一个普通输出点去处理。
1.2 S7-1500在焊装项目里真正强在哪
S7-1500用在这种项目上,其实不需要非选最顶配的。一般1511-1 PN或者1516-3 PN就够用了,如果整线有安全功能需求,再换成1515F-2 PN或1516F-3 PN这类安全型CPU。关键优势有三个:
第一,PROFINET IRT带等时同步模式,对伺服焊钳、高速输送线、变位机这类需要精确同步的轴控非常友好。第二,PLC内置OPC UA服务器,焊装线通常要对接MES系统,要产量、焊点数、故障记录、节拍数据,S7-1500直接把数据节点开放出去就行,不需要额外加网关。第三,TIA Portal组态第三方PROFINET从站很成熟,FANUC机器人作为IO Device加进项目,导入GSDML文件再配好IP和设备名,剩下的就是填I/O地址。
1.3 FANUC机器人被焊装行业认可,靠的是“点焊包 + PNS标准接口”
FANUC机器人单看运动控制,和其它品牌差距并没有天壤之别,但在焊装领域它有两点是绕不开的:一是点焊功能包,也就是SpotTool/SpotPro,内置焊机控制、修磨计数、电极寿命管理这些专用功能;二是PNS标准接口,全称是Program Number Select,专门用于和PLC做焊装程序选择。
PNS解决的是“一条线有多台机器人、每台机器人有几十个焊接程序,PLC怎么选程序”的问题。PLC只需要把程序号发过去,给一个选通脉冲,机器人内部就会自动切到对应程序,并且反馈一个“已选中”的状态给PLC。这样一来,程序的增删改全归机器人工程师管,PLC工程师不需要去理解每一段TP程序的细节,只管“选谁、什么时候启动、怎么知道干完了”。
2. 先把网络、I/O、安全这层地基打好,再谈功能实现
2.1 一个典型焊装工作站的网络拓扑
在这个项目里,整条线的网络分两层。上层是控制层:S7-1500和触摸屏在同一个PROFINET网络里,同时PLC通过以太网和MES服务器通信。下层是设备层:6台FANUC机器人控制柜、伺服焊钳驱动器、ET200SP远程IO、安全模块,全部作为PROFINET IO设备挂到PLC下面。
机器人在这里是IO Device,不是IO Controller,它只和PLC交换I/O数据,不和MES直接通信。这样做的好处是通信数据量可控,机器人自身的以太网接口还能保留给机器人工程师做备份和调试用。IO刷新周期一般设2到4毫秒,焊装项目的动作响应完全够用,没必要追求更短的周期,周期太短反而会在现场电磁干扰下更容易出通信抖动。
2.2 I/O地址规划:一张总表胜过所有口头交代
焊装线最怕的就是I/O地址混乱。我的习惯是开工前先做一张I/O总表,把所有机器人和外围设备的输入输出偏移固定下来。比如:
| 设备 | 起始输入字节 | 起始输出字节 | 说明 |
|---|---|---|---|
| 机器人1 | IB100 | QB100 | PNS接口 + 状态字 |
| 机器人2 | IB110 | QB110 | PNS接口 + 状态字 |
| 机器人3 | IB120 | QB120 | PNS接口 + 状态字 |
| 机器人4 | IB130 | QB130 | PNS接口 + 状态字 |
| 机器人5 | IB140 | QB140 | PNS接口 + 状态字 |
| 机器人6 | IB150 | QB150 | PNS接口 + 状态字 |
| 夹具/变位机 | IB200... | QB200... | 按功能分区 |
| 安全区域 | IB10... | QB10... | 安全PLC独立分区 |
每台机器人固定分配16字节输入、16字节输出。PNS标准接口占一部分,剩下的留给机器人和PLC之间的自定义握手信号,比如干涉区、夹具到位、焊点计数、修磨请求等。这个表看起来简单,但联调时能省一大半的扯皮时间。地址一旦固化,PLC程序和机器人程序里的符号名都按这张表来命名,后面查问题直接按地址和信号名找,不用靠猜。
2.3 安全回路不是“接线”,是“连锁逻辑”
焊装线的安全回路,有几个点是强制要求:急停双通道、安全门联锁、机器人保护停止、焊机电源切断。机器人侧急停和安全门信号必须双通道进入,急停触发时机器人要进入保护停止状态,同时PLC要切断焊机电源和伺服焊钳的使能。
如果选的是S7-1500F安全型CPU,可以做PROFIsafe远程安全模块,把安全逻辑做到PLC程序里。如果是普通CPU,就用安全继电器硬接线到机器人的急停回路和焊机接触器。我在这个项目里用了安全型CPU + 硬接线混合的方案:急停和安全门走双通道硬接线,确保最坏情况下PLC程序跑飞或CPU死机,安全链路还能直接切断机器人保护停止信号。这里提醒一句:具体安全方案一定根据现场风险评估和验收要求来,不要照搬别人的电路,安全相关参数必须查官方手册确认。
3. S7-1500侧的关键实现:从GSD文件到焊钳时序
3.1 把FANUC机器人作为PROFINET从站加进TIA
步骤很简单,但细节决定成败。
先找到FANUC机器人对应的GSDML文件,这一步容易踩坑。不同机器人软件版本,GSDML版本也不一样,必须和机器人控制柜里实际安装的PROFINET接口版本一致,否则设备组态里会出现黄色感叹号。
然后在TIA Portal里添加设备,选“PROFINET IO”下的FANUC R-30iB系列,设置IP地址和设备名。这里有一个几乎每台机器人都会碰到的问题:TIA里的设备名必须和机器人控制柜里设置的PROFINET站名完全一致,大小写、连字符、甚至末尾的编号都要一字不差。机器人端一般是在控制柜的面板菜单里进入PROFINET配置页,设置IP、子网掩码、站名。两边的设备名对不上,PLC下载组态后就会一直报“设备不可用”。
3.2 通信数据区怎么定义,不要自己发明协议
FANUC机器人作为PROFINET从站,和PLC交换的数据区一般分两个方向。PLC发给机器人的是控制命令,机器人反馈给PLC的是状态和计数。标准的PNS接口里,最核心的几个信号是:
| 方向 | 信号 | 含义 |
|---|---|---|
| PLC → 机器人 | Strobe | 选通脉冲,通知机器人读取程序号 |
| PLC → 机器人 | PNS0 ~ PNS7 | 程序号二进制位,最多256个程序 |
| PLC → 机器人 | Start | 启动当前选中程序 |
| PLC → 机器人 | Hold | 程序暂停(进给保持) |
| PLC → 机器人 | Fault Reset | 故障复位 |
| 机器人 → PLC | Ready | 机器人已准备好(使能正常) |
| 机器人 → PLC | Program Selected | 程序号已被正确读取 |
| 机器人 → PLC | Busy | 程序正在运行 |
| 机器人 → PLC | Done | 程序完成 |
| 机器人 → PLC | Fault | 机器人故障 |
这些信号在FANUC的标准PNS文档里都有明确定义。我建议直接沿用标准,不要自己另外设计一套协议。原因很简单:标准接口在机器人出厂时就已经测试过,后期维护也好查,换人接手的时候不需要重新理解一遍“自定义协议”。
3.3 PNS选序功能块:用SCL写一个FB_RobotSelect
PLC侧我封装了一个功能块,专门处理“给某台机器人发送程序号并启动”的时序。核心逻辑分四步:
- 把要运行的程序号写入PNS区;
- 置Strobe为1,保持一个或者两个扫描周期;
- 等机器人反馈Program Selected,或者超时报警;
- Strobe复位为0,然后置Start启动程序。
这个时序看起来简单,但联调时最容易出问题。我见过不少项目把Strobe当成一个普通输出点,发送完程序号后直接置1又立即置0,结果机器人的程序扫描周期稍微慢一点,Strobe脉冲就消失了,程序号根本读不到。正确做法是PLC必须等机器人把Program Selected反馈回来之后,再去清Strobe。如果3秒内收不到反馈,就置一个通信超时报警。
3.4 焊钳控制的两种方案,取决于焊钳类型
焊钳分为气动焊钳和伺服焊钳,控制逻辑差别很大。
气动焊钳的电磁阀由PLC直接控制:机器人运动到焊点位置后,机器人给PLC发一个“请求加压”的信号,PLC控制电磁阀让焊钳闭合加压,同时等待气缸到位信号,然后给焊机发焊接启动信号。焊接时间到,焊机反馈完成,PLC再撤销加压命令。这里要特别注意预压时间:电极刚接触工件时接触电阻不稳定,马上通焊接电流容易飞溅,一定要给足预压时间,一般要预留30到50个毫秒,具体根据工艺试验定。
伺服焊钳的控制要复杂一些。我在项目里用的是PLC通过PROFINET直接控制伺服驱动器,实现位置闭环和压力闭环。实际焊接时,先让焊钳以较快速度移动到电极与工件表面接近的位置,然后切换为压力模式,根据压力传感器反馈维持目标压力。电极磨损后,要达到同样的压紧力,伺服焊钳的行程位置会变,所以程序里要做磨损补偿。每一轮修模之后,焊钳的零点位置也会变化,同样需要补偿。
3.5 为什么我坚持用FB封装,而不是直接用M点
焊装线的PLC程序如果不用功能块,六个机器人的控制逻辑写出来就是一大坨重复梯形图,看着就头大。我按设备抽象,写了三个基础功能块:FB_RobotSelect负责PNS选序和启动,FB_WeldGunCtrl负责焊钳动作,FB_WeldDataRecord负责焊点计数与修模管理。每个机器人的控制逻辑用多重背景实例化同一套FB,只是传入不同的背景数据块。
这样做的好处非常明显:第一,程序量大幅减少,可读性高;第二,改逻辑只改FB本体,所有机器人同时生效;第三,现场调试某个机器人出问题,直接看到对应的背景DB里的数据就知道当前状态,不用一个个去翻M点。
3.6 焊点记录和修模阈值
焊点计数是焊装线必须做的。我在这条线里,每台机器人完成一个焊接程序,PLC收到Done信号后就在背景数据块里累加焊点数。累计焊点数达到设定阈值,PLC会给机器人发一个“去修模站”的命令,机器人自动跑到修模器把电极头修磨一下,修模完成后把计数清零继续生产。
电极寿命管理也要做,但阈值逻辑不同。修模阈值按焊点数,换帽阈值按累计修模次数或更大的焊点数设置。比如每200点修一次模,修模20次或累计4000点后就要报警通知人工换电极帽。伺服焊钳的磨损补偿要和修模联动:修模后电极行程会恢复正常,补偿值需要重新校准一次,这个动作必须在PLC和机器人程序里都做,否则容易出现“修完模反而压不紧”的情况。
4. FANUC机器人侧:PNS程序选择与点焊质量闭环
4.1 机器人端需要提前配好的三件事
机器人侧如果只靠PLC工程师去调试,很容易卡壳。机器人工程师要先完成三件事:
第一,PROFINET通信配置。在控制柜面板里设置IP地址、子网掩码、网关和站名,确保和PLC组态完全一致。第二,启用PNS功能。FANUC系统里有对应的PNS选择功能设置,需要机器人工程师把程序选择模式切到PNS远程模式,否则PLC发过来的程序号不会被机器人接受。第三,确认机器人本体程序的状态:所有焊装程序要预先做好编号,命名规则清晰,方便PLC按程序号调用。
4.2 PNS背后的握手流程,机械地走这个顺序就对了
PNS的时序全流程是这样的:
- PLC把程序号写到PNS位;
- PLC置Strobe为1;
- 机器人检测到Strobe上升沿后,读取PNS位代表的程序号,在TP程序里切换到对应程序;
- 机器人反馈Program Selected给PLC;
- PLC收到Program Selected后,清Strobe;
- PLC发送Start(或者机器人程序的远程启动条件满足):
- 机器人开始执行焊装程序,Busy置1;
- 程序结束,Busy复位,Done脉冲置位;
- PLC收到Done后累计焊点数,进入下一轮。
焊装项目里,机器人工程师和PLC工程师各管一端,但这个握手流程双方必须都清楚。很多联调问题其实就是双方对握手信号的理解不一致,比如机器人提前把Busy清掉了,PLC还没收到Done;或者PLC一直没回复Program Selected,机器人就停在选序界面干等。
4.3 一个典型的点焊程序怎么写
FANUC的TP程序,点焊动作一般是这样组织的:
1: L P[1] 1000mm/sec FINE ; 2: RO[64:CLOSE] = ON ; 3: WAIT RO[66:CLAMPED] OR RO[21:FAULT] ; 4: WELD[1] ; 5: RO[64:CLOSE] = OFF ; 6: L P[2] 1500mm/sec FINE ;解释一下:机器人先移动到焊接位置P[1],给PLC发“焊钳闭合”请求(RO[64:CLOSE]),PLC控制焊钳加压,等PLC反馈焊钳夹紧(RO[66:CLAMPED])后,执行WELD指令。FANUC的点焊功能包里,WELD指令会向焊机发一个固定的焊接启动序列,焊机根据预先设定好的焊接电流和时间完成放电。焊接结束后,程序关闭焊钳并移动到下一个点。
这里有一个新手容易忽略的点:WELD指令的焊接参数并不是写在TP程序里,而是存在焊机或者SpotTool的数据表里。需要调整焊接电流、焊接时间时,一般直接在焊机面板上改,或者通过焊机通信接口下发,不需要动机器人程序。
4.4 修模完成后,机器人程序一定要有一个“恢复计数”的动作
修模流程中,机器人到达修模站后要执行修模程序,比如电极头磨削、自动清帽。修模完成后,机器人会重新校准焊钳位置,并且把当前累计焊点计数清零。这个清零动作要慎重:如果PLC也在独立计一套数,机器人清零的同时还得给PLC发一个“修模完成”信号,PLC也同步清零,保证两边的计数一致。否则会出现“机器人认为还能焊100点,PLC认为已经超阈值,不再发启动命令”这种闹心的故障。
5. 联调阶段最磨人的四个问题,我把完整排查过程写在这里
5.1 PROFINET通信时断时续,最后查出来是交换机端口问题
这个现象很典型:设备刚上电时通信正常,运行半小时后,TIA Portal在线诊断里偶尔出现“设备不可用”,然后又自己恢复。一开始怀疑是现场电磁干扰,把机器人到PLC的网线换成了带屏蔽的工业网线,但问题依旧。后来又怀疑是IP冲突,全网扫描也没发现问题。
最终定位到是交换机的一个端口协商异常。当时的做法是:把机器人接入的交换机端口从自动协商改成固定100M全双工。焊装现场大电流设备频繁启停时,有些交换机的自动协商机制会抽风,固定速率后通信就稳定了。这个坑在有大功率焊机的场合特别常见,排查顺序建议是:先看线缆和接头,再看IP和设备名,然后看交换机端口,最后才怀疑PLC组态。
5.2 Strobe脉冲太短,导致机器人偶尔选错程序
这个故障发生在第2台机器人上,现象是每生产几十个工件,就会偶然出现一次“这台机器人焊点了别的工位程序”的情况。排查时先怀疑PNS地址对错,后来在PLC程序里跟踪Strobe信号,发现PLC发完程序号后,Strobe只保持了一个扫描周期。而机器人的程序扫描周期比PLC慢,Strobe脉冲在机器人还没来得及读取PNS位时就已经消失了,于是机器人读到了上一次残留的程序号。
修复方案就是把Strobe时序改成“等待确认”:PLC置Strobe后,必须等到机器人反馈Program Selected才清Strobe,同时增加一个3秒超时。改完之后再也没有出现过选序错乱。
5.3 I/O地址错位,PLC发1号程序,机器人跑的却是3号程序
故障现象比较诡异:程序号偶尔差2。全面排查时,打开PLC在线监控,看到QB100发送的是1号程序,再去机器人侧看DI状态,发现机器人的第一个PNS点对应的是输入字节的第9位,而不是第1位。
问题出在两边对I/O偏移的理解不一致。PLC里的QB100,到机器人端映射到哪个输入字节,取决于机器人PROFINET接口配置里设置的“输入输出偏移起始地址”。这个偏移不对齐,PLC认为发的是字节100,机器人实际读的是字节102。处理方式就是做一张IO对照表,PLC工程师和机器人工程师各自对照自己那一侧,把设备诊断里的实际地址梳理一遍,最终确定偏移后达成一致。
5.4 安全回路双通道不同步,复位按钮怎么按都没反应
设备调试时有几次急停测试,按完复位按钮发现整个安全回路无法恢复。打开TIA的诊断缓冲区,看到的是安全模块报“安全输入通道1和通道2信号不一致”。这是典型的安全回路双通道不同步:急停按钮被按下后又松开,但两个通道的触点动作时间有细微差异,安全PLC检测到了一眨眼的差异,就把安全输出断开,并且进入故障状态。
处理方法是先找到安全模块对应的通道,检查两个通道的接线和触点是否都正常,然后再触发一次安全复位序列。有些安全模块必须整条安全链上的所有急停、门锁都处在闭合状态,才能接受复位信号,所以排查时要从最末端的安全输入逐个确认。有人一看复位没反应就怀疑安全模块坏了,其实大概率是某个门锁没关好,或者某个急停按钮没完全弹出。
5.5 伺服焊钳压力报警,不是因为设备坏,而是电极磨损到临界
伺服焊钳项目里,压力报警一度被当成机械故障处理,但机械检查没有任何问题。后来发现是电极磨损之后,焊钳驱动机构已经接近行程极限,在压力闭环模式下驱动器为了追目标压力,持续输出更大扭矩,触发了伺服驱动器的扭矩报警。
这类问题需要在PLC里做两件事:一是设置电极磨损上限阈值,当焊钳行程超过一定数值就报警,提示修模或换帽;二是修模后的零点校准要联动更新位置基准。焊装项目里伺服焊钳的报警十有七八不是突然发生,而是磨损累积到极限后的必然结果,关键是监控曲线而不是只看单个报警点。
5.6 现场联调最重要的四个字:看信号,别猜
联调阶段最忌讳“差不多”。机器人说“我这个点焊完了”,PLC说“我没收到Done”,如果两边都凭感觉去猜,一定是查了半天找不到问题。正确做法是同时打开PLC在线监控和机器人I/O界面,一边单步动作,一边看每一个关键信号是不是按I/O表定义的地址到达。
焊装项目联调期间,对讲机里听到最多的一句话就是“你那个信号到底在哪”。提前做好I/O表和信号时序表,联调时人手一份,能让调试时间缩短三分之一。这不是夸张,是实打实的经验。
6. 项目收尾之后,我才彻底想明白的几件事
6.1 I/O表和时序表是比PLC程序更值钱的交付物
刚做焊装项目时,我也觉得程序写完、跑起来就算完事。现在复盘才发现,真正值钱的交付物是I/O总表、信号时序表、网络配置记录。这套东西可以直接复用到下一个焊装项目,而且新人接手排查问题时,给一张完整准确的I/O表比给一份几百行程序有用得多。
6.2 标准化模板让第二个项目快了很多
第一个焊装项目从设计到量产用了将近三个月,第二个类似项目只用了一个半月。差距不在机器人编程,也不在PLC基础逻辑,而在标准化。FB封装、程序号分配规则、I/O地址规则、通信握手时序,这些都是可以沉淀成模板的。再做焊装项目时,把模板底层的硬件型号、程序号、节拍参数替换掉,剩下的工作量主要是联调和现场调试。
6.3 给准备入行焊装的人一句话
想进入这一行,建议先找机会完整跟一个焊装项目,从PLC程序、机器人程序、现场调试到陪产。焊装线本质上是“工艺、机械、电气、机器人、质量”共同协作的系统工程,单纯会PLC或单纯会机器人,都只能看到一部分。真正把项目做顺的人,往往是能站在I/O表和时序表之间,把两边串起来的人。