news 2026/5/1 8:29:40

自动售货机MCGS7.7和西门子S7-1200PLC联机程序博途V14,带注释和IO分配表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动售货机MCGS7.7和西门子S7-1200PLC联机程序博途V14,带注释和IO分配表

自动售货机MCGS7.7和西门子S7-1200PLC联机程序博途V14,带注释和IO分配表

最近在折腾自动售货机的控制系统,用MCGS7.7触摸屏和西门子S7-1200PLC搭了个联机系统。这俩设备的通讯就跟谈恋爱似的,得互相听懂对方的语言才能干活。今天咱们就聊聊这个联机程序怎么配,重点说说程序里那些硬核代码和IO分配。

先说硬件配置,这台自动售货机主要控制货道电机、退币机构、纸币器和硬币器。PLC这边用CPU1214C DC/DC/DC,数字量输入输出各占10个点。IO分配表大概长这样:

DI点:

I0.0 投币信号

I0.1 退币按钮

I1.0 货道1到位

I1.1 货道2到位

DO点:

Q0.0 出货电机

Q0.1 退币电机

Q0.2 找零指示灯

Q1.0 故障报警

TIA Portal V14里新建个工程,先给PLC配个Modbus TCP通讯。这步关键得很,就像给设备办身份证:

MB_SERVER_DB := "Modbus_TCP_Server_DB"; MB_SERVER( REQ := TRUE, MB_ADDR := 1, MB_HOLD_REG := P#DB1.DBX0.0 WORD 10, CONNECT := "TCPServer_1");

这段代码把PLC变成Modbus服务器,MCGS屏作为客户端来读数据。DB1这块数据区专门用来存售货状态,比如当前余额、库存数量这些。

投币检测程序最有意思,得防着熊孩子乱拍按钮。用了个带延时滤波的检测逻辑:

IF "投币传感器" AND NOT "投币锁定" THEN "投币计数器" := "投币计数器" + 1; TON("投币延时", T#200MS); IF "投币延时".Q THEN "当前余额" := "当前余额" + 1; RESET_TIMER("投币延时"); END_IF; END_IF;

这个TON定时器专门对付接触不良产生的抖动信号,200毫秒内重复触发只算一次有效投币。

出货控制部分用了个状态机,比直接写逻辑清晰多了。比如选货电机控制:

CASE "出货状态" OF 0: // 待机 IF "选择货道" <> 0 THEN "出货状态" := 1; "目标货道" := "选择货道"; END_IF; 1: // 启动电机 "出货电机" := TRUE; TON("出货计时", T#3S); IF "货道到位信号" THEN "出货状态" := 2; ELSIF "出货计时".Q THEN "故障标志" := TRUE; END_IF; 2: // 完成出货 "出货计数器" := "出货计数器" + 1; RESET_ALL; END_CASE;

这个状态机把复杂的时序控制拆分成几个明确阶段,比一堆互锁触点靠谱多了。特别是那个3秒超时检测,能有效防止电机堵转。

MCGS那边配置Modbus TCP客户端时,记得把数据地址对齐。比如余额显示对应DB1.DBW0,用个数值显示元件绑定40001地址。要是通讯不上,八成是IP没设对或者防火墙拦了502端口。

调试时遇到的坑也不少。有次退币电机死活不动,查了半天发现是Q0.1输出点烧了。后来学乖了,在程序里加了个输出点自检功能:

// 上电自检 IF FirstScan THEN FOR i := 0 TO 9 DO "输出测试"[i] := TRUE; WAIT TIME T#500MS; END_FOR; "输出测试" := FALSE; END_IF;

这段代码在PLC启动时让所有输出点轮流闪一遍,维修时拿个万用表挨个测电压就行,省得拆线检查。

整个系统调通后实测发现,Modbus通讯周期控制在100ms左右最合适。太快了MCGS容易卡界面,太慢了用户会觉得操作延迟。最后在OB35中断组织块里做的通讯处理,保证实时性。

这项目做下来最大的感悟就是:好的联机程序得像双人舞,PLC负责精准执行,HMI专注人机交互。两者既要独立工作,又要默契配合。下次打算加上支付宝支付功能,到时候再跟大伙分享怎么在工控设备里接物联网模块。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:32:42

中望CAD2026如何将图形移动到坐标原点

在中望CAD 2026中&#xff0c;将图形移动到坐标原点&#xff08;0,0,0&#xff09;主要有以下几种常用方法&#xff1a; 使用“移动”命令&#xff08;最常用&#xff09; 1.全选图形 按 Ctrl A 选择所有图形对象&#xff0c;或手动框选需要移动的图形。执行移动命令 输入 M&a…

作者头像 李华
网站建设 2026/5/1 7:32:10

Zig 语言实战:实现高性能快速排序算法

在上一篇博客中&#xff0c;我们深入探讨了如何在 Rust 中利用 Ord Trait 和 checked_sub 来实现一个安全的快速排序。今天&#xff0c;我们将视角转向 Zig 语言。 Zig 被设计为 C 语言的现代替代品&#xff0c;它没有隐藏的控制流&#xff0c;内存管理完全由开发者掌控。在实现…

作者头像 李华
网站建设 2026/5/1 7:29:20

用你的生日,取一个微信昵称

出生月份✨&#xff1a; 1.干饭的 2.摸鱼的 3.追剧的 4.炫奶茶的 5.爱睡的 6.摆烂的 7.发疯的 8.撸猫的 9.社恐的 10.暴富的 11.吃瓜的 12.划水的 出生日期&#x1f973;&#xff1a; 1.小土豆 2.糯叽叽 3.胖嘟嘟 4.碎碎冰 5.懒羊羊 6.皮卡丘 7.小趴菜 8.毛肚卷 9.酸辣粉 10.Q…

作者头像 李华
网站建设 2026/4/30 21:06:36

453453

5445345

作者头像 李华
网站建设 2026/4/29 13:20:22

初级菜鸟快速学习无人机电调教程:第4节

第四阶段&#xff1a;安装、焊接与基础设置&#xff08;第18-21天&#xff09;核心目标&#xff1a;将理论转化为实践&#xff0c;安全、规范地完成电调与电机、飞控、电池的物理连接与焊接&#xff0c;并完成上电前的基础设置&#xff0c;为首次通电测试做好准备。学习小节苏格…

作者头像 李华
网站建设 2026/4/18 13:10:10

【健康管理】第13章 医学伦理与职业道德

健康管理 相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 慢性病相关文章&#xff1a; 1.【健康管理】第4章 常见慢性病 1/2 2.【健康管理】第4章 常见慢性病 4.5 冠心病 3.【健康管理】第4章 常见慢性病 4.6 脑卒中 4.【健康管理】…

作者头像 李华