
做6层电梯控制系统这个项目是典型的“看着简单做着才知道坑多”的活儿。电梯无非就是在楼层之间来回跑但真正把呼叫登记、方向仲裁、平层停车、开关门互锁这些逻辑理顺再让西门子PLC和MCGS组态界面配合默契没有一套清晰的思路很容易陷入逻辑冲突和现场调试的泥潭。这篇文章我打算把这套系统的完整设计思路和调试经验整理出来。从控制难点拆解、硬件选型、I/O分配到西门子PLC核心运动逻辑的实现再到MCGS组态画面与数据联动最后是联调现场最容易踩的那些坑包括通讯连不上、变频器干扰、电梯反复找平层等问题。内容偏实战适合正在做同类项目、或者准备用西门子PLC配合MCGS触摸屏做运动控制类项目的工程师参考。1. 6层电梯的控制难点与整体方案选型先说结论电梯控制最难的地方不在“让电机转起来”而在“在多个呼叫同时存在时正确地决定电梯下一步该往哪走、该不该停、停了之后去哪”。1.1 难点拆解方向决策、平层精度与安全联锁把6层电梯的运动控制拆开看核心难点有三个。第一个是方向决策。电梯不是到站就停的。比如电梯在3层上行这时候4层有人按了下呼6层有人按了上呼轿厢里还有人按了5层。正确响应顺序是什么集选控制的原则是同向优先响应顺向截梯反向最后处理。电梯当前上行那么先响应5层、6层这些顺向呼叫4层的下呼属于反向呼叫电梯会先上到6层处理完所有上行呼叫后再换向下行到4层接人。这个逻辑听起来清晰但写成梯形图或者SCL涉及到方向标志位的置位、复位和扫描顺序很容易出现“电梯到了4层不换向”“明明有人呼叫却不响应”的怪现象。第二个是平层精度。电梯停车位置不准开门时轿厢地坎和层门地坎错位乘客容易绊倒。平层精度通常靠井道里的平层感应器和隔磁板实现。轿厢顶部一般装两个感应器上平层和下平层隔磁板装在每层楼平层区。电梯低速爬行进入平层区时两个感应器先后被隔磁板挡住PLC通过检测这两个信号的先后和持续时间判断是否进入平层区域、何时给出停车指令。第三个是安全联锁。电梯可以简化成一句话门锁不通电梯绝对不能走电梯在走门锁绝对不能开。门锁反馈信号、开关门到位信号、上下限位信号都是串在运行允许条件里的。调试时为了省事跳过这些联锁后面试运行阶段大概率出事。1.2 硬件选型方案对比这套系统我建议按“PLC 触摸屏 变频器 传感器”四块来选型方案比较成熟成本也可控。PLC方面可以用西门子S7-200 SMART成本低、梯形图编程直观项目量大、后续需要扩展通讯的话直接上S7-1200。S7-1200的优势在支持SCL编程逻辑复杂时可读性好很多而且配合MCGS的TCP驱动跨网段通讯配置也更灵活。文章里的逻辑示例我会用接近SCL的风格写用S7-1200可以直接落地用S7-200 SMART也能改画成梯形图。变频器方面电梯曳引电机在减速和重载下行时会处于发电状态通用变频器必须配制动电阻才能正常工作。ABB ACS510、三菱FR-D700这些系列在电梯小项目里都很常见。控制方式我建议优先考虑MODBUS通讯给定频率加I/O点给定方向这样调速曲线调整起来非常方便不用改接线。热搜里“abb变频器与西门子plc”“西门子plc与三菱变频器通讯”都是这个套路PLC做主站变频器做从站通过MODBUS读写频率寄存器。传感器方面平层感应器用磁感应式或光电式都可以磁感应式抗污染能力强井道灰尘大的场合更可靠。上下限位用行程开关或接近开关注意必须选常闭触点一旦断线或动作系统要能报故障而不是失效。MCGS这边触摸屏选TPC系列嵌入版组态软件用MCGS嵌入版组态环境。MCGS的驱动库比较全S7-200 SMART、S7-1200、S7-1500都有对应驱动但不同型号要选对驱动这个后面第五节细说。2. I/O分配与硬件接线先把手脚和眼睛备齐很多项目翻车都是因为I/O点没规划好做到一半发现输入口不够用了只能拆东墙补西墙。6层电梯的点数其实不少先统计清楚再选型。2.1 6层电梯的输入输出点统计先看输入点。外呼按钮按楼层分1层只有上行呼梯6层只有下行呼梯2到5层各有一个上行一个下行加起来是10个外呼输入。轿厢内部有1到6层共6个楼层选层按钮加上开门按钮、关门按钮2个。安全联锁方面开门到位限位、关门到位限位各1个上平层感应器、下平层感应器各1个上限位、下限位各1个。有条件的话再加超载开关1个、安全回路反馈1个。这么一算光输入点就是10 6 2 2 2 2 2 26个。输出点呢变频器需要运行、正转、反转、多段速1、多段速2这5个点如果走MODBUS通讯那这部分可以压缩到2个点甚至0个点。开门继电器、关门继电器2个。运行指示、故障蜂鸣器2个。算下来大约9个输出点。我做的这个项目总共36个I/O点左右选S7-200 SMART的SR40正好是24输入16输出放在控制柜里也不占地方。如果未来要加群控、并联、远程监控建议直接上S7-1214C点数余量更大一些将来扩展不用换PLC。下面是I/O分配表以S7-1200的地址为例信号名称PLC地址类型说明1层上行呼梯I0.0输入外呼2层上行呼梯I0.1输入外呼2层下行呼梯I0.2输入外呼3层上行呼梯I0.3输入外呼3层下行呼梯I0.4输入外呼4层上行呼梯I0.5输入外呼4层下行呼梯I0.6输入外呼5层上行呼梯I0.7输入外呼5层下行呼梯I1.0输入外呼6层下行呼梯I1.1输入外呼轿内1~6层选层按钮I1.2~I2.1输入轿内开门按钮 / 关门按钮I2.2 / I2.3输入轿内开门到位 / 关门到位I2.4 / I2.5输入门联锁上平层感应器 / 下平层感应器I2.6 / I2.7输入平层检测上限位 / 下限位I3.0 / I3.1输入安全保护变频器运行 / 正转 / 反转Q0.0 / Q0.1 / Q0.2输出方向控制开门继电器 / 关门继电器Q0.3 / Q0.4输出门机控制运行指示 / 故障蜂鸣器Q0.5 / Q0.6输出状态指示2.2 变频器与传感器选型细节变频器选ABB ACS510或者三菱FR-D700这类矢量变频器时有两点要特别注意。第一点必须配制动电阻。电梯是位能性负载轿厢重载下行时电机处于发电状态母线电压会升高没有制动电阻变频器会报过压故障。电梯频繁启停制动电阻的功率选大不选小留1.5倍余量比较稳。第二点控制方式。轿厢启动和停车要平滑加速度必须限制在乘客舒适的范围内。多段速控制在平层精度要求高的场合不够柔我习惯用MODBUS通讯给定频率加减速时间在变频器参数里单独设置。低速爬行频率设6Hz左右高速运行50Hz对应额定速度1m/s检修速度10Hz。变频器的加减速时间设1.5到2秒有效避免启动冲击。平层感应器这里有个容易忽略的细节。两个感应器安装在轿厢顶部间距不能随便定。隔磁板的长度要让电梯在低速爬行阶段两个感应器能相对隔磁板产生完整的“先遮挡、后释放”时序。隔磁板长度一般取200到300毫米感应器间距取100到150毫米这样才能稳定判断平层区域电梯停靠误差能控制在正负10毫米以内。2.3 接线防干扰的几条规矩电梯控制柜里既有变频器又有PLC干扰问题从接线阶段就要重视。变频器的主回路电缆和PLC的信号线绝对不能走同一个线槽间距至少20厘米以上。动力电缆用屏蔽电缆屏蔽层在变频器侧单端接地。PLC的24V电源单独用开关电源供电不要和变频器控制端子共用电源。信号线用屏蔽双绞线屏蔽层在PLC侧接地。平层感应器、限位开关如果用的是NPN型传感器注意PLC输入公共端的接法西门子PLC输入公共端是M传感器输出信号接I点传感器电源负极接M电源正极接L接错了一上电就可能烧输入点。3. 核心控制逻辑实现呼叫登记、方向仲裁与平层停车这一节是整个系统的灵魂。6层电梯运动控制逻辑我拆成四个子模块来讲呼叫登记、方向仲裁、运行与平层停车、开关门时序。3.1 呼叫登记与消除机制呼叫登记的思路很简单按下呼梯按钮对应楼层的外呼标志位置1电梯响应了这个呼叫之后标志位复位。难的是“电梯什么时候算响应完毕”。以4层下呼为例。电梯上行经过4层不停因为4层的下呼是反向呼叫此时不能消除4层下呼标志。电梯到达6层后换向下行再次到达4层并停靠、开门这时才能把4层下呼标志复位。所以外呼的消除不能简单地“到站就消除”必须结合电梯当前运行方向判断只有呼叫方向与当前运行方向一致并且电梯已经在该楼层完成停靠才能消除。轿内选层按钮的消除则简单得多电梯到达目标楼层停靠后直接复位对应标志位就行。但要注意轿内呼叫的优先级高于外呼即使外呼没有触发轿内选层也必须全部响应完才能换向。3.2 方向仲裁同向优先、顺向截梯、反向最远端方向仲裁是我调试时花时间最长的地方。用一个直观的例子说明。电梯停在2层此时5层有人按上呼4层有人按下呼。电梯应该先上到5层还是先下到4层按照集选原则电梯当前无方向第一个呼叫的方向就是电梯的运行方向所以应该上到5层然后换向下行时再到4层。但是如果4层是上呼呢这时候4层和5层都是上行方向电梯从2层出发先经过4层4层顺向截梯停车接人再继续上到5层。这个逻辑落到程序里需要定义两个方向标志位上行标志和下行标志。电梯停靠开门期间做一次“是否有同向呼叫”的判断如果上行标志为真且当前楼层上方任何位置存在任一外呼或轿内选层则继续上行否则尝试换向到下行检查下方是否有呼叫。上下方都没有呼叫则进入空闲状态电梯停在当前层。这里有个特别容易出的bug电梯换向的判断用了当前楼层位置而不是“呼叫所在楼层与当前楼层的相对关系”。比如电梯上行时5层有人按了上呼但轿厢已经过了5层平层位置如果不做特殊处理电梯会继续上行到顶然后换向下行时在5层停一次乘客白白等一趟。正确的处理是电梯经过某层时如果该层有同向外呼停车开门响应的那一刻该外呼已经复位电梯不会因此停车但如果因为某种原因没有成功停靠比如门锁故障外呼没被清除电梯再上来时应该还能响应。实际编程时我习惯按楼层逐一判断而不是按“轿厢当前所在楼层”做全局判断。用SCL风格的逻辑描述方向仲裁的核心判断// 假设当前方向为上本层呼叫已处理完毕 IF upDir AND 上方存在呼叫 THEN 保持上行; ELSIF upDir AND NOT 上方存在呼叫 AND 下方存在呼叫 THEN 换向为下行; ELSIF upDir AND 上方无呼叫 AND 下方无呼叫 THEN 进入空闲停在当前层; END_IF;3.3 平层停车与开关门时序电梯运行到目标楼层附近不能直接一下刹停。程序流程是目标楼层关门到位后变频器启动电梯加速到高速运行。接近目标楼层时PLC检测到上平层感应器信号给变频器一个减速指令让电梯从高速降到低速爬行。低速爬行过程中下平层感应器也进入隔磁板区域两个感应器同时被遮挡此时PLC判断电梯已经进入平层区发出停车指令。变频器停车后PLC延时200毫秒确认电梯停稳然后输出开门继电器。这个过程的关键在于平层感应器的判断。用两个感应器可以避免单感应器方案容易出现的误动作只有一个感应器被遮挡时可能是电梯刚进入平层区或者正要离开平层区此时不应停车两个同时被遮挡说明电梯处于平层区的中心范围这时停车精度最高。开关门时序直接决定电梯能不能安全运行。完整流程到站停稳后开门继电器吸合门机开锁开门到位限位动作后开门继电器断开。开门保持时间默认4秒时间到且光幕无阻挡关门继电器吸合门机关门关门到位限位动作后门锁回路接通此时PLC才允许电梯响应下一个呼叫。运行过程中门锁反馈必须保持接通一旦门锁断开立即停车。提示关门到位限位和门锁反馈是两回事。有些门机系统关门到位后门锁闭合可以把门锁反馈串进变频器运行允许回路。调试初期不要图省事跳过门锁反馈跳过的话运行中门一旦被外力打开电梯不会停车这是严重安全隐患。3.4 完整的运行控制伪代码把上述逻辑串起来一个简化版的运行控制流程如下// 呼叫登记 IF 4层上呼按钮按下 THEN 4层上呼标志 : TRUE; END_IF; // 方向仲裁 IF 电梯空闲 AND 存在上行呼叫 THEN 方向 : 上行; END_IF; // 运行控制 IF 门锁闭合 AND 方向 上行 AND 目标楼层确定 THEN 变频器运行 : TRUE; 变频器方向 : 正转; 变频器频率 : 高速; END_IF; // 平层减速 IF 目标楼层接近 AND 上平层感应器 TRUE THEN 变频器频率 : 低速; END_IF; // 平层停车 IF 上平层感应器 TRUE AND 下平层感应器 TRUE THEN 变频器运行 : FALSE; 开门请求 : TRUE; END_IF; // 消除呼叫 IF 电梯停稳 AND 开门到位 THEN 本层外呼标志 : FALSE; 本层轿内选层标志 : FALSE; END_IF;实际工程里我不会把所有逻辑塞进一个块而是分成呼叫登记、方向仲裁、运行控制、门控四个子程序每个子程序独立调试最后再联调。这样出了问题能快速定位。4. MCGS组态画面设计与数据联动PLC把运动逻辑跑起来了那只是完成了一半。电梯的状态、楼层、方向、呼叫信息最终都要在MCGS触摸屏上呈现出来操作员才能看到整个系统当前在干什么。4.1 设备窗口与变量建立MCGS嵌入版工程的搭建分三步设备窗口、实时数据库、用户窗口。设备窗口是MCGS与PLC通讯的入口。在设备窗口中添加设备注意一定先添加“通用TCP/IP父设备”再在父设备下添加具体的PLC驱动。比如PLC是S7-1200就选“西门子S7-1200 TCP”这个子设备S7-200 SMART则选对应的SMART驱动。驱动选错了后面通讯一通折腾也连不上。TCP驱动参数配置里有几项必须和PLC实际设置一致PLC的IP地址、机架号rack、插槽号slot。S7-1200默认机架0、插槽1S7-1500默认rack 0、slot 1有些老版本固件不同需要实测。通讯超时时间默认3000毫秒现场网络情况复杂时可以适当调大到5000毫秒避免通讯频繁中断报警。实时数据库是MCGS的核心。每个要和PLC交换的数据都要在这里建变量。变量类型和PLC地址要一一对应BOOL对应M位或I点Q点INT对应VW区S7-200 SMART或DB块S7-1200。比如我建了“当前楼层”变量对应PLC里的一个INT型地址“上行指示”变量对应PLC里的一个BOOL型位地址。一个我踩过的细节MCGS访问S7-1200的DB块时变量的地址格式要写成类似“DB1.DBD4”这种形式而且数据类型长度必须和PLC侧严格一致。长度对不上读取结果经常是乱的。这个问题的隐蔽性很强因为通讯本身是通的但数值就是不对。4.2 画面绘制与动画连接组态画面的设计思路是“一眼看懂电梯在哪、往哪走、谁在呼梯”。我一般把画面分成三个区域左侧是电梯井道剖面图中间是轿厢模型右侧是呼梯按钮和状态指示。电梯井道剖面图画一个竖长矩形代表6层楼。在每层的地坎位置画一条分界线标注楼层号。轿厢模型用一个小矩形表示这个矩形的“垂直移动”动画连接就绑到PLC里的楼层位置变量上。这里有个关键计算MCGS的垂直移动是按像素计算的需要把楼层位置变量映射到像素位移。比如每层高度在画面上是80像素那么楼层变量的值乘以80就是轿厢矩形相对基准位置的偏移量。这个映射可以用MCGS的表达式功能实现也可以用“百分比”方式绑定具体取决于MCGS版本但原理是一样的。呼梯按钮的动画连接有两层一是给按钮加“按钮动作”脚本把相应外呼标志置位二是把按钮的背景色和对应的外呼标志变量绑定标志为TRUE时按钮变亮色表示该呼叫已被登记电梯正在响应途中。这样操作员在触摸屏上能清晰看到“乘客按了哪层、谁还在等”。开关门动画也是体现专业度的地方。我用两个细长矩形分别表示左右门板开门时两个矩形向两侧移动关门时向中间合拢。把两个矩形的水平移动距离分别绑定到开门、关门状态变量上配合MCGS的动画周期就能模拟出门板开合的视觉效果。4.3 工程下载与上传的注意事项MCGS触摸屏的程序下载首选U盘方式。电脑上用MCGS嵌入版组态环境做好工程点“工程下载”生成一个以.U2为后缀的下载文件复制到U盘根目录。U盘插到触摸屏USB口在触摸屏上进入系统菜单选择“U盘下载”系统会自动识别并写入。工程上传则是把触摸屏里的工程导出来。这个操作要特别小心上传前必须知道工程的密码。有些项目在交付时没有设置上传密码后续想改画面却传不出来只能整屏返厂非常被动。我建议在项目交付前故意设置好工程密码并单独记录归档同时在触摸屏内部存储空间备份一份工程文件。上传和下载最常见的失败原因是版本不匹配。MCGS嵌入版组态软件的版本必须不低于触摸屏固件对应的版本否则下载时会提示工程版本过低或过高。现场遇到这种情况先升级组态软件到官网最新版再重新编译下载。5. 联调现场排错通讯、干扰与逻辑边界的实战复盘程序写完、画面做完真正的考验才开始。以下四个问题是这套系统联调时最容易遇到的我把完整的排查思路写出来。5.1 modscan能读串口数据但组态软件读不到这个场景在串口通讯调试中太典型了。PLC和变频器之间用MODBUS通讯时先用modscan调试工具测试发现能正常读取寄存器数据说明链路是通的。但换成MCGS或者西门子组态软件之后数据死活读不上来。这类问题的根因通常不在链路而在驱动配置。MCGS访问外部设备时驱动里的从站地址站号默认是1而实际变频器的从站地址设成了2那么modscan能读到MCGS却读不到因为MCGS发的报文寻址的是站1。另外数据格式也可能不一致。MODBUS寄存器有高位字节序和低位字节序之分同样是读取频率值A设备读出来是50.00B设备读出来可能是12800把两个字节颠倒了。MCGS设备窗口里的“寄存器类型”和“读写方式”都要仔细核对。排查顺序我习惯是这样先用modscan或串口监视工具抓报文确认从站地址、功能码、寄存器地址都正确再回到MCGS设备窗口检查驱动参数是否与抓到的报文一致最后用MCGS自带的“设备调试”窗口在线读取一个寄存器测试。设备调试窗口能实时显示通讯报文和错误码定位效率比反复下载工程高得多。5.2 MCGS触摸屏和西门子S7-1500跨网段通讯现在不少项目把PLC和控制室触摸屏放在不同网段比如PLC是192.168.0.10触摸屏是192.168.1.10中间隔着三层交换机。这时候MCGS驱动里直接填PLC的IP是ping不通的触摸屏上的实时数据一直是灰的。跨网段通讯的关键在于路由。如果只有单台三层交换机需要在交换机上配置静态路由或者VLAN间路由让192.168.0.0/24和192.168.1.0/24两个网段互通。同时S7-1500默认是不允许外部设备通过PUT/GET访问的需要在TIA Portal里打开CPU属性勾选“允许来自远程对象的PUT/GET通讯访问”。这一步不做即使网络通了MCGS也连不上PLC。还有一个细节MCGS触摸屏的本地IP地址和网关必须设置正确。触摸屏的系统设置里IP、子网掩码、默认网关三项都要填网关要指向交换机上对应网段的接口地址。实际操作时先在电脑上把IP临时改成触摸屏所在网段ping一下PLC确认路由通了再改回来。网络通了但通讯还不稳定就检查驱动里的Rack/Slot设置S7-1500的槽号不一定是1以TIA Portal里实际组态的为准。5.3 变频器干扰导致平层信号误触发电梯运行到一半平层感应器信号突然跳变电梯在半空莫名其妙减速停车。这种问题十有八九是变频器干扰串进了传感器信号回路。我在现场排查过类似故障电梯高速运行到2层附近时偶发性停车故障记录显示平层信号异常。最开始怀疑是感应器坏换了新的还是不定期复现。后来把示波器夹在平层感应器信号线上观察发现变频器启动瞬间信号线上出现几十伏的尖峰干扰直接灌进了PLC输入点导致平层信号误动作。处理方案是三步一是把变频器载波频率从默认的4kHz降到2kHz减少高频谐波辐射二是在变频器输入侧加EMC滤波器输出侧加磁环三是把平层感应器信号线换成屏蔽双绞线屏蔽层单端接地。做完这三步干扰问题彻底消失。这个案例给我的教训是如果系统倾向前级电源共地干扰问题终究会暴露早做防护比事后排查省事得多。5.4 电梯“鬼畜”往复方向仲裁的边界漏洞联调时最容易看到的搞笑现象是电梯在某一层反复开门关门不换向或者明明没有呼叫电梯却自己上下跑。我印象最深的一个bug是电梯响应完4层下呼后程序仍然保持下行方向但4层下方已经没有呼叫了电梯应该换向上行或者停下来结果它继续下行到1层碰到下限位才停车然后PLC把下限位当成“底部楼层”电梯又莫名其妙上行。这种情况的根因是方向仲裁逻辑里没有处理“本层呼叫”这一边界条件。具体来说电梯到达4层响应下呼时4层下呼标志复位但程序判断“下方是否有呼叫”时把当前楼层4层的下呼也算进去了导致误判下方有呼叫。修正方法是在下方呼叫判断条件里排除当前楼层的呼叫或者先完成本层呼叫的复位再用“当前楼层减1”作为下方搜索的起点。另一个容易踩的边界条件是电梯在1层乘客按了1层上呼这时电梯应该开门还是先关门再开门正确逻辑是电梯已经停在1层直接开门响应即可不需要启动运行。程序里如果没有“当前楼层与呼叫楼层相同则直接开门”的判断电梯就会先关门启动绕一圈回来再开门白白浪费时间和电能。把这个边界条件加进去之后电梯的响应才算是正常人的逻辑。6. 控制逻辑之外几个值得留意的工程细节文章最后我再补几个这套系统里不一定写在图纸上、但实操中很影响体验的细节。第一个是楼层显示的一致性。MCGS画面上显示楼层的同时轿厢内一般也有一个七段码楼层显示器。如果楼层位置变量直接用“当前楼层”的整数值那平层停车前电梯到达门区时显示就已经跳层了乘客会觉得楼层显示不准。更稳妥的做法是PLC在电梯完全停稳、确认平层信号后才更新“显示楼层”变量。画面显示与实际楼层相差半秒的感觉很奇怪但很多系统都在这里偷懒。第二个是空闲停靠策略。电梯没有呼叫时默认停在最后响应的楼层但如果1层有常开的需求比如写字楼早晚高峰可以在策略里加一条电梯空闲超过5分钟自动返回1层待命。MCGS里可以做一个“返航楼层”的设定功能操作员在触摸屏上改值PLC的返航逻辑读取这个值。这样系统交付后物业可以根据实际使用情况调节不用改程序。第三个是检修模式的考虑。电梯检修时正常运行逻辑完全屏蔽只响应检修按钮的点动操作速度也限制在检修速度。这个模式在程序里其实就是一个总开关检修状态为TRUE时所有自动运行逻辑的输出全部切断只保留手动点动逻辑。做这个功能不会增加多少工作量但设备维保时非常重要没有检修模式维保人员只能爬到轿厢顶手动盘车安全风险极大。第四个是数据日志。MCGS的实时数据库支持数据存盘可以把电梯的运行状态、故障记录、呼梯次数存成历史文件导出后分析。我建议把“故障记录”做进去每次故障发生时PLC把故障代码、当前楼层、运行方向、门锁状态打包成一个记录存到MCGS的历史数据库里。后续售后排查问题直接看故障记录比现场复现快得多也显得交付的东西更完整。这些细节看起来不起眼但正是它们决定了一套系统是“能跑的demo”还是“能交付的工程”。做自动化项目控制逻辑是骨架这些边界处理和可维护性设计才是血肉。