☰
3泵恒压供水系统PLC控制方案:从PID调节到组态王监控的完整落地实践
2026/10/11 6:57:45 网站建设 项目流程

两年前接了一个小区二次供水改造项目,三台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~20mA,DIP却设成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~20mA,0~1.6MPa
AQW0变频器频率给定变频器AI端子,4~20mA对应0~50Hz
I0.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_CTRL,PID输出是一个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.2k,USB转串口在这种高波特率下丢包率会明显上升。

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存出水压力(MPa),VD150存压力设定值,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和组态王的组合虽然不算新,但胜在稳定和透明,只要基础逻辑扎实,这套方案再用五年也没有问题。

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

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

立即咨询