1. 项目概述
自动售货机作为无人零售的核心载体,其控制系统的可靠性直接决定了用户体验和运营效率。传统基于专用芯片的固化程序存在明显的局限性——我在实际项目中多次遇到客户抱怨老式售货机无法支持新型支付方式,或是出现卡货后需要人工重启的尴尬情况。而采用PLC(可编程逻辑控制器)的方案,就像给售货机装上了可随时升级的"大脑",通过梯形图编程实现灵活的逻辑控制。
这个项目我选用三菱FX1N系列PLC作为主控,主要考虑其三点优势:首先是抗干扰能力强,在商场、地铁等电磁环境复杂的场所能稳定运行;其次是扩展性好,通过模块化编程可以轻松适配不同货道配置;最重要的是维护方便,当需要增加刷脸支付等新功能时,只需修改程序而无需更换硬件。经过三个月的开发和实测,这套系统已成功应用于本地连锁超市的20台饮料售货机,故障率降低了70%。
2. 硬件系统设计
2.1 核心硬件选型
在硬件架构上,我采用分层设计思路。主控单元采用三菱FX1N-24MR PLC,其24点I/O配置(14输入/10输出)足够支持8个货道的标准机型。这里特别说明选择继电器输出型而非晶体管型的原因:虽然晶体管型响应更快,但继电器输出可直接驱动电磁阀等大电流负载,省去了中间继电器,实测中可靠性更高。
支付模块选用兼容性最强的双模设计:支持二维码扫码(通过UART接口连接扫码枪)和IC卡支付(通过RFID读卡器)。特别提醒的是,扫码枪一定要选择工业级产品,普通商用扫码枪在低温环境下容易出现识别失败的问题——这是我在东北地区项目实施中得到的教训。
货道驱动部分根据商品类型差异配置不同执行机构:饮料货道使用24V直流电机配合蜗轮蜗杆机构,通过PLC的Y0-Y3输出脉冲控制转动角度;零食货道则采用电磁推杆方案,由Y4-Y7输出开关信号控制推杆动作。每个货道都安装了红外光电传感器(X10-X17输入)用于出货检测。
2.2 I/O地址规划
合理的I/O分配是程序稳定的基础。我的配置方案如下表所示:
| 信号类型 | 地址范围 | 对应设备 | 备注 |
|---|---|---|---|
| 输入 | X0-X3 | 支付成功信号 | 扫码枪/读卡器触发 |
| 输入 | X4-X7 | 货道选择按钮 | 矩阵键盘输入 |
| 输入 | X10-X17 | 出货检测传感器 | 常开型光电开关 |
| 输出 | Y0-Y3 | 饮料货道步进电机 | 脉冲+方向控制 |
| 输出 | Y4-Y7 | 零食货道电磁推杆 | 瞬时通电型 |
| 输出 | Y10 | 报警指示灯 | 故障时闪烁 |
特别注意:X0-X3输入必须加装光电隔离模块,避免支付设备引入的干扰导致PLC误动作。我在初期测试中就遇到过扫码枪静电导致PLC重启的问题。
3. 控制程序设计
3.1 程序架构设计
整个程序采用模块化设计,分为五个功能块:
- 主循环程序(OB1):负责调度各子程序,处理紧急停止等全局信号
- 支付处理模块(FC1):验证支付金额与商品价格的匹配性
- 货道控制模块(FC2):解析货道编码并驱动对应执行机构
- 库存管理模块(FC3):实时更新库存并触发补货预警
- 故障处理模块(FC4):监测异常状态并执行应对策略
在GX Works2中的实现关键是合理使用功能块(FB)和功能(FC)。例如将电机控制封装为FB1,通过实例化调用可以大大减少重复代码。以下是支付验证的核心梯形图逻辑:
code复制LD X0 // 扫码支付信号
AND K50 // 商品价格50元
CMP D100 // 与支付金额寄存器比较
OUT M0 // 支付成功标志
3.2 关键算法实现
货道控制算法采用"脉冲数+方向"的双信号控制。以330ml罐装饮料为例,通过实验确定需要200个脉冲(约1.5秒)才能将商品推到出货口。在程序中用以下指令实现:
code复制MOV K200 D0 // 脉冲数存入D0
PLS Y0 D0 // 从Y0输出200个脉冲
库存管理使用计数器C0-C7对应8个货道。每次出货时执行:
code复制DECP C0 // 货道1计数器减1
LD C0
OUT M100 // 库存不足标志
故障检测通过定时器和传感器信号实现双重校验。典型卡货判断逻辑:
code复制LD M0 // 支付成功
TON T0 K20 // 启动2秒定时器
LD X10 // 出货传感器
RST T0 // 正常出货则复位定时器
LD T0
OUT M10 // 卡货标志
4. 系统调试与优化
4.1 调试方法
现场调试分为三个阶段:
- 单元测试:使用强制I/O功能单独测试每个货道动作
- 联调测试:模拟完整交易流程,重点观察支付到出货的时序
- 压力测试:连续进行100次交易,统计成功率和响应时间
调试中发现几个典型问题及解决方案:
-
问题1:扫码支付后偶尔不触发出货
原因:支付信号抖动
解决:在X0输入回路增加10ms滤波电容 -
问题2:饮料出货位置不准
原因:电机脉冲数固定未考虑负载变化
解决:增加D0值的自适应调整算法 -
问题3:多货道同时选择时报错
原因:程序未做互锁处理
解决:在FC2中加入优先权编码逻辑
4.2 性能优化
通过以下措施将系统响应时间从1.2s优化到0.8s:
- 将库存检查从主循环移到支付成功后执行
- 使用MOV指令替代多个LD/OUT组合
- 优化梯形图网络结构,减少冗余触点
实测数据对比:
| 优化措施 | 平均响应时间 | 功耗变化 |
|---|---|---|
| 初始方案 | 1.2s | 100% |
| 程序结构优化 | 1.0s | 98% |
| 硬件滤波改进 | 0.9s | 95% |
| 最终方案 | 0.8s | 93% |
5. 故障处理与维护
5.1 常见故障代码
系统通过Y10指示灯闪烁频率传递故障信息:
| 闪烁模式 | 故障类型 | 处理方法 |
|---|---|---|
| 1短1长 | 卡货 | 检查货道是否有异物 |
| 2短 | 缺货 | 补充对应货道商品 |
| 连续快闪 | 支付超时 | 重启支付模块 |
| 常亮 | 系统故障 | 检查PLC运行指示灯 |
5.2 维护要点
根据半年运营数据总结的维护周期建议:
- 每周清洁光电传感器窗口,避免灰尘导致误检测
- 每月检查货道机械结构,润滑导轨和传动部件
- 每季度备份PLC程序,更新到最新稳定版本
- 每年全面检测电源系统和接地电阻
特别提醒:在修改程序前务必做好以下准备工作:
- 备份当前运行程序
- 记录所有特殊功能寄存器值
- 准备应急恢复方案
6. 项目扩展方向
当前系统还可进一步扩展:
- 远程监控:通过FX3U-ENET模块实现联网,上传销售数据
- 动态定价:根据库存情况自动调整商品价格
- 人脸支付:增加摄像头模块,需扩展PLC输入点
- 温度控制:对需冷藏商品增加温控子系统
在实际扩展时要注意PLC的I/O余量和程序容量。FX1N最大可扩展到128点,但程序步数限制在8000步以内。对于复杂应用建议升级到FX3U系列。
