做设备的人都知道焊接机器人看着高级但真正让它跑顺的不是机器人本体而是外围那台PLC。这个No.789项目就是典型——一台二手焊接机器人配S7-200 PLC和组态王组态软件要做出一套能启动、能焊接、能报警、能记录的控制系统还要求梯形图程序带逐段解释方便后续维护的人接手。项目本身不复杂但涉及梯形图设计、接线图绘制、上位机组态和通信调试环节特别多每一处都有值得记录的细节。这篇文章就按我实际调试的路径把这套系统的设计思路、关键程序、接线要点和踩过的坑完整梳理一遍给正在做类似非标设备改造的朋友参考。1. 项目需求拆解这个焊接工位到底要控什么1.1 控制对象与工艺动作分解先把需求捋清楚。这个工位不是标准机器人工作站而是把一台旧焊接机器人搬到新的焊接胎架上机器人本体负责焊枪姿态和轨迹PLC负责外围逻辑工装夹紧、变位机联动、焊接电源允许、机器人启动请求、焊接完成信号、报警联锁。焊接一件薄板结构件的完整动作大概是操作员放工件按下双按钮启动。PLC控制夹紧气缸动作检测夹紧到位。变位机旋转到指定角度到位后发信号。PLC给机器人“允许工作”信号。机器人执行焊接程序自动引弧、送丝、焊接、收弧。焊接完成机器人给PLC“完成”信号。PLC松开夹紧变位机回零操作员取件。这里有个容易被忽略的点机器人是旧型号没有外部总线接口只能靠硬接点信号交互。也就是说PLC和机器人之间就是I/O对接谁先给谁信号、信号保持多久、什么时机关断全靠梯形图里捋清楚。S7-200做这件事非常合适点数不多逻辑不复杂稳定性和性价比都在线。1.2 为什么用S7-200 PLC做逻辑主站而不是只靠机器人示教器现场很多人会问机器人自己不是有PLC功能吗为什么还要外挂一台S7-200一方面旧机器人的内部I/O点数有限而且示教器里写联锁逻辑非常不方便改一个时序要重新示教。另一方面工装夹具、变位机、液压站这些外围设备必须由独立的逻辑控制器管理不能跟机器人绑定太死。机器人只是“执行者”PLC才是“指挥官”。组态王在这里的作用是监控层。操作员要看到设备状态、报警信息、产量计数、焊接电流电压趋势。这些数据如果从机器人控制器里取协议不开放很难做但从PLC里取就简单了。S7-200的编程口协议是公开的组态王直接通过PPI协议读取稳定而且成本低。所以这套方案的本质是PLC负责顺序控制和联锁是逻辑核心。机器人负责轨迹和焊接工艺是动作核心。组态王负责显示和记录是管理核心。三者各干各的活耦合度低后期维护也容易。1.3 整体控制系统架构和信号流向系统的信号流向其实很直观操作员指令进PLC数字量输入PLC按梯形图逻辑处理后输出信号给机器人、气缸电磁阀、变位机接触器和报警灯。机器人反馈的信号又回到PLC输入形成闭环。组态王通过通信线挂到PLC上采集M寄存器和V寄存器数据同时下发少量控制指令。我习惯先画一张信号清单再画接线图。这张清单能避免后面接线乱成一团。方向信号名称来源/去向PLC点位类型输入启动按钮操作台数字量输入输入急停按钮操作台数字量输入输入夹紧到位气缸磁性开关数字量输入输入变位机到位接近开关数字量输入输入机器人允许完成机器人控制器数字量输入输入机器人故障机器人控制器数字量输入输入焊接电源准备好焊机数字量输入输出夹紧电磁阀气缸数字量输出输出变位机正转/反转接触器数字量输出输出机器人允许工作机器人控制器数字量输出输出焊接启动焊机数字量输出输出三色灯指示灯数字量输出实际运行时这个架构最稳定。逻辑层和动作层分开调试时能快速定位问题。2. 硬件选型与接线图设计从点位表开始2.1 I/O点位分配表与选型清单S7-200选型其实不复杂但要给后续改造留余量。这个项目我选的是CPU 226自带40点I/O24入16出完全够用不用扩展模块。如果用的是CPU 224点数紧张后面加检测信号就得加EM223模块反而麻烦。点位分配要讲究规律。输入从I0.0开始排输出从Q0.0开始排不要乱跳。我最终的点位表是地址信号名说明I0.0启动按钮双按钮串联后接入I0.1急停按钮常闭触点I0.2夹紧到位磁性开关I0.3变位机0度到位接近开关I0.4变位机90度到位接近开关I0.5机器人焊接完成机器人输出I0.6机器人故障机器人输出I0.7焊接电源准备好焊机输出Q0.0夹紧电磁阀控制夹紧气缸Q0.1变位机正转接触器Q0.2变位机反转接触器Q0.3机器人允许工作给机器人信号Q0.4焊接启动给焊机信号Q0.5绿灯运行指示Q0.6红灯故障指示Q0.7黄灯待机指示选型清单还包括一个关键东西PLC与组态王通信需要一根带编程口的PPI通信线组态王侧用USB转串口。这根线要用带光电隔离的不然现场焊机一启动通信经常掉线。这点我踩过坑后面专门讲。2.2 接线图设计要点主回路、输入回路、输出回路接线图是这次项目里反复改的东西之一。看起来简单但细节非常多。先说输入回路。S7-200的输入是漏型接法公共端1M接24V正极传感器和按钮的另一端接到对应的输入点信号有效时把输入点拉低。简单说就是“PLC输入点——外部触点——公共正极”构成回路。注意双按钮启动要串联后接同一个输入点防止操作员单手操作。磁性开关和接近开关通常是三线制棕色接24V蓝色接0V黑色接PLC输入点。如果PLC公共端接的是24V就不需要串接上拉电阻。输出回路要注意继电器隔离。S7-200晶体管输出不能直接驱动接触器和电磁阀必须加中间继电器。我的做法是PLC输出接中间继电器线圈中间继电器触点再控制接触器。每组继电器的线圈并联一个续流二极管否则关断瞬间反电动势很容易击穿PLC输出晶体管。主回路里变位机电机由一个正反转接触器组控制两个接触器必须加电气互锁——正转接触器线圈回路串反转接触器的常闭触点反转回路串正转接触器的常闭触点。梯形图里还加了一层软件互锁这就是为什么接线图和程序必须同时看。2.3 安全联锁与急停回路的接线坑急停回路是最值得单独说的地方。很多初学的人把急停按钮接进PLC输入然后在程序里处理急停。这个做法不能说错但对于焊接设备来说不够安全一旦PLC死机急停就失效了。我的做法是急停按钮的常闭触点直接串在输出回路的总电源里。也就是说急停动作后所有PLC输出的外部继电器全部断电气缸、变位机、机器人允许信号全部切断。同时急停按钮还接一个输入点给PLCPLC检测到急停后立即复位所有状态并且让组态王显示急停报警。这里有一个接线细节急停按钮要选带自锁的按下后保持断开旋转才复位。不能用普通瞬时按钮否则操作员一松手设备又自动恢复非常危险。另外机器人控制器那边还有一路急停信号要和PLC这边的急停同时接形成双重保护。安全门联锁也是一样门磁开关的常闭触点串在机器人允许信号的回路里。焊接过程中开门机器人必须立刻暂停。这些接法不属于梯形图逻辑但比梯形图逻辑更可靠这就是安全回路“硬接线优先”的原则。3. 梯形图程序怎么写带注释的逐段拆解3.1 程序架构主程序、子程序、中断程序的划分梯形图程序虽然逻辑不复杂但也不能全部堆在主程序里。我按功能拆了几个块主程序OB1扫描调用各子程序处理急停复位。子程序SBR_0初始化设置定时器参数和初始状态。子程序SBR_1焊接流程控制用步进逻辑实现这是程序核心。子程序SBR_2报警处理把机器人故障、焊机故障、不到位信号转换成报警标志位并驱动红灯。中断程序没用高速计数这里用不到但组态王通信会占用定时中断需要注意。主程序的逻辑就是先处理急停再调用初始化然后执行步进流程。之所以把焊接流程放子程序是因为S7-200的程序区有限而且子程序便于单步调试查找问题更快。程序里大量使用M存储器做中间标志。比如M0.0系统运行/待机状态M0.1焊接流程步序号用M0.1-M0.7组合M1.0夹紧完成标志M1.1变位机到位标志M1.2焊接完成标志M1.3故障综合标志用M存储器而不是直接操Q输出好处是操作员在组态王里能独立监视每一步状态方便故障定位。3.2 启动停止与焊接请求的互锁逻辑焊接流程的第一个核心段是“启动请求”。梯形图用指令文本表示大概是这样Network 1 启动请求自锁 LD I0.0 // 启动按钮双按钮串联 O M0.0 // 自保持系统进入待机 AN I0.1 // 急停输入急停时复位 AN M1.3 // 故障综合标志有故障不能启动 M0.0 // 系统待机状态这个程序段对应的梯形图就是常开触点I0.0和M0.0并联再串常闭触点I0.1和M1.3最后输出线圈M0.0。看起来简单但有一个关键点自锁回路必须串上所有互锁条件否则启动后任何故障都无法停止。“停止”逻辑我放在另一个网络Network 2 停止请求 LD M0.0 // 运行中 A I0.2 // 夹紧到位防止夹紧中途取消 AN I0.5 // 机器人焊接中不能停 M0.2 // 停止请求标志这里我特意加了“夹紧到位”和“焊接中不能停”条件。原因是操作员误按停止时如果气缸夹着工件松开会造成工件掉落焊接过程中断电则会让焊枪回不到原点。所以停止请求先进入M0.2流程走到安全位置后再实际停止。3.3 焊接时序核心段引弧、送丝、摆枪、收弧焊接流程通常用“步进梯形图”实现一段一段往下走每段都有转移条件。这就是No.789项目里带解释梯形图的核心部分。整个流程按步位推进我用的步状态字是VB100每一步对应一个数值。在主程序里读VB100等于1做第一步等于2做第二步这样写的好处是组态王直接读VB100就能在画面上显示当前步骤。第1步夹紧工件Network 3 第1步夹紧 LDW VB100, 1 // 当前步位等于1 Q0.0 // 夹紧电磁阀输出 LD I0.2 // 夹紧到位 MOVW 2, VB100 // 步位切换到2注意这里用LDW比较指令因为VB100是字步位值也是字。梯形图上就是一个比较触点等于1时置位Q0.0。夹紧到位后把2传给VB100步进推进。第2步变位机转到90度Network 4 第2步变位机 LDW VB100, 2 // 步位等于2 Q0.1 // 变位机正转 LD I0.4 // 90度到位 MOVW 3, VB100 // 步位切换到3变位机到位信号是接近开关需要注意抖动问题。到位信号可能来回跳动导致步进乱跳。我的处理是在I0.4接入PLC后加一个200ms的延时确认用定时器TON检测信号稳定后才切换步位。第3步允许机器人工作机器人焊接程序启动Network 5 第3步机器人工作 LDW VB100, 3 // 步位等于3 S Q0.3, 1 // 机器人允许工作置位输出 LD I0.5 // 机器人焊接完成信号 R Q0.3, 1 // 复位允许信号 MOVW 4, VB100 // 步位切换到4这里用的是S/R指令而不是普通输出。允许信号需要一直保持到焊接完成用置位指令可以避免扫描周期中途信号被断开。很多初学者在这里用了普通线圈输出结果机器人刚启动PLC扫描到下一步还没成立Q0.3瞬间断开机器人直接停了。第4步焊接完成松开夹紧Network 6 第4步焊接完成 LDW VB100, 4 // 步位等于4 Q0.2 // 变位机反转回零 LD I0.3 // 0度到位 MOVW 5, VB100 // 步位切换到5变位机回零后第5步才复位夹紧电磁阀然后VB100回到0表示流程结束同时产量计数器加1。3.4 延时与计数器参数的整定方法梯形图里用到延时的地方很多启动防抖、到位确认、焊接结束后的冷却等待。我用了两个定时器一个TON用于延时开一个TONR用于累计。实际整定时这样处理夹紧到位确认延时我在程序里用T37定时200ms。这个值不是随便给的是根据磁性开关实际抖动时间调的。我用组态王在线监视I0.2的信号波形发现抖动大约80ms所以留下两倍余量200ms比较稳妥。如果现场气缸速度慢到位开关接触不良可以改成300ms。变位机回零后的停止等待用T38定时500ms。原因是在关闭接触器后电机由于惯性还会转一点如果立即检测0度信号实际上还没稳定。500ms后重新检查接近开关确认完全到位。产量计数用C0在VB100从4切到5时加1。这里特别提醒计数器加1要放在“步位切换”的同一个扫描周期里用边沿检测指令EU保证只加一次。否则扫描周期内条件一直满足计数器一次会加好几下。4. 组态王画面组态与S7-200通信配置4.1 通信方式选择PPI电缆与组态王设备配置组态王要跟S7-200通信经典方案就是用PPI协议。硬件上电脑串口通过PPI电缆连到S7-200的编程口。组态王里新建设备时选“PLC”分类下的S7-200协议选PPI。通信参数必须跟PLC编程软件里的设置一致波特率9600数据位8偶校验停止位1。很多人通信不上十有八九是波特率不一致或者在PLC程序里不小心改了通信端口地址。S7-200默认站地址是2组态王设备地址里要填2如果PLC里有多个站地址就必须区分开。我调试时踩过的坑是USB转串口线兼容性。便宜的那根线在组态王里总是不稳定连上几分钟就掉线。后来换成带FTDI芯片的USB转串口线再配合带隔离的PPI电缆连续运行一周都没掉过线。这个钱省不得。组态王侧的关键设置还有“采集频率”。默认1000ms采集一次。如果画面看到的数据更新慢可以改成500ms但不要低于200ms否则S7-200的通信口会忙不过来反而影响PLC扫描周期。4.2 定义I/O变量地址映射表组态王里定义变量时寄存器地址要跟PLC的存储区对应。常用对应关系组态王变量名PLC寄存器数据类型说明启动按钮M0.0位系统待机状态焊接步位V100字当前流程步号夹紧输出Q0.0位夹紧状态机器人允许Q0.3位机器人运行状态焊接完成I0.5位机器人反馈完成故障信号M1.3位综合故障产量计数C0字焊接件数这里注意S7-200的C0计数寄存器地址在组态王里可以读成C0类型选字。V100在PLC里写的是字节地址组态王读字时地址填V100数据类型选USHORT或INT。我在实际项目中吃过一个亏组态王读M0.0用的是“M0.0”位地址但PLC里M0.0跟M0是两回事地址填错后画面上显示的是其他点的状态。后来我统一在组态王变量名前加设备前缀防止混淆。设备前缀就是你在组态王里定义的设备名比如PLC_M0.0。4.3 主画面、报警画面和实时曲线的实现组态画面我通常分三个画页主监控画面、报警画面、趋势曲线画面。主监控画面放一个简化设备示意图用矩形和圆形表示工件、焊枪、变位机。每个图形元素的“动画连接”里把颜色变化绑定到对应位变量。例如夹紧状态为1时表示气缸的矩形变绿为0时变灰。机器人允许工作时代表焊枪的图标开始闪烁。绘制技巧闪烁效果要绑定“是否闪烁”属性而不是绑定颜色值。我之前直接在颜色属性里绑了个位变量结果变量为0时颜色消失画面反而不好看。后来我多建了一个中间变量专门用来控制闪烁。报警画面用组态王的报警窗口。报警内容要想清楚再配置报警变量选故障综合标志M1.3、机器人故障I0.6、焊机故障I0.7、急停I0.1这几个。报警优先级设置一下急停优先级最高。报警触发时画面自动弹到报警页同时组态王可以发声音提示我在工位旁接了一个蜂鸣器取PLC的Q0.6红灯输出故障时红等亮蜂鸣器响。趋势曲线用来记录焊接电流和电压。但S7-200里没有模拟量通道时这个曲线数据从哪里来我的做法是从焊机自带的模拟量输出口取0-10V信号接到S7-200的模拟量扩展模块上然后通过EM231的AIW0地址传到组态王。这样操作员能实时看到焊接过程的电流电压曲线后期工艺分析非常有用。5. 调试实录常见问题与排查技巧5.1 调试中遇到最频繁的6个问题No.789项目从头到尾大概调试了九天。前三天几乎都在处理通信和接线问题真正写程序只花了两天。这里把高频问题整理一下。第一个频发问题是机器人允许信号闪断。现象是机器人刚启动就报警停止组态王里看到Q0.3状态一直在跳动。排查发现是第3步用普通输出指令PLC扫描到下一步条件还没成立时Q0.3被复位了。改成置位输出后就好了。这就是我前面强调的S/R指令用法。第二个是夹紧到位信号抖动。气缸磁性开关在活塞到位瞬间会来回触发几次PLC在200ms内可能采集到好几个上升沿导致步进逻辑乱跳。处理方法是加TON延时滤波同时把磁性开关的安装位置调整到气缸行程末端让触发更干脆。第三个是变位机过冲。回零时接触器断电后电机惯性让它冲过头0度到位信号采集不到。最后在程序里改成先断开反转接触器延时500ms后再检测0度信号。接线不变参数一改就稳了。第四个是组态王掉线。一开始用的USB转串口线质量太差焊接启动后电流大干扰一上来通信就断。换成带隔离的PPI电缆和优质USB转串口线后问题再没出现过。第五个是报警误报。焊机在引弧瞬间会给PLC一个“电源准备好”信号但引弧电流大时该信号抖动误触发报警。处理方式是在梯形图里对I0.7做了50ms的延时确认。第六个是产量计数器乱跳。C0每扫描周期累加好几次。原因就是我把计数器加1的指令放在步位切换条件后面没有用EU边沿检测指令。加上EU后恢复正常。5.2 故障排查表和判断思路调试遇到问题时我用一个简单的排查顺序先确认电源和通信再检查输入信号再看梯形图逻辑最后看输出执行。下面是整理好的故障速查表故障现象可能原因排查方法解决方案组态王连不上PLC通信参数不一致检查波特率、站地址统一为9600、8、偶、1站地址2组态王经常掉线USB转串口线质量差观察设备管理器是否掉口换带隔离PPI电缆优质USB线机器人启动就停允许信号闪断在线监视Q0.3状态改用置位/复位指令步进流程乱跳输入信号抖动组态王看信号波形加TON延时滤波变位机回零不到位电机惯性过冲听接触器声音看接近开关断电后延时500ms再检测报警误报引弧干扰查报警发生时间点对I0.7做50ms延时确认产量跳字计数器重复累加监视C0变化加EU边沿检测气缸不动没到夹紧步查VB100当前值确认步进转换条件判断思路最简单的一条梯形图逻辑问题用“强制变量”的方式验证把某个输入强制为1看输出和步位变化是否符合预期。但强制变量前一定要确认设备处于安全状态尤其有气缸、电机这种执行机构否则容易出安全事故。5.3 从调试到稳定运行的几条实操心得这个项目做完后我总结了几条心得适合所有类似焊接控制项目。第一程序带注释不是给别人看的是给三个月后的自己看的。No.789项目要求每段程序带解释我一开始觉得多余后来改步进参数时才发现没有注释根本想不起当时为什么要设200ms延时。现在我在每个网络标题里都写清楚“为什么这么做”而不是写“夹紧延时”要写“夹紧到位确认延时防止磁性开关抖动导致误动作”。第二接线图和点位表要做成一一对应的表格贴在控制柜门内侧。调试时没这个表格用表笔一个一个查点效率极低。后期维护的人更是全靠这张表。第三焊接现场的电磁干扰比想象中严重。所有PLC输入线务必用屏蔽电缆屏蔽层单端接地。我在这个项目里一开始用普通电线焊机一工作PLC的输入点能读到各种假信号。全部换成屏蔽线后世界清净了。最后特别强调安全调试机器人允许信号时一定要把机器人设成手动模式。我见过有人为了图快在自动模式下远程强制输出结果机器人突然动作差点出事故。控制程序再完美也要先把安全回路做扎实这比任何功能都重要。做完这个No.789项目我最大的体会是焊接机器人控制系统其实是个“逻辑题”不考验复杂算法考验的是对设备动作的理解和对时序的把控。你把每一步动作、每一个安全条件、每一种异常都提前想到梯形图就是把这些想法翻译成PLC听得懂的语言。S7-200虽然老但配合组态王做一个中规中矩的焊接工位控制仍然非常可靠。后面如果再把焊枪防碰撞、焊缝跟踪、参数配方管理加进去这套架构也能平滑升级不用推翻重来。