1. 项目概述
投币式洗衣机控制系统是典型的工业自动化应用场景,它融合了PLC控制、传感器检测和人机交互三大核心技术。作为一名在工业自动化领域摸爬滚打多年的工程师,我最近用西门子S7-200 PLC和组态王软件完成了一个完整的投币洗衣机控制项目。这个系统最让我自豪的地方在于,它不仅实现了基本的洗衣流程自动化,还通过投币机制和可视化界面提升了设备的商业价值和用户体验。
在实际开发过程中,我发现很多技术文档都只关注功能实现,而忽略了工程实践中那些"踩坑"经验。这篇文章我会从硬件选型、程序设计到界面开发的完整流程,分享那些你在官方手册里找不到的实战技巧。比如如何防止投币信号的误触发、水位传感器的安装位置对控制精度的影响,以及组态画面设计中的用户体验优化点。
2. 系统架构设计
2.1 整体控制方案
这个系统的核心思想是通过PLC作为控制大脑,接收各类传感器信号,经过逻辑处理后驱动执行机构动作。我选择西门子S7-200系列PLC主要基于三点考虑:首先,它的I/O点数完全能满足洗衣机控制需求;其次,STEP 7-Micro/WIN编程环境成熟稳定;最后,这款PLC与组态王的通信兼容性经过市场长期验证。
系统工作流程是这样的:用户投入硬币→PLC检测到投币信号→按下启动按钮→进水阀打开→水位达到设定值→电机开始正反转洗涤→排水→脱水→完成。整个过程都在组态画面上实时显示,让用户对洗衣机状态一目了然。
2.2 硬件选型与配置
硬件配置上我走了些弯路,这里分享我的经验:
-
PLC模块:CPU 224XP AC/DC/RLY,14输入/10输出,自带2个模拟量输入和1个模拟量输出。选择继电器输出型是因为洗衣机负载都是交流接触器,继电器输出可以直接驱动。
-
投币器:选用台湾扬格YG-800系列光电式投币器,支持1元硬币识别。特别注意要选不锈钢外壳的型号,因为洗衣房环境潮湿。
-
水位传感器:最初试过压力式传感器,发现响应慢且易受干扰。后来改用浮球式机械开关,虽然精度一般但可靠性高。安装位置要避开进水口和排水口的湍流区域。
-
电机控制:使用正反转接触器控制电机,PLC输出先驱动中间继电器,再由中间继电器控制接触器线圈。这种二级控制方式更安全可靠。
提示:所有现场设备与PLC之间的连线都要加装浪涌保护器,特别是投币器的信号线,因为洗衣房环境电磁干扰严重。
3. I/O分配与电气设计
3.1 详细I/O分配表
经过多次调试优化,最终确定的I/O分配如下:
| 信号类型 | 设备名称 | PLC地址 | 备注 |
|---|---|---|---|
| 输入 | 投币检测 | I0.0 | 常开触点,投币时闭合 |
| 输入 | 启动按钮 | I0.1 | 自复位常开按钮 |
| 输入 | 停止按钮 | I0.2 | 自复位常闭按钮 |
| 输入 | 水位上限 | I0.3 | 浮球开关,水位到则通 |
| 输入 | 水位下限 | I0.4 | 浮球开关,无水则通 |
| 输入 | 门开关检测 | I0.5 | 门关闭时接通 |
| 输出 | 进水阀控制 | Q0.0 | 驱动24V电磁阀 |
| 输出 | 排水阀控制 | Q0.1 | 驱动24V电磁阀 |
| 输出 | 电机正转 | Q0.2 | 通过接触器控制电机 |
| 输出 | 电机反转 | Q0.3 | 通过接触器控制电机 |
| 输出 | 报警指示灯 | Q0.4 | 驱动220V报警器 |
| 输出 | 投币显示 | Q0.5 | 驱动7段数码管 |
3.2 电气接线要点
电气柜安装时我总结了几个关键点:
-
电源隔离:PLC工作电源(24VDC)与动力电源(220VAC)必须分开走线,避免干扰。我在柜内左右两侧分别布置,中间用金属隔板隔离。
-
接地处理:所有金属外壳(投币器、电机等)都要单独接地,不能串接。PLC的接地端子要用6mm²的黄绿线直接接到接地排。
-
信号线选型:投币器和水位传感器的信号线使用双绞屏蔽线,屏蔽层单端接地(PLC侧)。电机控制线用1.5mm²的多芯软线。
-
保护电路:每个输出点都并联续流二极管,特别是驱动接触器的Q0.2/Q0.3,我用的是1N4007。输入点全部加装RC吸收回路。
4. PLC程序设计详解
4.1 主控制逻辑实现
梯形图程序采用模块化设计,主要分为投币检测、水位控制、电机控制和报警处理四大模块。下面重点解析几个关键网络:
Network 1 - 投币锁定逻辑
code复制LD I0.0 // 投币检测输入
O M0.0 // 自锁触点
AN I0.2 // 停止按钮(常闭)
= M0.0 // 投币状态记忆
这个网络实现了投币信号的锁定。M0.0一旦置位就会保持,直到按下停止按钮。实际调试中发现光电投币器信号可能有抖动,所以在程序里加了10ms的延时滤波。
Network 3 - 进水控制
code复制LD M0.1 // 运行状态
AN I0.3 // 水位上限未到
AN T37 // 防溢流定时器
= Q0.0 // 打开进水阀
这里T37是180秒的定时器,防止水位传感器故障导致持续进水。这是我在现场调试后加的保险措施。
4.2 电机控制策略
洗衣机的核心是电机正反转控制,我采用时间控制方式:
- 正转15秒→暂停2秒→反转15秒→暂停2秒,循环10次
- 排水后高速正转300秒脱水
对应的程序段:
code复制// 正转启动
LD SM0.0 // 常ON
A M0.1 // 运行中
AN I0.3 // 水位正常
AN Q0.1 // 不在排水
TON T40, 150 // 正转15秒
// 反转启动
LD T40 // 正转时间到
TON T41, 20 // 暂停2秒
LD T41
TON T42, 150 // 反转15秒
这种控制方式简单可靠,但要注意电机正反转切换时必须留有间隔,避免短路。我在接触器控制回路中还加了机械互锁。
5. 组态王界面开发
5.1 画面布局设计
组态王6.55版本开发的界面包含以下关键元素:
- 状态显示区:顶部显示投币金额、剩余时间、当前水位
- 操作按钮区:中间是放大化的启动/停止按钮
- 流程动画区:左侧用动态图展示进水、洗涤、排水过程
- 报警信息区:底部滚动显示报警记录
特别要提的是按钮设计,我采用了:
- 尺寸不小于80×80像素
- 按下/抬起状态颜色对比明显
- 添加操作音效反馈
- 禁用状态下灰度显示
5.2 数据连接配置
PLC与组态王的通信采用PPI协议,关键变量连接如下:
| 变量名 | 寄存器地址 | 类型 | 说明 |
|---|---|---|---|
| Coin_Count | VW100 | 整型 | 投币数量 |
| Water_Level | VW102 | 整型 | 水位百分比(0-100) |
| Motor_State | VB104 | 字节 | 电机状态字 |
| Alarm_Code | VB105 | 字节 | 报警代码 |
动画效果通过事件脚本实现,例如水位填充动画:
vb复制Sub Water_Animation()
Dim level As Integer
level = GetTagValue("Water_Level")
SetFillColor("Water_Tank", RGB(0, 0, 255))
SetFillHeight("Water_Tank", level)
End Sub
6. 调试经验与问题解决
6.1 常见故障排查
在项目调试过程中,我遇到了几个典型问题:
-
投币误识别:最初投币器在电机启动时会产生误信号。解决方法是在投币器电源端加装隔离DC-DC模块,信号线改用屏���双绞线。
-
水位波动:进水时水位开关频繁动作。通过调整浮球配重和在程序中增加10秒的滤波延时解决。
-
通信中断:组态王偶尔会与PLC失去连接。将通信速率从187.5kbps降至9.6kbps后稳定。
6.2 参数优化记录
经过一周的现场测试,最终确定的优化参数:
| 参数名称 | 初始值 | 优化值 | 优化原因 |
|---|---|---|---|
| 进水超时 | 无 | 180秒 | 防止传感器故障溢水 |
| 正反转间隔 | 0秒 | 2秒 | 避免接触器切换火花 |
| 脱水时间 | 240秒 | 300秒 | 用户反馈衣物不够干 |
| 投币滤波时间 | 无 | 10ms | 消除机械振动误触发 |
7. 系统扩展思考
这个基础框架还可以进一步扩展:
-
支付方式升级:增加二维码支付模块,通过Modbus RTU与PLC通信。需要扩展一个RS485接口。
-
远程监控:在组态王中添加Web发布功能,店主可以通过手机查看设备状态和营收数据。
-
能耗统计:加装电表和水表,在组态画面中显示每次洗涤的能耗,提升环保形象。
-
故障预测:采集电机电流数据,当发现异常波动时提前预警,避免突然损坏影响营业。
