尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

S7-1200 PLC与MCGS触摸屏的自动售货机控制系统设计与联调实战

S7-1200 PLC与MCGS触摸屏的自动售货机控制系统设计与联调实战 我刚做完一个自动售货机的联机项目主控用的西门子S7-1200 PLC上位显示用的昆仑通态MCGS7.7触摸屏从硬件选型、程序框架到现场联调整个过程走下来踩了不少坑也攒了不少心得。这篇文章就把这套方案的完整实现过程拆开讲清楚包括控制逻辑怎么设计、MCGS怎么和S7-1200建立通讯、联机调试中最容易卡住你的那几步以及一些厂家文档里不会写的经验细节。先说一下项目背景。这个项目不是那种大型商用售货机集群而是针对小型场景的独立机柜比如公司茶水间、校园宿舍楼、小型便利店。机器本体包含货道弹簧螺旋式、制冷系统卖饮料需要、支付模块现金、扫码两种、以及核心的PLC控制系统。用户的需求很明确机器能自动出货、能实时显示库存和状态、能记录交易信息、操作员可以通过触摸屏维护数据。1. 从自动售货机到工业级控制系统方案与硬件选型很多人以为自动售货机是消费电子产品内部应该用单片机或者专用的售货机控制板但实际项目中用PLC的方案非常普遍。尤其是当你要同时处理支付模块对接、多路电机控制、温度监测、故障报警、远程数据上报这些需求的时候PLC稳定性和开发效率的优势就体现出来了。1.1 为什么选S7-1200而不是200 SMART或单片机先说说控制器选型。S7-1200在这个项目里属于“杀鸡用牛刀”但很值得的选择。它的优势主要体现在三个方面一是通讯能力强。S7-1200自带以太网口Profinet协议是原生支持和MCGS触摸屏走以太网通讯非常方便。不需要额外的通讯模块一根网线就把问题解决了。S7-200 SMART虽然也带网口但它的以太网协议是S7协议的精简版与MCGS通讯时会有一些兼容性问题不如S7-1200顺畅。二是程序容量和数据类型丰富。自动售货机的控制逻辑说复杂不算复杂但涉及的数据量不小几十个货道的位置状态、每一种商品的库存计数、支付状态机、故障码记录、交易流水。S7-1200的DB块管理、数组操作、结构体定义这些功能在处理这类“数据密集型”控制任务时非常顺手特别是用SCL语言写状态机比梯形图高效太多。三是扩展性有保障。后期如果要加远程模块比如通过IoT网关上报数据到云端、加扫码支付模块走Modbus RTU或者TCP、加更多的货道S7-1200都能撑得住。选型的时候我给客户推荐的是CPU 1214C DC/DC/DC14路数字量输入、10路数字量输出搭配一个SM1223数字量扩展模块8入8出再加上后续改造成本低完全够用。如果你手头有S7-200 SMART也不是不能用但你需要额外注意通讯握手的方式、数据块的寻址格式差异MCGS在驱动配置上要选择S7-200TCP而不是S7-1200这两者不能混用因为S7-1200用的底层协议是基于Profinet的数据访问方式尤其是DB块的访问存在较大差异。1.2 MCGS7.7触摸屏的选型细节MCGS7.7对应的硬件产品是昆仑通态的TPC系列我用的是一块10.2寸的TPC1062Ti分辨率1024x600运行MCGS嵌入版组态环境7.7。选这款的原因支持以太网通讯内置S7-1200驱动开箱即用价格适中在国产触摸屏里属于皮实耐用的7.7版本对现代Windows系统Win10/Win11的兼容性比旧版好很多支持配方管理、数据转发、用户权限管理后期扩展方便。这里特别说一下MCGS版本的问题。MCGS分为嵌入版运行在TPC硬件上和网络版组态软件有6.2、7.7等版本组态环境最好使用与硬件匹配的版本比如你手里是TPC1062Ti出厂预装的就是MCGS嵌入版7.7组态软件也用7.7版本。驱动库必须包含“S7-1200”的驱动条目因为不同版本的驱动文件有差异我曾经用6.2版本的驱动去连接S7-1200折腾了半天通讯不上换上7.7自带的驱动后瞬间就通了。1.3 通讯拓扑与电气接线方案整套系统的通讯结构非常清晰核心就是一个局域网内的以太网通讯MCGS触摸屏 (IP: 192.168.0.2) | 以太网交换机 | 西门子S7-1200 PLC (IP: 192.168.0.1) | Profinet协议S7通讯实际上如果只有两台设备连交换机都可以省掉直接用网线把触摸屏和PLC对接即可。S7-1200的以太网口支持直连MDI/MDIX自适应不需要交叉线。但考虑到现场可能还需要连接编程电脑进行调试建议加一个五口工业交换机方便维护。接线方面需要重点强调的是输出回路的隔离与保护。PLC的数字量输出不能直接驱动货道电机。货道电机是直流24V单台电流在0.5A到1.5A之间视弹簧和商品重量但启动瞬间的冲击电流可能是正常运行电流的1.5到2倍。S7-1200的输出点理论负载能力是0.5A阻性负载直接驱动有风险所以我的方案是PLC输出不直接驱动电机而是控制中间继电器再由继电器触点去驱动电机或电机驱动板。我的输出回路设计是S7-1200数字量输出(Q0.0~Q0.7或扩展模块的输出) - 中间继电器线圈24V DC带续流二极管 - 继电器触点常开 - 货道电机M 货道电机M-电气安全部分所有外部供电触摸屏电源、PLC电源用同一个开关电源供电PLC电源和电机电源分开共用一个直流母线也可以但要求电源功率足够。我算过总功率触摸屏约15WPLC约20W24V电机同时最多开3个每个按1A算加起来不到80W用130W的明纬开关电源稳够。2. S7-1200侧的控制逻辑拆分售货流程不是你想的那么简单自动售货机表面上看逻辑很简单——“收钱出货”但真正落地的时候你会发现状态管理、异常处理、防作弊机制才是大头。这一节把PLC程序的核心逻辑完整拆解一遍。2.1 系统状态机的整体设计我们抛开笼统的“售货流程”不谈把售货机抽象成明确的状态机STATE_IDLE空闲等待用户操作货道锁定电机不动作STATE_SELECT选择用户浏览商品、按下选货按钮系统记录所选货道编号STATE_PAYING支付中用户投币或扫码系统累计已支付金额与商品价格比较STATE_DISPENSING出货中支付满足条件系统启动对应货道电机开始出货STATE_COMPLETE完成出货确认完成或超时失败找零/结束STATE_FAULT异常检测到故障卡货、门被打开、电机过流等系统锁定并报警需人工处理。这个状态机是整个PLC程序的核心骨架我在OB1循环组织块里用SCL语言编写这段逻辑梯形图虽然也能实现但状态多了以后梯形图的可读性会很差SCL写起来逻辑清晰特别是分支多的场景比梯形图适合得多。状态机切换的关键代码逻辑SCL伪代码关键部分展示CASE state OF // 空闲状态接收选货信号 STATE_IDLE: IF 选货按钮被按下 THEN selected_channel : 按下的货道编号; state : STATE_SELECT; END_IF; // 选择状态等待支付完成 STATE_SELECT: IF 支付金额累计 商品价格 THEN state : STATE_DISPENSING; dispensing_timer(10s); // 启动出货超时时间 END_IF; // 出货状态控制电机运转 STATE_DISPENSING: IF 电机运行时间 设定时间 THEN // 停止电机 motor_output[selected_channel] : FALSE; 库存计数(selected_channel) : 库存计数(selected_channel) - 1; state : STATE_COMPLETE; END_IF; IF 超时 AND 无货道反馈 THEN state : STATE_FAULT; END_IF;注意SCL代码是严格区分大小写的变量定义时也要注意数据类型。S7-1200的编程软件是TIA Portal博途版本建议V15以上对1200系列支持更完整。如果没有博途也可以用SIMATIC STEP 7 Basic但功能有限强烈建议直接用TIA Portal。2.2 货道电机驱动的时序逻辑货道电机是自动售货机最核心的执行机构。电机驱动逻辑设计是否合理直接决定了售货机的出货成功率。每个货道是一个直流电机带动螺旋弹簧旋转弹簧把商品往前推商品掉落到取货口。出货过程的关键是控制电机转动的时机和时长。转太短商品推不出来转太长可能卡货或连续出两瓶。我的设计是“固定时间电流反馈补偿”的思路但考虑到S7-1200的模拟量模块成本我最终采用了固定时间加光耦反馈的方案电机轴上安装一个霍尔传感器或光电开关检测转动圈数PLC根据圈数判断出货是否完成。具体的电机控制逻辑如下// 启动出货 motor_output[ch] : TRUE; 转圈计数[ch] : 0; 出货超时计时器[ch] : 0; // 每10ms扫描检测传感器信号 IF 转圈传感器[ch] 上升沿 THEN 转圈计数[ch] : 转圈计数[ch] 1; END_IF; // 出货完成的判断条件转圈达到设定值 IF 转圈计数[ch] 设定圈数 THEN motor_output[ch] : FALSE; 出货状态[ch] : 成功; END_IF; // 超时保护10秒内没转够设定圈数判定故障 IF 出货超时计时器[ch] 10s THEN motor_output[ch] : FALSE; 出货状态[ch] : 卡货故障; END_IF;如果不加传感器反馈纯靠固定时间驱动也可以但要注意不同货物的重量导致弹簧负载不同相同时间内电机转过的圈数可能差异很大。所以有条件的话强烈建议加转圈反馈。成本十几元但大幅提高可靠性和调试效率。电机驱动时的延时问题也要注意。TIA Portal中定时功能可以用TON接通延时定时器实现但如果你在状态机里用“计时器累加”的方式每次扫描加1需要注意OB1扫描周期的稳定性。如果程序扫到一半有中断定时会有误差。我的习惯是用S7-1200自带的IEC定时器比如TON/IEC_TIME精度远高于自己写累加。2.3 库存管理与缺货检测自动售货机运营方最关心的数据一个是营收另一个就是库存。库存管理我采用“计数减法人工补货校准”的方式。每次成功出货对应的商品库存DB块变量减1。MCGS触摸屏上可以实时显示每种商品的剩余数量当库存低于设定阈值比如剩2瓶界面给出补货提醒。补货流程也设计了操作员在触摸屏上进入维护界面输入密码选择要补货的货道把实际补充数量填进去PLC在确认后把库存值累加。这个操作需要建立一个补货工单记录包括补货时间、操作员、货道编号、补充数量方便运营盘点。缺货检测除了靠库存计数硬件上也可以在货道末端安装反射式光电传感器检测商品是否到位。如果计数为0但传感器仍检测到有货说明计数有误界面会提示库存异常。这种“软件计数硬件校验”的双保险能有效避免因出货失败导致的库存数据失真。2.4 支付模块对接收银逻辑的几种实现路径支付模块是很多初学者最头疼的环节因为各个支付厂家的协议五花八门。我在项目里做了两种支付方式硬币器和扫码支付模块微信/支付宝。这里拆开讲。硬币器对接常见的硬币器有防伪功能识别硬币面额通过脉冲信号输出给PLC。每个硬币一个脉冲不同硬币的脉冲宽度或计数不同。PLC需要用高速计数器或中断输入来采集脉冲。S7-1200的CPU自带6个高速计数器可以用来采集脉冲信号但需要注意硬币器的脉冲输出一般是集电极开路输出需要接上拉电阻否则脉冲信号可能采集不到。我在项目里是因为硬币器只用了三种币1元、5角、1角所以直接用普通数字量输入加中断的方式采集通过脉冲宽度来区分币值识别精度满足要求。扫码支付对接扫码支付通常有两种对接方式一种是脱机二维码动态二维码屏一种是联机协议对接。脱机模式最简单MCGS触摸屏上直接显示收款二维码用户扫码付款后支付平台回调MCGS内置的支付SDK部分型号支持或者人为确认比如吧台人员看到支付成功通知在触摸屏上点“已付款”。这种方式适用于有人值守的场景不需要额外对接。联机模式扫码支付模块比如常见的“云喇叭”方案或专门的售货机支付板通过串口或网口与PLC通讯支付平台异步回调支付板把“支付成功”指令发给PLCPLC开始出货。我在这套方案里使用的扫码支付模块支持标准串口协议RS485和S7-1200通过485转以太网模块连接或者如果S7-1200加了CM1241 RS485通讯模块就直接对接。对于扫码支付建议优先用MCGS的二次开发能力做对接。MCGS支持使用脚本调用外部动态库DLL或者通过标准Modbus协议与支付模块通讯这比在PLC上处理支付报文要灵活得多。我个人的实现是把扫码支付模块接到了MCGS的串口上MCGS解析支付成功报文后通过内部变量通知PLC开锁出货MCGS在这里充当了支付网关的角色PLC只需要处理标准的状态信号。这里要重点提醒支付确认信号必须有防重发机制。很多支付板在通讯异常时会把支付成功的报文重复发送如果PLC不做去重就会出现一次付款出两瓶货的情况。MCGS侧要记录上一次支付流水号重复报文直接忽略PLC侧也要有状态锁定逻辑同一支付事务处理期间不再接受新的支付成功信号。3. MCGS7.7触摸屏开发画面组态与变量对接的关键操作MCGS7.7组态软件开发触摸屏界面很多新手一上来就画图结果是图好看但变量连接一团糟上了现场死活通讯不上。这一节按正确的开发顺序来讲。3.1 在MCGS中建立S7-1200通讯驱动MCGS的以太网通讯设置是比较简单的但有几个细节容易踩坑。打开MCGS嵌入版组态软件7.7新建工程在左侧“设备窗口”中双击进入设备组态。右键“设备工具箱”添加“通用TCP/IP父设备”然后在父设备下添加“西门子S7-1200”驱动。双击TCP/IP父设备设置如下本地IP地址触摸屏的IP比如192.168.0.2远程IP地址S7-1200的IP比如192.168.0.1远程端口号默认是102对应S7协议。这里最容易犯的错误是远程端口号写成了502Modbus TCP的端口S7-1200是Profinet协议底层走的是102端口必须写102。还有子网掩码要一致触摸屏和PLC必须处于同一网段否则通讯超时。双击“西门子S7-1200”驱动进入设备属性配置界面。这里需要特别注意的是PLC类型选择——在MCGS 7.7中S7-1200的驱动有一个“PLC类型”参数必须是S7-1200而不是S7-300/400如果选错类型通讯大概率失败或数据读取出错。另外连接方式选择“以太网”CPU槽号一般填0机架号填0这是S7-1200默认的组态参数。测试通讯时MCGS提供了一个“设备调试”功能在设备窗口的“设备调试”页面可以勾选“通讯测试”显示与PLC的通讯状态。如果显示“通讯正常”说明基础链路已建立。如果通讯失败检查顺序是触摸屏和PLC的网线是否物理连通看网口指示灯触摸屏能不能Ping通PLCMCGS7.7支持在工程中设置PING测试吗不确定建议用电脑测试IP地址、端口号、PLC类型、CPU槽号是否正确TIA Portal项目中是否有其他程序在占用PLC的通讯资源连接数占满会导致新连接被拒。3.2 画面设计与变量连接技巧MCGS的画面组态是一个可视化操作过程。我的工程设计了以下几个主要用户窗口主界面显示售货机运行状态、系统时间、环境温度、上架商品的基本信息选货界面商品列表点击商品可以查看价格、库存点击“购买”进入支付流程维护界面操作员登录密码、库存管理、出货测试、故障记录查询、历史交易查询数据统计界面当日销售额、各商品销量排行、库存预警列表。每个窗口的设计原则是简洁、突出操作提示字体要大因为现场人员戴手套按钮太小按不准。变量连接的步骤如下在“实时数据库”中定义变量类型并在“设备窗口”的设备驱动中建立变量与PLC的映射关系。设备窗口的驱动配置页里有一个“变量表”需要把PLC的地址和MCGS的变量建立对应关系。比如PLC里DB1.DBW0是“系统状态字”那MCGS变量“sys_status”对应的地址就是“DB1.DBW0”数据类型是“字INT”。在用户窗口的画面组态中选中控件如指示灯、数值显示框、按钮把它的“动画连接”属性设置成对应的MCGS变量。这里有一个非常关键的技巧MCGS中变量类型、地址类型、数据长度必须与PLC完全一致。举例来说如果PLC里用了一个BOOL量比如“出货完成标志”存在DB1.DBX0.0那MCGS里对应的变量必须是“位”类型地址也是“DB1.DBX0.0”不能写成字节或字。如果类型不匹配通讯不会报错但数据会错乱界面显示完全不对。我踩过的坑是PLC用SCL写了一个INT型的计数变量存在DB块里MCGS读取时习惯性地配置成了16位无符号整数导致负数和大于32767的值显示异常。后来逐一核对变量类型后才修正。建议项目初期就做一张变量映射表PLC侧每个变量名称、数据类型、偏移地址MCGS侧对应的变量类型、地址一一对应能省掉后期排查的大把时间。3.3 MCGS脚本与策略让触摸屏分担部分控制功能MCGS7.7支持循环策略、事件策略等脚本机制这意味着你可以把一部分控制逻辑下放到触摸屏或者做一些MCGS内部的数据预处理。最典型的应用是交易记录管理。PLC侧只管出货状态MCGS侧记录每一次交易的详细信息时间、商品名称、价格、支付方式、是否成功。MCGS的脚本里可以定义数组或通过数据库存储。7.7版本支持SQLite数据库可以把交易记录插到本地数据库后期运营直接读取。举个例子在MCGS的“循环策略”中新建一个策略周期1000ms执行一次脚本内容大致是IF 状态变量.STATE 5 AND 出货完成标志 TRUE THEN // 执行记录写入 交易流水号 交易流水号 1 交易时间 TimeToStr(TimeCurrent()) 商品名称 DataRead(选中的货道Index) SQLInsert(...) // 插入数据库 出货完成标志 FALSE ENDIF这种处理方式把PLC从繁琐的数据记录中解放出来PLC只保证控制可靠性和实时响应MCGS处理显示、记录、人机交互各司其职。3.4 MCGS与汇川驱动的联动说明顺便提一下热搜里提到的“mcgs7.7汇川驱动”。如果你用的是汇川变频器或伺服驱动器需要通过MCGS的驱动配置来通讯。MCGS 7.7的设备工具箱里提供了“汇川变频器”的驱动支持比如MD系列、MD500走Modbus RTU协议RS485或Modbus TCP协议以太网。我一开始在项目里考虑过用汇川变频器控制制冷压缩机的转速节能运行后来因为成本原因改成了定频方案。但你如果要用方法也不复杂PLC通过Modbus通讯给变频器写频率指令MCGS通过RS485需要MCGS侧加串口父设备或自带串口的型号与变频器通讯读取运行频率、电流等信息。但要注意MCGS和PLC同时读写变频器时总线要防止冲突最好采用主从轮询的方式MCGS或PLC一方作为Modbus主站另一方不要直接参与通讯而是通过PLC中转数据。在这个自动售货机项目里如果后期把制冷系统变频化最稳妥的架构是PLC作为Modbus主站与变频器通讯MCGS通过S7通讯与PLC交换数据MCGS不直接与变频器通讯。这样既简化了通讯拓扑也避免了多主站冲突。4. 联机调试最容易被卡住的三个环节通讯验证、机型编码、故障边界这个项目最花时间的不是写程序而是联机调试。这里把现场调试阶段最磨人的三个问题拿出来单独讲每个都是我实际碰到并解决的。4.1 通讯不上先别急着怀疑触摸屏MCGS和S7-1200通讯失败排查步骤有个顺序问题。第一步确认物理链路的连通性。用电脑接到同一交换机上在电脑命令行里Ping PLC的IP比如192.168.0.1看是否能通。不通则查网线、IP配置通则进入下一步。第二步用TIA Portal的“在线”功能确认PLC侧没有占用异常资源。S7-1200有连接资源限制具体数量取决于CPU型号一般允许几个主动连接如果TIA Portal一直在线监控PLC占用了连接MCGS再连就可能被拒绝。调试时确保TIA Portal没有打开“在线和诊断”界面占用资源或者把PLC的“允许从远程对象进行PUT/GET通讯访问”选项勾上这个选项在TIA Portal的设备组态中CPU属性-防护与安全-连接机制中默认可能未勾选记得勾上。第三步检查MCGS设备窗口配置。驱动添加对了没有端口号是102PLC类型选对没有这些细节前面已经详细说过。一个常见现象是MCGS设备窗口显示“通讯正常”但数据全是0这种问题多半不是通讯断了而是变量地址映射错位或数据类型不匹配要回到3.2节检查变量表。4.2 弹簧货道不通用的“机型编码”问题这个是自动售货机专属的坑。不同厂商的货道电机、不同规格的弹簧电机工作时间和转动圈数都不是固定的。你需要给每一种“机型参数组合”定义一套专属参数这里我们叫它“机型编码”。在PLC程序里我设置了几个关键参数电机启动时间电机从静止到稳定运行所需的延时一般100~300ms电机运行时间出货主时间段依据弹簧长度和商品尺寸设置一般2~5秒电机停止后的保持时间防倒转时间转圈设定值霍尔传感器的目标脉冲数。这些参数不是写死的而是放在PLC的DB块里MCGS维护界面可以修改。当现场更换了不同型号的弹簧或电机维护人员可以直接在触摸屏上修正参数不需要重新下载PLC程序。我在实际项目中发现不同机型的出货时序差异很大。比如卖易拉罐的货道弹簧转3圈基本就能出货卖瓶装水的货道需要4到5圈而卖膨化食品大包装、轻但体积大的货道转圈数相同但容易出现空转不打货的情况。这些经验数据靠实际测试积累没有统一公式可套用。所以调试阶段一定要逐货道测试记录每台电机的实际运行参数填入机型参数表中。机型参数表在PLC中可以用二维数组表示货道编号为行参数类型为列TYPE ChannelParam: STRUCT motor_run_time: TIME; // 电机运行时间 target_pulse: INT; // 转圈设定值 startup_delay: TIME; // 启动延时 stall_time: TIME; // 堵转判断时间 END_STRUCT END_TYPE VAR channel_params: ARRAY[1..30] OF ChannelParam; END_VAR4.3 故障边界与安全逻辑不要等出了事故再补救自动售货机的故障边界设计比正常流程逻辑更重要。我总结为以下几个层次第一层硬件保护。每路货道电机的供电回路中串联自恢复保险丝防止电机堵转过流烧毁。PLC程序里也做了过流检测如果是用继电器板带电流检测的话一旦检测到过流立即切断输出并报警。第二层逻辑保护。门开关信号是重中之重。自动售货机的取货口和后门都有行程开关任何一扇门被打开PLC必须立即停止所有电机动作并进入维护/故障状态。这个是有安全考虑的用户伸手取货时如果电机还在转可能夹到手。这个联锁逻辑用梯形图写非常简单但必须放在状态机判断的最前面——相当于一个“抢占式”安全条件。第三层数据校验。库存不为0实际出货失败或库存为0但仍然出成功都是异常。这些数据不一致的情况要记录到故障日志方便运营人员定位。调试时我专门写了故障模拟测试用例拿掉出货口的商品模拟出货失败用手挡住转圈传感器模拟堵转在出货过程中拉开后门模拟非法开门把库存改成1连续购买两次模拟超卖情况。每条用例都在现场真实跑过确保故障边界有效后才交付。4.4 关于TIA Portal和触摸屏联合仿真的问题很多新手问能不能不接实物在电脑上把PLC程序和触摸屏程序联合仿真跑通理论上TIA Portal的PLCSIM虚拟PLC可以配合MCGS的仿真环境但实际做项目时我不推荐在这个阶段花太多时间。原因为PLCSIM和MCGS之间的以太网通讯需要在虚拟网络中做桥接配置复杂且不稳定售货机最核心的传感器反馈、电机动作无法仿真运行流程很难完整验证现场调试的时间成本远低于在家里折腾仿真的时间成本。但PLCSIM也不是完全没用。对于纯逻辑验证比如状态机跳转逻辑是否合理、计数器累加是否正确我通常先在PLCSIM里搭个临时的虚拟输入信号把程序跑一遍逻辑通了再去现场能省下一些现场改程序的时间。这个步骤建议有基础的工程师做新手如果仿真环境都起不来就不用纠结直接上实物调。5. 从毕设到落地成本控制、权限安全与扩展方向项目做完总结最后再说几个和钱、和运维、和未来相关的事情。这些是你在课本上、在论文里看不到的实际项目经验。5.1 成本清单与选型替代方案一台基础的自动售货机整套电控系统成本大致如下参考市场价不含机柜机械部分组件型号/规格参考价格PLC主机S7-1200 CPU 1214C DC/DC/DC1600~2200元数字量扩展模块SM1223 8入8出900~1300元触摸屏TPC1062Ti (10.2寸MCGS 7.7)1500~2000元开关电源24V/130W明纬150~250元中间继电器14个和电机路数相关100~200元货道电机及驱动板按货道数量500~1500元扫码支付模块485通讯云语音播报300~600元硬币器内置防伪500~1000元如果是个人做毕设或教学演示预算有限可以用S7-1200精简版CPU 1211C虽然I/O少但功能一样触摸屏用7寸的TPC7032KwMCGS 7.7支持电机数量控制在4个以内整套系统可以压缩到5000元以内。再极限一点PLC换成S7-200 SMART触摸屏用MCGS的威纶通不一定成本能控制在3000元但如前所述通讯稳定性和后期扩展性会打折。5.2 权限分级与操作安全MCGS7.7的用户权限管理功能在自动售货机场景下很有用。我设置了三个用户级别普通用户顾客只能浏览商品信息和界面操作员补货人员可以进入库存管理、补货、查看交易记录管理员设备维护工程师可以修改机型参数、系统参数查看故障明细。触摸屏的每个可操作按钮都可以关联用户权限没有权限的按钮会自动置灰。密码存储和传输有基本的加密处理但说实话MCGS7.7的密码机制强度有限真正高安全要求要依赖外部认证或加密狗对于自动售货机这种场景已经够用。权限这块特别提醒不要把管理员密码设成默认的“admin”或“123456”现场调试完后一定要修改初始密码。我见过不止一次客户电话来求救说机器被不知道谁锁了最后发现是测试账户密码被改还忘了。建立一个密码管理记录表并设置定期更换机制。5.3 数据上云与远程运维的思路做完基础功能后我还给客户做了数据上云的扩展设计这里也分享下思路。S7-1200本身支持MQTT通讯部分固件版本支持或者通过边缘网关如IoT2040、各种工业物联网网关把PLC的DB块数据转发到云端。云端可以是阿里云IoT平台、ThingsBoard等。自动售货机上云后能做什么实时监控所有售货机的位置、库存、运行状态远程下发补货提醒和价格调整收集交易数据做销售分析远程诊断故障减少上门维护成本。在成本敏感的场景里一个更省钱的方案是MCGS触摸屏本身有数据转发功能支持HTTP POST上报到自建服务器安卓主控或标准组态就不需要额外加网关。MCGS的脚本里可以调用网络指令把交易数据封装成JSON通过4G路由器发到服务器。这个方案虽然比用专业IoT平台简陋一些但是胜在便宜、开发快适合10台以内的售货机小规模运营。我用MCGS的“数据转存”和“脚本网络接口”配合4G路由做过验证能稳定上报数据。如果只做远程库存查看和销售日报用这个方案完全足够。如果要做实时视频监控、人脸支付这些重量级应用那就得换安卓方案的主控了和本次分享的PLCMCGS方案不在一个路线上。5.4 复盘这套方案最大的三个教训最后以我这次项目的复盘做收尾吧。第一个教训是调试前必须做完整的变量映射表。这是最花时间但又最必须做的事情。我一开始图省事没做表直接凭记忆在MCGS里建变量结果光排查数据错乱就花了一天还不如刚开始花两小时规规矩矩把表做出来。第二个教训是电机参数的校准必须现场实测不能光靠估算。弹簧长短、商品重量、电机老化程度都会影响出货效果。我最初在实验室测试时用的模拟负载到了现场用真商品测试时有一半的货道需要调整参数。后来我把参数校准流程固化成了标准操作步骤交给客户客户自己操作也没问题。第三个教训是安全逻辑再强调都不为过。门联锁、过流保护、防重复支付这几个点任何一个没做好出问题都是大问题。宁可多花一天时间写测试用例也绝对不省安全逻辑的几行代码。自动售货机这个项目非常适合做PLC和组态学习的综合练手项目麻雀虽小但五脏俱全——通讯、状态机、执行机构、安全逻辑、人机界面、数据管理一个工业控制系统该有的要素全都有。如果看到这篇文章的你正在做类似的毕设或者小项目别嫌过程琐碎每一个环节都值得认真对待。做完一套你对工业控制的理解会上一个明显的台阶。那种感觉比看十本书都实在。
返回列表