简介:本资源是一套基于西门子S7-1200 PLC实现的六层电梯控制系统完整工程文件,面向自动化、电气工程及相关专业初学者与实践者,解决电梯逻辑控制建模、多楼层召唤响应、平层定位、开关门协同及安全保护等核心问题。压缩包共34个文件,含6个XML配置文件(用于设备组态与通信参数)、5个DEL与CFS文件(系统数据块与符号表支持)、1个.tis项目结构文件及多个.plf、.idx、.db等TIA Portal工程必需的底层编译与索引文件,整体大小为638KB,结构符合标准S7-1200项目组织规范。已有513人学习下载,可直接导入TIA Portal V15及以上版本进行编译、仿真与硬件下载。读者将获得可运行的梯形图/ST混合逻辑程序、完整的PLC地址分配表、楼层信号采集与状态机控制流程、以及包含UserFiles、PEData、XRef等模块的成熟工程目录结构,是理解工业级电梯控制逻辑与PLC工程化开发的优质实操范例。 从学生时代的课程设计开始,一直到后来做真实的三层、六层甚至高层电梯改造,“基于PLC的六层电梯控制程序(S7-1200)”基本上是绕不开的经典题目。去年整理硬盘的时候,我翻出自己这套用博途(TIA Portal)写的S7-1200六层电梯控制程序,顺手重新打开工程跑了一遍仿真,发现核心逻辑放到今天依然通用,只是当年踩过的那些坑、总结出来的调试方法,现在再回头看更清晰了。这篇就把整个设计思路、I/O分配、程序架构、实操步骤和排查经验完整拆开讲,不管你是准备PLC课程设计、毕业设计,还是初学者接了电梯改造项目,都能拿来直接参考。
1. 项目概述:电梯控制程序到底要解决什么问题
1.1 电梯控制的核心是“调度”而不是“动作”
很多新手第一次接触电梯控制,第一反应是纠结“怎么让电机转起来”,实际上PLC控制电梯和变频器控制电机是两回事。在标准电梯改造中,六层电梯的拖动电机一般由变频器带动,PLC根本不需要直接输出PID调速信号,它只负责决定“往上还是往下”“到第几层停”“门开多久”。也就是说,PLC站在调度层:采集各种按钮和传感器信号,通过逻辑判断产生方向指令、停层指令、开关门指令,再把这些指令输出到接触器、继电器或变频器,让对方去执行。
所以六层电梯控制程序的核心,本质上是三个逻辑问题:呼叫如何登记、方向如何判定、到站如何停车开关门。把这三个问题想透了,程序怎么写都不会乱。
1.2 为什么选S7-1200做六层电梯
六层电梯的开关量点位大概在40点以内(输入约25到30点,输出约10到15点),这个规模用西门子S7-1200来跑非常舒服。
- S7-1200的CPU自带14DI/10DO,配合一个SM 1221数字量输入模块或者SM 1223数字量混合模块,点位完全够用,硬件成本不高。
- 编程软件TIA Portal(博途)是现在西门子的主流环境,比Step 7老界面友好太多,支持梯形图、SCL、FBD,初学和学习工控的人上手快。
- 集成以太网口,下载调试方便,网线一插就能在线监控变量、强制信号,比老式MPI/DP电缆体验好一个时代。
- 后续如果要接上位机(C#、LabVIEW、Java读数据)或者Profinet远程从站,S7-1200都是现成支持,不用换平台。
从课程设计和工程应用两个角度来说,S7-1200都是“性价比很高的选择”。有些学校教材还在用200SMART或三菱FX系列做电梯,那也很好,只是我下面讲的具体组态和指令会以S7-1200+博途为准。
1.3 六层电梯系统整体构成
整套控制系统可以分为三个部分:信号输入侧、PLC控制器、执行输出侧。
信号输入侧包括:轿厢内选层按钮(1到6层共6个)、厅外召唤按钮(1层只有上召,6层只有下召,中间2到5层有上召和下召共10个)、每层平层开关/楼层感应开关(共6个,用于判断轿厢当前到哪一层)、门锁信号、开关门到位信号、超载信号、急停信号、检修模式信号。
执行输出侧包括:上行接触器、下行接触器、开门继电器、关门继电器、楼层显示驱动、方向指示灯、到站提示铃。
这样一个系统,输入点位可以做到26到30个,输出点位10到14个。所以我建议CPU选择1214C DC/DC/DC,再扩展一块SM 1221 DI 16,或者用SM 1223的8DI/8DO组合。后者虽然模块多一块,但能让输出冗余更充裕。
2. 硬件搭建与I/O信号分配
2.1 输入信号梳理:不能只数按钮
把输入信号列出来这一步看着简单,实际上一错后面全乱。很多初学者拿到的参考图纸里,I/O表写得七零八落,照着接线后程序怎么调都别扭,大部分问题出在平层信号和门区信号的处理上。
六层电梯最常用的楼层检测方案是:在井道内每层安装一个感应开关或隔磁板,轿厢侧面安装一个平层感应器。轿厢经过哪一层,哪一层的信号就有效,PLC据此判断当前楼层。注意这个信号不是“持续保持”的,轿厢离开该层后信号就消失,所以程序中必须用当前楼层记忆机制:运行到某层时把当前楼层号更新并保持,直到下一次更新。
还有一种方案是接近开关加计数,用高速计数器HSC统计脉冲算楼层,但六层电梯用不到这么复杂,每个楼层一个感应点最简单可靠。
内呼和外呼按钮就更直接了:内呼6个,外呼10个(1层上召、6层下召、2到5层上下召各一),全部为自复位按钮,接到PLC数字量输入点。这些按钮在程序中要用置位/复位方式“记住”,不能被瞬时的按钮脉冲冲掉,所以要登记和消号。
下面是我实际项目中常用的一组I/O分配参考,你可以直接用:
| PLC地址 | 信号名称 | 说明 |
|---|---|---|
| I0.0~I0.5 | 内呼1~6层按钮 | 轿厢内选层 |
| I0.6 | 1层上召唤 | 厅外呼梯上 |
| I0.7、I1.0、I1.1 | 2/3/4层上召唤 | 厅外呼梯上 |
| I1.2 | 5层上召唤 | 厅外呼梯上 |
| I1.3 | 2层下召唤 | 厅外呼梯下 |
| I1.4、I1.5、I2.0 | 3/4/5层下召唤 | 厅外呼梯下 |
| I2.1 | 6层下召唤 | 厅外呼梯下 |
| I2.2~I2.7 | 1~6层平层开关 | 井道楼层感应 |
| I3.0 | 门锁信号 | 所有厅门轿门闭合 |
| I3.1 | 开门到位信号 | 开门机反馈 |
| I3.2 | 关门到位信号 | 开门机反馈 |
| I3.3 | 超载信号 | 超载开关 |
| I3.4 | 急停信号 | 常闭串入 |
| I3.5 | 检修/慢车模式 | 检修时强制低速 |
| Q0.0 | 上行接触器 | 控制电机正向 |
| Q0.1 | 下行接触器 | 控制电机反向 |
| Q0.2 | 开门继电器 | 开门机动作 |
| Q0.3 | 关门继电器 | 关门机动作 |
| Q0.4 | 楼层显示A | BCD编码个位 |
| Q0.5 | 楼层显示B | BCD编码 |
| Q0.6 | 楼层显示C | BCD编码 |
| Q1.0 | 上行方向灯 | 指示上行 |
| Q1.1 | 下行方向灯 | 指示下行 |
| Q1.2 | 到站铃/蜂鸣器 | 到站提醒 |
这张表不是死的。比如平层开关数量、外呼接线顺序都可以根据现场调整,但有一个原则必须保证:所有输入点中,急停、门锁、上下行接触器这类安全相关信号必须接常闭逻辑,也就是线路断开时PLC读到的必须是“停车条件不满足”,而不是“允许运行”。这样一旦断线,电梯停在原处,而不是疯跑。
2.2 输出侧执行机构:接触器互锁是保命项
输出侧最核心的是上行接触器和下行接触器。这两个接触器任何时刻只能有一个吸合,否则主回路短路,轻则跳闸,重则烧变频器。程序里当然要做互锁,即上行条件满足时强制复位下行输出,下行条件满足时强制复位上行输出,但程序互锁不等于物理互锁。在电气回路上,同样必须用接触器辅助触点做硬件互锁:KM1的常闭触点串联在KM2线圈回路里,KM2的常闭触点串联在KM1线圈回路里。这是我反复强调的:程序只是软逻辑,硬件才是保命底线。
开门和关门继电器也是一样,不能同时输出。虽然开门机和关门机在物理上通常自带限位,但PLC在逻辑上还是要做到二选一,而且要有“关门途中再次开门”的处理。
至于楼层显示,最省输出的方式是用BCD码输出,3个输出点Q0.4、Q0.5、Q0.6组合代表1到6层(二进制),再接一个BCD到七段码的译码器驱动数码管。这样比直接给七段码输出省一半以上的点。有些项目直接用触摸屏显示楼层号,那就更省了,PLC只需把当前楼层号放到一个整型变量里。
2.3 接线实操注意:强弱电混装最容易出问题
电梯控制柜里既有220VAC的接触器、变压器,又有24VDC的传感器和PLC,接线时最忌讳强电和弱点捆在一起走线槽。我在现场吃过亏:PLC输入信号线跟接触器线走同一根扎带,接触器一吸合,PLC的AI/AO信号乱跳。后来改成强弱电分离,输入信号用屏蔽双绞线,传感器和PLC电源用一个独立的DC24V开关电源,问题才消失。
另外,S7-1200数字量输入默认是漏型接法(也就是NPN传感器接法),公共端M接DC24V负极。如果你现场用的是PNP型传感器(在自动化行业很常见),要么选源型输入接法,要么用中间继电器转接。这个接错了,指示灯不亮但信号一直没进来,排查起来特别浪费时间。
3. 核心控制逻辑设计与程序架构
3.1 程序架构:用OB、FB、DB把逻辑拆干净
S7-1200的程序不建议全部堆在OB1里,做六层电梯虽然逻辑不算复杂,但把功能拆开,后期调试、改型号、换楼层数都会方便很多。我习惯这样分:
| 程序块 | 功能 |
|---|---|
| OB1 | 主循环,调用下列所有功能 |
| FC1 | 输入去抖与呼叫登记 |
| FC2 | 当前楼层识别与楼层记忆 |
| FC3 | 目标楼层汇总与方向决策 |
| FC4 | 停层判断与开关门控制 |
| FC5 | 显示输出与指示 |
| FB1 | 电梯主控状态机(可选,进阶用) |
| DB1 | 电梯运行数据区(当前层、目标层、呼叫数组等) |
OB1作为主程序去调用各个FC,看起来多了一层,但实际上每个功能的代码量都不大,而且能独立测试。尤其是方向决策和停层判断这两块,单独拉出来写,出现问题时不至于在几百行梯形图里翻。
3.2 楼层识别:从输入信号到当前楼层号
楼层识别虽然不复杂,但处理不好会出现楼层乱跳。我用一个整型变量CurrentFloor存储当前楼层,类型Int。当每一层的平层开关信号有效时,把这个楼层号写入CurrentFloor。
梯形图或SCL里写法是:
IF #FloorSensor[1] THEN #CurrentFloor := 1; ELSIF #FloorSensor[2] THEN #CurrentFloor := 2; ELSIF #FloorSensor[3] THEN #CurrentFloor := 3; ELSIF #FloorSensor[4] THEN #CurrentFloor := 4; ELSIF #FloorSensor[5] THEN #CurrentFloor := 5; ELSIF #FloorSensor[6] THEN #CurrentFloor := 6; END_IF;这看着简单,但实际工程中会出现一种情况:电梯运行速度太快,PLC扫描周期长,结果经过中间某一层时该层平层开关的脉冲刚好被扫描周期漏掉,导致楼层显示跳到两层之外。解决方法是:在接近预定停靠楼层时提前减速,让轿厢以慢车速度通过平层区,这样每次扫描都能稳定捕捉到每层信号。如果在纯开关量方案里没有变频器减速配合,那就在程序里多做几次采样确认,或者用高速计数方式捕捉,但一般电梯调试时首车都会调慢车。
3.3 呼叫登记与消号:用置位/复位,别用自锁
内呼和外呼按钮都是瞬时脉冲,按下1秒松开,PLC必须在松开后依然“记得”这个呼叫。初学者最容易想到的是自锁电路,用按钮接通一个中间继电器Q,再用Q的常开触点保持回路。这个在PLC里完全可以做,但更推荐用置位/复位(SR),因为清晰、不容易出错。
以1层内呼为例,梯形图逻辑是:
- 网络1:I0.0按下有效,则 SET #CallInside[1]
- 网络2:当电梯到达1层且开门到位时,满足消号条件,则 RESET #CallInside[1]
这样每个呼叫按钮就对应一个Bool变量,登记就是置位,到达消号就是复位。外呼同理,只是外呼还得分上行呼叫和下行呼叫。
有个细节值得注意:厅外呼叫按钮不像内呼,到站后要不要消号要看电梯运行方向。比如电梯正在上行,5层有人按了上召,电梯到达5层停靠,这时候上召消号没问题。但如果5层有人按下召,而电梯正在上行,会先经过5层不停(因为不顺路),这时下召不能被消掉,必须等电梯下行到达5层再消。这就是顺向截梯规则中的“方向性消号”。
3.4 方向决策:顺向截梯算法
方向决策是整个电梯控制程序中最有含金量的部分。六层电梯虽然规模小,但算法逻辑和三十层电梯是同一个套路。
我的做法是构造两个数组:内呼数组CallInside[1..6]、外呼上召数组CallUp[1..6]、外呼下召数组CallDown[1..6]。这里注意,1层没有下召,6层没有上召,但数组下标统一,没用的地方置FALSE即可。
上行决策:电梯当前处于停止状态,或者正在上行过程中。如果当前是停止状态,只要存在任何一个目标楼层高于当前楼层,就进入上行状态。如果电梯正在上行,任何高于当前楼层的有效呼叫(内呼+上召+下召)都可以被纳入目标范围,但这些呼叫要分优先级:顺向的呼叫(对上行来说,上召是顺路,内呼也是顺路)优先响应,下行召唤只在它位于电梯当前行驶方向前方时,才会被“顺路”带上,否则要等下一次下行。
下行决策:同理反向处理。
在实际的纯PLC梯形图里,我不会写太多复杂的循环,多用比较和置位。比如用MaxFloor变量保存当前方向上“最远目标楼层”。找到所有高于当前层的有效呼叫,取最大值作为本次上行的“终点层”。电梯向上运行过程中,只要CurrentFloor等于某个有效目标楼层,就停层。到达终点层后,再判断是否有反方向的呼叫,如果有,就换向下行;如果没有,电梯停在终点层待机。
用SCL写这段逻辑会更直观:
// 搜索上方向最远目标楼层 #HighestTarget := #CurrentFloor; FOR #i := #CurrentFloor + 1 TO 6 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #HighestTarget := #i; END_IF; END_FOR; // 存在高于当前层的目标,则输出上行 IF #HighestTarget > #CurrentFloor THEN #DirectionUp := TRUE; ELSE #DirectionUp := FALSE; END_IF;注意这个FOR循环在OB1里执行没有压力,六层循环周期极短,整个PLC扫描周期也就几毫秒,完全不影响实时性。
3.5 停层与开关门控制:别忽略平层精度
电梯运行到了目标楼层,怎么停下来?不是一到位就立即开门,而是要经过“平层检测→减速停车→开门继电器动作→开门到位→延时→关门继电器动作→关门到位→运行准备”这一整个流程。
门联锁是电梯里最重要的一环:电梯运行前,门锁信号必须有效(I3.0为TRUE),表示所有厅门和轿门都已闭合;运行过程中,如果门锁信号突然消失,程序必须立刻断开上下行输出,让电梯急停。这个逻辑要用硬件回路和程序双重保证。
开门延时一般设5到8秒,具体看现场客流量。延时可以用S7-1200的TON定时器。关门过程中要判断关门到位信号,如果一定时间内门没关到位,要能再次开门重新关,这是最基础的防夹逻辑。真实电梯还有光幕或安全触板,但六层电梯教学项目里可以用“开门到位信号断开”来简单模拟。
3.6 显示与指示:BCD显示和方向灯
当前楼层号送到显示输出时,要把CurrentFloor整数转换成BCD输出。如果需要用Q0.4、Q0.5、Q0.6三位输出表示1到6层,可以写成:
#DisplayBCD := #CurrentFloor; // 1~6 #Out_A := #DisplayBCD.0; // 位0 #Out_B := #DisplayBCD.1; // 位1 #Out_C := #DisplayBCD.2; // 位2上行/下行方向指示灯直接由方向标志驱动。到站铃可以在平层完成的瞬间输出一个0.5秒脉冲,用TON实现。
4. 博途实操:从建工程到在线调试
4.1 新建项目与硬件组态
打开TIA Portal,新建项目,设备里选择S7-1200对应的CPU型号。我手头版本如果是V15及以上,基本都能选到1214C DC/DC/DC,固件版本一般选V4.x。
建完CPU后,添加SM 1221数字量输入模块(16点)或SM 1223模块。组态界面上可以看到每个I/O点的地址自动分配。建议在组态里把设备名称、IP地址先设置好,比如IP设为192.168.0.10,这样后面仿真和下载不容易混乱。
注意:博途不同版本打开同版本工程也会有系统提示需要升级的情况。老版本工程用新版本打开会弹出“项目升级”提示,确认即可。但如果你的工程是V18做的,V15是打不开的,这一点下载别人工程前一定先确认版本。
4.2 程序编写:先搭变量表再写逻辑
写程序前,我强烈建议先建好全局变量表(PLC tags)。把I0.0、Q0.0这些实际地址和语义名称绑定好,后面写梯形图全是看名字,不会写错地址。我的习惯是:
- 输入信号统一命名:
In_InnerCall_1F、In_UpCall_3F、In_FloorSensor_5F、In_DoorLock - 输出信号统一命名:
Out_MotorUp、Out_MotorDown、Out_DoorOpen、Out_DoorClose - 程序内部变量统一放DB:
CurrentFloor、DirectionUp、CallInside数组等
然后OB1里依次调用FC1到FC5。FC1里写输入去抖,用S7-1200自带的输入延时滤波器,或者简单用TON做20ms去抖。FC2做楼层识别,FC3做方向决策,FC4做停层开关门,FC5做显示输出。
这里给一个FC3方向决策的简化SCL参考,方便你理解整体逻辑:
// 先复位方向输出 #Out_MotorUp := FALSE; #Out_MotorDown := FALSE; // 上行条件:有高于当前层的目标 #DirUpReq := FALSE; FOR #i := #CurrentFloor + 1 TO 6 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #DirUpReq := TRUE; END_IF; END_FOR; // 下行条件:有低于当前层的目标 #DirDownReq := FALSE; FOR #i := 1 TO #CurrentFloor - 1 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #DirDownReq := TRUE; END_IF; END_FOR; // 互锁输出 IF #DirUpReq AND NOT #DirDownReq THEN #Out_MotorUp := TRUE; ELSIF #DirDownReq AND NOT #DirUpReq THEN #Out_MotorDown := TRUE; ELSE // 上下方向同时有请求,按当前所处位置顺序处理 // 简单做法:优先运行当前方向一致的一侧 END_IF;这段代码还可以再优化,但作为六层电梯的第一版已经能跑。真正投入现场前,一定要在仿真里反复测试边界情况。
4.3 使用PLCSIM仿真验证
S7-1200在博途V15及以上版本可以使用S7-PLCSIM仿真。仿真启动后,把程序下载到虚拟PLC,然后在“仿真PLC”里手动改变输入变量状态来模拟按钮信号、平层开关信号。好处是不需要真实硬件,课程设计答辩前完全可以跑通整个流程。
我测试逻辑的时候一般按这个顺序:
- 在1层,模拟按下6层内呼按钮,观察方向输出是否上行、楼层显示是否变化。
- 把2到5层平层开关依次短暂置位(模拟电梯经过),观察CurrentFloor是否更新递增。
- 到了6层,观察是否消号、是否开门到位。
- 在6层模拟按下2层外呼下召,观察电梯是否反向下降、2层是否消号。
- 测试门锁断开:电梯运行中把In_DoorLock复位,看上下行输出是否立刻断开。
如果仿真中这5步全部通过,程序的基本功能就没大问题。
4.4 下载与在线调试
仿真通过后,连接真实PLC。
- 用网线连接电脑和CPU,博途中选择“在线访问”,设置PG/PC接口为对应网卡。
- 设置PLC的IP地址,保证电脑和PLC在同一网段。
- 下载硬件组态和程序。下载完成后,把CPU切换到RUN模式。
- 在线监控:打开监控表,把所有I/O变量和关键中间变量都拉出来,实时看状态变化。
调试现场要注意:首次上电前,断开主回路,只给PLC送电,先检查输入信号采集是否正确。逐个按下按钮看对应的输入变量是否置位。如果输入信号没反应,优先查线路、查公共端,别急着改程序。输入部分确认没问题后,再接通主回路,用检修模式低速点动检查电机转向是否与方向指令一致。
5. 常见问题与排查技巧实录
5.1 输入抖动导致呼叫反复触发
按钮和继电器触点按下过程会有机械抖动,PLC可能一个按钮按下去,同一信号在0.1秒内跳变数次。结果就是:内呼按一下,楼层显示乱跳;或者消号瞬间又被再次登记。解决方法是给每个按钮信号加20ms左右的去抖(用TON定时器或读取输入滤波器参数)。S7-1200的DI模块可以在组态里直接设置数字量输入滤波时间(0.1ms到20ms可选),调试时设成6.4ms或10ms即可。
5.2 电梯运行中楼层数跳变或丢失
最常见原因是平层开关信号在PLC扫描周期内有效时间太短,刚好被漏掉。典型场景是快车速度过快,轿厢经过一层时的信号持续时间小于一个扫描周期。解决思路:
- 校核电梯快车速度,必要时加装提前减速信号(双平层开关方案)。
- 在程序里用“多周期确认”逻辑:平层信号连续两个扫描周期有效才更新楼层号。
- 确认平层开关的常开/常闭接法有没有和程序反了。
5.3 门锁断开后电梯还在运行
这个现象一旦出现,必须停线检查。不仅是程序问题,很可能硬件回路里门锁触点没串进运行接触器回路。我调试时遇到过一种情况:门锁信号接的是PLC的输入点,但是接触器吸合回路里没有串门锁触点,结果门锁一断,PLC程序虽然输出了停车,但接触器仍然保持吸合,电梯继续走。所以安全回路必须硬接线串到接触器控制回路,不能只靠PLC逻辑。这也是我一直强调的“程序互锁≠物理互锁”。
| 问题现象 | 可能原因 | 排查顺序 |
|---|---|---|
| 按钮按下无反应 | 公共端接错、传感器类型不对 | 先查硬件接线,再看PLC在线信号 |
| 电梯到达楼层不停 | 平层信号没扫到、目标楼层判断错误 | 检查平层信号状态和CurrentFloor变化 |
| 上下行同时输出 | 程序互锁缺失、输出点短路 | 立刻断电,检查硬件互锁 |
| 楼层显示乱跳 | 输入抖动、平层开关离得太近 | 加滤波、检查安装间距 |
| 关门后无法运行 | 门锁信号没到、关门到位没延时 | 监控门锁和关门到位信号时序 |
| 仿真正常现场不行 | 干扰、接线、电源地不干净 | 检查屏蔽接地、强弱电分槽 |
5.4 电梯停在中间楼层没有任何呼叫时乱跑
电梯没有呼叫时,应停在当前楼层不动。如果出现乱跑,多半是方向决策逻辑里“请求信号”没有被正确清零。例如外呼按钮信号置位后,电梯到了一层的上召消号,但程序里忘复位对应的CallUp[1],导致呼叫一直存在。所以调试时要把每一个置过的呼叫变量在合适时机都复位,并且用监控表跟踪呼叫数组的状态。
5.5 博途版本、固件与工程兼容性问题
热词里有人问“博途V18支持S7-1200 CPU1211C所有版本固件吗”,这里统一回复一下:博途V18对S7-1200系列的支持是全面的,1211C、1214C这些型号都支持,但不代表所有老固件都能直接下载。CPU固件V4.x基本没问题,个别V2.0/V3.0的老版本可能需要升级固件后才能在V18工程里使用。下载别人做的程序包时,先确认对方是哪个博途版本(V15还是V16还是V18),版本差太多一般打不开或需要升级,升级前先备份工程。
另外,S7-1200和S7-200 SMART的工程文件不互通,用200SMART的梯形图不能直接拖到S7-1200里运行,知识点可以迁移,但程序要重建。
6. 扩展思考:从六层电梯到群控和上位机
完成六层电梯控制后,如果想往深走,有两个方向我特别推荐:
一个是多电梯群控。两部电梯同时工作,需要对前后门、召回、闲梯停靠做调度,核心仍然是方向决策和呼叫分配,但要把“呼叫归属”做出来:内呼只能由当前轿厢响应,外呼则需要根据哪部梯更顺路来分配。可以用S7-1200之间的Profinet通信或者I/O交换来实现,这是我做过最有趣的控制扩展。
另一个是上位机数据采集。通过S7-1200的以太网口,上位机用C#、Java或LabVIEW可以读取PLC里的当前楼层、运行方向、故障信号,做成电梯监控界面。S7-1200支持S7协议通信,上位机轮询读取DB里的数据,PLC端不需要额外编程,只要把要监控的数据放到全局DB并保证可访问状态即可。这部分和当前热门的工业物联网采集是同一个思路,很多初学者从电梯项目入门,再拓展到上位机,正好形成完整的工控知识闭环。
在折腾这套六层电梯程序的过程中,我最大的感受是:电梯控制这个题目虽然看起来简单,但能把呼叫登记、方向判断、停车开关门这些逻辑做到稳、不冲突、不丢信号,需要非常缜密的思路,这也是很多公司招聘PLC工程师时喜欢拿电梯当面试题的原因。你把它做完一遍,再回头看那些机械手、分拣线、运动控制的程序,很多套路是相通的。
本文还有配套的精品资源,点击获取