☰
从PLC到组态王:游泳池水处理监控系统实战拆解
2026/10/1 12:37:07 网站建设 项目流程

设备间里最怕的不是设备坏,而是设备出了状况人还不知道。很多中小型游泳馆的机房,循环泵、砂缸、加药泵各管各的,控制柜上几个按钮加几个指示灯,水质好不好全凭老师傅的经验和鼻子。等到发现水浑浊了、余氯超了,已经过去一个下午。这篇文章要拆的,就是一套典型的“PLC+组态王”游泳池水处理监控系统。PLC选西门子S7-200,组态软件用组态王6.60,我会把最核心的梯形图程序逻辑、接线图思路、组态画面开发流程全部展开,尽量做到你能照着这篇内容把一套小系统搭出来。

这套方案对三类人最有用:一是正在纠结毕设选题的自动化专业学生,S7-200加组态王是经典搭配,题目落地不虚;二是刚入行做PLC调试的现场工程师,需要一个能直接借鉴的完整案例;三是游泳馆、水上乐园的机电维护人员,想看懂机房柜子里到底是怎么控制水处理的。下面我会按照工程落地顺序走一遍,从工艺到选型,从接线到程序,从组态到调试,全部用现场实战的口吻来讲。

1. 项目整体设计与方案选型

1.1 游泳池水处理的工艺需求拆解

做控制系统之前先把工艺吃透。游泳池水处理的核心不是单纯“抽水—过滤—回水”,而是一个闭环的水质维护流程,通常包括五个环节:循环、过滤、消毒、加热、补水。

循环环节靠循环泵把池水抽出,经过毛发聚集器拦截头发和杂物,再进入砂缸过滤器。过滤环节的核心是石英砂或玻璃砂滤罐,通过滤层拦截悬浮物,运行一段时间后滤层堵塞,滤前滤后压差上升,需要反冲洗。消毒环节通过计量泵投加次氯酸钠或者臭氧,控制余氯浓度。加热环节用板式换热器或空气源热泵把水升温到26到28摄氏度左右。补水环节由液位信号控制补水电磁阀,保持水位稳定。

从控制对象的角度拆,整个系统需要管理这几类设备:循环泵、砂缸电控阀组、三台投药泵、加热装置、补水电磁阀、水质仪表。传感器侧的信号主要包括水温、pH值、余氯、浊度、水位、滤前滤后压差。把这些列成一个表会发现,它们不是彼此独立的“单点启停”,而是环环相扣的联锁关系:压差超限必须切换反洗,反洗期间循环流量打折扣,余氯偏低要启动加药泵,温度偏差要开大加热阀。所以设计时不能用“一个按钮控一台泵”的思路,要用“状态机加联锁”的思路来做。

1.2 为什么选S7-200搭配组态王,而不是单片机和纯继电器

S7-200在这个场景里依然是常青树,理由很现实。第一点,成本可控。CPU 224XP或者CPU 226CN加一块模拟量扩展模块,整个PLC部分两三千元以内能拿下,对中小型游泳馆预算非常友好。第二点,资料和上手成本低。网上关于S7-200的PID向导、自由口通讯、模拟量标定例子非常多,学生和初学工程师找参考极其方便。第三点,抗干扰能力强。机房里有大功率水泵电机、加药泵、变频器,电磁环境不干净,PLC的输入滤波和继电器输出比单片机系统稳得多,耐操程度不是一个级别。

组态王选型的原因更直接。它原生支持西门子S7-200的PPI协议驱动,PLC端甚至不用写一行通讯程序,组态王侧只要把串口、波特率、站号配置对就能读到数据。组态王的图库也足够丰富,池体、水泵、砂缸、阀门、管道都有现成对象,拖拽就能拼出工艺画面。这个对没有专业美工资源的工程团队太重要了,我自己画一个砂缸要折腾半小时,从图库拉出来改个文字标注只要两分钟。再加上组态王的报表和报警记录成熟,水质日报、泵运行时长统计这些需求不用额外开发。

那纯继电器方案行不行?能用,但局限性太明显。继电器柜里看不到历史状态,反洗定时想调整要改硬件时间继电器,余氯超限没有记录,每台泵累计运行多少小时查不到。对稍微正规一点的泳池运营方来说,这些都是刚需。所以只要预算允许,PLC加组态就是这类水处理项目的最低合理配置。

1.3 系统架构与控制层级

整体架构是经典的三层结构。设备层是循环泵、砂缸电控阀组、投药泵、加热器、补水阀和各种传感器。控制层是S7-200 PLC,负责所有逻辑运算、联锁、故障判断。监控层是组态王,负责画面显示、远程启停、报警、趋势、报表。

数据通道上有个细节值得单独说明。PLC通过PPI协议走串口和工控机通讯,传感器信号以4到20毫安模拟量或者开关量方式进PLC。这里有个坑:如果PLC只有一个通信口,同时挂编程软件STEP 7 Micro/WIN和组态王会冲突。实际项目里我倾向于选CPU 226CN,它带两个Port口,一个口给编程下载线,另一个口专门给组态王用。这样调试时改程序不影响上位机监控。

2. 硬件关键部分和接线图解析

2.1 I/O点表统计与模块选型

以一个小型标准池为例,池容大约400立方米,循环周期6小时。先把I/O点列清楚,这是所有后续工作的基准。

数字输入大概这么几类:循环泵手动自动切换旋钮、远程本地切换、水泵热继电器过载信号、低水位浮球开关、滤前滤后压差开关、故障复位按钮。急停按钮不进PLC输入点,直接串在安全回路里单独处理。数字输出包括:循环泵接触器、砂缸过滤阀、反洗阀、正洗阀三路电磁阀输出、投药泵A絮凝剂、投药泵B消毒剂、投药泵C pH调节剂、加热器启动、补水电磁阀、声光报警器。

模拟输入主要是水温、水位、pH值、余氯、滤前压差、滤后压差。模拟输出预留一路给变频器频率给定,如果循环泵用变频控制的话。

汇总起来就是12个数字输入、10个数字输出、4到5个模拟输入、1个模拟输出。选型方案推荐CPU 224XP加EM231模拟量扩展模块。CPU 224XP本身就带2路模拟量输入和1路模拟量输出,再挂一个EM231扩展4路AI,模拟量通道刚好多出一路备用。输出选继电器型,因为水泵、电磁阀这类负载电流波动大,晶体管输出扛接触器线圈不合适。

2.2 接线图解析:输入回路、输出回路、传感器接线

画接线图的时候有三个地方最容易翻车,我一个个说。

第一是PLC输入点的公共端接法。S7-200继电器输入的漏型源型接法有个记忆口诀:公共端吃正电就是源型输入。实际接法是1M和2M接直流24伏正极,输入点通过按钮和传感器触点接0伏。如果接反了,你按按钮输入灯就是不亮,还以为是程序问题,查半天才发现是公共端接错了。

第二是输出回路的线圈电压。继电器输出触点本身是不带电的,它只负责接通,外部分别给负载供220伏交流电。带感性负载比如接触器线圈时,必须在负载两端并联RC阻容吸收或者压敏电阻,否则触点断开瞬间的浪涌电弧会很快烧蚀触点,用不了多久就发黑。

第三是24伏电源容量。PLC本体输入点、EM231、pH传感变送器、余氯传感变送器、中间继电器线圈,全部要吃24伏。24伏开关电源选小了,一带负载电压就跌到20伏以下,模拟量读数漂得离谱。我一般按总负载电流乘以1.5倍的冗余去选,宁可大不能小。

传感器接线单列一块。pH和余氯传感器多数是两线制4到20毫安输出,正极接24伏正,负极接模拟量模块的A加端子,模块内部有250欧采样电阻,A减和电源负极共地。水温推荐用PT100热电阻配变送器,输出同样是4到20毫安。信号线屏蔽层要单端接地,防止地环流干扰。加药泵的控制输出要经过中间继电器转换,不要让PLC触点直接去驱动隔膜泵,尤其是带电磁头的计量泵,浪涌很猛。

2.3 供电与安全回路

整柜供电按隔离、分配、保护三个层次来做。总进线装一只带漏电保护的断路器,然后分几个回路:PLC主电源回路、24伏开关电源回路、220伏驱动回路包括接触器和电磁阀和加热器、仪表变送器电源回路。每个回路单独配熔断器或者小型断路器,故障时互不牵连,这个对后续排查问题特别重要。

急停回路必须强调一遍,它要串在整个220伏驱动回路的总接触器线圈回路里,不经过PLC。为什么?PLC有死机的可能,但安全回路必须始终有效。急停按下,水泵、加热、投药全部失电,只有仪表和PLC继续供电,这样上位机还能显示报警状态,值班人员能知道发生了什么。

3. 梯形图程序设计与实操

3.1 程序结构:主程序、子程序、中断的合理划分

S7-200编程有个很容易犯的毛病,把所有逻辑全部堆在OB1主程序里。程序短的时候还行,一旦有几百条指令,扫描周期变长,而且现场排错时根本找不到问题出在哪一段。我习惯把程序拆成四个块。

OB1主程序只做扫描周期管理和故障综合汇总,不写具体控制逻辑。SBR_0子程序管泵控,循环泵、砂缸反洗状态机的逻辑全部放这里。SBR_1子程序管模拟量处理,AIW读取、工程量标定、上下限判断都在这。SBR_2子程序管PID运算和投药逻辑,温控PID和余氯PID都在里面。如果有额外的仪表走自由口通讯,再用中断INT_0做轮询读取。

变量规划也按区域分开。VW100到VW120放温度数据,VW130到VW160放pH和余氯数据,M区放状态位和命令位。这样组态王建变量时不会乱,PLC程序里交叉引用查起来也方便。

3.2 核心逻辑:自动手动切换、泵联锁与反洗顺序

先做手动自动切换逻辑,这是所有现场项目的第一步。用M0.0作为自动模式标志,由操作面板上的旋钮或者组态王里的按钮写入。手动模式下,每个泵和阀门可以直接通过按钮控制,便于检修和调试。自动模式下,所有设备由PLC逻辑自行判断。

循环泵的启动联锁条件用一个串联逻辑表达:自动模式成立、水箱水位不低、滤前滤后压差不超高、急停未动作、反洗程序未处于禁用泵状态。这些条件用串联常开常闭触点做与逻辑。任何一个条件不满足,循环泵就不能启动或者立即停止。

反洗程序是游泳池控制系统里最容易出问题的地方。我强烈建议用顺序步进法,不要用一堆互相竞争的定时器。实际程序里我用置位复位加定时器搭了一个三步状态机。步0是反洗准备状态,循环泵停止,反洗阀打开,砂缸泄压,停留10秒。步1是反洗冲洗状态,泵低速运行,水从砂罐底部向上冲洗,时间设600秒,这个值放在VW区方便现场调整。步2是正洗恢复状态,反洗阀关闭,正洗阀打开,泵运行30秒,把滤层压实。每一步转移条件是上一步时间到或者压差正常提前结束。最关键的一条设计约束是任何时刻只允许一个阀打开,防止过滤和反洗同时通电互相顶水。

3.3 PID与投药控制:温度、余氯两路闭环的实现

温度控制这块,S7-200的PID功能用PID向导生成最省事。在Micro/WIN里通过PID向导选择控制回路,给定值设成水温设定值变量,反馈值填标定后的温度实测变量,输出给模拟量通道控制加热阀开度。向导会生成一个PID0_INIT子程序,然后在定时中断OB35里周期调用它。

游泳池水处理有一个项目独特的调节难点,那就是大滞后。池水经过完整的循环周期可能要四到八小时,温度变化从加热端传到回水端需要很长时间。所以PID采样周期不能按常规的零点几秒来设,要跟循环周期挂钩。我实际设的是600秒,也就是十分钟一个控制周期。如果采样太快,输出会一直在那里振荡,阀门忽开忽关,实际水温反而波动更大。

余氯控制用离散逻辑更实用。余氯传感器检测值低于下限就启动投药泵,高于上限就停泵,加一个一到三分钟的检测延时防止传感器信号抖动。为什么不用PID?因为加药泵是计量泵,它本身输出的是每分钟多少毫升的流量,本质上是离散投加设备,PWM式的开停控制比连续调节更符合设备特性。如果你非要精确闭环,用PID控制加药泵的开机占空比也可以,但现场调试工作量会大不少。

3.4 通讯与变量映射:PPI协议下组态王变量的对应方式

S7-200和组态王通讯这个环节,PLC侧不需要做任何额外工作,PPI协议固化在系统里。你要保证的只有三件事:波特率一致,默认9.6k或者187.5k;站号一致,默认2;串口选择正确。

组态王侧新建IO设备时,驱动选“西门子S7-200系列(PPI)”,然后配置串口号、PLC地址、波特率。在组态王的数据词典里新建变量时,IO变量要指定连接设备和寄存器地址。梯形图里的M0.0就对应组态王里的M0.0,VW100对应VW100,地址是直接映射的。

这里有一个要注意的点,IO变量和内存变量要区分清楚。显示和控制操作用的变量用IO变量,中间计算过程用的变量用内存变量。如果组态王画面里的按钮直接去写PLC的M区保持型变量,会有一个扫描周期同步问题,我建议程序里的远程启停命令用“点击型”变量,组态王按下时写入、松开时自动复位,PLC捕捉上升沿做动作,这样最可靠。

顺带提一下自由口通讯的扩展思路。如果后续要接Modbus协议的变频器或者水质仪表,S7-200的Port0可以写自由口程序做主站轮询,把读取结果放到V区,组态王只要盯着V区读数据就行。这样把通讯数据和逻辑数据隔离,上位机配置完全不用改动。

4. 组态王监控画面开发

4.1 第一次把组态王和S7-200连起来的完整配置

组态王6.60 SP4安装完之后自带西门子S7-200的PPI驱动。在工程浏览器里选设备、新建、PLC、西门子、S7-200系列PPI,然后按向导配置即可。

关键参数逐个过一遍。通信方式选串口,不是以太网。串口号选工控机上实际使用的COM口,如果用USB转串口线,在设备管理器里看实际分配的端口号,通常是COM3或者COM4。PLC地址也就是站号填2,跟PLC侧的站号一致。波特率可以选询问后自动,也可以手动固定成和PLC一样的数值。超时时间默认3000毫秒,一般不用动,只有485总线上挂的设备多才需要调大。

配置完先别急着画画面,在设备测试里读几个变量试试。能读到温度、pH值、泵状态,再进画面开发。如果测试失败,按顺序排查串口占用、站号不对、波特率不一致三个方向。还有一个常见坑是电脑上装了旧的USB转串口驱动,占用了中断资源,导致测试时通时断。

4.2 画面设计与动画连接

组态王画面设计的原则,我总结成八个字:一眼看懂,操作不迷。监控画面不是给开发人员看的展示页,是给值班人员用的工作台,堆满功能反而增加操作负担。

我的习惯是画面分三层。最底层是工艺流程总览,画池体、循环泵、砂缸、加热器、加药泵,用管道连起来。中间层是操作区,每个设备旁边有启动、停止、自动三个按钮,有手动自动切换开关。最顶层是数据区,pH值、余氯、温度、压差统一放在顶部仪表盘或者数据表区域。

具体制作时,从组态王图库里拖出泵、罐体、阀门对象,双击进入动画连接。泵运行状态用隐含连接,运行位图显示,停止位图隐藏。阀门开闭用替换连接或者颜色变化表达式。水位、温度、压力这些连续量用模拟值输出连接对应的IO变量,量程范围填成和PLC内部标定一致的上下限。

动画连接最容易出的问题是变量类型不匹配。数值显示要求IO变量是整型或者浮点型,状态指示灯要求离散量。如果同一个VW地址既要显示模拟数值又要做状态灯,那就在数据词典里定义两个变量,一个读VW值用来显示,一个读对应位用来做灯。千万别偷懒用同一个变量去连两种连接,运行时会互相干扰。

4.3 实时趋势、报警记录与历史查询

组态王的实时趋势曲线控件添加很直观,但趋势数据要形成沉淀价值,必须进历史库。我在工程里建了一个“游泳池水处理实时数据”变量组,把温度、pH、余氯、压差、泵运行状态全部放进去。这样不管是做运营报告还是应对卫生监督部门检查,需要水质变化曲线时直接导CSV,省得翻纸质记录。

报警配置在数据词典里完成。对pH、余氯、温度、压差这四类关键量设置报警阈值,建议分预警和报警两级。比如pH值预警区间设6.8到7.8,报警区间设7.0到7.6。这里有个细节,报警延时要设300到500毫秒,不设的话传感器信号毛刺会产生一整页假报警,值班人员很快就对报警麻木了。

报警事件接报警窗控件显示,同时要联动现场声光报警。机房噪音大,光看屏幕远远不够,柜子上的警灯和喇叭必须有对应输出。PLC侧留一个报警汇总位,组态王实时监视这个位,一旦置位就发声光。

4.4 操作权限、界面锁定与远程操作

水处理系统涉及药剂投加和加热启停,不能谁都能操作。组态王里配置三级权限:管理员能改参数、能操作投药和加热;操作员能启停泵、切换砂缸工况;观察员只能看数据和画面,不能点任何按钮。每个按钮的弹起动作里用用户权限判断函数做校验,权限不足时弹窗提示。

界面状态保存这个细节很少被人提起,但现场非常恼火。操作员从总览切到参数页,再切回总览,如果手动自动状态标识和按钮文本被重置成默认状态,容易误判设备工况。我建议用画面窗口对象嵌套的方式管理子页面,让主画面实例常驻内存不销毁,切换时状态自然保持。

5. 调试与常见问题实录

5.1 通讯连不上的排查流程

通讯问题是这个系统里被问得最多的。我固定了一套现场排查顺序,照着走基本能解决八成问题。

第一步确认串口号。组态王连接的是COM口,USB转串口线在设备管理器里显示COM3或COM4,组态王设备向导里必须改成实际端口,别默认COM1。第二步确认站号。S7-200拨码或程序里的站号要和组态王站点号一致,默认2,如果拨过1就两边都改。第三步核对波特率。老版本Micro/WIN默认9.6k,组态王默认19200的情况经常发生,两边统一再试。第四步检查串口占用。最常见的就是STEP 7 Micro/WIN还开着占用串口,或者后台有个S7-200 USB驱动监控进程抢占COM口,把编程软件关掉再测试组态王。

这里额外说一个我自己踩过的坑:插上USB转PPI电缆之后,电脑出现了无法正常关机的情况,点关机后机器一直停在正在关机界面。排查到最后是老的USB驱动没有卸载干净,和系统电源管理冲突。把西门子的旧驱动彻底卸载干净,换官方最新版本驱动后解决。这个问题网上很少有人提,但实际挺普遍。

5.2 梯形图逻辑上的“反直觉”坑

现场调试时最常遇到的是程序看起来对,实际不动作。第一个典型问题是双线圈。同一个Q0.0在OB1里被写了两次,一个地方用SM0.0总能使能,另一个地方在条件分支里给Q0.0赋值,结果是后写的覆盖先写的。排查方法非常简单,用Micro/WIN的交叉引用表查一下Q0.0出现在哪些网络,看到两次以上就说明有双线圈风险。

第二个典型问题是扫描顺序依赖。组态王远程启停按钮写入M0.1,但程序里M0.1在OB1更前面的网络已经被用过,PLC扫描到后面时M0.1的值还没被更新,导致动作延迟一拍。这里我的建议是用点击型变量,也就是组态王里做个按下置位、延时复位的内存变量,PLC捕捉上升沿执行动作。

第三个问题是模拟量超上限。S7-200模拟量输入AIW0范围默认0到32000,接两线制4到20毫安时,如果模块的DIP拨码开关配置错误或者电源接错,读数可能直接是32000。这个信号如果没做上限钳制直接进PID,输出会满开度,水泵高速运行,水池波动反而更剧烈。所以标定程序里一定要加超上限保护,把超出范围的测量值强制成合理区间。

5.3 组态王画面运行常见错误

我整理过一组组态王运行时的常见报错和现象。设备管理里测试通过但运行系统里显示连接失败,这个问题多半是驱动被其他进程占用,或者IO变量没在画面里被引用,被扫描周期优化掉了。数值显示总是0,检查变量类型是不是设成了开关型,或者变量的读写属性设成只写,显示变量必须是只读或读/写。动画不变化,检查隐含和显示是否用反,以及一个变量是否同时连了隐含和替换两种连接,存在冲突。画面卡顿,检查历史库采集周期,建议设成1到2秒,这类水处理系统不需要毫秒级数据。

5.4 水泵不动作、输出被烧毁的现场经验

分享两个实打实的教训。第一个是输出继电器选型。S7-200继电器输出触点额定电流2安,带接触器线圈没问题,但直接驱动电磁阀的浪涌电流很容易打坏触点。我们项目里统一加了中间继电器,把PLC输出当信号用,由中间继电器去带驱动回路,触点寿命提升非常明显。

第二个是砂缸电控阀组的互锁问题。三位电控阀在过滤、反洗、正洗三个位置之间切换,外部阀组必须做机械或电气互锁,防止过滤阀和反洗阀同时通电。如果用的是三位保持型电磁阀,断电时阀位保持在当前位置,PLC侧的反洗程序要处理好恢复逻辑。反洗结束必须明确发指令切回过滤状态,不能依赖断电恢复默认位,否则会出现反洗完成后砂缸一直停在反洗位、循环泵还在运行的连锁问题。

写在最后的一组经验

这个项目做下来,我最大的体会是:游泳池水处理系统的难点不在某一个单独环节,而在环节之间的联锁关系。梯形图程序本身并不复杂,但反洗状态机、PID时间常数、通讯变量映射这些细节,每一个都可能让项目从“能跑”变成“跑不好”。

给准备做类似项目的朋友几个实用建议。第一,开工前一定把I/O点表和联锁矩阵画出来,这是整个项目的地基。第二,PLC程序一定要分块,别图省事全堆OB1。第三,组态王的画面要站在值班人员的使用习惯上去设计,而不是站在开发者展示功能的角度。第四,所有参数,包括PID常数、反洗时间、报警阈值,都要能在组态王界面直接修改并写入PLC的V区,现场调试会感谢你这个设计。

最后再分享一个习惯:每次调试完现场,把当时的PLC程序和组态王工程完整备份一份,文件名带上日期和版本号。这个动作看起来不起眼,但下次现场出问题的时候,你能快速对比是程序被改过还是参数被调过,省掉大量无头绪的排查时间。这套方案往大了扩展,可以加变频器节能控制、加浊度在线监测、加远程微信报警;往简单了压缩,一个小池子不配组态王,只留触摸屏也完全可行。骨架就在这篇文章里,具体往哪个方向长,看你的现场需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询