
做洗衣机控制这类项目我建议先把硬件选型和软件分工想清楚再动手写程序。三菱FX2N是经典的小型PLC资料多、指令好上手组态王又是国产组态软件里用得最广的那一批两者搭配做一套自动洗衣机控制系统既能覆盖PLC基本逻辑训练又能把上位机监控、报警、趋势曲线这些工业现场的常用功能串起来。下面这套方案是我在类似项目里跑通的完整流程从I/O分配、梯形图状态切换到组态王画面绑定、串口通信调试逐步拆开讲跟着走基本能复现。1. 方案整体设计与选型思路1.1 控制需求拆解洗衣机控制的本质是一个顺序控制问题进水、洗涤、排水、脱水、再进水漂洗、再排水脱水最后鸣笛提示。这个流程看起来简单但真正写PLC程序时你会发现它藏了三层东西。第一层是条件判断。进水阀能不能开取决于当前水位处于什么状态排水阀能不能关取决于水位是否已经降到位洗涤电机能不能转取决于有没有开门信号、有没有急停。这些都是PLC最擅长的开关量逻辑。第二层是时间控制。洗涤要转多少分钟正转多少秒、停多少秒、反转多少秒漂洗要循环几次脱水要持续多久这些都要靠定时器和计数器去组织。洗衣机不是一个连续变化的过程控制它更像一个“按时间表推进”的离散状态机每一步有明确的进入条件和退出条件。第三层是上位机监控。组态王在这里并不参与直接控制它负责把PLC的状态读上来显示当前运行到哪个阶段、水位怎么样、电机是否运转同时把操作指令下发下去。真正干活的是PLC组态王是“驾驶室仪表盘”。1.2 三菱FX2N加组态王的组合逻辑很多人问现在新PLC那么多为什么还要用三菱FX2N。我的看法是做教学演示和轻量工业项目FX2N的性价比和资料完整度还是很有优势的。FX2N系列虽然已经停产但市面上二手拆机件、培训套件存量巨大而且三菱FX系列指令体系在FX2N、FX3U之间是一脉相承的学完FX2N再切FX3U几乎零成本。梯形图编程里最常用的基本指令、定时器、计数器、比较指令、区间比较、步进指令FX2N全部支持。对于洗衣机这种I/O点数不多、逻辑以顺序控制为主的场景FX2N根本不需要扩展模块一台主机就能搞定。组态王这边就更简单了。它是国产组态软件里覆盖面最广的产品之一中文界面友好工程向导成熟和三菱FX系列有现成驱动。你用组态王连接FX2N不需要自己写通信协议只需要在设备配置里选好型号、串口和波特率然后把变量绑定到PLC的寄存器和线圈地址上就行。如果换成西门子S7-200 SMART加WinCC的方案也不是不行但成本会高一些而且组态王对三菱的驱动调试要比西门子更直观网上能搜到的案例也多。对做毕设、课程设计或者小型实训项目的人来说三菱FX2N加组态王是最稳妥的组合。1.3 系统整体框架与分工整套系统可以拆成三层来看。底层是现场设备包括进水阀、排水阀、洗涤电机、加热器、水位开关、急停按钮等。这些设备通过继电器或接触器接到PLC的输出点上传感器信号接到PLC的输入点上。中间层是三菱FX2N PLC它运行梯形图程序执行所有顺序控制逻辑和安全联锁。PLC输出点直接驱动中间继电器再由中间继电器触点控制接触器避免大电流负载直接冲击PLC输出端子。上层是组态王监控画面通过串口连接到PLC的编程口采集并显示D寄存器、M线圈的值。操作员在组态王上点击“启动”按钮实际上是把M0线圈置1PLC扫描到这个信号后启动洗衣流程PLC运行时把当前状态写到D0寄存器组态王读D0并在画面上切换流程指示灯。这套分工的意义在于即使上位机死机或者通信中断洗衣流程依然能按PLC内部逻辑正常运行不会因为监控画面卡顿而停掉现场设备。这是很多初学者容易忽略的一点——组态王只是眼睛和手PLC才是大脑。2. 硬件配置与接线要点2.1 I/O点表与硬件清单先列一套我在实际项目中用到的配置。洗衣机控制系统用不到太多点数一台FX2N-32MR基本够用16点输入、16点输出按下面这张表分配信号方向地址名称功能说明输入X0启动按钮常开点按下启动洗衣流程输入X1停止/复位常开点停止并复位到初始状态输入X2高水位开关水位到达高位时触点闭合输入X3低水位开关水位在低位以上时触点闭合输入X4急停按钮常闭点断开即停止输出输出Y0进水阀输出为ON时电磁阀打开输出Y1排水阀输出为ON时排水阀打开输出Y2洗涤电机正转输出为ON时电机正转输出Y3洗涤电机反转输出为ON时电机反转输出Y4加热器输出为ON时加热选配输出Y5蜂鸣器流程结束鸣响输出Y6运行指示灯洗涤过程中常亮硬件清单方面除了PLC本体还需要一个24V开关电源给PLC输入口、传感器和中间继电器供电进水阀和排水阀选用220V电磁阀中间再加一组继电器隔离洗涤电机建议用单相电容启动电机或者三相电机配合接触器控制正反转必须通过两个接触器实现不能用两个输出点直接接电机两端的方式。水位检测我这套用的是开关量方案高水位开关装在桶体上部低水位开关装在下部水位到达后浮球带动微动开关动作。水位开关选两线制常开型即可一根线接PLC输入公共端一根线接X点。2.2 水位和温度检测方式的选择水位检测有两种思路正好对应两种控制复杂度。第一种就是我上面说的双开关方案便宜、结构简单、程序也不复杂。程序设计时只需要判断X2和X3的状态进水过程中X2闭合说明水位到位停止进水排水过程中X3断开说明水位低于低位认为排空。但缺点是只能检测两个固定水位点没法做连续水位显示。第二种方案是接模拟量模块比如FX2N-2AD接一个液位变送器把4-20mA信号转换成数字量。组态王画面里可以实时显示水位百分比程序里也能用比较指令设置任意进水高度。项目组如果要求“水位连续可调”建议直接用模拟量方案。两种方案的取舍很简单能做开关量就不上模拟量模拟量成本高、调试麻烦但数据显示效果好。温度控制是选配项。如果要做带加热的洗衣机可以在排水阀和进水阀之外加一路加热器输出Y4温度信号用PT100加变送器进模拟量模块。控制逻辑用比较指令判断温度低于设定值时开启加热高于设定值时停止加热。需要说明的是FX2N本身没有PID指令如果要做精确恒温控制要么在程序里写简单的滞环比较要么换FX3U系列的PID指令或者直接外接温控仪表由温控仪表的继电器触点给PLC一个“加热完成”信号。2.3 接线与抗干扰注意事项接线这块有几个容易踩的坑我一个一个说。输入回路的公共端S/S要接到24V电源的正极或者负极取决于三菱输入类型。FX2N是漏型输入一般把S/S接24V正极传感器开关一端接X点另一端接0V。如果你把公共端接反了输入信号怎么都不会亮。输出回路必须注意隔离。PLC输出端子不直接接接触器和电磁阀而是先驱动中间继电器中间继电器触点再控制220V交流接触器。这样做的好处是PLC输出端只承担很小的继电器线圈电流触点寿命长而且把PLC和强电侧隔离了降低干扰。正反转互锁是洗衣机控制里的硬要求。电机正转接触器和反转接触器绝对不允许同时吸合否则就是相间短路。梯形图里要用互锁触点接触器主触点上也要有电气互锁两边都做不能只靠程序。电源走线方面24V开关电源尽量和220V动力线分开走至少不要走同一个线槽。信号线用屏蔽双绞线屏蔽层在PLC端单点接地。我见过现场因为动力线和信号线绑扎在一起导致PLC输入误动作的案例洗衣机电机启动瞬间电流冲击很大这个问题不能大意。3. 三菱FX2N梯形图程序编写3.1 用步进指令组织洗衣机工作阶段洗衣机程序我强烈建议用三菱的步进梯形图指令STL来写而不是全部用一堆定时器加辅助继电器硬堆。步进指令的好处是结构清楚每一个状态对应一个工序状态之间的切换条件明确写在状态转移线上。程序调试时看当前活动在哪一个S状态一眼就知道洗衣机卡在进水还是排水排查效率高很多。我定义的状态分配如下状态寄存器对应工序S0初始状态S20进水S21洗涤S22排水S23脱水S24漂洗进水S25漂洗排水程序启动时用区间复位ZRST指令先把所有状态复位然后置位S0。按下X0启动按钮条件满足后从S0转移到S20进入进水工序。这里启动按钮用的是脉冲上升沿或者用组态王下发的M0线圈程序里用PLS或LDP指令取它的上升沿避免长按按钮导致重复触发。整个流程可以这样走S20进水到高水位转移到S21洗涤洗涤完成后转移到S22排水排空后转移到S23脱水脱水完成回到S20再次进水实现漂洗漂洗次数到后最终脱水并结束。3.2 洗涤和漂洗定时逻辑洗涤工序内部是典型的循环定时组合。洗涤电机不能长时间连续正转一般电机是正转15秒、停3秒、反转15秒、停3秒这样循环运行。具体定时器规划如下T0正转时间设定K150也就是15秒T1正转停止间隔K30T2反转时间K150T3反转停止间隔K30T4整段洗涤总时间K12000即20分钟程序思路是在S21状态下用T4作为总计时器T4未到时依次触发T0到T3的循环。正转接触器Y2在T0计时期间保持输出T0时间到后切断Y2进入T1停歇T1结束后启动反转接触器Y3进入T2计时T2结束后切断Y3进入T3停歇T3结束后又回到正转如此循环。T4计时到整个洗涤阶段结束关闭所有电机输出转移到S22排水。漂洗阶段和洗涤的区别在于不添加洗涤剂所以程序可以复用洗涤逻辑只需要用计数器C0记录漂洗次数。比如设置C0为2次每次漂洗排水结束后计数一次计满后进入最终脱水。这里有一个细节值得注意定时器的触点比较多的时候不要把所有定时器都串在一个梯级里那样逻辑看起来会很乱。我的习惯是每个定时器单独占一个梯级输出逻辑单独放状态转移条件最后再汇总这样别人看程序也容易看懂。3.3 水位、排水与安全联锁进水和水位逻辑不复杂S20状态下Y0进水阀输出为ONX2高水位开关闭合后切断Y0转移到S21洗涤。这里要注意的是高水位开关的抖动水位刚到高位时浮球可能会有轻微抖动触点忽通忽断。实际调试时可以在程序中加一个延时X2闭合后延时500毫秒再判定到位用T10做这个判断。排水逻辑不是简单看排水阀打开就行。排水开始时Y1置ON程序要等待低水位开关X3断开说明桶内水位已经低于低水位。为了保险我习惯在X3断开后再延时3到5秒确保管路里的水基本排干净然后再关排水阀、进入脱水工序。同时要加排水超时保护。如果排水阀打开后120秒内低水位开关还没断开说明排水管路堵塞或者阀门故障程序要自动关闭排水阀并报警Y5蜂鸣器鸣响同时在D0寄存器里写入故障代码6。这个功能平时用不上但真遇到管路堵塞时能省很多事不会让电机带着大量水硬转。安全联锁方面首先是最关键的正反转互锁。Y2和Y3的输出梯级里要互相串入对方的常闭触点确保物理上不可能同时输出。另外程序扫描周期再快输出刷新也是同时的所以单靠程序互锁还不够接触器主回路也必须做电气互锁。急停按钮X4选用常闭触点接入PLC输入。常闭的好处是断线时PLC能识别为急停触发而不是一直认为按钮没按下。程序中急停信号作为所有状态转移的禁止条件急停触发后立即ZRST复位所有运行状态关闭所有输出等待人工复位。3.4 给组态王预留的通信寄存器上位机要显示状态、下发指令必须在PLC程序里规划好通信寄存器。我一般会在程序开头做一段“通信映射区”把运行状态和重要标志集中放到固定地址。规划和含义如下地址类型含义M0线圈上位机下发启动命令M1线圈上位机下发停止命令D0数据寄存器当前状态码0初始1进水2洗涤3排水4脱水D1数据寄存器当前故障码0无故障1排水超时D2数据寄存器洗涤总剩余时间单位秒M10线圈当前进水阀状态用于画面显示M11线圈当前排水阀状态用于画面显示M12线圈当前正转状态M13线圈当前反转状态程序里每个状态转移时用MOV指令把对应的数字写入D0。比如从S20进入S21时MOV K2到D0组态王读到2就显示“洗涤中”。D2的值可以从T4的当前值换算过来方便画面上显示剩余时间。这块映射区相当于PLC和组态王之间的“协议文档”两边对好了再写画面就不会出现变量对不上的问题。我在项目里吃过亏一开始没规划程序写一半再补M点改起来牵一发动全身。建议动手写梯形图之前先把这张表列好后面所有工作都以它为准。4. 组态王监控画面制作与变量对接4.1 设备连接与通信参数设置组态王连接三菱FX2N常见的物理链路是计算机串口或USB转串口接SC-09编程电缆电缆另一头插到FX2N的编程口。如果是USB转232的线需要先把USB驱动装好确认电脑设备管理器里出现的是COM几口这个往往被忽略。打开组态王新建工程后在工程树的“设备”里选择“COM1”或对应串口然后在设备配置向导里选择驱动驱动列表里找到“PLC”下的“三菱FX2N”。设备命名随便取一个比如FX2N_PLC注意后面变量绑定和设备关联都要用它。通信参数要和三菱FX2N编程口默认格式一致。FX2N编程口默认是9600波特率、7位数据位、偶校验、1位停止位。组态王设备配置界面里对应设为波特率9600、数据位7、校验偶、停止位1不要选成8位数据位。通信超时和尝试次数可以先保持默认如果通信不稳定再调。设备地址、编号之类的一般保持0或1即可因为FX2N编程口不带站号概念。这里经验是如果你用GX Developer或GX Works2软件能正常读PLC程序但组态王连不上先检查是不是两个软件同时占用串口把编程软件关掉再试。4.2 定义变量并绑定PLC寄存器组态王数据词典里的变量就是把PLC地址包装成画面能用的对象。定义变量的地方在工程树的“数据词典”点新建变量变量类型有很多选择和PLC通信主要用I/O离散、I/O整数两种。启动按钮用I/O离散变量连接设备选FX2N_PLC寄存器填M0数据类型选Bit读写属性选读写。当前运行状态用I/O整数变量寄存器填D0数据类型选Short或Int读写属性选只读。D0是16位数据寄存器FX2N的数据寄存器最大范围就是-32768到32767洗衣机的状态码都是小数字所以用Short没有问题。组态王里寄存器的写法需要注意三菱FX系列驱动下D寄存器直接填D0M直接填M0X输入点填X0不需要加“%MW”这类前缀。很多按西门子习惯来的人会在这一步卡住把D0写成了%MD0驱动根本识别不了。变量建好之后关键是要理解变量的扫描周期。I/O变量默认按采集频率刷新一般设500毫秒到1秒。如果想让按钮响应快一点可以把采集频率设到200毫秒。但不要设得太快串口通信带宽有限变量太多时会排队转速上不去画面反而显得卡。4.3 画面设计与动画连接画面设计我建议分两块一块是流程总览上面画洗衣机的示意图包括水桶、进水管、排水管、电机另一块是操作面板放启动、停止按钮和运行状态指示灯。图库里的电机图可以直接拖进来然后给它加动画连接。选中电机图在“动画连接”对话框里关联Y2正转变量和Y3反转变量可以设置旋转角度和旋转方向。正转时图向右转反转时向左转停止时静止这样现场状态一目了然。进水阀的动画可以做得更直观一点。用两个图形叠在一起下层是灰色管道上层是蓝色水流蓝色水流的“填充”动画连接M10变量当M10为1时填充高度从0到100%模拟水流通过的效果。水箱水位显示可以用一个矩形加“填充”动画关联模拟量水位变量。如果用开关量方案没有模拟量那就用两盏指示灯表示高水位和低水位。如果需要显示连续水位就必须要上模拟量模块了画面里会漂亮很多。启动和停止按钮的脚本写法是这样的在按钮的“按下时”命令语言里写“\本站点\启动 1;”在“弹起时”写“\本站点\启动 0;”。这样按下瞬间M0为1松开后M0为0PLC程序里用M0的上升沿启动就不会出现按钮按住不放导致重复触发的问题。4.4 报警与运行记录组态王自带的报警系统可以直接用不用自己画故障显示框。在数据词典里给故障码变量D1定义报警属性报警值大于0时触发报警。报警文本写“洗衣机故障请检查排水”报警类型选“紧急故障”。这样一旦PLC写入故障码组态王报警窗口就会弹出来同时可以联动声音。运行记录这块如果想简单一点可以利用组态王的历史趋势曲线功能把D2剩余时间变量加进去画面上放一个历史趋势曲线控件就能看到每次洗衣过程的时间分布。再进一步可以定义“运行记录”变量组用报表控件定时打印导出当天启动次数、故障次数。对教学演示和验收答辩来说这些功能比你现场拍视频有说服力得多。另外组态王支持操作员权限可以在系统配置里启用用户登录给启动按钮设置优先级。操作员级别的人可以点击启动停止管理员可以修改设定时间和报警参数。这个小功能不复杂但往往评委老师会问做上去是加分项。5. 调试过程与常见故障排查5.1 通信连不上的排查顺序组态王和FX2N通信连不上是这套系统里最常见的故障我总结了一套固定排查顺序。第一步查物理链路。先看串口线有没有插紧SC-09线是否完好USB转232线在设备管理器里是否正常识别。很多USB线接触不良用GX Developer软件试一下能不能读PLC程序能读说明链路没问题。第二步查串口占用。打开设备管理器看当前串口号和组态王设备配置里的串口号对上。如果组态王里选了COM1而USB线是COM5那么肯定连不上。这一步90%的问题是串口号不匹配设备管理器里改成COM1或者组态王选成COM5都可以。第三步查通信参数。三菱FX2N编程口默认9600、7、偶校验、1停止位组态王里要一致。有时候GX软件里改了通信格式比如波特率改成19200编程口断电后并不会保存新参数上电还是默认值但如果用了FX3U或者安装了通信模块情况又不一样。以实际读取到的参数为准不要想当然。第四步查变量和寄存器写法。设备能通信但某个变量始终显示0或闪烁多半是寄存器地址写错了。D0写成D00没问题M0写成M1就完全不是一回事。组态王里没有“数据块类型”的统一前缀三菱的就是D、M、S、X、Y按驱动说明填。我遇到过一次诡异的问题组态王一打开就掉线PLC面板上的通信指示灯狂闪但GX软件连接正常。后来查出来是组态王设备定义时把“通信超时”设成了200毫秒太短串口一忙就超时。把它改成1000毫秒后就好了。这个参数平时没人注意出问题时要想到它。5.2 工艺不动作的调试思路流程卡在某个状态不往下走是不能急着改程序的先判断是条件不满足还是输出没执行。第一步用GX Developer软件或者手编器在线监控PLC看当前停在哪一个S状态看X点和Y点的实时状态。比如卡在S20进水但Y0没有输出先看X4急停是不是没复位再看S20前面的转移条件是不是还保持着旧状态。第二步看传感器信号。水位开关这种机械触点最容易出问题浮球卡住、触点氧化、接线松动都会造成信号不变化。在线监控里X2一直不亮拿万用表量一下水位开关两端短接时PLC输入灯亮不亮就能快速定位是外部故障还是PLC输入口烧了。第三步查程序逻辑的循环死锁。比如洗涤状态结束后排水阀打开了但X3一直没断开程序就会永远停在排水等待状态。这可能是低水位开关安装位置太深桶里水根本排不到那么低的位置。实际项目中这种和机械安装相关的问题很多不是程序能解决的要调整传感器位置或者改排空判断逻辑。5.3 现场调试的几条安全经验调试阶段我给自己定的规矩就是能点动就不自动能空载就不带水。第一次上电测试时先不要放水手动把进水阀、排水阀、电机分别点动一次确认输出方向和实际设备对应。电机正转方向如果接反了程序里正转反转的名称就和实际相反到时候洗衣机转着转着就“跳舞”了。带水调试时必须保持手在急停按钮上。洗衣机漂洗阶段水花四溅如果电机转动时排水阀没关到位电机会带着水转电流会明显偏大接触器和继电器都可能发热。出现这种情况说明排水阀时序和电机时序没配合好应该先关闭电机再切换阀门状态。在线修改的时候也要小心。GX软件的在线监控支持强制输出调试时很方便但组态王画面同时也在刷新变量两边对着强制同一个点很容易把程序状态搞乱。我建议调试时组态王和GX不要同时在线改完程序下载后再开组态王测试画面避免“两边打架”。6. 这套系统还能怎么升级6.1 从FX2N迁移到新平台的考虑如果这套系统做完之后还想往工业现场方向走FX2N有点跟不上时代。FX3U是FX2N的直接升级选择指令兼容性很好梯形图程序基本上可以平移过去只要注意D区范围扩大、新增了一些特殊寄存器问题不大。FX3U自带高速计数和内置定位功能以后做步进电机控制也方便。国产PLC也值得考虑。汇川、信捷这些品牌的编程软件有不少是三菱指令风格FX2N的老程序迁过去会比迁西门子容易得多。而且国产PLC价格有优势技术支持也及时现在不少题目都用国产PLC替代了。我在写程序时依然用三菱风格的STL步进语法换平台时只需要重新翻译梯形图控制思路完全不变。6.2 组态监控向云平台扩展组态王做得再花哨本质还是局域网内的上位机监控。如果想在这个方向继续深入可以考虑把PLC数据送到云平台手机端远程看状态。FX2N没有以太网口需要加一个串口转以太网的网关比如有人使用的Modbus网关设备把PLC当从站接到现场交换机上上位机通过网络读取再用OPC UA协议对接云平台。现在很多项目都在讲OPC UA它能统一采集PLC、传感器、数控机床等设备的运行状态数据。你要是做了这个扩展整个系统就从一个单纯的课程设计项目变成了能对接MES、能远程监控的工业物联网雏形。我个人在实际操作中的体会是洗衣机这个题目虽然简单但它把顺序控制、定时器组合、通信映射、组态画面、安全联锁这些PLC应用里最常见的东西全串起来了。你把这个项目吃透做其他顺序控制类的题目比如红绿灯、抢答器、冷库监控思路都能直接复用。程序逻辑一定要在仿真里跑通了再上实物接线调试时宁可慢一点也不要带电乱改。这套系统的后续优化空间也很大我推荐后面重点打磨一下组态王的报警联动和趋势分析坚持做下来你对整套自动化系统的理解会上一个台阶。