西门子PLC S7-200在立体车库控制系统中的应用联系 西门子PLC S7-200编写的立体车库联系用西门子S7-200搞立体车库说难不难核心就是把升降、横移、安全这几块逻辑拆碎了挨个怼明白。毕竟车库要的是稳不是花里胡哨的算法先从最基础的车位状态采集说起。1. 先搞定车位空满检测立体车库最基础的就是知道哪个车位空着我一般用光电传感器或者压力传感器接输入点比如I0.0到I0.7对应8个车位传感器感应到车位没车就输出1有车输出0。直接把这些状态存到一个字节里后面找空车位方便得很// 车位状态采集I0.0-I0.7对应1-8号车位1为空0为满 LD SM0.0 MOVB I0.0, VB0.0 MOVB I0.1, VB0.1 MOVB I0.2, VB0.2 MOVB I0.3, VB0.3 MOVB I0.4, VB0.4 MOVB I0.5, VB0.5 MOVB I0.6, VB0.6 MOVB I0.7, VB0.7这里用SM0.0循环扫把每个输入点的状态直接塞到VB0的各个位里。后面找空车位不用挨个读I点直接查VB0就行——比如VB0.0是1就代表1号车位空着省了不少重复代码维护的时候也一眼能对应上哪个位管哪个车位。西门子PLC S7-200编写的立体车库联系之前踩过的坑传感器偶尔会因为车库里的灰尘或者灯光干扰抖一下导致车位状态误判。后来给每个输入点加了50ms的延时滤波用TON定时器卡一下// I0.0的滤波处理抖信号直接过滤 LD I0.0 TON T37, 5 // 50ms延时S7-200的TON定时基数是10ms5就是50 LD T37 M0.0 // 再把M0.0存到VB0.0里几十毫秒的延时完全不影响正常检测却能把大部分干扰信号挡在外面客户再也不会抱怨“明明车位空的怎么显示满了”。2. 自动找空车位用户按存车键后程序得自动找第一个空车位。S7-200的循环处理位变量有点绕不如直接挨个判断来得直观——毕竟车位数量一般不会太多写起来快维护也方便// 找第一个空车位存车触发信号M0.1有效时把车位号存到VW10 LD M0.1 LPS MOVW 0, VW10 // 默认0表示无空车位 // 查1号车位 LD VB0.0 JMP 0 // 查2号车位 LD VB0.1 MOVW 2, VW10 JMP 1 // 查3号车位 LD VB0.2 MOVW 3, VW10 JMP 1 // ... 后面依次查VB0.3到VB0.7 LPP JMP 1 LBL 0 MOVW 1, VW10 // 找到1号空车位 LBL 1这里用JMP跳转来减少无效判断找到第一个空车位就直接跳出不用再查后面的响应速度快。要是车位多的话其实也可以用FOR循环遍历VB0的每个位但写起来不如这个直观新手接手也能秒懂。3. 升降横移的核心逻辑载车板的上升下降是关键必须加限位和互锁不然升过顶或者降到底电机直接废了。比如Q0.0控制上升接触器Q0.1控制下降接触器I1.0是上限位I1.1是下限位// 载车板上升控制M0.2是上升指令串上限位和急停 LD M0.2 O Q0.0 // 自锁 AN I1.0 // 上限位常闭碰到就停 AN M0.3 // 下降指令互锁上升时不能触发下降 AN I1.2 // 急停常闭按下直接断电 Q0.0 // 载车板下降控制同理 LD M0.3 O Q0.1 AN I1.1 // 下限位 AN M0.2 // 上升互锁 AN I1.2 // 急停 Q0.1这里的启保停电路是PLC入门级操作但千万别省互锁和限位——之前见过有人图省事没加互锁误操作同时触发上升下降直接把接触器烧了赔了钱不说还耽误客户使用。急停逻辑必须拉满除了程序里串常闭硬件上最好让急停按钮直接切断主回路双重保险才靠谱。毕竟车库里有人取车的时候万一载车板失控急停是最后一道防线。最后碎碎念其实用S7-200做立体车库真不用搞什么复杂算法把每个动作的输入输出对应清楚安全逻辑焊死再把常见的干扰问题提前过滤掉就八九不离十了。调试的时候别嫌麻烦每个车位都要试存取每个限位都要模拟触发毕竟稳定才是工业项目的核心——客户要的是每天能正常存车取车不是看你写了多么牛逼的代码。