用PLC和组态王给洗衣机换脑:顺序控制系统实战

发布时间:2026/9/9 6:38:25
用PLC和组态王给洗衣机换脑:顺序控制系统实战 很多人可能觉得洗衣机就是个日用家电顶多拆开来换换电机电容跟PLC八竿子打不着。但如果你把一台普通波轮洗衣机当成一套典型的顺序控制系统来看它其实包含了电机正反转、水位检测、定时控制、状态切换这些在工业现场天天遇到的基本逻辑。我这次直接用PLC和组态王把一台旧洗衣机重新写了一套控制系统整个过程做下来相当于用最小成本把工业自动化的核心链路完整走了一遍。这篇手记就是把整个项目的动机、选型、编程、组态和调试过程原原本本记录下来给正在学PLC或者想找个练手项目的朋友一个完整的参考。1. 为什么非要用PLC给洗衣机“换脑”项目动机与方案对比1.1 原装控制板让我很头疼家里那台用了七八年的波轮洗衣机故障从偶尔不脱水发展到洗衣中途死机拆开后盖一看控制板上的继电器触点已经烧得发黑单片机那块板子上有几处电容鼓包。去售后问了一圈换一块原装控制板要两三百块而且订货还得等。更让我不爽的是这块板子的逻辑是封死的洗漂脱次数、每次脱水时间全是固定参数想调都没法调。我当时就在想既然洗衣机本质上就是“进水-洗涤-排水-脱水”的循环状态机为什么不用PLC把这块板子替代掉手头正好有一台闲置的三菱FX3U系列PLC加上组态王做一个监控画面这样不仅能让洗衣机重新转起来还能实时看到每一道工序的状态。1.2 三种改造方案的取舍在动手之前我认真比较了三条路线。第一种修原板或者买通用洗衣机控制板。这条路最简单但问题是通用板的程序逻辑同样固定而且洗衣机控制板的接口五花八门买到手未必能直接匹配原来的水位开关和电机改起来也麻烦。这种方式没有任何学习和扩展价值只能算是维修。第二种用Arduino或者STM32自己写控制程序。这条路灵活性很高网上也有不少“单片机控制洗衣机”的案例。但它有几个很现实的麻烦一是单片机系统的IO隔离和抗干扰需要自己设计洗衣机电机启停瞬间的浪涌很容易让单片机死机二是调试的时候没有梯形图这种直观的监视手段程序跑到哪里全靠串口打印三是如果想做一个人机界面又得去折腾屏幕和触摸屏驱动工作量直线上升。第三种用PLC加组态王。PLC的继电器输出直接驱动洗衣机的进水阀、排水阀和电机梯形图把状态机逻辑写得清清楚楚在线监视可以随时看到哪一步在执行、哪个输入信号没到位。组态王直接通过串口或者以太网和PLC通信把水位、当前工序、剩余时间都画在电脑屏幕上顺便还能记录历史数据。这套系统和工业现场的真实架构完全一致做完这台洗衣机相当于把一个微型DCS系统从头到尾跑通了一遍。对比下来第三条路无论从可维护性、调试便利性还是学习价值上都是最优解。成本上PLC是现成的组态王用开发版或者学习版除了线材和几个开关继电器几乎没有额外开销。1.3 改造后的系统架构整个系统采用典型的“上位机下位机”两层结构下位机三菱FX3U-32MR负责所有输入采集和输出驱动。输入包括启动按钮、停止按钮、水位开关高/中/低、门盖开关输出包括进水阀、排水阀、洗涤电机正转、洗涤电机反转、脱水离合器。上位机组态王通过串口FX3U的编程口转232与PLC通信。组态王负责状态显示、工序流程动画、手动操作按钮、历史报表和报警记录。结构不复杂但五脏俱全。电气回路、PLC程序、上位机组态、通信调试、故障排查这几个方向全部涉及作为练手项目再合适不过。2. 硬件选型与I/O分配动工之前必须想清楚的事2.1 PLC型号确认与外设接口我用的三菱FX3U-32MR是继电器输出型这一点很关键。洗衣机里最大的负载是洗涤电机普通波轮洗衣机的电机功率在120W到200W之间堵转电流可能达到三四安培。FX3U继电器输出的触点容量是2A/250VAC直接驱动电机会有触点寿命风险所以我没有让PLC直接接电机而是让PLC输出驱动中间继电器再由中间继电器的触点去控制电机的运转电容切换。这里要特别提醒PLC的晶体管输出和继电器输出在驱动感性负载时的处理方式完全不同。继电器输出是机械触点通断瞬间会产生电弧感性负载电机绕组、电磁阀线圈断电瞬间的反向电动势会在触点上拉出火花。加中间继电器不只是为了扩流更重要的是把PLC的触点从电机这种大电流感性负载中隔离出来让维修和更换成本都更低。实际接线时我在每个PLC输出点对应的中间继电器线圈两端并联了续流二极管直流回路或者RC阻容吸收交流回路这样可以有效抑制反电动势对PLC输出触点的冲击。这一步很多初学者会忽略等触点烧蚀了才后悔。2.2 洗衣机原机部件的改造利用原来的洗衣机机械部件基本都可以保留只需要把原控制板卸下来把各个执行器的控制线引出来接到继电器上。进水阀。原机进水阀是220V交流电磁阀两根线单向导通。我把它接到一个中间继电器的常开触点上由PLC输出控制。排水阀。同样是220V交流电磁阀但排水阀和离合器往往是一体的——波轮洗衣机的排水阀在排水的同时会拉动离合器让减速离合器切换到脱水状态。这时候要特别留意排水阀的动作时序如果排水阀没有到位离合器没有完全切换脱水时波轮会跟着转衣物会绞在一起。洗涤电机。波轮洗衣机的电机是单相电容运转异步电机通过改变启动绕组的接法来实现正反转。原控制板用了两个双向可控硅或者继电器分别切换正转和反转。我保留了这个思路用两个中间继电器的常开触点分别控制电机的正转和反转回路。要注意的是正反转切换时中间必须有一个延时不能同时导通——一旦正转和反转继电器同时吸合相当于电源短路。水位开关。原机用的是机械式气压水位开关三根线公共端、高水位触点、低水位触点。这个开关本质上是一个压力传感器加机械触点当水位上升推动气囊气压变化时内部的膜片会推动触点动作。用PLC读取时公共端接PLC的COM端高水位和低水位触点分别接两个输入点。因为触点是干接点PLC这边用漏型接法公共端接24V输入点接开关的一端接法上需要注意。门盖开关。原机门盖开关是一个常开触点门盖合上时闭合。这个信号接入PLC输入在脱水阶段必须检测到门盖闭合才允许启动脱水这是安全逻辑的重要组成。2.3 I/O分配表与接线图输入点功能说明X0启动按钮常开按下接通X1停止按钮常闭串联断开即停X2高水位信号水位到达高水位时接通X3低水位信号水位低于低水位时断开X4门盖开关门盖闭合时接通输出点功能说明Y0进水阀通过中间继电器控制Y1排水阀通过中间继电器控制同时拉动离合器Y2电机正转通过中间继电器切换电容回路Y3电机反转通过中间继电器切换电容回路Y4蜂鸣器程序结束报警提示I/O点没有占用太多总共5个输入、5个输出FX3U-32MR绰绰有余。剩下的大量空余点位留着以后做扩展比如再加一个温度传感器做热水洗。接线图在这里就不画详细的了核心原则是每一个输出点都经过中间继电器隔离PLC的COM端和外部电源的隔离要做好控制回路的24V直流和动力回路的220V交流在走线上要分开不要捆在一起。3. 洗衣机控制程序的核心逻辑状态机是怎么在梯形图里落地3.1 从流程到梯形图的转换思路洗衣机的控制逻辑说复杂也复杂说简单也简单。我拆解成如下几个状态待机状态所有输出关闭等待启动指令。注水状态进水阀打开水位检测选中一个目标水位标准洗选高水位经济洗选中水位。洗涤状态电机交替正转反转每次正转1.5秒、停0.5秒、反转1.5秒、停0.5秒。洗涤总时间可设定我设了标准洗15分钟、快速洗5分钟两个档位。排水状态排水阀打开等待水位降到低水位以下。脱水状态排水阀继续打开离合器切换电机单向连续旋转转速由电机本身特性决定波轮洗衣机的脱水转速比较低原机电机在脱水状态通过电容切换实现高速旋转这个在继电器接线时已经做了区分所以PLC不需要做调速。漂洗状态注水-洗涤-排水-脱水的循环我设了两遍漂洗。结束状态蜂鸣器响等待用户开门取衣。这个流程放到梯形图里最直观的实现方式就是“步进梯形图”也就是三菱的STL指令SFC编程。STL指令本身就是为了解决这类顺序控制问题而设计的每一步用一个状态继电器S来表示条件满足时就从当前步跳到下一步输出在每一步里单独控制。相比用M中间继电器加自锁互锁的“老式写法”STL的可读性和可维护性高出很多在线监视时直接能看到当前落在哪一步。3.2 步进梯形图的关键设计我用S0表示初始状态S10-S17表示各工序步。程序里最核心的部分有三个第一个是启停逻辑。启动按钮X0的上升沿触发M0运行标志M0作为整个流程的总使能。停止按钮X1是常闭触点串联在公共回路里一旦断开M0复位所有输出关闭程序回到S0。这个设计符合工业设备的安全习惯停止优先急停断路。第二个是水位判断。进水时我根据洗涤模式选择目标水位。高水位选择X2作为跳转条件中水位就是把高水位触点换成中水位触点。这里有个细节机械水位开关在高水位时低水位触点可能也是接通的所以程序里不能只看低水位而是要按水位到达目标水位来处理。跳转指令用AND X2或者AND X3确保水位到了才进入下一步。第三个是电机正反转的互锁。Y2和Y3在任何情况下都不能同时为ON。我在梯形图里把Y2的常闭触点串在Y3的输出回路里同时把Y3的常闭触点串在Y2的输出回路里这就是最基础的互锁。另外在STL状态切换时即使状态步转移了输出也可能因为线圈保持而继续导通所以每一步的OUT指令之前都需要确认上一步的输出已经复位。STL指令本身有“跳步自动复位”的特性也就是离开某个状态步时该步内的线圈输出会自动复位这一点比用M自锁的方式安全很多。3.3 定时器和计数器的实际用法洗涤过程需要大量的定时。三菱FX3U里有T0-T199是100ms定时器T200-T245是10ms定时器。洗涤正转1.5秒我用了T0K15100ms*151.5s反转也是同样的定时。停0.5秒用T1K5。在STL步里每个定时器独立使用互不干扰。洗涤次数的控制用了计数器C0。我设定了一个洗涤循环内的正反转次数比如正转停转算一个周期循环20个周期后进入排水。计数器的复位要在离开洗涤步或者进入下一步时执行否则计数会累积到下一轮洗涤中导致洗涤时间越来越长。还有一个容易踩坑的地方排水步的结束条件不能只看排水阀打开的时间而要看水位是否真正降到了低水位以下。如果用定时器估算排水时间一旦排水管堵塞或者排水阀卡住程序还是会继续往下走水就可能溢出来。所以排水步的跳转条件使用了X3低水位信号的常闭触点——低水位信号断开才说明水已经排得差不多此时再延时几秒确认排空然后进入脱水。这个逻辑虽然多花了十几秒但可靠性提升了一大截。4. 组态王上位机开发从画面组态到数据联动4.1 创建工程与设备通信配置组态王这部分我用的版本是6.556.53也可以大体操作逻辑一致。安装过程中最容易遇到一个坑如果系统里装了旧版本或者杀毒软件拦截运行时会提示“创建协议组件失败”或者安装时提示explorer.exe与.cab不匹配。这些问题大概率是权限不够——组态王安装和运行都必须以管理员身份运行而且最好关闭杀毒软件。解决办法是右键“以管理员身份运行”安装包装完后同样以管理员身份运行开发系统和运行系统。新建工程后第一步是配置设备。在工程浏览器的“设备”节点下选择“新建”驱动类型选“PLC”里的“三菱FX系列编程口”。通信方式如果是FX3U自带的编程口圆头8针需要一根FX-USB-AW或者USB-SC09-FX的编程线在组态王里选串口波特率9600数据位7停止位1偶校验——这是三菱编程口默认参数。如果PLC带了以太网模块比如FX3U-ENET组态王也可以通过TCP/IP方式通信但编程口方式最省事一根线就够。设备地址的设置要格外注意。三菱FX3U的编程口协议里设备地址默认是0这个和PLC的站号设置无关如果发现通信不上先检查设备地址是不是0。4.2 变量定义与画面组态组态王里所有需要和PLC交换的数据都要定义成I/O变量。我定义了以下变量组态王变量关联PLC地址数据类型用途运行标志M0位洗衣机总运行状态当前工序D0整型当前状态步编号0待机/1进水/2洗涤/3排水/4脱水/5结束洗涤剩余时间D1整型洗涤倒计时秒进水阀状态Y0位显示进水阀开闭排水阀状态Y1位显示排水阀开闭电机正转状态Y2位显示正转电机反转状态Y3位显示反转手动/自动模式M100位切换手动调试和自动运行注意一点组态王里的I/O变量要勾选“允许DDE访问”和“变化时更新”如果变量类型选错比如把Y0读成寄存器而不是位画面上的状态就会一直不变或者乱跳。画面组态这部分我的思路是这样的画一个洗衣机的侧视图滚筒部分用一个矩形框表示进水阀画在左上角排水阀画在底部电机放在下方。正常运行时进水阀开时矩形框里的水位线逐渐上升用一个垂直填充的矩形表示水位填充高度关联到水位传感器变量或者工序状态洗涤时电机图标交替闪烁排水时水位下降脱水时滚筒图标旋转。这些动画效果在组态王里都是通过“动画连接”完成的给每个图形对象选一个属性填充高度、旋转角度、可见性关联到对应的I/O变量。为了提高预警能力我在画面里加了一个故障报警区电机过载通过PLC里读到的X5热继电器信号、门盖未关X4断开但没有启动信号都会在画面里弹红色报警。组态王的“实时报警”功能可以直接把PLC里M100-M199范围内的报警位变量映射为报警事件在报警窗口里显示。这样洗衣机运行过程中一旦有问题电脑屏幕上就会弹出报警提示不用蹲在洗衣机旁边看指示灯。4.3 历史数据报表的实现组态王设置历史数据报表很多新手会卡住我发现关键是两个地方历史库配置和报表控件的查询脚本。历史库配置在“工程浏览器”的“数据库-历史库”节点下。把所有需要记录的数据变量当前工序、洗涤剩余时间、温度如果有、运行标志都加到历史库里记录周期设置成1秒或者5秒。如果不添加进历史库报表控件里是查不到数据的这是最容易忽略的一步。报表控件方面组态王自带了一个“KVReport”报表控件在画面工具箱里拖出来即可。运行时通过脚本把历史库里的数据查询出来填充到报表的单元格里。最简单的做法是用“历史数据查询”菜单自带的模板设置起止时间和查询变量点查询就会自动填充数据。如果你需要自定义报表格式比如加表头、汇总可以写脚本用ReportSetHistData函数动态查询例如ReportSetHistData(0, 当前工序, 2024-01-01 08:00:00, 2024-01-01 09:00:00, 2);这个函数的意思是在0号报表里查询名为“当前工序”的变量在指定时间段内每2秒取一个值。用类似的脚本可以自动生成一张当天运行记录表对分析洗衣机的使用频率和单次洗涤时间很有帮助。4.4 手动调试界面为了调试方便我做了一个手动调试页面。画面里放若干按钮分别对应Y0-Y4的置位和复位。在PLC程序里我预留了M100作为“手动/自动”模式切换。当M100为ON时自动流程被旁路PLC只执行手动模式下的控制指令当M100为OFF时执行自动洗涤流程。这个设计在调试阶段帮了大忙——电气接线完成后先用手动模式验证每个执行器的动作是否正确再切回自动模式跑整个流程问题定位快得多。5. 联调阶段的坑问题排查链路完整复盘5.1 启动按钮按下没反应输入信号捉迷藏第一次上电调试按下启动按钮PLC没有反应。打开在线监视发现X0指示灯根本没亮。我用万用表量启动按钮的两端电压有24V但按下按钮后电压没有变化。这才意识到启动按钮那一侧是原洗衣机的老按钮触点已经严重氧化按下时接触电阻很大相当于断路。换了一个新的自复位按钮后X0指示灯正常亮了。这个问题的排查思路是输入信号没到PLC先量按钮供电、再量触点通断、最后查接线和PLC输入端。顺序不能反不然容易绕圈子。5.2 进水阀嗡嗡响但不进水阀芯卡滞进水阀通电后有交流声但水不进来。这种情况一般是阀芯被异物卡住或者阀内水垢严重。拆开进水阀的滤网发现里面有一小块砂石清除后恢复正常。工业现场里电磁阀卡滞也是常见故障处理思路是一样的先断电、拆阀、清堵、复装、试压。PLC程序里最好给进水阀加一个超时保护——如果进水超过10分钟水位还没到就关闭进水阀并报警防止阀卡导致漏水。5.3 组态王读不到PLC数据通信协议参数不匹配组态王画面全部正常但变量值都是0。排查环境PLC端通信设置没问题编程线也能下载程序说明物理链路是通的。我到组态王的设备测试窗口去测试提示“通信超时”。检查设备配置发现串口参数里选了“无校验”而三菱编程口默认是“偶校验”。改过来后再测试数据正常。这个问题在组态王驱动里非常常见——通信协议参数必须和PLC实际设置完全一致差一个校验位都连不上。还有一个很关键的点组态王和三菱PLC通信时设备地址默认是0。如果PLC侧的“站号设置”不是0通信也会失败。FX3U的编程口没有本机站号的概念但在组态王设备属性里这个“0”不能乱改。5.4 正反转切换瞬间PLC重启干扰问题的排查有一次测试时电机正转切换反转的瞬间PLC直接重启了。这个现象非常典型属于强烈的电磁干扰或者电源跌落。排查的第一步是量PLC电源电压。用示波器万用表也行观察PLC 24V电源端发现在电机切换瞬间电压有几十毫秒的跌落跌到20V以下导致PLC掉电重启。问题的根源是PLC电源和电机电源共用了同一个开关电源的24V输出电机启停瞬间的大电流导致开关电源输出电压跌落。处理方案给PLC增加独立的24V开关电源或者至少在PLC电源输入端并接一个大容量的电解电容比如1000uF/50V来维持电压。我在PLC的L和N端前端加了一个滤波器同时把电机动力线和控制线分开走线没有直接交叉问题解决。这个案例提醒我控制回路的电源稳定性是所有自动化系统的生命线宁可电源多花钱也不能让干扰进到PLC里。5.5 脱水时门盖开关误触发脱水过程中滚筒高速旋转机身的震动导致门盖开关的触点间隙瞬间断开再闭合程序检测到门盖断开立即进入停止流程。这在程序逻辑上是安全的但用户感受很差——明明门关得好好的却经常被强制停止。解决思路有两种。一种是在门盖开关信号上加硬件延时并联一个小电容但这会让安全信号变迟钝不推荐。另一种是在程序里加“门盖信号确认延时”——门盖断开信号必须持续200ms以上才判定为真正的开门短暂的震动引起的误触发会被过滤掉。我用T10/K2定时器做了这个延时实测再也没出现过脱水中途停机的现象。这个逻辑在工业安全里也有对应急停信号或者安全门信号通常需要双通道确认并且要采用“脉冲捕捉持续判断”的方式来过滤抖动。不过要注意安全相关的过滤延时不能加得太长毕竟涉及人身安全200ms已经是上限了。6. 从洗衣机到工业现场这个项目教会我的几件事整套系统做完洗衣机从按下启动按钮开始自动完成进水、洗涤、排水、脱水的全流程组态王画面上可以看到每一步的实时切换。洗衣机的“最强大脑”项目算是完整收官。回顾整个项目除了PLC编程和组态王操作本身我最大的收获是理解了顺序控制系统的工程化落地方法。第一状态机的思维方式比任何指令技巧都重要。不管是写STL程序还是在组态王里做画面心里要始终清楚当前系统处于哪个状态、满足什么条件会进入下一个状态、异常时能回到哪个安全状态。状态清晰了程序结构自然清晰。第二I/O规划的颗粒度决定了项目的可维护性。预留的每个输入输出点、每一路隔离、每一个指示灯在调试阶段都会变成救命稻草。尤其是输出隔离千万不要省。第三上位机和下位机联调时先分了通信、再分变量、最后分逻辑。组态王通信不上就先测试设备变量对不上就逐项核对变量名和地址逻辑乱了就靠PLC的在线监视和组态王的动画逐条比对。最后再说一个小技巧做这类改造项目时别急着把原洗衣机的接线全部剪掉。先拍照、做标记、画出原始接线图再动手拆。我在改线过程中就因为最开始拍了照片后来好几处拿不准的地方都能回去翻原图对应少走了很多弯路。这台洗衣机现在已经稳定跑了几个月日常使用完全正常而且通过组态王我看到它每次洗衣服的精确耗时还能按需调整水流节奏和漂洗次数——这是原厂控制板永远给不了的自由度。如果你手头也有闲置PLC和旧家电完全可以照着这个思路给自己的设备升级一下。不用贪大求全从一个简单的顺序控制开始把状态机、定时器、通信、组态这些基本功练扎实这套方法放到任何工业项目里都能直接套用。

相关新闻