No.623 基于S7-200 PLC和MCGS组态的自动售货机控制系统自动售货机这玩意儿现在满大街都是但你知道它肚子里的控制系统是怎么转的吗今天咱们就拆开一台基于S7-200 PLC和MCGS组态的机器看看硬币叮当响的背后藏着什么门道。先说说硬件架构这个骨架。核心控制器选的是西门子S7-200系列里的CPU 224XP这货自带14输入/10输出点还带两个模拟量输入口。为啥选它举个栗子当顾客塞进5块钱纸币时光电传感器DI0.3就亮了这时候PLC得同时处理金额累加、货道选择、温度监控饮料要冷藏啊等任务多任务处理能力杠杠的。组态软件用的是国产MCGS这玩意儿做HMI界面真心方便。看这个商品选择界面Sub btn_Cola_Click() If PLC.ReadTag(货道1库存) 0 Then PLC.WriteTag 出货指令, 1 MCGS.ShowMessage 正在出货请稍候 Else MCGS.PlaySound 缺货提示音.wav End If End Sub这段脚本实现了点击可乐按钮时的逻辑先查库存有货就发指令没货直接放哀乐划掉提示音。注意那个货道1库存其实是直接映射到PLC的VW100存储区玩的就是实时数据绑定。重点来了看PLC梯形图里的关键逻辑NETWORK 1 LD I0.3 //投币检测 TON T37, 50 //防抖计时 MOVW VW10, VW20 //当前金额转存 AENO I 5, VW20 //金额累加这个投币处理模块有意思吧用TON定时器防抖是真香之前没加这个的时候遇到硬币卡壳能给你刷出上百块的假账。MOVW和I指令配合着做金额运算VW20这个寄存器相当于临时钱包。No.623 基于S7-200 PLC和MCGS组态的自动售货机控制系统再说说货道控制这段STL代码够骚LDW VW20, 10 //金额够买可乐 A M1.1 //货道1有货 Q0.5 //启动电磁阀 AN T38 //防止连续出货 TON T38, 300 //电磁阀动作3秒这里用了两个保护逻辑既要金额足够又要库存充足才会启动电磁阀。T38定时器控制出货时间实测3秒刚好够330ml易拉罐滚出来。之前设2秒的时候罐子卡在半路的情况能把运维小哥气哭。调试时遇到个邪门问题找零电机偶尔抽风。后来发现是MCGS界面上的找零按钮地址设成了QW0而PLC程序里用的是Q0.6。这种地址映射坑爹事建议大伙儿在变量表里统一用符号寻址别学我们当初的野路子。整个系统最妙的是温控部分用PT100检测温度通过EM231模块转换MOVW AIW0, VW30 //读取温度值 CMPW VW30, 27648 //对应25℃ AENO Q0.7 //启动压缩机这个27648怎么来的4-20mA对应0-55℃计算公式得现场实测校准。记得第一次调试时算错系数结果把饮料冻成冰坨子取货口直接变凶器发射口...这套系统跑起来后最直观的感受是维护方便。MCGS的运行日志功能能记录每笔交易配合PLC的RS485接口连手机都能远程查库存。有次便利店老板说机器吞钱调出交易记录一看好家伙是顾客自己没等出货完成就踹机器这锅咱程序可不背。要说改进空间下次准备加个人脸识别模块用自由口通信接PLC。不过到时候又得头疼协议解析想想就头秃。总之工控项目就是这样看着简单一自动售货机真做起来处处是细节但搞定了是真有成就感——尤其是自己投币买罐肥宅快乐水出来那刻爽