西门子S7-1200四层电梯PLC仿真程序详解(含博图V15.1运行演示)

发布时间:2026/10/11 15:59:57
西门子S7-1200四层电梯PLC仿真程序详解(含博图V15.1运行演示) 做这套“单部四层基于西门子1200博图v15.1版本可直接仿真运行”的电梯程序前后断断续续折腾了两周时间。视频里那段画面不是剪辑效果也不是拿实物PLC拍的就是在博图V15.1里把S7-1200程序和HMI画面一起下载到PLCSIM仿真器里跑出来的真实录屏。这套东西没有外接任何电气元件纯靠软件内部的变量模拟了按钮、平层开关、门区信号和上下行接触器适合刚入门PLC又想搞懂电梯运行逻辑的人拿来敲一遍、改一遍也适合工控老手在没硬件的情况下快速验证控制思路。先说清楚它能解决什么问题四层楼单台电梯的完整控制逻辑包括内呼、外呼、记忆召唤、顺向截停、开关门控制、楼层判断、运行方向锁定以及仿真环境下的联调方法。和市面上那些只画个时序图、放几张梯形图截图的教学帖不同这套程序是实打实能在PLCSIM里跑起来的。你下载到仿真器之后可以直接在HMI画面上按楼层按钮看电梯按调度逻辑一层一层走门开、门关、上下行指示灯全部跟着变整个过程和真实电梯的操作体验非常接近。1. 一个四层电梯仿真项目的价值到底在哪很多人觉得四层电梯简单外呼按钮总共才6个、内呼按钮4个、加几个限位和门区开关用“起保停电路”拼一拼也能凑合跑。但真要把调度逻辑做到“顺路截停”“反向记忆”“相同方向优先”再配合HMI做成人能看懂的画面复杂度立刻上来了。这套程序表面上是电梯控制实际上覆盖了PLC编程里最值钱的三块内容状态机设计、数据管理和逻辑优先级排序。1.1 这套程序解决了什么问题先说最核心的调度问题。电梯不是“收到哪个按钮就往哪层走”这么简单的逻辑。真实运行里电梯在2楼往上走这时候3楼有人按下行外呼电梯应不应该停按完3楼内呼之后1楼又按了上行外呼电梯是直接掉头还是先把3楼跑完四层电梯虽然楼层少但这些问题一个都不少。程序里需要把每个呼叫信号“记住”然后按方向规则排优先级这种“记忆召唤方向判断”正是所有多楼层电梯的基础也是几乎所有新人最容易写崩的地方。其次是仿真可运行的问题。S7-1200不像S7-300/400那样随便在软件里点两下就能跑仿真博图V15.1里的PLCSIM对程序写法有隐性要求。比如某些用真实硬件中断组织的程序、某些直接访问输入映像区的写法在仿真里就会踩坑。这套程序从结构上就按“可仿真优先”来设计变量全部走DB块和M区输入输出通过统一的变量映射保证你在没有任何硬件的情况下能把整个流程跑通。1.2 为什么组合是S7-1200 博图V15.1选S7-1200而不是200 Smart或者1500主要是三个原因。第一1200的指令集在博图V15.1里已经非常完整数组、结构体、SCL、定时器、计数器全都有足够实现复杂调度第二1200的仿真资源占用很轻普通笔记本就能带得动PLCSIM加HMI仿真两个进程第三1200在当下中小型设备里保有量非常大读者学完这套逻辑很容易迁移到实际项目里。至于博图V15.1这个版本说实话不是最新的但目前是兼容性最稳的版本之一。V16、V17甚至V18、V20、V21都有但越新的版本对电脑配置要求越高而且工程文件格式一旦升级就回不去了。V15.1能打开几乎所有老项目也能被后续高版本直接打开并升级加上网上关于V15.1的安装、破解、外设驱动的资料非常多遇到问题基本都能搜到答案所以拿它做教程工程最合适。1.3 仿真运行意味着什么“可直接仿真运行”这几个字的分量只有真在PLCSIM里摔过跟头的人才懂。很多程序在真实PLC里能跑一放到仿真器里就各种问题。S7-1200的PLCSIM对硬件中断、脉冲捕捉、高速计数器的处理都和实物有差异。这套电梯程序完全抽离了物理传感器模型用内部定时器模拟电梯运行时间用变量强置模拟平层信号所以仿真环境和真实逻辑完全一致。还有一点很重要PLCSIM是支持HMI联合仿真的。视频里那个画面就是博图V15.1里的WinCC Runtime仿真界面通过S7-1200 PLCSIM通讯驱动和PLC仿真进程建立连接相当于你在电脑上同时开了一台虚拟PLC和一块虚拟触摸屏两个进程实时交换数据。这种联调方式极其适合在项目前期验证工艺流程尤其是电梯这种状态多的设备你可以在仿真里把各种极端情况都试一遍不用站在实梯旁边冒着危险测逻辑。2. 控制系统核心逻辑与程序架构拆解这套四层电梯程序最值得研究的不是某一行指令而是整体架构。整个控制逻辑分为四个层次信号采集层、目标计算层、执行决策层、输出显示层。每一层职责单一层与层之间通过DB块交换数据。2.1 I/O分配与变量表设计先看输入输出规划。四层电梯的典型I/O清单如下表所示这套程序按标准写法把输入输出点全部映射到符号表里方便仿真时按名称强置。信号类型地址名称说明输入I0.0LS_1F1楼平层感应输入I0.1LS_2F2楼平层感应输入I0.2LS_3F3楼平层感应输入I0.3LS_4F4楼平层感应输入I0.4DOOR_OPEN_LS开门到位输入I0.5DOOR_CLOSE_LS关门到位输入I0.6DOOR_ZONE门区信号输入I0.7BTN_OPEN轿厢开门按钮输入I1.0BTN_CLOSE轿厢关门按钮输入I1.1SAFE_OVERLOAD超载保护输入I1.2SAFE_ESTOP急停输入I1.3CALL_1F_UP1楼上行外呼输入I1.4CALL_2F_UP2楼上行外呼输入I1.5CALL_2F_DN2楼下行外呼输入I1.6CALL_3F_UP3楼上行外呼输入I1.7CALL_3F_DN3楼下行外呼输入I2.0CALL_4F_DN4楼下行外呼输出Q0.0MOTOR_UP上行接触器输出Q0.1MOTOR_DN下行接触器输出Q0.2DOOR_OPEN开门继电器输出Q0.3DOOR_CLOSE关门继电器输出Q0.4BUZZER到站蜂鸣这里特别注意1楼只有上行外呼4楼只有下行外呼中间层各有一个上行和一个下行外呼所以外呼按钮一共6个。很多新手画I/O表时容易把4楼写成也能上呼、1楼也放下呼这在物理上是不存在的虽然仿真里多两个变量不影响运行但从专业角度是错的。变量表设计上我没有把所有信号都直接丢给I区Q区而是建了一个全局数据块DB1“Elevator_Data”里面有当前楼层、目标楼层、运行方向、门状态、各召唤数组以及各种中间标志位。这样做的目的是让控制逻辑的“数据中枢”和“外部IO”分开。仿真时你只需要强置几个输入点剩下的内部状态全部可以由程序自由翻转调试体验会舒服很多。2.2 楼层判断、召唤记忆与方向优先楼层判断是所有电梯控制的基础。这套程序里楼层的获取方式很简单四个平层感应开关谁的信号有效当前楼层就是哪层。但这里有个比较隐蔽的工程细节电梯在两层之间运动时所有平层信号都无效此时必须“保持上一拍的楼层值”不能因为平层信号全部为0就把当前楼层清零。我是用一个FC_FLOOR_CALC功能块实现的扫描四个平层信号只要其中某个有效就更新当前楼层全部无效则保持原值。召唤记忆是整个程序的核心也是最容易写乱的地方。我的做法是在DB1里定义三个数组// 召唤记忆数组 VAR upCall : ARRAY[1..4] OF BOOL; // 上行外呼 dnCall : ARRAY[1..4] OF BOOL; // 下行外呼 cabCall : ARRAY[1..4] OF BOOL; // 轿厢内呼 END_VAR每个数组的下标就是楼层号值为TRUE就代表这一层有对应方向的呼叫。当电梯响应完某一层的呼叫之后就把对应位清零。这种“位图式”的召唤表优势非常明显查找任意楼层是否有未被响应的召唤只需要遍历数组元素判断电梯是否还有任务只需要做一次数组或运算逻辑表达极其紧凑。方向优先规则是电梯“智慧”的来源我是用FC_DIRECTION_CALC来实现的。核心思路分成三步如果电梯当前没有方向待机从所有召唤里选出距离当前楼层最近的一层作为第一目标如果电梯当前上行就只检索当前楼层以上的召唤从底层往高层依次扫描遇到第一个有效召唤就作为顺路目标当前楼层以上的召唤全部完成之后如果仍有当前楼层以下的召唤电梯才掉头下行下行方向的处理正好对称。用一句生活化的话来理解电梯不是哪层有人就去哪层而是在一个方向上“顺着走”把同方向的乘客都带上直到这个方向没有需求了才转向反方向。这套逻辑对应到真实电梯里就是“顺向截停”和“反向记忆保留”。2.3 开关门与安全逻辑开关门看着简单其实暗含了至少四个条件判断。开门条件包括电梯处于平层状态、在门区范围内、速度为零或者仿真里运行方向输出为False、没有超载和急停故障。关门条件包括超载信号无效、开门到位信号消失即门已处于关闭过程、没有开门按钮被持续按下、关门延时时间到。程序里我专门做了一个FC_DOOR_CTRL它接收来自调度模块的“开门请求”和“关门请求”信号内部通过两个定时器实现开门延时的自动关门功能// 开门保持定时器开门到位后开始计时默认6秒后自动关门 TON_OPEN_HOLD(IN : DOOR_OPEN_LS, PT : T#6S); IF TON_OPEN_HOLD.Q AND NOT BTN_OPEN THEN doorCloseReq : TRUE; END_IF;安全逻辑方面急停信号一旦有效所有运行输出全部切断包括上下行接触器、开门继电器只保留蜂鸣器和报警显示超载信号有效时电梯不允许启动并且蜂鸣器持续鸣响HMI画面显示“超载”报警。这些在仿真环境下都能通过强置输入完整验证。3. 在博图V15.1中完整搭建并仿真运行前面把逻辑讲清楚了接下来是实操环节。这一部分我会从创建工程开始一步一步把整套程序在博图V15.1里搭起来并且在PLCSIM里跑通。3.1 工程创建与模块划分打开博图V15.1新建项目在“添加新设备”里选择CPU。这里我选的是CPU 1214C DC/DC/DC订货号6ES7 214-1AG40-0XB0固件版本V4.4。1214C的I/O点数、程序块容量完全够四层电梯使用属于1200系列里最均衡的型号。选完之后再添加一块精简面板我这里用的是KTP700 Basic PN尺寸适中仿真时分辨率也合适。程序结构上我把所有逻辑拆成了四个FC加一个主OB1没有用FB原因很简单FC在仿真里更容易观察中间变量而且没有背景数据块的嵌套新手看程序时不用一层层点进去找数据。四个FC分别是FC_CALL_SCAN扫描所有输入状态把外呼、内呼、急停、超载等信号写入DB1FC_FLOOR_CALC根据平层信号更新当前楼层FC_DIRECTION_CALC计算运行方向和目标楼层FC_MOTOR_CTRL根据方向和目标执行上下行输出、平层停止、开门请求FC_DOOR_CTRL控制开关门流程。注意这里列了五个FC实际工程里可以灵活合并但功能要分开。每个FC只干一件事出了问题能快速定位。OB1按顺序调用它们即可这种“顺序扫描共享数据区”的架构和真实电梯PLC程序的模块化思路是一致的。3.2 关键SCL逻辑实现电梯移动在真实设备里由变频器和编码器共同驱动但仿真环境下没有这些东西所以我用定时器模拟楼层间运行时间。核心思路是当电梯确定目标楼层之后每到一个“楼层运行周期”就更新一次当前楼层直到当前楼层等于目标楼层然后触发平层停止。下面这段是方向分配的核心示意代码// 上行方向目标搜索 i : iCurrentFloor 1; WHILE i 4 DO IF upCall[i] OR cabCall[i] OR dnCall[i] THEN iTargetFloor : i; EXIT; END_IF; i : i 1; END_WHILE; // 如果上方没有召唤检查下方是否有召唤有则掉头 IF iTargetFloor 0 THEN i : iCurrentFloor - 1; WHILE i 1 DO IF upCall[i] OR cabCall[i] OR dnCall[i] THEN iTargetFloor : i; eDirection : -1; // 改为下行 EXIT; END_IF; i : i - 1; END_WHILE; END_IF;这个搜索逻辑覆盖了电梯最常见的场景先满足同方向再考虑反方向。目标楼层确定之后电机控制模块只需要比较当前楼层和目标楼层的大小关系即可决定输出上行还是下行。到达目标层时清空该楼层的对应召唤位同时发出平层停车信号。3.3 仿真调试步骤从下载到跑通这里应该是很多人真正卡住的地方我把步骤写完整先编译整个项目保证0错误0警告。博图V15.1的编译信息里如果有“程序块未完全编译”之类的警告必须处理干净再下载点击“开始仿真”按钮或者在“在线”菜单里选择“下载到PLCSIM”。如果还没有启动PLCSIM博图会弹窗提示选择“启动仿真”即可下载程序到虚拟PLC后将PLCSIM切到RUN状态。这里要提醒一点PLCSIM默认是STOP状态直接测试会发现输出全部不动作必须先点RUN打开“仿真表”在仿真表里添加需要强制的变量比如I0.34楼平层、I1.31楼上呼等。把“启用”列勾选修改“修改值”列然后点击“立即将所有修改值送入PLCSIM”观察程序块在线状态和输出点变化。在OB1里可以实时看到每个FC调用后的中间变量值在“监控”模式下所有变量显示为绿色或红色状态调试体验和真机几乎一样如果是HMI联合仿真先在PLCSIM里把PLC跑起来然后再点HMI画面的“开始仿真”此时HMI运行画面会自动连接PLCSIM中的PLC。连接成功后你在HMI上点按钮PLC变量就会跟着变化。视频里那个真实运行画面就是按住HMI上的楼层按钮、观察梯形图里各个FC的状态翻转、同时录屏得到的。整个过程和真实调试的高度相似。3.4 HMI联调画面设计与按键变量映射HMI画面设计这块KTP700仿真面板上主要放了几组元素四层楼的外呼按钮、轿厢内呼按钮、当前楼层数字显示、上下行方向箭头、门状态指示灯、急停复位按钮。一个极其常见的坑是HMI按钮按下去PLC变量没反应。这通常不是程序问题而是按钮的“事件”没有正确配置。很多新人把按钮拖到画面上就完事了但博图里按钮默认没有任何功能你必须在按钮的“事件”选项卡里添加一个“按”事件并且把事件的动作设置为“置位变量”或者“取反变量”然后再关联到DB1里的对应召唤位。另外HMI仿真联调还有一个顺序问题必须先启动PLC仿真再启动HMI仿真。如果先启动HMI仿真再启动PLCSIMWinCC Runtime启动了通讯就找不到S7-1200仿真PLC结果就是HMI上所有按钮点了都没反应或者画面上的变量显示“#####”。遇到这种“博图HMI仿真按钮无反应”的情况先不要怀疑程序把两个仿真器全部关掉按“先PLC后HMI”的顺序重新启动一次十次里有八次能解决。4. 仿真调试中的常见问题与排查记录写这部分的时候我把做这个视频之前踩过的坑都翻出来。可以说前面所有逻辑加起来都不如这些问题浪费的时间多。4.1 PLCSIM启动失败与运行不稳定第一条就是PLCSIM启动失败或者启动后程序下载不进去。在博图V15.1里最常见的现象是点击“开始仿真”后长时间卡在“正在启动S7-PLCSIM...”然后报错。排查思路按优先级排检查杀毒软件和防火墙是否拦截了PLCSIM的虚拟网卡服务西门子软件的许可服务、通讯服务经常被误杀建议把博图相关进程加入白名单检查Windows帐户权限尽量用管理员身份启动博图V15.1PLCSIM需要访问系统级的虚拟通讯接口如果系统里同时装了多个博图版本比如V15.1和V18共存要留意PLCSIM版本是否冲突。V15.1的PLCSIM和V18的PLCSIM不能同时在后台驻留启动前先看任务管理器里有没有残留的S7-PLCSIM进程如果是博图V18甚至更高版本弹出“PLC启动失败”的提示多半是兼容性问题。V18、V20这些新版本对系统组件要求更高很多是Windows系统补丁缺失导致虚拟机通讯组件启动异常可以尝试以兼容模式运行软件或者把虚拟网卡驱动禁用再启用。4.2 定时器不走、变量不刷新类问题在PLCSIM仿真里定时器是需要“执行条件”的。很多人写了一段TON仿真时发现定时器的ET一直为零以为是程序不对其实是输入条件从来没满足过。比如自动关门定时器它的使能条件是“开门到位信号有效”如果你没有在仿真表里把开门到位变量I0.4强制成TRUE那么定时器根本不会被调用到。还有一个更隐蔽的问题在PLCSIM中强制的变量只作用于输入映像区如果你在程序里使用“P“指令上升沿读取输入点仿真时第一次点击按钮只能产生一个很短的扫描周期脉冲但你在仿真表里强制的TRUE值会持续多个扫描周期导致沿信号不触发。解决办法是使用HMI仿真界面的按钮来控制内部变量或者在仿真表里手动模拟“先置TRUE再置FALSE”的过程才能产生正确的上升沿。4.3 博图版本与工程迁移的典型坑版本问题在这类项目里几乎躲不开。V15.1工程用V16、V17打开时会提示“需要升级”升级后你会发现旧的仿真配置可能需要重新添加一些老的HMI画面字体和布局也可能变化。反过来高版本工程无法用低版本打开这个是不可逆的所以发布工程时一定要明确标注版本。卸载重装也是重灾区。博图V17、V18这类新版软件卸载不干净会导致后续安装时提示“已有更高版本存在无法继续安装”。建议卸载时先停掉所有西门子服务再用官方卸载工具清理注册表最后删除C盘残留目录。另外“博图有损加密”这个功能在V15.1以后很常用它会把程序块内部逻辑隐藏只保留接口和注释做商业项目交付时很有用但要注意加密后的程序块无法再编辑源码只能重新导入原工程所以加密前一定备份。4.4 常见问题速查表我把遇到的和同行反馈较多的问题整理成一个速查表方便对号入座现象可能原因处理办法PLCSIM无法启动杀毒拦截/权限不足/版本冲突加白名单、管理员运行、清理残留进程HMI仿真按钮无反应按钮未配置事件/PLC仿真未先启动检查按钮事件按先PLC后HMI顺序重启定时器不累计使能条件不满足在仿真表中强置前置条件程序下载后输出无变化PLCSIM未切到RUN点PLCSIM工具栏的RUN按钮无法用低版本打开高版本工程版本不兼容用高版本重新导出/另存为低版本格式块被加密无法修改已启用有损加密删除加密块并重新导入源码运行画面显示“#####”HMI未建立PLC连接检查PLCSIM与HMI仿真先后顺序5. 从仿真到实战还能怎么玩四层电梯仿真是学习路径上很典型的一站但做完之后别急着收手我建议按下面的方向继续扩展。5.1 扩展到多层和群控四层电梯的召唤数组固定是1..4改成多层非常简单只需要把数组上限改成实际楼层数。但楼层多了以后方向优先算法需要处理更多边界条件顶层和底层没有双向外呼运行中突然插入远端呼叫高峰时段电梯长期在中间楼层来回跑底层乘客长时间等不到电梯。这些问题在四层机上很难暴露一旦想明白了对整个调度系统的理解会加深很多。再往上就是群控。多部电梯共用一个召唤队列需要解决“分配优先级”和“防碰撞”问题。四层单梯用PLC基本是“顺序扫描数组遍历”就能搞定但多梯群控就要考虑交叉通讯了。如果是在仿真环境里做群控可以用两台S7-1200分别仿真两台电梯PLC之间通过以太网通讯交换召唤信息和位置状态甚至可以用UDP组播让多台PLC共享同一份召唤数据模拟真实的群控调度逻辑。5.2 仿真程序移植到实物设备的改造清单如果想把这套仿真程序真正跑在实物电梯模型上至少要补三块内容第一位置检测。仿真里平层信号是用变量强置的实物上需要换成接近开关、光电开关或者旋转编码器用高速计数或中断实时计算楼层位置第二安全回路。急停、超载、门锁这些在仿真里可以用布尔变量模拟但实物上必须接成硬接线安全回路直接切断主接触器控制电源第三电机驱动。1200本身不输出变频器模拟量你需要扩展模拟量模块或者用通讯方式控制变频器同时还要加入抱闸打开延时、启动加速斜坡这些物理特性。改造时有一个常见的低级错误直接把仿真程序里的楼层定时器逻辑搬到实物上。仿真里电梯“走一层”是固定2秒的定时器模拟实物里电梯楼层距离不一样加减速时间也不一样再用定时器算楼层就会出错必须换成编码器计数或传感器位置来判断。5.3 博图里几个值得掌握的进阶技巧做完电梯项目博图的基本用法算是过关了但还有几个进阶功能非常值得研究AT指令覆盖视图S7-1200的SCL里可以用AT关键字把变量强制覆盖成另一个数据类型比如把一个字节变量映射成8个独立的Bool这在处理电梯召唤位图时非常方便指针寻址用ARRAY和索引变量访问召唤数组本质上用到了间接寻址。博图里指针用法虽然比STEP7简洁但对内存地址的直接操作仍然能帮你写出更精简的代码程序块加密与库功能V15.1支持将写好的FC/FB封装成库在多个项目间复用。电梯这类成熟逻辑封装成库之后新项目只需要改I/O映射和楼层参数开发效率会几何级提升。最后再做几点提醒这套四层电梯程序的完整思路和运行演示已经说明白了。我个人最大的感触是电梯控制逻辑听起来复杂真正拆开之后核心就是“当前楼层、目标楼层、方向、召唤表、开关门状态”这几个变量在互相博弈程序写的不是某一条指令而是这些变量之间的约定。你先把状态定义清楚再画数据流最后再去写梯形图或SCL整个过程会顺畅得多。如果你也要在博图V15.1里复现这套电梯仿真我的建议是从I/O表和变量表开始抄先别碰程序。把每层外呼、内呼、平层信号、门区信号这些变量在DB块里全部建好仿真表格里预先填好测试值然后再逐段调试逻辑。遇到HMI按钮无反应或者PLCSIM启动失败这类问题先别急着重装软件对照速查表按顺序排查多数情况下都是变量映射、仿真顺序这类小细节。最后再分享一个小技巧视频录制时我特意把PLCSIM的“在线监控”窗口和HMI仿真画面放在同一个屏幕上左侧是对应的梯形图触点右侧是运行画面。这样录出来观众既能看见电梯在跑也能看见背后的逻辑在翻转比单纯录一个HMI画面要有说服力得多。以后你做大项目调试记录时也可以试一试这个录制布局。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询