
简介车辆出入库管理系统PLC课程设计资料包面向高校自动化、电气及机电类专业学生用于完成PLC课程设计或毕业设计中的停车场、车库出入库控制方案。资源围绕系统总体构成、传感器布置、显示电路、I/O端口接线与地址分配、程序流程图及梯形图设计等关键环节展开同时涵盖PLC基本结构、工作原理与计数逻辑便于读者从硬件选型到软件编程建立完整设计思路。压缩包共1个doc文档约195KB文档内含引言、系统构成、PLC的I/O端口接线、I/O口地址分配、程序设计、总结及元器件清单等章节结构完整、图文并茂可直接作为课程设计报告撰写与答辩参考。目前已有530人学习下载适合需要快速掌握基于PLC的车辆出入库管理方案、梳理设计框架并完善项目文档的读者。1. 车辆出入库管理系统PLC课程设计先想清楚控制对象再动手这门课程设计最容易做成“一个计数器加两个道闸”答辩时却解释不清为什么车辆停在地感线圈上只计一次数。车辆出入库管理系统PLC课程设计的核心不是电机正反转而是传感器信号怎么变成状态变化。适合自动化、机电一体化专业的学生也适合车间里负责物流门改造的维修电工。完成后的程序应能实现入口抬杆、出口抬杆、库存计数、库满拒入四项基本功能并且可以挂MCGS组态画面做动画演示。整个设计的难点集中在I/O选型、控制逻辑状态机和计数器防抖三处下面按这个顺序把一套能交差的方案拆开讲。2. 车辆出入库PLC的I/O分配与NPN、PNP传感器接线2.1 按“一进一出带闸机”的模型定输入输出课程设计不可能像真实停车场那样使用车牌识别常见做法是用两个光电开关或地感线圈代表入口和出口的“有车信号”道闸电机用一组接触器控制正反转。我一般用三菱FX3U-32MR做主控制器理由是三菱PLC在教学中使用最广GX Works2里写梯形图和ST都方便后期换成西门子S7-1200的博途工程时逻辑几乎可以平移差别只在I/O地址和指令写法。输入点按“检测、限位、操作”三类划分。检测类包括入口有车、出口有车限位类包括入口道闸上限位和下限位、出口道闸上限位和下限位操作类包括手动/自动切换、复位按钮、急停按钮。输出点按“执行、指示、声音”划分执行类给道闸电机正反转指示类给入口和出口的红绿灯声音类给蜂鸣器。2.1.1 车辆出入库PLC课程设计的I/O点表类型软元件信号名称功能说明备注输入X0入口有车传感器入口地感或光电开关车辆驶入时变ON输入X1出口有车传感器出口地感或光电开关车辆驶出时变ON输入X2入口道闸上限位抬杆到位反馈常闭触点接线输入X3入口道闸下限位落杆到位反馈常闭触点接线输入X4出口道闸上限位抬杆到位反馈常闭触点接线输入X5出口道闸下限位落杆到位反馈常闭触点接线输入X6自动/手动切换拨到ON为自动手动供调试使用输入X7复位按钮清除库存计数上升沿有效输入X10急停常闭触点必须串入接触器回路输出Y0入口抬杆入口电机正转接触器与Y1互锁输出Y1入口落杆入口电机反转接触器与Y0互锁输出Y2出口抬杆出口电机正转接触器与Y3互锁输出Y3出口落杆出口电机反转接触器与Y2互锁输出Y4入口绿灯允许进入指示无车或放行完毕亮输出Y5入口红灯禁止进入指示抬杆期间及库满亮输出Y6出口绿灯允许驶出指示平时常灭输出Y7出口红灯禁止驶出指示有车等待时亮输出Y10蜂鸣器库满或故障提醒可手动测试限位开关用常闭触点接线的目的是断线保护。如果限位线断路PLC会认为闸杆处于限位状态程序能立刻在软元件监视里发现异常如果用常开触点断线后系统依然判断为“未到位”故障要等电机堵转才暴露。这一条在课程设计报告里写清楚分数会明显不一样。2.2 NPN、PNP传感器怎么接三菱PLC输入端三菱FX3U的输入端子默认是漏型输入公共端S/S接24V传感器选用NPN型信号线接到X端子传感器负极接0V。如果误买PNP传感器输出的是高电平无法直接驱动漏型输入需要把S/S改接0V或先经过中间继电器转换。也有人把PLC输出晶体管的NPN/PNP和输入传感器混为一谈实操时的判断标准很简单输出晶体管讨论的是负载接法输入传感器讨论的是信号电平方向选型时先看公共端定义。下面用一段ST变量声明演示同一信号在结构化程序里的命名方式这可以直接当课程设计报告里的变量表用。VAR_GLOBAL bInSen : BOOL; // X0 入口有车传感器NPN常开 bOutSen : BOOL; // X1 出口有车传感器NPN常开 bInUpLmt : BOOL; // X2 入口道闸上限位常闭触点 bInDnLmt : BOOL; // X3 入口道闸下限位常闭触点 bOutUpLmt : BOOL; // X4 出口道闸上限位常闭触点 bOutDnLmt : BOOL; // X5 出口道闸下限位常闭触点 bAutoMode : BOOL; // X6 自动/手动切换 bResetBtn : BOOL; // X7 复位按钮上升沿有效 bEStop : BOOL; // X10 急停常闭 yInUp : BOOL; // Y0 入口抬杆 yInDown : BOOL; // Y1 入口落杆 yOutUp : BOOL; // Y2 出口抬杆 yOutDown : BOOL; // Y3 出口落杆 yInGreen : BOOL; // Y4 入口绿灯 yInRed : BOOL; // Y5 入口红灯 yOutGreen : BOOL; // Y6 出口绿灯 yOutRed : BOOL; // Y7 出口红灯 yHorn : BOOL; // Y10 蜂鸣器 END_VAR如果使用梯形图工程不写ST也可以在软元件注释里建立同名标签两者在GX Works2里是等价的。ST变量名不能以数字开头所以X0、Y0要换成bInSen这种可读命名在报告里把这张表和I/O点表放在一起导师一眼能看懂你的设计意图。如果X0接成了常闭触点程序上看到的bInSen会一直为ON上升沿指令永远捕捉不到变化车辆通过的瞬间计数器反而不会加1。调试这种问题最快的方法是打开GX Works2的软元件监视用手遮挡传感器观察X0的ON/OFF是否与预期相反。提示现场没有万用表时用PLC自带的输入指示灯判断传感器导通是最快的办法。遮挡和放开各做一次确认指示灯状态和程序软元件监视一致再开始写控制逻辑。3. 用梯形图写车辆出入库控制逻辑到位检测、道闸联动与防重复计数3.1 道闸电机正反转的互锁写法道闸电机是异步电机抬杆和落杆对应正反转。梯形图最常见的写法是用两个输出线圈各自串联对方常闭触点。即使PLC程序里已经保证Y0和Y1不同时得电接触器主触点也可能因为分断顺序而出问题所以软件互锁和硬件互锁都要做。硬件回路上Y0接触器的辅助常闭触点必须串入Y1接触器线圈回路反之亦然否则程序逻辑再严谨也无法挡住接触器卡死。下面用ST写电机控制段它等价于一组带互锁的梯形图网络。三菱结构化工程支持ST没有ST基础的人可以把这段理解成“写出线圈通断条件”的梯形图翻译。// 入口抬杆请求存在、闸杆在下限位、未到上限位、急停释放 yInUp : bInReq AND bInDnLmt AND NOT bInUpLmt AND NOT bEStop; // 入口落杆抬杆到位后车辆已离开闸杆又不在下限位才允许落杆 yInDown : bInUpLmt AND NOT bInSen AND NOT bInDnLmt AND NOT bEStop; // 输出互锁两个方向不可能同时为ON若都为ON说明逻辑错误 IF yInUp AND yInDown THEN yInUp : FALSE; yInDown : FALSE; END_IF;逻辑说明bInReq是入场请求的中间变量在车辆检测上升沿被置位。yInDown中加入NOT bInSen表示车离开入口传感器后才落杆防止闸杆砸到前一辆车的车尾。最后的IF互锁不会在正常程序里触发只是保护性写法防止某个意外分支同时把两个输出置位。3.2 用上升沿和状态中间变量实现防重复计数如果直接用X0的常开触点驱动计数器车辆停在传感器范围内的所有扫描周期内计数器都会累加。课程设计里最常见的错误就在这里。正确做法是用上升沿指令三菱梯形图对应PLS M0或者功能块R_TRIG这样只在OFF变ON的那个扫描周期产生一次脉冲。下面这段ST代码展示入口的处理逻辑。// 入口车辆进入X0上升沿触发 IF R_TRIG(bInSen) AND NOT bEStop THEN IF bAutoMode THEN bInReq : TRUE; // 产生放行请求 vInTotal : vInTotal 1; // 总入场数加1D1 END_IF; END_IF; // 车已通过后入口请求自动清除 IF bInUpLmt AND NOT bInSen AND bInDnLmt THEN bInReq : FALSE; END_IF;逻辑说明R_TRIG(bInSen)只有在bInSen由OFF变ON时返回TRUE所以车辆停在传感器上不会重复计数。vInTotal对应数据寄存器D1。清除bInReq的条件用的是“抬杆到位、车已离开、落杆到位”三项组合这是最权威的复位方式如果只用车离开这个条件会出现闸杆还没落回来、第二辆车已经入场的情况。3.2.1 入场状态转换表当前状态触发条件输出动作转换到状态S0 空闲入口绿灯亮X0上升沿且未库满入口红灯亮Y0抬杆S1 抬杆中S1 抬杆中X2上限位为ONY0保持S2 待车通过S2 待车通过X0由ON变OFFY0停止S3 落杆中S3 落杆中X3下限位为ONY1停止入口绿灯亮S0 空闲状态转换表是课程设计报告里的加分项。梯形图画出来后用这张表把每个状态的进入条件和退出条件核对一遍能发现不少梯形图交叉互锁产生的逻辑漏洞。注意S2状态下即使X0一直保持ON程序也不会落杆这正是防砸功能的核心。3.3 出入库车辆识别的组合判断出入口的逻辑并不对称。入口要看库存是否已满出口要看是否有车等待。库满时入口即使检测到车辆也不能提交入场请求同时入口红灯保持常亮出口平时红灯亮当出口X1检测到车辆且库存大于0时才抬杆放行。// 库满判断库存达到上限置位M100并撤销入口请求 IF vStock vStockLimit THEN M100 : TRUE; bInReq : FALSE; ELSE M100 : FALSE; END_IF; // 出口放行X1上升沿且库存大于0允许抬杆 IF R_TRIG(bOutSen) AND vStock 0 AND NOT bEStop THEN bOutReq : TRUE; vOutTotal : vOutTotal 1; END_IF; IF bOutReq THEN yOutUp : bOutDnLmt AND NOT bOutUpLmt; yOutDown : NOT bOutSen AND bOutUpLmt AND NOT bOutDnLmt; END_IF;参数说明vStock是当前库存vStockLimit是库容上限。出口放行条件里加vStock 0可避免空库时出口误抬杆这是车辆出入库管理系统PLC课程设计里容易被忽视的业务逻辑。3.3.1 出入口优先级处理这里还有一个和真实停车场不同的点真实停车场出口的动作并不影响入口计数但课程设计场地小有可能同一辆车的两个传感器被先后触发。建议出口优先级高于入口。入口请求在库满时被强制撤销出口请求只要库存大于0就可以生效。如果场地实在无法避免两个传感器同时触发就给入口请求增加一个延时确认用T0定时器持续200ms确认信号稳定后才算有效。4. 车辆出入库PLC的计数器数据区与MCGS组态联动4.1 数据寄存器分配与库存计算三菱FX3U的数据寄存器D区可以保存16位整数课程设计的库存范围一般在0到999之间不需要扩展数据块。D0作为当前库存D1作为总入场数D2作为总出场数D3作为库存上限这样的分配在后台上位机或MCGS组态里都很直观。下面的表是我常用的寄存器分配方式。数据区用途范围复位条件D0当前库存0~999复位按钮或断电保持D1总入场数0~9999手动清零D2总出场数0~9999手动清零D3库存上限1~999HMI或组态修改M100库满标志ON/OFF库存低于上限库存计算逻辑本身不复杂入场一次加1出场一次减1。但入场和出场可能发生在同一个扫描周期如果先算入场再算出场第二个网络拿到的库存值可能不是本周期开始时的值导致统计偏差。4.2 库存计算中的扫描周期问题常见做法是把入场和出场的增量放到两个独立变量库存计算集中在程序末尾统一做一次。入场加1和出场减1同时发生时本周期净增量可能是0但D0不会出现中间态错乱。下面这段ST展示了正确的更新顺序。// 程序末尾统一更新库存 vStock : vStock vInInc - vOutInc; IF vStock 0 THEN vStock : 0; // 防止复位置位造成的负库存 END_IF; // 库存满时置位M100 IF vStock vStockLimit THEN M100 : TRUE; ELSE M100 : FALSE; END_IF;参数说明vInInc和vOutInc分别是本扫描周期内入场和出场的增量默认值为0只有在上沿检测时写入1。vStock小于0时钳位到0这一步很关键因为调试时经常有人先看出场再手动复位复位瞬间若残留出场信号D0会变成负数组态画面上就是显示错误。4.3 用MCGS组态画面监视车辆出入库数据MCGS组态和三菱FX3U的通信通常通过串口父设备完成。在MCGS设备窗口里新建“三菱FX系列编程口”子设备设置串口号、波特率、数据位、停止位和校验位设备地址默认0。然后在实时数据库里建变量连接类型选“设备读写”关联到D0、D1和M100这三个软元件。组态画面里放两个数字显示控件分别关联D0和D1运行时就能看到当前库存和总入场数。如果想要“车辆经过X0时组态画面里的小车动一下”需要给物体做动画连接移动方向绑定X0对应的变量X0为ON时走一段直线OFF时停在原位。MCGS脚本不需要写复杂逻辑重点是确认设备通信状态正常。MCGS的通信测试方法进入运行环境后观察设备窗口的通讯状态。三菱FX3U串口正常时通讯状态变量为0非0值需要回去检查设备参数。如果一直通讯失败先查串口线序FX3U的编程口是RS422MCGS默认的485接头不一定直接兼容。4.3.1 PLC侧与MCGS联调的最小步骤在GX Works2里把程序下载到PLC并切换到RUN状态。确认D0、D1在软元件监视里能看到变化不变化先查程序逻辑。打开MCGS组态环境新建“三菱FX系列编程口”子设备串口参数设为960081偶校验。实时数据库添加D0、D1、M100三个变量分别关联设备只读。进入MCGS运行环境检查通讯状态变量。在PLC侧强制X0一个上升沿观察MCGS里D1加1。这套步骤把“PLC程序正确”和“组态通信正确”分开验证。如果顺序反过来MCGS一开机就连不上很难判断是程序没算对还是通信参数没设对。后期如果要用C#读这些数据典型的做法是通过HSL组件读D0地址或者用Snap7连接S7系列PLCMCGS的好处是不用自己写协议适合课程设计时间有限的情况。无论用哪种上位机PLC侧的数据区划分都必须和上位机约定一致。5. 车辆出入库PLC调试软元件监视与特殊继电器做验证5.1 在GX Works2里做软元件批量监视点击在线菜单的软元件监视把X0到X10、Y0到Y10、D0到D3加入监视列表。调试车辆出入库程序时先手动拨动传感器和限位开关看输入软元件是否跟着变化这能排除接线问题。然后强制Y0观察接触器动作确认道闸电机方向。这两步做完再进入自动逻辑检查顺序。最容易忽略的验证点是“同一时刻Y0和Y1不能同时为ON”。手动强制Y0时同时打开Y1正常情况下接触器线圈不应得电。如果得电说明互锁回路接错需要回到电气柜查线而不是继续改程序。5.2 用M8013做1秒闪光的运行指示灯三菱FX3U的M8013是1秒周期振荡特殊继电器把它接到Y11上可以完全不依赖传感器直观确认PLC运行状态。程序里加一行课程设计演示时很实用。// M8013为1秒时钟脉冲接Y11运行指示灯 Y11 : M8013 AND NOT bEStop;参数说明M8013在RUN状态下自动翻转周期固定为1秒。Y11外接24V指示灯时可以看到规律闪烁。如果Y11不闪基本可以判断程序没有进入RUN状态或者Y11被程序里其他线圈重复赋值。三菱PLC对输出线圈的重复赋值非常敏感多线圈输出以最后一次赋值为准排查这类问题时要检查Y11是否只出现一次。5.3 车辆出入库时序的验证清单答辩演示按下面顺序做一次完整流程复位后D0显示0入口绿灯亮强制X0入口绿灯灭、红灯亮、Y0得电强制X2道闸到达上限位强制X1出口抬杆解除X0道闸落杆解除X3闸杆回到下限位。此时D0加1入口绿灯重新点亮。这套流程覆盖所有核心状态也暴露接线和逻辑上的问题。落杆不动作是常见故障。检查顺序是先看Y1是否得电再看X2上限位是否有输入再看X0是否还有信号残留。光电开关被车挡着时X0一直为ON落杆条件不满足这是程序故意设计的。实际道闸通常带有防砸功能落杆时要把地感信号再延时300ms防止车辆最后一小段车身还在传感器范围内导致落杆永远无法完成。这个延时用定时器T0实现不能用M8013因为M8013只能提供1秒的节拍无法精确到毫秒。调试完成后把I/O点表、状态转换表和寄存器分配表一起写进课程设计报告这套车辆出入库管理系统PLC课程设计才算真正闭环。本文还有配套的精品资源点击获取