聊这个项目之前,先说个背景。我做非标设备有些年头了,PLC、上位机、伺服、变频器混着用,但接到“用PLC控制一台滚筒洗衣机”这种需求时,还是愣了一下。朋友问得直接:洗衣机不是单片机就能搞定吗?干嘛非得用PLC?我说对,家用洗衣机确实用单片机,但你把它当一条微型自动化产线来看——进水、加热、洗涤、排水、脱水,每一步都有传感器反馈、执行器动作、时序转换和安全联锁,这不就是一个典型的PLC顺序控制项目吗?
这篇内容就围绕这个思路展开。如果你正在做PLC毕业设计,或者刚入行做非标项目,又或者只是想把PLC编程入门基础知识和实际场景结合起来看一遍,那这个“洗衣机控制系统”的拆解会很对胃口。我会把硬件选型、I/O分配、状态机设计、梯形图实现、调试踩坑全部走一遍,里面很多逻辑直接换个名字就能搬到工业设备上。
1. 项目整体设计与控制需求拆解
1.1 从“转起来”到“知道该干什么”
很多人一听到“PLC控制洗衣机”,第一反应是“让电机正转反转嘛”。这思路没错,但太浅了。洗衣机控制的核心从来不是电机本身,而是事件驱动的时序逻辑:进水到位没?水温到了没?门锁上了没?洗涤时间跑完没?排水排干净没?脱水转速达到没?每个环节都要在前一个条件满足之后才能启动,任何一个异常都要停下来报警。
把这个需求拆开看,整个系统其实分三层:
- 输入层:启动/停止按钮、门锁反馈、高水位开关、低水位开关、温度传感器(PT100或NTC)、模式选择开关。
- 控制层:PLC根据输入信号和内部定时器,按照预定的状态机顺序切换运行阶段。
- 输出层:进水电磁阀、排水电磁阀、洗涤电机(正转/反转/高速脱水)、加热器、门锁、蜂鸣器。
这个架构和一条小型灌装线或者一台工业水洗机的逻辑几乎一模一样。区别只在于,洗衣机的执行机构少一些,但控制逻辑的完整度一点都不低——该有的互锁、超时保护、异常报警全都有。
1.2 为什么用PLC而不是单片机或者继电器
这是个绕不开的问题。普通家用洗衣机采购成本低,量又大,用单片机方案把控制板做到一块PCB上是最优解。但如果你是在做教学项目、毕业设计、或者某个特殊场景(比如实验室定时清洗设备、小型工厂的工业水洗机改造),PLC就有它不可替代的价值:
- 可靠性:PLC的硬件设计针对工业环境,电源抗干扰、I/O隔离、宽温范围都比单片机控制板稳定得多。
- 可维护性:梯形图可视化,现场电工和机械人员拿到程序能看懂逻辑,改一个定时时间、换一个动作顺序,不需要重新画板子。
- 调试方便:在线监控、强制输出、状态指示,排查问题比用万用表量单片机引脚舒服太多。
- 扩展性:今天控制一台洗衣机,明天想加一个自动投放洗涤剂的泵,PLC加一个输出点就行,单片机方案就得改板。
用继电器搭洗衣机控制电路当然也能跑,但那个触点数量、互锁复杂度、故障率,稍微想象一下就头大。PLC本质上就是把一大坨继电器逻辑收进了一颗工业级的处理器里,这也是它在这个项目里最实在的优势。
1.3 硬件选型:不追新,只求够用
这个项目的硬件选型我走的是实用路线:
- PLC本体:三菱FX3U系列基本型,继电器输出。洗衣机不需要高频脉冲输出,继电器输出完全够用,选晶体管反而浪费。如果你手头只有西门子S7-200 SMART或者汇川H1U,也完全可以,因为后面的逻辑都是通用的。热词里经常有人问三菱FX系列圆头针脚定义,其实老款FX的编程口是圆头D-SUB接口,接线容易搞错,我的建议是用原装USB-SC09编程线,别自己焊线省那几十块钱,调试时信号不稳定会想哭。
- 输入设备:水位开关用两路浮球式液位开关,高水位和低水位各一路。温度采集用PT100加模拟量输入模块(FX3U-4AD或者自带模拟量的型号)。
- 输出设备:接触器控制洗涤电机正反转,固态继电器或者小继电器控制加热器,电磁阀直接接PLC输出。
- 人机交互:一个触摸屏,用MCGS或者威纶通都行,做状态显示、参数设定、手动调试画面。如果你不想加触摸屏,用按钮和指示灯也能把项目跑起来,但调试效率差一大截。
这里有个经验:做项目前先把I/O点表列好,再选PLC型号。很多新手是先买了PLC再发现输入输出不够用,然后被迫外扩继电器、改方案。洗衣机的I/O不多,但列清楚再动手能少走很多弯路。
2. 核心逻辑设计:状态机、时序与互锁
2.1 状态机设计是顺序控制的灵魂
洗衣机程序在PLC里最优雅的实现方式就是状态机。所谓状态机,说白了就是把整个洗衣过程划分成若干个互斥的状态,每个状态有明确的进入条件和退出条件。这种思路和十字路口红绿灯PLC程序是同一个套路,只是洗衣机的状态比红绿灯多,而且每个状态的持续时间不完全相同。
我用辅助继电器M0~M7表示8个状态:
| 状态编号 | 辅助继电器 | 含义 | 进入条件 | 执行动作 |
|---|---|---|---|---|
| S0 | M10 | 待机 | 上电/复位 | 关闭所有输出 |
| S1 | M11 | 进水 | 启动按钮按下且门锁到位 | 开门锁、开进水阀 |
| S2 | M12 | 洗涤 | 高水位到位 | 关进水阀,电机正反转交替 |
| S3 | M13 | 排水 | 洗涤时间到 | 停电机,开排水阀 |
| S4 | M14 | 脱水 | 低水位到位 | 关排水阀前先转高速,尾段再排水 |
| S5 | M15 | 漂洗进水 | 脱水结束 | 开进水阀 |
| S6 | M16 | 漂洗排水 | 高水位到位且漂洗时间到 | 停电机,开排水阀 |
| S7 | M17 | 结束 | 排水完成 | 关所有阀,蜂鸣器提示 |
每个状态用一个辅助继电器表示,状态之间互锁,不能出现两个状态同时为ON的情况。这样做的好处是:程序逻辑非常清晰,后面要加功能(比如增加一次漂洗)只需要在状态链中间插入一个新状态,不会牵连其他程序段。
这个思路和抢答器PLC控制系统设计里使用的“互锁+顺序推进”是一个道理,只是抢答器锁存的是谁先按下,洗衣机锁存的是当前运行到哪个阶段。
2.2 洗涤电机控制:互锁是保命的
洗涤电机的正反转控制是这个项目里最需要谨慎的部分。驱动方式有几种:老式波轮洗衣机用定时器切换电容电机正反转,滚筒洗衣机很多用串激电机加变频器调速。我们做PLC控制,最直接的方案是两个接触器切换电机相序实现正反转。
这里必须强调两点,缺一不可:
- 电气互锁:正转接触器和反转接触器在硬件上互锁(接触器的常闭触点串入对方的线圈回路),防止两个接触器同时吸合造成相间短路。
- 程序互锁:梯形图里,正转输出Y0的线圈回路串入反转输出Y1的常闭触点,反转回路串入Y0的常闭触点。同时在状态切换时先断开当前接触器,延时一段时间再吸合另一个。
这两个互锁缺一个都不行。只做程序互锁,万一PLC输出口被击穿短路或者接触器卡死不释放,硬件互锁还能拦住;只做电气互锁,程序误动作时照样可能出问题。工业上的正反转星三角降压启动项目里,这个原则一模一样,只是在星三角切换时会额外加一个延时,确保星形接触器彻底断开才吸合三角形接触器。
如果项目放大到工业水洗机那种十几千瓦的大功率电机,就不能直接启停了,得考虑星三角降压启动或者软启动器。热词里总有人搜“PLC控制软启动器一拖三接线”,原理其实不复杂:一个软启动器轮流带三台电机,主回路上每台电机配一个旁路接触器,启动完成后把电机切换到旁路运行,软启动器再去启动下一台。控制逻辑里要注意“启动完成信号”的判定和切换时序,避免旁路接触器在启动过程中误吸合。从洗衣机的电机互锁到软启动器一拖三,核心都是那八个字:时空分离,先断后合。
2.3 加热与温度控制:PID不是银弹
水温控制是这个项目里的一个小难点。洗衣机加热洗涤时,温度一般设定在30~60℃之间,温度对象的特点是:惯性大、滞后明显、加热过程中水在流动所以扰动多。
很多初学者一听到温度控制就上PID,结果参数调不出来,水温波动闪断。我的建议是,这个场景先用通断控制(滞回控制)就够了:温度低于设定值2℃时接通加热器,高于设定值2℃时断开加热器。PLC程序里用比较指令加一个中间继电器就能实现,稳定、可靠、对执行机构友好。
真想用PID也不是不行,但要理解热词里“PLC温度PID波动温差大如何调节”的本质:温度是一个大惯性对象,P太大必然超调,I太大必然振荡,D对传感器噪声极其敏感,而PT100本身噪声不大但也经不起导数放大。我的经验是先做开环阶跃测试,确定对象的滞后时间常数,然后给出一组偏保守的参数初值:比例增益Kp取1.5~3,积分时间Ti取60~120秒,微分时间Td先设为0,跑起来看趋势再加。重点是:让温度慢慢靠近设定值,不要追求一步到位。
实际上,家用滚筒洗衣机的加热段大多就是通断控制,因为温度精度要求本来就不高,正负两三度完全够用。PID留着去做那些真正需要恒温的场景,不必为了炫技术给自己找麻烦。
2.4 安全联锁:该停的时候必须停得干脆
洗衣机里有几个安全联锁必须认真做,这也是整个PLC程序里最不能糊弄的地方:
- 门锁联锁:任何运行状态下,门锁反馈信号丢失都必须立即停止电机和加热器,只保留显示和报警。没有门锁反馈不允许启动。
- 水位联锁:低水位未到位不允许加热,防止干烧;高水位未到位不允许启动洗涤电机,防止负载过大。
- 排水超时保护:进入排水状态后,如果在设定时间内(比如3分钟)低水位信号还没到位,判定排水故障,停机报警。
- 加热超温保护:温度超过硬件上限(比如70℃)时,无论程序状态如何,无条件断开加热输出点。
这些联锁的实现方式不复杂——在每一段梯形图的输出条件里把对应的常闭/常开触点串进去。但它们的意义在于:即使传感器误动作、接触器卡死、或者程序某个状态跳错,设备也能落到安全状态。做非标项目时间长了就会明白,一个设备能不能让现场用着放心,看的不是正常流程走得顺不顺,而是异常情况下断不停得干脆。
3. 实操过程与核心程序实现
3.1 先列I/O表,再动手写程序
整个实操过程的第一步,永远是I/O分配。这个项目我用三菱FX3U-32MR,输入输出各分配如下:
| 地址 | 信号 | 地址 | 信号 |
|---|---|---|---|
| X0 | 启动按钮 | Y0 | 进水电磁阀 |
| X1 | 停止/复位按钮 | Y1 | 排水电磁阀 |
| X2 | 高水位开关 | Y2 | 洗涤电机正转 |
| X3 | 低水位开关 | Y3 | 洗涤电机反转 |
| X4 | 门锁反馈 | Y4 | 电机高速/脱水 |
| X5 | 手动/自动切换 | Y5 | 加热器 |
| X6 | 温度传感器(模拟量) | Y6 | 门锁 |
| X7 | 排水超时复位 | Y7 | 蜂鸣器 |
I/O表列出来之后,整个项目的工作量能看出个大概。接下来就是接线。这里有个特别重要的细节:PLC的COM口接线必须把公共端分组看清楚,输入输出的公共端不能混接,传感器用DC24V供电要从PLC电源端子取,千万别图省事从外部开关电源拉一根没共地的线过来,这样轻则信号误动作,重则烧坏输入点。
3.2 梯形图三段式结构:状态选择、顺序控制、集中输出
三菱GX Works2的梯形图,我按三段来组织逻辑:
第一段:状态选择与复位逻辑
LD X0 AND X4 // 门锁到位 SET M11 // 进入进水状态 LD X1 OR M17 // 停止或结束 RST M11 RST M12 ...启动条件里把门锁信号串进去,这一步就保证了不关门电机绝对转不起来。停止按钮则把所有状态辅助继电器全部复位。
第二段:状态转换与定时控制
// 进水完成,转洗涤 LD M11 AND X2 // 高水位到位 SET M12 RST M11 // 洗涤正转5秒,停2秒,反转5秒,循环 LD M12 AND T1 OUT Y2 // 正转输出 ...洗涤段的时序用定时器链实现:正转T0延时5秒→停T1延时2秒→反转T2延时5秒→停T3延时2秒→回到正转。这种环形定时器链在红绿灯程序里非常典型,本质就是几个定时器首尾相连,每个定时器到点后启动下一个同时复位自己。
第三段:集中输出
洗衣机项目里最容易出bug的地方就是双线圈输出。很多新手在每个状态段里直接给Y0写一个OUT指令,结果两个状态同时满足条件时,Y0的输出状态互相覆盖,现场表现就是“动作乱跳、接触器咔咔响”。正确的做法是:所有状态段只操作M继电器,最后一整段再做集中输出:
LD M11 OR M15 OUT Y0 // 进水阀 LD M13 OR M16 OUT Y1 // 排水阀 LD M12 ANI M13 OUT Y2 // 正转 ...这样做的好处是:每个物理输出点在整个程序中只有一个线圈指令,所有状态对它的控制都通过触点串并联实现,逻辑清晰且不容易打架。
3.3 手动调试画面和生产画面分开做
触摸屏画面我分成两套。第一套是生产画面:一个大状态显示区域,用文字和指示灯显示当前处于“进水”“洗涤”“排水”“脱水”“结束”中的哪一个状态,另外显示当前水温、设定水温、剩余时间。第二套是手动调试画面:每个输出点做独立按钮,每个输入点做状态灯,方便接线后逐个验证I/O口。
这个做法在现场调试时帮了大忙。第一次上电,先切到手动模式,逐个点动Y0到Y7,确认每个电磁阀、接触器、蜂鸣器的动作和接线一致,然后再切回自动模式跑完整流程。如果跳过这一步直接跑自动,一旦某个输出接错线,排查起来会非常痛苦。
3.4 从洗衣机到非标项目:程序框架直接复用
这个项目的程序框架,我后来在好几个非标设备上直接复用过:状态机段用来管理流程,集中输出段用来驱动执行器,独立定时器段用来处理延时逻辑,安全联锁全部串在输出条件里。换设备名称、换I/O地址、换定时时间,一个骨架撑起了好几套程序。
所以我的建议是,别把这个项目只当“洗衣机控制”来看,把它当成一个顺序控制的标准范式。你学会了这几十行新逻辑,等于掌握了PLC项目里最常用的一块积木,以后无论做天塔之光、抢答器、红绿灯、自动送料小车,本质都是在同一个框架里填不同的状态和条件。
4. 调试过程与常见问题排查实录
4.1 上电调试前必须做好的两件事
第一件事,断电检查。用万用表通断档确认所有输出线没有短路、没有错接到电源端。特别是接触器线圈回路,错接220V和DC24V是事故高发区。第二件事,程序编译零错误。很多人抱着一堆黄色警告就往下灌程序,结果现场行为怪得不行,查半天最后发现是一个定时器地址重叠了。GX Works的编译检查不会帮你捕获逻辑错误,但至少把显性错误清零再上电。
调试顺序也很有讲究:先手动点动→再单步运行→最后全自动连续跑。手动点动确认硬件无误,单步运行确认状态转换的条件能触发,全自动连续跑才是验证时序和联锁稳定的阶段。直接上全自动是新手最容易翻车的行为。
4.2 通信连接与程序下载问题速查
热词里有很多关于PLC通信连接的疑问,比如“建立连接:需要目标PLC的AMS Net ID(6字节网络标识符)和端口号”“Codesys读取PLC网口MAC地址”“博途PLC与模拟屏不兼容”“S7-PLCSIM Advanced下载程序在线检查保护机密PLC组态数据的密码时出错”。这些场景虽然品牌不同,但背后的排查逻辑是相通的。我整理成一张速查表:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 串口下载连不上 | 编程线驱动没装好或COM口号不对 | 打开设备管理器确认串口号,重新插拔编程线 |
| 以太网通信超时 | IP地址不在同一网段 | PLC和电脑各设固定IP,先互ping通再连PLC |
| Codesys扫描不到设备 | 网口MAC地址和组态里不一致 | 在设备管理器查看MAC,核对工程组态的设备标识 |
| 博途下载报“保护机密PLC组态数据”的密码错误 | 在线访问保护密码遗忘或输错 | 检查PG/PC接口设置,必要时恢复出厂设置后重新下载 |
| 触摸屏与PLC通信不稳定 | 通信参数不一致或干扰 | 确认站号、波特率、数据格式两边一致,通信线用屏蔽双绞线 |
我做这个项目用的是串口编程线,一开始也遇到过连接失败,最后发现是USB转串口芯片的驱动版本太老导致电脑分配的COM口号飘忽不定。换了一个品牌的编程线,问题直接消失。工具的钱真不能省,通信线一定要买原装或者质量可靠的第三方。
4.3 模拟量温度采集跳变怎么办
温度传感器接的是PT100,通过模拟量模块转成数字量。调试时发现一个典型问题:温度显示值在稳定状态下跳变好几度,加热控制也跟着频繁通断。
排查顺序是这样走的:
- 第一步,查接线:确认PT100三线制接法正确,屏蔽层单端接地。
- 第二步,查滤波:在模拟量模块参数里打开数字滤波功能,或者程序里做移动平均,把采样值平滑处理。
- 第三步,查电源:确认模块供电稳定,不要和接触器线圈共用开关电源。
做完这三步,温度值稳定下来,加热控制的通断频率也明显下降了。这个经验在工业现场同样适用,模拟量信号不稳定,优先怀疑接线和电源,而不是程序写得不对。
4.4 程序跑飞与状态跳错
全自动运行过程中出现过一次“明明在洗涤状态,进水阀却打开了”的怪事,排查后发现是我把状态转换条件写成了“X2的常开触点”而不是“X2下降沿触发”。实际场景里水位在临界点上下抖动,导致状态在进水与洗涤之间反复横跳。
修法有两种:一种是用上升沿/下降沿指令让状态转换只在跳变瞬间执行一次;另一种是加入“确认延时”——比如高水位信号持续0.5秒后才认为水位到位,滤掉水面的波动干扰。后来我在所有涉及液位、温度等模拟类信号的状态转换条件里都加了100~500ms的确认延时,效果非常好。
4.5 故障速查表:现场最常用的排错清单
整理一份这个项目最常见的故障速查表,可以贴在控制柜门内侧,方便现场快速定位:
| 故障现象 | 可能原因 | 处理方案 |
|---|---|---|
| 按下启动无反应 | 门锁没到位/启动按钮触点氧化/X0没通 | 检查门锁反馈灯,测X0输入信号 |
| 进水不停,不转洗涤 | 高水位开关故障/X2接线松 | 切换到手动模式,强制X2模拟信号 |
| 电机只朝一个方向转 | 反转接触器线圈或触点损坏 | 手动点动Y3,判断输出点是否正常 |
| 排水超时报警 | 排水管堵塞/低水位开关卡滞 | 清堵,短接低水位信号测试 |
| 触摸屏显示“PLC无响应” | 通信参数错/通信线断/PLC处于STOP状态 | 先看PLC运行指示灯,再查通信线 |
| 加热不停,温度持续升高 | 温度传感器飘移/加热接触器卡死 | 断开输出Y5,立即停机查传感器和接触器 |
4.6 关于“AI生成PLC代码”的一些实话
最近总能刷到“AI PLC代码生成”“AI Agent与PLC编程”这类话题。我的态度是:可以用,但不能盲信。AI拿来生成一段标准功能块的梯形图参考,提速是实实在在的,但顺序控制里最关键的联锁逻辑、状态互锁、超时保护,AI很难替你判断全面。它不知道你的现场有什么传感器、什么执行机构、什么安全要求。
就像这个洗衣机项目,AI能帮你搭一个能跑的框架,但门锁联锁要不要串进启动条件、排水超时报警时间定多少秒,这些必须由懂设备的人定。所以我的建议是:AI当助手,人当总工。
写在最后的一些实在话
这个项目做完,我最大的体会是:洗衣机看着不起眼,但控制逻辑的完整度非常值得新人练手。从I/O表到状态机,从互锁到联锁,从调试到故障排查,一套标准的非标设备开发流程全都覆盖了。你把这个流程跑一遍,比背一百条指令都管用。
最后再分享一个小技巧:写梯形图的时候,给每个状态和每个输出都加上清晰的注释。三菱的GX Works支持行注释和软元件注释,别嫌麻烦,现场调程序的时候这些注释能让你少死无数脑细胞。我见过太多“程序能跑但看不懂在写什么”的项目,格式化、注释规范、状态段分明,这才是PLC程序最值得投入精力的地方。
这个“PLC洗衣机”的项目,后续还可以继续扩展:加一个自动投放洗涤剂的泵和流量传感器,把温度控制换成真正的PID调节,甚至把脱水阶段的变频调速做起来——每加一个功能,你对PLC控制系统的理解都会再深一层。