拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于S7-1200的升降横移式立体车库PLC控制系统设计与调试

做立体车库控制很多朋友第一个想到的就是PLC这没错。但真到了选型阶段面对西门子S7-1200、S7-200 SMART、甚至三菱FX系列不少人就开始纠结了。这篇博文我就拿自己做过的一个基于S7-1200的升降横移式立体车库项目从头到尾复盘一遍从I/O点表怎么算、程序架构怎么搭、状态机怎么写到触摸屏报警怎么导、现场调试踩了哪些坑一次性说清楚。无论你是刚入行的电气工程师还是准备做毕业设计的学生这套思路都能直接用。1. 项目整体设计先想清楚架构再动手写程序很多新手拿到项目第一反应就是打开博途开始拖梯形图这是个大坑。立体车库本质是一套典型的“传感器逻辑运算执行机构”系统但它的核心难点不在单个电机控制而在“调度”和“安全互锁”。所以第一步不是编程而是先把系统架构理清楚。1.1 为什么选升降横移式而不是堆垛机或垂直循环式立体车库按结构分有很多种主流的有升降横移式、垂直循环式、巷道堆垛式、平面移动式。我这次做的项目选的是最常见的升降横移式也叫PSH型。原因很直接这种形式结构简单土建要求低造价相对便宜而且控制逻辑足够有代表性特别适合中小型停车场改造。升降横移式的工作原理可以这样理解整个车库像一个大网格每个格子放一个载车板。除顶层外每层都有一个空位通过载车板的横向移动和升降动作把空位移到目标车位旁边再把目标车位移出来。说白了就是“挪车位”的游戏但PLC要干的事就是把这个挪动过程安排得明明白白。这种结构对PLC的要求是开关量多、逻辑复杂、安全联锁要求高。比如我做的3层3列结构9个车位涉及升降电机、横移电机、限位开关、光电传感器、急停按钮林林总总算下来几十个I/O点用S7-1200正好合适。1.2 控制系统的三层架构整个控制系统我按三层来设计设备层、控制层、监控层。设备层就是电机、传感器、变频器、接触器这些物理设备控制层是PLC及其扩展模块负责逻辑运算和输出监控层则是触摸屏和上位机负责显示状态、下发指令、记录报警。这种三层架构有个好处就是层次分明、便于调试。PLC只管逻辑触摸屏只管显示变频器只管调速互不干扰。出了故障也能快速定位问题出在哪一层而不是在一坨程序里乱翻。选S7-1200而不是200 SMART主要也是考虑这个项目需要做分布式扩展和Profinet通信。S7-1200的集成PN口可以直接连接触摸屏和变频器还能通过CM1241模块做Modbus RTU通信扩展能力和通信能力比200 SMART强不少。1.3 为什么S7-1200是合适的PLC选型很多人问一个立体车库而已用S7-200 SMART不行吗说实话如果只是车库本体的控制200 SMART确实够用。但我选S7-1200有几个具体理由。一是速度。S7-1200的位运算速度在微秒级处理复杂的联锁逻辑完全没有延迟感。立体车库最怕的就是“逻辑慢了半拍”比如横移电机还没停稳升降电机就启动了这种事故一旦发生就是车毁人伤。二是通信能力。S7-1200集成Profinet接口触屏、变频器、伺服驱动器都可以直接用网线连。现场如果用ABB变频器还可以通过485接口做Modbus RTU通信S7-1200加一个CM1241 RS485模块就能搞定这比200 SMART只能用一个通信口做PPI协议要灵活得多。三是工程软件。TIA Portal博途的编程体验确实比Micro/WIN好很多支持SCL语言写状态机、支持数据块直接映射到触摸屏变量、支持PLCSIM仿真。对做项目的人来说这些功能省的时间不是一点半点。2. 硬件选型与I/O点表一台车库到底需要多少信号硬件的核心工作是梳理I/O点表。点表就是整个控制系统的“地图”所有信号都在上面标注清楚。点表做得越细后面编程越省事。我见过很多项目程序写到一半发现I/O点不够用只能拆东墙补西墙那就是前期点表没做好的后果。2.1 设备清单与现场信号梳理先说3层3列升降横移式车库的设备组成。升降电机一般装在顶层或中层框架上负责载车板的升降横移电机装在载车板底部负责横向移动。每个车位都有限位开关升降机构有上限位和下限位横移机构有左限位和右限位。此外还有车位有车检测通常是光电开关或超声波传感器、急停按钮、超载保护、松绳保护、安全挂钩检测、声光报警器等等。把这些设备一个个列出来再标注每个设备需要哪些输入、哪些输出点表的雏形就出来了。我这里列一个常见信号清单数字量输入DI各车位有车/无车检测、各层横移左/右限位、升降上/下限位、急停、复位、手动/自动选择、运行允许、超载信号、松绳信号、安全挂钩到位信号。数字量输出DO升降电机正转/反转接触器、各横移电机正转/反转接触器、声光报警器、运行指示灯、故障指示灯、电磁铁安全挂钩等。模拟量输入AI如果用了称重传感器做超载检测可能需要一路模拟量输入。以我当时的方案为例DI点数大约30个DO点数大约20个AI点2个。这样的规模用S7-1200的紧凑型CPU1214C有点紧张所以我直接选用了CPU1215C DC/DC/DC14DI/10DO再加一块SM1221数字量输入模块和一块SM1222数字量输出模块把点数和余量都留够。2.2 CPU选型与I/O扩展计算S7-1200选型有个简单公式先算DI和DO的实际需求数再乘以1.2到1.3的余量系数最后对照CPU订货号确定是否需要扩展模块。比如DI需求是30个余量做到40个DO需求是20个余量做到26个。CPU1214C自带14个DI和10个DO缺口是DI 26个、DO 16个所以需要至少扩展一块16点DI模块和一块16点DO模块。如果你还计划接伺服或变频器做Profinet控制那就选CPU自带两个PN口的型号比如1215C方便把触摸屏和驱动器分开挂在不同的网段。这里要特别提醒一点CPU自带的I/O和扩展模块的I/O地址不是连续分配的需要提前在博途的设备组态里查看实际地址。比如CPU1214C的DI地址从I0.0开始扩展模块可能从I4.0开始编程时别搞混。2.3 变频器与传感器的通信方案立体车库的横移电机通常不需要调速但升降过程如果带载启动很多人喜欢用变频器实现软启动和平稳停车。我这次用的就是ABB ACS580变频器通过Modbus RTU协议控制频率和启停。ABB变频器的Modbus地址和西门子PLC的保持寄存器映射有点绕当时也踩了几个坑后面专门写一节细讲。传感器方面车位检测我用的是漫反射式光电开关注意要选带背景抑制功能的型号不然车辆底盘反光会造成误判。横移和升降的限位用的是金属感应式接近开关确认好PNP还是NPN输出S7-1200默认支持源型输入所以选PNP型接近开关最省事。另外升降到位的极限位置建议加装机械限位挡块不能只靠PLC的软限位这是安全底线。2.4 触摸屏与上位机的选型建议触摸屏我用的威纶通MT8071iP10寸屏带以太网口通过Profinet或者S7协议直接连接S7-1200。对比西门子自家的KTP700威纶通的价格优势明显而且组态软件EB Pro对S7-1200的支持也成熟报警、变量、趋势图都能正常跑。如果客户要求上位机监控S7-1200可以走OPC UA用KepServerEX做网关连接WinCC或Intouch。这里注意一个坑S7-1200作为OPC UA服务器时需要在博途里勾选“允许来自远程对象的PUT/GET通信访问”不然KepServer连不上。3. PLC程序架构与核心逻辑拆解程序部分是我最想展开讲的。立体车库的程序写得好不好直接决定了车主取车要等3分钟还是30秒也决定了现场调试的时候你是躺着喝茶还是蹲在配电柜前改程序。3.1 博途里的程序结构规划在TIA Portal里新建项目后我习惯把程序分成四大块主程序OB1、初始化OB100、手动控制FC、自动控制FB。自动控制部分使用FB块而不是FC块原因很简单状态机的运行状态需要在多个扫描周期内保持FB的背景数据块正好可以存储这些中间变量FC每次调用结束变量就丢了。具体到程序块内部再按功能拆分成几个小FC或FB电机控制FB封装了升降和横移电机的启动、停止、正反转互锁、过载复位逻辑所有电机都调用同一个FB只是背景DB不同。状态管理FC负责调度逻辑根据当前车位状态和用户指令生成下一步动作序列。信号采集FC把各种传感器信号统一映射到DB里的地址方便后续逻辑直接使用。故障处理FB收集急停、超载、超时、限位异常等故障并联动停机、声光报警。这种结构的好处是任何一个环节出问题只需要打开对应的FB或DB几秒钟就能定位。修改逻辑也不会影响其他代码块大大降低了调试期的痛苦。3.2 用SCL写状态机调度立体车库的核心控制逻辑其实就是状态机。以取车流程为例流程是用户输入车位号→检查该车位是否有车→判断该车位是否在底层→如果在顶层先判断下方是否有空位如果没有空位需要把目标车位下方车辆横移腾出空位→升降电机将目标车位降到一层→用户取车。如果用梯形图写这种多步骤流程程序会变得非常长且难维护。我选择用SCL语言写状态机一个CASE语句就能搞定。CASE step OF 0: // 空闲 IF start_auto THEN step : 10; END_IF; 10: // 读取目标车位 target_bay : hmi_target_bay; IF check_bay_occupied(target_bay) THEN step : 20; ELSE fault_code : 1; // 目标车位无车 step : 100; END_IF; 20: // 规划路径 IF target_bay_level 3 THEN // 顶层车位需要先腾空下方空位 step : 30; ELSE step : 40; END_IF; 30: // 橫移空位 IF move_platform(empty_slot, target_column) THEN step : 40; END_IF; 40: // 升降到一层 IF lift_down(target_bay) THEN step : 50; END_IF; 50: // 取车完成 step : 0; 100: // 故障 // 报警提示 step : 0; END_CASE;SCL的好处是流程一目了然而且可以嵌套条件、调用函数写起来比梯形图省一半时间。当然梯形图也有它的优势有些人习惯梯形图看触点比较直观这个因人而异。但涉及状态机我强烈建议用SCL。3.3 安全联锁哪些地方必须双保险如果说调度逻辑决定了车库“跑得快不快”那联锁逻辑就决定了“刹车稳不稳”。我在这个项目里做了多重安全保护有些是硬件上的有些是程序里的。第一重是接触器互锁。升降电机正转和反转接触器之间必须有电气互锁也就是正转接触器的常闭触点串联在反转接触器的控制回路里反之亦然。这样即使程序出现误输出两个接触器也不可能同时吸合避免电机短路。这一条是硬性规定程序互锁只是辅助。第二重是限位保护。升降机构的上限位和下限位接到PLC的DI点程序中必须保证只有检测到对应限位信号时才允许对应方向的运行。比如升降到了上限位程序里升降正转输出必须立即断开同时置位一个“升降上限状态”标志。第三重是超时保护。我习惯给每个电机的运行时间设定一个上限比如横移电机最长运行15秒升降电机最长运行30秒。超过这个时间还没有碰到限位程序自动判断为故障并停机。这个虽然用不到什么高端技术但在现场救过我无数次尤其是传感器松脱或者机械卡阻的时候。第四重是安全挂钩和急停。安全挂钩是机械防坠装置PLC必须检测到挂钩完全脱开才允许横移检测到挂钩锁紧才允许升降。至于急停要采用“常闭信号断电优先”的方案急停一按主接触器直接断开不依赖PLC程序。3.4 手自动模式切换的细节立体车库通常都有手动和自动两种模式。手动模式用于维护和调试可以单独操作某个电机自动模式用于正常使用按照调度逻辑自动执行存取车流程。这里有个很容易踩的坑手动模式切换到自动模式时如果现场设备还处于运行状态直接切换可能会导致误动作。我的做法是在模式切换指令执行时先置位一个“安全切换”标志强制所有电机停止延时500毫秒后再开放自动模式指令。这500毫秒是为了确保接触器已经完全释放避免电弧拉弧导致粘连。手动模式还要注意操作优先级的问题。我把“急停”和“限位”的优先级排在所有手动指令之前即使你手动按了正转但限位已经触发程序也不会输出。手动模式允许操作但绝不意味着绕过安全逻辑。4. 触摸屏、报警与上位机通讯实战现场调试时触摸屏是人和机器之间唯一的交互窗口。如果触摸屏做得好操作工上手快故障能看懂做得不好哪怕PLC程序再优秀客户也会觉得“这系统不行”。4.1 HMI做哪些画面我在这个项目里把触摸屏画面分成了5个页面主画面显示车库整体结构图每个车位用不同颜色标识状态绿色代表空闲、红色代表有车、黄色代表运行中、灰色代表故障。操作画面供操作员输入车位号、启动取车/存车流程、切换手动自动模式。手动画面每个电机一个按钮组正转、反转、停止带状态显示和互锁提示。故障画面显示当前故障代码、故障描述、发生时间并带复位按钮。参数画面设置各种时间参数比如电机超时时间、启动延时、提示音时长等。除了主画面之外我觉得最有用的是那个模拟状态图。它可以让调试人员在一屏之内看到每个限位有没有到位每个光电开关是否触发。有一次我远程帮客户排查故障就让对方拍了一张模拟状态图发过来一眼就看到是某个横移限位没亮查机械部分就解决了。4.2 PLC报警文本导入触摸屏这件事当时做项目时我遇到一个很头疼的问题STEP 7中写的报警文本怎么导入威纶通触摸屏因为老式方案是报警文本在触摸屏里逐条手动输入工作量大且容易出错。后来我研究了一下威纶通EB Pro其实支持从TIA Portal导出的CSV文件批量导入报警。操作方法是先在博途里把PLC的报警文本通过“导出”功能生成CSV文件然后在EB Pro的报警表里选择“导入”把CSV映射到对应地址。核心是报警变量要与PLC数据块里的地址一一对应比如%DB1.DBD0对应报警代码或者报警触发状态位。但要注意一点这种方式导入的是报警文本不是报警触发逻辑。也就是说PLC里还是得自己写报警触发和复位逻辑触摸屏只是负责显示。我当时的做法是在PLC里建了一个DB里面每个位对应一条报警触发之后把对应位置1触摸屏监控这个字节一旦为1就弹报警并显示描述文本。4.3 Profinet组态与常见坑Profinet是S7-1200的老本行组态本身不复杂但有几个细节容易栽跟头。首先是设备名称。Profinet通信不靠IP地址靠的是设备名称。所以你在博图里给PLC、HMI、变频器分配的Profinet名称必须与设备实际设置的名称完全一致大小写、下划线都不能错。记得有一次我把变频器的名称写成了“ABB_ACS580”实际设备里设的是“abb_acs580”结果通信死活拉不起来折腾了半天才发现是大小写的问题。其次是IP地址规划。虽然Profinet通信靠名称但IP还是要规划好。我通常会把PLC固定为192.168.0.1HMI固定为192.168.0.2变频器依次往后排。同一网段内不能有重复IP这个基础常识也总有人忽略。还有一个就是跟第三方设备通信的问题。比如用KepServer连接S7-1200做上位机采集时需要在PLC里勾选“允许来自远程对象的PUT/GET通信访问”选项。这个选项在博图CPU属性里的“防护与安全”-“连接机制”中默认是关闭的。客户现场WinCC数据死活读不出来十有八九就是这个选项没打开。5. 现场调试与问题排查实录程序在办公室里仿真一百遍都不如现场通电跑一次来得真实。现场调试才是检验系统设计是否合理的关键环节也是踩坑最多的环节。5.1 上电前检查清单每次上电前我都会按这个清单逐项确认所有I/O接线是否与点表一致地址是否有跳变。继电器、接触器的线圈电压是否匹配直流和交流千万不能混接。传感器电源极性是否接反PNP输出是否对应PLC源型输入。电机和接触器的接地是否可靠屏蔽层是否单端接地。急停回路是否正常按下急停后主接触器是否立即释放。还有一点是CPU的供电端子和输出端子不要接反S7-1200的端子定义比较特殊接线前一定先看说明书。检查完毕后先给PLC上电但先不给电机上电在触摸屏手动画面逐个操作电机确认方向是否正确。方向反了的接触器要马上调整否则可能出现极限位置硬撞的严重事故。5.2 用监控表与强制功能快速定位博途的监控表非常好用。调试时我会开两个监控表一个监控所有输入信号一个监控所有输出信号并随时切换为“监视所有值”状态。这样可以直观看到每个限位是否反馈、每个输出是否响应。有时候逻辑看起来没问题但就是不动这时我会用“强制”功能强行给某个I/O点赋值看程序是否正确响应。比如怀疑某个横移限位没到位强制把那个DI点置为1如果程序能继续运行说明是传感器信号问题如果程序还是卡着说明是逻辑问题再回头查SCL。不过强制功能一定要慎用尤其是强制输出。强制了输出后发现现场接触器吸合这是事故隐患。我的习惯是强制输入点而不是输出点输出逻辑让程序自己跑这样风险小很多。5.3 常见故障速查表下面是我这个项目里遇到的几个典型故障和处理方法整理成表方便大家现场对照故障现象可能原因排查方法解决方法触摸屏不通讯IP地址不在同一网段检查PLC和HMI的IP统一修改为同网段地址电机启动后立即停止接触器自锁回路松动检查接触器辅助触点接线重新紧固接线端子限位信号一直为1接近开关感应金属异物检查传感器安装位置附近调整安装位置或更换传感器升降电机超时报警限位未触发或机械卡阻检查限位安装和机械结构排除卡阻调整限位位置PLC下载失败缺少面板映像博图版本缺少硬件支持包HSP更新或安装对应HSP文件在官网下载对应版本HSP变频器无法启动Modbus地址或波特率不对检查变频器参数设置重新设定参数威纶通报警不显示报警地址映射错误导入CSV检查地址映射修正地址重新导入程序保护密码丢失忘记PLC密码使用存储卡或恢复出厂设置注意备份程序慎重操作5.4 印象最深的几个现场问题第一个是升降电机异响。当时的问题出在变频器的加减速时间设置太短电机在启动瞬间冲击太大。把加速时间从1秒调成3秒后异响消失运行明显平稳。这里的前提是升降速度不快车库对效率要求不高追求平稳是优先目标。另一个是横移平台偶尔“过冲”总是多跑几厘米。后来发现是接近开关的感应距离太灵敏车板运行速度又偏快导致信号反馈时机械已经冲过头了。解决办法是换用感应距离更小的接近开关同时把横移电机的减速时间也调长了一点。还有一个是急停复位后系统无法恢复。排查发现急停回路串接了多个急停按钮用的常闭触点但我把程序里判断急停状态的逻辑写成了“读急停常开位”导致急停复位后常开位一直为0程序始终认为急停在按下状态。后来把程序改成“读急停常闭信号”后才解决。这个教训让我明白急停信号的处理必须考虑硬件回路特性和PLC输入映像的一致性。做立体车库项目技术上说难不算难但也不算简单。它不像那些复杂的运动控制项目需要高深的算法和高性能的运动控制器。难的在于逻辑要严谨、安全要到位、调试要耐心。我始终觉得能让人放心停车的控制系统背后离不开扎实的联锁设计和反复的现场验证。最后分享一个我自己的小习惯每次做完一个项目的接线和程序我都会把所有I/O分配表、程序块功能说明、触摸屏操作手册整理成一个文档存档哪怕甲方不要求也做。这个习惯看着不起眼但半年后设备出问题翻开文档五分钟就能定位问题省下的时间和麻烦不是一点点。希望这篇复盘对你有用也欢迎在评论区聊聊你遇到的立体车库奇葩故障。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门