1. 这类毕设为何一抓一大把,却仍值得认真做
立体车库在这几年毕业设计里的出现频率有多高?做自动化、电气、机电方向的同学,随便问一圈总能在学长手里翻出三五个PLC立体车库的压缩包。它确实是经典的工科选题:一方面PLC本身是工业控制领域绕不开的核心技能,另一方面立体车库的模型又正好是一个“麻雀虽小、五脏俱全”的自动化案例,输入输出点、电机启停、传感器检测、顺序控制、安全互锁,全都能在一台小设备上体现出来。同样用PLC做控制核心的还有四层电梯、冷库监控、大棚灌溉之类的兄弟课题,结构上都是“输入检测 + 逻辑运算 + 输出执行”这条主线。
但与此同时,这个题也是“烂大街”最严重的题,很容易变成答辩现场的负担。如果只是把群里的源码拷下来、把LW文档改个封面就交上去,导师随便问一句“为什么横移和升降要做互锁”“你这里的取车动作为什么要先上后下”,当场就会卡住。
我带毕业设计这几年,见过太多类似的场面。反过来,那些花了几天时间把源码逐行读懂、把I/O点重新列了一遍的同学,哪怕用的还是同一套代码和文档,答辩时的状态就完全不一样了。因为你懂了之后,任何问题都能回到控制逻辑本身去解释。
这篇内容不是帮你从头写一份论文,而是结合“基于PLC的立体车库自动存取系统设计”这个题目,把从需求、硬件、程序、调试到毕业论文撰写的完整链路拆开讲一遍。适合哪些人看?第一类是刚拿到课题、脑子里还一团浆糊的大四学生,第二类是手里已经有一份源码+LW文档、但不知道怎么讲清楚它的同学,第三类是打算在课设或项目制学习中快速把立体车库跑明白的初学者。
2. 硬件选型与系统架构:别一上来就写程序
2.1 先搞清楚立体车库到底是怎么动的
常见的计算机毕业设计或课程设计里的立体车库,绝大多数是升降横移式。为什么是它?因为相比垂直循环式、巷道堆垛式,升降横移式结构简单、制造成本低、控制逻辑却比较典型,很适合作为教学和设计对象。
以三层五列、15个车位加1个地面空位为例。顶层车位的载车板既能横移,也能升降;底层车位只能横移,不能升降;空位也叫平移通道,它总是预留在地面层的某一列,这样上层载车板才能通过横移,慢慢“挪”到空位正上方,再降下来。
存车过程大致是这样:车主开车到地面入口,系统检测到车辆到位后,用户按下“存车”按钮,选择目标车位号,PLC把目标车位对应的载车板横移到空位所在列的上方,升降电机把载车板下降至地面层,车辆驶入载车板,系统通过光电开关确认到位后,升降电机抬起载车板,升回目标层,完成存车。
取车过程则是反过来:用户选择要取的车位号,载车板降到地面,车辆驶离,载车板升回原位。
这个流程里必须想清楚一个问题:空位位置会不断变化。你不能像写死流程一样只用固定顺序,而是要根据当前空位在哪一列、目标车位在哪一列,动态规划横移方向和动作顺序。
2.2 PLC选型:西门子S7-200 SMART是最常见的组合
既然毕业设计用的是“源码+文档”的项目包,那大概率底层控制器是西门子S7-200 SMART。当然也有用三菱FX3U的。我这里以S7-200 SMART为例展开,因为它在国内院校和中小型设备里普及率实在太高,资料多、软件好找、下载线也便宜。
S7-200 SMART的CPU型号常用SR20或ST20,数字量输入14点、输出10点。对一套15车位立体车库来说,如果全部用按钮和指示灯做操作界面,输入输出点是够紧张但勉强够用的;如果配上触摸屏(HMI),很多操作指令走通信接口,不占物理输入点,压力会小很多。用不用触摸屏,直接影响I/O点怎么分配,所以硬件选型和接线图最好在写程序之前定下来。
有人会问:能不能用S7-1200?可以,S7-1200功能更强,价格也高,如果是学校实验室里借到的设备,用1200写这种控制完全没有问题,只是梯形图编程思路和200 SMART族差异不明显。真正需要担心的反而是仿真调试,后文我会单独讲PLC仿真器在调试时的坑。
2.3 电机、接触器和传感器怎么搭配
升降横移动作需要用电机拖动载车板。这里有两种做法。一是用交流电机加接触器控制,结构简单、成本低,通过接触器切换正反转,限位开关到位后断开控制回路。二是用变频器控制,调速平稳、启动冲击小,但成本高、接线稍微复杂。毕业设计为了突出“设计感”,很多人会写“采用变频器实现双速运行”,这个可以用来做论文加分点,但实际调试时变频器参数如果没调好,反而容易出问题。
决定电机正反转和停止的是接触器或继电器。这里有个很容易被忽略的细节:正反转切换必须有互锁。否则两个接触器同时吸合,会造成电源短路。不少人在调试中遇到过接触器“咔咔”响甚至跳闸,大概率就是互锁没做或者程序里没有延时切换。
传感部件这部分建议这么配。限位开关(行程开关)装在每个车位的载车板轨道两端,用来判断横移是否到列、升降是否到位。光电开关装在地面入口处,用于检测车辆是否完全驶入载车板。接近开关可以代替限位开关做非接触式到位检测,可靠性更好,但安装距离要求高,一般3到5毫米以内才有效。
2.4 触摸屏:做和不做差别很大
很多基础版本只配按钮和指示灯,完全用开关量完成人机交互。这样也能实现全部功能,但答辩时“人性化设计”这一项就没什么亮点。加一块7寸触摸屏可以实时显示车位占用状态、剩余车位、当前正在执行的动作、报警信息,还能直接在屏幕上选车位、切换手动和自动模式。如果你手里的源码是支持触摸屏的,那LW文档里一定要把画面设计、变量关联、通信参数这些内容写进去,这是拉开档次的关键章节。
3. 存取车控制的核心逻辑:I/O分配、互锁与状态转移
3.1 I/O分配到底怎么列
软件设计的第一步不是打开编程软件写梯形图,而是先把I/O分配表做好。我见过太多人跳过这一步,直接在程序里写地址,最后连自己都分不清哪个点是哪里的,调试的时候一个个找简直要命。
以一套15车位(三层五列)、带触摸屏和手动操作按钮的立体车库为例,I/O分配大致长这样:
| 类型 | 地址 | 说明 |
|---|---|---|
| 输入 | I0.0 | 横移左限位(列1) |
| 输入 | I0.1 | 横移右限位(列5) |
| 输入 | I0.2 | 升降上限位 |
| 输入 | I0.3 | 升降下限位 |
| 输入 | I0.4 | 车辆到位光电1 |
| 输入 | I0.5 | 车辆到位光电2 |
| 输入 | I1.0~I1.3 | 车位按钮(可用触摸屏替代) |
| 输出 | Q0.0 | 横移电机正转 |
| 输出 | Q0.1 | 横移电机反转 |
| 输出 | Q0.2 | 升降电机正转 |
| 输出 | Q0.3 | 升降电机反转 |
| 输出 | Q0.4 | 报警指示灯 |
实际项目里,规模更大的立体车库肯定不止这么少,但思路是一样的。I/O分配表的价值在于:接线图、程序注释、论文表格三处对得上,答辩时你才能底气十足地说清楚每个信号从哪里来、到哪里去。
3.2 一个完整存车流程的状态拆解
写PLC程序时,最忌讳的是在梯形图里把动作一长串平铺下来,然后靠软件里的定时器硬算时间来顺序执行。正确的做法是拆状态。存车流程可以拆成这样的状态机:
- 空闲状态:系统等待指令,载车板全部在位。
- 选位状态:用户选择目标车位,PLC判断车位是否空闲,执行腾位判断。
- 横移状态:把目标车位所在列上方的载车板横移到当前空位的上方,每到一个列限位就切换一次方向。
- 下降状态:载车板下降,直到下限位或落地传感器动作。
- 车辆等待状态:等待车辆驶入、光电检测确认到位。
- 上升状态:抬起载车板,直到上限位动作。
- 复位状态:按原路径把载车板移回目标列,整个过程结束,回到空闲等待。
每一步都必须有明确的进入条件和退出条件。这其实就是顺序功能图(SFC)的编程思想。用S7-200 SMART的Micro/WIN编程时,可以用SCR/SCRE段写顺序控制,也可以用移位寄存器或者置位复位指令做状态转移。每个状态对应一个辅助继电器,转移条件对应限位开关、按钮、定时器。
3.3 互锁条件不只是“防呆”,是安全底线
立体车库的互锁可以从三个层面看。
- 电气硬互锁:接触器控制回路里,正转接触器线圈串入反转接触器的常闭触点,物理上杜绝两个接触器同时吸合。
- PLC软互锁:梯形图里,Q0.0的输出条件永远串联Q0.1的常闭点,即使线接错也不会同时输出。
- 动作级互锁:横移动作进行时,不允许任何升降动作开始;升降动作进行时,横移必须全部停止。这个要用程序里的状态位控制,不能只靠物理触点。
如果论文里能专门画一幅互锁逻辑图,并解释为什么横移和升降不能同时执行、为什么同层车位不能同时横移,评委基本会认定你是真正理解这个项目的人。
3.4 空位跟踪:立体车库的灵魂
很多同学写程序时忽略了一个关键变量——空位在哪。升降横移式车库的空位是动态的,每次存车取车后空位位置都可能发生变化。你可以用一个数据寄存器(比如VW0)记录当前空位列号,程序每次结束后更新它。所有横移运动都围绕“把目标车位移动到空位所在列”这个目标来规划。
这个逻辑在答辩时的典型问题是:“如果目标车位在第5列,空位在第2列,程序怎么规划路径?”你只要能回答出“先判断目标列与空位列的方向关系,逐列横移直到空位列,调度指令按就近原则生成”,基本就算过关了。
4. 梯形图程序设计的实操思路
4.1 启保停电路的底层套路
PLC控制电机的梯形图基础就是启保停电路。一个正转输出,条件通常是“启动按钮常开并联Q点自身常开(自保)”加“停止按钮常闭串联”加“反转输出的常闭串入(互锁)”。这套结构看着简单,但很多运行事故都是从“自保少了一条”“互锁串错了位置”开始出的。
实际写的时候,建议把每一台电机的正转、反转、停止做成标准子程序或标准模板,注释写清楚。这样后面加车位数量、加新列数,只需要复制修改,不用一行行重画。
4.2 用置位复位代替一路自锁到底
做包含多动作顺序控制的场合,不建议所有输出都用启保停。原因很简单:启保停电路天然是“保持型”的,某个输出一旦接通,就会一直保持,直到被某个断开条件打断。在顺序控制里,如果前一个动作完成后输出没有及时复位,后一个动作就可能和它打架。
更稳妥的方式是导入“置位(S)/复位(R)”思路:进入某个状态时置位该状态的输出,满足退出条件时先复位旧状态再置位新状态。这样状态与状态之间是互斥的,程序读起来也更像状态图。
比如横移电机的控制,可以用两个辅助继电器M0.1(横移中)、M0.2(升降中)来表示动作类型。Q0.0等于M0.1与方向信号与互锁条件。只要M0.1和M0.2不会同时为1,输出就不会冲突。
4.3 定位:靠限位开关还是靠编码器
立体车库最常见的定位方式是行程开关或限位开关。载车板横移到某一列时,会挤压安装在该列的限位开关,输入点接通,PLC确认到位并停止电机。这种方式优点是便宜可靠,缺点是“有没有到位”只有两个结果,没有中间过程信息,链条松动或惯性冲过头时定位精度就会下降。
追求更稳的定位可以加编码器,通过高速计数器统计脉冲数,算出当前位置。S7-200 SMART的高速计数器指令(HDEF、HSC)可以用来接收编码器AB相脉冲。如果你设计文档里写“采用旋转编码器实现位置闭环”,这是明显加分项,但调试工作量也会上一个档次。代码仓里的源码如果只是限位开关版本,我觉得没必要硬改成编码器,选一种方案讲透即可。
4.4 定时器和计数器:别让延时成为安全隐患
在车库控制里,定时器主要用在“等待稳定”和“超时报警”两类场景。
传感器刚接通时,信号可能有抖动,通常加100到300毫秒的滤波时间。车辆驶入载车板后,光电信号不能只凭“有车”立即反应,应该持续保持500毫秒以上才确认到位,避免车没停稳就抬升。所有动作都要配超时保护,比如升降电机运转超过20秒还没到限位,立即停机和报警。这个超时时间写多少,要结合电机的实际运行速度和轨道高度计算,不能拍脑袋。
计数器一般用在累计存取次数和统计车位使用次数上,这类数据可以传给触摸屏做运行统计,也是论文“系统功能扩展”部分的好素材。
5. 调试现场最容易翻车的几个点
5.1 行程开关位置没调好:定位偏差的元凶
装行程开关时,开关触点的动作点必须和载车板的机械停止位置对应。实际中常见的翻车场景是:横移电机已经到了位置,但PLC没收到信号,载车板直接冲向挡块,电机卡死,电流增大,过载保护跳闸。这个问题十有八九是开关安装位置靠后或者机械连接松动。
我的建议是,在机械调试阶段先用手动模式逐点确认每个限位开关的触发情况,再用Micro/WIN的状态表把每个输入点的当前值看一遍,确认无误后再进自动模式。永远不要在自动模式下测试一个还没验证过的位置传感器。
5.2 传感器信号抖动:加滤波和去抖
光电开关检测车辆时,车辆缓慢移动、车体反光不均、阳光直射都会导致信号反复跳变。如果程序没有滤波,PLC可能把同一辆车判断成“几次来到位又几次离开”,最终状态错乱。
解决办法有硬件和软件两个层面。硬件层:光电开关选对射型或反射板型,安装时避开强光和尾气。软件层:用定时器做延时确认,信号保持200到500毫秒以上才认为是有效信号。我在调试时还会在程序里加一个“车辆到位锁定”:一旦确认到位,在PLC复位前不再接受该信号的二次变化。
5.3 仿真没问题,下载到实际PLC就跑不起来
这是很多刚接触PLC的同学会遇到的怪事。程序在仿真器里模拟运行一切正常,一上真机就动作乱跳,甚至刚运行时电机就“小抖”一下。
原因通常有两类。第一类是I/O地址和接线不匹配,仿真时不关心外部接线,真机接线一错就全乱套。第二类是输出模块的驱动能力问题,PLC晶体管输出或继电器输出直接驱动接触器线圈时,电流可能不够或产生浪涌,干扰PLC内部信号。解决方法是输出端加中间继电器再驱动接触器,同时线圈两端并接吸收二极管或RC吸收电路。
顺带提一句,网上经常有人问“PLC仿真器启动实例失败,而且没有任何报错”,这类问题在S7-1200/1500仿真时很常见,多半和许可证、系统兼容性、防火墙有关。如果你做毕业设计时没有物理PLC,只能靠仿真验证,建议优先用和PLC型号匹配的仿真器版本,同时把杀毒软件和防火墙对软件的拦截排除掉。但说到底,真机和仿真的区别是电气的物理特性和抗干扰能力,仿真验证只是一个辅助手段,不要迷信它。
5.4 机械联锁与程序联锁,缺一不可
有一种情况很隐蔽:程序里做了互锁,但机械结构本身没有限位挡块。比如升降电机正转接触器在程序里被互锁住了,但因为继电器常闭触点损坏,接触器异常吸合,程序里的“软互锁”并不能物理上阻止它。所以正规立体车库设计必须有机械防坠落装置、行程开关硬限位、热继电器过载保护等多重安全机制。
如果你论文里写到安全保护,至少要覆盖这几块:防坠装置、上限位和下限位、过载保护、紧急停止按钮、声光报警。这五个点全部写清楚,安全章节的分就稳了。
6. 用“源码+LW文档”怎么把论文写出彩
6.1 论文框架直接对应当前的工程实现
拿到一份“源码+LW文档”压缩包的时候,切记不要直接照抄。LW文档的说法,在各校毕业设计里基本对应的是论文文档。一份标准的PLC立体车库论文,章节结构是这样展开的:
- 绪论:写立体车库出现的背景,城市停车难、自动化立体仓库发展趋势,引出PLC控制的必要性。
- 总体方案设计:对比固定式、垂直循环式、升降横移式等几种方案的优劣,论证选择升降横移式的理由。
- 硬件设计:给出车库结构图、电气原理图、I/O分配表、设备选型清单。
- 软件设计:程序流程图、状态转移图、梯形图或指令表,重点说明互锁、空位跟踪、存取流程。
- 系统调试与仿真:写调试环境、遇到的问题、解决方法和结果。
- 总结与展望:用一两句客观的话收尾。
6.2 关键章节怎么写得比别人详实
很多同学的论文被导师说“空”,问题出在把软件设计章节写成了“程序实现了存取功能”六个字。下次写论文时,我建议用“表+图+流程说明”组合拳。
先画清流程图:用户操作到PLC判断,再到输出动作、传感器反馈、状态切换,一条线串下来。再贴关键梯形图:不要贴全篇几十个网络,而是选互锁段、位置检测段、状态转移段各一个,再配逐段文字解释。最后写清一个场景:拿“存车到3列2层”为例,把每个状态的变化、每个输出点的翻转、每个限位信号的触发写成一段完整的时序描述。
一个能完整把“从按钮按下到载车板归位”的所有过程讲清楚的人,写出来的论文绝不会显得单薄。
6.3 答辩问答里最容易被追问的五个问题
整理一下历年学生被追问比较多的方向,提前准备好了就好办:
- 你选的三层五列,空位怎么确定?空位位置变化后程序里怎么跟踪?
- 横移和升降为什么不能同时动作?你的互锁是软件还是硬件实现?
- 如果横移限位开关坏了,会有什么后果?你的程序里有没有故障检测?
- 你的系统是自动模式,有没有手动模式?发生报警时怎么恢复?
- 触摸屏(如果有)和PLC之间是什么通信协议?参数怎么设置?
最后一个问题要特别留个心眼。很多同学只会在触摸屏里放几个按钮,完全没看过通信配置。如果你在文档里写了组态监控,至少要把S7-200 SMART和触摸屏的通信方式(通常是以太网或RS-485串口)说清楚。
6.4 一个最容易被源码包坑住的地方
源码包里的梯形图程序,十有八九是别人调好的一套通用版本。你换了车库层数、列数、车位编号之后,很多程序里的判断条件就未必对得上。拿过来第一件事不是打开看看就关掉,而是必须做三件事:
- 把所有符号表或变量表重新命名成你的I/O分配表。
- 把所有程序注释重新写一遍。
- 手动跑一遍“存车—取车—复位”全流程,确认每个动作和你论文里写的流程完全一致。
如果你连这些都没做,答辩时老师随手从程序里挑一个触点问你“这个I0.2是什么”,你看着和论文不一致的注释只会当场卡壳。反过来,只要你把这些准备工作都做了,源码包其实是很宝贵的参考资料,能帮你快速理解成熟项目的完整结构。
带毕设这几年,我慢慢发现一件事:真正区分同学水平的,从来不是题目选得多么新鲜,而是有没有把细节吃透。如果你手头正好有PLC立体车库存取系统的源码和LW文档,建议按上面的顺序重走一遍,从硬件选型看到I/O分配,再从状态转移看到安全设计。整个流程走完,答辩时不管从哪个角度问,你都能回到两条主线上:这个设备实际怎么动,控制程序怎么保证它安全地动。到那时你会发现,毕业设计留给你的不是一份过期压缩包,而是对工业控制的一套完整理解。