资讯动态

三列三层升降横移立体车库PLC控制系统设计与调试实战

发布时间:2026/9/26 21:34:19 来源:尧图企业网站定制
前阵子做了一套三列三层3×3升降横移立体车库的控制系统从PLC选型、I/O分配、主回路设计到梯形图程序、接线图、组态画面全流程自己把关。这套设备单独看每一个动作都不难升降到位、横移到位、限位停、信号灯指示。但真正做起来才发现难点集中在两件事上——8个车位之间的调度避让顺序怎么编排以及升降和横移之间怎么保证绝对互锁。这篇文章就把这套系统从机械动作逻辑、电气设计、梯形图程序到组态画面完整拆一遍给自动化专业的学生、刚入行的PLC工程师以及做停车设备成套项目的朋友做个参考。1. 先把调度想清楚三列三层车库是怎么“横移避让”的1.1 车位布局与空位原则升降横移式立体车库的机械结构决定了它的控制逻辑所以先花点时间把车库的“玩法”讲清楚。我做的这套是三列三层从左到右是1、2、3列从下到上是1、2、3层。底层一共有3个位置但2列位置留出来作为引车口和升降井所以底层只能停2辆车中层有3个载车板既能横移也能升降顶层有3个载车板只能升降不能横移。总车位是3×3-18个。很多没接触过这种设备的人会以为升降横移就是“把载车板抬起来再挪过去”实际上控制逻辑的关键在于横移的目的是让出垂直通道升降只能等通道贯通之后才能做。上层取车时必须先把同一列中层载车板横移出去让出一个空位顶层载车板才能降到底层地面如果底层那一列还有车还得先把底层的车挪走。整套系统本质上就是在管理一个“空位”在9个栅格里的迁移路径。这里我用字母P加列号层号来标记载车板比如P31就是顶层1列的那块板。注意载车板是一个机械平台平台上有没有车是另一回事控制程序必须区分“空板”和“有车”两种状态。1.2 一个完整的取车动作序列我拿一个具体工况来演示控制逻辑到底怎么编排。假设当前车库状态是底层P11在1列有车2列是空的引车口P13在3列有车中层P21在1列有车P22在2列有车P23在3列是空板顶层P31在1列有车P32在2列有车P33在3列有车现在要取顶层1列的车也就是P31上那辆车。手动模拟一遍动作顺序步骤动作目的1P22从2列横移到3列因为P23是空板中层3列有空位把2列让出来2P21从1列横移到2列1列中层空出形成垂直通道3P11从底层1列横移到2列1列底层也让出来保证顶层板能落到地面4P31载着车从顶层1列下降到底层1列司机从地面把车开走5司机确认取车完成PLC收到确认信号6P31空板从底层1列上升到顶层1列载车板复位7P21从中层2列回横移到1列中层复位8P22从中层3列回横移到2列中层全部复位9P11从底层2列回横移到1列底层复位这套序列看起来不复杂但它是“当前状态恰好这样”才成立的。如果车库是满库8辆车全部停满取顶层任意一个位置中间至少要经历五六次空位迁移而且每次迁移的目标列、移动方向都不一样。这就是为什么我不建议用“按几个按钮固定时序”去写梯形图而是要在PLC里维护一张车位状态表由程序根据当前状态实时生成动作序列。1.3 存车流程与空板调度存车流程和取车流程是对称的。如果底层有空车位司机直接把车开进底层空位光电开关检测到车到位存车就完成了。如果底层已满、上层有空位系统要先找一块“空载车板”把它调度到引车口位置并降下来司机把车开上去然后载车板载着车上升再横移回到原来的列。这里有一个容易忽略的点存车时调度的不是“空车位”而是“空载车板”。比如顶层3列是空板要把这块板从顶层3列降下来首先得检查中层3列有没有板挡住如果中层3列被占了那还得先把中层板挪走。所以空板调度本质上和取车一样也是空位迁移问题只不过目标位的“板”是空的。手动模式必须保留。现场调试时不可能一上来就全自动跑要能通过手动按钮单独控制每台电机升降、横移一点一点对限位、对机械位置。我习惯把手动模式做成“点动互锁”确保调试期间不会把载车板撞坏。2. 控制系统总体设计与I/O分配2.1 PLC选型与扩展配置这套系统电机数量不少中间层3台升降电机加3台横移电机顶层3台升降电机底层2台横移电机总共11台电机。每台电机都要正反转控制光电机输出就得22个点再加上信号灯、蜂鸣器输出点至少26个。输入侧更吃紧每台升降电机的上下限位要2个点6台就是12个横移到位信号每层3个位置底层加中层共6个松链检测6个车辆检测光电8个再加上急停、复位、模式选择等总共将近40个输入点。综合考虑性价比和组态兼容性我选的是西门子S7-200 SMART CPU SR40加一块EM DR32扩展模块。CPU自带24DI/16DO扩展模块再给16DI/16DO加起来40DI/32DO留了余量。如果业务方指定三菱FX3U也完全可以做但后面接组态屏时建议选带以太网口的型号通讯省事很多。2.2 输入信号分配表输入点我按照“安全信号优先、按机构分区”的原则分配这样查故障时不用翻遍整个表顺着机构找就行。下面是主要输入点地址信号名说明I0.0急停常闭触点硬件回路和PLC同时检测I0.1自动/手动切换1为自动I0.2故障复位按钮上升沿有效I0.3存车请求按钮I0.4取车确认司机取车完成后确认I0.5 ~ I2.06台升降电机上下限位每台2个点先升后降I2.1 ~ I2.3底层1/2/3列横移到位3个位置各1个接近开关I2.4 ~ I2.6中层1/2/3列横移到位3个位置各1个接近开关I2.7 ~ I3.46台升降机构松链开关链松立即停升降I3.5 ~ I4.48个车位车辆检测光电P11、P13、P21、P22、P23、P31、P32、P33I4.5引车口有车检测防止载车板下降时有车进入这里要特别说明横移到位的接法。底层的横移轨道是整条贯通的P11和P13只能在1列到2列、3列到2列之间移动不会互相穿越所以底层只需要在3个列位置装接近开关。中层同理每列一个位置开关。当某台横移电机动作时哪个位置开关先接通PLC就知道这台板现在到哪一列了。2.3 输出信号与主回路接线要点输出点主要分三块升降电机正反转、横移电机正反转、指示灯和蜂鸣器。我按以下方式分配地址信号名说明Q0.0 ~ Q1.36台升降电机正反转中1、中2、中3、顶1、顶2、顶3每台两路Q1.4 ~ Q2.55台横移电机正反转底1、底3、中1、中2、中3每台两路Q2.6满位指示灯库满时亮Q2.7故障指示灯任何故障自锁时亮Q3.0蜂鸣器故障报警Q3.1运行指示灯PLC运行正常时亮主回路设计上每台电机前面要单独配一个断路器QF和热继电器FR接触器用正反转一组。热继电器的常闭触点串进对应接触器的线圈回路同时辅助触点引到PLC输入作为故障检测信号。升降电机的电磁抱闸线圈最好并接在电机接线端或者由接触器的辅助触点控制目的是保证断电瞬间抱闸立即动作不能依赖PLC程序来抱闸。接线图里最关键的是两部分一是急停回路急停按钮的常闭点要串在所有接触器线圈的公共供电回路上按下急停时硬件直接切电不经过PLC二是正反转接触器的硬件互锁KM正转线圈串KM反转常闭触点KM反转线圈串KM正转常闭触点防止两个接触器同时吸合造成相间短路。PLC输出端我习惯全部通过中间继电器驱动接触器线圈不要直接用继电器输出点去带220V线圈。原因很简单S7-200 SMART的继电器输出触点容量有限中间继电器既能扩容又能在触点粘连或外部短路时保护PLC本体。3. 梯形图程序核心逻辑从“能转”到“靠得住”3.1 公共使能与软件互锁梯形图画起来其实是三层结构最底层是公共使能、故障封锁、急停处理中间层是手动点动逻辑和自动状态机输出的“方向允许”信号最上层才是各电机正反转输出。公共使能我用一个M0.0表示当急停未按下、无故障自锁、且系统处于允许运行状态时置1。故障封锁用M0.1表示一旦松链、热继电器动作或超时保护触发M0.1置1所有电机输出全部被切断只能人工复位。以中层1列升降电机正转上升为例输出条件大概是LD M0.0 // 公共使能 AN M0.1 // 无故障封锁 AN Q0.1 // 软件互锁不与反转同时输出 AN I0.5 // 上限位已到禁止继续上升 A M10.0 // 方向允许由手动或自动步骤给出 Q0.0 // 中1上升输出反转下降同理只不过互锁对象、限位点和方向允许信号都对应变化。这里M10.0这类“方向允许”信号是关键它把“要不要动”和“能不能动”分开了。手动模式下方向允许由按钮按下产生自动模式下方向允许由状态机的当前步骤产生。这样无论手动自动最终都走同一套输出保护逻辑不会出现两套程序两种行为。3.2 车位状态表调度的数据基础自动逻辑的核心不是写满几十个动作网络而是维护一张车位状态表。我在PLC数据区定义VB1000到VB1008对应9个栅格。每个字节含义约定为0空位没有载车板或该栅格为空1空载车板在位2载车板上有车每次存取车完成后刷新这张表每次调度动作前查询这张表。比如判断“中层1列是否让空”就是用LDB指令去比较VB1003的值是否等于0。S7-200 SMART指令写法如下LDW VW2000, 40 // 当前步骤为40 LDB VB1003, 0 // 中层1列为空 LDB VB1000, 0 // 底层1列为空 M10.1 // 允许顶1下降这张表是所有调度判断的公共数据来源比在梯形图里堆几百个自锁互锁网络清爽得多。车位状态表也不只在程序内部用后面组态画面显示“哪个位置有车、哪个位置空着”直接读这张表就行相当于一份共享的“数据库”。3.3 自动取车的步进状态机自动流程我用一个步骤寄存器VW2000配合状态机方式编写。整体步骤划分如下步骤含义进入下一级的条件0空闲收到取车请求20避让调度目标列中层已空30底层让位目标列底层已空40目标板下降下限位到位50等待司机取车取车确认按钮60空板上升上限位到位70复位回位所有平台回到原位80完成清除取车请求每个步骤就是一个网络组输出条件加上一步的完成条件。比如步骤40到50的跳转LDW VW2000, 40 A I1.4 // 顶1下限位到位 MOVW 50, VW2000 // 步骤推进状态机的好处是任何时候都知道系统“走到哪一步了”调试时看VW2000的当前值再对照图纸和限位信号几秒钟就能判断卡在哪。如果用一个大的梯形图网络把整个流程串成一根链条中间某个限位闪一下整个逻辑就可能乱掉。这里要多说一句同一时刻只允许一个运动轴动作。这是我做这类项目最坚持的原则。11台电机任何时候只给一台发正转或反转指令虽然会让调度时间边长但互锁关系变得极其简单而且现场绝对安全。两个轴同时动出现意外后排查难度是几何级数上升的。3.4 松链、超时与故障自锁升降机构安全方面除了上下限位我还加了松链检测。链条一旦松脱松链开关动作立即切断该升降电机的输出并自锁故障。这类故障不允许自动恢复必须人工到场处理。超时保护也很重要每次升降或横移动作从发出指令开始计时超过15秒还没到位PLC直接判定限位失效或机械卡死置故障、停电机、响蜂鸣器。否则限位开关坏了之后电机会带着载车板一直冲顶或冲底那种事故在停车设备里是最致命的。故障自锁用M0.1实现任何故障触发后M0.1保持1公共使能M0.0被断开。现场人员处理完故障按复位按钮I0.2清除M0.1后才能重新运行。所有故障记录我还顺便写进几个VW寄存器方便组态画面显示也方便事后查历史。4. 组态画面把车位状态变成一眼看懂的操作台4.1 组态屏选型与通讯配置组态屏我用的MCGS TPC7062TD7英寸触摸屏通过以太网线和S7-200 SMART连接。现场设置IP时要记住S7-200 SMART CPU默认IP是192.168.2.1组态前必须先把PLC的IP改成项目网段比如192.168.0.10触摸屏设成192.168.0.20子网掩码255.255.255.0然后用网线直连或小交换机连起来。MCGS设备窗口里新建“西门子S7-200(TCP)”驱动填入PLC的IP地址采集周期设500ms左右。采集周期不要设太短100ms甚至几十ms看起来“更实时”实际上以太网交互频繁反而容易把通讯搞不稳定而且触摸屏画面根本不需要那么高的刷新率。4.2 变量表与数据流设计组态画面和PLC之间的数据流一定要简单清晰。我的变量表大概是这样的组态变量PLC地址用途急停状态I0.0显示急停是否按下运行模式I0.1显示自动/手动车位1状态VB1000底10空/1板/2车车位2状态VB1001底2引车口车位3状态VB1002底3车位4状态VB1003中1车位5状态VB1004中2车位6状态VB1005中3车位7状态VB1006顶1车位8状态VB1007顶2车位9状态VB1008顶3取车请求M11.0画面触发取车取车目标位VW1100写入目标车位编号当前步骤VW2000调试显示当前流程步骤通讯心跳M1.0PLC每秒翻转画面检测通讯状态我特别跟电气配合的人强调过组态画面只负责“显示请求”不负责“决策”。操作员在画面上点“取车”HMI只置位一个请求变量并写入目标车位号然后由PLC去判断当前状态、编排动作、输出执行。这样即使组态屏死机、通讯断线PLC也能保证设备安全停下不会因为画面“卡住”导致误动作。4.3 页面结构与动画实现画面我分三个页面。主监控页是3×3车位俯视图每个栅格用一个矩形表示矩形颜色绑定车位状态变量空栅格显示绿色空载车板显示灰色有车显示红色。再用一个小车图标把“可见度”绑定到“车位状态2”的条件这样有车时画面里会多出一辆小车图标非常直观。操作页放存车、取车按钮和车位选择按钮组下面放紧急复位、蜂鸣器消音。报警页显示故障代码、松链状态、超时记录。MCGS的报警窗口本身支持历史记录配置好后掉电不丢这个功能一定要用起来。动画方面升降和横移过程我做了简单的移动动画但幅度很小纯粹是给操作员一个“系统正在动”的视觉反馈不追求和实际位置完全同步。真正的位置判断以PLC限位信号和状态表为准画面动画如果做得太“逼真”反而可能误导操作员在通讯延迟时做出错误判断。4.4 通讯断线检测与防误触触摸屏通讯断线是个很隐蔽的问题画面定住了操作员可能没注意到等半天发现系统没反应才知道出了问题。我在PLC里做一个每秒翻转的M1.0心跳变量组态画面读这个变量如果超过3秒没有变化就弹出“通讯断开”提示框并禁止操作按钮。这个小功能看起来不起眼现场用起来非常救命。另外操作页的取车按钮我建议做成“选择车位号-再按启动”的两步操作不要做成一键取车。一键操作一旦误触载车板就会开始跑操作员根本来不及反应。两步操作能拦住大多数误触。5. 现场调试踩过的坑与处理经验5.1 限位抖动导致载车板“点头”第一次联调时发现一个怪现象横移电机动作到位后接触器偶尔会“啪”一声自己再吸合一下载车板跟着抖一下。查了半天根子在限位开关上。载车板到位时撞块刚好撞到限位但机械冲击会让触点抖动几下PLC扫描速度很快抖动信号被当成了一次新的到位又离开输出点跟着抖动。处理办法有两个一是把PLC系统块里的数字输入滤波调到6.4ms滤掉短于该时间的抖动二是在梯形图里对关键到位信号做100ms延时确认。注意输入滤波不要设太大否则真正需要快速响应的急停信号也会被延迟。5.2 接触器粘连必须硬件互锁做正反转控制时软件互锁再严密也替代不了硬件互锁。我遇到过正转接触器触点粘连的情况如果没有硬件上串接反转接触器的常闭触点反转指令一给直接就相间短路轻则跳闸重则烧接触器。所以接触器线圈回路里的硬件互锁必须保留这是安全底线。我还在每个接触器上贴了机构编号标签查线、换件时不用对着图纸猜。5.3 24V供电与电磁干扰调试时PLC的DO指示灯偶尔莫名其妙亮一下查到最后是24V开关电源和接触器线圈共用了一个母排接触器吸合瞬间压降和干扰串进了PLC电源。后来单独给PLC和控制回路配了带滤波的24V开关电源动力线、信号线分槽敷设干扰问题基本消失。如果现场有变频器变频器到电机的线必须用屏蔽电缆屏蔽层单端接地信号线尽量远离变频器本体。5.4 组态画面通讯掉线MCGS通讯掉线这个问题十次有八次不是软件问题而是物理层问题。我碰到过网线接头压接不牢、水晶头氧化、和动力线捆在一起被干扰等情况。排查方法很土但很有效先把触摸屏和PLC放在一起用一根短网线直连测试排除物理链路后再考虑IP配置和采集周期。确认是现场布线问题后全部换成屏蔽网线通讯状态再没出过乱子。5.5 调试阶段多做“纸上推演”最后说个经验接线之前先把所有载车板可能的状态组合列一遍哪怕只是在纸上画个表把“空位在哪、目标板在哪、避让路径是什么”推演一遍。我这次项目里最耗时的不是写梯形图而是花了两天时间把满库取车、满库存车、半库取车等场景一个个推演确认动作序列里不会出现两台板同时要进同一个栅格的情况。组态画面里的调试页也很有用把所有限位输入、状态表字节、步骤寄存器都拉出来显示现场调一次就能看清楚全部逻辑状态。这套系统从设计到调试跑通大概花了两周多最后稳定运行的那一刻我最大的体会是立体车库的控制系统真正的技术含量不在你会写多少条指令而在于调度逻辑的完整性和安全冗余的层次感。先把状态表和互锁想透梯形图反而只是体力活。后续如果想扩展加车牌识别、预约取车、远程监控都是顺理成章的事但最底层这套状态表加状态机的骨架基本不用动。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑