PLC控制垂直循环立体车库项目复盘:从梯形图到调试的完整实战
做自动化这么多年立体车库这个项目让我印象最深。别看它表面就是把车抬起来挪个位真要拿PLC把整个系统理清楚牵扯到定位、互锁、通信、安全评审一大堆事稍不留神就会在验收前被现场问题磨掉半条命。这篇笔记是我在垂直循环式立体车库项目上的完整复盘从控制需求拆解、硬件选型到梯形图逻辑、触摸屏组态再到调试阶段踩过的几个典型坑全部记下来给后面接同类非标项目的同行做个参照。无论是准备干立体车库、智能仓储、提升机项目的电气工程师还是在做PLC毕设选题的学生应该都能从里面找到点能直接抄的东西。1. 垂直循环立体车库的PLC控制需求不是会转就完事1.1 项目基本盘24车位垂直循环式车库我接到的项目是一个园区配套的立体停车库结构形式是垂直循环式——说白了就是两组链条挂着一串载车吊篮像摩天轮那样在垂直面内循环转动。设备总共有24个车位底部有一个固定的出入口车开进底部的载车板后系统把对应的空吊篮转到下面来或者把指定的车转到出口位置。客户提的需求乍一听很常规触摸屏上选车位、一键存取、状态监控、报警记录加上手动调试功能。但真做下去就明白这类设备最麻烦的不是转起来而是在什么条件下才允许转、转了之后怎么保证不出事。垂直循环车库的机械运动只有一台主轴电机驱动看似简单可链条上有二十多个吊篮每个吊篮都可能挂着几吨重的车。链条长期运行会有伸长吊篮经过上下极限位置时如果定位不准轻则刮擦重则坠车。再加上存取车过程中人要在底部出入口活动安全回路必须做到哪怕错一根线都不能让电机动起来。这个背景下控制系统的核心任务就变成了三件事可靠的定位、严格的安全互锁、清晰的操作流程。1.2 安全需求清单安全评审最先要你命的那些点项目启动后第一轮图纸评审对方安全工程师给我上的第一课就是功能需求只是及格线安全需求才是验收的主线。他拉出来的清单我到现在还留在项目笔记里机械防坠装置检测每个载车吊篮对应一套防坠钩机构钩子是否到位必须用磁性开关反馈到PLC没到位禁止任何驱动动作。入口人车检测底部出入口的红外对射光幕要能检测人员是否撤离、车辆是否完全停正信号异常时禁止启动。上下极限保护链条运行到上极限或下极限必须有限位开关硬切断不能只靠程序里的软件判断。松链、断链检测链条一旦松弛或断裂立即急停并声光报警。超重检测载车板带称重传感器超重时只允许空载复位动作不允许带载循环。运行状态区分自动、手动、检修三种模式严格互锁检修模式下所有运动级联断开只能通过按钮盒点动。电源监控缺相、错相保护防止电机反转导致链条反向运行造成事故。安全评审过后我把这些整理成了一张信号表所有安全信号全部接入PLC输入同时重要信号急停、极限、防坠还要走独立的硬回路串进接触器控制线圈形成一个PLC软互锁硬回路硬互锁的双层结构。这招后面救了我好几次后面专门讲。2. 关键器件选型与电气设计为什么我用三菱配森兰还要加软启动器一拖三2.1 控制架构和器件清单电控方案定下来之后核心器件选型是这样搭配的。器件型号/规格选择理由主控PLC三菱FX3U-64MT晶体管输出支持高速计数和定位指令性价比高GX Works2调试环境成熟触摸屏威纶通MT8071iP另配一台远程监控屏项目要求中控室和现场各看一块屏引出一拖二通信话题主轴变频器森兰SB2007.5kW支持Modbus RTU启停频繁时比直接启动平稳还能做减速刹车辅助电机润滑泵、冷却风机、液压泵共三台由软启动器一拖三轮流启动降低柜体成本定位传感器欧姆龙E2E接近开关E6B2编码器接近开关做原点校准编码器做车位位置计数安全检测光电对射光幕、限位开关、磁性开关、称重传感器全部进安全回路关键信号硬线互锁有人问为什么主轴不直接接触器启动非要上变频器。这就要说到现场实际垂直循环车库启停非常频繁存取一辆车至少要启停一两次如果全压启动链条和减速机每天要承受几十次冲击用不了多久机械部分就会出问题。变频器可以把启停过程变成平滑的加减速同时还能利用直流制动把吊篮稳稳停在目标位置这个钱不能省。2.2 软启动器一拖三切换互锁比时序更重要辅助电机其实是三台小功率设备一台润滑泵、一台冷却风机、一台液压泵。这三台电机不需要调速但功率不大单独每个配软启动器太浪费客户预算又把得紧所以最终采用了一台软启动器一拖三的方案。所谓一拖三就是软启动器的主回路输出先接到一组切换接触器上三台电机的电源线分别接在三个接触器的出线端PLC通过控制这三个接触器的吸合决定当前软启动器给哪台电机供电。启动时先吸合A路接触器软启动器完成这台电机的启动然后A路切到旁路软启动器再切换到B路如此类推。这套方案在电气上有两个必须较真的地方。第一个是切换时序必须在确认上一路已经彻底断开之后才允许吸合下一路单纯靠程序里的输出互锁还不够。第二个更关键三个切换接触器之间必须有硬互锁也就是用接触器的辅助触点去串进另一路接触器的线圈回路防止任何一路吸合时另一路被同时吸合。一旦两路同时导通就是把软启动器的输出直接短路轻则跳闸重则炸模块。我这次在现场就因为这个栽过跟头后面调试章节详细讲。2.3 电气安全回路的三个硬设计电控柜的图纸改了四版最后安全评审才签字核心就是三个硬设计。第一急停按钮、上下极限开关、断链检测开关全部串联在主轴变频器使能端子和接触器线圈供电回路里这些信号不经过PLC直接切断驱动电源。PLC收到信号更多是为了记录状态和报警而不是依赖PLC去执行急停。第二所有安全门、检修平台限位开关使用常闭触点串联任何一处开路PLC的输入点全部刷新为断开状态运行条件直接不满足。常闭触点比常开安全的原因在于断线故障会表现为安全信号丢失而不是信号正常防止现场剪断一根线就能让设备动起来。第三手动/自动/检修三模式选择开关做成物理开关而不是触摸屏软切换。检修模式下PLC输出到接触器线圈的公共电源被切断只能通过检修盒上的点动按钮直接操作接触器从电气层面保证程序不可能干扰检修操作。3. 梯形图核心逻辑顺启逆停、定位计数和防坠互锁3.1 润滑电机与主轴电机的顺启逆停3秒和4秒怎么来的这台设备的厂家给的机械操作手册里有一条硬性时序要求系统启动时润滑电机先运行3秒主轴电机才允许启动系统停止时主轴电机先停4秒后润滑电机才停止。为什么这么设计因为主轴减速机和链条导轨在启动前必须充分润滑预润滑时间就是给润滑油泵建立油压、把油送到润滑点的过程。停止时主轴虽然切断了动力但惯性还要转一阵减速机内部仍在运动这时候润滑油不能马上断否则容易干磨。这个逻辑在PLC里就是最典型的顺序启动、逆序停止很多PLC培训教材里都把它叫顺启逆停。用三菱FX3U的定时器写非常简单// ----- 启动时序 ----- // X0: 启动按钮, X1: 停止按钮, M0: 系统运行标志 // Y0: 润滑电机接触器, Y1: 主轴变频器运行信号 LD X0 OR M0 ANI X1 OUT M0 LD M0 OUT Y0 // 润滑电机立即启动 OUT T0 K30 // T0延时3.0秒FX3U定时器单位0.1秒K303.0秒 LD T0 AND M0 OUT Y1 // 3秒后主轴变频器运行信号置位 // ----- 停止时序 ----- LD X1 OR M1 SET M1 // 停止标志 LD M1 RST Y1 // 主轴先停 OUT T1 K40 // T1延时4.0秒 LD T1 RST Y0 // 4秒后停润滑电机 RST M1这是简化后的示意逻辑实际程序里启动条件还要叠加防坠到位、光幕无遮挡、定位正常等一堆信号。但核心时序思路就是这两段启动时先开后级、停止时先断前级用两个定时器把时间错开。这个模式在所有含润滑系统的设备上都通用属于可以直接抄的经典结构。3.2 车位定位编码器计数原点校准别再全依赖累计脉冲立体车库最关键的问题之一是怎么知道每个吊篮当前在哪个位置。我们的机械结构是主轴每转一圈链条带动一定数量的吊篮经过固定点所以在固定点装了两个接近开关一个用于检测经过的吊篮数量一个作为原点标记。同时主轴上装了一个增量式编码器用来计算每个吊篮之间的精细位置。开始时我们也想过只用接近开关计数但发现链条在启停瞬间会抖动接近开关会多计或少计脉冲经常出现显示3号车但实际吊篮停在2号车和3号车之间的尴尬局面。后来改成了编码器粗定位接近开关精校准的双层方案。编码器接在FX3U的高速计数器输入点上每个车位对应固定的脉冲数比如我们现场标定是7200个脉冲对应一个车位间距。程序中预先建一张车位脉冲表把所有车位的脉冲区间存进D区。运行时根据当前编码器累计值和目标车位的脉冲区间算出要正转还是反转要走多少个脉冲。这是标准的增量定位思路。但增量编码器最大的风险是累计误差——链条打滑、联轴器松动、变频器加减速太猛都可能导致脉冲丢失。所以我程序里加了一条死规矩每次任何一个吊篮经过原点接近开关都强制把当前计数器值修正为原点标定值相当于每转一圈就校准一次。这样即使中间丢了几个脉冲经过原点后也会被纠正回来不会越跑越偏。3.3 防坠与安全互锁程序多疑一点现场少哭一次防坠逻辑是安全评审里最不看情面的部分。每个载车吊篮的防坠钩都有开/闭到位磁性开关程序规定只要有任何一个吊篮的防坠钩没到位主轴电机不能启动运行过程中防坠钩状态发生变化立即急停并报警。这里有个很容易忽略的细节防坠钩本身是机械弹簧复位机构在没有车的时候钩子应该是闭合状态有车进入后才靠重力推开。所以程序不能简单判断钩子闭合就允许运行还要判断当前吊篮是否承载车辆。我把称重传感器的信号和防坠钩信号做成了一个真值表吊篮是否载车防坠钩状态允许运行说明否闭合允许正常空载状态否打开禁止钩子机构异常或误动是闭合禁止车已进入但防坠钩未打开会卡扣是打开允许正常载车状态这个表是调试时和机械工程师对着设备反复试出来的光看程序根本想不到载车状态下防坠钩必须打开才允许运行这种反直觉逻辑。如果你一上来就写钩子闭合才允许运行那真实载车状态反而会被卡死。这类判定条件就是非标设备调试中程序逻辑跟着机械结构走的典型案例。4. 触摸屏、PC仿真与变频器通信组态里容易翻车的细节4.1 一台PLC接两台触摸屏能接但你得知道代价客户现场要求两块屏一块装在车库现场的立柱上一块放在旁边中控室值班台。反正都是威纶通最开始我图省事想用一根RS485线把两台屏并联接到PLC的同一个通信口。结果联调时发现两台屏同时读取会互相抢总线PLC通信响应明显变慢触摸屏操作经常卡顿甚至偶尔出现一块屏改参数把另一块屏的数据刷掉的怪现象。后来我重新理了一下方案。像FX3U这种小型PLC本身带一个编程口和一个扩展口再加上装一个FX3U-485BD通信板可以分出两个物理串口。现场屏接COM1口当主站中控室屏接COM2口的485BD两个口分别用232和485通道通信间隔开基本解决抢占问题。数据区也做了严格划分两块屏的地址范围互不重叠避免同时写入同一个D区或M区造成的数据抖动。如果有条件更推荐直接上加一个以太网模块两块屏都走网线通过交换机连接PLC。成本高一点但通信速度、稳定性和后续扩展性都强得多。现在很多新项目已经默认这么干了串口一拖二只适合预算紧、点位少的小设备。另外不管用哪种方案触摸屏软件里的PLC端口号设置一定要和PLC通信参数完全一致三菱默认是9600,8,E,1站号按硬件拨码设置InoProShop这类国产软件里还要注意端口号这个项不要填错成站号这个是最容易懵的一个设置项。4.2 S7-200 SMART与森兰SB200走Modbus RTU的参数表这台车库项目虽然主控是三菱FX3U但辅助系统里有台空压机是西门子S7-200 SMART在控制它要跟森兰SB200变频器通信这也是网上问得很多的一个组合。S7-200 SMART自带一个RS485口通过库指令MBUS_CTRL和MBUS_MSG就可以和森兰SB200走Modbus RTU。关键是把两边的串口参数对齐。森兰SB200的通信参数默认要设成Modbus RTU从站模式站号比如设为1波特率9600数据格式8-E-1。S7-200 SMART那边用MBUS_CTRL初始化主站参数必须完全一致。我列一张当时调通的参数表可以直接抄项目设置值备注SB200站号01变频器面板参数设置SB200通信协议Modbus RTU从站部分版本需要改功能码区域波特率9600MBUS_CTRL和变频器一致数据格式8, E, 1偶校验、1位停止位S7-200 SMART端口0或1取决于物理RS485口启停指令写保持寄存器具体地址看SB200手册频率给定0~50.0Hz对应寄存器数据换算当时踩过一个坑S7-200 SMART用MBUS_MSG读变频器数据时指令能通但数据全是乱的最后发现是变频器里的寄存器起始地址和PLC填写的数据地址偏移没对上差了一个地址。解决方法是看SB200的Modbus映射表把寄存器地址按手册重新偏移对齐不要凭经验硬填。4.3 仿真联调三连坑PLCSIM Advanced的密码报错、博途屏不兼容、AMS NetID项目后期客户要求先用电脑仿真做一轮演示验收于是我就开始折腾西门子侧的仿真联调结果一个晚上连续踩了三个坑。第一个坑是S7-PLCSIM Advanced下载程序的时候报了在线检查保护机密PLC组态数据的密码时出错这串提示。排查了一会儿才想起来TIA Portal的PLC组态里勾了保护PLC组态数据选项PLCSIM Advanced下载时无法读取这个保护数据。解决办法是把组态里带密码保护PLC组态数据的勾选去掉或者把访问保护级别改成与PLCSIM兼容的模式。第二个坑是博途PLC和模拟屏不兼容。想象一下客户想看威纶通触摸屏的模拟画面连着博途仿真PLC跑起来实际上第三方触摸屏模拟器根本没法直接和PLCSIM Advanced通信博途的仿真HMI只认西门子自家的精智面板或者WinCC。这个坑说白了是选型兼容问题后面我还是用WinCC和PLCSIM对连做完了演示。第三个坑是建立连接时提示需要目标PLC的AMS NetID和端口号。AMS NetID是TwinCAT、CODESYS这类系统里用来标识目标设备的6字节网络标识符通常格式是IP地址加两个额外字节比如192.168.1.10.1.1。很多人上来只填IP地址当然连不上必须把目标PLC的AMS NetID完整填对端口号也要对应AMS服务端口。同理CODESYS软PLC的网口MAC地址绑定如果选错到虚拟网卡上目标设备列表里也永远找不到PLC。这个在工控圈已经被问烂了属于一看就会、一查就错的典型。5. 现场调试踩坑记录三个让我加班到凌晨的问题5.1 STEP 7-Micro/WIN SMART搜不到CPU但添加IP又能连上空压机那套S7-200 SMART在柜内调试时出现了一个奇怪现象用STEP 7-Micro/WIN SMART的搜索CPU功能怎么搜都搜不到PLC但直接在软件里填PLC的IP地址却能连上下载程序完全正常。这个现象很典型排查链路大概是这样的先看电脑网卡IP和PLC IP。我电脑设的是192.168.1.5而PLC的IP是192.168.2.10不在同一个网段。照理说不在同一网段搜索不到很正常但添加IP地址连接为什么又能通因为S7-200 SMART的以太网接口在同一链路下可以通过底层数据链路层直接访问不依赖广播搜索。搜索功能主要靠广播报文网段不一致广播到不了PLC那边自然搜不到。解决也简单把电脑网卡IP改成跟PLC同一网段比如192.168.2.5再去点搜索CPU一下就出来了。这种情况在调试现场太常见了包括三菱GX Works2连FX3U串口也一样电脑上COM口号搞错、驱动装完没重启都会造成连接不上的假象。先查物理通道参数再查网络/波特率顺序别反。5.2 CODESYS软PLC连不上问题出在MAC地址和网口绑定那阵子为了测试另一个提升机程序我用一台工控机装了CODESYS Control Win准备当软PLC用。装完之后目标设备列表里死活看不到PLC折腾到凌晨才发现问题出在网口MAC地址绑定上。CODESYS软PLC安装的时候会让你选一个网口作为设备通信口它会把那个网卡的MAC地址绑定到网关配置里。我的工控机装了虚拟机软件多出来好几个虚拟网卡第一次安装时稀里糊涂选到了虚拟网卡上。物理网卡上的数据包根本到不了这个软PLC目标设备扫描自然为空。最后在设备管理器里把虚拟网卡全部禁用重新安装CODESYS网关绑定物理网卡设备就正常出现了。这个坑告诉我们凡是用CODESYS软PLC的场合安装配置网关和网口绑定前先确认你实际要用的物理网卡编号。不然你对着IP地址和MAC地址反复核对半天都没用问题压根不在IP层。5.3 顺手修的另一台设备PID温控温差大粗调三步走调试期间客户顺带让我看了一眼旁边液压站控制柜里的油温控制。现象是温度PID控制波动特别大设定40度实际温度在30到55度之间来回撞风机一开就猛降、一停就猛升典型的PID参数严重不合适。这种PID温差大的问题直接动参数前我习惯先手动测试把PID切到手动模式给一个固定输出值观察温度从初始值到目标值的过程有多快、有没有滞后。摸清被控对象惯性之后再用三步粗调法先大幅减小比例增益P让输出不再跟着偏差剧烈抖动。再增大积分时间I让积分作用变缓避免超调回摆。最后给输出加限幅和变化率限制防止执行机构快速全开全关。调完之后温度稳定在39到42度虽然精度不算顶级但已经完全够液压站运行要求了。很多PID问题都不用算得太细先把执行机构、采样周期、滞后这些基础摸清楚再按P小、I慢的思路试基本能解决大部分温差大问题。5.4 一拖三切换接触器吸合重叠主断路器跳闸之后这是整个项目里最惊险的一次。通电试机软启动器一拖三切换的过程中主断路器突然跳闸柜内能闻到一股糊味。当时第一反应是切换接触器两路同时吸合了。拆开一看程序里明明写了输出互锁两路Y输出不会同时为ON为什么还会出问题问题出在电气参数和程序逻辑的差异上。PLC的晶体管输出响应时间是毫秒级但接触器的脱扣时间和释放时间都是几十毫秒甚至上百毫秒。程序输出Y0断开后A接触器线圈断电并不意味着触点立刻断开如果此时Y1马上置ONB接触器开始吸合就会出现A还没完全断开、B已经开始闭合的重叠窗口。这个窗口虽然只有几十毫秒但足以让软启动器的两组输出之间形成短路。解决措施做了两层程序上切换时增加一个480毫秒的延时确保上一路接触器彻底释放后再吸合下一路电气上三个接触器的线圈回路互相串常闭辅助触点形成硬互锁。从那以后凡是涉及多路切换的场合我这辈子都不会省掉硬互锁。程序里的软互锁只是最后一道保险不能当主保险用。6. 项目复盘哪些设计保住了我的验收哪些下次我会改6.1 三项坚持到底的设计验收顺利通过后回头看整个项目有三项设计在整个过程中起到了决定性作用。第一是安全回路的双层结构。PLC软互锁负责状态判断和报警硬回路负责切断驱动电源两者独立存在。后面系统调试时我们故意模拟了几次故障——断链、防坠未到位、光幕被遮挡设备全部在第一时间急停。客户和安全评审看到实测结果才真正信服这套控制方案。第二是原点校准策略。每圈经过原点强制修正脉冲计数这个逻辑看着简单但非常有效地抵消了链条抖动和编码器误差带来的累计问题。后面连续运行一个多月没有再出现吊篮停不准的现象。第三是切换接触器的硬互锁。虽然当时是故障逼出来的但正是这一层硬互锁让软启动器一拖三方案真正变得可靠。如果当初图省事只做程序互锁后期运行中大概率还会再次跳闸甚至烧软启动器。6.2 下次再干我会改的五件事复盘是为了下次少踩坑如果有机会再做类似的立体车库项目我会毫不犹豫地改掉这几件事一是一开始就上以太网方案。两台触摸屏直接通过交换机走网线连PLC省掉串口一拖二的各种纠葛通信速度和稳定性都更好。二是定位系统优先考虑绝对值编码器或增加掉电位置保持。增量编码器断电后位置清零每次重新上电都得回原点现场等待时间太长。用绝对值编码器或者加一个机械位置校准销能省掉很多重复动作。三是用专用安全继电器模块替代一部分PLC内部安全逻辑。安全光幕、急停、防坠这些信号接入安全继电器由安全继电器直接切断接触器电源PLC只做状态采集。这套做法在安全等级要求更高的场景是标配立体车库其实也值得上。四是把触摸屏、PLC程序、电气图纸的版本管理做好。项目后期改了好几版程序现场有段时间出现过触摸屏下载了旧程序导致标签对不上的情况。非标项目赶工期容易乱但版本文件命名规范一点能避免很多低级麻烦。五是变频器选型阶段就确认好通信协议和寄存器地址。这次虽然调通了但中间为了摸清寄存器映射多花了一整天。新项目一定要在采购阶段就问清楚变频器手册里的Modbus映射表别等接上线再研究。立体车库这个项目做下来我最深的体会是控制逻辑难在一堆条件怎么叠在一起还保持清晰电气设计难在每一个细节都可能变成事故点。程序写得再漂亮最后能扛住现场恶劣环境和安全评审的往往还是那些看起来笨拙但绝对可靠的硬线互锁和冗余保护。希望这篇笔记能给准备做类似设备的你省掉几个加班的夜晚。