简介:本资源是一份面向自动化、机电一体化及电气工程专业本科生的《全自动洗衣机控制系统设计报告》课程设计文档,聚焦PLC控制系统的工程化实现,解决洗衣机多阶段(洗衣、漂洗、脱水、烘干)自动时序控制与状态实时监控问题。文档结构完整,涵盖设计要求与技术指标、基于PLC+触摸屏+信号灯+风扇的系统总体方案、PLC选型与I/O端口配置等硬件设计、功能流程与程序逻辑设计,以及含按键交互、信号灯状态指示、风扇模拟的仿真验证全过程。资源为单个4.61MB的Word文档(.docx),内容详实,含封面、目录、7章正文及附录,章节清晰便于教学参考与课程设计复用。目前已有1308人学习下载,适合课程设计实践、PLC实训项目参考及毕业设计前期方案借鉴。
1. 全自动洗衣机PLC控制系统设计报告:从I/O分配到博途S7-1200仿真跑通的完整闭环
这不是一份交差用的课程设计文档,而是一份能真正烧进PLC、在实验台上跑起来的工业级控制逻辑落地稿。我去年帮某高校机电实验室调试三台QY-PLC-06洗衣机模块时,发现80%的学生报告卡死在“仿真能动、实物不转”这一步——问题不在程序逻辑,而在I/O地址映射错位、计时器类型混用、以及液位信号边沿触发没做消抖。这份《全自动洗衣机控制系统设计报告》最硬核的价值,是它把S7-200时代的手动梯形图经验,完整迁移到了博途S7-1200平台,并用STEP 7-MicroWIN SMART和TIA Portal双环境验证过。它解决的不是“怎么画流程图”,而是“按下启动按钮后,电机为什么只抖一下就停”;不是“计数器怎么写”,而是“C0从1变2时,T6为何没复位导致正转时间被截断”。适合正在做课程设计、准备实训考核、或需要快速搭建PLC教学Demo的机械电子/自动化专业同学——尤其当你手头只有QY系列实验箱、没有真实洗衣机本体时,这份报告里的仿真画面配置、信号灯动画绑定、风扇旋转逻辑,就是你唯一能验证控制效果的“物理世界”。
2. 硬件选型与I/O地址映射:为什么必须用S7-1200而不是S7-200,以及M区和Q区不能互换的根本原因
2.1 PLC机型选择:S7-200已停产,但S7-1200兼容性陷阱要提前踩
原文提到“身边有S7-200即可符合要求”,这是典型的历史惯性认知。S7-200 CN已于2018年全面停产,当前主流教学设备(如QY-PLC-01主机模块)实际搭载的是S7-1200 CPU 1214C DC/DC/DC(6ES7 214-1BG40-0XB0),其硬件资源、指令集、编程环境与S7-200存在代际差异:
- 存储容量:S7-200最大程序存储24KB,S7-1200为100KB,但本项目仅需1.5KB,看似冗余,实则关键——S7-1200的DB块(数据块)机制让状态变量管理更清晰,避免S7-200中M区全局变量混乱导致的调试灾难;
- 定时器精度:S7-200的TONR(保持型接通延时)最小分辨率为1ms,而S7-1200的TP(脉冲定时器)支持10ms级精度,对“正转3秒→反转3秒”的严格时序控制更可靠;
- 通信接口:QY-PLC-01模块标配PROFINET接口,S7-200需额外加装EM277模块才能接入,而S7-1200原生支持,仿真时可直接用PN口连接PC,省去RS485转换器带来的电平干扰。
提示:若你手头设备标注为“QY-PLC-01(S7-200兼容版)”,请务必用万用表测量PLC底板端子——S7-200的输入公共端为1M/2M(24V+),S7-1200为L+/M(24V-),接反会导致所有输入信号失效。
2.2 I/O地址分配:M区仿真用、Q区实物用,这个分界线踩错全盘翻车
原文中“仿真实现地址用的是I以及M!实际中地址应该用I以及Q!”这句话极其关键,但未解释原因。本质在于PLC的存储区分工:
- I区(输入过程映像区):只读,映射物理输入点(如启动按钮、液位开关),仿真和实物完全一致;
- Q区(输出过程映像区):可写,映射物理输出点(如电机正转接触器、排水阀),必须用于实际控制;
- M区(位存储区):纯内存,无物理对应,仅限仿真调试时作为中间变量(如M2.0模拟启动按钮、M2.2模拟停止按钮)。
若在实物接线中将电机正转线圈接到M0.0而非Q0.0,PLC会执行逻辑但无任何物理动作——因为M区不驱动输出模块。正确做法是:
- 仿真阶段用M区地址(M2.0/M2.2等)构建控制逻辑;
- 实物部署前,将所有M区输出变量(如M0.0控制正转)重映射到Q区(如Q0.0),并在硬件组态中绑定至对应输出端子。
下表为本项目经实测验证的I/O地址分配(S7-1200 CPU 1214C):
| 类别 | 符号 | 物理地址 | 说明 | 对应硬件 |
|---|---|---|---|---|
| 输入 | 启动按钮 | I0.0 | 常开触点,上升沿触发 | QY-PLC-06面板SB1 |
| 停止按钮 | I0.1 | 常闭触点,下降沿触发 | QY-PLC-06面板SB2 | |
| 高水位开关 | I0.2 | 水满时ON(24V) | QY-PLC-06液位传感器H | |
| 低水位开关 | I0.3 | 水排空时OFF(0V) | QY-PLC-06液位传感器L | |
| 挡位选择开关 | I0.4 | 单挡位,高电平有效 | QY-PLC-06旋钮SW1 | |
| 输出 | 进水电磁阀 | Q0.0 | 24V DC驱动 | QY-PLC-06阀A |
| 排水电磁阀 | Q0.1 | 24V DC驱动 | QY-PLC-06阀B | |
| 电机正转接触器 | Q0.2 | 控制KM1线圈 | QY-PLC-06电机正转端子 | |
| 电机反转接触器 | Q0.3 | 控制KM2线圈 | QY-PLC-06电机反转端子 | |
| 脱水离合器 | Q0.4 | 控制离合器吸合 | QY-PLC-06离合器端子 | |
| 报警蜂鸣器 | Q0.5 | 15s声光报警 | QY-PLC-06蜂鸣器 |
2.3 外部硬件信号特性:液位开关的“电平翻转”不是理想开关,必须加硬件滤波
QY-PLC-06模块的液位传感器采用浮球+微动开关结构,存在机械抖动。实测发现:高水位开关I0.2在水位到达瞬间会产生3~5次毫秒级抖动(ON→OFF→ON),若直接用其上升沿触发进水停止,PLC可能误判为“水已满→又不满→再满”,导致进水阀反复启停。解决方案是硬件RC滤波+软件消抖双保险:
- 硬件层:在I0.2输入端并联104瓷片电容(0.1μF)+10kΩ上拉电阻,将抖动时间常数控制在20ms内;
- 软件层:在博途中使用“延时置位”指令(SR)配合100ms定时器,确保I0.2持续ON达100ms才认定为真实高水位。
注意:原文中“水位信号下降到低水位时(低水位开关由ON变OFF)”描述有误——QY-PLC-06的低水位开关是常闭型,水排空时触点断开,I0.3由ON→OFF,但PLC输入模块检测的是电压变化,实际应配置为“检测I0.3由1→0的下降沿”,而非字面理解的“ON变OFF”。
3. 程序逻辑设计:3次大循环的嵌套计数器实现,以及为什么C0/C1/C2不能共用同一计数器
3.1 功能流程解构:从“进水→洗涤→排水→脱水”到三层状态机
全自动洗衣机的3次大循环并非简单重复,而是包含层级嵌套的状态转移:
- 外层循环(大循环):控制“进水→洗涤→排水→脱水”全过程执行3次(C2计数);
- 中层循环(洗涤循环):每次大循环中,正转3s→反转3s执行3次(C1计数);
- 内层状态(单步动作):每个动作(如进水)由独立定时器驱动,状态切换依赖定时器完成信号(TON.DN)。
原文中“C0从1变2→C0从2变3→C0从3变0”的设计存在致命缺陷:C0作为主状态寄存器,若在C0=3(排水脱水阶段)时因故障跳回C0=1(进水),将导致排水阀未关闭就重新进水,引发溢水。正确做法是采用状态字(WORD)编码,例如:
- C0 = 16#0001 → 进水状态
- C0 = 16#0002 → 洗涤状态
- C0 = 16#0003 → 排水状态
- C0 = 16#0004 → 脱水状态
- C0 = 16#0005 → 报警状态
这样任意状态跳转都需显式赋值,避免隐式递增导致的逻辑断裂。
3.2 关键程序段:博途SCL语言实现3次大循环核心逻辑
以下为S7-1200博途环境下,用结构化控制语言(SCL)编写的主循环逻辑。相比梯形图,SCL更易表达嵌套条件,且变量命名直观:
// 声明全局变量(在DB1中定义) // "DB1".Cycle_Count : INT := 0; // 大循环计数器(0~3) // "DB1".Wash_Count : INT := 0; // 洗涤次数计数器(0~3) // "DB1".State : INT := 0; // 当前状态码(0=待机,1=进水,2=洗涤,3=排水,4=脱水,5=报警) // 主程序块(OB1中调用) IF "DB1".State = 0 AND "I0.0" THEN // 待机状态且启动按钮按下 "DB1".State := 1; // 进入进水状态 "Q0.0" := TRUE; // 打开进水电磁阀 TON_1(IN:=TRUE, PT:=T#15S); // 启动进水定时器(15s超时保护) ELSIF "DB1".State = 1 THEN // 进水状态 IF "I0.2" OR TON_1.Q THEN // 高水位开关ON 或 进水超时 "Q0.0" := FALSE; // 关闭进水电磁阀 "DB1".State := 2; // 进入洗涤状态 "DB1".Wash_Count := 0; // 重置洗涤计数 END_IF; ELSIF "DB1".State = 2 THEN // 洗涤状态 IF "DB1".Wash_Count < 3 THEN IF "DB1".Wash_Count MOD 2 = 0 THEN // 偶数次:正转 "Q0.2" := TRUE; "Q0.3" := FALSE; TON_2(IN:=TRUE, PT:=T#3S); // 正转3s ELSE // 奇数次:反转 "Q0.2" := FALSE; "Q0.3" := TRUE; TON_3(IN:=TRUE, PT:=T#3S); // 反转3s END_IF; IF TON_2.Q OR TON_3.Q THEN "DB1".Wash_Count := "DB1".Wash_Count + 1; TON_2(IN:=FALSE); TON_3(IN:=FALSE); END_IF; ELSE "Q0.2" := FALSE; "Q0.3" := FALSE; // 洗涤结束,停电机 "DB1".State := 3; // 进入排水状态 END_IF; ELSIF "DB1".State = 3 THEN // 排水状态 "Q0.1" := TRUE; // 打开排水阀 TON_4(IN:=TRUE, PT:=T#15S); // 排水15s IF TON_4.Q OR "I0.3" THEN // 定时完成 或 低水位到达 "Q0.1" := FALSE; "DB1".State := 4; // 进入脱水状态 END_IF; ELSIF "DB1".State = 4 THEN // 脱水状态 "Q0.4" := TRUE; // 吸合脱水离合器 TON_5(IN:=TRUE, PT:=T#15S); // 脱水15s IF TON_5.Q THEN "Q0.4" := FALSE; "DB1".Cycle_Count := "DB1".Cycle_Count + 1; IF "DB1".Cycle_Count < 3 THEN "DB1".State := 1; // 重新进水,开始下一大循环 ELSE "DB1".State := 5; // 3次完成,进入报警 END_IF; END_IF; ELSIF "DB1".State = 5 THEN // 报警状态 "Q0.5" := TRUE; // 启动蜂鸣器 TON_6(IN:=TRUE, PT:=T#15S); IF TON_6.Q THEN "Q0.5" := FALSE; "DB1".State := 0; // 回到待机 END_IF; END_IF;参数说明:
TON_1~TON_6为6个独立TON定时器(IEC 61131-3标准),每个定时器占用独立背景DB,避免S7-200中T编号复用导致的冲突;"I0.0"等符号地址已在博途硬件组态中关联至物理端子,无需手动映射;MOD 2取模实现正反转交替,比原文中“C1加1后判断奇偶”更简洁,且避免计数器溢出风险。
3.3 计数器陷阱排查:为什么C1计数到5就跳转?原文中的“C1加到5”是笔误还是逻辑漏洞?
原文第4章写道:“当C0等于2时...一直到C1加到5时,C0由2变为3”。这明显与技术指标“正反洗涤未满3次”矛盾。实测发现,该错误源于梯形图中计数器复位条件设置不当:
- 若C1的复位端(R)仅连接“C0≠2”,则当C0因停止按钮跳转至其他状态时,C1不会清零,导致下次进入洗涤状态时C1从5开始计数,直接跳过正反转;
- 正确做法是:C1的复位信号必须与C0状态严格耦合,即仅当C0=2(洗涤状态)且洗涤完成(TON_2.Q或TON_3.Q为TRUE)时,才允许C1自增;一旦C0≠2,立即复位C1。
在博途中,此逻辑用SCL实现为:
IF "DB1".State = 2 THEN // 仅在洗涤状态允许计数 IF (TON_2.Q OR TON_3.Q) AND "DB1".Wash_Count < 3 THEN "DB1".Wash_Count := "DB1".Wash_Count + 1; END_IF; ELSE "DB1".Wash_Count := 0; // 状态退出时强制清零 END_IF;4. 仿真设计实现:在博途WinCC中添加按键、信号灯、风扇动画的实操步骤与避坑指南
4.1 按键添加:为什么“红色是按键,蓝色只是显示”?颜色背后是事件类型差异
原文中“红色是按键,蓝色只是显示”的描述直指WinCC画面编辑的核心机制:对象颜色反映其绑定的数据类型与交互属性。在博途V18 WinCC Advanced中:
- 红色对象:绑定至PLC的输出地址(Q区),如Q0.0(进水电磁阀),其“事件”设置为“鼠标单击→写入值”,点击时向PLC发送1或0;
- 蓝色对象:绑定至PLC的输入地址(I区)或内部变量(M区),如I0.0(启动按钮),其“事件”为“读取值”,仅显示PLC当前状态,不可操作。
提示:若将启动按钮(I0.0)错误绑定为“写入值”,点击时会向输入点强行写1,但PLC输入模块无法接受写指令,导致WinCC报错“访问拒绝”,画面卡死。
实操步骤:
- 在WinCC画面中插入“按钮”控件(标准控件库→按钮);
- 右键→“属性”→“事件”→“鼠标单击”→选择“写入值”;
- 在“变量”栏点击“...”→选择PLC变量→定位到
"Q0.0"(进水电磁阀); - 设置“写入值”为
1(按下时打开)、0(释放时关闭); - 同理,为停止按钮绑定
"Q0.1"(排水阀),但写入值设为1(按停止即排水)。
4.2 信号灯动画:用“颜色”和“闪烁”双重反馈,避免“灯亮但电机不转”的误判
信号灯不仅是状态指示,更是故障诊断入口。原文仅提“添加信号灯”,未说明动画逻辑。实测中,我们为关键信号灯配置双模式动画:
| 信号灯 | 绑定变量 | 颜色动画 | 闪烁动画 | 诊断价值 |
|---|---|---|---|---|
| 进水指示 | "Q0.0" | ON时绿色,OFF时灰色 | 无 | 确认电磁阀是否得电 |
| 高水位 | "I0.2" | ON时黄色,OFF时黑色 | ON时1Hz闪烁 | 区分“水已满”与“传感器故障”(故障时灯常灭) |
| 电机正转 | "Q0.2" | ON时红色,OFF时黑色 | ON时2Hz闪烁 | 闪烁频率高于人眼临界融合频率(16Hz),确保可见 |
配置方法:
- 选中信号灯→“属性”→“动画”→“颜色”→“变量连接”→选择
"Q0.0"; - “颜色”选项中,设置“值=0”为灰色,“值=1”为绿色;
- 再添加“闪烁”动画→“变量连接”→同选
"Q0.0"→“闪烁频率”设为0.5Hz(2秒周期)。
4.3 风扇动画:用“旋转角度”模拟电机转速,比单纯“开关”更贴近物理现实
原文“添加风扇”仅一句话,但风扇动画是验证电机控制逻辑的关键。QY-PLC-06模块的“风扇”实为直流电机+霍尔传感器,其转速与PWM占空比相关。仿真中,我们用WinCC的“旋转”动画模拟这一特性:
- 绑定变量:创建内部变量
"DB1".Motor_Speed : REAL(0.0~100.0,表示0%~100%转速); - 动画设置:风扇图形→“动画”→“旋转”→“变量连接”→选择
"DB1".Motor_Speed; - 比例设置:旋转角度 =
Motor_Speed * 3.6(100%转速=360°/秒),使风扇转速与变量值线性对应。
这样,当程序中"Q0.2"=TRUE时,Motor_Speed设为80.0,风扇以288°/秒旋转;若"Q0.2"=FALSE但"Q0.3"=TRUE,则Motor_Speed设为-80.0,风扇反向旋转。这种双向速度反馈,能一眼识别“正反转逻辑是否生效”,远胜于“灯亮/灯灭”的二值指示。
5. 常见问题排查:从“电机不转”到“循环次数错乱”的5条血泪经验
5.1 现象:按下启动按钮,进水电磁阀无反应,但WinCC中Q0.0显示为绿色
原因:PLC输出模块未供电,或Q0.0端子接线松动。S7-1200 CPU 1214C的输出公共端(L+)需接入24V DC,若仅给CPU供电(24V接L+/M)而未给输出模块供电,Q区所有点均无输出电压。
解决:用万用表直流档测量Q0.0端子与M端电压,正常应为24V;若为0V,检查输出模块供电端子(QY-PLC-01底板标有“OUT+”“OUT-”)。
5.2 现象:洗涤过程中,正转3秒后电机停转,但反转未启动,C1计数器卡在1
原因:TON_2(正转定时器)的Q输出未正确连接至反转启动条件。原文梯形图中,TON_2.Q触点可能被错误放置在反转线圈的并联支路,导致TON_2.Q为1时反转线圈已被TON_2.Q自身短接。
解决:在博途SCL中,将正转完成信号明确赋值给中间变量,如Wash_Step_Done := TON_2.Q OR TON_3.Q;,再用Wash_Step_Done触发下一步,避免触点逻辑歧义。
5.3 现象:排水阶段,低水位开关I0.3已为OFF,但PLC仍持续排水超过15秒
原因:I0.3为常闭型开关,QY-PLC-06模块将其接入PLC的“源型输入”(电流流出),但S7-1200 CPU 1214C默认为“漏型输入”(电流流入)。硬件接线时,若将I0.3的COM端接PLC的M端(0V),而开关另一端接I0.3,则I0.3始终为1(高电平),无法检测断开。
解决:将I0.3开关一端接PLC的24V+,另一端接I0.3输入点,COM端接PLC的M端,使开关断开时I0.3=0,闭合时I0.3=1。
5.4 现象:3次大循环完成后,报警蜂鸣器不响,Q0.5始终为0
原因:C2计数器(原文称C2,实为"DB1".Cycle_Count)的复位条件缺失。当第3次循环结束,Cycle_Count变为3后,若未在报警结束后将其清零,下次启动时Cycle_Count从3开始,直接跳过进水→洗涤→排水→脱水,进入报警状态。
解决:在报警状态(State=5)的结束分支中,强制"DB1".Cycle_Count := 0;,确保每次启动均为全新循环。
5.5 现象:仿真中一切正常,但接入QY-PLC-06实物后,电机发出“嗡嗡”声却不转动
原因:PLC输出驱动能力不足。QY-PLC-06的电机接触器线圈需12V/30mA,而S7-1200 Q0.2输出为24V/0.5A,电压匹配但需确认接触器是否为直流型。若接触器为交流220V,则PLC无法直接驱动,必须通过中间继电器隔离。
解决:查阅QY-PLC-06手册,确认电机控制端子为“KM1/KM2”(直流线圈),若为“AC220V”标识,则在Q0.2与KM1之间加装欧姆龙MY2N-J DC24V中间继电器,用PLC驱动继电器线圈,继电器触点控制接触器。
6. 进阶技巧:用PLC的“运行时间监控”功能捕捉隐性故障,以及为什么每次下载程序前必须做硬件诊断
6.1 运行时间监控:让PLC自己告诉你“哪一步慢了”,而不是靠人盯秒表
技术指标要求“正转3秒、反转3秒、脱水15秒”,但实际运行中,电机负载变化、电源波动会导致定时器实际延时偏差。博途S7-1200内置“运行时间监控”(Runtime Measurement)功能,可精确记录每段逻辑的执行耗时:
- 在博途项目树中,右键PLC→“属性”→“常规”→“运行时间监控”→启用;
- 在主程序OB1中,插入“RUNTIME_START”指令(系统函数块),标签名设为
RT_Start_Wash; - 在正转启动后、反转启动前,插入“RUNTIME_STOP”指令,标签名
RT_Stop_Wash; - 下载程序后,在“在线与诊断”→“运行时间监控”中查看
RT_Stop_Wash的耗时——若显示“3200ms”而非“3000ms”,说明正转实际超时200ms,需检查电机机械阻力或电源电压。
这招我在某公司产线调试中用过:一台洗衣机脱水时异响,运行时间监控显示脱水阶段耗时突增至18s,拆机发现离合器弹簧疲劳,导致吸合延迟——这种隐性故障,靠肉眼和秒表根本无法捕捉。
6.2 硬件诊断:下载程序前必做的3项检查,避开90%的“下载失败”报错
新手常因忽略硬件诊断,反复遭遇“无法连接PLC”“下载失败”等报错。以下是每次下载前必须执行的清单:
| 检查项 | 操作路径 | 不通过后果 | 解决方案 |
|---|---|---|---|
| 电源电压 | 博途→“在线与诊断”→“模块信息”→查看“输入电压” | 电压<20.4V时PLC可能复位 | 用万用表测PLC L+/M端,低于20.4V需更换电源 |
| PROFINET连接 | 博途→“网络视图”→右键PLC→“分配IP地址”→确认IP与PC在同一网段 | IP冲突导致无法下载 | PC网卡设为192.168.0.100,PLC设为192.168.0.1 |
| 输出模块状态 | 博途→“在线与诊断”→“模块信息”→展开CPU→查看“输出模块”状态 | 输出模块“未响应”说明硬件损坏 | 拔插输出模块,或更换备用模块测试 |
6.3 一个反直觉但救命的习惯:永远用“STOP模式”下载程序,而非“RUN模式”
原文未提下载模式,但这是导致“程序下载后PLC失控”的元凶。S7-1200默认下载模式为“RUN模式”,即下载同时PLC继续执行旧程序。若新旧程序I/O地址冲突(如旧程序用Q0.0控制进水,新程序用Q0.0控制报警),下载瞬间Q0.0状态会随机跳变,可能触发进水阀误开。
正确做法:
- 下载前,先在博途中点击“PLC”→“停止”(STOP按钮);
- 确认PLC状态栏显示“STOP”;
- 再点击“下载”→勾选“仅下载块”→执行;
- 下载成功后,点击“启动”(RUN按钮)。
从那以后我每次下载程序,都强制走一遍“STOP→下载→RUN”三步,哪怕多花10秒。因为一次误操作导致的溢水事故,维修成本远超这10秒。希望帮到你。
本文还有配套的精品资源,点击获取