
两年前接了一个小区二次供水改造项目三台11kW水泵两用一备西门子S7-200 PLC做主控组态王放在值班室做上位机监控。项目本身不算大但要实现“恒压”两个字背后牵扯的细节远比想象中多——泵的轮换策略、PID参数、变频/工频切换时序、上位机通信任何一个环节偷懒现场都会用各种稀奇古怪的故障“回报”你。这篇就把整个3泵恒压供水系统的控制实现过程、关键逻辑和调试经历完整记录下来给准备做类似供水项目的工程师一个可以直接参考的落地模板。1. 3泵恒压供水的需求拆解与方案选型1.1 现场背景两用一备是最常见的组合方式这个小区一共12栋楼最高15层屋顶没有水箱完全靠二次加压供水。原来用的是两套老式气压罐供水水压波动大夏天用水高峰经常出现顶楼水压不足、花洒出水淅淅沥沥的情况。业委会找我们来改造目标只有一个把供水压力稳定在一个可接受的范围。三台泵、两用一备是这类项目里最标准的配置。三台泵平时两台工作、一台休息哪台泵多久没用了、哪台泵跑的时间最长都由PLC自己记录、自己决定避免某台泵长期吃灰或者另一台泵长期过劳。三台泵每台11kW单泵流量约32m³/h扬程50m左右两泵并联满负荷时基本能覆盖这个小区240户左右的用水需求。1.2 “恒压”到底恒的是什么需求逐条拆解很多人觉得恒压供水就是“PID变频器”这话只对了一半。压力恒定是一个结果但在实现结果之前你要先回答几个问题用水高峰和低谷的流量差多少容许压力波动范围是多少夜间几乎没人用水的时候怎么办泵坏了系统怎么处理把这些想清楚才能谈控制方案。我把这个项目的需求拆成了四条。第一压力恒定出水总管压力设定为0.45MPa允许波动范围±0.02MPa也就是压力要在0.43~0.47MPa之间。第二流量自适应从深夜接近零流量的状态到高峰期两台泵全开的满负荷状态系统都要能平稳过渡不能因为加泵造成压力冲击。第三安全联锁水箱低液位必须停泵泵热继电器动作要报警停泵变频器故障要切换同时要有电气硬互锁防止误操作。第四监控要求值班室需要实时看到压力、泵状态、运行时间、报警记录还要能修改压力设定值这就是组态王要干的活。这四条需求里“流量自适应”是最考验控制逻辑的部分。恒定压力不是靠PID一个环节就能解决的泵组的启停策略才是大头。1.3 方案选型为什么锁定S7-200和组态王做技术方案的时候业主没有指定品牌我可以在几种方案里选。当时对比过几个方向直接上S7-1200博途、用国产触摸屏做现场监控、还是用S7-200组态王。最后选了后者核心原因是这个项目要的就是“稳定、透明、维护门槛低”。S7-200虽然已经不算新一代产品但它的优势非常实在编程软件Step7 Micro/WIN简单直接梯形图好上手市面上的存量设备多、维修配件好找而且它自带的PPI通信协议和组态王之间是“家门对家门”的关系驱动成熟度极高。组态王这边中文环境、图库丰富、报表和趋势曲线都是现成功能开发周期短后期业主自己改个报警值都很容易。相比之下博途1200的生态当然先进但技术门槛和成本对这个小区物业来说有点过剩。说白了方案选型不只是选技术还要选“后续谁来维护”的现实问题。2. 硬件配置与I/O分配动手前必须把这些算清楚2.1 主控制器与扩展模块搭配硬件选型最终定为CPU226加一块EM235模拟量扩展模块。CPU226自带24个数字量输入、16个数字量输出对三台泵的启停控制、接触器反馈、热继电器信号来说完全够用。EM235提供4路模拟量输入和1路模拟量输出这个项目只需要1路压力信号输入加1路频率给定输出余量充足后面想加一路压力校验或者读变频器回传信号也还有位置。这里有一个值得说的选型细节S7-200系列里CPU224XP自带两路模拟量输入和一路模拟量输出理论上也能干这个活但224XP自带AI通道对4~20mA电流信号的处理不如EM235直接而且现场情况是变频器高频谐波干扰比较重用EM235这类独立模拟量模块抗干扰能力和信号处理的灵活性都会更好。所以即便CPU226要比224XP贵一点我也坚持这个组合。多花的钱换来的是调试阶段的省心。2.2 压力变送器、变频器与PLC的信号衔接这套系统的模拟量链路是关键中的关键信号谁给谁、量程怎么对应、线怎么走都要事先定义清楚。压力变送器选用两线制4~20mA输出量程0~1.6MPa安装在出水总管上。两线制变送器的供电由PLC侧24V直流电源提供信号线接EM235的AI通道。EM235需要先按模块手册把输入DIP拨码设置成单极性0~20mA量程。这里有个常见误解信号是4~20mADIP却设成0~20mA这是对的因为4~20mA刚好落在0~20mA量程的20%~100%区间对应AD读数就是6400~32000。如果你把拨码设成别的极性和量程后面换算公式全都要变。变频器的频率给定用EM235的模拟量输出通道输出4~20mA接到变频器AI端子变频器参数里把“频率给定方式”设为电流信号。为什么频率给定不选0~10V电压而选4~20mA电流因为电压信号在长距离传输时容易受压降和干扰影响电流信号对噪声的容忍度要好得多。变频器和PLC之间这条模拟量线路用屏蔽双绞线单独敷设屏蔽层单端接地不要和动力线走同一个线槽这是现场最便宜也最有效的抗干扰手段。2.3 主回路设计与“一变三切”的硬互锁三台泵的电气主回路我采用的是“一台变频器三台电机切换”的经典结构也就是一变三切。每台泵的电机配两个接触器变频接触器把电机接到变频器输出端和工频接触器把电机直接接到工频电源。PLC根据轮换逻辑决定当前哪台泵作为变频泵就让哪台泵的变频接触器吸合其余要补充水量的泵直接工频启动。这个结构里最重要、也最容易出事故的地方就是变频器和工频电的硬互锁。同一台泵的变频接触器和工频接触器绝对不能同时吸合否则变频器输出端会直接被工频电源“倒送电”轻则炸模块重则伤人。互锁必须做两层电气回路里把对方的常闭辅助触点串进自己的线圈回路形成硬互锁PLC程序里再写一组软件互锁双保险。我见过只靠PLC程序做互锁的项目程序一乱或者输出模块故障的时候后果很严重所以这条我反复跟接线电工强调硬互锁是保命的绝对不能省。2.4 I/O点分配表写程序前的最终依据控制回路的I/O点分配先列成表写程序的时候对照着填地址不至于乱。这张表里模拟量部分只有两路数字量输入包含了运行模式、接触器反馈、故障信号和液位信号。地址名称说明AIW0出水总管压力压力变送器4~20mA0~1.6MPaAQW0变频器频率给定变频器AI端子4~20mA对应0~50HzI0.0自动/手动切换自动模式下PLC按逻辑控制手动模式下由面板按钮直接操作I0.1~I0.31#~3#泵变频接触器反馈确认变频接触器确实吸合I0.4~I0.61#~3#泵工频接触器反馈确认工频接触器确实吸合I0.7变频器故障变频器报警输出I1.0水箱低液位低于下限时禁止启泵I1.1~I1.31#~3#泵热继电器过载保护动作Q0.0~Q0.21#~3#泵变频接触器变频泵投入Q0.3~Q0.51#~3#泵工频接触器工频泵投入Q0.6声光报警故障报警输出实际现场这张表还要补一些细节比如每台泵的手动启停按钮、运行状态指示灯、变频器运行状态、压力上下限报警点。我这里只列核心点位逻辑上已经够用了。3. 泵组切换逻辑与PID调节程序的核心部分3.1 泵的启动条件与保护连锁先定义泵的启动“门槛”这是整个PLC程序的地基。自动模式下任意一台泵要启动必须同时满足三个条件出水压力低于设定值、水箱液位正常、没有热继电器和变频器故障。这三个条件缺一不可尤其液位信号很多现场因为省略了这个信号导致水泵空转烧毁得不偿失。泵启动之后不是立即切换到工频或者加泵而是要经过一个判定周期。比如变频泵已经在50Hz满转速运行但压力仍然低于目标值并且这个状态持续30秒以上PLC才判定“单泵能力不足”去启动下一台泵。为什么要持续30秒因为管网系统有惯性压力的建立本身就有滞后如果看到压力低就立刻加泵很可能会在压力还没爬上来的时候误加泵造成频繁启停。减泵条件也一样当变频泵输出频率已经降到30Hz以下、出水压力高于设定值0.02MPa以上并且持续60秒才允许停掉一台工频泵。这个“等一等再看”的思路是避免泵组在临界点来回震荡的关键。频率阈值和延时时间是我在现场反复调过的一组参数不同管网的惯性不一样需要根据实际情况微调。3.2 轮换策略先启先停按累计运行时间排优先级三台泵不能总让同一台泵当主力所以程序里必须写轮换逻辑。我的做法是“先启先停”配合“累计运行时间排序”。每天固定的一个时间点比如零点PLC比较三台泵的累计运行时间运行时间最短的那台泵作为下一周期的变频泵。变频器通过变频接触器切换到这台泵上。如果这台泵正在工频运行就先停止它再切换变频接触器然后启动变频。切换中间要有足够的安全间隔我设定的是10秒确保接触器完全断开再合另一端。工频泵的投切顺序则按“先启先停”原则首次需要加泵时启动第二台泵再次需要加泵时启动第三台泵压力恢复后先停最后启动的那台工频泵再停倒数第二台。这套逻辑的好处是每台泵的运行时间趋于均衡不会出现某台泵用了三个月、另一台三个月没动过的情况。泵长期停着不用反而容易锈死或者机械卡涩轮换策略某种意义上也是一种设备保养。3.3 PID闭环在恒压控制里的工程取舍恒压供水的核心控制回路是压力PID设定值SP是目标压力0.45MPa过程变量PV是压力变送器读回来的实际压力输出OUT送到变频器的频率给定。S7-200里做PID最稳妥的方式是用Micro/WIN自带的PID向导。向导会自动生成一个PID0_CTRL子程序分配好V区参数表还会把相关的中断和时间基准处理好比自己手写PID指令块靠谱得多。用我之前工程量的换算方法把AIW0转成0~1.6MPa的实数值存在VD100再把设定压力存在VD150两个量输给PID0_CTRLPID输出是一个0~100%的实数。把这个百分数映射到AQW0公式很简单LD SM0.0 MOVR VD160, VD200 *R 256.0, VD200 // 0~100% 转为 0~25600对应4~20mA区间 TRUNC VD200, VD204 DTI VD204, VW208 MOVW VW208, AQW0注意这里AQW0要输出6400~32000对应变频器4~20mA也就是0~50Hz。如果直接把PID的0~100映射到0~32000变频器在4mA以下是接收不到的会造成频率给定死区。PID参数是这套系统调试里最花时间的部分。供水系统惯性大滞后明显比例作用太大必然振荡积分作用太强又会超调。我最后调定的经验值是增益P在0.18~0.3之间积分时间I在0.02~0.05分钟微分D直接设0。采样时间设1秒因为压力变送器和供水管网的变化速度根本不需要毫秒级的控制。微分在供水这种噪声明显的场景里基本只有反作用它会把传感器抖动放大成变频器频率抖动。3.4 从变频到工频的切换时序与PID防饱和加泵和减泵过程中最怕的是PID输出“刹不住车”。单泵变频运行时PID输出可能已经到100%这时候第二台工频泵切入管网流量瞬间增大、压力会快速上升但PID输出还处在高位还在拼命加频率结果就是压力超调、系统振荡。要解决这个问题必须在PLC程序里做切换瞬间的PID输出重置检测到工频泵启动反馈后把PID输出强制设置为一个比较低的基准值比如30%然后再放手让PID自动调节。这个“放手”的动作要精准放太多等于没重置放太少压力又会掉下来。另外PID输出要做限幅。下限我设5%避免变频器频率给定低于下限导致憋压或者流量不足上限设95%给PID留一点余量避免在加泵临界点反复触发。PID输出限幅虽然简单但能让整个系统的动态行为稳很多。夜间小流量休眠逻辑也放在这一层。深夜用水量几乎为零时变频泵会不断降频降压如果频率已经低于25Hz、压力高于设定值0.05MPa且持续30分钟程序就进入休眠模式停止所有泵靠管网余压保压。当压力跌到低于设定值0.05MPa时再唤醒第一台泵。这个功能一年能省不少电也是对泵的一种保护。4. 组态王监控从通信配置到画面组态4.1 PPI通信的参数匹配与常见坑组态王和S7-200之间走PPI协议物理连接用PC/PPI编程电缆。通信参数必须在组态王和PLC两侧完全一致否则画面上的变量全是问号。我在Micro/WIN的通讯端口设置里把PLC站号设为2波特率设为19.2kbps数据位8位、停止位1位、偶校验。组态王新建设备时选择“西门子-S7-200-PPI”串口参数要和PLC侧保持一致PLC地址填2。组态王那边最容易踩的坑是COM口选错。现在笔记本大多没有原生串口USB转232/485的线插上后被标识成COM3或者COM5组态王设备配置里默认可能指向COM1不改的话通信必然失败。调试第一步先去设备管理器看清楚USB转串口占用的是哪个口再到组态王设备配置里填上对应的串口号。另一个坑是波特率太高反而容易断线PPI协议本身很稳定但给组态王轮询变量时带宽有限我实际项目里用19.2kbps跑50个左右的变量、300毫秒采集周期运行起来很稳。不要为了追求快把波特率设到115.2kUSB转串口在这种高波特率下丢包率会明显上升。4.2 变量规划让PLC和组态王共享一组V区数据组态王和PLC的通信本质上是读写S7-200的存储区。为了让上位机开发简单我建议所有的工艺参数都在PLC程序里先处理好统一放到V区组态王只读写V区变量。换句话说不要指望组态王直接读AIW0去换算压力而是PLC把AIW0换算成0~1.6MPa的实数值存到VD100组态王读VD100这个实数就行。这样做有三个好处第一单位换算和零点校准在PLC里只做一次上位机拿到的就是工程量不存在两边换算不一致的问题第二组态王不同版本对S7-200模拟量寄存器类型支持有细微差异V区读写最通用第三PID参数、运行时间、泵状态都放V区组态王既能读也能写调试时可以直接在画面上改设定值。我在这个项目里的V区规划大概是VD100存出水压力MPaVD150存压力设定值VD160存PID输出百分比VB300~VB302存三台泵的启停状态位VD310~VD330存三台泵累计运行时间。组态王那边新建变量的时候数据类型一定要选浮点型FLOAT/REAL地址填V100就是VD100填V150就是VD150别把地址和数据类型搞错否则读出来的数据完全是乱的。4.3 画面设计趋势曲线、报警与历史记录组态王的画面开发走的是“图库动画连接”的路线。主画面做成工艺流程图的样式从水箱出来管道连接三台泵再汇入出水总管每台泵旁边放一个泵图标用颜色变量绑定泵状态运行时绿色闪烁、停止时灰色。管道上可以加组态王的流动动画看起来像是水在流动这个功能的本质是绑定一个布尔变量然后再做一个定时刷新。压力显示我用的是图库里的仪表盘控件绑定VD100量程设0~1.6MPa。为了让值班员一眼看出压力是否符合要求仪表盘下面再放一个数字显示并且加一个颜色变化条件压力在0.43~0.47MPa区间内显示绿色低于0.43显示蓝色高于0.47显示红色。趋势曲线是恒压供水系统最重要的监控手段之一。组态王自带实时趋势曲线和历史趋势曲线控件我把压力PV和设定值SP都投进同一个趋势曲线窗口。历史数据要提前在组态王数据库里配置保存周期建议每5秒存一条24小时不断一个月的数据量很小但回顾异常工况非常有价值。报警配置方面压力超过0.5MPa或者低于0.3MPa触发报警事件泵热继电器动作、变频器故障、水箱低液位都作为离散量报警。组态王报警系统支持语音报警和弹窗值班室不需要一直盯画面有异常它会自己喊出来。所有报警记录落盘方便事后追溯。5. 现场调试全记录压力振荡、频繁启停、通信中断三大难题5.1 压力波动大先从PID参数下手再查干扰源第一次联动调试压力波动很厉害压力表指针在0.4~0.5MPa之间来回晃完全没法验收。当时我第一反应是PID比例参数太大把增益从0.8一路降到0.25振荡幅度确实小了但还是有规律的小幅波动。后来用万用表去量EM235的AIW0原始值发现信号本身有几十个数码的跳变这不是压力真实波动而是变频器高频谐波干扰串进了模拟量信号。排查过程是这样的先把压力变送器的信号线断开在PLC侧接一个信号发生器给固定12mA的模拟信号AIW0读数稳定在19200附近说明PLC和变送器本身没问题。接回变送器、启动变频器后读数开始跳基本锁定是变频器干扰。解决方案做了三件事第一压力变送器信号线和变频器动力线彻底分开敷设之前有一段并行约有3米是干扰重灾区第二屏蔽层原本两端都接地改成靠近PLC这一端单端接地第三在程序里加了模拟量滤波连续采样10次去掉最大最小值后取平均采样周期1秒10次采样穿插在1秒内完成对压力这种缓变信号完全够用。改完之后AIW0读数稳定压力曲线也平滑了。被这个坑教育过一次之后我现在做项目有一个固定习惯模拟量信号只要有条件一律屏蔽双绞线、单独走线槽、单端接地、软件滤波至少做一次。这套组合拳下来90%的干扰问题都不用售后回访。5.2 水泵频繁启停死区和切换阈值才是元凶调试进入自动模式后出现了一个很棘手的现象白天用水量中等两台泵运行但工频泵的启停记录显示每十几分钟就启停一次。查历史趋势曲线发现2#泵作为工频泵投入后变频泵PID输出会迅速回落压力升到设定值附近接着减泵条件被触发2#泵停掉停了之后压力又掉下来又触发加泵。整个过程在一个“半瓶水状态”的边界来回震荡。问题的根源不在PID而在我的切换判定太“灵敏”了。当时的减泵条件是频率低于35Hz持续30秒这个频率阈值和延时设置得太宽松导致变频泵稍微一降速就触发减泵判断。解决办法是引入滞环控制加泵条件改为变频泵满频50Hz持续20秒且压力低于设定值0.01MPa减泵条件改为变频泵频率低于30Hz持续60秒且压力高于设定值0.03MPa。中间留了明显的“死区”让系统从加泵状态到减泵状态必须跨越一个较大的区间而不是在临界点来回试探。这个思路其实和空调温控的上下限是一样的道理。压缩机不可能因为你把设定温度调高0.1度就立刻停机恒压供水也一样。现场改完这组参数后我盯着趋势曲线看了整整一个下午工频泵启停次数明显减少正常工况下一天启停不超过五六次属于可接受的范围。5.3 组态王通信中断一次典型的串口参数排查组态王联机调试那天也出了幺蛾子。工程画面打开之后压力显示是问号泵状态全部灰色通信状态LED一直在闪红。按之前的经验我先把USB转串口线的COM口号确认了一遍确实是COM3组态王设备配置里也填了COM3按理说不该有问题。接着用Step7 Micro/WIN做在线通信测试结果Micro/WIN可以正常连接PLC。这就很有说服力了PLC通信口没问题编程电缆没问题问题出在组态王这边的驱动配置上。我把组态王设备里的PLC地址从2改成1试了一下还是不行再检查波特率组态王里填的是9600但PLC侧Micro/WIN里设的是19.2k两边不一致。之前Micro/WIN能连上是因为编程软件会自动匹配波特率而组态王不会它只会傻乎乎用你填的参数去握手。把波特率改成19.2k、校验换成偶校验之后通信马上恢复。这个坑提醒我组态王的串口参数一定要逐项和PLC侧设置对齐哪怕多花两分钟检查也不要靠软件“自动识别”。5.4 调试顺序建议把流程分阶段问题才好定位这套系统整体调试我花了大概一周其中一半时间都在和上面的三个问题纠缠。如果重新来一遍我会把调试顺序严格分成四个阶段。第一阶段单机手动先不写自动逻辑用面板按钮分别启动每台泵确认电机转向正确、接触器动作正常、热继电器保护有效。第二阶段开环调压手动模式下用组态王或临时按钮直接给变频器一个固定频率观察压力变化确认整个模拟量链路从变送器到PLC再到变频器都是通的、线性度正确。第三阶段单泵闭环只让一台泵跑PID把压力稳定在设定值附近把PID参数调到压力曲线基本平直。第四阶段多泵联动开启自动逻辑测试加泵、减泵、轮换、休眠、报警用趋势曲线记录整个过程确认切换过程没有压力冲击和频繁启停。这个顺序的本质是先把每一个环节的“底层信任”建立起来再让上层逻辑去组合它们。如果一上来就开全自动出了问题根本不知道是PID的问题、接触器的问题还是通信的问题排查成本会成倍上升。最后说一句实话这套系统真正难的不是接线也不是画组态王画面而是把切换逻辑和数据时序在心里想清楚。我在现场最大的感受是如果一个控制逻辑在办公室里都理不顺到现场只会更乱。把泵的启停条件用表格一条条列出来把延时和死区写明白再往PLC里填成功率会高很多。S7-200和组态王的组合虽然不算新但胜在稳定和透明只要基础逻辑扎实这套方案再用五年也没有问题。