基于PLC的三层电梯控制系统设计:状态机与梯形图实战
1. 从课程设计题目到真实工程思维的转换“基于PLC的三层楼电梯自动控制系统设计”这个题目几乎每一届自动化、电气工程及其自动化、机电一体化专业的学生都会在课程设计阶段遇到。很多人拿到题目第一反应是去网上找现成的梯形图抄一份能跑通仿真就交差。我带过几届课程设计也看过不少学弟学妹的答辩现场发现一个很普遍的现象程序能跑但被问到“为什么这样设计”“如果楼层信号抖动怎么办”“检修模式和正常运行怎么切换”时基本答不上来。这篇内容就是想把我在这个课程设计上反复打磨、踩坑、重构的经验完整分享出来让后来者少走弯路。三层电梯看起来简单实际上它是一个典型的顺序控制加状态机系统涉及输入信号采集、输出执行机构驱动、楼层位置判断、运行方向决策、开关门逻辑、安全保护等多个模块。用PLC来实现核心难点不在编程语法而在于如何把电梯的运行逻辑抽象成清晰的状态转换关系以及如何用有限的I/O点完成所有功能。这个题目之所以被广泛选为课程设计恰恰是因为它麻雀虽小五脏俱全能考察学生对PLC编程、传感器应用、电机控制、人机交互的综合理解。适合阅读这篇内容的人包括正在做这个课程设计的在校学生、刚接触PLC编程想找一个完整案例练手的初学者、以及需要带学生做类似题目的实训指导教师。我会从系统架构、I/O分配、状态机设计、梯形图实现、仿真调试、常见坑点几个维度展开尽量把每一个设计决策背后的“为什么”讲清楚而不是只给一份代码让你抄。2. 三层电梯被控对象的物理模型与需求拆解2.1 电梯运行的基本动作序列在动手写程序之前必须先把电梯的物理动作拆解清楚。三层电梯的完整运行周期可以描述为电梯停在某一层轿厢门和层门关闭此时如果某一层有呼叫信号电梯需要判断当前所在楼层与呼叫楼层的关系决定上行还是下行然后启动曳引机运行到目标楼层减速平层开门等待乘客进出延时后关门继续响应下一个呼叫。这个过程中涉及几个关键状态待机状态、运行状态、开门状态、关门状态、故障状态。每个状态之间有明确的转换条件比如待机状态下检测到呼叫信号且门已关闭就进入运行状态运行状态下到达目标楼层且平层信号触发就进入开门状态。这种状态划分是后续梯形图编程的骨架。很多人一开始就急着画梯形图结果写到一半发现逻辑混乱就是因为没有先把状态机画清楚。我的建议是拿一张纸把电梯所有可能的状态画成圆圈把状态之间的转换条件画成箭头这张图完成了程序就完成了一半。2.2 三层电梯与多层电梯的逻辑差异三层电梯和十层电梯在控制逻辑上有本质区别吗有但不大。核心差异在于方向优先级的判断复杂度。三层电梯因为楼层少方向判断相对简单如果电梯在二层一层和三层同时有呼叫通常按照先来后到或者上行优先的原则处理即可。但如果是十层电梯就需要考虑顺向截梯、最远反向截梯等更复杂的调度算法。对于课程设计来说三层电梯的优势在于可以把精力集中在状态机的完整性和安全性上而不是被复杂的调度算法分散注意力。但这不意味着三层电梯就可以随便写相反正因为逻辑简单答辩老师更容易追问细节比如“如果一层和二层同时呼叫电梯在二层你先响应哪个”“如果开门过程中又有新呼叫怎么办”。这些问题考察的是你对边界条件的考虑是否周全。2.3 安全回路与检修模式的必要性一个完整的电梯控制系统必须包含安全回路和检修模式。安全回路包括门锁开关、限位开关、急停按钮等任何一项触发都必须立即切断曳引机电源。检修模式则是让维修人员可以低速点动电梯方便检修。在课程设计中虽然不需要真的接安全回路但在PLC程序中必须体现这些逻辑否则这个设计就是不完整的。我见过很多课程设计报告程序里只有正常的呼叫和运行逻辑完全没有安全保护答辩时被问“如果门没关电梯就运行了怎么办”就哑口无言。所以从设计之初就要把安全逻辑作为独立模块来考虑而不是事后补丁。3. PLC选型与I/O地址分配的实战考量3.1 为什么大多数课程设计选西门子S7-200 SMART或三菱FX系列在课程设计场景下PLC选型主要考虑三个因素学校实验室现有设备、编程软件的易用性、仿真工具的配套情况。国内高校实验室最常见的是西门子S7-200 SMART和三菱FX3U/FX5U系列。西门子的优势在于TIA Portal或STEP 7-Micro/WIN SMART的编程环境成熟仿真软件PLCSIM可以脱离硬件调试三菱的优势在于GX Works2/GX Works3上手快指令系统直观适合初学者。如果学校没有指定型号我的建议是优先选你实验室有的设备。因为课程设计最终往往需要下载到实物PLC上演示仿真跑通和实物跑通之间还有一道鸿沟比如输入信号的抖动、输出继电器的响应时间、电机的实际惯性等这些在仿真里是感受不到的。3.2 I/O点数统计与地址分配表三层电梯的I/O点数可以控制在20个点以内具体分配如下表所示。这个表是整个设计的基础必须在画梯形图之前确定下来并且在整个程序中保持一致。信号类型信号名称地址说明输入一层呼叫按钮I0.0常开触点按下为1输入二层呼叫按钮I0.1常开触点按下为1输入三层呼叫按钮I0.2常开触点按下为1输入一层平层开关I0.3光电或机械限位到位为1输入二层平层开关I0.4光电或机械限位到位为1输入三层平层开关I0.5光电或机械限位到位为1输入开门到位开关I0.6门完全打开为1输入关门到位开关I0.7门完全关闭为1输入急停按钮I1.0常闭触点正常为1按下为0输入检修开关I1.1检修模式为1输出曳引机上行Q0.0驱动上行接触器输出曳引机下行Q0.1驱动下行接触器输出开门电机Q0.2驱动开门接触器输出关门电机Q0.3驱动关门接触器输出一层指示灯Q0.4呼叫登记指示输出二层指示灯Q0.5呼叫登记指示输出三层指示灯Q0.6呼叫登记指示输出运行指示灯Q0.7电梯运行中指示这个分配方案的特点是平层开关采用独立输入而不是用编码器或脉冲计数。对于三层电梯来说独立平层开关最简单可靠每个楼层一个限位开关到位即触发。如果要用编码器反而增加了复杂度和调试难度课程设计阶段没有必要。3.3 输入信号的消抖处理实际工程中按钮和限位开关的触点闭合瞬间会有抖动如果PLC扫描周期足够快可能会在一个扫描周期内读到多个上升沿导致呼叫被重复登记。虽然课程设计的仿真环境里通常没有抖动但如果在实物上调试这个问题一定会遇到。处理方式有两种一是硬件消抖在按钮两端并联RC电路二是软件消抖在PLC程序里用定时器做延时确认。我通常用软件消抖具体做法是当检测到输入信号为1时启动一个100ms的定时器定时器到期后再次确认输入仍为1才认为信号有效。这段逻辑可以封装成一个子程序对所有按钮输入统一处理。注意平层开关的消抖时间可以比按钮短一些因为平层信号需要快速响应通常20-50ms就够了。如果消抖时间太长电梯可能会冲过平层点。4. 状态机设计把电梯逻辑画成一张图4.1 电梯的五个核心状态定义在PLC程序里我用一个字节的五个位来表示电梯的当前状态这样在梯形图里可以用比较指令或者位逻辑来切换。五个状态分别是待机状态电梯停在某层门关闭无运行指令等待呼叫。运行状态电梯正在上行或下行曳引机运行中。开门状态电梯到达目标楼层开门电机运行门正在打开或已打开。关门状态门打开延时结束关门电机运行门正在关闭。检修状态检修开关打到检修位电梯只能点动运行不响应正常呼叫。这五个状态之间是互斥的任意时刻电梯只能处于其中一个状态。状态转换的条件包括呼叫信号、平层信号、开门到位信号、关门到位信号、延时定时器、急停信号等。4.2 状态转换条件的详细梳理从待机状态出发如果检测到任意楼层有呼叫且门已关闭就进入运行状态。运行状态中根据当前楼层和目标楼层的关系决定上行还是下行。到达目标楼层且平层信号触发后进入开门状态。开门到位后启动延时定时器延时结束后进入关门状态。关门到位后如果还有未响应的呼叫再次进入运行状态如果没有回到待机状态。这里有一个容易忽略的细节如果电梯在运行过程中经过中间楼层而中间楼层有同方向的呼叫是否要停对于三层电梯来说如果电梯从一层到三层二层有上行呼叫按照顺向截梯原则应该停。但如果二层是下行呼叫则不应该停因为电梯当前是上行方向。这个逻辑在程序里需要用方向标志位来判断。另一个细节是开门延时期间如果有新呼叫怎么办。通常的做法是开门延时期间不响应新呼叫等关门到位后再统一判断。但有些设计会在开门延时期间检测到同层反向呼叫时延长开门时间这个看具体需求课程设计里可以简化处理。4.3 用置位/复位指令实现状态切换在梯形图里实现状态机最清晰的方式是用置位S和复位R指令。每个状态对应一个内部继电器比如M0.0表示待机M0.1表示运行M0.2表示开门M0.3表示关门M0.4表示检修。状态转换时先复位当前状态再置位目标状态。这种写法的好处是逻辑清晰每个网络只负责一个转换条件调试时很容易定位问题。缺点是程序篇幅会稍长但对于课程设计来说可读性比紧凑性更重要。我见过有人用步进指令STL来写程序确实短但一旦某个状态卡住排查起来非常痛苦。提示状态切换时一定要确保互斥即任意时刻只有一个状态位为1。可以在程序开头加一段保护逻辑如果检测到多个状态位同时为1强制复位所有状态并报警。5. 梯形图程序的核心网络拆解5.1 呼叫登记与指示灯输出网络呼叫登记的逻辑是当某一层的呼叫按钮被按下且该层没有正在被响应时置位该层的呼叫登记位同时点亮对应的指示灯。呼叫登记位在电梯到达该层并开门后复位。这里有一个细节如果电梯已经停在某一层该层的呼叫按钮被按下应该直接开门而不是登记呼叫后等电梯运行。所以呼叫登记网络里要加一个判断如果当前楼层等于呼叫楼层且电梯处于待机状态直接触发开门不登记呼叫。指示灯的输出就是呼叫登记位的直接映射呼叫登记位为1时指示灯亮为0时灭。这个很简单但要注意指示灯的闪烁问题。有些设计会让呼叫指示灯闪烁表示正在响应这需要额外的定时器课程设计里可以不做。5.2 方向判断与曳引机控制网络方向判断是电梯程序里最核心也最容易出错的部分。我的做法是用两个内部继电器M1.0和M1.1分别表示上行方向和下行方向。判断逻辑如下如果当前楼层小于目标楼层且没有下行指令则置位上行动作。如果当前楼层大于目标楼层且没有上行指令则置位下行动作。如果当前楼层等于目标楼层则复位方向标志进入开门流程。曳引机的输出Q0.0和Q0.1分别由上行和下行标志位驱动但必须串联安全条件门锁关闭、急停未触发、检修开关未动作。这些条件任何一个不满足曳引机都不能启动。这里有一个常见的坑方向标志位的复位时机。如果电梯到达目标楼层后没有及时复位方向标志下一次呼叫时可能会沿用错误的方向。我的做法是在开门状态置位的同时复位所有方向标志。5.3 开关门控制的定时器与互锁逻辑开门和关门的控制逻辑相对简单但互锁必须做好。开门输出Q0.2和关门输出Q0.3不能同时为1否则会烧毁电机驱动电路。在梯形图里Q0.2的线圈前串联Q0.3的常闭触点Q0.3的线圈前串联Q0.2的常闭触点这是最基本的互锁。开门流程到达目标楼层且平层信号触发后置位开门状态Q0.2输出门开始打开。开门到位开关I0.6触发后复位Q0.2启动开门延时定时器T37延时5秒。延时结束后置位关门状态Q0.3输出门开始关闭。关门到位开关I0.7触发后复位Q0.3复位关门状态回到待机或运行状态。这里有一个实际调试中经常遇到的问题开门到位开关和关门到位开关的时序。如果门在关闭过程中被异物挡住关门到位信号不会触发程序会一直停在关门状态。所以需要加一个关门超时保护关门定时器超过10秒仍未到位则重新开门并报警。5.4 检修模式与安全回路的程序实现检修模式的优先级最高一旦检修开关I1.1为1立即复位所有正常状态进入检修状态。检修状态下只有点动按钮可以控制曳引机上下行且速度限制在低速。急停按钮I1.0为0时立即切断所有输出包括曳引机和开关门电机。安全回路的实现方式是在每个输出线圈前串联安全条件。比如Q0.0的驱动逻辑里必须包含I1.0急停正常、I0.7门已关闭、I1.1常闭非检修等条件。这种串联方式虽然简单但非常可靠任何安全条件不满足输出立即断开。注意急停按钮应该使用常闭触点这样即使线路断开PLC也能检测到故障并停机。如果使用常开触点线路断开时PLC可能误以为急停未按下存在安全隐患。6. 仿真调试中暴露的典型问题与排查过程6.1 电梯在两层之间来回振荡这是仿真调试中最常见的问题。现象是电梯到达某一层后开门又关门然后没有新呼叫却自动反向运行到了另一层又反向回来如此反复。根本原因通常是平层信号的保持时间不足或者方向标志位没有正确复位。排查过程先监控平层开关的输入状态发现电梯到达目标楼层时平层信号只在一个扫描周期内为1下一个周期就变成0了。这是因为仿真环境里限位开关的触发是瞬时的而实际电梯的平层开关在电梯停稳后会保持为1。解决办法是在程序里对平层信号做自保持一旦检测到平层信号为1就置位一个内部标志位直到电梯离开该楼层再复位。另一个可能的原因是方向标志位在开门后没有复位导致关门后程序仍然认为电梯需要继续上行或下行。检查方向复位逻辑确保在开门状态置位时同时复位所有方向标志。6.2 呼叫信号丢失与重复响应呼叫信号丢失的表现是按下呼叫按钮后指示灯亮了但电梯到达该层后没有开门或者开门后指示灯没有熄灭。重复响应的表现是电梯到达目标楼层开门后关门又立即开门反复多次。呼叫信号丢失通常是因为呼叫登记位在电梯运行过程中被意外复位。检查复位逻辑确认呼叫登记位只在电梯到达对应楼层并开门到位后才复位而不是在运行过程中复位。重复响应通常是因为开门到位信号和关门到位信号的逻辑冲突。如果开门到位后没有及时复位开门状态关门到位后又触发了开门条件就会反复开关门。解决办法是在开门到位后立即复位开门状态并启动延时定时器延时期间不响应任何开门请求。6.3 仿真与实物调试的差异仿真跑通不代表实物能跑通。我在实物调试时遇到过几个仿真里不会出现的问题输入信号抖动实物按钮的触点在闭合瞬间会产生多次通断导致呼叫被登记多次。解决办法是加软件消抖前面已经提到。输出继电器响应时间实物PLC的输出继电器从得电到触点闭合有10-20ms的延迟如果程序里依赖输出反馈做逻辑判断可能会出错。解决办法是尽量用内部标志位做逻辑判断而不是读输出状态。电机惯性实物电机的停止需要时间如果程序里一检测到平层信号就立即切断曳引机电机会因为惯性冲过平层点。解决办法是提前减速在到达平层点之前先降低速度这需要变频器支持课程设计里可以简化处理用延时切断代替。7. 课程设计报告撰写与答辩准备的实用建议7.1 报告结构应该包含哪些核心章节课程设计报告不是程序说明书的堆砌它需要体现你的设计思路和验证过程。我建议的报告结构是需求分析、方案设计、硬件选型与I/O分配、软件设计状态机图加梯形图说明、仿真调试、问题与解决、总结与改进方向。其中方案设计和问题与解决是最能体现个人工作的部分。方案设计里要写清楚为什么选这个PLC型号、为什么用独立平层开关而不是编码器、为什么用状态机而不是步进指令。问题与解决里要写你在调试中实际遇到的问题以及你是怎么排查和解决的这部分越具体越好。7.2 答辩时最容易被追问的五个问题根据我参与答辩的经验老师最常问的问题集中在以下几个方面如果两层同时呼叫电梯在第三层你先响应哪一层为什么这个问题考察你的调度策略回答时要说明方向优先级的判断逻辑。如果电梯运行过程中急停按钮被按下程序怎么处理这个问题考察安全逻辑回答时要说明急停如何切断输出、如何复位。平层信号抖动怎么办这个问题考察消抖处理回答时要说明硬件消抖和软件消抖的区别和选择。检修模式和正常运行怎么切换这个问题考察状态优先级回答时要说明检修模式的最高优先级。你的程序里有没有互锁哪些地方需要互锁这个问题考察安全性回答时要说明开门和关门的互锁、上行和下方的互锁。准备答辩时不要只背程序要把每个设计决策背后的理由想清楚。老师问“为什么”的时候你要能说出“因为……所以……如果不这样会……”。7.3 从课程设计到工程实践的差距最后说一点个人体会。课程设计里的三层电梯和真实电梯工程之间的差距是巨大的。真实电梯要考虑钢丝绳打滑检测、超载检测、消防迫降、停电应急平层、远程监控等一大堆功能而且安全回路的复杂度远超课程设计。但课程设计的价值在于让你建立状态机思维和安全优先意识这两个东西在后续任何工控项目里都用得上。我在实际工作中做过的自动化项目无论是流水线控制还是仓储物流核心逻辑都是状态机加安全互锁。三层电梯虽然简单但如果你能把状态转换的每一个边界条件都想清楚把安全逻辑做扎实这个课程设计就不仅仅是一个作业而是一次真正的工程思维训练。提示如果你想让课程设计更有亮点可以在完成基本功能后尝试加入一个简单的HMI触摸屏界面用组态软件做楼层显示和呼叫按钮。这会让你的设计看起来更完整答辩时也更容易给老师留下印象。