1. 先说点实在的:这个选题为什么值得做
每年到了一定时候,总有人问我“毕设到底做什么好”。平台开发烂大街,爬虫又撑不起篇幅,搞深度学习没机器。我一直觉得,基于PLC的立体车库自动存取系统是数一数二的好选题。它硬核但难度可控,工程量足但边界清楚,有硬件有软件有上位机有通信,还能扯上物联网和智慧停车,答辩的时候东西够讲,工作量考官也看得见。
这个系统说白了就是用PLC当大脑,控制电机、传感器、限位开关这些部件,把车自动停进立体车库的指定车位,取车的时候再自动把车调出来。整个过程不靠人,刷卡或者按键一触发,PLC按预置的逻辑把横移、升降、定位这些动作一串起来完事。
从我实际带过学生的经验看,这个题目最大的优势在于:不需要真的造一个库,用组态软件可以虚拟仿真,学校有条件就加一套小型实训台,没有也能出效果。源码能跑、文档能写、界面能看、逻辑能讲,四件套齐了,这就是一个非常合格的计算机类或自动化类毕业设计。而且无论你学的是三菱PLC、西门子S7-200 SMART,还是用组态王、MCGS做上位机,方法论是通用的,换品牌也只是换个编程工具而已。
这篇文章我把从硬件选型到软件调试的完整链路拆开讲,把我在实际调试中踩过的坑、学生最容易犯的错误、答辩时老师最爱问的点全部整理出来。不管你是正在为选题发愁,还是程序跑到一半卡住,这篇文章应该都有你需要的答案。
2. 整体设计思路:先把车库的“骨架”弄清楚
2.1 立体车库的种类与选型逻辑
立体车库不是只有一种。常见的有升降横移式、垂直循环式、巷道堆垛式、平面移动式等。毕业设计里最常见、最适合用PLC来控制的,是升降横移式,没有之一。
为什么选它?原因很朴素:结构直观,三言两语能讲清楚;控制逻辑清晰,不外乎“载车板横移—升降机上下—定位—存取车”这几个动作;I/O点数适中,选一台小型PLC完全够用,不会因为点位不够被评审老师质疑;制造成本低,实训台做得起,即便只做仿真方案也不丢工作量。
举个例子,一个典型的3层5列升降横移式立体车库,地上三层,一排5个车位,底层留一个空位作为车辆移动的“空档”,中层和上层各5个,顶层车位固定不动,中下层车位可以横移。总共能停11辆车。这样一个车库用一台三菱FX3U或西门子S7-200 SMART就能全部搞定,I/O点数大概就在40到70个之间(根据你预留的传感器余量不同有浮动),性价比非常高。
你要是用垂直循环式也行,但那个结构复杂,涉及连续旋转定位和编码器反馈,对本科毕设来说有点过深了,调试难度大,我一般不推荐。一是程序写起来费劲,二是真出问题排查要花太久时间,三是答辩时很难把原理讲得让老师满意。除非你特别想挑战自己,否则不碰。
2.2 系统组成:不只是“写个PLC程序”的事
这个系统拆开来看,分四层。
第一层是传感检测层。包括车辆检测传感器(用来判断车位有没有车)、限位开关(用来确定载车板和升降机是否到了位)、位置编码器(用来精确读取横移和升降的行程位置)。在简易设计里,前两个已经够用,编码器看预算和实际需求加。
第二层是执行控制层。就是PLC,这是整个系统的大脑。PLC接收传感器信号,按照用户预先写好的程序,调用电机的启停、方向切换等动作,实现存取车逻辑。
第三层是执行机构层。也就是电机和传动系统。横移电机负责载车板在水平方向的移动,升降电机负责让载车板在垂直方向上到达对应楼层,电磁抱闸负责电机断电后锁住位置防止滑落。
第四层是人机交互层。最常见的方式是触摸屏或工控机组态画面,操作人员按“存车”或“取车”按钮,系统自动完成后续动作,同时在组态界面上显示车位占用情况、设备运行状态、故障报警等。
这四层就是整个物理架构。对于毕业设计而言,硬件层不一定要真的全部搭出来,用组态软件做仿真,用指示灯模拟电机状态也行。但逻辑上必须完整,这一点在写文档时要特别注意,否则论文结构会很单薄。
2.3 控制流程:存车和取车到底经历了什么
我建议所有做这个题目的同学,第一步先把控制流程图手动画出来。不要一上来就写程序,你逻辑不通,后面全得推倒重来。
存车流程是这样的:
车辆驶入入口,入口对射传感器检测到车到位。这时你按“存车”按钮,系统先判断哪里有空车位。找空车位的逻辑是:从离入口最近的底层车位开始找,找不到就找中层的可横移车位,再找不到就找顶层车位。因为顶层车位需要升降机配合,所以它优先级最低。
确定目标车位后,如果是底层空位且正好在入口位,直接开进车位,传感器确认车停好,存车结束。如果要借助升降机,这就有讲究了:先把目标车位所在层清空,说白了就是把当前层挡住路径的载车板全部横移让开,让升降机有通道能够到达目标车位,再把载车板移动过来或把车开上升降机,升降机上升到目标层,横移入位,传感器确认到位,停车。系统更新车位状态,存车完成。
取车流程是反过来:
用户输入车位号或扫码,系统先判断目标车位是否在某层非顶层。如果目标车位在底层可横移位置,PLC直接控制横移电机,把对应的载车板移到出入口位置,用户把车开走,完成取车。如果目标车在顶层或中层,PLC需要先把目标车位那一层的载车板横移,让出升降通道,然后升降机上升到指定层,把载车板平移到升降机上,再降到入口层,横移出库,车辆开走。
这里有一个经常被忽略的点:取车跟存车用的优先级逻辑恰恰相反。取车找路径的时候,要找的是“让出通道的最优方案”,不是“直接奔着目标去”。这个顺序写错了,程序在特定布局下就会卡死。很多同学做仿真时发现某个车位取不出来,十有八九就是这里出了问题。
2.4 为什么核心控制选PLC而不是单片机
有人会问:我学的是计算机/电子方向,用STM32做控制不是显得更“高级”吗?
我先说结论,再用实际经验打脸。用PLC做毕业设计,是性价比最高的选择。
PLC的梯形图编程对电气控制的表达是天然的,学起来一个礼拜就能上手。老师不用花大量时间看你代码,直接看图,可读性极强,这对答辩是极大的加分项。第二个核心原因是抗干扰能力。立体车库的现场环境里,电机启停会产生很强的电磁干扰,PLC比单片机在这种环境下稳定得多。虽然你做的是仿真实验,但这个论点写进论文里依然是成立的,而且是站得住的工程判断。
第三个原因是工时可控、出错率低。使用单片机做系统,你得另外设计电路,排查掉通讯问题,再缕一下传感器信号处理,时间可能得翻一倍。而PLC有现成的编程软件,有仿真,有组态接口,基本上一个人两个月能搞完整个项目。
当然,单片机路线也不是不行,如果你有一个自动化比赛的项目基础,里面用了STM32作为控制核心,电机驱动、编码器反馈都有现成代码可以改,那用单片机也是可以的。但对于绝大多数人来说,PLC这个方案容错率高得多。
3. 硬件选型要点与参数配置:别在这个环节给自己埋雷
3.1 PLC选型:I/O点数怎么算才不浪费
这是很多同学第一次接触工程选型最容易犯迷糊的地方。I/O点数不是拍脑袋定的,有一个基本的估算套路。
我以最常见的3层5列、共11个车位的升降横移式方案为例来算一遍。
输入信号方面:每个车位需要一个车辆检测信号(用来检测该车位是否有车),底层5个车位各需要一个横移限位信号,中层5个车位各需要一个横移限位信号,升降机需要上限位、下限位以及每个楼层的中位定位信号(3个),入口需要一个对射传感器,紧急停止至少1个,手动操作的时候可能还要预备几个按钮。算下来输入点大约在11 + 10 + 3 + 1 + 1 + 3 = 29个左右,再加上冗余余量,凑40个输入点比较稳妥。
输出信号方面:每个横移电机需要正转和反转两个方向控制,底层和中层各有5个横移电机,这就是20个点。升降电机有升、降两个方向控制,加2个点,电磁抱闸需要2个点,声光报警需要1个点,三色指示灯(红黄绿)各一个,3个点。再加上PLC和上位机通讯预留,输出点位约30个左右,加冗余留32~40个。
所以选型的时候,输入40点、输出40点的组合完全够用,还带有一点余量。三菱FX3U-64MR或者西门子S7-200 SMART SR60,这种级别的完全能胜任。如果你是纯仿真,没有实体I/O,你可以在组态软件和PLC仿真器里把点数照样配齐,按同一套分配表来走,这样仿真做出来的逻辑跟实物是一致的,逻辑上完全说得通。
3.2 传感器选型:别小看限位开关的作用
定位问题在整个系统中是“生死线”。横移没到位就启动升降,或者升降没到位就开始横移,轻则卡住链条,重则车辆滑落损坏设备。所以传感器的选型和安装位置是绝对不能马虎的环节。
实践中最保险的组合是“限位开关主定位 + 光电传感器辅助判断”。
- 限位开关(机械式/接近式)用于硬定位。机械式结构简单,价格便宜,环境适应性强;接近式无接触磨损,使用寿命更长,误差小。用在升降机上时,建议优先选用接近开关,因为升降台的震动比较大,机械式的容易松动。
- 光电传感器(对射型)用于车辆存在检测。装在车位入口两侧,车停到位挡住光路,输出电平翻转,PLC据此判断“车已就位”。
在程序设计上我会做“双重确认”:先看限位开关是否动作,再看对应车位光电信号是否正常,两个条件都满足才认为定位成功。有些调试场景里只有一个信号也会出现偶然触发,双确认能显著降低误动作的概率。
另外要提一点:传感器接线时必须做屏蔽和接地处理,尤其是接近开关和电机驱动线不要走在同一个线槽里。我在实训台上被这个坑过一次,电机一启动,接近开关的信号乱跳,差点以为PLC坏了,后来把线分开走就正常了。这个经验你如果做实体系统一定会用得上。
3.3 电机驱动和执行机构设计要点
立体车库里最怕的事情是“溜车”。电机断电后如果刹车不好,载车板会缓缓下溜,轻则定位不准,重则砸车。所以设计的时候一定要选择带电磁抱闸的电机,或者额外配置独立的抱闸装置。焊车板到位后,PLC先启动电磁抱闸锁住电机轴,再切断电机电源,这样即便载车板上停了车辆,也不会因为重力下溜。
关于电机功率的选择,我提供一个常用经验值供参考。升降电机建议1.5kW及以上,具体看你载车板加车辆的总重量和升降速度。横移电机功率可以小一些,0.75kW通常够了,因为横移主要是克服滚动摩擦,跟升降克服重力是两码事。变频器可选可不选,如果选用了变频器,建议加装制动电阻,以吸收电机在减速或下降时产生的再生电能,避免变频器过压保护触发。
如果你是纯组态仿真,这个逻辑同样体现在程序里:每次升降动作结束后,先输出“抱闸锁止”信号,再停电机。仿真程序里没有真实的物理惯性,但这个顺序一定得保持,答辩时被问到“如何防止溜车”,你答“抱闸先于电机断电生效”就是标准答案。
3.4 上位机组态与通信方式:用组态王还是MCGS
组态监控是毕业设计展示环节的大杀器。画面美观、数据实时刷新、故障弹窗醒目,答辩现场一亮相,印象分就上来一大截。常见的上位机有两种选择:组态王或MCGS嵌入版。
我的建议是选MCGS。界面配置上手快,和三菱PLC通信稳定,资料多、教程多,出了问题容易搜索到解决方案。组态王功能强一些,但配置稍复杂,对初学者不太友好。
通信方式优先选串口通信或以太网通信。三菱FX3U系列用FX3U-ENET模块支持以太网通信,通过MCGS新建工程,设置设备IP为PLC的IP地址,端口号默认就行,变量连上就能跑。S7-200 SMART自带以太网口,组态时也走TCP/IP协议,配置更简单。
要注意的坑是:PLC程序里对应寄存器地址必须跟组态里绑定的变量地址完全一一对应。比如你PLC程序里存车状态用的是D100,那组态画面上“车位状态”这个变量的通道地址就要绑定D100。对不上的话,画面上的数据永远纹丝不动,你半天找不到原因,最后发现只是地址写错了。这种低级错误在实验室里时不时就来一回。
4. 软件设计核心:从梯形图到组态画面的实现路径
4.1 I/O分配表:一张表治百病
写程序之前,先把I/O分配表做好。这个是整个软件设计的根,一张表写清楚,后面写梯形图时不容易出错,调试时排查故障也快,写文档时还能直接搬进论文。我见过太多同学上来直接撸程序,I/O号混乱,最后引脚对不上、信号冲突,项目差点烂尾。I/O分配表的意义就像建筑图纸的建筑坐标轴,先定了位置才谈得上施工。
以三菱FX3U为例,我常给学生一个参考分配:
| 信号名称 | 地址 | 信号类型 | 功能说明 |
|---|---|---|---|
| 入口车辆检测 | X0 | 输入 | 检测入口车辆是否到位 |
| 底层1号车位检测 | X1 | 输入 | 底层1号载车板是否有车 |
| 底层2号车位检测 | X2 | 输入 | 底层2号载车板是否有车 |
| 中层1号车位检测 | X3 | 输入 | 中层1号载车板是否有车 |
| 1号横移左限位 | X10 | 输入 | 1号横移电机左行到位 |
| 1号横移右限位 | X11 | 输入 | 1号横移电机右行到位 |
| 升降上限位 | X20 | 输入 | 升降机升至最高层到位 |
| 升降下限位 | X21 | 输入 | 升降机降至最低层到位 |
| 一层定位信号 | X22 | 输入 | 升降机在一层到位 |
| 二层定位信号 | X23 | 输入 | 升降机在二层到位 |
| 三层定位信号 | X24 | 输入 | 升降机在三层到位 |
| 急停按钮 | X26 | 输入 | 紧急停止回路 |
| 1号横移电机正转 | Y0 | 输出 | 控制1号横移电机正转 |
| 1号横移电机反转 | Y1 | 输出 | 控制1号横移电机反转 |
| 升降电机上升 | Y20 | 输出 | 升降电机上升接触器 |
| 升降电机下降 | Y21 | 输出 | 升降电机下降接触器 |
| 抱闸锁止 | Y22 | 输出 | 电磁抱闸动作 |
| 声光报警 | Y23 | 输出 | 故障报警 |
| 运行指示灯(绿) | Y24 | 输出 | 系统正常运行指示 |
| 故障指示灯(红) | Y25 | 输出 | 系统故障指示 |
这张表不是死板不变的,你完全可以根据自己的方案调整。但分配的逻辑要合理:输入端、输出端分别归类,信号功能标注清楚,留有空余点位备用。这张表做好后写进论文里,老师一眼就能看出你系统设计能力和工程意识,是实打实的加分点。
4.2 梯形图程序设计思路:状态机才是最稳的
写PLC程序,我最推荐的方式是“用状态机的思路来组织梯形图”。
什么意思?不要一上来就堆一大堆M继电器和定时器,而是先把整个系统的工作过程划分成一个个状态:空闲状态、存车执行状态、取车执行状态、故障急停状态、复位状态。每一个状态对应一段梯形图逻辑。状态之间通过“转换条件”来跳转。
比如存车的时候,状态的迁移顺序就是:空闲→检测到入口有车→搜索空车位→空位确认→横移让位(如需)→升降到位→横移入位→车辆就位确认→恢复空闲。每个转换都绑定一个或多个条件,比如“空位已找到”这个条件,就是扫描车位状态寄存器的结果,和逻辑判断的结果为真。
这种写法的好处太多了。第一,思路清晰,不会逻辑越写越乱;第二,调试时能准确定位“现在卡在哪个状态”;第三,答辩的时候你用状态流转图一讲,老师马上能get到你的设计能力。单靠一个梯形图堆几百行,老师看着也头疼,你还不好解释。
在三菱PLC里,常用M系列中间继电器来表示当前所处的状态位,比如M100代表“空闲”、M101代表“执行存车中”。每次状态切换就是把M100状态断开、置位M101。用SET/RST指令来操作状态位,避免输出线圈在其他地方被重复赋值导致双线圈错误。
4.3 核心控制逻辑拆解:找车位、让位、升降、取车
剥开来看,整个程序其实就四块核心逻辑。
第一块,找车位逻辑。我在文档里列了个“空车位优先表”,底层优先、中层次之、顶层最后。扫描顺序在程序中体现为一串比较和跳转指令。比如底层车位的状态寄存器值是0表示空,那就选它;全是1,再查中层;中层也满了,只能选顶层。用梯形图写起来就是一个个“是否为空”的判断分支。
第二块,横移让位逻辑。这是最容易写错的地方。核心原则是“让出升降通道”。如果目标车位在高层,那么当前层所有挡在升降路径上的载车板都要先移到旁边空位。这个空位哪里来?循环左移或右移找个空位。移动的时候要确保不会撞上位。所以在让位程序里必须把限位信号和相邻位占用信号交叉互锁,程序一旦检测到冲突,立即停车报警。
第三块,升降定位逻辑。升降机的上升和下降,依赖每层定位信号来停止。从1层到3层,程序判断当前层和目标层的差值,决定电机运行时间策略或碰到中间层信号时继续启动,直到碰到目标层定位信号才停车,同时启动抱闸。这一块逻辑不难,但最容易因为“抖动”或“信号干扰”导致误停车。所以我在程序里加了时间滤波,也就是定位信号要持续一个扫描周期以上才承认。
第四块,取车调度逻辑。跟存车动作是镜像对称的。核心复杂点在于:取高层车时,得先判断升降机停在哪个位置,如果不在入口层,得先主动把升降机降到入口层,再让车辆进入。很多同学在这里偷懒,结果程序跑起来“卡死”,必须手动复位。
4.4 手动模式与自动模式:一定要做两种模式
别忘了加手动模式。一是方便调试,二是方便写应急操作文档,三是答辩老师很可能问“如果自动系统出故障怎么办”。有手动模式兜底,回答就有底气。
手动模式下,每个电机都由按钮直接控制启停,传感器只做限位保护,不参与自动调度。自动模式下,所有动作由程序自动完成。手动/自动的切换用M1000这个中间继电器做总开关。切换时注意:必须确保所有电机处于停止状态,防止切换瞬间误动作。程序里加一条“切换前必须无运行信号”的条件,这个细节虽然小,但很体现工程素养。
自动模式下,存车按钮、取车按钮都会触发完整的状态链。手动模式下,直接用对应的输入点去控制Y输出,仅在限位到位的条件下允许动作。
4.5 组态画面设计:让你的系统“看得见”
MCGS组态画面建议按以下几块来布局。
停车库平面示意区:画一个3层5列的网格,每个格子用颜色表示状态,绿色表示空,红色表示占用,灰色表示载车板正在移动。组态脚本里轮询PLC的D寄存器车位状态值,刷新对应图形的颜色属性。
设备运行状态区:显示升降机当前楼层、横移电机动作方向、抱闸状态。这些通过读取M寄存器状态位来实现。
操作按钮区:存车按钮、取车按钮、急停按钮、复位按钮。这些按钮对应向PLC的M寄存器写状态或触发置位。
故障报警区:把PLC的故障代码对应到文字描述显示出来,比如“1号横移电机过载”“升降机定位超时”。MCGS的报警事件在“运行策略”里配置,把PLC的D寄存器故障代码映射到报警文本。
动画效果上,最简单的办法是将每个载车板做成一个“图形对象”,通过脚本改变它的位置坐标来实现“移动动画”的模拟效果。虽然不如专业3D渲染那么炫酷,但配合颜色变化和文字信息提示,在答辩现场演示的效果已经足够抓人眼球。毕竟毕业设计最重要的是合逻辑、能演示、可解释。
5. 仿真环境搭建与实操演示路径
5.1 无硬件情况下如何做出“真实感”
很多学校的实验室不具备搭实体立体车库的条件,但这不意味着你就做不了仿真。仿真分两层,一层是PLC逻辑仿真,一层是组态画面动态仿真。
三菱PLC用GX Works2或GX Developer自带仿真模式,写完梯形图可以直接软元件测试,模拟外部信号的变化观察输出响应。你可以在仿真中人为给X0置ON,模拟入口检测到车,看PLC有没有进入存车状态。用这种方法把状态链全部跑一遍,逻辑有没有BUG一目了然。
组态画面部分,用MCGS模拟运行模式,配合PLC仿真器做数据交互。MCGS把设备通信指向“模拟PLC”的通讯地址,这样组态画面就能读到你仿真程序里的寄存器值变化。画面上的按钮也能写寄存器,触发程序状态切换。
这套全软路线做出来的效果,除了没有电动机实际转动的声音,其他和真实系统几乎一样。我建议在文档中要把仿真验证部分写细,例如哪些信号是通过人为强制置位来模拟的、哪些寄存器是用来模拟车辆位置的、动作时序如何。老师看到这部分内容就知道你没糊弄,是真做了东西。
5.2 基于实训台或三菱FX3U的调试全流程
如果你有条件接触实物,那更有优势。实际的调试流程通常分成三轮。
第一轮是空载调试,PLC通电,程序下载,手动模式下逐个测试每个电机动作是否正常、方向是否正确、限位是否灵敏。
第二轮是逻辑调试,自动模式下,用手按压传感器来代替车辆存在信号,触发存车流程,看整个状态链是否按预想执行。这里强烈建议用PLC的监控功能,边单步执行边看M状态的变化,效率远高于盲调。
第三轮是带载调试,在载车板上放置模拟配重,重复多次存取过程,观察升降电机的抱闸和定位情况。带载状态下可能暴露空载时发现不了的问题,比如负载偏载引发的限位失灵或定位偏差。
调试过程中最常见的现象就是:程序看着没问题,但实际一跑,升降机走到一半就停了。排查步骤是打开监控画面检查目标层定位信号是否常闭或常开位置接反,用万用表量传感器输出,以及加滤波时间消除抖动。这些排查思路我放在后面常见问题章节里详细列举。
5.3 通信调试:PLC和MCGS之间到底怎么连
通信是让很多同学头痛的环节,其实本质上就几步:接线或网络配置、参数约定、变量绑定。
用三菱FX3U-232-BD或FX3U-ENET模块做通信,串口参数要给波特率、数据位、停止位和校验位。MCGS设备窗口里选好设备驱动,填好通信参数后,记得在PLC程序里把D寄存器地址规划好。
我提供一个实用建议:在PLC程序的最前面加一段专门用于上位机通信的寄存器映射区,把状态集中的核心变量都搬运到这个映射区。比如D100存当前状态编号,D101到D110存车位占用状态,D120存报警代码。这样组态画面只需要绑定这一小段地址,不会乱,调试的时候开着监控看这些寄存器,相当于“板载仪表盘”。
MCGS通信不上时,大部分原因是串口参数不一致、地址类型选错或者物理链路接触不良。先看PLC的通信指示灯是否在闪烁,再用串口调试工具发送手动的读命令来测链路,能收到响应就说明链路通,问题在配置。
6. 毕业设计源码与文档的整理技巧
6.1 源码工程怎么整理才显得“专业”
源码不是堆在文件夹里就完了,评阅老师和答辩专家会看你的组织能力。
我建议工程目录结构如下:
PLC_Project/ │ ├── PLC_Program/ │ ├── 立体车库_V1.0.gxw # GX Works2或对应工程文件 │ ├── 程序结构说明.txt │ └── 变量表.xlsx │ ├── HMI_Project/ │ ├── 立体车库监控.mcg # MCGS工程文件 │ ├── 画面截图/ # 关键界面截图 │ └── 报警配置说明.doc │ ├── DOC/ │ ├── 开题报告.doc │ ├── 毕业论文.doc │ ├── 任务书.doc │ └── 中期检查.doc │ ├── Simulation/ │ ├── 仿真视频.mp4 # 实录的组态演示视频 │ └── 仿真说明.doc │ └── README.md # 整个项目的说明文件README里写清楚项目简介、运行环境、复现步骤。写一句“在GX Works2环境下打开工程文件,先下载到PLC或启动仿真模式,再打开MCGS运行工程即可”,别人拿到手能复现,这个就很加分。
还有一些细节值得注意:源文件里不要有未使用的工程碎片和临时文件;关键程序段注释写明白;程序版本号规范,比如V1.0表示完整可用版本,V0.1表示初稿;有多个方案比较时另开一个文件夹放废弃方案,不要混在一起。
很多学生毕业之后拿着自己的源码去面试,面试官不看程序本身,先看你的文档组织,这一关过了才有后面的事,我跟你讲,这真的会影响工作机会。
6.2 论文文档如何把“逻辑”写成“亮点”
毕业设计文档的质量直接决定你是良还是优。有几个章节我建议重点发力。
系统总体设计部分,把“电气控制系统结构图”“控制流程图”“I/O分配表”用Visio画好,这是全文核心,拿得出手。需求分析部分不要只写一堆概念,把每个功能需求的输入输出条件写清楚,比如“存车请求”这个功能,前置条件是“入口有车且有空位”,结果输出是“存车完毕且车位状态置位”。这种写法看起来就有工程味。
“软硬件调试与结果分析”这一章最容易被写成“故障记录流水账”。我的建议是:挑选两到三个有代表性的调试场景展开,比如“升降机定位抖动导致程序误判”或“取车时路径冲突”,每个场景按照“故障现象→原因分析→排查过程→解决措施→验证效果”来组织。这种写法能让老师看到你的分析能力,而不仅仅是调试的结果。
文末附录里放上关键程序段的梯形图或指令表、I/O分配总表、电气原理图。尤其是梯形图,打印出来至少能占好几页,答辩时方便翻阅。这部分内容多的同学,论文页数轻松破100。
6.3 答辩汇报中的展示要点与常见的答辩追问
答辩时间通常控制在10到20分钟。汇报PPT建议按这个顺序组织:
- 选题背景与意义(1-2页,言简意赅)
- 系统总体方案设计(3-4页,放系统框图、设计方案对比)
- 硬件设计和I/O分配(2-3页,重点说你的计算过程)
- 软件程序设计(4-5页,上状态流图、梯形图,讲核心逻辑)
- 上位机组态与仿真成果(3-4页,放组态画面截图、演示视频)
- 总结与未来展望(1页,点到即止)
演示视频是最好的答辩道具,提前录制好一段从存车到取车的完整流程,视频用时控制在60到90秒内,这样现场即使设备出故障也不慌。
老师最爱问的几个问题是:为什么选PLC而不是单片机(答可靠性、编程直观、便于维护,上面的分析都用得上);如何防止升降机溜车(电磁抱闸加逻辑联锁);怎么判断当前是哪个车位在横移(看对应输出点状态和限位信号);系统故障时如何人工接管(手动模式)。
把这些都准备充分,答辩状态自然就稳了。
7. 调试阶段常见问题与解决办法实录
7.1 通信连不上,PLC和组态画面“各跑各的”
现象:PLC程序运行正常,梯形图里状态在跳;MCGS画面你点按钮没反应,状态数字也不动。
排查步骤:先确认PLC程序有没有实际运行。很多人下载程序后忘了RUN,PLC是STOP状态,当然响应不了。确认运行后,看通信参数:串口号选对没有、波特率是否一致、PLC站号是否匹配。再用MCGS自带的设备调试窗口发送一条测试指令,读一个寄存器试试返回值。如果返回正常,那问题在变量绑定上,检查画面按钮连接的通道地址和PLC寄存器地址是否对上了。地址错一位,全白搞,这是最常见的坑。
7.2 升降机定位抖动,状态偶尔乱跳
现象:升降机到达目标层后,定位信号短暂闪断,程序误认为未到位,重新启动电机,导致来回振荡。在继电器频繁动作时,这种情况特别容易复现。
原因分析:限位开关在动作临界点存在机械抖动,信号在几毫秒到几十毫秒内反复跳变。PLC扫描周期通常10毫秒左右,如果抖动恰好发生在扫描期间,程序可能读到错误状态。
解决方案有两层。硬件上,选用带滚轮杠杆臂的限位开关,增加触点压力;软件上,写一个延时滤波程序,定位信号持续10到50毫秒稳定才被确认,抖动干扰就滤掉了。我通常用定时器指令来写这个滤波程序,省事又可靠。这个实用技巧同样适用于横移限位信号。
7.3 横移让位时突然急停,没撞到东西却报警
现象:横移过程中PLC报警,但现场看载车板没有碰到任何物理障碍。
排查关键:看报警代码。在组态里报警区显示了哪路信号出了问题。如果是横移限位信号提前触发,大概率是限位开关安装位置离车位边界太近,载车板启动时的微小位移就碰到开关,误判为到位。也可能是相邻车位的限位信号接反了,调试时把两个车位的中继线混在一起。
解决建议:检查限位开关的档片位置,确保只有载车板真正运动到对应停车位边界时才触发开关;另外在程序里对每个限位信号都做互锁,比如“左限位有效时,右行输出必须为OFF”,这样即使传感器信号有误,PLC不会同时给出矛盾的方向控制指令,也能大幅降低误动作风险。
7.4 存车流程跑了一半卡住,状态位不动了
现象:自动存车过程中,PLC的状态位停在一个中间状态,后续动作不再触发。
排查方法:打开PLC在线监控,查看当前M状态位,同时看当前状态对应需要满足的转换条件。最常见的原因是行程限位不到位,载车板还没到指定位置,条件不成立,程序就“挂起”。如果是急停按钮被误触发,程序进入故障状态后没有自动复位,需要手动按复位按钮。
在程序里我习惯加一个“超时保护”逻辑:每一步执行的时间超过预设值(比如升降30秒、横移20秒),就自动触发超时报警并停住。这个逻辑正常情况下永远不会触发,但一旦设备卡住,至少能及时报警,不至于老师看演示时整个系统无响应干瞪眼。
7.5 论文查重与源码查重:这个坑很多人踩
毕业设计的文档查重是硬指标。系统架构图、流程描述、技术原理这类内容容易被判定重复。注意几点:不要大段复制教材或网上论文的原文;图纸和表格尽量自己画;技术方案描述保持自己的语言风格。写功能需求用“输入—处理—输出”表格化整理,设计部分用模块化拆解文风,这样既结构新颖又不会和别人的套路重叠。
源码查重不一样,它只关注代码相似度。你要把程序注释写清楚,但不要刻意为了降重去改变量名造成逻辑混乱。更重要的是设计思路上的差异化,比如在程序中加入了手动测试模式、超时保护、互锁逻辑等别人不会去做的细节。哪怕源码结构相似,这些独有设计的痕迹也是你独立完成的实证。
8. 从毕业设计到项目落地,这个系统还能怎么扩展
很多做到一半的同学会有一种感觉:这个题目是不是有点“简单”,控制逻辑似乎一眼望到底了。其实往深了做,扩展空间非常大,而且答辩和文档里加一段“后续展望”也是有实际内容的。
你可以在现有系统上增加车牌识别功能,结合OpenCV或云端API,实现车辆身份绑定到车位号,取车时输入车牌号而不是车位号,这套流程在程序设计里相当于增加了一个“预约取车”的新状态链。还可以加手机App远程查询车位状态、提前预约存取车,PLC端增加通信协议解析模块,本质上就是把上位机从组态软件替换成网络服务端。
更进一步的做法是引入变频器和编码器闭环,让横移和升降都变成调速控制,而不是简单的启停。这样系统在运行时更平稳,定位精度更高,论文的技术含量能上一个台阶。另外,多组车库之间的联合调度也可以拓展:两个或三个独立库共用一个出入口,优先调度哪一组库的车位,这背后就是一个简单的资源调度算法。
对基础薄弱一点的同学,我不建议一上来就扩展太多模块,容易失控。先把主流程做透,至少留出接口(寄存器地址映射),后期有时间和精力再加一个“分层调车”功能或“应急模式”就够了。想要把课题做深,关键在于把现有主线打磨到位,扩展功能反而是锦上添花。
9. 写在最后:一点掏心窝子的建议
做这个课题,我最深的体会是“进度管理远比技术细节重要”。很多同学前期不紧不慢,到了最后两周期限快到了才开始熬夜赶程序,结果程序改出了Bug,文档也没时间润色,答辩前一晚还在复制粘贴图表。而那些顺利走完整个流程的人,往往是前期把框架架构和时间节点控制得好:第一周做方案,第二周做选型,第三、第四周写程序,第五周调通信,最后两周集中写文档。
还有一句话是我常跟学生说的:不要老想着“老师会不会觉得这个太简单”,而要多想“我是否真的把一个完整的工程做出来了”。你交出来的是一台逻辑自洽、能演示、有文档、有源码的完整系统,这本身就是专业能力的证明。关于毕业设计,它的价值在于完整走通一个工程项目的闭环。从需求到设计,再到实现、验证、表达,这个过程本身就是最好的学习。
如果你正在为这个毕设焦头烂额,先把文里提到的I/O分配表做出来,再把状态转移图画出来。这两件事做完,你的项目就已经完成了一半。剩下的,就是按部就班地往前推进。稳住心态,一步步来,这个项目真的不难。