简介:这份资源是面向自动化、电气控制相关专业学生及PLC初学者的课程设计参考资料,围绕基于PLC的花式喷水池控制系统展开,帮助读者理解从硬件配置、I/O地址分配、梯形图编程到仿真调试的完整设计流程。压缩包内共1个doc文档,约956KB,以文字与图表形式呈现设计目的、控制任务、硬件接线、系统流程图及梯形图程序等内容,结构完整、便于对照学习。文档详细给出四种喷水模式的控制逻辑,涵盖单步与连续运行、选择开关切换、定时器与计数器配合等典型知识点,并附有Step7仿真调试结果与总结反思。目前已有1756人学习下载,适合需要完成PLC课设、准备电气控制类实验或希望积累西门子S7编程实践经验的读者参考借鉴。
1. 从一组喷头到一套状态机:这个 PLC 课设到底在练什么
四组喷头、五种开关、四种花样,看起来像个玩具,但它其实是电气控制课里最典型的“小系统全流程”训练。按下启动按钮,4 号喷头先出水,2 秒后 3 号跟上,再 2 秒 2 号、再 2 秒 1 号,四组一起喷 15 秒后停;换成选择开关位置 3,又变成 1、3 先喷、3 秒后 2、4 接替、交替 5 次再全开 30 秒。这套基于 PLC 的花式喷水池控制,练的不是单个指令,而是把定时器、计数器、自锁互锁、单步/连续切换和方式选择揉进一个能仿真跑通的完整程序里。适合正在做 PLC 课程设计、手里有 STEP7 V5.5 和 S7-200/300 仿真环境、想照着把梯形图敲出来并验证四种花样的开发者。下面按“先看懂系统、再跑通仿真、最后能改花样”的顺序拆。
2. 系统拆解:I/O 分配、硬件接线与四种花样的状态迁移
2.1 输入输出地址表就是整个程序的骨架
这个项目最容易被低估的一步是 I/O 分配。喷水池的所有逻辑最终都落在 8 个输入点和 4 个输出点上,地址定错一个,后面梯形图全得返工。原文给出的分配表是:
| 类型 | 设备 | 地址 | 说明 |
|---|---|---|---|
| 输入 | 启动按钮 | I0.0 | 常开,按下启动 |
| 输入 | 停止按钮 | I0.1 | 常闭或常开按接线定,程序里统一处理 |
| 输入 | 单步开关 | I0.2 | 单步位置时只跑一次循环 |
| 输入 | 连续开关 | I0.3 | 连续位置时循环运行 |
| 输入 | 选择开关 1 | I0.4 | 花样 1 |
| 输入 | 选择开关 2 | I0.5 | 花样 2 |
| 输入 | 选择开关 3 | I0.6 | 花样 3 |
| 输入 | 选择开关 4 | I0.7 | 花样 4 |
| 输出 | 1 号喷水管 | Q4.0 | 最外环 |
| 输出 | 2 号喷水管 | Q4.1 | 次外环 |
| 输出 | 3 号喷水管 | Q4.2 | 内环 |
| 输出 | 4 号喷水管 | Q4.3 | 中心 |
这里有个细节值得说:单步和连续用了两个独立输入点 I0.2、I0.3,而不是一个开关的两个位置共用一个点。常见做法是程序里用I0.2的常开和I0.3的常闭做互锁,保证同一时刻只有一种模式生效。如果现场接线只给了一个选择开关,那就得在程序里做边沿判断,否则切换瞬间两个状态可能同时为真,喷水池会出现“跑一半又重来”的玄学现象。
输出侧 Q4.0 到 Q4.3 对应四组喷水电磁阀,中间经过接触器或继电器隔离。主电路图上每组喷头配一个接触器线圈,PLC 输出点驱动线圈,线圈触点控制电磁阀。这个层级关系在仿真里可以简化,但实际接线时不能省,否则 PLC 输出点直接带阀容易烧点。
2.2 四种花样本质是四条并行的状态链
把四种工作方式翻译成程序语言,它们不是四段互不相干的代码,而是共享“启动/停止/单步连续”外壳、内部各自一条定时器链的状态机。逐条看:
花样 1 是逆序启动:4 号先喷,延时 2s 加 3 号,再 2s 加 2 号,再 2s 加 1 号,四组齐喷 15s 后全停。用梯形图实现时,典型写法是一个启动自锁后串四个定时器 T37、T38、T39、T40(以 S7-200 的 100ms 定时器为例),每个定时器到点后置位对应的 Q 输出,最后一个定时器再驱动一个 15s 的总喷定时器。
花样 2 是顺序启动:1 号先喷,2s 后 2 号,再 2s 3 号,再 2s 4 号,齐喷 30s 后停。结构和花样 1 对称,只是输出置位顺序反过来,总喷时间从 15s 改成 30s。
花样 3 最绕:1、3 同时喷,3s 后 2、4 喷、1、3 停,交替 5 次后四组全喷 30s 停止。这里必须引入计数器,常见做法是用一个计数器 C0 对交替次数计数,计到 5 后触发全喷阶段。交替本身用两个定时器互相复位实现:T41 到时切换状态,T42 到时切回来,每切换一次给 C0 加一。
花样 4 是正反序组合:1→2→3→4 各延时 2s 依次喷,齐喷 30s,然后 1、2、3、4 分别延时 2s 停水,再延时 1s,4→3→2→1 反向各 2s 喷水,齐喷 30s 后停。这条链最长,定时器数量最多,也是最容易在仿真里跑飞的一条。
提示:四种花样共用 Q4.0 到 Q4.3 四个输出,所以程序里必须保证同一时刻只有一种花样在驱动输出。方式选择开关的四个输入点要做互斥,或者在每个花样段前串入其他花样未选中的常闭触点。
2.3 单步与连续的差别只在循环回路上
单步和连续不是两套程序,差别在循环末尾。连续模式下,一个循环结束后自动回到启动条件重新计时;单步模式下,循环结束就停在停止状态,必须再按一次启动。实现上常见两种做法:一种是用I0.3连续开关的常开触点并联在启动自锁回路里,循环结束信号触发后如果连续开关在连续位就重新自锁;另一种是用一个“循环完成”标志位 M0.0,连续时 M0.0 触发重新启动,单步时 M0.0 只复位运行标志。
我一般倾向第二种,因为标志位可以在仿真里单独监控,调试时一眼能看出循环到底走没走完。第一种写法在梯形图上更短,但一旦循环没接上,排查起来像黑匣子。
3. 在 STEP7 V5.5 里把梯形图敲出来并跑通仿真
3.1 建工程与硬件组态的最小步骤
打开 STEP7 V5.5,新建项目,插入一个 SIMATIC 300 站(如果手头是 S7-200 的课设环境,用对应的编程软件,逻辑一致)。硬件组态里选一个带足够 DI/DO 的 CPU,比如 CPU 314C 或课设常用的型号,确认输入地址从 I0.0 开始、输出从 Q4.0 开始。这一步的关键是地址偏移:如果组态时输出模块插在 4 号槽,Q 地址自然从 Q4.0 起;如果插在别的槽,地址会变,后面梯形图里的 Q4.x 就全对不上。
组态完成后编译保存,进入 OB1 或新建 FC1 写程序。四种花样建议分四个 FC 写,主程序里用方式选择开关调用对应 FC,这样改一种花样不影响其他三种,二次开发时也清爽。
3.2 花样 1 的梯形图逻辑逐段说明
下面用类梯形图的布尔逻辑表达花样 1 的核心段,实际在 STEP7 里用触点、线圈和定时器指令实现:
// 花样1启动与自锁(M1.0 为花样1运行标志) I0.0(启动) I0.1(停止) I0.4(方式1) M1.0 --| |--------|/|----------| |----------( )-- // 4号喷头先动作 M1.0 --| |------------------------------------( Q4.3 ) // 延时2s后3号 M1.0 T37 --| |--------| |-------------------------( Q4.2 ) | +--[ TON T37, 2s ] // 再延时2s后2号 T37 T38 --| |--------| |-------------------------( Q4.1 ) | +--[ TON T38, 2s ] // 再延时2s后1号 T38 T39 --| |--------| |-------------------------( Q4.0 ) | +--[ TON T39, 2s ] // 四组齐喷15s后停止 T39 T40 --| |--------| |-------------------------( R M1.0 ) | +--[ TON T40, 15s ]逻辑说明:M1.0是花样 1 的运行标志,启动按钮 I0.0 按下且停止按钮 I0.1 未动作、方式开关在位置 1 时自锁。四个定时器串联,每个定时器的输入是前一级的输出,形成 2s、2s、2s、15s 的阶梯。最后一个定时器 T40 到点后复位 M1.0,整个花样结束。参数上,S7-200 的 T37 是 100ms 分辨率,设定值 20 表示 2s;T40 设定值 150 表示 15s。如果用的是 S7-300 的 S_ODT 定时器,时间直接填 S5T#2S 这种格式。
这里有个容易翻车的点:T40 复位 M1.0 的同时,T37 到 T40 的使能条件全部断开,定时器自动复位,下一轮循环才能重新计时。如果只复位 M1.0 而不让定时器复位,连续模式下第二轮会直接从上次的时间继续,喷水顺序就乱了。
3.3 花样 3 的计数器交替逻辑
花样 3 的交替 5 次是整份程序里最需要小心的地方,核心是用计数器控制交替次数:
// 交替节拍:T41 3s 切换,T42 3s 切回 M3.0 T42 --| |--------|/|--------[ TON T41, 3s ] T41 --| |-------------------[ TON T42, 3s ] // 每次 T41 到点计数一次 T41 --| |-------------------[ CTU C0, PV=5 ] // 交替阶段:1、3号喷 M3.0 C0 --| |--------|/|--------( Q4.0 ) | +----------( Q4.2 ) // 交替阶段:2、4号喷 T41 C0 --| |--------|/|--------( Q4.1 ) | +----------( Q4.3 ) // 计满5次后全喷30s C0 --| |-------------------[ TON T43, 30s ] C0 --| |-------------------( Q4.0 ) +----------( Q4.1 ) +----------( Q4.2 ) +----------( Q4.3 )逻辑说明:T41 和 T42 互相复位形成 3s 交替节拍,T41 每次到点给计数器 C0 加一。C0 未计满 5 时,Q4.0/Q4.2 和 Q4.1/Q4.3 两组交替输出;C0 计满后,两组同时输出并启动 30s 定时器 T43。参数上,C0 的预设值 PV=5 对应交替 5 次,T43 设定 30s。注意计数器要能在下一轮循环时复位,常见做法是在 M3.0 启动的上升沿复位 C0,否则连续模式下第二轮计数器还停在 5,直接跳到全喷阶段。
3.4 用 PLCSIM 验证四种花样的观察点
程序下载到仿真器后,不要一上来就按启动看喷头。先在变量表里把 I0.0 到 I0.7、Q4.0 到 Q4.3、M1.0 到 M4.0、T37 到 T43、C0 全部加进去,逐条验证:
第一步,方式开关置 1,按启动,观察 Q4.3 是否立即为 1,2s 后 Q4.2 是否为 1,依次到 Q4.0,15s 后全部归零。第二步,切到方式 2,确认顺序反过来且总喷 30s。第三步,方式 3 重点看 C0 是否从 0 计到 5,交替阶段两组输出是否严格互斥。第四步,方式 4 分段看正序启动、齐喷、逐个停水、反向启动四段是否衔接。
仿真里最值得盯的是定时器的当前值。如果某个定时器一直停在 0 不动,先查它的使能条件是不是被前面的常闭触点断开了;如果定时器到点后输出不动作,查输出线圈前面有没有串入其他花样的互锁触点。
4. 避坑与排查:仿真跑通前最容易翻车的五件事
4.1 停止按钮逻辑取反导致按下去没反应
现象:按下停止按钮,喷水池照常运行。原因:停止按钮现场接的是常闭触点,程序里又用了常闭指令|/|,两次取反等于常开,停止信号永远进不来。解决:先确认接线是常开还是常闭,常闭接线在程序里用常开指令,常开接线用常闭指令,全篇统一。我一般会在变量表里单独监控 I0.1 的状态,按下去看它是否翻转,翻转了再查程序。
4.2 方式选择开关没有互斥,两种花样同时跑
现象:选择开关拨到位置 2,结果 1 号和 4 号喷头同时动作。原因:四个方式输入点各自驱动一段程序,没有做互斥,或者选择开关是编码开关而不是四位独立开关,程序却按独立点处理。解决:在每个花样 FC 的启动条件里串入其他三个方式输入的常闭触点,或者在主程序里先做方式译码,只允许一个方式标志位为 1。
4.3 连续模式下第二轮定时器不复位
现象:单步跑一遍正常,切到连续后第二轮喷水顺序错乱或时间缩短。原因:循环结束时只复位了运行标志,没有复位定时器和计数器,第二轮从上次的累计值继续。解决:在运行标志的下降沿或下一轮启动的上升沿,用复位指令清掉本条花样用到的所有定时器和计数器。常见做法是每个花样 FC 开头加一段初始化,启动上升沿触发。
4.4 输出点地址偏移对不上
现象:程序里写 Q4.0,仿真里 Q0.0 亮了。原因:硬件组态时输出模块的槽位和程序里假设的地址不一致,S7-300 的 Q 地址按槽位分配,不是固定从 Q4.0 起。解决:打开硬件组态看模块属性里的起始地址,按实际地址改程序,或者调整模块槽位让地址对齐。改之前先在变量表里强制一个 Q 点,看哪个物理点响应,反向确认地址。
4.5 花样 4 反向停水段定时器互相打断
现象:花样 4 跑到反向停水阶段,某个喷头停水时间不对,或者直接跳过。原因:反向段用了和正向段相同的定时器编号,正向段还没完全复位,反向段的定时器使能条件就被打断了。解决:正向和反向各用一组独立定时器,编号不要复用;或者在进入反向段前加一个短延时,等正向定时器全部复位后再启动反向链。
5. 二次开发:把四种花样改成可配置的喷水节拍表
这套程序跑通之后,最有价值的改造不是再加一种花样,而是把“写死的定时器链”换成“可配置的节拍表”。课设里四种花样的时间参数(2s、3s、15s、30s、5 次)全散落在梯形图里,改一个时间要翻好几段程序。我的做法是开一块数据区,比如 DB1,定义每个花样的步骤数组:
// DB1 结构示例(每个花样最多 8 步) Step[i].OutputMask : BYTE // 哪几组喷头动作,bit0~bit3 对应 1~4 号 Step[i].Duration : INT // 该步持续时间,单位 100ms Step[i].NextStep : INT // 下一步索引,0 表示结束主程序用一个步索引变量,每步启动对应的定时器,定时器到点后按NextStep跳转,输出侧把OutputMask拆成 Q4.0 到 Q4.3 四个位。这样四种花样只是 DB1 里四张不同的表,改花样等于改表,不用动梯形图。验证方法也简单:在仿真里改一个 Duration 的值,看喷水时间是否跟着变;改 OutputMask,看喷头组合是否切换。
改造时有两个坑要提前避开。一是步索引越界,NextStep填了不存在的步号,程序会卡死或乱跳,所以跳转前要加范围判断,越界就当结束处理。二是输出掩码的位顺序,DB 里 bit0 到 bit3 和 Q4.0 到 Q4.3 的映射要写死在一个转换 FC 里,不要在每个步骤里手写,否则改一次地址要动几十处。
如果还想再进一步,可以把单步/连续也做成表里的一个标志:连续模式下NextStep指向第一步形成闭环,单步模式下最后一步的NextStep填 0。这样单步和连续不再是两套逻辑,只是同一张表的两种走法。
从那以后我每次做这类定时器链的课设或小项目,都强制先把时间参数和输出组合抽到数据区再写逻辑,梯形图里只留步进和跳转。看起来多花半小时建表,后面改花样、调时间、给同学讲逻辑都省事得多。希望帮到你。
本文还有配套的精品资源,点击获取