基于三菱FX2N PLC的工业洗衣机控制系统设计详解
1. 项目概述:从一台洗衣机到一套工业控制系统的思考
干了十几年工控,从流水线上的机械手到大型的中央空调系统,大大小小的项目接触了不少。但每次有朋友或者刚入行的新人问我,想找个项目练手学PLC,我第一个想到的,往往还是洗衣机。别笑,这可不是让你去修家里的滚筒洗衣机,而是用PLC去设计一套完整的控制系统。这个项目麻雀虽小,五脏俱全,它几乎涵盖了工业自动化里最核心的几个概念:顺序控制、逻辑判断、定时计数、人机交互,甚至还能延伸到模拟量处理和简单的通信。对于“工控老马”我来说,带新人或者自己复盘基础,洗衣机程序都是一个绝佳的载体。
这次,我们就以一台典型的全自动波轮洗衣机为控制对象,使用在工控教育和小型设备领域非常经典的三菱FX2N系列PLC作为主控制器,来一次从零开始的系统设计详解。你可能会问,为什么是FX2N?现在不是有FX3U、FX5U甚至更先进的系列吗?原因很简单:FX2N的结构清晰、指令经典,学习资料极其丰富。把它学透了,其编程思想和逻辑架构可以无缝迁移到其他品牌甚至更高级的PLC上,比如你提到的西门子S7-1200、欧姆龙CP系列或者国产的汇川、信捷PLC。理解了这个“骨架”,再去看那些带复杂功能块、结构化文本(ST)的现代PLC,你会更有底气。
这个项目的目标,不仅仅是让洗衣机“能动起来”,而是要设计出一个稳定、可靠、易于维护和调试的工业级控制系统。我们会从控制需求分析开始,画出清晰的流程图,然后进行软硬件选型和地址分配,接着是核心的梯形图程序编写与调试,最后还会涉及到一些工程实践中才会遇到的“坑”和技巧。无论你是正在做相关毕业设计的学生,还是希望转行进入工控领域的工程师,抑或是想巩固基础的老师傅,相信这篇结合了我多年踩坑经验的长文,都能给你带来实实在在的收获。
2. 控制系统需求分析与整体设计
2.1 洗衣工艺流程分解与核心需求提炼
设计任何控制系统,第一步永远是搞清楚被控对象要干什么。我们不能凭空想象,必须把洗衣机的整个工作流程,像拆解零件一样,一步步分解成PLC能够理解和执行的逻辑步骤。
一台标准的全自动波轮洗衣机,其核心工作流程可以抽象为以下几个大阶段:
- 进水:用户选择程序、启动后,系统打开进水电磁阀,向桶内注水。这里有一个关键点:需要检测水位。我们不能一直进水,必须在水达到设定水位(如高、中、低档)时停止。这涉及到开关量输入(启动按钮)触发,控制开关量输出(进水阀),并等待另一个开关量输入(水位开关)的信号。
- 洗涤:水位达到后,关闭进水阀,启动洗涤电机。电机的运行不是简单的“一直转”,而是典型的正转-暂停-反转-暂停的循环,每个方向转动若干秒,暂停若干秒,如此循环持续设定的洗涤时间(如10分钟)。这需要用到定时器(T)和内部辅助继电器(M)来构建振荡电路。
- 排水:洗涤时间到,停止电机,打开排水电磁阀,将污水排出。同样,需要检测排水是否完成,通常通过水位开关复位(低水位检测)或单独的排水结束传感器来判断。
- 脱水:排水完成后,启动脱水动作。对于波轮洗衣机,脱水就是电机单向高速旋转。这里有一个重要的安全连锁:必须确保机盖已关闭(盖开关信号有效),才能启动高速脱水,否则应立即停止,这是一个硬性的安全逻辑。脱水也需要定时。
- 漂洗与最终脱水:上述“进水-洗涤-排水-脱水”流程,根据用户选择的程序(如标准洗、快速洗),可能会重复1到3次,这就是漂洗循环。最后一次脱水后,整个流程结束,可能伴有蜂鸣器提示。
从以上分解,我们可以提炼出PLC需要处理的所有输入信号(I)和输出信号(Q),这是硬件接线和程序编写的基础。
输入信号(I点)清单:
X0: 启动按钮(常开触点,按下有效)X1: 停止/急停按钮(常闭触点,按下断开,提高安全性)X2: 水位高检测开关(常开,水位到则闭合)X3: 水位低检测开关(常开,排水后复位断开)X4: 机盖关闭检测开关(常闭,盖好时闭合,打开时断开)X5: 程序选择(标准洗,可扩展多个输入用于更多程序)
输出信号(Q点)清单:
Y0: 进水电磁阀(得电打开)Y1: 排水电磁阀(得电打开)Y2: 洗涤/脱水电机正转接触器线圈(控制电机正转)Y3: 洗涤/脱水电机反转接触器线圈(控制电机反转)Y4: 蜂鸣器/提示灯(流程结束提示)- (注:实际中,电机正反转必须有严格的电气和程序互锁,防止短路,后文会详述)
2.2 控制方案设计与PLC选型考量
有了明确的I/O清单,我们就可以进行PLC选型。我们选择三菱FX2N,具体型号需要看I/O点数。我们上面列出了至少6个输入和5个输出,考虑到未来可能的扩展(如更多程序选择、故障报警输入、指示灯输出等),选择一款略有裕量的型号是工程好习惯。FX2N-16MR(16点输入/8点继电器输出)或FX2N-32MR(32点输入/输出)都是合适的选择。继电器输出型可以直接驱动220VAC的交流接触器线圈(需加阻容吸收或压敏电阻保护)和24VDC的电磁阀,驱动能力较强,适合本场景。
为什么不用晶体管输出?晶体管输出响应快、寿命长,但通常只能驱动直流负载,且电流较小。驱动交流接触器需要加中间继电器转换,增加了成本和故障点。对于洗衣机这种对响应速度要求不高(秒级)、但需要直接驱动交流负载的场合,继电器输出更简单可靠。
整体控制方案设计思路:我们将采用经典的“步进顺控”思想来构建程序主体。虽然FX2N有专用的步进顺控指令(STL、RET),但对于初学者,我更推荐使用“启保停电路+状态位”的方式来模拟步进流程。这种方法逻辑直观,易于调试,且几乎在所有品牌的PLC上都通用。
- 状态划分:将整个洗衣流程划分为若干个独立的状态,如“待机”、“进水”、“洗涤正转”、“洗涤暂停”、“洗涤反转”、“排水”、“脱水”、“结束”等。
- 状态转移:每个状态都有一个对应的内部状态继电器(如M0、M1、M2...)。状态的转移条件非常清晰,就是定时器触点或传感器信号。例如,“进水”状态(M1)的转移条件是“水位高信号X2接通”,触发后M1断开,下一个状态“洗涤正转”(M2)接通。
- 状态输出:在每个状态内,独立控制输出。例如,在“进水”状态M1接通时,驱动输出Y0(进水阀);在“洗涤正转”状态M2接通时,驱动Y2(电机正转)并启动一个正转定时器T0。
这种结构将复杂的流程分解为一个个简单的状态,每个状态只关心自己的进入条件、执行动作和退出条件,程序结构清晰,修改和维护极其方便。比如你想增加一个“预浸泡”环节,只需要在“进水”和“洗涤”之间插入一个新的状态即可,对其他部分影响很小。
3. 硬件配置与PLC程序设计详解
3.1 I/O地址分配与电气原理图要点
根据前面的需求分析,我们先固化下I/O分配,这是编程的“地图”:
| 类型 | 物理地址 | 符号名 | 设备/信号说明 | 备注 |
|---|---|---|---|---|
| 输入 | X0 | START | 启动按钮(NO) | 按下启动流程 |
| X1 | STOP | 停止/急停按钮(NC) | 按下停止所有输出,复位流程 | |
| X2 | HIGH_LEVEL | 高水位开关(NO) | 水位到达时闭合 | |
| X3 | LOW_LEVEL | 低水位开关(NO) | 排水后水位低于低水位时断开 | |
| X4 | LID_CLOSED | 机盖开关(NC) | 盖好闭合,打开断开 | |
| X5 | MODE_STD | 程序选择开关 | 接通为标准洗,可扩展 | |
| 输出 | Y0 | WATER_IN | 进水电磁阀 | 得电打开,失电关闭 |
| Y1 | WATER_OUT | 排水电磁阀 | 得电打开,失电关闭 | |
| Y2 | MOTOR_FW | 电机正转接触器 | 必须与Y3互锁 | |
| Y3 | MOTOR_REV | 电机反转接触器 | 必须与Y2互锁 | |
| Y4 | BUZZER | 蜂鸣器/完成指示灯 | 流程结束提示 |
注意:实际接线图中,停止按钮(X1)和机盖开关(X4)建议使用常闭(NC)触点接入PLC输入COM端和X点。这样在正常情况下,PLC输入回路是导通的,X1、X4为“ON”状态。一旦按钮被按下或机盖被打开,回路断开,输入变为“OFF”。这种接法的好处是可以检测断线故障。如果使用常开触点,电线断了PLC也认为没动作,无法发现故障,存在安全隐患。这是工程实践中非常重要的安全设计理念。
电机正反转的电气互锁与程序互锁:这是一个生死攸关的重点。在电气上,控制电机正转(Y2)和反转(Y3)的两个交流接触器,其线圈回路必须通过对方的常闭辅助触点进行电气互锁。这意味着,即使PLC程序错误地同时输出了Y2和Y3,电气上也只有一个接触器能吸合,另一个会被对方的常闭触点物理断开,彻底避免主电路短路。 在程序上,我们也要在梯形图中进行互锁:
网络1:正转控制(简化示意) M2(洗涤正转状态) T0(正转定时未到) Y3(反转输出常闭) → (Y2) 网络2:反转控制(简化示意) M3(洗涤反转状态) T1(反转定时未到) Y2(正转输出常闭) → (Y3)这样,Y2和Y3在逻辑上也绝不会同时为ON,构成了双重保护。
3.2 核心梯形图程序逐行解析
下面,我们构建程序的主体框架。我将使用“启保停”电路来构建状态机。假设我们定义以下状态位:
- M0:初始/待机状态
- M1:进水状态
- M2:洗涤正转状态
- M3:洗涤暂停(正转后)状态
- M4:洗涤反转状态
- M5:洗涤暂停(反转后)状态
- M6:排水状态
- M7:脱水状态
- M8:流程完成状态
程序初始化和主循环框架:
[网络0:初始化脉冲] M8002(PLC RUN后第一个扫描周期ON) → [SET M0] // 上电后置位初始状态M0M8002是三菱PLC的特殊辅助继电器,在PLC从STOP到RUN切换后的第一个扫描周期为ON,常用于初始化。
状态转移逻辑(以部分关键状态为例):
[网络1:从待机到进水] M0(待机) X0(启动) X1(停止常闭) M8(完成状态常闭) → [SET M1] [RST M0] // 解释:在待机状态下,按下启动且无停止信号、流程未完成,则进入进水状态M1,并清除待机状态M0。[网络2:进水状态保持与转移] M1 → [SET Y0] // 进水状态中,持续打开进水阀 M1 X2(水位高) → [SET M2] [RST M1] // 水位达到,进入洗涤正转状态M2,退出进水状态[网络3:洗涤正转控制] M2 → [SET Y2] [RST Y3] [OUT T0 K60] // 进入M2,启动正转Y2(确保反转Y3复位),启动正转60秒定时器T0 T0(正转时间到) → [SET M3] [RST M2] // 60秒到,进入暂停状态M3,退出正转状态[网络4:洗涤暂停(正转后)] M3 → [OUT T1 K10] // 进入M3,启动暂停10秒定时器T1 T1(暂停时间到) → [SET M4] [RST M3] // 10秒到,进入反转状态M4……(后续反转、暂停状态类似)
[网络X:排水状态] M6 → [SET Y1] // 打开排水阀 M6 X3(低水位,常开触点,无水时断开) → [SET M7] [RST M6] // 检测到低水位(X3断开),进入脱水状态 // 注意:这里X3是常开触点,无水时物理断开,PLC输入X3为OFF。因此用`X3`的常闭触点逻辑来判断排水完成。[网络Y:脱水状态(安全连锁至关重要)] M7 X4(机盖关闭,NC触点,闭合时为ON) → [SET Y2] [OUT T5 K300] // 仅当机盖关闭(X4 ON),才启动脱水(正转Y2)和脱水定时器T5(300秒) M7 X4(机盖打开) → [RST Y2] [RST T5] // 一旦机盖打开,立即停止脱水并复位定时器 T5(脱水时间到) → [SET M8] [RST M7] // 脱水完成,进入结束状态[网络Z:结束状态与停止逻辑] M8 → [SET Y4] [OUT T6 K5] // 蜂鸣器响5秒提示完成 T6 → [RST Y4] [RST M8] [SET M0] // 提示结束,复位完成状态,回到待机状态 X1(停止按钮) → [RST M1 TO M8] [RST Y0 TO Y4] [SET M0] // 任何状态下按下停止,复位所有非初始状态和输出,回到待机定时器与计数器的使用心得:
- FX2N的普通定时器(T0-T199)是100ms时基的,
K60代表60*100ms=6秒。上文示例中的K60意为6秒,K300意为30秒,仅作演示。实际洗涤定时以分钟计,需用K600表示1分钟,或使用积算定时器。 - 对于长时间定时(如洗涤10分钟),更佳实践是使用一个定时器结合一个计数器(C)。例如,用T0定时60秒,然后用T0的触点作为计数器C0的计数脉冲,计满10次即为10分钟。这样更节省定时器资源,且逻辑清晰。
- 重要提示:定时器在驱动它的条件断开时会自动复位。在步进状态机中,状态转移后,上一个状态断开,其内部的定时器也会复位。这通常是我们期望的。但如果你需要累积时间(比如记录总运行时间),就需要使用保持型(积算)定时器(T246-T255)或通过中间继电器将定时条件保持住。
3.3 程序结构化与模块化思路
当程序逻辑变得复杂时(比如有标准洗、快速洗、强力洗等多种模式),把所有逻辑都写在主程序里会变得难以维护。我们可以引入“子程序”或“模块化”的思想。
虽然FX2N不支持像西门子S7-1200那样的结构化编程(FB/FC),但我们可以通过跳转指令(CJ)和子程序调用指令(CALL)来模拟。
- 模式选择分流:根据X5、X6等程序选择输入的状态,用CJ指令跳转到不同的程序段。每个程序段内,是各自独立的洗衣流程状态机。
- 公共逻辑提取:像电机互锁、急停处理、故障报警这类所有模式都需要的逻辑,写在主程序开头或结尾,不随跳转而跳过。
- 使用步进顺控指令(STL):对于复杂的顺序流程,FX2N的STL指令其实是更专业的选择。它天生为顺序控制设计,状态转移图(SFC)可视性好。但初学者需要理解“状态”和“步”的概念,以及STL指令的特定写法(如状态内输出用OUT还是SET,转移条件怎么写)。掌握了“启保停”状态机后,再学习STL会更容易理解其本质。
实操心得:在项目初期,尤其是调试阶段,我建议先用“启保停”电路把核心流程跑通。因为它的每一步都清晰可见,在线监控时每个状态位(M)的ON/OFF一目了然,非常利于排查问题。等逻辑完全稳定后,如果为了程序更简洁,再考虑重构成STL形式。不要一开始就追求“高级”写法而把问题复杂化。
4. 系统调试、问题排查与功能扩展
4.1 模拟调试与现场上电步骤
程序写完,绝不意味着工作结束,调试才是真正考验的开始。务必遵循“先模拟,后空载,再带载”的安全原则。
第一阶段:软件模拟调试
- 强制与监控:在GX Works2或GX Developer编程软件中,进入“在线”->“监视”模式。你可以右键点击某个X点(如X0),选择“强制ON”,模拟按下启动按钮。观察程序状态是否按预期从M0转移到M1,Y0是否亮起。
- 模拟定时和条件:同样,可以强制水位信号X2为ON,模拟水位到达,看是否跳转到洗涤状态M2,Y2是否输出,定时器T0是否开始计时。
- 测试安全逻辑:强制机盖信号X4为OFF(模拟打开),观察在脱水状态M7下,Y2输出是否立刻断开。这是验证安全连锁的关键。
- 遍历所有路径:通过强制不同的输入组合,测试标准洗、快速洗(如果设计了)等所有程序分支,确保每个状态都能正确进入和退出。
第二阶段:现场空载调试(不带电机和水)
- 接线复查:这是最枯燥也最重要的一步。用万用表蜂鸣档,对照原理图,逐点检查PLC输入端(如X0)到按钮、传感器之间的线路是否接通,接线是否牢固。检查输出端(如Y0)到继电器或接触器线圈的线路。
- 上电测试输出:将PLC和外围电路(除电机主回路和进水/排水阀的负载电源)上电。在监控模式下,手动强制Y0、Y1、Y2、Y3等输出为ON。观察对应的继电器或接触器是否吸合,动作声音是否清脆。用万用表测量输出点是否有电压。
- 测试输入反馈:手动按下按钮,拨动水位开关模拟杆,观察软件中对应的X点指示灯是否变化。特别注意:对于接成常闭(NC)的停止按钮和机盖开关,正常情况下PLC对应的输入指示灯应该是常亮的。按下按钮或打开机盖时,指示灯才熄灭。如果一开始就不亮,说明接线错误或触点问题。
第三阶段:带载联调
- 单动测试:接通负载电源(水泵、电机主回路)。在监控模式下,单独强制进水阀Y0,观察是否正常进水;强制排水阀Y1,观察排水是否顺畅。测试电机前,务必确保机械部分安装牢固,人员远离!然后单独点动测试电机正转Y2和反转Y3,观察转向是否正确,有无异响。
- 自动流程测试:将所有强制取消,让系统自动运行。按下启动按钮,观察整个洗衣流程是否连贯,各阶段切换是否平滑,时间参数是否合理。
- 异常情况测试:这是检验系统可靠性的关键。在进水时手动断开水位开关;在洗涤时突然打开机盖;在脱水时拍急停。观察系统是否能安全、迅速地停止,并进入一种确定的保护状态(通常是所有输出断开,回到待机)。
4.2 常见故障排查速查表
调试和运行中难免遇到问题,这里总结一个快速排查指南:
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| PLC电源指示灯不亮 | 1. 供电电源未接通或电压不符。 2. 电源线松动或断路。 3. PLC内部电源模块故障。 | 1. 检查供电电压(如220VAC)是否正常。 2. 检查电源进线接线是否牢固。 3. 更换电源测试。 |
| 输入点无反应(软件中不亮) | 1. 输入信号未真正给出(如按钮坏、传感器故障)。 2. 接线错误(如将常闭接成常开)。 3. PLC输入COM端未接电源公共端。 4. 输入点硬件损坏。 | 1. 用万用表测量输入端子与COM间电压,信号触发时应有电压变化(如24V->0V)。 2. 核对原理图,检查接线。 3. 检查输入COM端与电源的连线。 4. 尝试更换一个输入点测试。 |
| 输出点有信号但不动作 | 1. 输出点对应的外部负载故障(如接触器线圈烧坏)。 2. 输出回路电源未接通或熔断器熔断。 3. 接线松动或断路。 4. 输出点硬件损坏(继电器触点烧蚀)。 | 1. 在输出ON时,用万用表测量输出端子与对应COM点间电压是否正常(如220VAC)。 2. 检查负载电源和保险。 3. 直接短接输出端子与COM,看负载是否动作,以判断是PLC问题还是外部问题。 4. 监听PLC内部继电器是否有吸合声。 |
| 程序运行混乱,状态乱跳 | 1. 程序逻辑错误,状态转移条件有重叠或冲突。 2. 输入信号抖动(如按钮接触不良、传感器误触发)。 3. 扫描周期问题,复杂运算导致看门狗超时。 | 1. 在线监控,观察是哪个转移条件意外满足了。仔细检查梯形图逻辑。 2. 对易抖动的输入信号,在程序中使用定时器做延时滤波(如检测到信号后延时0.1秒再确认)。 3. 检查程序容量,避免在单个扫描周期内进行过于复杂的运算。 |
| 电机正反转同时动作 | 1.程序互锁失效:Y2和Y3的输出逻辑中,未串入对方的常闭触点。 2.电气互锁失效:接触器辅助触点接线错误或触点粘连。 | 1.立即断电检查!这是危险故障。 2. 首先检查梯形图,确保Y2线圈前串联了Y3的常闭触点,Y3前串联了Y2的常闭触点。 3. 检查接触器互锁的常闭辅助触点接线是否正确可靠。 |
4.3 功能扩展与进阶思考
一个基础的洗衣机控制系统完成后,我们可以从工业应用角度思考如何让它更“专业”:
- 人机界面(HMI)集成:用触摸屏(如威纶通、MCGS)替代机械按钮和指示灯。在屏上可以设置洗涤时间、水位、漂洗次数,实时显示当前状态(进水、洗涤、脱水)、剩余时间,以及故障报警信息(如“机盖未关”、“进水超时”)。PLC与HMI通过RS485或以太网通信(如FX2N-485-BD模块),在PLC程序中需要规划好与HMI交换的数据寄存器(D)。
- 模拟量处理:如果使用连续水位传感器(如压力变送器输出4-20mA)而非开关量水位开关,就需要用到PLC的模拟量输入模块(如FX2N-4AD)。程序需要读取模拟量值,并与设定的水位值进行比较,实现更精确的水位控制。
- 故障诊断与报警:增加传感器和逻辑判断,实现系统自诊断。例如:
- 进水超时报警:在进水状态M1中,启动一个长定时器(如2分钟)。若2分钟后仍未收到水位高信号X2,则置位一个报警位M100,停止进水,点亮报警灯,并在HMI上显示“进水故障”。
- 排水超时报警:同理,在排水状态M6中启动定时器,超时未收到低水位信号则报警。
- 电机过载保护:从电机热继电器引一个常开报警触点到PLC输入点X6。当电机过载时,X6接通,PLC立即停止电机输出并报警。
- 数据记录与通信:通过通信模块(如以太网模块),将洗衣机的运行次数、故障记录、耗水量(估算)等数据上传到上位机管理系统,实现简单的物联网功能。这对于商用洗衣房或需要设备管理的场景很有用。
从一台洗衣机的PLC控制出发,我们实际上演练了一个完整的工业自动化小项目:需求分析、方案设计、选型、编程、调试、排故、优化。这个过程里蕴含的结构化思维、安全理念、调试方法,是放之四海而皆准的。无论你接下来面对的是灌装机、机械手还是生产线,其核心的控制逻辑构建、问题解决路径都是相通的。把这个项目吃透,反复练习,直到你能独立完成从图纸到动作的全过程,那么恭喜你,你已经拿到了打开工业控制大门的一把关键钥匙。