基于西门子的S7-200电梯控制程序(主要包括电梯定位程序,外呼内选信号的记忆、显示、响应和消除程序,优先服务程序,电梯的上、下控制程序,开/关门控制程序)设计。 并用MCGS组态软件进行六层电梯的仿真模拟监控界面设计,实现电梯轿厢的上下运行显示,内呼选层控制和外呼按钮控制,电梯轿厢开关门显示等,使仿真程序和实体PLC控制柜建立连接。

在工控实验室里看到老旧的S7-200 PLC还在坚持工作时,突然想做个带劲的——用这古董设备搞个六层电梯仿真。电梯控制最有趣的就是各种状态的自锁互锁,就像在玩数字版的俄罗斯套娃。

先看定位程序怎么玩转编码器脉冲。这段代码用到了高速计数器HSC0,每层对应固定脉冲数。当电梯经过楼层传感器时,CNVRT_INT指令把脉冲数转成具体楼层:

LD SM0.1
MOVB 16#F8, SMB37  // 配置HSC0为AB相计数
HDEF 0, 9
MOVD +0, SMD38     // 初始值清零
HSC 0

调试时发现个坑:编码器线数要换算成实际位移。比如每转500脉冲对应1.2米层高,得在HSC中断里做浮点运算,这时候S7-200的运算速度就开始喘气了。

外呼信号处理像在玩贪吃蛇。用V寄存器做信号存储器,置位后得在到达目标层时"吃掉"信号。这里用了位屏蔽技术:

// 外呼上升沿检测
LDN M0.0
EU
O VW100
MOVW AC0, VW100  // 各楼层外呼状态打包存储

// 到达某层时清除对应位
LDW= VW10, 3     // 当前到达3层
ANDB 16#EF, VB100  // 清除第4位(楼层号从0开始)

重点是这个ANDB指令,用十六进制掩码精准清除特定bit位,比用RST逐位操作省了扫描周期。

电梯的优先服务策略最烧脑。当同时存在上下请求时,用SM0.5配合计时器做决策:如果当前方向上行超过5秒未响应,自动切换服务方向。这段代码藏在子程序里:

LD T37
TON T37, 50
LD M1.1         // 上行请求标志
A T37
= M2.0          // 强制切换下行

MCGS组态界面要玩点花活。在用户窗口里拖曳电梯井道,给每个外呼按钮绑定PLC的V变量。最骚的是轿厢动画,用水平移动构件关联VD200地址:

!SetDevice(电梯模型,"动画位置",VD200)

调试时发现轿厢会"瞬移",原来忘了在PLC程序里做速度斜坡处理。赶紧在输出脉冲前加上S形曲线算法,让MCGS里的电梯运动看起来像吃了德芙般顺滑。

通信配置是个暗坑。用PPI协议连接仿真PLC时,必须手动修改PC/PG接口为TCP/IP->Auto。有次手滑设成MPI,监控界面直接表演"电梯消失术",吓得以为见鬼了。

最后在触摸屏上看到电梯按着预定逻辑跑起来时,突然觉得这些古老的PLC就像电梯里的老司机——虽然动作慢了点,但绝对稳如老狗。或许这就是工业控制的魅力,用最朴素的逻辑,编织出精准的机械芭蕾。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐