☰
S7-200 PLC与组态王实现二十层电梯控制系统完整方案
2026/10/26 4:16:31 网站建设 项目流程

先交代一下背景:我这两年带学生做过好几套基于 S7-200 的电梯实训项目,从五层、八层做到二十层,积累了一些能直接用的经验。这篇博文就把“S7-200 PLC + 组态王”实现二十层电梯控制系统的完整思路捋一遍,覆盖梯形图程序、接线图、IO分配、组态画面设计,还有我实际调试中踩过的坑。这套方案不是唯一的答案,但它结构清晰、容易复现,特别适合课程设计、毕业设计或者想入门 PLC 电梯控制的朋友参考。

之所以选 S7-200 而不是 200 SMART 或 S7-1200,主要有两个原因:一是很多高校和实训室的老设备、老教材还是以 S7-200 为主,带教老师熟悉它;二是 S7-200 的指令集简单,梯形图写起来直观,正好能把电梯这种“逻辑密集、状态多”的控制项目讲透。而组态王作为上位机,和 S7-200 走 PPI 通讯非常稳定,做监控画面也够灵活。下面我按“方案设计→IO与接线→梯形图→组态画面→排错”这个顺序展开。

1. 二十层电梯控制系统整体方案与选型

1.1 系统组成与控制分工

一套完整的二十层电梯实训系统,通常由三部分组成:现场设备层、PLC 控制层、上位监控层。

现场设备层包括电梯轿厢、曳引电机(实训台一般用直流电机或小型异步电机模拟)、开关门机构、每层的平层感应器、上下限位开关、轿内选层按钮、层站外呼按钮等。这一层是直接和被控对象打交道的。

PLC 控制层是核心,负责采集按钮、限位、平层信号,执行所有运行逻辑:判断电梯当前楼层、登记呼梯、决定运行方向、控制电机正反转、实现平层停车、处理开关门和安全保护。S7-200 在这一层做实时控制,所有关键逻辑都用梯形图实现。

上位监控层就是组态王。它的职责不是参与实时控制,而是给操作人员一个可视化的操作界面。在二十层这种模型上,实体外呼按钮如果全部接到 PLC 输入端,IO 点数量会非常紧张,所以常见的做法是:轿内实体按钮直接进 PLC,外呼按钮和楼层状态指示放到组态王画面上,通过组态王的下发变量去触发 PLC 内部的呼梯登记。

这个分工很重要。很多初学者把组态王当成“控制核心”,试图用组态王脚本去算电梯逻辑,结果画面卡顿、状态不同步,这是方向性错误。正确思路是“PLC 做逻辑,组态王做界面”,组态王只是一个远程操作面板和数据监视器。

1.2 硬件选型建议

针对二十层电梯这种 IO 密集场景,我推荐主控制器选用 S7-200 CPU226 CN AC/DC/继电器输出型。

为什么是 CPU226?因为它自带 24 路数字量输入和 16 路数字量输出,是 S7-200 系列里 IO 点数最多的 CPU,可以满足轿内 20 个选层按钮、4 个开关门相关按钮接入后不用再加大量扩展。同时 CPU226 还支持两个通讯口,一个用来和组态王走 PPI,另一个可以留给程序下载或触摸屏,调试时不用反复拔线。

如果现场还需要接入门锁信号、平层信号、超载信号、安全触板信号,以及驱动楼层数码管的段码输出,我建议再加一块 EM223 数字量混合扩展模块(16DI/16DO)。这样总输入点数达到 40 点,输出达到 32 点,二十层电梯的典型 IO 需求基本覆盖。

传感器方面,平层检测推荐使用 NPN 常开型接近开关(如 LJ12A3-4-Z/BX),检测距离 4mm 左右,配合安装在轿厢上的铁质隔磁板使用。上下限位开关可以用行程开关或接近开关,实训台上用行程开关更直观,出故障也好排查。

输出回路驱动电机正反转、开关门,S7-200 的继电器输出可以直接驱动中间继电器,再由中间继电器去控制接触器线圈。不建议让 PLC 的继电器输出直接驱动大功率接触器线圈,虽然瞬时电流可能扛得住,但长期拉弧容易缩短 PLC 输出继电器寿命。

1.3 电梯控制策略:集选控制

二十层电梯的控制策略不是简单“先按先服务”,而是要用电梯行业最经典的“集选控制”方式,也就是“顺向截梯、反向换向”。

顺向截梯的意思是:电梯上行时,只响应当前楼层以上的同向呼梯。比如电梯在 5 楼正在上行,这时 8 楼有人按了上行呼梯,电梯会在 8 楼停靠;如果 12 楼有人按的是下行呼梯,电梯不会立刻上去接他,而是继续向上,直到把上行方向的所有呼梯都处理完,再自动换向下行去接 12 楼的乘客。

反向换向的意思是:电梯把当前方向上的所有呼梯都执行完毕后,如果反方向还有呼梯,才换向运行。这个策略能最大化运输效率,避免电梯像“无头苍蝇”一样上下乱跑。

集选控制用梯形图写,核心就是“方向决策”和“消号”两件事。方向决策负责判断当前该上行还是下行,消号负责在电梯到达某层停靠时,把这一层已被响应的呼梯登记清除掉。这两块逻辑下面会重点展开。

2. IO分配表与硬件接线图解析

2.1 输入点分配表

IO 分配是电梯项目的地基,分配不好,后面程序写得再漂亮也是空中楼阁。我在做 IO 分配时,原则是“按钮类按楼层连续性排列,信号类单独集中,冗余点全部保留备用”。以下是我在这套方案中使用的完整输入分配表。

地址信号名称说明
I0.0 ~ I1.7轿内选层按钮 1~16 层16 个点,对应楼层按钮
I2.0 ~ I2.3轿内选层按钮 17~20 层4 个点,和前 16 个连续
I2.4开门按钮常开按钮
I2.5关门按钮常开按钮
I2.6开门限位开关门开到位信号
I2.7关门限位开关门关到位信号
I3.0门锁/安全回路信号串联合闸后为 1
I3.1超载信号超载动作后为 1
I3.2上平层感应器轿厢经过某层时脉冲
I3.3下平层感应器下行校验用
I3.4顶层强制换速信号到顶前减速
I3.5底层强制换速信号到底前减速
I3.6 ~ I4.7备用输入点消防、司机、检修等

注意:CPU226 本体的 24 个输入点地址是 I0.0 ~ I2.7,刚好用完轿内选层 20 点加开关门 4 点。EM223 扩展模块从 I3.0 开始编号,所以门锁、平层、限位这些信号都被安排在扩展模块输入区,这在实际接线时很容易区分,维护也方便。

外呼按钮我没有占用 PLC 输入点,而是全部放到组态王画面上操作,通过变量下发到 PLC 的 V 区,再由梯形图完成登记。这样既控制了硬件成本,也让二十层的外呼逻辑能在组态王界面上一目了然地展示。

2.2 输出点分配表

输出点分三组:第一组是电机与门的控制,第二组是楼层数码管显示,第三组是方向与提示信号。

地址信号名称说明
Q0.0上行接触器 KM1电梯上行驱动
Q0.1下行接触器 KM2电梯下行驱动
Q0.2开门继电器 KM3门电机开门方向
Q0.3关门继电器 KM4门电机关门方向
Q0.4上行箭头指示灯方向指示
Q0.5下行箭头指示灯方向指示
Q0.6到站铃/蜂鸣器平层到站提示
Q2.0 ~ Q2.6七段数码管段码 a~g显示当前楼层
Q2.7 ~ Q3.5备用输出后续扩展

这里有一个容易搞混的地方:CPU226 的本体输出点只有 Q0.0 ~ Q1.7 共 16 点,我把楼层显示的部分输出放在了扩展 EM223 上,也就是 Q2.0 开始。接线时必须对照模块标签确认地址,很多初学者第一次接扩展模块,经常把 Q1.0 当成第一个扩展输出点,结果输出接到地址不匹配的端子上,查了半天才发现。

楼层显示为什么用七段数码管而不是 20 个指示灯?因为 20 层要做电梯当前位置显示,用 20 个指示灯太浪费输出点。七段数码管只需要 7 个输出点,程序里做一张段码表,根据当前楼层号查出对应的七段码输出即可,效率和实用性都更好。

2.3 PLC接线图核心回路

接线图没法在这篇文字里画出完整图,但我可以把核心回路用文字描述清楚,照着画就行。

主回路:三相电源进线经过断路器 QF,接到上行接触器 KM1 和下行接触器 KM2 的主触点,两个接触器输出分别以不同相序接到曳引电机。KM1 闭合时电机正转,电梯上行;KM2 闭合时电机反转,电梯下行。实训台如果用的是直流电机,则用双向继电器切换电枢电压极性,原理一样。为了安全,KM1 和 KM2 必须有电气互锁,不能同时导通,梯形图里也要做输出互锁。

控制回路:PLC 输出 Q0.0 接中间继电器 KA1 线圈,KA1 触点再驱动 KM1 线圈;Q0.1 接 KA2,KA2 驱动 KM2。这样 PLC 输出点只承受中间继电器的小电流,延长使用寿命。Q0.2、Q0.3 分别接开门、关门继电器 KA3、KA4,驱动门电机正反转。每一路继电器线圈两端都要并联 RC 吸收回路,防止断电瞬间反向电动势干扰 PLC 输出。

输入回路:所有按钮和开关都接成 PLC 漏型输入方式。S7-200 的输入公共端 1M 接 24V 电源正极,按钮一端接输入端子,另一端接 24V 电源负极。这样按钮按下时,输入点得到 24V 高电平信号,PLC 内部指示灯亮起,梯形图对应触点动作。接近开关采用 NPN 常开型,棕色线接 24V 正极,蓝色线接 24V 负极,黑色信号线接 PLC 输入点,同样共用一个公共端。

2.4 接线实操要点与注意事项

接线这块我踩过不少坑,挑重点说。

第一,PLC 的 24V 电源和传感器电源最好分开。S7-200 CPU 自带一个 24V DC 传感器电源,可以给接近开关供电,但如果电磁阀、继电器线圈也从这个电源取电,很容易造成电压跌落,导致传感器误动作。我把传感器电源独立配了一个 24V 开关电源,PLC 自身电源只给本机输入回路用,这样干扰小得多。

第二,输入回路一定要用屏蔽线。平层接近开关的信号线距离一般有 2~5 米,如果直接走普通电线,电机启动瞬间的干扰会让 PLC 误收到平层脉冲,电梯位置就会莫名其妙多一层或少一层。屏蔽层单端接地后,这个现象能明显改善。

第三,所有公共端连线要接牢固。S7-200 输入端子分为两组公共端 1M/2M,输出也有两组 1L/2L,接线时不要把两组公共端混在一起用。特别是继电器输出,两组公共端可以接不同电压,但如果搞混了,轻则信号异常,重则烧模块。

第四,关门限位和门锁信号是两个完全不同的概念。关门限位只是表示门已经关到位,而门锁信号是每一层厅门和轿门全部闭合且电气联锁导通后的综合信号。电梯要能运行,必须门锁信号为 1。我把这两个信号分开接,其中一个可以短接调试,程序里再分别判断,避免调试时互相牵制。

3. 梯形图程序核心逻辑实操

3.1 变量规划与程序结构

梯形图程序的变量规划,决定后面写起来顺不顺手。我建议把所有关键变量用符号表定义好,不要直接在梯形图里写裸地址,不然二十层程序写到后面自己都找不着北。

变量类型地址范围用途
VB0当前楼层(1~20)实时位置
VB1运行方向(0停止/1上行/2下行)方向标志
VB2运行状态(0待机/1运行)状态标志
M10.0 ~ M12.3内呼登记位20 个楼层内呼
M13.0 ~ M15.2上行外呼登记位1~19 层上行呼梯
M16.0 ~ M18.3下行外呼登记位2~20 层下行呼梯
M20.0 ~ M21.7本层停车请求标志平层停车用
VW100内呼按钮下发区组态王写入
VW102上行外呼下发区组态王写入
VW104下行外呼下发区组态王写入
VW200当前楼层送组态王上位显示
VW202运行方向送组态王上位显示

程序整体分成主程序 OBR1 和几个子程序:初始化子程序、楼层检测子程序、呼梯登记子程序、方向决策子程序、运行控制子程序、开关门子程序。主程序里每个扫描周期调用这些子程序,结构清晰,改起来也方便。

组态王下发的呼梯按钮信号为什么不直接接到 M 区,而是先用 V 区做中转?这是出于通讯稳定性的考虑。组态王通过 PPI 协议访问 PLC 的 V 区最可靠,M 区虽然也能访问,但在某些组态王版本和驱动组合下会出现掉线或读写冲突。所以我让组态王只读写 V 区,梯形图里第一件事就是把 V 区按钮信号转存到 M 区登记位,同时把 V 区按钮位清掉,相当于“PLC 收到了一封按钮按下的消息”。

3.2 楼层位置检测与校正

楼层位置检测是我在电梯项目里花时间最多的一块,也是最容易出问题的。二十层电梯不可能靠 20 个平层开关每个都接一个输入点来检测,那样 IO 太多了,所以实际工程中普遍采用“平层脉冲计数 + 上下限校正”的方案。

具体做法:在轿厢上装一个平层感应器(接近开关),每一层的井道壁上装一块隔磁板(或铁片)。轿厢运行经过每一层时,感应器感应到铁片输出一个脉冲,PLC 对这个脉冲做上升沿计数。电梯上行时,每经过一层,当前楼层 VB0 加 1;下行时,每经过一层,VB0 减 1。

梯形图实现的核心逻辑:

Network 1 上行楼层加1 LD 运行方向上行 A I3.2 // 平层感应器 EU // 上升沿 INC_B VB0 // 当前楼层加1

这个逻辑写起来很简单,但工程上必须增加校正手段。因为一旦电机启动瞬间产生干扰脉冲,或者平层开关抖动多计了一个脉冲,电梯的显示楼层就会和实际位置不一致,后面所有方向决策都会跟着错。所以我在顶层和底层各加了一个强制换速开关,作为位置校正点。

校正逻辑:

Network 2 顶层位置校正 LD I3.4 // 顶层强制换速信号 MOV_B 20, VB0 // 强制当前楼层等于20 Network 3 底层位置校正 LD I3.5 // 底层强制换速信号 MOV_B 1, VB0 // 强制当前楼层等于1

这样无论中途怎么丢脉冲,电梯只要到了顶层或底层,位置都会被强制校正回来,系统就永远不会把楼层“跑丢”。

另外还要考虑一种常见情况:实训台调试时手动盘车或者程序异常导致位置错乱。可以在初始化子程序里,让 PLC 上电后先自动低速找一次底层,碰到底层限位后把 VB0 复位为 1,再自动回升停止。这也是不少真实电梯的上电自检逻辑。

3.3 呼梯登记、消号与顺向截梯

呼梯登记分三类:轿内选层登记、上行外呼登记、下行外呼登记。基本套路都一样:按钮按下或组态王下发按钮信号,登记位置 1,保持住;电梯到达该层并停靠后,登记位清零。

内呼登记示例(第 1 层):

Network 4 1楼内呼登记 LD I0.0 // 轿内1楼按钮 O M10.0 // 原登记保持 AN M20.0 // 本层停车请求(未到达前为0) = M10.0

这里用了“AN 本层停车请求”来消号。当电梯到达 1 楼平层开门时,M20.0 变为 1,这个网络输出变为 0,登记位被清除。其他楼层的内呼登记逻辑完全一样,只是把层号和对应的 M 地址换掉。

上行外呼登记示例(第 5 层):

Network 5 5楼上行外呼登记 LD VW102.4 // 组态王第5楼上呼按钮,VW102.0对应1层 O M13.4 AN M20.4 // 5楼停车请求 AN 运行方向下行 // 下行方向不响应上行外呼 = M13.4

外呼登记比内呼多了一个条件:电梯下行时,5 楼上行外呼登记不会被清除,要等电梯换向上行并到达 5 楼后才会消号。这是实现“顺向截梯”的关键,也符合电梯实际运行规则。

顺向截梯的消号规则细化一下就是:电梯上行到达某层停车时,清除该层的内呼登记和上行外呼登记;如果电梯到了最高层之后换向下行,下行过程中到达某层停车时,清除该层的内呼登记和下行外呼登记。在程序里,每层用一个“本层停车请求”位去控制消号,逻辑非常统一。

3.4 运行方向决策与目标楼层选择

运行方向决策是集选控制的核心。我的实现思路是:每层把内呼、上呼、下呼汇总成一个“呼梯状态字”,然后用扫描法判断当前楼层以上或以下是否存在呼梯。

方向决策梯形图的简化逻辑:

Network 6 上行条件判断 LD 停止状态 // 当前方向为0 A 上方有呼梯 // VB200+VW202中高层位置有呼叫 AN 下方有呼梯 // 若无下方呼叫则直接上行 = 置上行方向

这里“上方有呼梯”不能只判断一层,而要判断当前层以上的所有层。最稳妥的办法是写一个循环程序段,用移位指令把二十层的呼梯状态逐位扫描。S7-200 虽然有 FOR/NEXT 指令,但在梯形图里写逐层比较更直观,也更容易理解。

推荐做法是:写一个“求最高呼梯楼层”子程序和“求最低呼梯楼层”子程序。上行时,只要最高呼梯楼层大于当前楼层,就继续上行;直到最高呼梯楼层等于当前楼层且已平层停车,才换向。下行时同理,用最低呼梯楼层判断。

方向决策时要特别注意“同向优先”。比如电梯在 3 楼,5 楼有上行呼梯,8 楼有下行呼梯,系统应优先向上走,处理 5 楼上行呼梯后继续去 8 楼接下行呼梯。如果 5 楼上方还有 6 楼内呼,则电梯会在 6 楼停靠,然后继续上行到 8 楼。这个链条就是靠“求最高呼梯楼层”实现的。

3.5 启动、换速与平层停车

电梯运行过程分三个阶段:启动加速、稳速运行、换速平层停车。

启动条件:门锁信号 I3.0 为 1,关门限位 I2.7 为 1,运行方向已确定,此时输出 Q0.0 或 Q0.1 置 1,电机抱闸打开,电梯开始运行。启动时最好加一个 0.5 秒延时,让电梯先建立速度,避免直接全速冲击,模拟系统里用定时器即可。

换速:电梯接近目标楼层时,需要从高速切换为低速。如果实训台用双速电机,这对应高速接触器和低速接触器的切换;如果是变频器驱动,则对应多段速端子或模拟量给定。在教学模型中,为简化处理,可以把整段运行都当作低速运行,通过平层信号直接停车。

平层停车是最关键的动作。顺序是:电梯运行到目标楼层时,平层感应器检测到隔磁板,PLC 立刻把运行输出复位,电机断电,抱闸动作,电梯由于惯性滑行一小段后停在平层位置。由于实训台电机惯性小,平层感应器的安装位置只要稍微调整就能做到比较准确的平层。

平层停车的梯形图逻辑:

Network 7 平层停车 LD 运行状态 // 正在运行 A 运行方向 // 上行或下行 A I3.2 // 平层感应器有信号 A 到达目标层 // 当前楼层等于目标楼层 S M20.x // 置本层停车请求 R Q0.0 // 撤上行输出 R Q0.1 // 撤下行输出 MOV_B 0, VB1 // 方向改为停止 MOV_B 0, VB2 // 状态改为待机 TON T37, 10 // 停车后延时1秒

注意:平层感应器信号是持续存在的,不是只闪一下。如果不加“当前楼层等于目标楼层”这个条件,电梯会变成每层都停。加了目标层判断后,平层信号才真正起到“精确停车”的作用。这也是很多初学者写程序时最容易疏忽的一点。

3.6 开关门控制与安全保护

电梯停稳后要自动开门,门开到位后延时关门,关门过程中遇到障碍要立即开门。这就是开关门控制的基本流程。

开门控制逻辑:电梯平层停车后,延时 1 秒,置 Q0.2 开门继电器,开始开门;门开到位后,开门限位 I2.6 动作,Q0.2 复位,开门结束;同时启动关门延时定时器,延时时间可以设置为 3~5 秒。

关门控制逻辑:关门延时到后,置 Q0.3 关门继电器,开始关门;门关到位后,关门限位 I2.7 动作,Q0.3 复位,关门结束。关门过程中如果安全触板动作,立即复位 Q0.3,置 Q0.2 开门,让门重新打开。

超载保护:超载信号 I3.1 为 1 时,禁止关门继电器 Q0.3 输出,同时驱动蜂鸣器报警。在组态王画面上做一个超载指示灯,联动闪烁,方便实训演示。

开关门梯形图还有一个细节:开门和关门继电器之间也要做互锁。虽然在物理上通过限位开关已经能保证不会同时动作,但程序里用“AN 正在关门”和“AN 正在开门”互锁,双保险,能有效防止门电机两路输出同时供电烧毁设备。

4. 组态王监控画面设计与通讯配置

4.1 PPI通讯设置与设备添加

组态王和 S7-200 的通讯我建议走 PPI 协议。硬件连接上,用一根 USB-PPI 编程电缆把电脑的 USB 口和 S7-200 CPU226 的 PORT0 口连起来。如果用的是老式串口 PPI 电缆,则插到电脑 COM 口上,然后安装好驱动。

组态王里添加设备步骤:工程项目窗口选“设备” → 双击“新建”,设备驱动选择“PLC” → “西门子” → “S7-200 系列” → “PPI”。通讯参数里,串口号选择实际使用的 COM 口,波特率设置为 9600,数据位 8,偶校验,停止位 1。PLC 站号默认填 2,这是 S7-200 CPU 的默认 MPI 地址。

设备添加完成后,先别急着做画面,先在组态王的“测试”功能里试读一个 V 区变量,确认能读到数据再往下做。这个步骤能省掉后面排查通讯问题的大量时间。

4.2 数据词典变量映射

组态王的数据词典是连接画面和 PLC 的桥梁。我把变量分成两类:I/O 变量和内存变量。I/O 变量直接对应 PLC 的 V 区地址,内存变量则用于画面内部的动画计算。

组态王变量名类型连接设备寄存器方向说明
n_CurrentFloorI/O整数VW200只读当前楼层
n_RunDirI/O整数VW202只读运行方向
b_CarCall1 ~ b_CarCall20I/O离散V100.0 ~ V102.3读写轿内按钮下发
b_UpCall1 ~ b_UpCall19I/O离散V104.0 ~ V106.2读写上行外呼下发
b_DownCall2 ~ b_DownCall20I/O离散V108.1 ~ V110.3读写下行外呼下发
n_CurFloorCopy内存整数——动画计算用
d_OpenDegree内存整数——门开度

注意 V 区位的映射关系要严格按照 PLC 程序里约定好的来。我在 PLC 程序里定义 VW100 是内呼按钮下发区,那么组态王 1 楼内呼按钮就应该连接 V100.0,5 楼内呼按钮连接 V100.4,20 楼内呼按钮连接 V102.3,不能错位。外呼区 VW104 中,V104.0 对应 1 楼上呼,V104.1 对应 2 楼上呼,依次类推。

4.3 井道剖面与轿厢运动动画

组态王主画面我建议设计成“电梯井道剖面图 + 右侧控制面板”的布局。井道剖面图画一条竖直的长方体代表电梯井道,在两侧按 1~20 层标注楼层线,每层线用文本标注楼层号。

轿厢用一个矩形块表示,放置在井道内。它的垂直位置必须能随当前楼层实时变化。操作方法是:在组态王的“动画连接”里选中轿厢矩形,选择“垂直移动”,表达式写为:

(n_CurrentFloor - 1) * 40

这里假设每层之间在画面上的间距是 40 像素。如果画面里楼层线间距是 50 像素,就把 40 改成 50。这样电梯在组态王画面里就能根据 PLC 读取的当前楼层值平滑上下移动,实时反映电梯位置。

为了让电梯移动有“动画感”而不是一格一跳,可以在画面脚本里加一段滑动过渡。做法是新增一个内存变量 n_CurFloorCopy,每秒把 n_CurrentFloor 的最新值读进来,然后用脚本让 n_CurFloorCopy 逐步向目标值靠近,轿厢矩形连接的表达式改成 n_CurFloorCopy,这样看起来就像电梯在连续运动了。

4.4 呼梯按钮面板与状态显示

右侧控制面板分成三块:轿内操作盘、楼层外呼面板、状态指示区。

轿内操作盘放 1~20 层选层按钮和一个内呼指示灯。按钮的动作脚本是“按下时给对应 I/O 离散变量置 1,再延时 0.5 秒置 0”,模拟一个瞬时按钮。比如 5 楼内呼按钮:

b_CarCall5 = 1; \\ 延时后: b_CarCall5 = 0;

状态显示区放当前楼层数码管(直接从 n_CurrentFloor 取数显示)、上下行方向箭头(连接 n_RunDir,等于 1 时绿色,等于 2 时红色)、开关门动画、超载指示灯、门锁指示灯。

这里要提醒一个组态王常见坑:I/O 离散变量的写入不能太快。如果你在按钮脚本里连续执行“置 1、置 0”,组态王下发的两条指令中间必须间隔足够时间,否则 PLC 可能只收到置 0 信号,登记位完全没反应。我实测下来,间隔 500 毫秒以上再置 0,成功率接近 100%。

4.5 组态画面与PLC通讯调试要点

画面全部连好以后,先分步调试,别一次性把所有功能都打开。第一步确认 n_CurrentFloor 能变化,手动拖曳电梯位置(用 PLC 程序临时改 VB0),画面轿厢跟着动。第二步确认呼梯按钮能下发,点击组态王按钮,PLC 程序里的 M 登记位置 1。第三步确认状态显示,看方向箭头、楼层数字、门开度是否和 PLC 侧一致。

如果画面上的按钮点击没有反应,先打开组态王的“设备通讯状态”查看窗口,看看 I/O 变量是否处于“正在通讯”状态。如果显示“通讯失败”,多半是设备地址、波特率、站号配置有问题,逐项排查很快能定位。

5. 常见问题与排查技巧实录

5.1 组态王连不上PLC

这个是我遇到的最高频问题。现象是组态王画面里所有 I/O 变量都显示“设备通讯失败”,或者数据完全不刷新。

排查顺序:第一,检查 USB-PPI 电缆驱动是否安装成功,电脑设备管理器里有没有识别出 COM 口。第二,检查组态王设备配置里的串口是否和实际 COM 口一致。第三,检查波特率、数据位、校验位是否和 PLC 侧一致。S7-200 的 PPI 默认是 9600 波特率但我碰到过有的电缆固件默认 19200,这时就要在 STEP7 Micro/WIN 的通讯设置里把 PLC 通讯口参数改成 19200,两边统一才能通。第四,检查 PLC 站号,默认是 2,组态王设备地址也要写 2。

还有一个容易被忽略的点:如果电脑上同时打开了 STEP7 Micro/WIN 或者其它占用串口的软件,组态王会抢不到串口。调试时把别的软件全部关掉,只留组态王,问题会少很多。

5.2 电梯楼层显示乱跳或者丢失

楼层显示乱跳,几乎都是平层感应器信号受到干扰或平层开关抖动造成的。排查时可以打开 S7-200 的状态监视表,直接看平层感应器对应输入点 I3.2 的状态。如果电梯不动时 I3.2 偶尔闪一下,说明信号有干扰,优先查屏蔽线接地、传感器电源稳定性。

如果电梯运行中楼层显示跳得特别快,多跳了一层甚至几层,一般是平层感应器的隔磁板太宽,导致一个楼层触发两次脉冲。可以调整隔磁板宽度或者在程序里对平层信号做“脉冲延时确认”,也就是检测到平层信号后延时几十毫秒再确认一次,过滤掉部分干扰。

位置校正逻辑一定要保留,即使楼层显示偶尔乱了一两层,只要到了顶层或底层,强制校正能把位置拉回来,系统就能自愈。如果连校正都没有,电梯跑十几个来回之后楼层显示可能彻底乱掉,那时候就只能断电重启或者手动复位。

5.3 呼梯登记后电梯不响应

这类问题的根源大多在“方向决策”和“消号”的配合上。最常见的现象是:按了内呼按钮,登记位已经置 1,但电梯就是不启动。

排查步骤:先看运行方向 VB1 有没有被置成上行或下行。如果方向一直为 0,说明“上方有呼梯”的判断条件有问题。检查呼梯状态汇总时,是不是漏掉了当前层正好等于呼梯层的情况。很多程序里写“上方有呼梯”只判断“大于当前楼层”,如果呼梯层等于当前楼层,那电梯永远不会去响应它,因为不存在“大于当前层”的呼梯。

还有一种情况是电梯到了某层停车后,登记位没有被清除,导致这层呼梯一直存在,电梯总是优先停靠在这一层。这时候要检查消号逻辑,重点是“本层停车请求”标志有没有正确置位和复位,以及是不是在开门瞬间就被置 0 了。

5.4 开关门动作异常

开关门最常见的怪异现象是门开到一半自己又关了,或者关门时老是反复弹开。前者一般是开门限位接触不良,导致 PLC 认为门还没有开到到位,关门延时从来没启动,门电机一直保持开门方向,看起来就像“开门开个没完”;后者要检查安全触板信号是否误触发,NPN 传感器的信号线如果接触不好,会间歇性给 PLC 一个触发信号,相当于关门途中一直有人在挡门。

调试开关门逻辑时,我习惯先在 STEP7 Micro/WIN 的状态表里同时监视 I2.6、I2.7、Q0.2、Q0.3 四个点,用“强制”功能逐个强制输入点,看输出响应是否符合预期。这样能快速把“输入检测问题”和“程序逻辑问题”区分开。

5.5 数码管显示字符不对

数码管显示楼层时,如果某几个数字的段码不对,先别急着改程序,用万用表量数码管各段的电压。常见原因是段码输出端和数码管引脚接错,特别是扩展模块 Q2.0~Q2.6 的端子比较密集,很容易错位。

程序侧要注意七段码表的编码规则。共阴数码管和共阳数码管的段码是完全反相的关系。我默认用的是共阳数码管,逻辑 0 点亮。如果你的实训台是共阴数码管,把段码表里的 0 和 1 全部取反即可。这里写一段参考段码表逻辑:

Network 8 七段码查表输出 LDW= VB0, 1 MOV_B 16#C0, QB2 // 共阳数码管 1 的段码

程序里需要为 1~20 层各写一个比较输出网络,用 MOV_B 指令把对应段码传送到 QB2 输出字节。如果不想写 20 个网络,可以用查表指令配合变址寻址,但我觉得 20 个网络虽然笨,但最容易看懂,也方便学生改成显示字母或特殊字符。

写在最后的几点经验

整套二十层电梯系统调试下来,我最费时间的不是梯形图程序,反而是 IO 接线和通讯配置。梯形图逻辑再复杂,只要变量规划清楚了,一步一步写都能调通。而接线一旦有个公共端没接好,或者某个接近开关信号线被电机干扰,查起来才是真的折磨人。我的建议是:先规划 IO 表,再做接线,最后写程序,顺序不要乱;每接一根线就在 IO 表上打一个勾,确认无误再通电调试。

这个项目后面还可以往两个方向扩展:一是把单速电机换成变频器驱动,程序里增加多段速换速逻辑,让电梯启动和停车更平稳,接近真实电梯的运行感受;二是做双梯并联群控,用两台 S7-200 通过通讯协调调度,让两台电梯自动分配呼梯,那才是真正的工程级难度。先把单梯二十层这套逻辑吃透,后面这些扩展都是水到渠成的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询