干焊装线电气调试的人,应该都体会过这种场景:一条线上几十台机器人,夹具、输送、焊机、涂胶、视觉挤在一起,你手里的PLC不但要控制逻辑,还得跟机器人握手、跟触摸屏报故障、跟安全回路联动。设备品牌还不统一,有的给你Profinet,有的给你硬线IO,现场一边试生产一边改程序,所有压力全堆在控制柜里那一台主机上。今天这篇就聊聊我用西门子S7-1500做一条大型汽车焊装生产线主控的完整过程,覆盖选型理由、Profinet网络规划、FANUC机器人交互、HMI报警设计,以及调试现场最让人头大的几个坑。适合正在做汽车焊装项目、或者准备用S7-1500集成多品牌设备的电气工程师看,至少能帮你少走两圈弯路。
1. 选型复盘:一条焊装线的IO点、节拍和通讯压力,是怎么逼我选了S7-1500
1.1 焊装线的控制需求规模从哪算起
很多人选PLC喜欢凭经验,觉得"以前用300能干,现在还用300",但在大型焊装线上这么干很容易翻车。我们当时那条线,白车身主线加门盖分拼,加起来差不多二十个工位,机器人总共快三十台,每台机器人至少十来个信号要跟PLC交换:预约、到位、夹紧允许、焊接完成、故障复位、运行中、急停反馈等等,再加上夹具气缸的磁性开关、焊枪伺服、输送滑台、升降机、涂胶机和几套视觉系统,你先把IO清单拉一遍再说话。
我当时做了个粗略估算:仅数字量输入输出点,光主线就超过一千二百点,分拼线再加六百点,加上安全输入输出、机器人和焊机的总线通讯,控制规模放到一台主CPU里,普通S7-1200的程序存储器和通讯带宽根本扛不住。S7-300虽然IO可以扩,但Profinet设备数量一多,PN口带宽就成了瓶颈,尤其机器人每100ms刷新一次报文、还得跟触摸屏实时刷报警,CPU通讯负载一下就上去了。
1.2 CPU选型的三道硬指标:内存、通讯口、运行速度
S7-1500家族里我最后选的是CPU 1515-2 PN。有人会问为什么不上1516或1517,原因很简单:1515-2 PN的内存和通讯足够,价格也合适,而且对这个项目规模来说,CPU的循环周期能稳定控制在10ms以内就够了。整个项目跑了半年,实际扫描周期稳定在7-9ms,节拍完全没问题。
选型时要盯三个硬指标。第一是工作存储器,焊装线程序不仅有主逻辑,还有机器人握手、报警管理、配方和诊断程序,SCL写的块一多,300那种几十KB的内存马上捉襟见肘;1515-2 PN有1MB程序存储和4MB数据存储,我全部程序编译下来占用不到40%,余量很大。第二是通讯口数量和质量,1515本体带两个Profinet口,其中一个可以组环网,如果以后要接第三方的EtherNet/IP设备,加个CP卡就行,不会像300那样动不动要加一个独立CPU模块来做协议转换。第三是速度,位运算指令都是纳秒级,比较、传送指令带优化访问功能,代码执行效率比老平台高一大截。
选型的时候还要考虑项目是不是要求安全等级。焊装线大量使用安全PLC做急停和安全门监控,S7-1500的安全型号F-CPU可以在同一个背板上集成标准程序和F程序,配合PROFIsafe通讯,能把安全IO和标准IO混在一个网络中跑。这次项目安全回路用的是带F的1515F-2 PN,标准逻辑和F逻辑在同一个项目里,比用两个独立PLC做安全回路的方案省了不少柜内空间和接线量。
1.3 为什么不折腾冗余方案
焊装线不像化工或电力,停机虽然影响产量,但几分钟内恢复可接受,所以整套系统没有上硬冗余。S7-1500R/H冗余方案成本高,而且需要R系统专用的CPU和同步光纤,对大部分汽车焊装项目来说性价比偏低。我更愿意把工夫花在单机可靠性上:柜内配UPS给PLC和触摸屏供电,程序卡和存储卡做镜像备份,MCB分路保护全部按回路走,现场断电后再上电,程序和数据能自动恢复,这样即便缺相了也就是重启一下的事。实践经验是,焊装线的停机损失大多来自外部设备而非CPU本身,与其花大钱做冗余,不如把网络诊断和快速恢复做扎实。
2. 网络与分布式IO:Profinet环网、ET200MP和智能模块的分配思路
2.1 三层网络结构,别把所有设备塞进一个网段
一条大型焊装线的网络不是把所有设备都往一台交换机上怼那么简单。我的规划思路分三层:底层是设备层,包括变频器、伺服、IO从站、RFID读头、IO-Link主站、机器人;中间是控制层,主要是PLC与HMI、编程器之间的通讯;上层是管理层,通过车间以太网往MES或者数据采集系统丢数据。
设备层用的是Profinet IRT,保证实时性。机器人、伺服焊钳这些对同步要求高的设备走IRT通道,普通IO和智能模块走RT通道,两层混在一个物理网络上没问题,但要保证所有设备的时间同步。车间车间级交换机采用SCALANCE X系列,做环网冗余配置,万一哪一段网线被叉车压断了,网络自己在200ms内恢复,CPU和机器人不会因为通讯超时直接停机。
地址规划是所有人容易忽略的环节。控制层固定一个网段,比如192.168.0.0/24;设备层按工位分子网,比如192.168.10.0/24给主线1到10工位,192.168.20.0/24给11到20工位。每台机器人、每个ET200MP从站、每台变频器都必须有唯一的设备名称和IP,设备名称的作用甚至比IP还重要。Profinet设备识别靠的是设备名称,IP地址只是属性之一。调试的时候经常碰到这种情况:IP配了,但设备名没写,或者设备名拼错一个字母,PLC那边一直显示设备不可用,查半天发现是名字不匹配。
2.2 ET200MP、ET200SP和智能模块怎么分活
分布式IO我采用ET200MP加ET200SP混搭。靠近PLC柜内的大功率输出、继电器、安全模块用ET200MP,因为它的背板电流大,模块类型也多;分布在工位附近、IO点数比较密但是空间有限的场合用ET200SP,它的窄体模块能装进更紧凑的接线盒。两个从站接入同一个Profinet网络,设备名称和IP分开规划,互相不干扰。
智能模块在这个项目里主要体现在三个方面:IO-Link主站模块接气缸阀岛和传感器,通过IO-Link能直接读设备状态和参数,省去大量点对点模拟量接线的麻烦;RFID模块用在白车身分拼线的车型识别工位,每台车身带一个数据载体,写到存储区里记录车型、配置信息和装配结果;还有称重模块和高速计数器模块用在涂胶机胶量检测和大滑台定位上。智能模块的接入不只是省几个IO点,更重要的是诊断能力:以前某个气缸磁性开关坏了,可能要到HMI报警翻半天;现在IO-Link父站直接报通道诊断,传感器短路、断线、设备参数异常全都有具体报文,维修工看一眼就知道是哪个传感器出了问题。
IO规划时我给每个从站分配了固定的模块插槽,并做了一个Excel表,把所有IO地址对应到设备名称、机架号、槽位号、中文注释。这个表看起来繁琐,但到了现场联调时就是救命文档。比如某个夹具夹紧到位信号不来了,PLC报警显示IO地址I 12.3,你查表就能定位到哪个机架的哪个槽位哪一通道,不用拿着图纸翻半天。后期如果机器人或夹具厂家改信号,我也是先改表再改组态,保证图纸、程序、现场三点一致。
3. FANUC机器人挂进Profinet:握手信号、安全链和一致性读写的配合
3.1 机器人需要跟PLC交换哪些信号
FANUC机器人在这条线上一共三十来台,每个工位的任务不一样,有搬运的、有点焊的、有涂胶的,但无论干什么,它们跟PLC之间的握手逻辑几乎是一样的。我习惯把这些信号分成三类:状态信号、命令信号和联锁信号。
状态信号包括机器人自动模式、运行中、暂停、报警、急停反馈、程序运行到第几步。命令信号包括启动、停止、复位、选择自动程序号、允许运行。联锁信号才是最容易出问题的:比如机器人要焊接之前,必须确认夹具已经夹紧到位、焊钳到位、前一工位允许放行;机器人发出"请求进车"信号后,PLC要确认输送线没有占用,才给"进车允许";焊接完成后机器人给"焊接完成"信号,PLC才控制滑台放行。
这些信号如果用硬线一个一个接,每台机器人都要拉十几根电缆,柜内端子排密密麻麻,调试时查线能查到崩溃。所以我全部走Profinet总线通讯,只在每台机器人旁边保留一对急停硬线串联到安全回路,保证即使总线断了安全功能还能用。这个设计是行业里比较常见的做法:安全靠硬线,逻辑靠总线。
3.2 把FANUC机器人配置成Profinet IO Device
FANUC机器人本身可以作为Profinet IO Device挂在S7-1500下面。在机器人控制柜里需要安装相应的Profinet接口板,然后在FANUC的示教器设定界面里分配设备的IP和名称。注意一点,FANUC作为IO Device时,PLC侧要组态它的GSD文件,设备名必须和实际设置完全一致,IP地址要在同一网段,组态完成后PLC会自动从设备读取IO数据块。
报文格式方面,我按每台机器人规划了64字节输入、64字节输出。输入区保存机器人的状态,输出区保存PLC发出的命令。这里有个容易踩的坑:FANUC的Profinet报文数据默认是按字对齐的,位信号只占一个bit,但为了方便排查,我故意把所有的握手信号按字节分配,比如字节0专门放状态位,字节1专门放命令位,字节2到5留作机器人程序号、节拍计数等数值。这样在线监控的时候,看十六进制数据就知道整机的交互状态正常不正常,不用一个一个bit去换算。
程序里我写了一个公共函数块,专门处理机器人的握手逻辑。SCL代码的大致思路是:条件满足时置位允许运行位,机器人收到后进入自动循环,完成后回馈完成位;PLC检测到完成位后复位允许运行位,一个节拍结束。实际生产中还加了超时判断,机器人从允许运行到反馈完成如果超过设定时间,比如点焊工位120秒,程序自动报警提示"机器人工位超时",避免因为机器人卡住导致整线停住却没人知道是哪台机器出了问题。
3.3 一致性数据读写,别让小报文打乱生产节拍
机器人发的不是简单的IO点,它还会往PLC发一些连续的值,比如当前程序号、TCP坐标、报警代码、焊接计数。这些数据在PROFINET通信里属于一致性数据,PLC读的时候要保证一组数据不被分割。S7-1500里我用DPRD_DAT指令去读整个数据块,而不是直接读取单个字节地址,这样能保证数据的完整性。
现场也遇到过一种情况:机器人厂家的程序把一整块16字节的数据一次刷新,PLC这边如果用普通中间变量去读取,可能读到一半数据被更新,出现"半新半旧"。排查起来还特别隐蔽,因为它不是每次都会发生,偶尔回个错误坐标,导致视觉引导焊点位置偏掉。后来把所有机器人通讯全部改成一致读写的模式,就再没出现这类诡异故障。总线通讯不是传输越快越好,保证数据组一致比什么都重要。
4. 触摸屏不只是动画:报警分层与故障定位的设计思路
4.1 HMI选型和画面架构,按工位和区域划分
大型焊装线的HMI如果只做一两个大画面,操作工和维修工根本没法用。我选择的是面向Profinet的触摸屏,挂在控制层网络里,通过PLC访问所有数据。屏的尺寸根据柜体来,主线控制柜用15寸以上的宽屏,分拼线控制柜用12寸,全都加装了远程维护模块,方便后期我在办公室就能看到现场画面。
画面架构我按"整线总览—区域画面—工位详情"三层来做。总览画面上面显示全线状态、产量、节拍和故障汇总,用颜色区分各工位状态:绿色自动运行、黄色暂停、红色报警。区域画面按主线、分拼、输送系统分页,每个工位做成一个可点击的小方块。点击工位方块进入工位详情,显示这台工位所有夹具、机器人和输送机构的动作状态,以及最近二十条历史报警。
很多项目HMI做成一个画面塞满所有按钮和指示灯,看起来热闹,真正用起来根本找不到东西。我的原则是,一个画面只干一件事:要操作就做操作画面,要监控就做监控画面,要诊断就做诊断画面。操作权限也要分区,机器人手动操作权限放在各工位的示教器上,HMI上只给允许运行、全线停止、故障复位这几个大按钮,防止误操作。
4.2 报警信息跟程序联动,别让操作工拿着代码表查
焊装线报警最容易犯的毛病是报警文本写得含糊,比如"伺服故障"四个字,操作工看了不知道是哪台伺服、哪个轴、什么故障码。我的做法是在PLC里建立统一的报警DB块,每条报警包含编号、文本、发生时间、确认时间、故障设备、故障码。程序里每个设备、每个工位、每个机器人的故障都往这个DB里写结构化数据,HMI端直接读取这个报警DB显示,而不是在画面上做几百个独立的报警控件。
这样做的好处很明显。某台FANUC机器人报了"伺服放大器过载",机器人通讯数据里会带回一串故障代码,我们把这些代码映射成对应的中文故障描述,传到HMI报警列表里。操作工不用看懂FANUC故障代码表,直接看到"3号机器人,右伺服放大器过载,故障代码A-17",维修工就清楚应该去查哪台控制柜,而不是满线找故障点。
报警记录还加了事件顺序追踪功能。焊装线发生故障往往是连锁反应:先输送滑台异常,然后挡住了机器人进车请求,机器人因为没有收到允许信号就触发报警。如果只看最后一条报警,你根本不知道源头在哪。我们的报警DB记录了每条报警的时间戳,HMI上按时间排序,现场人员点开故障分析窗口,就能看到故障发生的先后链路,快速判断是滑台先坏导致机器人报警,还是机器人先报警导致滑台来不及到位。这个功能在试生产阶段帮了大忙,大量"伪故障"就是从时间顺序里被看出端倪的。
4.3 配方和车型切换画面,也要考虑柔性化
现在的焊装线几乎没有只生产一种车型的。一条线要兼容三四个车型,每个车型对应的机器人程序号、夹具到位条件、焊接参数、节拍时间都不一样。我把车型配方放在PLC的数据块里,HMI做了车型选择画面,操作工在排产时选择即将生产的车型,PLC会自动下载对应的机器人程序号参数和夹具动作流程。要特别注意配方切换时,机器人程序号必须通过报文逐台下发并做核对,防止某台机器人还是旧程序就进入自动循环。这部分的联锁逻辑我做了很长的检查链条:车型选定以后,所有机器人都反馈当前程序号,PLC逐台比对,一致才允许启动自动,有一台不对就提示"某机器人程序号与当前车型不匹配"。
5. 调试现场最磨人的三个问题
5.1 设备名称与IP不一致,Profinet从站频繁掉线
焊装线调试第一天,最常碰到的就是某个ET200SP站或者某台机器人频繁从在线列表里消失。查来查去,最后基本都落在设备名称或IP冲突上。Profinet的机制是PLC组态里写了期望的设备名称,实际设备必须严格匹配,哪怕大小写不一样都连不上。机器人设备名字叫ROB001,PLC组态里写成了ROB1,这条总线就永远报"设备未找到"。解决办法是养成习惯,所有设备先规划名称规则:ET200MP站叫ET_MP_01、机器人叫ROB_01、变频器叫VFD_01,配置完在PLC在线诊断里核对设备名称,跟规划表一字不差。IP地址也要在交换机上做端口绑定,防止有人往网线上一插笔记本抢地址,把整条线搞瘫。
5.2 安全PLC程序下载失败和PROFIsafe地址跳线
S7-1500F的安全程序下载比普通程序麻烦得多。第一次往F-CPU下载F程序时,必须先在硬件配置里为每个安全从站分配一个唯一的PROFIsafe地址,而且要用F_DEST_ADD在线指定,不能随便填。现场就遇到过两个安全从站地址重复,导致PROFIsafe通讯建立不起来,每次下载到一半就报"安全目标站无响应"。还有一点特别容易忽略:F-CPU的密码和运行许可证如果没设置好,下载完安全程序后CPU会进入STOP状态,必须通过上电确认一次安全程序才能正常RUN。安全PLC和标准PLC的调试节奏完全不同,安全相关的改动尽量放在停机窗口做,别在节拍试运行的时候动F程序,不然一个校验失败,整个安全回路都要重新验收。
5.3 在线修改程序引发CPU停机,以及下载过程中断线
S7-1500支持在线修改,但也不是随便改。如果修改涉及到DB块的变量删除、接口区调整,或者是中断OB的改动,在线下载时CPU会短暂停机,重新启动后部分设备通讯要重新建立,机器人那边如果不做恢复逻辑就可能跟着报故障。我的做法是:焊装线在自动运行状态下,只改逻辑块内部代码,不改接口和DB结构;非要改DB结构,就等停线窗口做完整离线下载。下载过程中还有一个经典坑:直接从编程器网线下载到CPU,中间经过车间交换机,交换机一断或者防火墙拦了一下,下载失败,CPU里程序变成旧版本,现场又没注意,机器人启动后动作跟新程序对不上,折腾半天才明白是下载没成功。这个问题的标准解法是下载前把编程器直接插到CPU的网口,或者走一条专用下载通道,下载完成后在CPU在线信息里验证程序和块版本号都更新了再恢复自动。
程序版本管理在调试期也很重要。多工程师同时改一台PLC,经常出现你改的块被别人下载覆盖的情况。我们后来定了规矩:每人每天下班前把修改块导出到统一的版本文件夹,第二天开工前做一次离线比对,确认在线程序和当天版本一致再继续调。听起来麻烦,但真能避免那种"今天好不容易调好的逻辑,明天一开机又变回三天前"的离谱事件。
调试期还碰到过一个有意思的小问题:触摸屏能通讯,但HMI上显示的电量数据在翻页的时候会跳变,后来发现是PLC到HMI之间的数据刷新周期设置太短,多个页面同时读取同一数据块,造成屏上数据不稳定。把刷新时间从50ms调到300ms,画面刷新平滑了,操作工不再投诉数字闪来闪去。这个经验告诉我们,通讯带宽再充足,HMI的变量刷新频率也不是越快越好,要根据实际显示需求合理设置。
现在回头想,这条焊装线从设计到稳定量产,其实就是围绕"让所有设备按同一套规矩说话"这件事下功夫。S7-1500给了我足够的处理能力和统一的Profinet生态,但真正决定项目赶不赶得上节点的,还是网络规划细不细、信号分工清不清楚、报警定义能不能让维修工一眼看懂。如果你也在做类似的集成项目,我建议把IO规划表、设备命名规则和报警DB设计这三样东西当成重中之重,前期多花半天把这些定义清楚,后期调试能省下好几个通宵,这是我踩过这么多次坑以后最深的体会。