十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

单步六层电梯PLC控制程序详解:博图V15.1与S7-1200实战

单步六层电梯PLC控制程序详解:博图V15.1与S7-1200实战 简介这是一份基于西门子博途V15.1软件的单步六层电梯控制程序资源面向自动化专业学生、PLC开发人员及电梯控制技术爱好者适合用于理解楼层呼叫、顺向集中控制与反向呼叫无效策略等典型控制逻辑。资源共52个文件压缩包大小7.95MB以工程配置和程序文件为主其中包含ap15_1项目主文件、xml配置描述、plf/idx布局索引、cfs/db等数据文件以及HMI相关画面与搜索索引文件基本覆盖博途项目从PLC程序到触摸屏组态的主要模块解压后可直接在软件中打开分析文件分类清楚便于按需查找。当前已有874人学习或下载这一资源。阅读工程可了解复位、启动、多楼层顺向逐层运行、同层重新计时以及运行中反向呼叫无效等场景的编程实现帮助快速上手博途项目结构也可作为课设或竞赛中电梯控制题目的参考模板尤其适合进行功能仿真与定时调试验证。 说实在的第一次看到“单步六层电梯博图V15.1”这个题目时你可能以为是个简单的课程设计但真正上手后会发现电梯控制几乎是PLC逻辑控制的集大成者——楼层判断、方向互锁、呼梯响应、平层停车、开关门时序全挤在这么一个小系统里。我当年带学生做这个项目时很多人卡在“电梯不走”或者“停错楼层”上最后发现基本都是逻辑顺序不对、变量规划不清。这篇就来把这套单步六层电梯从方案设计到程序实现、再到仿真调试的完整过程捋一遍用的就是西门子博图V15.1 S7-1200这套组合。不管你是自动化专业的在校生、刚入行的PLC工程师还是培训机构里正在啃电梯案例的学员这篇文章都能给你一条相对完整的路线。先解释一个概念什么叫“单步”。电梯控制按响应策略分很多种单步是最基础的一种系统一次只响应一个呼梯指令处理完这个指令到达楼层、开门、关门再去处理下一个。它不像全集选那样会提前规划路径、顺路捎带也不涉及群控调度。优点就是逻辑清晰、安全可靠、代码量小非常适合拿来理解电梯控制的核心流程。等单步逻辑吃透了后面再写顺向集选、加减速曲线无非是在这个骨架上添砖加瓦。1. 项目整体设计与控制思路1.1 单步控制策略的核心逻辑既然叫“单步”那么整个控制流程必须符合一个状态链条空闲等待 → 收到呼梯 → 判断方向 → 运行 → 平层停车 → 开门 → 延时关门 → 复位呼梯 → 回到空闲。这条链路上每一步都有严格的触发条件少一个条件程序就会卡住。这里有个很关键的设计决策呼梯信号要不要锁存必须锁存。按钮是瞬时的人按一下可能只有几百毫秒扫描周期一过信号就没了必须用置位指令把呼梯请求记下来等电梯完成服务后再复位。这个“置位-等待-复位”的过程就是电梯控制最核心的节奏。另外一个容易忽略的点是单步模式下如果多个楼层同时呼梯怎么办真实电梯有完善的排队算法但单步教学项目通常采用简化策略——固定优先级。常见的实现是楼层号低者优先或者直接在第一个呼梯信号到来时锁定目标楼层后续呼梯全部忽略直到本次服务完成。我在实际带项目时倾向于用“锁定目标楼层”方案因为逻辑最简单、跑起来最稳定程序调试的时候不会出现目标楼层来回跳的诡异现象。1.2 博图V15.1与硬件选型方案博图V15.1TIA Portal V15.1是西门子全集成自动化平台的一个经典版本支持S7-1200、S7-1500、S7-300/400等系列PLC的组态、编程和调试。做这个项目选S7-1200系列是完全够用的具体型号常用CPU 1214C DC/DC/DC自带14路数字量输入和10路数字量输出单步六层电梯的数字量I/O点刚好能覆盖住不需要额外扩展模块除非你要把每个按钮的状态灯都接出来。硬件组态这一步没啥门槛但要养成好习惯新建设备时一定要核对订货号。很多新手卡在“组态的设备在线找不到”十有八九是订货号跟实物不一致。博图V15.1里创建项目后在“添加新设备”里直接选CPU 1214C确认固件版本和订货号即可。下载到真实PLC之前也可以先通过PLCSIM做纯仿真调试节省现场时间。选博图还有个好处梯形图、SCL、STL三种编程语言可以混用。后面我会重点说为什么这类控制逻辑用SCL写状态机更舒服但梯形图的互锁逻辑也不能丢。两种语言各干各擅长的事才是工程上比较合理的用法。2. 系统I/O规划与内部数据结构2.1 I/O点表从现场信号到PLC地址我在教程里见过很多版本的点表有的把外呼按钮设计成“每层一个单按钮”有的设计成“上行/下行双按钮”有的甚至还加了超载开关、光幕信号。但作为单步教学项目我建议不要一上来就把点填得太满把核心信号规划好就够了。下面这套点表是实际验证过、能跑通整个流程的类型地址名称说明输入I0.0内呼一层按钮轿厢内选层楼层按钮输入I0.1内呼二层按钮轿厢内选层输入I0.2内呼三层按钮轿厢内选层输入I0.3内呼四层按钮轿厢内选层输入I0.4内呼五层按钮轿厢内选层输入I0.5内呼六层按钮轿厢内选层输入I1.0一层外呼按钮每层一个简化版不区分上下行输入I1.1二层外呼按钮同上输入I1.2三层外呼按钮同上输入I1.3四层外呼按钮同上输入I1.4五层外呼按钮同上输入I1.5六层外呼按钮同上输入I2.0一层平层开关每层安装平层感应器输入I2.1二层平层开关同上输入I2.2三层平层开关同上输入I2.3四层平层开关同上输入I2.4五层平层开关同上输入I2.5六层平层开关同上输入I3.0开门按钮轿厢内开门按钮输入I3.1关门按钮轿厢内关门按钮输入I3.2开门到位限位门开到位反馈输入I3.3关门到位限位门关到位反馈输出Q0.0上行接触器电机正转控制轿厢上升输出Q0.1下行接触器电机反转控制轿厢下降输出Q0.2开门继电器开门机构动作输出Q0.3关门继电器关门机构动作输出Q0.4运行状态指示灯电梯运行指示输出Q0.5到站指示/蜂鸣器平层到站提示这套点表最大的特点就是“够用、不臃肿”。外呼和内呼分开但逻辑上可以共用一套目标楼层处理流程编程省事。外呼不区分上下方向意味着乘客按下外呼按钮后电梯只需要到达楼层即可不需要判断“是要上行还是要下行”对单步项目来说非常友好。2.2 内部变量与数据块设计很多新手一上来就写梯形图写完一个网络又一个网络最后自己都看不懂。核心问题在于没有先想清楚“系统里需要哪些中间变量”。电梯控制本质上是在维护几个关键状态建议用一个独立的DB块管理这些数据。我习惯建立一个DB_ElevatorData数据块内部变量大致如下CurrentFloor当前楼层INT类型由平层开关信号实时刷新电梯到哪一层就更新成对应楼层号。TargetFloor目标楼层INT类型呼梯信号触发后锁存服务完成后清空。UpCommand上行命令BOOL类型方向判断的结果。DownCommand下行命令BOOL类型同上。CallLock[1..6]内呼锁存位数组或6个独立的BOOL变量。OutCallLock[1..6]外呼锁存位同理。State系统状态编码INT类型0空闲1上行2下行3开门4关门。为什么要单独建DB块而不是直接用M区结构化。变量多了之后M区地址容易记混而且博图对DB块变量支持符号寻址调试时看监控表非常直观。写梯形图时直接拽变量名程序可读性比裸地址高一个档次。当前楼层的维护值得特别说一句不要用“电梯运行时间或脉冲数推算当前位置”要用平层开关的信号刷新。这是保证电梯不“跑丢”的唯一可靠手段。程序里每个扫描周期扫一遍6个平层输入哪个亮了就把CurrentFloor更新成对应的楼层号。这个方法简单到没什么技术含量但它就是绝对可靠。3. 核心程序逻辑与关键实现3.1 呼梯信号锁存与目标楼层锁定呼梯处理是整个程序的入口推荐用梯形图实现因为按钮信号和锁存位的关系非常直观。以一层内呼为例I0.0的常开触点串联一个“电梯未到达一层”的常闭条件驱动M0.0置位当电梯到达一层、门打开、服务完成后再用复位指令清掉M0.0。锁存的意义前面说了就是防止按钮松开后请求丢失。目标楼层的锁定逻辑要单独写不能用简单的赋值指令直接覆盖。我的做法是在空闲状态State0下如果有任何一个呼梯锁存位置位就把对应的楼层号写入TargetFloor同时把State从0切到“运行准备”状态。一旦TargetFloor被写入后续的呼梯信号只置位对应的锁存位不再更新TargetFloor——直到本次服务结束CallLock和OutCallLock全部清空State回到0才允许重新锁定目标。这个设计就是单步控制“一次只处理一个指令”的代码体现。如果不加这个锁定条件程序就会反复执行“取最后出现的呼梯”这个动作运行中途目标楼层一变电梯就会在楼层之间来回折腾看着就像抽风。3.2 运行方向判断与电机正反转互锁方向判断逻辑本身并不复杂TargetFloor CurrentFloor就上行TargetFloor CurrentFloor就下行相等就该平层开门。但在工程实现里有一个非常容易踩的坑方向指令不能只给一个扫描周期必须“保持住”。为什么因为电梯运行过程中每经过一层平层开关都会刷新CurrentFloor假如目标楼层是5层电梯刚过3层时CurrentFloor3条件成立继续运行到4层时又刷新成4还是成立继续走只有到5层时TargetFloor5等于条件方向指令撤销停车。如果你只在某个扫描周期进行一次比较、不保持输出电梯刚起步方向就丢了根本到不了目标楼层。电机控制还必须做双重互锁。硬件上上行接触器KM1和下行接触器KM2的常闭触点要串进对方的线圈回路这是硬互锁防反接短路程序里也要做软互锁——Q0.0的线圈回路里串Q0.1的常闭触点Q0.1的线圈回路里串Q0.0的常闭触点。博图编程时这个操作很简单但千万别省。我曾经见过一个学生做了硬互锁就忽略了软互锁结果调试时程序逻辑出了一次错两个输出同时为1接触器直接“啪”地跳闸太吓人了。3.3 平层停车与开关门时序控制电梯到达目标楼层后触发平层开关程序需要完成一串动作停方向输出 → 启动开门 → 延时 → 关门 → 关门到位 → 复位呼梯锁存 → 回到空闲。这串动作用梯形图写网络能写六七个但用状态机思路加SCL来写会清晰很多。我给一个简化版的SCL状态机片段展示核心逻辑走向CASE #State OF 0: // 空闲等待呼梯 IF #InnerCall_1 THEN #TargetFloor : 1; #State : 1; ELSIF #OutCall_3 THEN #TargetFloor : 3; #State : 1; END_IF; 1: // 判断方向并启动运行 IF #CurrentFloor #TargetFloor THEN #UpCommand : TRUE; #State : 2; ELSIF #CurrentFloor #TargetFloor THEN #DownCommand : TRUE; #State : 3; ELSE #State : 4; // 目标就是当前层直接开门 END_IF; 2: // 上行运行等待平层 IF #FloorSensor[#TargetFloor] THEN #UpCommand : FALSE; #State : 4; END_IF; 3: // 下行运行等待平层 IF #FloorSensor[#TargetFloor] THEN #DownCommand : FALSE; #State : 4; END_IF; 4: // 开门 #OpenDoor : TRUE; #DoorTimer(IN : TRUE, PT : T#5S); IF #DoorOpenLimit THEN #State : 5; END_IF; 5: // 开门延时后关门 IF #DoorTimer.Q THEN #OpenDoor : FALSE; #CloseDoor : TRUE; #State : 6; END_IF; 6: // 关门完成复位呼梯回到空闲 IF #DoorCloseLimit THEN #CloseDoor : FALSE; #ResetAllCall(); #State : 0; END_IF; END_CASE;这段代码不是完整项目但状态脉络非常清楚。这里有个细节值得展开平层开关的判断用的是“第几个平层传感器亮了”也就是数组索引#FloorSensor[#TargetFloor]。如果平层输入在真实接线里是按楼层顺序接的索引直接对应楼层号代码简洁且不容易出错。如果接线顺序乱了就必须在写地址时做一个映射表否则电梯永远找不到家。这一条项目验收时很多同学翻过车。3.4 梯形图与SCL的混用策略可能有读者要问全用梯形图行不行行但不是最佳方案。全用SCL行不行也行但互锁逻辑的可视化程度会低。工程上我推荐混用呼梯锁存、输出互锁用梯形图运行状态机用SCL。原因是呼梯锁存和互锁本质是“电路逻辑”梯形图跟继电器电路同构现场电工看着也熟出了问题好排查而状态机本质是“流程逻辑”SCL的CASE语句天然匹配“状态-事件-迁移”的写法比梯形图一串串跳转指令直观得多。S7-1200支持在同一个项目中创建多个FC/FB每个块可以选用不同语言调用时互相嵌套完全没问题。实测下来这种混用结构在调试阶段的优势最明显。梯形图部分可以用监视模式直接看每个网络的通断状态SCL部分则可以在变量监控表里盯住State的值变化。电梯卡在哪个状态、为什么卡住一眼就能定位。4. PLCSIM仿真调试与问题排查实录4.1 用PLCSIM做全流程模拟验证没有真实PLC的时候博图V15.1自带的PLCSIM就派上大用场了。操作流程不复杂写好程序后在博图里点“启动仿真”按钮软件会自动拉起S7-PLCSIM然后把硬件组态和程序一起下载进虚拟PLC。之后就可以像操作真机一样监视变量、强制输入。仿真的关键技巧是熟练掌握“强制表”。比如要模拟“3层内呼被按下”可以在强制表里把I0.2强制为TRUE扫描几个周期后恢复FALSE模拟一个真实的按钮动作过程。同样模拟电梯到达目标楼层时把对应层平层开关强制为TRUE程序状态机就会向后推进。整个过程不需要接一根线纯粹靠强制输入模拟现场信号非常适合初学者在动手接线前先把逻辑跑通。需要注意PLCSIM的定时器行为跟真实PLC基本一致但仿真速度可能受电脑性能影响。如果发现延时时间明显偏长或偏短先别怀疑程序看看是不是仿真负载太高。4.2 常见问题速查与解决思路做这个项目过程中我遇到过、也见学生遇到过很多典型问题整理成一张速查表挨个对照排查效率很高现象可能原因排查方法按下呼梯按钮后电梯完全没反应呼梯锁存位未置位门锁条件未满足目标楼层锁定逻辑未触发监控呼梯锁存位和State值确认按钮输入有上升沿确认关门到位信号为TRUE电梯运行后冲过目标楼层才停平层信号未接入平层开关地址映射错误停梯条件写成了“楼层相等”而非“平层开关触发”检查目标楼层的平层开关强制信号确认FloorSensor[#TargetFloor]能变成TRUE电梯在本层反复启停、抖动方向判断在多个扫描周期里反复执行目标楼层未锁定检查TargetFloor是否被锁定到服务结束方向输出是否持续保持到站后开门但门一直不关开门延时计时器未触发关门输出条件缺失开门到位限位常闭条件没串对监控DoorTimer.Q和关门输出确认计时器在开门后启动运行中两个输出同时为1软互锁未做或做得有误检查上行输出网络里是否串联了下行输出常闭触点反之亦然仿真时一切正常真实PLC上不走输入接线接反信号地未接接近开关类型不匹配先在线监视输入点操作按钮看对应I点是否翻转这里面我想特别强调“平层开关”的处理。很多学生习惯用“当前楼层等于目标楼层”来判断是否停车但电梯在真实运行时因为惯性平层开关触发和编码器/传感器读数会有微小偏差直接比较楼层号容易造成停车位置不准。更稳的做法是运行过程中持续扫描6个平层开关一旦目标楼层的那个平层开关变为TRUE立刻停方向输出。这样就算CurrentFloor刷新稍有延迟停梯位置也是可靠的。4.3 实操心得与几个值得优化的方向项目做完之后如果只停留在“能跑”这一步收获会打折扣。我每次带人做这个项目都会建议在基础版本之上做几个小升级既加深理解又锻炼水平。第一个方向是加“显示功能”。当前方案里没有做楼层显示和方向指示实际教学中可以加一个七段数码管显示当前楼层或者用触摸屏做个简单的HMI画面。博图V15.1里面集成了WinCC组态一个画面把CurrentFloor、State、呼梯锁存位显示出来交互感一下子就上来了。这块内容不多但能把“PLC逻辑编程”和“HMI画面组态”串起来对找工作写简历也有帮助。第二个方向是给开关门加“安全逻辑”。比如开门状态下禁止运行、关门过程中检测到障碍物自动开门、超载时不启动等。这些在实际电梯标准里都是强制要求教学项目虽然可以简化但至少应该理解其背后的设计思想。加一两个条件并不复杂但对理解“安全回路”的概念非常有帮助。第三个方向是做一个加宽版本的“双步排队”策略——一次可以记录两个呼梯指令电梯完成第一个后自动响应第二个。这是从单步到全集选之间的一个很自然的中间过渡改起来也只需要把“锁定目标楼层”改成“维护一个长度为2的优先级队列”状态机结构不需要大动。有了单步六层的基础这个扩展项目我见过最快的同学两天就搞定了。最后再分享一个真实调试中的小教训无论仿真跑得多顺利第一次接真实PLC测试时一定先把主回路断开只给PLC和输入输出模块通电手动操作按钮确认每个I/O点都跟点表对得上再接通电机主回路。这一步听起来麻烦但它能避免大多数“接线错误烧接触器”的事故。我见过不止一个聪明学生省了这一步最后花了三倍时间排查还搭进去几个元器件。单步六层电梯这个项目说难不难说简单也绝不含糊。它把一个完整工业控制系统该有的输入采集、逻辑运算、输出驱动、状态管理全走了一遍。你在调试过程中踩过的每一个坑、理清的每一段逻辑后面做再复杂的系统都用得上。先把这条单步链路跑通电梯控制的半壁江山基本就到手了。本文还有配套的精品资源点击获取
返回列表