简介:自动双层停车场控制设计PLC课程设计报告书面向自动化、电气控制及相关专业学生,是一份以城市停车难为背景的PLC课程设计完整参考。报告基于可编程逻辑控制器与继电器等电气元件,设计了上层3个车位可上下移动、下层2个车位可左右移动的双层立体停车场系统,覆盖任务书、总体方案、升降装置与存取车流程、系统硬件配置(含CPU、I/O模块、电源、传感器等)、梯形图程序逻辑以及机械互锁、故障保护等可靠性设计内容。控制规则阐释细致,如上层车位需按下对应车位按钮及叫车按钮下降至下层、下层车位可直接驶出,并含PLC变量分配、系统调试与结果分析等完整章节。资源为单个doc文档,共349KB,适合课程设计选题、报告撰写或控制系统方案验证使用。当前已有114人学习下载。
1. 项目背景与课程设计思路
1.1 为什么选“双层停车场”这个题目
车库控制系统几乎是PLC课程设计里最经典的一类选题,和交通灯、抢答器、机械手并列“四大金刚”。但经典归经典,想做出点含金量并不容易。选“双层停车场”作为题目,最直接的原因是它的控制逻辑足够复杂,又有明确的应用场景,不像是纯粹为了交作业而编出来的玩具项目。
先看实际需求。现在城市里停车位紧张是个普遍问题,尤其是一些老旧小区、写字楼的地下空间,土地面积固定,只能在垂直方向做文章。双层停车场就是在这种背景下出现的方案:同样的占地面积,停车数量可以翻倍。但这种结构带来一个控制难题——上层车位的车要取出来,下层通道必须先空出来,这就涉及到车辆的调度逻辑;而调度逻辑一旦做不好,就会出现“想取A车,结果上层B车的载车板挡着、下层C车又堵住了通道”这种死锁局面。
再看控制规模。一个典型的双层五车位模型(上层3个、下层2个),需要处理电机正反转、限位开关检测、光电传感器防夹、急停复位、运行状态指示、手动/自动模式切换等外围信号,I/O点数在三四十个左右,正好处于小型PLC的合理负载区间。对课程设计来说,这个复杂度既能体现出程序设计的基本功,又不会因为规模太大导致失控。
1.2 课程设计真正要考察的是什么
很多同学拿到这个题目后,第一反应是“我先把程序写出来再说”。这个顺序从根上就错了。
课程设计和工程项目的最大区别在于:工程项目只关心最终能不能运行,而课程设计考察的是从需求分析、I/O分配、控制流程设计、程序编写到调试测试的完整闭环。换句话说,评委和老师看的不是你最后那一堆梯形图能不能跑,而是你面对一个实际问题时,有没有一套科学的设计方法。
具体到双车停车场这个项目,要理清楚几个关键问题:
一是什么是系统必须保证的安全底线。载车板上下移动时如果有人或车站在下方怎么办?升降过程中突然停电怎么处理?上下层同时动作会不会发生机械碰撞?这些都是控制系统设计时需要优先回答的。
二是控制模式怎么划分。实际停车场一定有手动模式,用于调试、维护和应急操作;自动模式是日常运行的主模式。两种模式之间如何切换、切换时各设备应该处于什么状态,这些细节特别能体现设计者的工程意识。
三是故障情况怎么处理。限位开关失灵、电机过载、光电传感器被遮挡,这些都是现场可能发生的。程序里如果完全没有故障诊断逻辑,哪怕课程设计答辩能过,放到真实项目里也是不能用的。
2. 系统方案与硬件资源规划
2.1 机械结构与控制设备的对应关系
先把这个双层停车场模型的结构说清楚。比较常见的方案是上层3个车位、下层2个车位,下层正前方留一个空位作为车辆进出通道。实际上车辆出入口就在下层空位处。
这种结构的控制逻辑是这样运转的:下层车位存取车时,把车直接开进下层空位,或者把车开出下层空位,基本不涉及其他车位的联锁;上层车位存取车时,必须先判断正下方那个下层空位是否为空,如果不空,就得先把下层那辆车移到另一个空位上去——可是另一个空位可能也不空,这就涉及到多车位的联动调配。
当然,在课程设计里为了控制逻辑不过度复杂,一般会把模型简化成:上层车位正下方始终预留一个空闲车位,存取上层车时只需将下层对应车位的车辆移出到预留空位,不需要多层嵌套调度。这个简化是合理的,但要在设计说明书里明确写清楚“模型的简化前提”,否则现场调试时遇到逻辑跑不通,容易陷入死胡同。
每个车位对应一个载车板,上层载车板由升降电机驱动,下层载车板由横移电机驱动。限位开关负责检测载车板是否到达指定位置,光电开关负责检测车位上有没有车。围绕这组设备,核心控制对象就是6台电机(3台上层升降、3台下层横移,如果下方空位也算一个横移位的话),实际上需要控制的电机数量取决于模型的车位数量。
2.2 PLC选型与I/O地址分配
选型方面,课程设计用三菱FX系列或者信捷XC系列都很常见。三菱FX3U的指令体系最经典,资料多,遇到问题百度一下基本都能找到解决方案;信捷XC系列价格便宜、编程软件上手也快,很多学校实验室配的就是信捷的设备。不管用哪个品牌,核心的编程思路都是一样的,区别只在于软元件的编号方式和个别指令的写法上。
这里给出一份基于三菱FX系列(以FX3U为例)的I/O分配表,可以直接用作参考:
| 输入信号 | 地址 | 说明 | 输出信号 | 地址 | 说明 |
|---|---|---|---|---|---|
| 启动按钮 | X0 | 系统上电启动 | 上层1号电机上升 | Y0 | 控制载车板上升 |
| 停止按钮 | X1 | 系统停止运行 | 上层1号电机下降 | Y1 | 控制载车板下降 |
| 急停按钮 | X2 | 紧急停止(常闭) | 上层2号电机上升 | Y2 | 控制载车板上升 |
| 手动/自动切换 | X3 | 模式选择 | 上层2号电机下降 | Y3 | 控制载车板下降 |
| 上层1号限位上 | X4 | 上升到位检测 | 上层3号电机上升 | Y4 | 控制载车板上升 |
| 上层1号限位下 | X5 | 下降到位检测 | 上层3号电机下降 | Y5 | 控制载车板下降 |
| 上层2号限位上 | X6 | 上升到位检测 | 下层1号电机左移 | Y6 | 控制载车板横移 |
| 上层2号限位下 | X7 | 下降到位检测 | 下层1号电机右移 | Y7 | 控制载车板横移 |
| 上层3号限位上 | X10 | 上升到位检测 | 下层2号电机左移 | Y10 | 控制载车板横移 |
| 上层3号限位下 | X11 | 下降到位检测 | 下层2号电机右移 | Y11 | 控制载车板横移 |
| 下层1号限位左 | X12 | 左移到位检测 | 运行指示灯(绿色) | Y12 | 指示系统运行状态 |
| 下层1号限位右 | X13 | 右移到位检测 | 报警指示灯(红色) | Y13 | 指示故障状态 |
| 下层2号限位左 | X14 | 左移到位检测 | 蜂鸣器 | Y14 | 故障报警 |
| 下层2号限位右 | X15 | 右移到位检测 | |||
| 上层1号光电 | X16 | 1号车位有车检测 | |||
| 上层2号光电 | X17 | 2号车位有车检测 | |||
| 上层3号光电 | X20 | 3号车位有车检测 | |||
| 下层1号光电 | X21 | 下层1号车位有车检测 | |||
| 下层2号光电 | X22 | 下层2号车位有车检测 |
使用I/O分配这一步时有一个实操经验:输入输出地址的规划切忌随手乱写,一定要按照“功能分区”的原则来排布,比如所有限位开关集中在一块区域、所有电机控制输出集中在另一块区域。这样做的目的很直接——后面写程序、接线、排查故障时,顺着地址就能快速定位设备,不用来回翻图纸。
2.3 关于硬件的几个细节提醒
第一个细节是急停按钮必须用常闭触点接入PLC输入。不少初学者在这里犯迷糊:急停的逻辑是“断开即停机”,用常闭触点(NC)才是正常状态持续导通、按下时断开,这样即使按钮线路断了也能触发停机。如果用了常开触点(NO),一旦线路接触不良或者断线,系统会完全不知道急停状态,这是严重的安全隐患。
第二个细节是电机的正反转控制必须有硬件互锁。PLC程序里可以做软件互锁,但真实的继电器控制回路里,正转和反转的两个接触器如果同时吸合会造成短路,必须加接触器辅助触点组成的硬件互锁。这一点在课程设计说明书的电气原理图部分必须画清楚,很多同学程序写得没问题,但电气图里漏了互锁,答辩时照样被扣分。
第三个细节是传感器类型的选择。车位检测用光电开关没问题,但要注意对射式和反射式的区别:对射式抗干扰能力强,安装时需要发射端和接收端分居两侧;反射式安装方便,但容易受阳光、灰尘干扰。课程设计的模型环境比较理想,用反射式就够用;如果以后做真实项目,建议优先考虑对射式。
3. 控制流程设计与程序编写
3.1 从流程图到梯形图的转换思路
拿到控制需求之后,不要急着打开编程软件开始拖触点,先在纸上把控制流程图理清楚。这个习惯对课程设计尤其重要,因为在设计说明书里,流程图本身就是一个占分数很高的部分。
“存车”和“取车”两条主流程要分开设计。
存车流程的逻辑是:车辆驶入入口空位→系统检测该车位是否为空→如果下层空位上方的上层车位没有车,直接提示驾驶员停车离开→系统启动载车板升降/横移动作,把车辆送入指定车位;如果上层对应车位有车,系统需要先判断是否允许存入下层车位或选择其他空位。
取车流程与之相反:驾驶员在操作面板上选择要取的车位→系统检查该车位对应的下层通道是否空出→如果通道被占,先移走障碍车辆→载车板下降到出口位置→驾驶员取走车辆。
程序实现时,状态转移的核心思想是用“置位/复位”指令(SET/RST)配合中间继电器保存当前运行状态。举个最简单的例子:上层1号车位存车时,按下启动按钮后,程序首先置位“上层1号存车中”这个状态位,同时复位“系统空闲”状态位;当检测到上层限位开关动作、载车板到位后,再复位“存车中”状态位,同时置位“存车完成”状态位。这样整个流程就是可追踪的,任何一个环节卡住,都可以通过状态位快速判断故障点在哪里。
3.2 核心程序段示例详解
这里给出上下层联动控制中最核心的一段逻辑。场景是:下层1号车位有车,但此时需要把上层1号车位降下来取车,必须先把下层1号车位的车平移挪到下层的空位上。梯形图的思路如下:
// 判断是否满足联动条件:取上层1号车,且下层1号车位有车 LD X20 // 上层1号车位有车(光电检测) AND X21 // 下层1号车位有车(光电检测) AND X22 // 下层2号车位无车(光电检测,默认逻辑为常闭接入) AND M0 // 取车指令:上层1号 SET M10 // 置位:下层1号横移联动中 // 执行下层1号电机右移,把车送到下层2号空位 LD M10 AND X15 // 下层1号右限位未到位(常闭) AND Y7 // 右移输出未动作(互锁) OUT Y7 // 下层1号电机右移 // 右移到位后,停止横移,复位联动状态 LD M10 AND X15 // 下层1号右限位到位(常开) RST M10 RST Y7这段程序有两点值得注意。
第一,X22(下层2号车位无车检测)在程序中的用法。如果下层2号车位的光电开关是有车时输出ON,那么“无车”这个条件就要用常闭触点来写。初学者经常在这里搞混,实际调试时发现联动不动作,90%的原因就是传感器信号取反了。
第二,Y7(右移输出)在X15后面加了一个自身的常闭触点,这就是软件层面的输出互锁。虽然前面说过硬件互锁必不可少,但软件互锁同样要写,两道防线才能保证万无一失。
3.3 手动模式和自动模式的程序处理
手动模式在课程设计里常常被轻视,甚至有同学觉得“手动就是按哪个按钮哪个电机转,还用得着写程序吗”。这种想法会让程序在实际运行中出大问题。
手动模式的核心问题是操作安全性。比如维修人员正在上层载车板下面检查设备,此时有人误触了下降按钮,载车板直接压下来,后果不堪设想。所以手动模式下必须加入限位保护:只有载车板当前位置允许下降时,下降按钮才有效;在任何异常位置,上升和下降指令都需要被程序拦截。
自动模式和手动模式的切换建议用状态标志位,而不是直接在程序里用跳转指令。跳转指令(CJ)写起来简单,但程序结构会变得混乱,排查问题时很难理清逻辑。更推荐的做法是:整个程序只运行一套“主扫描逻辑”,通过M0(手动/自动标志)来控制不同分支的激活条件。手动模式下,按钮直接对应电机输出;自动模式下,按钮触发的是流程状态机,由状态机按顺序控制设备。
用状态标志位做模式切换还有一个额外的好处:手动/自动切换时不会出现“切换瞬间电机突然动作”的惊险情况。因为所有输出都以状态标志作为前置条件,切换时只要把状态标志全部复位,设备就会回到静止状态,非常安全。
4. 调试过程、常见问题与避坑经验
4.1 仿真调试和实物联调的操作要点
课程设计通常分两阶段:先在仿真软件里跑流程,再接到实验箱或实物模型上跑联调。仿真阶段主要验证程序逻辑的正确性,重点检查状态流程是否按照预期的顺序走;实物联调阶段则要处理传感器信号抖动、电机响应延迟这些真实世界的问题。
仿真阶段的一个实用技巧是强制输入(Force ON/OFF)。在编程软件里,可以手动把某个输入点强制置ON或OFF,模拟限位开关动作。比如仿真取车流程时,程序执行到“等待上层上升到位”这个状态,就用强制功能把上限位输入置ON,观察程序是否真的进入了下一个状态。这个操作看起来不起眼,但能把程序的每一个分支都测到,比单纯跑一遍完整流程高效得多。
实物联调阶段最常见的坑是传感器信号抖动。光电开关检测到车辆后,如果车辆位置刚好在传感器阈值边缘,信号会反复ON/OFF跳变。反映到程序里就是状态机反复重置,电机一会有动作一会没动作。解决办法有两种:硬件上调整传感器安装位置,避开临界区域;软件上加入延时滤波,比如要求信号持续稳定50ms以上才认为是有效信号,用定时器指令就能轻松实现。
4.2 常见故障排查实录
我自己调试这类系统时,实际遇到过不少问题,挑几个最有代表性的写在这里。
故障一:电机动作方向反了。按下“上升”按钮,载车板往下降。排除接线错误之后,最可能的原因是电机相序接反。这个问题在仿真阶段永远不会出现,所以特别容易让人忽略。排查方法很简单:手动模式点动测试,把电机接线任意两相对调即可。但要记住,调完相序之后一定要重新测试所有限位开关的逻辑,否则可能出现“程序里判断上升到位了,实际载车板其实降到底了”的错位。
故障二:系统一启动就报警,但没有任何设备动作。这个问题困扰了我挺久,后来查出来是急停按钮的常闭触点接触不良。前面说了急停要用常闭触点,但触点本身也有老化的问题。程序上可以加一个“急停复位”的逻辑:上电后先检测急停信号是否正常闭合,如果不闭合就进入报警状态而不是运行状态,这样至少能提醒操作人员去检查急停回路。
故障三:联动动作时,中间状态卡死。表现为程序运行到“下层横移中”这个状态,但电机已经到位停机了,状态标志却不复位。查下来发现是右限位开关的信号没送到PLC。用万用表量了开关本身是好的,最后发现是接线端子的螺丝松了。所以实物联调的第一步永远是检查接线端子,不要一上来就怀疑程序。“先查线、再查件、最后查程序”,这个顺序能节省大量排查时间。
4.3 PLC选型与编程环境的小结
最后回到编程环境本身。课程设计如果用三菱PLC,编程软件用GX Works2或GX Works3;如果用信捷PLC,用XDPPro。两个平台的基本指令都差不多,入门阶段把常开触点(LD/LDI)、常闭触点(AND/ANI)、输出(OUT)、置位(SET)、复位(RST)、定时器(T)、计数器(C)这几个核心指令吃透,应付这类项目绰绰有余。
顺带提一个学习建议:初学梯形图时,很多人喜欢每一步都“看图猜意思”,这是低效的。更好的方法是先理解PLC的扫描机制——程序是从上到下、从左到右循环执行的,每个扫描周期内输出状态会刷新一次。理解了扫描机制,很多看似“程序跑飞了”的问题,本质其实是扫描周期内状态更新顺序造成的误解。比如某个输出已经置位,但在同一扫描周期稍后的梯形图里又被复位了,你在监控软件里看到的就是输出永远为OFF。这种问题如果不懂扫描机制,排查起来非常痛苦。
自己做这个课程设计的时候,其实一直在反复调整程序结构。最开始用的是跳转指令把自动和手动分开写,后来发现维护太困难,改成状态标志位之后整个程序一下子就顺了。这个项目做完之后最大的收获并不是学会了更复杂的指令,而是养成了先画流程图、列I/O表、再写程序的工作顺序。这个习惯后来在完成实际工程项目时也一直沿用下来。
本文还有配套的精品资源,点击获取