
做立体车库的电气控制这几年我见过不少方案一开口就是十六个车位、四层四列等真正画I/O表的时候却卡住了。4x4立体车库说通俗点就是一个四列四层、总共十六个车位的垂直运输系统一台升降机负责把车送到对应楼层一台横移台车负责在楼层里把车送进车位。你要解决的并不是单个电机怎么转而是“车该往哪走、什么时候走、怎么保证不出事”这一连串问题。PLC可编程逻辑控制器就是干这个的。这篇文章我想把整个横移升降控制系统的搭建思路原原本本讲一遍从机械动作拆解、硬件选型、I/O分配到梯形图逻辑、现场调试和避坑尽量做到看完能直接上手自己的项目。适合谁看呢我觉得三类人最合适一类是刚开始接触立体车库项目的电气工程师需要一套完整的控制逻辑框架一类是学过PLC但不知道实际项目长什么样的学生可以拿这个当毕业设计或课程设计的参考还有一类是设备维护人员懂一点原理之后排查故障会快得多。我不会只摆一堆图纸而是把关键环节的“为什么”也讲清楚因为很多坑就是因为不明白背后的原因才踩进去的。1. 系统组成与总体设计思路1.1 4x4立体车库的结构与动作拆解所谓4x4我按最常见的规划理解为四列四层共十六个车位。机械本体大致分成两部分升降系统在巷道端部或中部有一套升降平台负责把车辆从地面层送到目标楼层或者从目标楼层接回地面。升降平台的运行轨道垂直布置靠钢丝绳或链条传动电机带动减速机驱动卷筒。横移系统每一层有一台横向移动的小车负责在巷道内左右移动把车辆从升降平台拉到对应列的车位或者从车位拉回升降平台。存车流程简单说就是车辆开到地面层的升降平台上 → 驾驶员下车确认 → 系统检测到平台有车 → 用户选择空车位也可自动分配 → PLC控制升降平台升到目标楼层 → 该层横移台车移动到升降平台前方 → 将车从升降平台拉到目标车位 → 横移台车回到待位点 → 升降平台回到地面层待机。取车流程反过来升降平台升到目标楼层 → 横移台车移动到目标车位前方 → 将车从车位拉到升降平台 → 升降平台降到地面层 → 驾驶员把车开走。注意这里的核心不是单个动作而是“位置记忆”。PLC必须时刻知道两件事当前升降平台在哪一层、当前横移台车在哪一列。所有运动控制都建立在这两个坐标之上。所以程序里一定要维护两个变量比如 D10 存放当前楼层D11 存放当前列。只要这两个变量不乱存取车逻辑就不会跑偏。1.2 为什么选择PLC而不是单片机有人会问用STM32甚至Arduino也能做类似控制为什么工业上几乎都是PLC原因很实在第一是可靠性。立体车库是载人载物的设备现场有强电、变频器、电机启停电磁干扰很严重。PLC按工业标准设计电源、I/O口都有隔离和滤波抗干扰能力强很多。单片机方案不是不能做但你要花大量精力处理硬件保护、看门狗、ESD开发周期长可靠性还不一定达标。第二是维护方便。最终用户的电工不一定懂C语言但多数看得懂梯形图。用PLC做现场改逻辑、查故障都比单片机方便。而且立体车库属于特种设备很多地区验收时对电气控制系统有明确要求PLC方案更容易通过审查。第三是扩展灵活。前期I/O点可能刚好够用后面如果增加车位、增加传感器加一个扩展模块就行。单片机方案改动起来几乎等于重新设计。1.3 控制方案选型PLC品牌方面三菱FX系列、西门子S7-200 SMART / S7-1200、台达DVP系列、汇川H系列都常见。我的建议是看已有项目习惯不必盲目追新。三菱的步进指令STL在写这种流程型逻辑时非常顺手西门子的SCL语言做结构化编程也很清晰台达和汇川性价比高小项目用着没问题。举一个实际的硬件配置参考PLC三菱FX5U-32MT/ES或FX3U-48MT。4x4车库若每个车位都有检测传感器加上各种限位、操作按钮、输出点数字量I/O很容易超过40点。建议按64点预算来选后期不用为缺几个点发愁。触摸屏威纶通MT8071iP或昆仑通态TPC系列走以太网或RS485连PLC。界面显示车位占用图、报警信息和手动操作按钮。变频器升降电机用台达VFD-M系列或汇川MD290横移电机可以用同系列小功率型号。每台变频器需要接正转、反转、多段速高速/低速等控制端子。编码器横移台车用增量式编码器一般600线就够了接PLC高速计数器。升降用绝对值编码器更好或者用楼层感应开关加编码器组合定位。传感器车位检测用对射光电或光电接近开关定位用接近开关/磁开关检修门用门磁开关。这里要额外说一句PLC数字量输出点控制变频器本质上是靠开关量端子实现启停和速度切换不是模拟量连续调速。比如变频器的正转端子、反转端子、高速端子、低速端子分别接PLC的输出点。这样做的好处是接线简单、抗干扰强、PLC不需要扩展模拟量模块。缺点是无法做到非常平滑的连续调速但对于存取车这种动作分段调速已经完全够用了。2. 硬件选型与I/O分配2.1 关键硬件计算立体车库电机选型不能拍脑袋拿升降电机举例。假设每个载车板加车辆总重2000kg升降速度0.15m/s机械效率0.7电梯垂直提升需要的轴功率大概是P F × v ÷ η (2000×9.8×0.15) ÷ 0.7 ≈ 4200W所以升降电机选5.5kW比较合适。实际还有减速机构、钢丝绳滑轮损耗以及加速阶段需要更大转矩留1.1到1.2倍余量是必须的。横移电机水平移动摩擦系数取0.15左右功率通常1.5kW到2.2kW就够。变频器的容量建议比电机功率大一档。比如5.5kW电机选7.5kW变频器因为升降属于重载启停瞬间冲击大。另外一定要配置制动电阻变频器在下降制动时会把再生能量消耗掉否则很容易报过电压故障。升降电机建议选带内置抱闸的电磁制动电机或者外接抱闸整流器。抱闸由PLC通过中间继电器控制必须在电机停止的同时下闸防止载车板溜车。这个安全环节绝对不能省。2.2 I/O地址规划我习惯先把I/O表画好再写程序。以三菱FX5U为例一个比较典型的I/O分配如下输入点分配地址功能地址功能X0急停按钮常闭X1启动按钮X2停止按钮X3手动/自动切换X4手动上升按钮X5手动下降按钮X6手动横移正转按钮X7手动横移反转按钮X10升降顶层限位X11升降底层限位X12一层定位开关X13二层定位开关X14三层定位开关X15四层定位开关X16横移左限位X17横移右限位X20横移编码器A相X21横移编码器B相X22升降编码器A相X23升降编码器B相X24平台有车检测1X25平台有车检测2X26检修门开关X27超载检测剩余点位可扩展给每个车位的独立检测传感器如X30~X47对应16个车位占用信号。如果你觉得占用点数太多可以用通信方式把远程IO接进来但小型项目直接拉线更省心。输出点分配地址功能地址功能Y0升降正转上升Y1升降反转下降Y2横移正转Y3横移反转Y4升降高速Y5升降低速Y6横移高速Y7横移低速Y10升降抱闸打开Y11横移抱闸打开Y12报警灯Y13蜂鸣器Y14运行指示Y15故障复位注意所有安全回路急停、上下限位、检修门等在PLC外部也要进行硬接线串联直接切断升降接触器或变频器使能回路不能只靠PLC程序。这是立体车库行业的基本底线。2.3 接线要点接线的细节直接影响调试效率。我踩过的坑主要有这几个编码器线必须用屏蔽双绞线屏蔽层在PLC侧单端接地。如果和动力线走在同一个线槽一定要隔开至少20cm否则高速计数器会跳数。变频器输出到电机的线尽量用屏蔽电缆并且屏蔽层在两端都接地。变频器本身要有独立的接地极不要和PLC共地。抱闸线圈是感性负载熄灭时会产生高压反电动势必须并联阻容吸收或压敏电阻否则很容易损坏PLC输出点。急停回路要接常闭触点断线时表现为急停动作而不是急停失灵。程序里读到的急停信号取反后参与所有输出控制。3. 核心控制逻辑存取车流程与横移升降协同3.1 状态机模型流程型控制最好的写法是用状态机而不是堆一堆互相缠绕的M继电器。三菱PLC有STL步进指令西门子可以用SCL里的CASE语句两者思路一样把整个存取车过程拆成若干个稳定的状态每一个状态都只做一件明确的事情满足转移条件后进入下一状态。以取车流程为例状态大致如下状态编号状态含义转移条件S0待机收到取车指令S10升降平台移动到目标层平台到位目标层信号ONS20横移台车移动到目标车位列横移编码器位置目标列位置S30横移台车前进取车车辆到位检测ONS40横移台车后退返回升降平台横移左限位或平台中心位ONS50升降平台下降到地面层底层限位ONS60允许驾驶员开走车辆平台有车检测OFFS70设备复位所有机构回待机位存车流程类似只是顺序变成“平台先到目标层 → 横移到目标列 → 平台上的车被拉进车位 → 横移返回 → 平台回到地面”。要注意的是因为升降平台和横移台车位于同一个巷道空间存在干涉风险我通常不允许升降和横移同时动作。虽然这样效率会低一点但安全性高很多。如果甲方明确要求提高效率可以增加机械联锁比如平台锁定销再在程序里开放双轴同时运行但前提是现场确认过物理空间不会碰撞。3.2 定位与速度控制横移台车要精确停在每一列对应的位置光靠限位开关不够。比如四层四列每列宽度约2.5米巷道距离大约7.5米台车要在五个位置停车四列加待机位用普通限位开关需要装很多个而且限位开关机械磨损后位置会漂。我习惯用增量编码器加高速计数器在PLC内部维护一个位置寄存器通过比较当前位置和目标位置实现多段减速。简单来说当前位置 目标位置时台车要反向移动。当前位置与目标位置的差值大于减速距离比如30cm时输出高速信号。差值小于减速距离但还未到位时输出低速信号。差值小于停止窗口比如5mm时停止输出并抱闸。这个逻辑用梯形图写会比较啰嗦但思路很清晰。假如用三菱结构化文本ST来表达核心代码类似IF (当前位置 目标位置) THEN Y2 : TRUE; // 横移正转 Y3 : FALSE; ELSE Y2 : FALSE; Y3 : TRUE; // 横移反转 END_IF; IF ABS(当前位置 - 目标位置) 减速距离 THEN Y6 : TRUE; // 高速 Y7 : FALSE; ELSIF ABS(当前位置 - 目标位置) 停止窗口 THEN Y6 : FALSE; Y7 : TRUE; // 低速 ELSE Y2 : FALSE; Y3 : FALSE; Y6 : FALSE; Y7 : FALSE; // 输出抱闸 END_IF;这里需要注意编码器的方向处理。增量编码器正转加计数、反转减计数但机械安装时很可能正反方向和预期相反调试时若发现越走越错只需在程序里交换A/B相或者把加减计数方向标志取反即可不需要改接线。升降平台的定位也用编码器加楼层感应开关。楼层感应开关负责粗定位编码器负责精确停止。平台运行时高速上升接近目标楼层感应开关时切低速碰到感应开关后继续低速运行一段距离或直接以停止窗口判断后停止。绝对不能只靠感应开关直接停车那样冲击大停车位置也不准。3.3 安全互锁逻辑立体车库安全互锁是验收重点也是PLC程序的灵魂。我根据实际经验整理了几条必备逻辑升降运动中禁止输出任何横移动作。横移台车未回到升降平台中心位置时禁止升降动作。检修门打开时所有自动动作禁止执行只能手动低速点动。超载信号触发后禁止升降上升允许下降把超载车辆放回地面。急停按下后所有输出立即切断尤其是升降抱闸必须自动抱紧。平台或车位上的车辆检测传感器逻辑要正确取车时如果平台车辆未离开不能进行下一次存车存车时如果车位已经有车禁止分配该车位。除了程序互锁硬接线互锁同样重要。变频器的正转、反转端子即使在程序里同时为ON变频器本身的参数也要设置成“正反转禁止同时有效”防止程序跑飞时电机乱动。3.4 空位管理和车位分配4x4车库有十六个车位但存取车时系统必须知道哪些车位空闲。最简单的做法是用M继电器或数据寄存器记录每个车位的状态1表示有车0表示空位。存车时PLC在空位列表里查找第一个空位把这个位置作为目标取车时根据用户输入的车位号确定目标位置。我建议用数据寄存器D100~D115分别对应16个车位状态。这样触摸屏显示车位图的时候直接读取D100~D115的值画成红色方块表示有车绿色表示空位非常直观。车位状态更新的时机也很关键。很多人会在“横移台车把车拉进车位”的动作完成时才把车位状态置1但这样做有个隐患如果动作已经进行到一半设备出了故障实际车已经部分进入车位程序却还没更新状态恢复后就乱了。我习惯在“车辆完全进入车位且传感器确认到位”时再更新状态并且把状态更新放在故障恢复的前面确保现场实际情况和PLC记忆一致。4. 从梯形图到调试4.1 程序整体框架写PLC程序不能一上来就写梯形图。我一般先画时序图或状态流程图想清楚所有可能的路径然后按功能块去写。一个大致的程序结构如下初始化段上电时将所有输出清零将位置寄存器清零读取信号状态强制设备进入待机位。手动控制段在手动模式下按钮直接控制升降和横移正反转用于检修和调试。手动段的输出也要受限位、急停等保护。自动控制段根据当前状态编号执行存取车流程。这部分是程序的主体建议用STL或CASE结构实现。定位计算段实时读取编码器脉冲维护当前位置寄存器执行高速/低速切换。报警处理段汇总急停、超载、限位异常、通信故障等信号产生报警码并切断相应动作。通信数据交换段和触摸屏、上位机或车库管理系统通信交换指令和状态。如果你所在的项目允许使用AI辅助生成PLC代码我建议可以大胆用来做初稿但一定要自己能看懂每一行的逻辑。AI生成的代码在标准功能段比较靠谱比如Modbus通信初始化、编码器读取这类但在安全互锁、故障恢复这些涉及实际工况的地方还是得靠经验去打磨。4.2 关键梯形图段示例下面我用三菱风格的梯形图思路描述几个核心控制段方便有PLC基础的人直接迁移。升降上升输出段假设自动状态下目标楼层大于当前楼层且升降平台没有在运动则Y0为ON。用M0表示“允许升降自动”M10为上升条件满足。梯形图大致是条件M0 ON 且 M10 ON 且 X10顶层限位OFF → 输出 Y0。同时把“升降运动中”标志M20置ON用于横移互锁。横移正转输出段横移运动条件更复杂必须先确认升降平台在该层且机械锁定。我用M30表示“横移允许”。当M30 ON、目标列大于当前列、横移台车未到位时输出Y2。减速控制段每个扫描周期比较当前位置寄存器和目标位置寄存器。为了方便调试我把减速距离放在D200里停止窗口放在D202里过程中用CMP比较指令或直接算术指令判断。抱闸控制抱闸线圈要在电机通电之后延迟0.2秒再松开停止时先断电再延迟0.2秒抱闸。这段延时用T0、T1定时器实现。如果抱闸和电机同时通电载车板会瞬间下滑非常危险。4.3 模拟调试与实际现场调试现在的PLC编程软件都支持仿真。比如三菱GX Works3可以模拟软元件的通断西门子TIA Portal也有仿真模式。可以先在电脑上把程序逻辑跑通特别是状态转移条件、定位判断这种纯逻辑问题用仿真很快就能发现。这里插一句如果你用虚拟机去跑TIA或者GX Works想要和真实PLC在线通信虚拟机的网络模式建议选择“桥接模式”让虚拟网卡和物理网卡处于同一网络PLC分配同网段IP才行。只开NAT模式经常发现连不上PLC就是因为地址不在一个网段。仿真通过只是第一步现场调试才是真正的考验。我习惯按下面顺序来先送电但不送主电源。检查所有传感器、限位开关的信号是否能在PLC里正确读到。手动模式低速点动看电机方向是否正确。方向反了就先调变频器参数再调限位逻辑。手动模式跑完一遍横移和升降全行程确认限位、编码器数值、抱闸顺序都没有问题。自动模式空载试运行从不同的起始位置测试存车和取车流程。带载试运行放一辆车反复存取几十次验证定位精度和重复性。测试各种异常情况急停中断、断电恢复、车辆未完全到位等。4.4 报警信息与通信设置现场设备一定要有清晰的报警提示。我习惯在触摸屏上显示报警代码和可能原因。常见的报警类型有报警代码含义处理建议E01急停被按下确认现场无异常后复位E02升降顶层/底层限位同时动作检查限位开关可能故障E03横移定位超时检查编码器、变频器、机械卡滞E04车辆超载检查车辆重量和传感器E05通信故障Link-100检查RS485/以太网线、从站地址、终端电阻这里特别说一下通信故障。很多立体车库会通过RS485总线连接多个远程IO或变频器比如台达PLC做Modbus从站、汇川变频器走Modbus RTU一旦通信不稳定就会出现类似“Link-100”的报警。遇到这种报警我从三个地方查第一是通信线是否用了屏蔽双绞线第二是总线两端的终端电阻是否设置正确第三是从站地址和波特率是否和主站一致。很多时候只是某个接头松了或者型号参数没对上不要一上来就怀疑PLC坏了。5. 常见问题与排查技巧5.1 横移台车定位不准或过冲现象台车每次都停不到位有时偏左有时偏右甚至冲过目标位置一小段再退回来。排查思路先看编码器读数是否稳定。如果数值乱跳先查屏蔽接地排除变频器干扰。再看变频器加减速时间。加速时间太短会过冲太长又影响效率。我一般设置减速时间比加速时间略长例如加速0.8秒减速1.5秒。如果机械惯性大单纯靠PLC切换低速还不够可以在目标点前增加一个“点动”过程低速运行到停止窗口后先关闭电机等惯性停止后再低速爬行靠近直到编码器位置在窗口内。检查表格现象可能原因处理读数乱跳编码器信号受干扰屏蔽线接地远离动力线每次都停过减速距离太短增大减速距离参数停不到位后有反冲机械间隙大检查联轴器、链条张紧时好时坏变频器参数不稳改为PLC多段速控制不用模拟量5.2 升降平台溜车现象升降平台停止后缓慢下滑或者抱闸时冲击声很大。这个问题多出在抱闸顺序上。正确顺序是启动时先让变频器输出力矩再松抱闸停止时先抱闸再断开变频器输出。如果程序里弄反了平台会先下滑一小段再被急刹非常危险。另外抱闸整流器故障、抱闸间隙过大会导致制动力不足机械要定期检查。5.3 程序逻辑正确但设备不动这种情况多半是输出信号没到变频器。PLC指示灯亮说明输出点有信号但设备不动要查中间继电器、接触器、变频器端子。有时是变频器的正转端子接了PLC的漏型输出但变频器参数设成了源型输入电平逻辑反了。三菱PLC源型/漏型可以切换西门子PLC也会遇到传感器PNP/NPN不匹配的问题调试前要统一确认。5.4 断电恢复后位置丢失如果每次断电重启后都要重新回零效率很低。建议用有断电保持功能的寄存器保存当前位置比如三菱的D512以后默认断电保持。每次设备运行过程中实时把当前位置存入保持寄存器重启后先读出来再和限位开关校验如果不一致才执行回零这样可以节省很多时间。5.5 关于PLC程序本身的一点建议现在网上能找到很多现成的立体车库PLC程序但我不建议直接拿去用。因为每个项目机械结构不同、安全等级要求不同控制逻辑必须结合实际去调整。抄来的程序如果没理解到位现场一跑就是各种诡异问题。我的做法是拿现成程序当参考把状态机、I/O表、定位逻辑重新自己写一遍写的过程中才能发现哪些地方需要特殊处理。再说一个经验立体车库的PLC程序里故障恢复策略很重要。正常流程谁都写得出来难的是设备在动作一半时报了急停恢复之后应该从哪里继续。我一般会把“当前位置”和“流程状态”绑定在一起恢复时先让所有机构回到安全位再从安全位重新执行未完成的动作而不是直接从中断点继续。这样做虽然多花一点时间但安全性和逻辑复杂度都可控。4x4立体车库的横移升降控制系统说到底就是“定位”和“互锁”这两件事。定位决定效率互锁决定安全。PLC程序只是把这两件核心任务固化下来。很多细节比如编码器干扰、抱闸时序、报警恢复不亲自做一遍项目是体会不到的。我每次调试完一个车库都会把踩过的记录整理成一份排查清单后面再碰到同类问题就能直接对着查省了不少功夫。如果你正准备做类似项目建议先把这篇文章里的I/O表和状态机自己画一遍再动手写程序思路会通很多。