ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

3×3立体仓库双PLC组态系统设计与调试实践

3×3立体仓库双PLC组态系统设计与调试实践 上个月刚交付了一套3×3立体仓库的组态控制系统PLC这边同时用了西门子S7-200 SMART和三菱FX3U两块上位监控用的是MCGS触摸屏。这类项目我前后做过几套但这套稍微特殊——客户希望两个主流品牌在同一套设备里协同工作西门子负责流程调度和外部通讯三菱专职管步进定位。整个项目从电气选型、控制逻辑到组态画面、现场调试踩了不少坑也积累了一些新经验趁着最近项目结算完把整套思路和排障过程整理一下。3×3立体仓库虽然只有9个货位但麻雀虽小五脏俱全三轴机械结构、步进电机定位、限位与原点检测、手动自动切换、仓位状态管理、触摸屏监控PLC编程、组态交互、多机通讯全都要过一遍。无论你是刚入门PLC想做项目练手还是正在做同类设备调试这篇内容应该都能用得上。我按照实际开发顺序来讲从需求拆解一路讲到现场排障。1. 先搞清楚3×3立体仓库究竟在控制什么立体仓库的控制本质就三句话把货物放到指定格子把货物从指定格子取出来过程中不能撞车。3×3仓库是9个货位排成3行3列对应一台三自由度堆垛机。1.1 三轴动作与坐标关系我习惯把立体仓库的三个轴定义成X轴堆垛机在货架前列方向上的行走决定去第几列Y轴货叉托盘的升降决定去第几层Z轴货叉的伸出和缩回负责把货物送进货位或从货位里取出来所以一个货位坐标其实就是(X列, Y层)的组合加一个Z轴的动作。比如“2号列、3层货位”X轴走到2号列Y轴升到3层Z轴伸进去放货或取货动作完成后Z轴缩回Y轴可以降到原位X轴归位等待下一条指令。这套系统里X轴和Y轴用了步进电机加丝杠Z轴用一个小型电机推动货叉加上行程限位保护。步进电机的好处是定位精度可控项目里要求货叉对准货位误差不超过2毫米用脉冲数来定位比单纯靠气缸限位稳得多。1.2 手动、自动两个模式是必须的我不管做哪套设备手动模式一定优先写。原因很简单自动跑飞了你总得有手段把设备摇回原点而且现场调试阶段手动点动是查接线、查传感器最基本的手段。这套系统的手动模式下MCGS触摸屏上给三个轴各做两个点动按钮正转、反转按住动、松开停同时画面上实时显示三个轴的当前位置。自动模式则分成“自动入库”和“自动出库”两条流程。另外还有一个回原点操作因为步进电机断过电之后位置是靠脉冲数记忆的不回归原点就可能跑飞所以上电第一步必须先回原点。1.3 为什么这项目用PLC加MCGS而不是其他方案客户之前也问过能不能直接用一块屏幕加几个继电器搞定。答案是不行因为自动流程需要根据仓位状态、限位信号、运行步骤做判断纯继电器逻辑体积大、改起来麻烦。PLC做逻辑控制既有可靠性又有灵活性MCGS组态屏负责显示和操作开发速度快后期改动画面也不用动PLC程序。这套组合对于中小规模设备来说性价比和可维护性都是最合适的选择。2. PLC选型与I/O分配西门子和三菱各管一摊这套系统双PLC的架构不是拍脑袋定的。客户手里有多条产线一部分设备用西门子一部分用三菱希望以后这套立体仓库既能和现有西门子产线通讯也能独立扩展成三菱体系。所以我干脆让两块PLC各自发挥长处。2.1 主从分工的思路西门子S7-200 SMART选的是ST30晶体管输出型三菱选的是FX3U-32MT。分工是这样西门子S7-200 SMART做主控负责自动流程调度、手动/自动切换、Z轴电机控制、报警汇总、与MCGS触摸屏以太网通讯、与三菱FX3U走Modbus RTU通讯三菱FX3U做定位控制器X轴和Y轴步进电机的脉冲输出、方向控制、原点回归、限位处理。FX3U的高速脉冲输出性能很稳三轴以内用它做定位是小菜一碟为什么不让西门子直接发脉冲ST30也支持高速脉冲输出但从项目扩展角度看把定位功能独立到三菱以后如果加第四轴、加大行程改定位程序不影响主流程。而且客户现场有工程师熟悉三菱后期维护他们自己能上手。2.2 输入输出分配表先说三菱FX3U这一侧主要接X轴和Y轴相关的输入输出地址用途说明X0X轴原点接近开关回零定位用X1X轴左限位硬限位保护X2X轴右限位硬限位保护X3Y轴原点升降回零定位用X4Y轴上限位防止货叉抬过头X5Y轴下限位防止托盘砸底Y0X轴步进脉冲发一个脉冲走一步Y1X轴方向信号决定前进还是后退Y2Y轴步进脉冲升降脉冲Y3Y轴方向信号决定上升还是下降西门子S7-200 SMART这一侧接的是系统级别的信号地址用途说明I0.0急停按钮常闭触点直接进PLCI0.1启动按钮自动流程启动I0.2停止按钮暂停当前动作I0.3手动/自动切换旋钮开关I0.4Z轴伸出到位货叉伸到位信号I0.5Z轴缩回到位货叉缩回信号Q0.0Z轴电机伸出正转Q0.1Z轴电机缩回反转Q0.2三色灯/蜂鸣器报警指示输出输入输出分配看着简单但实际上有一个特别容易踩的坑传感器电源和PLC输入电源必须分开做好隔离。我这套设备的Z轴伸出到位接近开关一开始和步进驱动器用了同一个开关电源步进电机一启动电压波动直接把接近开关信号打飞了货叉都伸到最外面了还报“未到位”后来单独拉了一路DC24V给传感器才消停。2.3 电气接线上的几个细节步进驱动器一定要单独接地不要和PLC的0V混在一起否则脉冲容易受干扰丢步步进脉冲线用双绞屏蔽线屏蔽层单端接地。我现场用的是拖链电缆屏蔽层如果两端都接反而会形成地环路所有限位开关都接常闭逻辑断线时能直接暴露故障。有的同事图省事接常开结果线松了设备还在疯跑这是要出事故的3. 货位管理、流程调度与互锁保护的程序设计思路这一部分是整个项目里最需要静下心来想的环节。PLC程序从来不是一上来就写梯形图我习惯先在纸上把数据结构和流程画清楚再落到程序里。3.1 货位编号与状态存储9个货位我用的编号规则是“行号列号”比如第一层第二列就是“12”第三层第一列就是“31”。每个货位定义一个状态位1表示有货0表示空位。这9个状态位放在西门子SMART的V存储区里VW1000到VW1008对应9个货位。为什么要放在西门子这边因为MCGS触摸屏直接通过以太网访问西门子的V区最方便画面上的9个格子颜色变化直接绑定这9个位的状态不需要中间转发。流程里有一个必须做的判断自动入库时目标仓位必须是空位自动出库时目标仓位必须有货。如果不做这个校验入库放到已经有货的格子里就会撞上原有货物货叉直接别弯。我在画面上做了文字提示“该仓位已有货物请重新选择”。3.2 目标位置的换算逻辑X轴走第几列、Y轴升到第几层对应多少脉冲这个换算要提前在程序里写好映射表。比如现场X轴丝杠导程是5毫米步进驱动器细分设为8细分步进电机步距角1.8度那么每转需要的脉冲数360 / 1.8 × 8 1600脉冲电机每转一圈走5毫米每个脉冲对应位移5 / 1600 0.003125毫米假设货架每列间距是100毫米那么1号列到2号列要走100毫米对应脉冲数100 / 0.003125 32000。这个数值大得吓人不对我实际用的是减速步进电机配减速箱这些参数每个项目都不一样。这块我不建议在程序里做实时计算直接把每种货位的脉冲数用MOV指令提前存到寄存器表里程序按货位号查表取数。查表逻辑简单、运行速度快现场改参数也方便。西门子主控里有一张表例如货位X轴目标脉冲Y轴目标脉冲110012320000136400002102400022320002400023640002400031048000323200048000336400048000实际开发时我是在现场用点动把货叉对准每个货位后记录下此时三菱侧显示的当前脉冲数再填回这张表的。这种“现场示教填表”比任何理论计算都靠谱因为你没法保证机械装配、丝杠间隙这些误差完全符合理论值。3.3 自动流程分步骤执行自动入库的流程我用状态步编号来实现这是PLC程序里最基础也最实用的套路步0等待启动信号步10校验仓位状态失败则跳回步0并报警步20通过Modbus把X轴目标脉冲写入三菱FX3U的D200寄存器把Y轴目标脉冲写入D202步30通过Modbus置位三菱的M100触发三菱执行X轴定位步40等待三菱返回X轴到位信号M110步50置位三菱的M101触发三菱执行Y轴定位步60等待三菱返回Y轴到位信号M111步70Z轴电机正转伸出步80等待Z轴伸出到位信号步90延时0.5秒确认货物已经放下步100Z轴电机反转缩回步110等待缩回到位信号步120把对应货位状态位置1步130回原点流程结束出库流程类似区别是Z轴伸出到位后先往后退一点把货物勾出来再缩回最后步把货位状态位清零。步进程序的写法有个好处调试时卡在哪个动作直接看当前步号就知道问题出在哪一步不用到处翻梯形图。我在MCGS画面上专门放了一个“当前步骤号”的显示框现场调试效率提高不是一点半点。3.4 互锁保护宁可动作慢不可动作乱立体仓库最怕的就是几个轴同时动作导致机械碰撞。我在程序里做了三层保护第一层程序互锁自动流程中X轴和Y轴绝对不并行一个轴的运动完成后才会触发下一个轴。有人可能会说这样效率低但堆垛机这种设备稳定性优先少跑几秒钟比撞机大修划算得多第二层限位硬保护三菱侧程序里X轴正转方向如果X2右限位触发立即切断脉冲输出。这里脉冲输出要用PLSY停止指令或者DRVA指令的中断停止不能只靠梯形图断开输出点否则脉冲队列里残留的脉冲还会继续走第三层急停回路急停按钮串在硬件回路里同时进PLC输入。按下急停后三菱侧用M120作为急停标志定位程序里每个指令都检查这个标志一触发立即停止脉冲输出并清空脉冲指令的当前值老实说第三层保护我在仿真阶段没发现太大问题真正上电调试时才发现急停触发后三菱FX3U即使停止了脉冲输出机械结构也会有惯性滑行。后来我在Z轴和Y轴都加了机械刹车才彻底解决。4. MCGS组态画面让操作工一眼看懂仓库状态MCGS组态软件这东西上手快但做到好用需要花心思。我做的这套画面分四个主监控画面、手动操作画面、自动运行画面、报警与记录画面。4.1 主监控画面的设计思路主画面是整个系统的门面操作工90%的时间盯的就是这个画面。我在主画面中间画了一个3×3的仓库俯视图9个格子按照现场货架的相对位置排列。每个格子关联一个西门子V区的状态位状态位为0格子填充灰色文字显示“空位”状态位为1格子填充绿色文字显示“有货”自动运行过程中选中的目标格子边框闪烁提示这个效果的实现方式很朴素MCGS里给每个格子创建两个填充色不同的图形用“可见度”动画关联对应的V区状态位变量值为0时显示灰色图形值为1时显示绿色图形。画面右侧放“当前X坐标”、“当前Y坐标”、“当前步骤号”、“运行模式”四个数值显示框底下是启动、停止、急停三个按钮。我强烈建议在画面上把急停按钮做大而显眼位置固定在右下角触摸尺寸不低于60×60像素。别小看这个设计真出问题的时候操作工的手指是带着惯性戳过来的按钮太小按不到是要背锅的。4.2 变量连接的坑地址偏移别搞错MCGS连接西门子S7-200 SMART时设备驱动选“西门子S7-200 SMART(以太网)”通道类型对应PLC的V区地址时有个坑MCGS里V区的偏移地址和实际V区地址可能相差一个固定数值。比如我程序中货位状态位放在VW1000在MCGS里填写的通道地址可能是VW994通道类型是“V区字”。这是驱动规定的偏移不同版本MCGS的偏移量不一样需要看帮助文档或者先用一个变量写数测试。我在测试时遇到的现象是画面上的格子状态全部反相该绿的显示灰该灰的显示绿。查了半天发现是MCGS读回来的是另一个V区的数据而程序里那个V区恰好初始化为0所以画面永远显示空位。后来用MCGS的调试窗口强制写入VW1000一个值再读回才确认偏移量重新配置后一切正常。4.3 报警画面出了什么问题要有记录报警信息这块我在MCGS里做了三类系统报警PLC通讯断开、触摸屏与PLC连接失败设备报警限位触发、三菱定位超时、Z轴动作超时流程报警入库时仓位已有货物、出库时仓位为空MCGS的报警组态中有“变量报警”功能给各个报警变量设置报警阈值和文字描述触发后自动记录到报警窗口。我特别加了报警持续时间显示方便判断是瞬时干扰还是持续故障。有一回现场反映“三菱定位超时报警”看报警记录发现每次都是几百毫秒就恢复典型的干扰误报后来给三菱的通讯线加了磁环报警频率大幅下降。数据记录方面我在MCGS里做了一个简单的出入库记录表用组态软件自带的存盘功能把出入库时间、货位号、操作员记录到U盘或SD卡目录。这套功能好用的地方在于不需要额外写程序组态库里配置一下就行客户定期拷贝记录做追溯省了不少事。5. 双PLC通讯与MCGS对接Modbus RTU和以太网两条链路这套系统的通讯配置是整个项目里最容易被忽略又最容易出问题的环节。通讯链路一共两条西门子与三菱之间走RS485 Modbus RTU西门子与MCGS触摸屏之间走以太网。5.1 西门子主站读写三菱从站的配置三菱FX3U做Modbus RTU从站需要在GX Works里做两项设置D8120设置通讯格式波特率9600bps、8数据位、无校验、1停止位。注意三菱的D8120低字节每一位有对应含义我直接把数值01000100转成HEX是0x0400写进D8120D8121设置从站站号我设为1串口接线是最容易翻车的部分。FX3U的圆口RS485不是标准DB9接口到时候需要接SDA、SDB、RDA、RDB四个端子注意西门子侧485接口的A接三菱的SDB还是SDA要看具体定义不能想当然。我在现场第一次接线时就是A和B接反Modbus通讯完全没反应后来用万用表量到两个口定义后才换过来。西门子S7-200 SMART作为主站用库指令MBUS_CTRL和MBUS_MSG来实现读写。程序里每秒执行一次// 初始化主站通讯 // 在SMART程序中调用MBUS_CTRL模式1使能Modbus主站 CALL MBUS_CTRL MODE : 1 Baud : 9600 Parity : 0 Timeout : 1000读写三菱的D寄存器时西门子侧Modbus地址要加4开头例如三菱D200对应Modbus地址400201。写入目标X轴脉冲数// 把西门子VD100的X轴目标脉冲写到三菱D200 CALL MBUS_MSG SLAVE : 1 RW : 1 ADDR : 400201 COUNT : 2 DATA_PTR : VB1005.2 三菱侧定位程序的输入输出映射三菱FX3U程序里我用D200作为X轴脉冲目标值D202作为Y轴脉冲目标值M100是X轴启动触发M110是X轴完成标志。为了让流程清晰我把定位程序分成两段子程序。X轴定位用DRVA指令实现// 三菱FX3U定位程序 // D200为目标脉冲数(绝对定位)Y0为脉冲输出Y1为方向 LD M100 SET M100_内部保持 RST M110 LD M100_内部保持 ANI X1 ANI X2 ANI M120 // 急停互锁 DRVA D200 K1600 Y0 Y1 // done PLSY 停止条件自行处理这里有个实际经验三菱FX3U的DRVA绝对定位指令执行时如果目标位置就等于当前位置指令不会产生脉冲输出完成标志可能不会触发。调试时发现Y轴有时候到了目标层但不返回完成信号把流程卡死。解决办法是在程序里先比较D202与当前坐标寄存器D204如果相等就直接置位完成标志跳过定位指令。5.3 MCGS触摸屏连接西门子的网络配置MCGS与S7-200 SMART之间我用以太网连接参数如下PLC的IP地址192.168.0.2子网掩码255.255.255.0MCGS触摸屏的IP192.168.0.40子网掩码255.255.255.0通讯协议西门子S7-200 SMART以太网驱动默认端口102这里有一个经常被问到的场景触摸屏和PLC不在同一个网段怎么办。比如PLC挂在设备网192.168.0.x触摸屏被客户要求挂在办公网192.168.1.x。MCGS触摸屏如果没有设置网关和路由跨网段直接不通现象就是画面上的变量全部“设备通讯失败”。解决思路有两种最简单的方法把触摸屏IP改成和PLC同一网段然后用一根网线直连。很多现场这么干前提是不需要和其他上位系统通讯如果业务上必须跨网段就需要在中间加一个支持静态路由的网关或者带路由功能的管理型交换机配置一条192.168.0.0/24通过网关转发的路由。我看到有人问MCGS触摸屏和西门子1500跨网段通讯的问题原理一样如果1500那边设置了跨网段通讯并在PLC里配置了路由表触摸屏侧也要指同一条网关才能通我这套设备最终是触摸屏和PLC直连同一个非网管交换机都在192.168.0.x网段最省心。5.4 MCGS同时想监视三菱数据怎么处理因为三菱是Modbus从站MCGS触摸屏本身支持三菱FX系列协议也可以直接通过串口去读三菱的数据。但我在设计时没有让MCGS直接连三菱因为设备上串口已经给了Modbus通讯。MCGS要看的三菱侧数据当前坐标、轴报警等是通过西门子PLC中转的西门子每100毫秒用MBUS_MSG读一次三菱D204当前X坐标和D206当前Y坐标存到自己的V区MCGS再从V区读取显示。中转方案多花了几个梯级程序但换来的是MCGS只有一条以太网链路稳定性好得多。组态屏双通道同时连两个PLC不是不行但一旦量起来刷新率和通讯时序很难调问题定位也麻烦。给后来的朋友一个建议组态系统能保持单链路就不要搞双链路。6. 调试阶段的三次硬仗断电保持、网段错配与限位误触发项目的最后阶段永远是调试而这个项目的调试过程可以说是在反复踩坑和填坑中走完的。6.1 三菱FX3U寄存器断电不保持有一天现场做断电重启测试结果发现满仓库的“货物”全消失了9个货位状态全部变成空位。查了程序发现我把货位状态临时放在三菱的D0比赛了蠢。这里必须科普一个三菱FX3U的基础知识D0到D8属于普通寄存器默认断电不保持。也就是说PLC一断电这9个字全部归零。当初为什么放在三菱这边因为我觉得“货位状态是设备侧的数据应该放在负责运行的PLC里”。后来才意识到这种长期存储的状态变量应该放在断电保持区或者直接放在上位能访问的西门子V区。解决方案有两个方向在三菱PLC参数里把D0-D8设置为锁存区这样断电后数据可以保持。具体路径是GX Works软件里的“PLC参数”→“软元件”→“锁存”选项卡把D0-D8起始范围设置好写完后要“PLC存储器初始化”里的对应区域去掉再下载程序否则旧值还是会被清掉把货位状态搬到西门子V区存储三菱只保留临时变量我最终两个方案都做了货位状态迁移到西门子V区三菱侧D0-D8设置为锁存作为设备位置数据的短期备份。这样即使通讯断了三菱自身还有一份位置记录恢复通讯后可以比对。这里要提醒一句设置锁存区域后锁存区的内容在程序下载时不会被清空如果调试期想重置所有状态要把PLC存储器初始化选项里的对应区域打勾后再下载这坑我掉过一次排查了半天以为程序坏了。6.2 触摸屏跨网段连不上的现场处置现场调MCGS画面时我把触摸屏的IP配成了192.168.1.10PLC是192.168.0.2结果触摸屏画面上的状态全部显示“通信失败”变量数值全是0。一开始我一度怀疑是驱动配置不对折腾了驱动版本、通道类型跑了半天没效果。后来静下心来用一根网线直连触摸屏和PLC手动设置触摸屏面板上的IP为192.168.0.40PLC不用动画面马上活了。这事的教训是遇到以太网通讯问题先把IP网段问题排除掉再怀疑驱动。很多MCGS触摸屏默认出厂是192.168.1.x而S7-200 SMART默认也在192.168.1.x看似没问题但一改PLC IP就容易和触摸屏错开。建议在触摸屏上贴一张标签写上当前IP现场改IP时先看标签能省掉一上午的排查时间。6.3 接近开关误触发导致的假到位信号Z轴伸出到位信号用的是电感式接近开关调试自动出库时发现货叉明明才伸出去一半程序已经收到“Z轴伸出到位”的信号开始执行下降动作差点把货物捅歪。排查过程是这样的先用万用表量接近开关的输出端手动挡看信号是否正常结果正常的很接近铁块亮离开铁块灭怀疑接线是不是和别的线串了把Z轴到位信号线单独飞线故障依旧最后用示波器挂上去观察波形发现步进电机Y轴启动升降时Z轴到位信号的线上会出现尖峰脉冲宽度几十毫秒恰好程序扫描周期内捕捉到了这是典型的电磁干扰导致误触发。现场处理方法是接近开关改用了带屏蔽的三芯电缆屏蔽层接PLC侧的COM端接近开关的供电单独从DC24V开关电源拉一路不再和步进驱动器共电源PLC输入端对DC24V之间并联了一个0.1微法电容滤掉高频尖峰改完后再跑自动流程误触发再没出现过。6.4 关于限位信号的编程建议限位信号我统一做了滤波处理。S7-200 SMART的输入点可以配置输入滤波时间我把Z轴相关输入设置成6.4毫秒滤波三菱FX3U则可以用时间继电器延时确认的方式。别小看这个操作。之前在某条产线上见过因为没做滤波限位信号受干扰误触发设备急停乱响操作工都不敢靠近。立体仓库虽然是小设备但小设备更经不起误动作。稳定压倒一切这话在调试现场永远是真理。最后再分享一个小经验这套系统交付后我在西门子程序里留了一个“统计信息区域”把每个货位的出入库次数、总动作次数、急停触发次数都做了累加。客户每次做设备点检时通过MCGS画面就能看到这些数据提前判断丝杠是否该保养、接近开关是否该更换。这种做法投入几乎为零但客户对项目的满意度提升非常明显。如果你们也在做类似仓储设备不妨也留一段这样的统计逻辑后期维护阶段特别好用。
返回列表