☰
博图V15.1单步六层电梯PLC程序框架与调试详解
2026/10/16 16:56:42 网站建设 项目流程

简介:基于博图V15.1开发的单步六层电梯控制程序,面向PLC自动化学习者与现场调试人员,覆盖复位、启动、多层顺次响应、反向呼叫无效、每层4秒运行与4秒停留等控制逻辑,层次完整,适合作为中高级编程练习或教学案例。资源包含完整工程包,共52个文件,以xml配置、cfs组态、dat数据、plf项目等类型为主,整体7.95MB,目录下PLC控制程序、HMI搜索索引等模块齐全,便于导入博图后直接查看和修改。目前已有875人学习下载。借助该案例可系统理解多层电梯顺向运行、反向屏蔽、楼层计时与实时显示的实现方法,并根据实际需求在V15.1中移植或改造,对掌握西门子PLC项目的组织方式和顺序控制编程具有直接参考价值。

1. 博图V15.1单步六层电梯:这套PLC程序框架,能直接跑通你的课程设计

做过电梯PLC项目的都知道,市面上的例程要么是三层、五层的简化版,要么用的是老掉牙的S7-200,拿到博图V15.1里连硬件都组态不上。而单步六层电梯这套程序,好就好在它把六层电梯最核心的控制逻辑——楼层召唤、平层停车、开关门联动——用单步方式拆得清清楚楚,每个动作都能单独观察和验证。对于正在做自动化课程设计、或者刚接触博图V15.1的从业者来说,这套程序的价值不只是“能仿真”,而是它提供了一个可以直接套用的框架:输入输出表、中间变量、梯形图段落的划分都有章法可循。我在拿到这个资源后,完整复现过一遍仿真运行,它解决的最大痛点是让你不再对着空白的OB1发愁怎么组织六层电梯的状态逻辑,而是能照着现成的框架去改造。下文我会把这套程序从项目结构、硬件组态到控制逻辑的实现方式,再到调试中的坑,逐一拆开讲,保你拿到的不是一份只能看的文件。

2. 从OB1到FC:六层电梯程序的模块划分与资源构成

拿到项目文件后,第一件事不是急着打开OB1看梯形图,而是先理清整个PLC工程的模块构成。博图V15.1里的电梯程序,虽然功能逻辑不复杂,但如果模块划分不清晰,六层楼的状态变量能把你绕晕。

2.1 程序块的分配原则:为什么用FC而不是FB

常见做法是,单步六层电梯的控制程序由主程序OB1、若干FC函数块、以及全局数据块DB组成。我看到这套资源里,电梯的核心动作逻辑分装在了FC1(楼层召唤与登记处理)、FC2(运行方向判断与抱闸控制)、FC3(平层停车与开关门时序)这三个功能块中。选FC而不是FB,是因为除了一层和二层的召唤数据需要掉电保持之外,大部分中间变量(比如当前楼层、运行方向、门状态)都不需要静态保持。用FC意味着每次调用时数据是临时的,不会占用过多DB空间,也方便单步调试。

这里有个选型细节值得展开:如果用了FB,必须为每个FB分配一个背景DB,而博图V15.1中背景DB的数量多了之后,在线监控时会遇到“背景数据块未打开”的困扰。某开发者的调试经历就是,起初整套电梯逻辑全部塞进FB1,在仿真单步时,每个扫描周期都要打开对应背景DB的监控表,非常繁琐。后来把非保持型逻辑全部移植到FC中,OB1里按顺序调用,问题立刻简化了。

2.2 数据块与变量表:先认清I/O映射关系

拉开变量表,六层电梯的输入输出信号数量并不算多,但映射关系必须理清。输入侧:每层一个上召唤按钮(I0.0~I0.4对应1至5层上召)、每层一个下召唤按钮(I0.5~I1.3对应2至6层下召)、六层平层感应开关(I1.4~I2.1)、各层电梯内选层按钮(I2.2~I2.7)、开关门限位(I3.0开门到位、I3.1关门到位)。输出侧:六层楼层指示灯(Q0.0~Q0.5)、电梯上行接触器(Q0.6)、下行接触器(Q0.7)、开门继电器(Q1.0)、关门继电器(Q1.1)、各层到站钟(Q1.2~Q1.7)。

这里我一般会花半小时把变量的符号表整理干净。资源包中有现成的符号表文件(.csv格式),用记事本打开就能看到完整的符号注释。需要注意,符号表中“电梯当前楼层”用的是BCD编码存放在MW10中,而不是用整数比较指令逐层判断。为什么要用BCD?因为在博图V15.1中,配合七段数码管显示楼层时,BCD码可以直接输出到显示驱动,省去了整数转七段码的转换逻辑。这个设计在做过硬件接线的人眼里是合理的,但如果你只做软件仿真,很容易忽略这一点。

2.3 组织块与扫描周期的配合:单步执行的关键

单步六层电梯的“单步”核心,并不只是指电梯每一步动作分离开来,而是在程序扫描上做了分段处理。OB1中安排了三段网络:第一个网络块处理楼层召唤登记(无条件调用FC1),第二个网络块处理方向判定与电机运行控制(条件调用FC2,只有电梯不在门区时才执行),第三个网络块处理平层停车与开关门(条件调用FC3,电梯在门区且无运行指令时执行)。这种分时调用的思路,本质上是把电梯的运动状态切成了“运行态”和“门控态”,两个状态不会同时执行逻辑,避免了梯形图中常见的竞争冒险问题。

提示:在博图V15.1中,FC的条件调用可以用常开触点串联一个“非门区”标志位来实现,这个标志位由平层感应开关经过上升沿置位、离开门区时复位。

3. 单步六层电梯的控制逻辑拆解:召唤、判定、停车三步走

六层电梯控制的难点不在于某一层的动作,而在于各层召唤信号到来时,电梯如何确定运行方向、如何响应内选信号、如何在平层时准确停车。这套程序给出了一个清晰的单步思路:每一步只有一个明确动作。

3.1 外呼与内选登记的软件实现

外呼登记是最容易写乱的部分。六层电梯有5个上召按钮(1至5层)和5个下召按钮(2至6层),再加上6个内选按钮,共16个召唤信号。资源FC1中,每个召唤信号都使用一个“置位”指令(S)登记到中间变量区,用“复位”指令(R)在到达时清除。以二层下召唤为例:

// FC1 网络1:二层下召唤登记与消除 A "I0.5" // 二层下召按钮,常开触点 S "二层下召登记" // 置位中间变量M10.1 A "二层平层感应" // 到达二层平层 A "电梯当前楼层BCD" // BCD值等于2时闭合(由比较器输出) R "二层下召登记" // 复位呼叫登记

逻辑上,S和R指令置于同一网络段首尾,梯形图中称之为“置位复位锁存器”。程序运行到该网络时,先检测按钮信号是否按下,按下则登记;再检测是否满足消除条件,满足则复位。两个条件在同一次扫描中互斥,不会出现“按下又立即消除”的问题。这段代码的关键参数在于BCD楼层比较值,若用整数比较则需先将MW10转换为整数格式,而这里BCD比较指令是直接可用的。

我可以补充一个细节:资源的FC1里,每层登记用独立的M区字节位,而不是用移位寄存器或数组。有些程序习惯把16个召唤信号打包成两个WORD,用循环指令扫描每一位,虽然代码紧凑,但博图V15.1的梯形图中循环指令调试起来非常晦涩,尤其在单步执行时很难观察是哪一层登记被置位了。独立M位虽然在变量表里看起来多,但胜在监控直观、状态清晰。

3.2 方向判定:用置位优先还是复位优先

方向判定是电梯控制中“电梯是否响应某层召唤”的核心。FC2中采用了“方向优先”策略:一旦设定上行方向,只有上行的召唤会被响应,下行召唤保持登记直至方向切换。

// FC2 网络1:上行方向设定条件 O "一层内选登记" // 逻辑或 O "二层内选登记" O "三层内选登记" A "电梯当前楼层BCD" A( L 2 // 当前楼层低于召唤楼层时,允许上行 >=I ) S "上行方向"

注意最后一个网络段中使用了比较操作,但前提是把MW10的BCD码转换为整数。常见做法是在FC2起始处调用一个转换子程序,或者用博图自带的BCD_I转换指令,把BCD码变成INT值存放在MW12中。程序逻辑在FC2中共分三层判断:一是同层内选优先响应,二是反向召唤暂时屏蔽,三是端站强制换向。

这里我想强调一下“端站强制换向”的必要性。在一层和六层位置,如果继续运行会触碰到机械限位,因此程序不管召唤登记如何,只要检测到一层平层且电梯向上运行,就立即复位上行方向并置位下行方向(若有下召),否则电梯会停在端站发懵。很多自己写电梯逻辑的初学者就栽在这里——没有端站换向,仿真停在六层之后,再按一层的召唤按钮没任何反应,以为程序跑飞了。

3.3 平层停车与开门时序的衔接

从“运行”到“停车开门”的衔接是单步电梯最微妙的地方。FC3中,平层信号(每层一个感应开关)是停车的第一触发条件,但并非有平层信号就立即停车——程序需要判断电梯的实际运动方向和设定方向是否一致,防止“过楼停车”。

// FC3 网络1:停车条件判断 A "上行方向" A "二层平层感应" A "二层内选登记" // 内选到达目标层 S "停车请求"

这个网络的实际效果是:电梯上行过程中,每经过一层平层感应器时,先检查该层是否有内选登记,如果有,置位停车请求;如果没有,继续运行。外呼的处理类似,但额外增加了一个“运行方向与外呼方向一致”的条件。开门时序则是一个经典的TOF(断开延时定时器)接力:停车请求置位后,电梯先切断运行输出,延时0.5秒待曳引机完全停止,再输出开门信号,开门到位后延时4秒,自动关门。

资源里的定时器分配也值得一提:T1用于停车后延时开门,T2用于开门保持,T3用于关门后延时运行。三个定时器的时间参数在DB块中设置为可在HMI上修改,博图V15.1中这一点用IEC定时器更容易实现,但本资源用的是S5定时器,监控时要注意时基设置。

提示:S5定时器在博图V15.1里以“S5T#0.5S”格式预设时间,如果直接在监控表里修改定时器的当前值,容易因为时基不对而无法预载,最好在程序里修改预设值。

4. 仿真与调试:在博图V15.1中让六层电梯动起来

资历较浅的工程师拿到程序后最常做的一件事,就是直接编译下载到PLC,然后发现各种意想不到的问题。实际上,博图V15.1自带的PLCSIM仿真器完全可以胜任六层电梯的程序验证,关键是要掌握仿真环境下的信号模拟方法。

4.1 用PLCSIM模拟按钮信号的两种方式

PLCSIM中模拟外呼按钮,大多数人一开始都用“修改操作数”的方式,即手动选中I0.0,点击“修改为1”,模拟一层上召按钮按下。但这种方式在程序扫描速度较快时,按钮的“按下”往往只能维持一个扫描周期,程序来不及捕捉上升沿,登记无法锁存,导致电梯根本没反应。后来我改用的方式是:在PLCSIM的“变量表”窗口勾选“允许修改”,把I0.0的状态改为1后,保持几个扫描周期,再改回0,模拟一个真实的按钮抬手过程。虽然麻烦,但仿真结果和实物验证效果几乎完全一致。

这里有一个更高效的技巧:在FC1的临时变量区增加一个“仿真按钮脉冲”变量,用系统时钟脉冲M0.3(1Hz)和M0.5(2Hz)去接按钮的上升沿,如下所示:

A "M0.5" // 2Hz时钟脉冲 A "I0.5" // 二层下召按钮 S "二层下召登记"

我一般在验证逻辑时,直接把I0.5的修改变为1并保持,这样M0.5的脉冲会周期性触发登记条件,相当于在仿真中自己按下了按钮。这种方法在大量测试外呼响应时,比手动反复修改I点高效得多。

4.2 监控表的组织:把关键变量放一屏

单步电梯调试过程中,需要同时观察的方向变量不少:当前楼层BCD、运行方向、停车请求、各个登记位、定时器当前值。如果不做筛选,把这些变量全拉到监控表里,梯形图在线监控时将非常混乱。我的习惯是建一张专门的“电梯状态总表”,分为三组:第一组是运动控制变量(上行方向、下行方向、停车请求、接触器输出),第二组是楼层检索变量(六层平层感应、当前楼层BCD、当前楼层INT),第三组是门控变量(开门到位、关门到位、T1~T3当前值)。

用这张表来配合PLCSIM仿真,可以做到每一个单步动作都能对上看下。举例验证:“电梯在三层,按下四层内选按钮后,电梯应该上行”。观察表格中的变化:四层内选登记置位、当前楼层INT从3逐步变为4、上行方向置位、三层平层感应先导通再断开、四层平层感应导通后、停车请求置位、上行方向复位、T1开始计时。这五步变化只要有一处和预期不符,问题就锁定在对应的FC中。

4.3 梯形图程序状态与断点的利用

博图V15.1的梯形图有一个容易忘记、但单步调试时异常好用的功能——在程序块中设置断点(Breakpoint)。在单步六层电梯这种规模不大的程序里,设置断点的方法比在线监控要直观得多:打开OB1,在需要停止的网络左侧右击,选择“设置断点”,然后点击仿真中的“继续运行”按钮,程序运行到该网络之前会停下来,此时可以观察所有输入输出的实时状态。

我调试开关门时序时,通常会在T1(停车后延时开门)的定时器比较触点上打一个断点,然后触发一次完整停车动作。程序停到断点时,检查T1当前值是否从0开始累加、开门输出有没有被置位。这个方式的优势是能精确定位“逻辑没有执行”和“逻辑执行了但条件不满足”这两类问题的区别——前者是扫描根本没走到这个网络,后者是走到了但触点状态不对。

5. 避坑指南:单步六层电梯从仿真到实物移植的五个常见问题

我把这套程序复现过程中踩过的坑和后面陆陆续续帮别人调试时遇到的问题做了个归类,以下五条是出现频率最高的,每一条都值得在执行前留意。

5.1 程序编译通过但下载到PLCSIM后无法运行

现象:PLCSIM中CPU处于STOP模式,程序能下载但点击“运行”后立刻跳回STOP,诊断缓冲区提示编程错误或区域长度错误。 原因:最常见的元凶是OB1中调用了FC3,但FC3使用了未初始化的定时器地址,或者访问了不存在的DB字节。在博图V15.1中,S5定时器若未在变量表中定义符号名,而是直接使用T号,一旦T号被占用或超出CPU的定时器总数,就会出现区域长度错误。 解决:打开FC3,逐个检查T1、T2、T3的定时器定义。注意观察定时器是否被分配了双字地址(如T1占用T0和T1两个定时器号),如果T2刚好用了T1的地址后半段,调用时就会冲突。我的处理方式是统一把定时器基地址偏移量设为偶数,并在符号表中显式命名。

5.2 电梯在仿真中一直上行,到六层也不停

现象:内选六层、外呼六层下召都登记了,电梯从一层出发一直运行到六层,但经过六层平层感应时没有停车,直接撞到端站限位。 原因:六层平层感应的输入地址(I2.1)在组态表中未正确映射。常见情况是在符号表中把六层平层感应写成了I2.0,而实际接线或组态分配的是I2.1。程序逻辑永远扫描不到真正的六层平层信号,自然不会停车。 解决:对照资源包中的硬件组态Excel清单表,逐行核对I/O地址。尤其在仿真时,PLCSIM的输入状态修改必须严格对应地址,符号名错位会导致修改I2.1时程序读到的却是I2.0的信号,两者互不干扰,现象极为隐蔽。

5.3 电梯开门后立即关门,乘客来不及进出

现象:电梯平层停车后,开门输出正常,门开到位信号一到,电梯立刻输出关门,开门保持时间几乎为零。检查T2定时器预设值明明是4秒,但实际只有不到0.5秒。 原因:T2的启动条件用的是开门到位信号的上升沿,但在某些扫描周期中,开门到位信号由于抖动被反复触发,导致T2被反复重新启动。S5定时器在重新启动时,当前值清零重新累加,所以永远不会累加到4秒预设值。 解决:在T2启动触点前串联一个开门到位信号的“保持”标志——用一个置位指令把开门到位状态锁存,直到关门命令触发时才复位。修改后的逻辑为:

// 开门到位保持 A "开门到位" S "门开保持" A "关门命令" R "门开保持" // T2启动条件 A "门开保持" A "T2" // 定时器启动触点 L S5T#4S SD T2

5.4 方向继电器输出Q0.6和Q0.7同时为1

现象:监控表中上行接触器Q0.6和下行接触器Q0.7在电梯换向瞬间同时导通,硬件上会导致主接触器短路。 原因:切换方向的网络中没有加入互锁条件。当电梯在二层完成上行停车后,下行方向置位网络和上行方向复位网络之间存在一个扫描周期的重叠——上行方向还没有复位,下行方向已经置位。 解决:在Q0.6和Q0.7输出线圈前分别串联对方的常闭触点,形成梯形图中的软件互锁,这是电梯控制的基本要求。

// Q0.6 上行接触器输出 A "上行方向" AN "下行方向" // 互锁 = "Q0.6" // Q0.7 下行接触器输出 A "下行方向" AN "上行方向" = "Q0.7" // 响应时间:若电机惯性大,还应在Q0.6和Q0.7之间添加0.3秒延时

5.5 单步运行的“第一步”总是卡顿

现象:用PLCSIM单步执行梯形图时,每一段执行完要等很久才能继续,或者点击“下一段”时程序不响应。 原因:博图V15.1的仿真单步模式是基于扫描周期的,每条指令之间都要和仿真内核交换数据。如果程序中有大量定时器或计数器指令,每次单步都会触发定时器状态刷新,导致响应慢。 解决:不是程序逻辑问题,不需要修改代码。我的习惯是单步调试只用于定位某个特定网络,定位完之后立刻切回连续运行模式。只有在分析触点状态变化顺序时,才用单步方式一步一步推进。这种操作习惯能极大提高调试效率。

注意:定时器的单步执行存在“虚拟时间跳跃”,在S5定时器处理时,单步不会真实等待定时器时间到达,也可以理解为定时器时间到了才能往下走,但调试者观察不到中间态。所以定时器相关的时序验证,务必在连续模式下进行。

6. 从单步到多步:扩展这套电梯程序的三个改造方向

六层单步电梯程序熟悉之后,下一步往往就是根据自己的项目要求去扩展改造。以下三个方向最常用,也能帮你判断这套框架的灵活程度。

6.1 改造为八层或十层:变量映射与FC内网络复制

六层变八层,物理上多了两层外呼按钮、两层平层感应、两个内选按钮,变量表需要新增8个输入点。程序逻辑层面,FC1中的每层召唤登记网络、FC2中的方向判定网络、FC3中的平层停车网络,都需要对应复制扩展。以我的经验,最大的坑在于比较楼层时用的BCD码是4位一组,八层楼只需覆盖到2#8,硬件上没有问题;但如果到十层以上,就需要考虑是否需要扩展到两个字(16位)的BCD码存储。这个扩展过程能清楚地看到这套六层框架的结构化程度——网络之间全部是平行关系,加入更多层只是增加网络段数量,不改变原有逻辑骨架。

6.2 增加开关门时间的HMI实时调节

资源包中定时器T1、T2、T3的预设值直接写在梯形图里,每次修改都要重新下载程序。如果期望在触摸屏上实时调整开关门延时,可以改造定时器逻辑,把S5定时器改为IEC定时器(TON),并将预设时间存储在DB块中:

// 开门保持定时器改造 A "门开保持" TON "IEC_Timer_开门保持", DB10.DBX0.0, DB10.DBD2, "开门保持预设时间"

DB10.DBD2是浮点数,存储以秒为单位的时间值,由HMI写入。这个改动的好处是调试电梯开关门节奏时,不需要反复编译下载程序,在HMI上直接修改数值观察效果,非常方便。IEC定时器在PLC中占用独立DB块,需要额外确认CPU的内存足够分配。

6.3 增加消防联动与急停逻辑

课程设计或实际工程项目中,电梯控制通常需要包含消防信号(火灾时迫降一层并停运)和急停信号。扩展方式是在OB1最前面加一段高优先级网络:当消防信号接通时,不管当前电梯处于什么状态,立即切断所有运行输出和门控输出,然后置位快速迫降标志,驱动电梯以不变频的额定速度回一层。这类安全逻辑优先级高于一切功能逻辑,在OB1中必须放在调用FC1/FC2/FC3之前,否则在运行状态中会插入异常扫描,导致危险。

扩展完这三个方向后,再回头看最初这套单步六层电梯程序的框架,你会发现它的设计思路其实是一种很好的起点:每个功能块只管一件事,层间信号通过中间变量解耦,程序的行为完全可以预测。从那以后我再碰任何电梯或升降机项目,都会强制走一遍“先画状态转移图、再分配M变量、最后写梯形图”的流程,确保每一步动作单一且可追溯。

希望这篇拆解能帮到你,少走我当初绕过的弯路。

本文还有配套的精品资源,点击获取

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

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

立即咨询