简介:围绕西门子PLC的花式喷水池控制课程设计文档,面向自动化、电气工程及机电一体化等专业学生与PLC初学者,可用于课程设计、实训报告撰写和Step7编程练习。文档共1个doc文件,压缩包约956KB,内容按设计目的、问题描述、硬件配置、I/O地址分配、PLC外部接线图、主电路图、系统流程图、梯形图程序及仿真调试等模块展开。其核心价值在于给出四组喷头、四种喷水花样的完整控制逻辑:通过启动/停止按钮、单步/连续开关和选择开关,配合定时器与计数器实现顺序喷水、交替喷水及正反向延时控制,并记录Step7 V5.5仿真验证过程与结果。已有1755人学习,适合需要参考I/O分配、梯形图结构和调试思路的读者对照查漏补缺。
1. 四组喷头、八个开关,难点不在喷水在时序
四组喷头、八个按钮开关、四个输出点,单看规模像个玩具项目,但真把“1-2-3-4 顺序开、4-3-2-1 逆序关、中间还夹一段 30 秒全喷”写进梯形图时,翻车点比预想的多得多。这份基于 PLC 的花式喷水池控制课设,把四种喷水花样、单步/连续切换、启停互锁全部落在 Step7 V5.5 的梯形图里,配了 I/O 地址分配表、PLC 外部接线图、主电路图和四种花样的仿真调试结果,是一套可以直接照着复现的 plc 课设素材。它适合两类人:正在做 plc 课设、需要一套时序逻辑能跑通、能交差的方案;以及刚接触顺序控制、想把“定时器 + 计数器 + 状态位”这套组合拳练熟的新人。下面按硬件分配、花样拆解、仿真验收、避坑的顺序,把这套程序拆开讲一遍。
2. 硬件选型与 I/O 分配:8 进 4 出为什么还要留余量
硬件配置这一步,很多人直接抄一张接线图就过去了,结果程序写到一半发现要加个急停、加个运行指示灯,点不够用。这一章先把选型理由和地址分配讲清楚,后面梯形图里的每一个 I0.x、Q4.x 才有落脚点。
2.1 CPU 与模块选型:输出类型由负载决定,不是随便挑
这套程序用的是 S7 系列的 CPU 31x 主机加 DI16×DC24V 数字量输入模块、DO16×Relay 继电器输出模块。输入侧 8 个点(启动、停止、单步、连续、模式 1~4)用掉 I0.0~I0.7,刚好占满一个 IB0,好处是仿真时可以直接监视 IB0 的整体状态,不用一个个翻。
真正的选型分歧在输出侧。喷水池的执行器是电磁阀或者接触器线圈,典型感性负载,断电瞬间的反向电动势能到几百伏。常见做法是选继电器输出型 DO 模块,触点直接扛 24V 线圈,接线简单,代价是机械寿命有限。这里必须算一笔账:花样 3 是“1、3 喷 → 延时 3s → 2、4 喷”,交替 5 次再全喷 30s,一个完整循环大约 45s。1 号喷头每个循环动作 5 次,一天 1920 个循环就是 9600 次动作;继电器模块的机械寿命典型值在千万次量级,摊下来大约两三年,长期连续运行是要提前考虑更换周期的。
如果现场是长时间连续喷水,更稳的做法是选晶体管输出型 DO,再外加中间继电器做隔离,把触点损耗转移到便宜的中间继电器上,坏了换一个就行。这套课设的定位是短时演示,继电器输出够用,但心里要有这个数。
还有一条容易被忽略:S5TIME 定时器数量。CPU 31x 一般能提供 128 或 256 个 S7 定时器(具体看 CPU 型号),四种花样加起来最多同时用十来个,资源充足。但充足不等于可以随便复用——同一个 T 号在两个网络里各写一次,是后面排查章节要重点说的坑。
2.2 I/O 分配表与符号表:先建符号,别在程序里裸写 I0.0
这套设计的地址分配是标准的“一位一设备”接法,选择开关的四个位置分别占 I0.4~I0.7,而不是用 BCD 编码省点。省点的写法是用两位输入表示四个位置,程序里再译码,代价是多一层逻辑、调试时看不到直观状态。课程设计阶段,直观优先。
| 类别 | 设备 | 地址 | 符号名 | 备注 |
|---|---|---|---|---|
| 输入 | 启动按钮 | I0.0 | Start | 常开,按下为 1 |
| 输入 | 停止按钮 | I0.1 | Stop | 外部建议接常闭 |
| 输入 | 单步开关 | I0.2 | StepMode | 单步位置为 1 |
| 输入 | 连续开关 | I0.3 | ContMode | 连续位置为 1 |
| 输入 | 选择开关位置 1 | I0.4 | Mode1 | 四位置互斥 |
| 输入 | 选择开关位置 2 | I0.5 | Mode2 | |
| 输入 | 选择开关位置 3 | I0.6 | Mode3 | |
| 输入 | 选择开关位置 4 | I0.7 | Mode4 | |
| 输出 | 1 号喷水管 | Q4.0 | Spray1 | 外环 |
| 输出 | 2 号喷水管 | Q4.1 | Spray2 | 一次外环 |
| 输出 | 3 号喷水管 | Q4.2 | Spray3 | 内环 |
| 输出 | 4 号喷水管 | Q4.3 | Spray4 | 中间 |
符号表建好之后,程序里统一用符号名引用,别直接敲 I0.4、Q4.3。血泪经验是:改地址的时候符号表一改就全改,裸写地址要一个个搜。Step7 的符号表支持导入导出,工程里我一般会顺手导出一份 CSV 存档,换电脑重装软件时能直接导回来。
程序启动时需要一个初始化网络,放在 OB100(暖启动组织块)里,把中间位和计数器清零,避免上次运行的残留状态带进来:
// OB100:暖启动初始化,清中间位、计数器、运行标志 L B#16#0 T MB10 // MB10 存花样输出请求位,bit0~bit3 对应 1~4 号 T MB11 // MB11 存辅助状态位 SET R "Run" // M0.0 运行标志复位 R C0 // 交替计数器清零 R C1 // 备用计数器清零L B#16#0+T MB10是把一个字节整体清零,比逐个R M10.0干净。SET的作用是把 RLO 置 1,后面的R指令需要有 RLO 为 1 才执行复位动作,写R "Run"之前不加SET,这条指令根本不会生效——这是 STL 初学者最容易漏的一步。
2.3 外部接线与主电路:急停串在输出回路,不要只进 PLC
外部接线图这部分,课设里画的是 24V 输入公共端接 0V、输出公共端接 24V、每路输出串熔断器再驱动接触器线圈 KM1~KM4,接触器主触点去控制电磁阀或者水泵。主电路侧有总开关、短路保护、热继电器。
有一条必须强调:急停不要只做一个输入点进 PLC。程序跑飞、输出模块击穿、扫描周期卡死,任何一种情况下,靠软件读 I0.x 再断输出都不可靠。正确做法是把急停按钮的常闭触点直接串在输出公共回路或者接触器线圈回路上,PLC 只是“知道”急停被按下了,真正切断执行机构的是硬件回路。
提示:接触器线圈两端并 RC 吸收或者续流二极管,能明显减少对 PLC 输出触点的电弧烧蚀,尤其是花样 3 那种几秒就动作一次的高频场景。
3. 四种花样的梯形图拆解:定时器链、计数器与移位
硬件和地址定下来之后,剩下的全是时序问题。四种花样的本质是同一件事的四种排列:什么时刻哪些喷头该亮、亮多久、下一拍是什么。这一章按花样逐个拆,重点讲为什么这么写,而不是只贴一段能跑的代码。
3.1 花样 1 和 2:同一套延时链,正反两个方向
花样 1 的要求是:4 号先喷,延时 2s 后 3 号跟,再 2s 后 2 号,再 2s 后 1 号,四个一起喷 15s 后停。花样 2 是把顺序倒过来,1 号先喷,延时 2s 依次加到 4 号,一起喷 30s 后停。
延时链有两种写法。一种是级联:T1 计时 2s,T1 到了启动 T2 计 2s,T2 到了启动 T3……问题是前级一断,后级全部跟着复位,单步/连续切换时状态很容易乱。另一种是并行:所有定时器的启动条件都是同一个“运行 + 花样 1”,各自计 2s、4s、6s,互不依赖。这套程序用的是并行写法,代价是多占几个定时器,换来的是复位干净、单步模式好控制。
// Network 10:花样 1 的四个并行接通延时(SD = 接通延时定时器) // T1=2s T2=4s T3=6s T4=21s(6s 起全喷 + 15s 全喷结束) A "Run" A "Mode1" L S5T#2S SD T1 A "Run" A "Mode1" L S5T#4S SD T2 A "Run" A "Mode1" L S5T#6S SD T3 A "Run" A "Mode1" L S5T#21S SD T4SD是接通延时定时器指令,RLO 为 1 时开始计时,计时到设定值后定时器位变 1;RLO 变 0 时定时器立即复位,位清零。四个定时器的启动条件完全相同,所以 t=0 时刻同时起跑,T1 在 2s 到、T2 在 4s 到、T3 在 6s 到、T4 在 21s 到,时间轴天然对齐。
S5T#2S这种写法由编译器自动选时基,2s 会落到 100ms 时基上,实际精度在 ±100ms 以内,肉眼看不出来。真正要注意的是 21s 这种“起点 + 持续时间”算出来的值,最好在注释里写清楚它是 6+15 得来的,否则过两周自己都看不懂为什么是这个数。
输出侧不要直接把 T1、T2 赋给 Q4.x。这套程序的做法是先用中间位汇总,最后统一输出:
// Network 11:花样 1 输出请求位汇总到 MB10 // M10.3=4号 M10.2=3号 M10.1=2号 M10.0=1号 A "Run" A "Mode1" AN T4 = M10.3 A "Run" A "Mode1" A T1 AN T4 = M10.2 A "Run" A "Mode1" A T2 AN T4 = M10.1 A "Run" A "Mode1" A T3 AN T4 = M10.0每个中间位的条件都是“运行 + 模式 + 该级延时已到 + 总时长未到”。AN T4是关键:T4 一到,四个中间位同时断,喷水全停。花样 2 只要把 T5~T8 的设定值改成 2s/4s/6s/36s,输出方向的对应关系反过来(M11.0 从 t=0 就置位,M11.1 等 T5,依次类推),逻辑结构完全一样。
3.2 花样 3:3s 节拍加计数器,交替 5 次后转全喷
花样 3 的时序是:1、3 号同时喷,3s 后 2、4 号喷、1、3 停;这样交替 5 次,然后 1~4 号全喷 30s 后停止。这是四种花样里唯一需要“记住已经交替了几次”的,必须上计数器。
先做一个 3s 的自复位节拍发生器。写法是把定时器自己的常闭点串在启动条件里:
// Network 20:3s 节拍发生器,T10 每 3s 产生一个扫描周期宽的脉冲 A "Run" A "Mode3" AN C0 // 计数到 5 后停止交替,节拍也停 AN T10 L S5T#3S SD T10原理是这样的:T10 计时到 3s 时,定时器位变 1;下一个扫描周期,AN T10不成立,RLO 变 0,SD 定时器立即复位,位清 0;再下一个扫描周期,AN T10又成立,定时器重新从 0 开始计时。所以 T10 的位只在到达那一刻保持一个扫描周期,形成一个窄脉冲,正好拿来当计数器的计数脉冲。
计数器这一段,坑最多:
// Network 21:交替次数计数,T10 的上升沿驱动 A T10 FP M20.0 // 上升沿检测,边沿位存 M20.0 CU C0 // 加计数 L 5 S C0 // 预设值 5 // Network 22:判断奇偶,决定当前是 1、3 喷还是 2、4 喷 L C0 L 1 AW // 字与,取计数器当前值的最低位 L 0 ==I = M11.0 // M11.0=1 表示偶数次,1、3 号喷FP M20.0是上升沿检测,只有 T10 从 0 变 1 的那一个扫描周期,RLO 才为 1。如果省掉这一步,直接把A T10接到CU C0,计数器会在 T10 为 1 的每个扫描周期都加一次,一个 20ms 的扫描周期能把 5 次计满只用 100ms,跑起来就是“疯狂闪”。这是 PLC 顺序控制里最经典的翻车现场之一。
奇偶判断用的是AW(字逻辑与)取最低位,比MOD指令直观,也比写比较指令省事:C0 的当前值最低位是 1 就是奇数次,是 0 就是偶数次。
全喷阶段用比较指令判断计数是否已满:
// Network 23:计数满 5 次后转全喷 30s A "Run" A "Mode3" L C0 L 5 >=I L S5T#30S SD T11L C0读出计数器当前值(整数),L 5把 5 压入累加器,>=I做整数比较,结果影响 RLO。计数未满时这一段不导通,T11 不起作用;计数满 5 后 T11 开始计 30s,30s 到了把全喷输出切断。输出汇总时,交替阶段和全喷阶段要用“或”拼起来:
| 喷头 | 交替阶段条件 | 全喷阶段条件 |
|---|---|---|
| 1 号 | C0 < 5 且 C0 为偶数 | C0 ≥ 5 且 T11 未到 |
| 2 号 | C0 < 5 且 C0 为奇数 | C0 ≥ 5 且 T11 未到 |
| 3 号 | 同 1 号 | 同 1 号 |
| 4 号 | 同 2 号 | 同 2 号 |
3.3 花样 4:2s 移位节拍与掩码表
花样 4 是四种里最长的一条:1-2-3-4 按顺序每隔 2s 开一个,全开后一起喷 30s;然后 1、2、3、4 分别延时 2s 依次停水;再延时 1s,按 4-3-2-1 的反向顺序每隔 2s 开一个,全开后喷 30s 停止。整条循环接近 80s。
这条时序不适合再用一堆定时器硬堆,用移位寄存器更清楚:拿一个字节 MB12 的低 4 位表示 1~4 号喷头的开关状态,bit0 对应 1 号、bit3 对应 4 号。正序开启就是每来一个 2s 节拍,整个字节左移一位再或上 1;逆序关闭就是按位清 0。掩码表如下:
| 阶段 | 时间点 | MB12 低 4 位 | 对应喷头 | 动作 |
|---|---|---|---|---|
| 正序开启 | t=0 | 0001 | 1 号 | 开 1 号 |
| t=2s | 0011 | 1、2 号 | 开 2 号 | |
| t=4s | 0111 | 1、2、3 号 | 开 3 号 | |
| t=6s | 1111 | 全开 | 开 4 号 | |
| 全喷 | t=6~36s | 1111 | 全开 | 保持 30s |
| 正序关闭 | t=36s | 1110 | 2、3、4 号 | 关 1 号 |
| t=38s | 1100 | 3、4 号 | 关 2 号 | |
| t=40s | 1000 | 4 号 | 关 3 号 | |
| t=42s | 0000 | 全关 | 关 4 号 | |
| 间隔 | t=42~43s | 0000 | 全关 | 停 1s |
| 逆序开启 | t=43s | 1000 | 4 号 | 开 4 号 |
| t=45s | 1100 | 3、4 号 | 开 3 号 | |
| t=47s | 1110 | 2、3、4 号 | 开 2 号 | |
| t=49s | 1111 | 全开 | 开 1 号 | |
| 全喷 | t=49~79s | 1111 | 全开 | 保持 30s |
移位那一段的核心指令是SLW和OW:
// Network 30:2s 节拍脉冲,M20.1 为边沿位 A "Run" A "Mode4" AN T20 L S5T#2S SD T20 // Network 31:每个节拍左移一位并补 1(正序开启阶段) A T20 FP M20.1 L MB12 SLW 1 // 字左移 1 位,ACCU1 = MB12 << 1 L 1 OW // 或上 1,ACCU1 = (MB12<<1) | 1 T MB12SLW 1是字左移一位,把原来的 bit0 挤到 bit1、bit1 挤到 bit2,最低位补 0;紧接着L 1+OW把最低位置 1,就实现了“新喷头加入、老喷头保持”。逆序开启阶段改成SRW 1+ 或上 8,方向就反过来了。
这套写法比 16 个定时器堆出来的梯形图短得多,而且改花样只需要改掩码表,不用动逻辑。第 6 章会把掩码表彻底参数化,这里先记住结构。
3.4 单步/连续与模式切换:两个必须互锁的地方
单步和连续的区别是“跑完一次循环停不停”。实现方式是在启动自锁回路里串一个“循环完成”位 M0.1:
// Network 1:运行标志,单步模式下循环完成即断开 A "Start" O "Run" AN "Stop" AN M0.1 // 单步循环完成位,连续模式下不置位 = <p> <a href="https://download.csdn.net/download/weixin_43410881/10719353" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>