资讯动态

PLC顺序控制实战:全自动洗衣机编程与调试全程复盘

发布时间:2026/10/14 8:48:51 来源:尧图企业网站定制
做 PLC 项目全自动洗衣机控制基本上是一道绕不开的经典练手题。洗衣机本身的机械结构并不复杂看起来就是进水、洗涤、排水、脱水几个动作但只要动手写过控制程序就会发现这是一台非常浓缩的顺序控制教学机输入有按钮、门开关、水位信号输出有电磁阀、电机、蜂鸣器流程里有定时、计数、步进转移、联锁保护几乎把小型 PLC 最常用的功能用了个遍。这篇文章是我自己做这个项目的复盘记录我会把需求拆解、I/O 分配、硬件接线、程序写法和调试碰到的坑都放在一起。不管你是要交课程设计还是刚开始接触工控的调试工程师或者只是想用手里的小型 PLC 给自己做一个能跑的实物模型都可以照着这套思路走一遍。下面直接进入正题。1. 控制需求拆解看似简单状态其实不少1.1 被控对象和传感器先认全先说清楚一件事做任何 PLC 项目之前先别急着打开编程软件。你要能把现场设备对应到输入输出点否则后面逻辑一定乱。全自动洗衣机里真正需要 PLC 直接控制的东西一只手数得过来进水电磁阀、排水电磁阀、洗涤/脱水电机、脱水离合器以及用于提示的蜂鸣器。电机不能直接正反转所以要用两个接触器切换绕组接线洗涤时低速交替正反转脱水时沿同一个方向高速旋转这个切换通常由机械离合器配合完成PLC 只需要给出对应的控制信号。传感器这边最核心的是水位。我用的模型上接了高水位和低水位两个开关量信号。高水位开关在注水达到预设水位时闭合低水位开关在桶内有一定水量时闭合、排空后断开。这两个信号决定了进水结束、排水完成这些关键转换点。另外还有启动按钮、停止按钮、门盖开关。启动按钮是普通瞬时按钮停止按钮我建议用常闭触点接入断电故障时也能可靠停机门盖开关则直接串入运行回路门一开就断输出。把设备列出来之后就要给每个设备定义清楚动作标准。进水阀在关闭时必须完全切断排水阀打开时要能快速排空电机正转、反转、停止三种状态切换要留出延时。很多人写程序时想得很美好结果现场发现进水阀和排水阀同时开了或者正反转瞬间切换把电机冲击得咯噔一声都是因为设备动作模型没定义清楚就先写梯形图了。1.2 手洗一遍得到流程状态表在写程序前我习惯先把一套完整的“手动洗衣流程”写下来再倒推PLC的状态。标准波轮全自动洗衣机的流程大概是这样的启动后先进水水到高水位就停止进水然后开始洗涤。洗涤是电机低速正转几秒、停几秒、反转几秒反复循环累计时间到了就排水。排完水之后进入脱水脱水时排水阀保持打开内桶高速旋转把水甩出去。脱水结束再进水进行漂洗漂洗和洗涤类似电机转一转把衣物上的洗涤剂洗掉然后排水、脱水。漂洗一般做两次最后蜂鸣器响整个洗衣过程结束。把这段口语化流程转成表格就是下面这个样子步骤输出动作进入下一步的条件进水进水阀开电机停高水位开关闭合洗涤电机正转/停止/反转循环洗涤总时间到排水排水阀开电机停低水位断开且延时确认脱水排水阀保持开电机高速转脱水时间到漂洗进水进水阀开电机停高水位开关闭合漂洗电机正转/停止/反转循环漂洗时间到漂洗排水排水阀开低水位断开且延时确认漂洗脱水排水阀保持开电机高速转脱水时间到结束蜂鸣器响蜂鸣延时到或按下停止这张表就是程序设计的蓝图。每个状态都对应一个明确的输出组合和转换条件写程序只是把表翻译成 PLC 语言而已。要注意的是排水结束不能只看“低水位开关断开”一瞬间因为水面上有气泡、衣物吸水或者开关触点抖动容易误判。我实际设置成“低水位断开并且持续2秒”才进入脱水排空判断会更稳。1.3 安全联锁和断电复位除了流程顺序还需要考虑安全。进水阀和排水阀绝对不能长时间同时打开虽然短时间内不一定出大事但一旦排水管堵塞或者水压异常就会出问题。更危险的是电机正转和反转如果两个接触器同时吸合相当于短路接触器会“啪”地炸掉。所以程序里必须做联锁正转输出回路串一个反转的常闭触点反转回路串一个正转的常闭触点。这只是软件联锁硬件上我还要求两个接触器本身带机械互锁这是双保险。门盖开关也不能省。洗涤时波轮转动手伸进去绞伤人的案例不是没有脱水时内桶高速旋转开盖更加危险。所以门盖开关必须串在所有输出回路里更合理的是门盖一开不管是哪个状态先切断所有电机和阀门的输出并且不能让流程继续乱跳。我做了一个简化门盖断开时所有输出断开流程步保持当前状态不变门盖重新合上后按一下启动按钮继续执行。这种处理比“门盖一开就完全复位”更贴近真实洗衣机的暂停逻辑也不难实现。还有一个容易被忽略的是断电复位。停机再上电之后PLC 的状态继电器如果没有初始化可能保持上次掉电时的状态一运行就自动接着洗这是很危险的。我在程序开头用首次扫描标志把所有输出、定时器、计数器、状态步全部复位保证每次上电都从初始状态开始只能等待启动按钮按下。2. PLC 选型与硬件 I/O 分配2.1 选型思路点数不多别纠结数一下点数输入需要启动、停止、门盖开关、高水位、低水位一共5点输出需要进水阀、排水阀、电机正转、电机反转、脱水离合器、蜂鸣器一共6点。合计11个开关量点再加上以后可能扩展故障报警输入选16点以内的基本型小型 PLC 完全够用。市面上几百块钱的小型 PLC大部分都带 8 输入 8 输出或者类似规格资源对这个项目绰绰有余。选型时主要考虑输出类型。如果直接驱动220V电磁阀和接触器建议选继电器输出型的 PLC触点容量大损坏了换起来也方便。晶体管输出型虽然响应快、寿命长但后面还是得接中间继电器带负载多一道工序。定时器需求大概十来个计数器两三个这些是基本型 PLC 的标准配置不用特意买大规格。编程软件选你手上资料最多、最容易买到的那种就行因为洗衣机的核心逻辑是通用的换一个品牌无非是指令助记符不同思路完全一样。2.2 I/O 分配表我实际用的分配如下地址不一定和你的 PLC 完全一样但对应关系可以参考输入点地址说明输出点地址说明启动按钮常开X0瞬时启动进水阀Y0开进水关排水停止按钮常闭X1急停复位排水阀Y1开排水关进水门盖开关X2闭合为 ON电机正转Y2洗涤正转高水位开关X3到高水位闭合电机反转Y3洗涤反转低水位开关X4有水闭合排空断开脱水/离合器Y4脱水高速输出蜂鸣器Y5完成提示这个分配表看起来简单但有几个地方要特别解释。停止按钮用常闭触点接入这样当按钮线路断线时PLC 会认为停止信号一直存在系统无法启动不会出现“断线了反而一直运行”的故障。门盖开关接的是常开触点门盖合上时 X2 为 ON门盖一开就变 OFF程序中用它的常开触点串联在所有输出回路里就好。输出点里有一个特别容易搞错的地方。我单独给了“脱水/离合器”一个点位 Y4用来控制脱水时的高速运行。脱水这个动作实际上不是单独一个输出而是“排水阀打开 电机高速运行 离合器切换”的组合。所以写程序时不能只输出 Y4必须在脱水状态里同时把 Y1 也保持在 ON。很多新手的洗衣机程序脱水时不排水就是在这里少了一拍。2.3 接线时容易忽略的细节硬件接线是项目翻车的高发区。第一个建议是 PLC 输出端不要直接去带负载尤其是电磁阀和接触器线圈。这些线圈在断电瞬间会产生反向电动势次数多了很容易打坏 PLC 的继电器触点。我这边在 PLC 输出端和负载之间加了一层中间继电器PLC 触点只控制继电器线圈继电器触点再去带 220V 负载同时在继电器线圈两端反向并联续流二极管。成本很低但输出模块寿命会明显提升。第二个建议是正反转接触器必须加硬件互锁。程序设计里做软件互锁已经能防住大部分误动作但接触器本身可能卡住、触点粘连在这种故障情况下软件互锁是无能为力的。选两个带连锁功能的接触器或者加一个辅助触点交叉互锁能做到当正转接触器吸合时反转接触器的控制回路被机械切断。安全保护永远不要只靠程序。第三个建议是输入信号线和动力线要分开走。水位传感器、按钮这些信号线如果和 220V 电源线绑在一起走线槽电磁阀动作时很可能会在传感器线上感应出干扰脉冲导致水位信号闪断、PLC 误动作。我后来把信号线单独走了一侧并且用 PLC 输入自带的滤波功能把输入信号延时至 1020 毫秒误动作基本消失。3. 软件设计把流程变成状态机3.1 置位复位还是步进指令洗衣机程序写法的选择直接决定你后面调试会不会头疼。我记得早期做课程设计的时候习惯用一堆定时器和置位复位线圈硬堆流程结果写洗涤和漂洗两个重复步骤时梯形图复制了整整两遍中间线圈互相交织改一个时间参数要翻半天程序。后来换用步进顺控指令整个思路一下子就顺了。步进指令的思想是把一个流程拆成一个一个步骤每一步有自己的编号当前步的输出是确定的只有满足转换条件才会跳到下一步。比如进水步只开进水阀高水位到了就激活洗涤步洗涤步做定时循环时间到了就激活排水步。这种写法最大的优点是程序结构和流程图完全对应你拿着状态表就能看懂每一行程序调试时也能直接监控当前处于第几步非常直观。当然如果你手里的小 PLC 不支持步进指令也可以用置位复位自己做状态寄存器。比如用 M10 表示进水M11 表示洗涤激活下一步之前先把当前步复位。这种方式也完全可行但要注意防止两条步同时为 ON。具体的做法是每个输出回路都串联“其他步都为 OFF”的联锁条件程序会越长越复杂。所以我更推荐步进指令或者用功能块图的状态机写法。3.2 主流程和步进条件下面我用伪代码来表达主流程逻辑大家换成自己手里 PLC 的指令即可。首先初始化按下启动按钮 X0并且停止按钮 X1 为闭合、门盖 X2 闭合时进入进水步 S1。LD X0 AND X1 AND X2 SET S1在 S1 进水步中输出只有进水阀 Y0。同时如果高水位 X3 闭合且门盖保持闭合则进入洗涤步 S2。ST S1 OUT Y0 LD X3 AND X2 SET S2 ST S2这里用步进指令的好处就体现出来了步 S1 激活时自动复位上一步 S0同时限制只有当前步能输出。你不会担心“进水阀忘了关、排水阀也跟着开”这种低级错误因为 S1 步里根本没有写排水阀的输出跳走之后这步的输出也随之断开。在 S2 洗涤步要控制电机正转、反转、停止交替循环之后进入排水步 S3。排水步里要打开排水阀 Y1等待低水位 X4 断开并保持2秒。再下一步 S4 脱水输出是排水阀 Y1 和脱水输出 Y4 同时打开等待脱水时间到。漂洗逻辑可以复制进水到脱水这一段但为了后面调整方便我建议加一个漂洗次数计数器每次脱水完成就加一没到设定次数就跳回进水步到了就跳结束步这样程序不用重复写两遍。3.3 洗涤正反转循环怎么写洗涤步的细节比较多单独拿出来说。波轮洗衣机的洗涤动作不是一直正转而是“正转3秒→停止2秒→反转3秒→停止2秒”这样循环。这个动作看起来简单但现场最容易在这里出问题原因是切换太快电机还没减速就反向启动冲击电流很大。程序设计上我用两个定时器分别控制正转和反转中间插入停止延时。比如正转定时 T0 计时3秒到时间后切断正转输出同时启动停止定时 T1T1 计时2秒后闭合反转输出同时启动反转定时 T2T2 计时3秒后再切回停止启动 T1……如此循环。用计数器对完整的“正转-停-反转-停”次数计数次数到了就认为洗涤完成。这里有个小技巧洗涤循环的总时间可以有两种控制方式。一种是直接固定循环次数比如 8 次总时间就是 8 乘以一个循环周期另一种是设定一个洗涤总时间定时器比如 15 分钟循环在这个总时间内一直进行到点退出。我实际使用循环次数 一个总时间上限两者取先到者这样就算某个循环因为门盖暂停了几秒钟整体洗涤时间也不会无限拉长。正反转输出互锁在程序里必须写。Y2正转的线圈回路里串联 Y3 的常闭触点Y3 的线圈回路里串联 Y2 的常闭触点。这一步非常关键如果不做极端情况下正反转可能同时 ON到时候去现场一看接触器都炸黑了。3.4 启动、停止、门盖联锁的公共回路我反复提门盖联锁这里讲讲具体怎么放。很多新手把门盖条件放进每个步进转换条件里这样虽然能避免门开时跳步但当门盖在半路打开时已经处于 ON 的输出并不会自动断开因为当前步还是激活的。正确的做法是把门盖常开触点 X2 串联在每一个输出线圈的公共回路里也就是程序开头定义一个“运行允许”标志 M10门盖闭合且停止未按下时 M10 为 ON然后所有输出线圈都用 M10 的常开触点串联。停止按钮的处理也是同理。停止按钮按下的瞬间M10 变为 OFF所有输出立刻断电而步进状态保持。这样做的好处是停止之后重新按启动可以继续执行而不是从零开始。如果项目要求急停后完全复位那就在停止按钮按下时把所有步全部复位回初始步。两种方式各有适用场景课程演示用“暂停继续”更友好安全规范高一点的现场设备用“急停复位”更稳妥。上电初始化也非常重要。在 PLC 首次扫描时把所有输出 Y0Y5、所有定时器、计数器、步进状态全部复位并且把流程放到初始步 S0。这样断电再来电时PLC 不会自己接着洗必须人工按启动才运行。4. 调试与排障现场最容易踩的坑4.1 分步空载调试别一上来就装水通电我第一次做这个项目时直接就把进水阀、电机全都接上然后上电试机。结果水流得到处都是电机在程序写错的情况下突然猛转差点打到自己。后来学乖了调试必须分步走。第一步是并联负载空载调试。先不接电磁阀和电机把 PLC 的输出点分别接上指示灯或用编程软件监控用按钮开关模拟高水位、低水位信号把整个流程走一遍。按下启动看进水指示灯 Y0 亮模拟高水位闭合看 Y0 灭、正转指示灯 Y2 亮再模拟低水位断开看排水指示灯 Y1 亮……这样即使逻辑有误也只是灯亮灯灭不会造成任何设备损坏。第二步才接中间继电器和指示灯不接主回路负载再完整走一遍流程检查输出时序和互锁。第三步接真实的洗衣机但一定要有人在总电源旁边守着出问题立刻断电。这一步尤其要小心电机正反转程序里切换时如果听到“咯噔”一声巨响大概率是停止延时不够或者互锁没写对马上断电查程序。4.2 常见问题速查表做的时候我把遇到的典型问题整理成了一张表后面调试其他设备也一直在用。现象可能原因排查方法按启动没反应停止按钮常闭接线用成了常开地址门盖开关没闭合PLC 没有切到运行监控输入点强制 M10 看输出能否通进水一直不停高水位信号没到程序没从进水步跳走Y0 触点粘连看 X3 输入灯是否亮监控当前步号排水结束却不脱水低水位判断太灵敏没延时确认X4 触点抖动模拟低水位持续断开 2 秒观察跳步电机异响、冲击大正转和反转切换太急缺少停止延时检查定时器顺序是否是正转-停-反转-停脱水时电机不转脱水步里少了 Y1 排水输出Y4 对应的接触器故障门盖断开监控脱水步的 Y1、Y4 状态输出继电器频繁烧坏没有加中间继电器隔离负载冲击太大加中间继电器线圈并续流二极管程序偶尔乱跳输入信号抖动没有做输入滤波步进条件用了瞬时信号在 PLC 输入设置里加 1020ms 滤波条件改成持续 ON断电后重新上电状态乱没有上电初始化状态步保持掉电值首扫描把所有输出和状态步复位排障的时候要盯住“当前步号”这个监控值。我的做法是把所有步进状态的 ON/OFF 做成一个监控表当前步变到哪一目了然。如果流程卡在进水步就看高水位是不是真的到如果流程跳来跳去就怀疑干扰和抖动。4.3 我踩过的几个具体坑第一个坑是停止按钮的接线。第一次接线时我图省事把停止按钮接成了常开触点程序里也想当然写了“X1 为 ON 就停止”。结果启动之后手一松按钮断开PLC 就认为停止信号成立系统马上停了。后来改成常闭输入程序里用 X1 常开触点作为运行允许条件这个问题才解决。画图纸的时候一定要标注触点形式别混。第二个坑是正反转切换时没有停止延时。最开始我设计的循环是“正转3秒结束立即反转3秒”结果接触器切换瞬间能听到明显的机械冲击声连续跑几次之后正转接触器的辅助触点都烧黑了。后来在正转和反转之间插入2秒停止时间冲击电流大幅下降接触器温度也正常了。程序里多一个定时器现场少换一堆触点。第三个坑是水位信号的干扰。进水阀动作的时候长距离水位信号线和动力线产生耦合X3 偶尔会闪断一下导致程序在进水步和洗涤步之间反复横跳。处理方法是先用万用表确认输入点是否真实收到脉冲再把 PLC 的输入滤波调到20毫秒最后在步进条件里加了一个“X3 持续闭合 0.5 秒”的判定问题彻底解决。这个“持续判定”的技巧特别实用以后做任何液位、压力、光电开关都建议加一层小延时滤波。第四个坑是脱水忘开排水阀。虽然不是每次必现但程序调试时有一次脱水时内桶搅水声音特别闷仔细一看程序里脱水步只输出 Y4没有输出 Y1。这个我也不止一次在新手程序里看到。所以写状态对照表时一定要把每个状态的输出组合都写全像脱水就是“Y1 Y4”。5. 从洗衣机到通用顺序控制5.1 动作抽象成状态表做完了洗衣机你会发现这套方法不只适用于洗衣服。PLC 的顺序控制本质就是把设备动作按时间轴排成状态序列然后按条件转移。你只要把洗衣机的“进水阀”换成注液阀“洗涤电机正反转”换成搅拌电机“排水阀”换成排污阀“脱水”换成离心机或风机吹干那么这套状态机框架可以迁移到零件清洗机、药液调配罐、灌装线、甚至简单的物料输送系统上。抽象出的通用框架可以写成填充/进料→反应/搅拌/等待→排空/出料→分离/干燥→重复次数→结束。以这个框架为模板再针对具体设备补充安全联锁和报警就能快速搭建一个新设备的控制程序。写 PLC 程序如果都能先画一张状态表再写代码调试时间至少能缩短三分之一。5.2 加人机界面和故障报警洗衣机本身不需要屏幕但作为项目演示接一块小触摸屏会让整个系统看起来很完整。PLC 把当前步号、剩余时间、当前故障通过串口发给触摸屏屏上显示“正在进水”“正在洗涤”“排水中”“脱水中”这样的文字还能显示报警信息。PLC 侧只需要把状态字打包成几十个字节的通信帧触摸屏那边按协议解析不用改主程序逻辑。故障报警可以做这几类进水超时即高水位一直不到可能进水阀堵了或水压异常排水超时即低水位一直不断开可能排水管堵了门盖打开报警就是运行过程中门盖断开电机过载报警在热继电器常闭触点回路里串一个输入点过载时让所有输出断开并报警。这些故障信号在 PLC 里用定时器和比较指令就能实现加进程序后系统才算得上是一个可靠的小型自动化设备。5.3 变频调速与进阶如果想把项目难度再往上提一档可以考虑给电机加一个变频器。洗涤时用低频比如 1520Hz让波轮慢速翻转脱水时用高频比如 60Hz让内桶高速旋转切换时用变频器的加减速时间和直流制动功能电机冲击会非常小。PLC 这边需要增加几个输出点控制变频器的多段速端子还要接变频器的故障信号。这样一来这套系统就从简单的开关量顺序控制变成了带有调速系统的综合项目对找工作写简历也有帮助。不过变频器和单相电机的搭配要特别注意电机类型普通单相电容电机不一定能直接接变频器。真要做的话最好选三相异步电机或者支持变频驱动的专用电机否则可能烧电机。对课程设计和入门练习来说用接触器控制单相电机已经足够变频器属于进阶玩法。做这种项目我个人的体会是不要只看重把程序调通那一瞬间的成就感要把每个设计决策背后的理由想清楚。为什么停止按钮要用常闭为什么正反切换要停 2 秒为什么排水要等低水位断开再延时这些看起来很小的点才是 PLC 控制里真正值钱的经验。洗衣机这个项目我做了三版第一版勉强能跑第二版步进指令写顺了第三版才把故障处理和暂停逻辑补完整。每一次修改都在加深对时序、互锁、复位的理解。如果你手头有旧洗衣机强烈建议把它拆了直接用小 PLC 去控制真实的电机和水阀只有亲眼见过接触器火花、亲耳听过电机反转时“咯噔”一响你才算真正把这套基本功刻进肌肉里。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑