
做游泳池水处理这种项目最怕的就是甲方概念不清。很多人口头说要“自动化”实际想要的是“能远程开关水泵”但图纸一展开又要求有完整的过滤循环、自动投药、pH/余氯在线监测、补水加热联锁。我前两年接过一个室外恒温游泳池的控制改造用的就是S7-200搭配组态王整套系统做完之后效果很稳甲方也满意。今天把整套思路摊开讲从IO分配、梯形图怎么写各个功能块到接线图怎么理解、组态王怎么做通讯和画面一条线完整复盘带注释的梯形图逻辑我会一步步拆给你看。之所以选S7-200不是因为它新——这型号其实早就被S7-200 SMART接班了——而是因为存量项目多、资料全、二手模块便宜很多改造项目里的旧柜子拆下来还能用。组态王就更不用说了国产组态里的老大哥跟S7-200走PPI协议非常顺手做数据采集和报警画面基本是标配组合。如果你正在做课程设计、毕业设计或者接了个小区/会所泳池的小项目这篇内容可以直接拿来参考。1. 内容整体设计与思路拆解1.1 游泳池水处理的工艺逻辑游泳池的水处理不是“换水”核心靠的是循环过滤加投药消毒。整套工艺线大概是这样的游泳池回水 → 循环泵抽吸 → 砂缸过滤器拦截杂质 → 投药点加次氯酸钠/絮凝剂 → 换热器加热恒温池 → 池壁给水口回到池内。这个循环是24小时持续的但不同时段循环频率、投药量、加热需求都不一样。控制系统要做的事情有三件第一保证循环水泵按设定时间表运行比如白天高速循环、夜间低速循环或者直接定时启停。第二根据水质传感器反馈的pH值和余氯值自动启停投药泵。第三温度低了自动开加热阀补水水位低了自动开补水电磁阀有任何故障就要报警并做安全联锁。这些逻辑用继电器回路不是不能做但端子密密麻麻改一个时间参数就要重新布线。用PLC就灵活得多改梯形图就是改软件这也是这种小系统用PLC的核心原因。1.2 为什么选S7-200加组态王S7-200的CPU选型在这个项目里用的是CPU224 DC/DC/RLY14点数字量输入、10点继电器输出配一个EM231模拟量模块做4路模拟量输入。为什么不用S7-1200或者国产PLC说实话如果是全新项目我可能会考虑更现代的型号但游泳池水处理这种环境——湿度大、氯气腐蚀强、控制柜空间紧凑——S7-200的模块化设计和小体积反而合适。而且很多老泳池的控制柜里原本就预留了S7-200的安装位改造起来不用动柜体。组态王在这套系统里负责的是“看得见”的部分。PLC管逻辑组态王管监视实时显示pH值、余氯值、水温、水泵状态记录历史曲线弹报警窗口。底层数据交换走PPI协议编程口直接连电脑串口或USB转485通信配置不会太复杂。选这套组合还有一层考虑资料和例程全网到处都是真遇到问题不至于孤立无援。对做课程设计的学生来说S7-200梯形图教材一大把组态王的水处理例程在网上下载也容易落地阻力最小。1.3 功能清单与控制模式功能模块控制方式说明循环泵手动/自动自动按时间表启停手动通过按钮直接控制投药泵ApH调节自动根据pH传感器反馈高于上限启动酸泵低于下限停投药泵B消毒自动余氯低于下限启动高于上限停止补水电磁阀自动低液位开关动作时打开高液位时关闭加热控制阀自动水温低于设定值打开高于设定值关闭报警自动故障、超限、急停均触发这里要特别强调一个设计原则手动优先级必须高于自动。也就是说检修时打到手动状态PLC只负责直接控制输出点不该有任何自动逻辑干预。这个在梯形图里要靠一个M存储器位来切换。2. IO分配与硬件接线图纸解读2.1 IO分配表及规划思路做IO分配是整个项目里最不该省的一步。很多人上来就写梯形图结果点位对不上、模块不够用返工浪费时间。我习惯先在纸上把每个信号列全再往PLC上映射。下面是我这次的完整分配只列实际用到的PLC端子类型信号名称说明I0.0DI手动/自动切换选择开关打到自动为1I0.1DI循环泵启动按钮手动模式启动I0.2DI循环泵停止按钮手动模式停止I0.3DI循环泵过载信号热继电器常闭串入I0.4DI投药泵过载信号两台泵共用热继辅助触点I0.5DI低液位开关低于设定水位为1I0.6DI高液位开关高于设定水位为1I0.7DI加热器高温保护超温保护信号AIW0AIpH传感器4-20mA信号量程0-14AIW2AI余氯传感器4-20mA信号量程0-10mg/LAIW4AI水温传感器4-20mA量程0-100℃Q0.0DO循环泵接触器驱动接触器线圈Q0.1DO投药泵A酸泵驱动接触器Q0.2DO投药泵B消毒泵驱动接触器Q0.3DO补水电磁阀驱动电磁阀Q0.4DO加热阀驱动调节阀/开关阀Q0.5DO声光报警器报警输出有些教材会把泵的“运行反馈”也接进DI点用于判断接触器是否真的吸合这是更严谨的玩法。我这个项目是因为旧柜子里没有足够的备用输入点只在热继电器上加了一路过载反馈。如果你是新做柜子建议把运行反馈也加进去对故障排查帮助很大。2.2 接线原理图的几处关键点原理图这里没法整张贴给你但必须说清几个接线要点不然照着图纸接会踩坑。PLC电源S7-200 的 CPU224 DC/DC/RLY 这个型号负载电源是继电器输出外部不用给PLC模块单独接220V但输入回路和传感器回路必须共用一个直流24V电源。我用了明纬的DR-60-24给CPU和传感器供电容量留了大约两倍余量。数字量输入接法S7-200的漏型输入公共端1M和2M接24V每个输入点接传感器或开关的一端另一端接0V。注意I0.0到I0.7和I1.0到I1.4是两组公共端不能混接。模拟量接法EM231的A/A-、B/B-、C/C-分别对应AIW0、AIW2、AIW4。4-20mA信号直接接入但必须在信号线两端并联一个500欧姆左右的取样电阻吗不需要EM231本身支持0-20mA输入。不过传感器供电要单独布一条线别跟PLC的DO回路挤在同一个走线槽里。输出接法继电器输出点接接触器线圈时线圈两端必须并联RC吸收回路交流接触器用阻容吸收直流继电器用续流二极管。这招能显著减少触点烧蚀。3. 梯形图程序分模块详解3.1 定时器与辅助位的基础框架S7-200梯形图写自动化控制第一层永远是“框架”而不是“功能”。我先定义一个10毫秒时基的定时器做秒脉冲再定义几个辅助继电器位M分别代表自动模式、手动模式、故障状态。网络1秒脉冲生成 LD SM0.5 M0.0 网络2自动模式使能 LD I0.0 M1.0这个M0.0秒脉冲在后面做液位开关防抖、按键延时都要用到。SM0.5是S7-200系统时钟里的0.5秒脉冲拿来做时基很方便。3.2 循环泵控制网络循环泵的控制是最基本的三地控制逻辑变体。自动模式下用时间条件T37和手动启停条件组合手动模式下直接用I0.1、I0.2控制。网络3循环泵中间寄存器 LD M1.0 // 自动模式 AN M2.0 // 无故障 TON T37, 600 // 循环泵运行时间600秒 网络4循环泵运行条件 LD M1.0 // 自动模式定时运行 A T37 O I0.1 // 手动启动 AN I0.2 // 手动停止 AN I0.3 // 过载保护 AN M2.0 // 故障封锁 Q0.0 // 循环泵输出实际项目中我一般不把T37直接拿来控制而是用“运行10分钟停5分钟”这种间歇循环因为泳池的循环规则是“多次短循环优于单次长循环”能减少砂缸负担和氯气积聚。你可以根据池子大小和甲方要求调整定时器的预设值原理完全一样。这里有个容易忽视的细节过载信号I0.3是常闭点串进输入回路的热继电器跳闸后输入信号断开梯形图里用AN I0.3正好对应“无过载”。接线和程序保持同一逻辑排查故障时脑不会乱。3.3 投药泵自动控制与模拟量比较投药泵必须跟循环泵联锁循环泵不运行的情况下绝对不能投药。否则药剂打出去不循环局部浓度超高泳池里的人是受不了的。这是我踩过的坑有一次误操作导致次氯酸钠投加过量池水变绿带刺激性气味半年后才有人上门道歉。S7-200读EM231的模拟量值到AIW0后是一个0到32000的整数4-20mA对应6400到32000。pH传感器量程0到14换算公式是pH值 AIW0 / 32000 × 14但实际编程一般不这么算而是直接跟设定阈值对应的数字量比较。比如pH上限设7.6那么给定值 7.6 / 14 × 32000 ≈ 17371下限设7.2给定值 ≈ 16457。这些计算值我直接写在子程序注释里方便下次改。网络5投药泵A酸泵 LD Q0.0 // 循环泵运行中 A M1.0 // 自动模式 AN I0.4 // 投药泵无过载 AW AIW0, 17371 // pH高于上限 AN T41 // 投药间歇暂停 Q0.1 // 启动酸泵 TON T40, 30 // 投药30秒 TON T41, 300 // 投药后暂停300秒 网络6投药泵B消毒泵 LD Q0.0 // 循环泵运行中 A M1.0 AN I0.4 AW AIW2, 8200 // 余氯低于设定值8200对应1.0mg/L AN T43 Q0.2 TON T42, 20 TON T43, 240这种做法叫“间歇定量投加”是我在这个项目里自己加的逻辑。单纯靠模拟量比较直接启停泵传感器波动会造成泵频繁启停电机过热是小事pH反复跳动才是大问题。加一个“投药30秒停5分钟”的禁止窗口后投药量基本稳定pH曲线平滑很多。3.4 补水与加热控制补水控制在泳池系统里相对简单就是高低液位开关的逻辑。但实际工程里液位开关用的是浮球式浮球在水面晃动时会输出抖动信号直接接PLC会误触发补水电磁阀频繁开关。我的处理方式是加延时确认。网络7低液位防抖确认 LD I0.5 // 低液位信号 A M0.0 // 秒脉冲 TON T44, 30 // 连续低液位30秒才确认 AN T44 M3.0 网络8补水阀控制 LD I0.6 // 非高液位 A M3.0 // 低液位已确认 O M3.0 // 保持 AN T45 // 补水超时保护 Q0.3 // 补水电磁阀 TON T45, 1800 // 补水30分钟后强制关闭补水超时保护是我额外加的。以前遇见过浮球卡住低液位信号一直有补水阀整整开了一夜池子差点水漫金山。现在只要连续补水超过30分钟就强制关阀并报警这可是血泪教训换来的逻辑。加热控制更直白一点就是温度低于设定开阀、高于停止中间加个回差避免阀频繁动作。水温传感器的数字量设定按0到100摄氏度对应32000计算比如设定25摄氏度就是8000回差0.5摄氏度对应1600。网络9加热阀控制 LD Q0.0 A M1.0 AW AIW4, 8000 // 水温低于25℃ AN T46 Q0.4 TON T46, 300 AW AIW4, 9600 // 水温高于30℃时强制关闭 AN Q0.43.5 报警与故障封锁报警逻辑要分两层想现场故障过载、热保护、超温直接封锁对应输出给操作员一个声光信号设备异常补水超时、投药故障也要报警但不一定要封锁设备。全部汇总到一个M2.0里做总故障指示方便组态王上做“故障列表”集中显示。网络10总故障汇总 LD I0.7 // 加热高温保护 O I0.3 // 循环泵过载 O I0.4 // 投药泵过载 O T45 // 补水超时 M2.0 网络11报警输出 LD M2.0 Q0.5M2.0置位后我在循环泵网络里用AN M2.0将循环泵停掉。为什么不把总故障只放报警不封锁设备因为游泳池涉及人身安全过载或者高温情况下继续运行水泵可能把设备烧了甚至让水漫出来。安全优先永远是对的。4. 组态王上位机配置与通信要点4.1 通信设置及常见坑组态王跟S7-200通信最经典的方式是走串口PPI协议。新建工程后在“设备”里选择“PLC”分类下的“西门子 S7-200系列PPI”设置COM口、波特率 9600、地址2。这里最容易出问题的是两个地方第一S7-200的PPI地址要在STEP 7-MicroWIN里提前设好默认是2组态王设备的地址必须跟PLC里的地址一致。第二组态王运行的时候会占用串口如果电脑上还开着别的串口调试工具通信会直接冲突。如果S7-200带以太网模块CP243-1也可以走TCP通信组态王里选“S7-200 TCP”协议IP地址填CP243-1模块的IP。以太网方式稳定得多但模块不便宜小项目一般用串口就够。这里顺便提一下“组态王创建协议组件失败”的问题这是网上搜这个关键词搜烂了的坑。装完组态王或者换了操作系统版本后运行工程提示创建协议组件失败多半是驱动配置文件没注册。用管理员身份运行组态王的“驱动注册工具”重新注册一遍PPI驱动就好了。另外64位系统下组态王跑旧工程兼容性有坑最好用兼容Windows 7模式运行安装包驱动才能正确装进系统。4.2 变量定义与报警画面设计组态王里每个要显示的数据都要先定义变量。变量的“连接设备”选刚才创建的S7-200设备数据类型和地址要跟PLC里的存储区对应组态王变量连接设备寄存器说明pH值AIW016位无符号整数余氯值AIW216位无符号整数水温AIW416位无符号整数循环泵状态Q0.0离散量投药泵A状态Q0.1离散量总故障M2.0离散量注意组态王读AIW寄存器时在“寄存器”栏要填成AIW0数据类型选INT。很多新手在这里填成I0.0那是位寄存器数值读出来永远不对。画面设计方面我的做法是做一个“泳池工艺流程图”主画面画一个泳池轮廓、循环泵、砂缸、投药罐、加热器用不同颜色线条连起来表示管道。泵运行的时候图上的泵图标变绿闪烁故障时变红闪烁。旁边放pH值、余氯、水温三个数字框加一根趋势曲线能看48小时历史数据。报警窗口放在单独画面里通过“报警组”配置变量。pH超限、余氯超限、总故障这些都加到报警组里发生报警的时候系统弹窗并记录操作员点确认后才会消音。这个简单配置效果非常直观甲方满意度直接上一个台阶。4.3 数据换算与画面显示技巧S7-200里AIW0读出来的是0到32000的原始值组态王画面里直接显示32000或者6400这种数字甲方肯定看不懂。所以要在组态王里做变量换算。方法是再建一个内存变量“pH显示值”类型为实数在应用程序的“事件脚本”里写pH显示值 pH原始值 / 32000 * 14;注意脚本写在“数据改变事件”里触发条件是pH原始值改变。如果写错了触发方式页面一直不刷新甲方看到的就是死数值。之后可以设置显示格式保留一位小数再加上一个文字框提示“正常范围7.0-7.6”这就很专业了。余氯值换算同理除以32000再乘以量程上限10单位mg/L。水温除以32000乘100单位摄氏度。三个换算写好后整个监控界面的可读性完全不一样。5. 常见问题与排查技巧实录5.1 通讯连不上怎么查先看硬件PLC的编程口有没有按下PPI电缆电缆上的DIP开关位置是否正确PPI模式对应哪个位置要看线缆型号COM口的USB转485线驱动装好了没。再看软件组态王设备管理器里是否启动成功串口号选的跟实际插的是不是一个口波特率是否两边一致。如果这些都排查完还是连不上别急着重装组态王。可以先拿STEP 7-MicroWIN试一下能不能连上PLC组态王能连PLC说明上位机软件通信没问题是组态王配置的问题STEP 7也连不上那就是串口或PLC侧的事容易定位。实话说通信问题十有八九是串口被占用或者地址不对。我每次开机后的标准动作是先看设备管理器里COM口号再检查有没有别的软件偷偷占了口。千万别插一个COM3还配置COM1这种低级错误犯过不止一次。5.2 模拟量漂移和干扰怎么处理游泳池环境潮湿变频器、水泵电机都在柜子附近模拟量信号漂移是常态。最常见症状是pH值在画面上跳来跳去投药泵跟着乱启停。我的处理方案是三层信号线屏蔽层单端接地模拟量信号线和动力线分槽走。这个在布线阶段就要定死后期改起来非常费劲。软件上加个一阶惯性滤波把AIW0值每次更新时跟上次值做个加权平均能压掉大部分高频干扰。输出端加磁环如果现场实在没条件重新布线这是最快的补救措施。这些做完后pH值波动可以从十分钟跳一次降到稳定在0.1以内。如果还在跳检查传感器的探头是不是该清洗了。游泳池水里钙垢、油脂附着在探头上输出信号会越来越假定期拆下来泡一泡清洗液才是根治办法。5.3 梯形图程序下载与调试的注意事项S7-200下载程序的时候PLC必须处于STOP状态。很多人直接在RUN状态下尝试下载结果总是提示通讯超时或写保护。还有一种情况下载到一半断开了PLC里的旧程序可能被冲掉一半重启后CPU报错。我的习惯是下载前先停止掉PLC下载完再切回RUN。调试阶段的另一个技巧是使用状态表。STEP 7-MicroWIN里可以添加状态表监视M、Q、AIW等地址在线更改数值。比如强制M1.0为1模拟自动模式强制AIW0大于17371看酸泵是不是开始投药。在线强制功能用得好调试效率翻倍。但要注意强制结束后一定要把所有强制点清空我有一次忘记清空现场运行几天后一个输入点被强制着导致设备逻辑一直不对排查了大半天。5.4 IO分配时的备用点预留经验最后说一个特别容易被新手忽略的细节IO分配一定要留备用点。我这个项目实际用了8个DI、3个AI、6个DO但我在分配表里刻意留了I1.0到I1.4、Q0.6、Q0.7、AIW6这样的空位。原因很简单——现场调试时甲方一定会改方案。比如原来没考虑要加游泳池的水位流量计反馈结果调试到一半说要加一套加药计量泵联动如果没留备用点要么换大PLC要么加扩展模块工期直接延一周。留了备用点接线几分钟搞定梯形图加个网络的事。这个经验在我做过的所有PLC项目里都验证过。如果你连PLC型号都还没定选型的时候就更应该先把IO点数算宽一点比如现在只需要10个输入我建议选14个输入的CPU成本差几百块钱但后续省下的精力远超这个差价。6. 这个项目做完之后的一点体会整套系统做完运行稳定之后回头复盘最值的几个决定一是IO分配表先做细做全二是间歇投药和补水超时这两个软件保护三是备用点预留。这些细节都不是课本上讲的全是从实际教训里补出来的。如果你打算照着这个方案做自己项目给你一个明确建议先把IO分配表和工艺流程图画好再去写梯形图最后做组态王。顺序反了后面每一步都在返工。另外做这种系统一定要跟甲方反复确认各种设定值——pH目标范围、投药量、循环时间表——因为每个泳池的用水量、使用人数、日照温度都不一样参数没有通用最优解只有现场调出来的合适值。最后的最后再分享一个小习惯所有梯形图网络一定要写注释所有设备地址要做成表格贴在控制柜门上。半年后甲方找你说“时间表要改一下”的时候你会感谢当初写注释的自己。这可能是整个项目里最不起眼但最重要的一步。