1. 先搞懂这套系统的来龙去脉
箱式无负压供水系统,这个名字在建筑给排水和二次供水圈子里并不陌生。但很多刚接触的人一看到“无负压”三个字,就默认它跟传统的恒压变频供水设备是一回事,这是个挺常见的误区。我在前几年做水厂自动化改造和几处高层住宅二次供水项目时,专门把这种箱式无负压设备从机械到电气再到上位机通信完整跟过一遍,这里面的坑,确实值得拿出来写一写。
它解决的核心问题其实很直接:市政管网末端或者老旧小区水压不足,需要二次加压,但又不允许直接从市政管道上“硬抽”——因为硬抽会导致市政管网出现负压,轻则影响周边用户用水,重则可能倒吸污染水源。箱式无负压供水系统就是在进水管路上加了一套“缓冲+保护”机制,利用稳流罐(也叫无负压罐)和压力传感器,让泵组在市政供水的基础上再叠压,既保证用户侧用水压力稳定,又不对市政管网产生负压波动。
从应用场景来看,这套系统非常适合老旧小区改造、学校、医院、酒店这类用水量波动大、但又对供水连续性要求高的场合。它比传统蓄水池+变频泵组的方案更紧凑,占地面积小,也不用定期清洗水箱,卫生风险低。适合谁参考?如果你是做给排水设计的、搞电气自控的、或者是在物业工程部天天被供水压力问题折磨的人,这篇文章能帮你从原理到实际代码逻辑,把整套系统啃下来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 箱式无负压供水系统的原理拆解
2.1 无负压到底怎么实现的
无负压这个概念,听起来玄乎,其实说到底就是一句话:绝不允许泵的进水口压力变成负值。市政管网通常是带压运行的,比如0.25MPa左右。咱们加压泵的进水口如果直接接在市政管上,泵一启动,进水口流速骤然加大,压力就会跌,跌到低于大气压就成了负压。负压的后果很严重,管道接头处、阀门盘根处可能吸入空气,甚至脏东西,这就叫“负压污染”。
箱式无负压设备的做法是在泵前加一个稳流罐,罐体上有真空抑制器(俗称呼吸阀)、压力表、液位计。市政水先进入稳流罐,把罐里灌满,泵再从罐里吸水加压。罐顶的真空抑制器是关键——当泵的进水流量大于市政来水流量时,罐内水位开始下降,水位下降会在罐内形成负压趋势,此时真空抑制器自动打开,让空气进去,破坏真空,避免罐体被吸瘪,同时保证进水管路不会出现负压。你把它理解成一个“带呼吸的蓄水平衡桶”就通透了:它不储水,它只负责缓冲。
有些高端一点的箱式无负压设备,还会在稳流罐进口装一个压力传感器,同时在小流量或者夜间用水低谷时,让泵组休眠,由气压罐维持压力,避免泵频繁启停。这个小流量保压逻辑,后期在代码里是要专门考虑进去的。
2.2 箱式设备的系统构成与核心部件
从结构上看,箱式无负压供水系统主要由五大部分组成:进水总管与稳流罐、真空抑制组件、加压泵组、出水总管与压力传感器、电气控制柜。泵组一般配两台到四台,一两用一备或者两用一备,具体看设计流量和扬程。
这里要重点说两个容易被忽略的部件。第一个是倒流防止器,装在市政进水总管上稳流罐之前。有些工程为了省成本会把它省掉,但规范上是不允许的,这东西能在泵停机瞬间阻止罐内水倒灌回市政管,防止污染市政水源。第二个是超压保护阀,装在出水总管上,一般是弹簧式安全阀,出厂压力设定比用户最高工作压力略高,一旦压力传感器故障或者变频器失控,它还能物理泄压兜底。
核心的运行逻辑是闭环压力控制:出水总管上的远传压力表或者压力变送器,实时把压力值送给PLC(可编程逻辑控制器)或PID调节器,控制器与设定压力比较后,输出频率给定给变频器,控制泵的转速。泵转速升高出水压力升高,转速降低出水压力降低,最终稳定在设定值附近,这就是最经典的恒压供水控制模型。
2.3 为什么要选择“箱式”结构而不是直接罐式
行业内还有一种无负压设备叫“罐式无负压”,它的小稳流罐直接串在进水管路里,没有独立水箱。箱式与罐式的本质区别在于:箱式在稳流罐旁边还配置了一个小容积的不锈钢水箱,并且水箱与稳流罐之间通过切换阀组连接。这个水箱的作用是当市政来水非常充足时,它不参与工作;但当市政来水波动大、或者存在停水检修时段,系统可以切换到水箱供水模式,保证用户端不停水。
我做过的一个项目,市政管网白天压力还行,到了晚高峰就掉到0.1MPa以下,如果只用罐式无负压,稳流罐根本补不进来水,泵组整个白天都在报警停机。后来改用箱式结构,让系统在市政压力低的时段从水箱吸水,问题直接解决。所以选型这件事,真不是看哪个设备“高级”,而是看现场进水管网的实际情况。箱式结构牺牲了一点点占地,换来了供水可靠性和对管网波动的适应能力,在老旧城区改造项目里特别实用。
3. 控制系统与代码实现的整体思路
3.1 控制器的选型逻辑
很多做设备集成的人,上来就纠结用PLC还是用单片机。我的建议是:如果是正规工程项目,别犹豫,选PLC。理由第一是可靠性,PLC是工业级产品,抗干扰、宽温运行,程序的健壮性远不是普通单片机方案能比的;第二是调试维护方便,现场电工都看得懂梯形图,出问题能马上改,单片机方案一旦出问题只能返厂或者远程连线,非常被动。
品牌选择上,我常用的是三菱FX系列和西门子S7-200 SMART系列。三菱的编程习惯和模拟量处理比较顺滑,西门子的以太网通信和远程调试更方便,具体哪个好,没有绝对,看你们项目上谁更熟。但有一点建议:尽量不要选太小众的国产PLC做正式的供水项目,供货周期、扩展模块兼容性、后期找人维护都是潜在风险。
3.2 核心控制逻辑与状态机划分
整套控制程序,如果你用代码的角度来看,其实就是一个有限状态机(FSM)。我先把这个状态机画在脑子里,再去填代码,比直接埋头写梯形图靠谱得多。
系统的典型状态包括:待机状态、正常运行状态、小流量休眠状态、缺水保护状态、故障报警状态、手动调试状态。状态之间会有切换条件,比如:待机状态检测到出水压力低于启动压力下限,且进水压力正常,就切到正常运行;正常运行中检测到出水流量长期低于小流量阈值,且压力稳定,则进入小流量休眠;任何状态下检测到无水信号,直接切到缺水保护,同时停泵报警。
3.3 用结构化文本描述运行逻辑
如果你用三菱的GX Works2,支持ST语言编程;用西门子的博途,也可以用SCL。我认为,用ST或者SCL写出来的控制逻辑,比梯形图更接近“代码实现”这个主题,而且逻辑的可读性和可维护性高得多,尤其在涉及PID参数初始化、状态切换、报警累计次数这些复杂逻辑时,结构化文本的优势非常明显。
下面我给出一段简化版的ST语言伪代码,描述主泵启动和压力PID控制流程,这段逻辑可以直接移植到三菱FX5U或者西门子S7-1200上稍作修改使用:
code复制// 系统状态定义
CASE sys_state OF
// 待机状态
0:
// 判断是否满足启动条件
IF start_cmd AND NOT dry_protect THEN
// 先开放进水电动阀
inlet_valve := TRUE;
// 延时3秒,等待阀体完全打开
valve_delay_timer(IN := inlet_valve, PT := T#3S);
IF valve_delay_timer.Q THEN
sys_state := 1; // 切换到运行状态
END_IF;
END_IF;
// 正常运行状态
1:
// 读取压力变送器实际压力
actual_pressure := analog_read(channel_pressure);
// 单位换算:4-20mA信号对应0-1.6MPa
pressure_value := REAL_TO_INT(actual_pressure - 4000) * 1600 / 16000;
// 调用PID功能块
pid_output := pid_calc(setpoint := pressure_setpoint, feedback := pressure_value,
kp := 0.8, ki := 0.05, kd := 0.0);
// 限制输出频率范围 20Hz - 50Hz
IF pid_output > 50.0 THEN
freq_output := 50.0;
ELSIF pid_output < 20.0 THEN
freq_output := 20.0;
ELSE
freq_output := pid_output;
END_IF;
// 写入变频器频率
analog_write(channel_freq, freq_output);
// 超压保护:压力超过设定值10%时降频
IF pressure_value > 1.1 * pressure_setpoint THEN
freq_output := freq_output - 2.0;
END_IF;
// 小流量休眠判断
IF flow_value < 0.1 AND pressure_value > pressure_setpoint THEN
sleep_timer(IN := TRUE, PT := T#30S);
IF sleep_timer.Q THEN
sys_state := 2; // 切换到休眠状态
END_IF;
END_IF;
// 缺水保护判断
IF inlet_pressure < 0.05 THEN
sys_state := 3; // 切换到缺水保护
END_IF;
// 小流量休眠状态
2:
// 停泵保压
freq_output := 0.0;
// 监测压力跌落
IF pressure_value < (pressure_setpoint - 0.05) THEN
sys_state := 1; // 压力掉了,重新唤醒
END_IF;
// 缺水保护状态
3:
// 立即停泵,打开报警输出
freq_output := 0.0;
alarm_output := TRUE;
pump1_run := FALSE;
pump2_run := FALSE;
// 等待人工复位
IF reset_cmd THEN
sys_state := 0;
alarm_output := FALSE;
END_IF;
END_CASE;
我故意把代码里的PID参数写成了经验值,kp=0.8,ki=0.05,kd=0。这是因为供水系统的惯性比较大,微分环节加不好反而会把系统弄震荡,所以我基本不加D。实际项目里,PID参数是根据泵组功率和管网容积现场整定的,没有万能参数,后面我会专门写一节PID整定的体会。
4. 实操过程:从接线到程序上电调试
4.1 电气接线中需要留意的几个细节
电气接线是整个系统能不能稳定运行的地基。我在现场见过不少故障,最后查下来都是接线问题,不是程序问题。
第一个要点是压力变送器的信号线一定要用屏蔽双绞线,屏蔽层单端接地。很多施工队图省事,把压力变送器的线和变频器输出线一起穿在同一个线槽里,变频器的载波频率是几千赫兹,它对模拟量信号的干扰非常厉害,压力显示会跳得跟心电图一样。正确的做法是强弱电分开走线,模拟量信号线单独走屏蔽线,并且远离变频器输出端。
第二个要点是所有泵的启停控制,PLC输出点尽量用中间继电器过渡,不要直接驱动接触器。PLC的晶体管或者继电器输出触点容量有限,直接驱动大功率接触器线圈,触点寿命会急剧缩短,而且会产生感应电动势,容易打坏PLC输出模块。中间继电器选DC24V线圈电压的,和PLC共用电源,方便统一管理。
第三个比较容易忽略的是接地。整个控制柜必须可靠接地,而且变频器的接地端子要单独用粗线接地,不要和PLC的接地并在一起。变频器工作时的漏电流很大,如果和PLC共地,地电位会被抬高,造成PLC模拟量采集漂移,表现就是压力每隔几分钟跳一下。
4.2 程序上电前的静态检查流程
写好的程序下载到PLC之后,别急着合闸送电,先做一轮静态检查。我把这个检查流程固定成了三件事,每次项目都按这个来。
第一件是查I/O映射表,确认PLC程序里的每一个输入输出地址和实际接线端子一一对应。比如X0接的是缺水液位开关,程序里就要写X0;Y0接的是1号泵接触器,程序里就要写Y0。常见的问题是一个地址两台泵共用,或者两线制传感器信号接反导致数值反向。
第二件是模拟量通道校正。压力变送器如果量程是0-1.6MPa,输出4-20mA,那在PLC的模拟量模块里,数字量大约在4000-20000之间,这个映射关系要人工校准。我习惯的做法是,用信号发生器直接输出4mA,看PLC读到多少;再输出20mA,看PLC读到多少,两个点校准好了,中间线性就没问题。
第三件是变频器参数预置。变频器的运行方式设成端子控制频率给定,频率源选模拟量电压信号或者电流信号,我这里一般用0-10V电压信号,对应0-50Hz。加减速时间设置非常关键,供水泵一般建议加速时间8-10秒,减速时间10-15秒,太短容易导致出水压力波动、水锤冲击管道,太长则压力响应滞后。
4.3 上电调试的个人操作顺序
上电调试,我的习惯是“先手动,后自动,再无人”。第一步先把手动/自动切换开关拨到手动挡,在触摸屏上分别启动1号泵、2号泵,检查两台泵的转向是否正确。如果泵反转,出水压力起不来,电流也偏低,这种情况见得多,尤其新装的泵最容易接反相序。
第二步在手动模式下把每台泵的工频运行电流记录下来,对比水泵名牌额定电流,看是否在合理范围内。如果电流明显偏大,可能是泵的扬程选得比实际管路阻力高太多,这时要检查出水阀门开度;如果电流明显偏小,可能泵在抽空状态或者进水管路有堵塞。
第三步切到自动模式,把设定压力设为设计值,比如0.5MPa,观察系统从启动到稳定的整个过程。启动瞬间看出水压力是否会出现尖峰,如果尖峰超出设定值0.15MPa以上,说明加速时间太短或者PID参数太大,需要调整。
第四步模拟故障,这一步很多调试人员会忽略。分别短接缺水液位信号、模拟超压信号、断掉一路电源,看PLC能不能正确报警停机,然后复位恢复。这个环节能暴露程序状态机中的很多问题,比如某些状态被卡住,或者报警后无法自动恢复。
5. 手写PID控制与参数整定的心得
5.1 为什么供水系统PID要这样调
恒压供水的本质是控制水泵的频率,使得出水压力等于设定压力。但水泵和管路构成的系统有个特点:大惯性、纯滞后小但时间常数大。也就是说,你改变频率后,压力要过一两秒才开始变化,然后慢慢逼近新的稳态,整个过程可能持续十几秒甚至更长。
针对这个特点,PID参数整定我遵循一个原则:比例系数不要大,积分时间不要短,微分基本上不用。因为比例大了,压力波动大,泵的频率会跟着压力发抖;微分对这种大惯性系统基本没有帮助,反而会把高频干扰信号放大。
我常用的初值是这样:把水的压力设定值按百分比归一化后,kp取0.5到1.0,ki取0.03到0.08,kd取0。然后现场微调。整定技巧很简单:先把ki设到0,只留纯比例,在自动模式下看压力波动,如果压力一直围绕设定值震荡但稳定不下来,就减小kp;如果压力能稳定但偏差太大,就增大kp。等比例项能让压力在设定值附近稳定住之后,再加入积分项,积分的作用是把静差消掉,但积分太大会引起低频振荡。
5.2 带水箱模式下的多泵轮换逻辑
箱式无负压设备里有个特有的逻辑:市政压力正常时,泵组从稳流罐吸水,水箱不参与,这叫直接叠压模式;市政压力偏低时,电动切换阀打开,泵组从水箱吸水,这叫水箱供水模式。模式切换不能靠人来判断,要程序自动识别。
我的做法是增加一个“进水压力区间判断”模块。设定两个阈值:进水压力低于0.15MPa时,判定市政压力不足,打开水箱供水模式;进水压力恢复到0.22MPa以上且保持5分钟,判定市政来水恢复正常,关闭水箱模式。这个5分钟的延时非常重要,防止市政压力在阈值附近反复抖动导致阀门反复切换。
多泵轮换主要解决的是“备用泵长期不用锈死”的问题。我设定的逻辑是,系统累计运行时间每满24小时,自动把主备泵角色互换一次,同时记录每台泵的累计运行时间,在触摸屏上显示。这样两台泵的磨损相对均衡,不会出现一台泵用到坏另一台泵一次都没启动过的情况。
5.3 上位机与远程监控的数据交互设计
现在的供水项目,不带远程监控根本交不了差。我常用的方案是PLC通过以太网模块接现场交换机,触摸屏和上位机组态软件都走网线访问。监控数据主要分为实时数据和历史数据两类。实时数据包括:进出水压力、瞬时流量、泵组频率、运行状态、报警状态;历史数据包括:每日用水量曲线、压力异常记录、故障报警时间戳。
这里要提醒一句:历史数据的存储机制很关键,要按分钟存一条,还是按秒存?按秒存数据量太大,上位机查询的时候会很卡;按小时存,曲线又太粗,压力波动细节丢了。我的经验是,正常压力流量数据按分钟存,报警和故障按事件记录,带时标。这样既有足够的曲线精度,又能保证故障追溯的完整性。
6. 常见问题与排查技巧实录
6.1 压力高频小幅震荡
这是最常遇到的问题。现象是触摸屏上压力数值在设定值附近来回跳,泵的频率也跟着忽高忽低。原因多半是PID参数不适合当前工况,或者压力变送器信号受到干扰。
排查方法如下:先把PID打到纯比例状态,kp逐步降低,直到压力震荡幅度明显减小。如果降到0.3左右还震,就检查传感器屏蔽线是否接地,模拟量模块接线端子是否松动。还有一种容易被忽略的情况是压力变送器取压口被泥沙堵住,压力反应迟钝,这种情况只能拆下来清理。
6.2 泵启动了但压力始终上不去
分两种情况。第一种是泵在转,但出水压力几乎没有变化,这时首先怀疑泵反转,最简单的方法是看泵的旋转方向标记,或者摸一下泵的出口管是否发热。第二种是泵正常转,压力能升到某个值但离设定值差很远,这时要检查进水压力是否太低,稳流罐水位是否不足,真空抑制器是否卡死在开启位置,导致罐内无法建立压力。
6.3 低频运行时泵体噪音大
很多泵在20Hz到30Hz区间运行时噪音明显,这是因为频率低时泵的转速低,泵内水流不连续,可能产生汽蚀和气穴现象。解决方案是在程序里设置一个“禁止运行频率区间”,比如20Hz到25Hz之间的值全部按照20Hz或者25Hz输出,避开泵的共振区。注意,这个跳频处理要在PID输出之后做一次限幅,别直接改PID的输出值,否则积分会不断积累,之后频率会突然跳到很高的值。
6.4 无水保护功能误动作
无水保护的原理是检测稳流罐或进水管路的压力或液位,低于阈值就停泵。误动作通常发生在用水高峰,市政进水压力短时间降到保护阈值以下,但实际还有水,只是压力低。解决思路是把无水保护的判断条件做成“持续低压延时”,比如连续20秒压力低于0.03MPa才触发保护,这样可以有效滤除短暂的压力波动。但如果市政管网确实长期低压,那就要靠箱式设备的水箱模式去兜底了。
6.5 触摸屏界面显示与PLC数据不对应
这种情况多出在模拟量工程量换算上。PLC里的压力是数字量,上位机显示要乘一个转换系数,如果两边人员不是同一个人,很容易把量程算错。我的经验是,PLC程序里做一次转换,把真实物理量(MPa)放到一个浮点寄存器里,上位机直接读取这个浮点值显示,不要再做二次换算,这样能最大程度避免单位或量程不一致导致的问题。
7. 写在最后的实际操作体会
箱式无负压供水系统从原理上看并不复杂,但工程落地的每一个环节,从设备选型、管路设计、电气接线、PLC编程到参数整定,细节都极其密集。我在这个领域踩过的坑,以上的章节里基本都写到了,但对新手来说,最重要的一条建议是:程序只是整个系统的一部分,它永远不会比现场工况更聪明。你写的每一行逻辑,都是在和真实的管道、阀门、传感器打交道,所以要花更多时间去理解现场实际发生了什么,而不是只盯着代码。
还有一个小的经验技巧,是我在后期运行维护中总结出来的:给每台设备建立运行日志,包括启停记录、报警记录、压力曲线。时间长了以后,回看这些日志能帮你精准定位很多间歇性故障,比如某个时间点压力突然波动,可能正好是隔壁工地施工导致市政压力异常。这类问题单纯靠现场测是测不出来的,一定要靠数据说话。
箱式无负压供水系统的扩展空间也很大,目前很多项目已经开始接入云平台,手机端远程报警、故障诊断、用水数据分析都成了标配。后续如果有机会,我打算再写一篇关于供水系统如何做云平台对接和数据可视化的文章,这套东西从代码角度来说,同样很值得展开聊一聊。
