news 2026/6/25 3:23:01

自动售货机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/6/25 4:18:35

图书管理系统 (C语言 + 数据库功能)

这是一个完整的图书管理系统&#xff0c;使用C语言编写并包含文件数据库功能。项目已适配VS2019环境&#xff0c;可以直接编译运行。项目特点使用C语言标准语法&#xff0c;包含全面的语法知识点基于文件的数据库系统&#xff0c;实现数据持久化模块化设计&#xff0c;代码结构…

作者头像 李华
网站建设 2026/6/25 16:20:17

一起康康:SAP-WM无痛切WMS(下)

本人是入行SAP后勤5年的小卡拉米一枚&#xff0c;在男朋友的强烈建议下&#xff0c;把工作中遇到的案例和思考整理下来&#xff0c;通过CSDN和同行的大佬们交流学习~一、背景说明本小卡拉米所在的公司一直都是用SAP-WM&#xff0c;领导们终于下定决心明年搞WMS&#xff0c;那本…

作者头像 李华
网站建设 2026/6/23 5:57:28

19、Python文件处理与数据同步实用技巧

Python文件处理与数据同步实用技巧 1. 目录文件差异比较 在处理文件系统时,我们常常需要比较两个目录中的文件差异。可以通过将目录中的文件列表转换为集合,然后进行集合运算来实现。以下是一个示例代码: import osdirA = set(os.listdir("/tmp/dirA")) print…

作者头像 李华
网站建设 2026/6/25 17:49:47

23、跨平台系统管理与自动化脚本实践

跨平台系统管理与自动化脚本实践 1. 使用SSH密钥、NFS挂载源目录和跨平台Python管理系统 管理多样化的 nix 机器基础设施的一种有效方法是结合使用SSH密钥、共享的NFS挂载源目录和跨平台Python代码。以下是详细步骤: 1. 创建SSH公钥 *:在用于管理机器的系统上创建一个…

作者头像 李华
网站建设 2026/6/24 22:41:42

24、Python 在系统管理与云计算中的应用

Python 在系统管理与云计算中的应用 1. OS X 系统管理 在 OS X 系统中,我们可以通过 Python 进行一系列的系统管理操作。首先,可以获取系统中应用程序的进程名: processnames = sysevents.application_processes.name.get() processnames.sort(lambda x, y: cmp(x.lower…

作者头像 李华
网站建设 2026/6/25 13:03:53

PostgreSQL这么多优势,为什么还要使用MySQL

PostgreSQL&#xff08;简称 Postgres&#xff09;确实在许多方面表现出色&#xff1a;更严格的 SQL 标准遵守、更丰富的特性&#xff08;如 JSONB、GIS 支持、窗口函数、行级安全&#xff09;、更好的数据完整性和扩展性&#xff0c;以及近年来在开发者调查中&#xff08;如 S…

作者头像 李华