
聊这个项目之前先说个背景。我做非标设备有些年头了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个状态状态编号辅助继电器含义进入条件执行动作S0M10待机上电/复位关闭所有输出S1M11进水启动按钮按下且门锁到位开门锁、开进水阀S2M12洗涤高水位到位关进水阀电机正反转交替S3M13排水洗涤时间到停电机开排水阀S4M14脱水低水位到位关排水阀前先转高速尾段再排水S5M15漂洗进水脱水结束开进水阀S6M16漂洗排水高水位到位且漂洗时间到停电机开排水阀S7M17结束排水完成关所有阀蜂鸣器提示每个状态用一个辅助继电器表示状态之间互锁不能出现两个状态同时为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 ID6字节网络标识符和端口号”“Codesys读取PLC网口MAC地址”“博途PLC与模拟屏不兼容”“S7-PLCSIM Advanced下载程序在线检查保护机密PLC组态数据的密码时出错”。这些场景虽然品牌不同但背后的排查逻辑是相通的。我整理成一张速查表现象可能原因排查方法串口下载连不上编程线驱动没装好或COM口号不对打开设备管理器确认串口号重新插拔编程线以太网通信超时IP地址不在同一网段PLC和电脑各设固定IP先互ping通再连PLCCodesys扫描不到设备网口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控制系统的理解都会再深一层。