
去年初接了一个老酒店的供水改造目标就一句话把原来靠压力开关上下限启停的冷热水泵换成由西门子PLC控制的冷热水恒压供水系统。听上去不复杂真正做完才发现冷水恒压只是开胃菜热水那一路从PID参数到安全联锁处处都是坑。这篇文章就把整个开发过程完整拆开需求怎么定、硬件怎么选、PID怎么整、多泵怎么切、现场又踩了哪些雷。做供水改造的同行可以直接当参考刚入门西门子PLC的朋友也能借这套项目理顺PLC、变频器、传感器之间是怎么配合的。1. 需求摸底冷热水双回路的恒压目标是怎么定的1.1 原系统的三大痛点改造前现场用的是最传统的压力开关控制压力低于下限0.25MPa启动泵高于上限0.45MPa停泵。四层酒店加三十来间客房早晚用水高峰和平峰流量能差出五六倍于是泵就在启停之间反复横跳。我蹲了一天现场记录了三个直接促使甲方下决心改造的问题压力波动夸张。淋浴时水温忽冷忽热客房投诉不断。冷水侧波动±0.1MPa热水侧因为管路长、还带回水管波动更明显。水锤和噪音。泵启停瞬间管道“咚”地一声夜间安静时整栋楼都能听见几处管卡都震松了。能耗浪费。泵是工频直接启停满速硬跑不跑满就憋压电机常年过热电费高得离谱。这里插一句恒压供水不是把压力稳住那么简单稳定只是表象背后要解决的是泵的调速、切换、休眠、保护一整套逻辑。这些后面会一一展开。1.2 控制指标与热水回路的特殊性和甲方确认后控制指标定成项目指标冷水恒压值0.40 MPa波动±0.01 MPa热水恒压值0.30 MPa波动±0.01 MPa泵启停切换瞬间压力波动≤0.02 MPa运行方式自动/手动触摸屏切换故障处理报警、自动切泵、超限停机扩展接口预留楼宇自控BMS通信口为什么热水定得比冷水低一是热水系统末端混水阀、回水管路多压力过高反而影响调节和寿命二是热水温度高一旦管路破损高温喷射的烫伤风险更大。很多第一次做热水项目的工程师会忽略这条上来就按冷水0.4MPa去整定热水回路后期麻烦不断。热水回路还有个根本性的不同冷水的压力源就是水泵本身动态响应直接而热水通常经过热水机组、储水罐再到增压泵前面多了一个储能环节整个回路的时间常数明显变大。这一点直接决定了后面的PID参数不能照抄冷水。2. 硬件选型与系统架构S7-1200加ABB变频器2.1 PLC、通信模块与模拟量模块的取舍控制系统选了西门子S7-1200 1214C DC/DC/DC加一块CM1241 RS485通信模块和一块SM1231 AI4模拟量输入模块。很多人问为什么不直接用S7-200 SMART便宜一大截。说实话经济型项目用200 SMART完全没问题但这个项目我坚持用1200原因有三个双回路恒压需要至少两路压力变送器信号后续可能加储罐液位、温度信号SM1231 AI4一步到位比挤板载AI舒服。TIA Portal下的PID_Compact工艺指令比200 SMART的回路整定舒服太多自整定、调试面板、趋势监视都是现成的。1214C自带PROFINET口HMI和后续BMS通信都在这一个口上解决不用再买通信处理器。这里必须提醒一个细节S7-1200板载AI只支持0~10V电压输入你要是拿4~20mA变送器直接怼上去轻则读数不对重则烧通道。常见的做法是并联250Ω精密电阻把4~20mA转成1~5V但精度和抗干扰都一般。我这次因为有双回路加备用通道的考虑直接上了SM1231模块原生支持4~20mA省掉一堆转换电阻。2.2 变频器与压力变送器的选型理由冷水回路主泵5.5kW、辅泵5.5kW热水回路主泵4kW、辅泵4kW两路各配一台ABB ACS510变频器。为什么选ABB而不是西门子G120不是G120不好而是ACS510这个型号本身就是为水泵风机设计的内置RS485 Modbus RTU通信口控制字和频率给定都是标准寄存器和S7-1200用MB_MASTER跑Modbus RTU非常顺。而且现场同批设备里其他系统已经在用ABB备件统一。要注意的是必须把变频器的启停命令源和给定源都切到Modbus通信控制ABB这边主要就是1001组和1102组参数不切的话寄存器写进去没有任何反应。压力变送器用的0~1.0MPa、4~20mA二线制扩散硅隔膜式精度0.5%。量程为什么选1.0MPa而不是0.6MPa因为冷水系统最高压力点要考虑泵关死扬程工作压力0.4MPa泵的最大扬程折算下来接近0.7MPa量程留15%以上的余量更稳妥也避免长期跑在量程边缘导致非线性误差。还有一个安装层面的硬经验压力变送器不能装在泵出口紧贴弯头的地方。泵出口的水流是带旋流的紧贴弯头测出来的压力毛刺非常多后面PID怎么调都压不住震荡这个问题我在调试章节会详细讲。2.3 网络架构与IP规划整个控制网络分两层PROFINET层S7-1200192.168.0.1和KTP700 Basic触摸屏192.168.0.10走以太网TIA Portal下载程序、HMI组态都用这一个口。Modbus RTU层PLC的CM1241 RS485口挂两台变频器冷水变频器站号1、热水变频器站号2波特率19200偶校验8数据位1停止位。涉及PROFINET设备时有个常见的坑顺带说一下PROFINET设备在TIA里是“设备名IP地址”双重绑定的在线分配时把IP设对了但设备名没对上PLC照样找不到设备。如果你后续要把变频器升级成PROFINET通信卡或者接PROFINET的机器人、仪表一定要记住设备名和IP必须同时对应上这是“地址对应”最容易翻车的地方。3. PID恒压控制回路TIA Portal里的搭建与整定3.1 为什么用PLC做PID而不是变频器内置PIDACS510自身也带PID功能为什么还要在PLC里做PID这个选择当时跟几个同行讨论过我坚持PLC侧做主控制理由很实在双回路要统一协调。冷水和热水虽然是独立回路但热水的进水压力来自冷水系统两个回路在工况上是耦合的。都在PLC里联动、报警、切泵都方便。多泵切换需要干预PID输出。辅泵工频启停瞬间必须对PID输出做保持或预降这些逻辑在PLC里做就是几行SCL的事变频器内置PID根本没有这个接口。调试和追溯方便。TIA Portal的趋势图和PID调试面板直接看PV、Output曲线甲方要数据报表也拿得出来。3.2 PID_Compact的调用、信号链路与采样周期S7-1200里PID用的是工艺指令PID_Compact。我开了两个实例PID_冷水、PID_热水都在OB30循环中断里调用采样周期设为100ms。这个周期对供水压力控制足够了再快没有意义因为管道的惯性远远大于扫描周期。信号链路是这样SM1231把4~20mA转成0~27648整数硬件组态里选好4~20mA量程。程序里用NORM_X/SCALE_X把0~27648归一化到0.0~1.0MPa的REAL值作为PID_Compact的输入。PID_Compact输出是0~100%的REAL把它乘以100转成0~10000的整数写进变频器Modbus的给定寄存器。ABB标准Modbus映射里控制字在40001、频率给定在40004给定值0~10000对应0~100%最大频率变频器侧最大频率设成50Hz。PID_Compact的工程单位我直接用的MPa输入上下限设为0.0和1.0这样HMI上设定0.40MPa、趋势图显示0.40MPa谁看了都不会懵。新手常犯的错是先把压力换算成百分比再进PID设定值和趋势全变成“58%”这种鬼数字后期排查能把人逼疯。3.3 两个回路为什么不能用同一组参数自动整定之后我又花了大半天手动细调最终参数如下参数冷水回路热水回路比例增益 Gain2.82.2积分时间 Ti2.0 s4.0 s微分时间 Td00采样周期0.1 s0.1 s输出限幅20%~100%20%~100%死区±0.005 MPa±0.005 MPa差别最大的是积分时间。冷水管路短、泵直连管网压力响应快Ti取2秒能很快把偏差吃回来热水回路前面有储水罐管路长末端还有混水阀和回水系统整套惯性比冷水大得明显Ti取4秒依然稳。你要是把冷水的2秒直接套给热水现场表现就是压力波一个接一个泵速来回冲连续震荡好几分钟都收敛不了。微分我两个回路都设了0。供水压力的测量信号本来就有毛刺微分项会把噪声放大成剧烈的泵速波动得不偿失。死区±0.005MPa的意思是偏差在5kPa以内不让积分项继续累加这是防止泵速在小范围内高频抖动的关键很多现场“嗡嗡嗡”的电机声就是这么治掉的。3.4 自动整定的操作步骤与注意事项PID_Compact自整定用起来很简单但我建议按这个顺序做否则结果会误导你手动模式把变频器拉到50Hz让系统在一个明确的工况点稳定运行。确认压力变送器读数稳定没有跳变。读数本身不稳定就别整定先解决传感器问题。避开早晚用水高峰时段整定最好选深夜或中午用水少的窗口。自整定完成后把系统切回自动观察30分钟趋势再在这个基础上手动微调Gain和Ti。自整定给出的参数一般不能直接用。我实测下来PID_Compact的自动整定为了追求快速响应比例增益往往偏大直接跑会有个小幅超调把Gain往下压10%~15%再上手体感会稳很多。4. 多泵调度与变频/工频切换逻辑4.1 辅泵启停的判断条件与确认时间每个回路一台变频主泵加一台工频辅泵。变频主泵负责平滑调速工频辅泵只在流量实在顶不住时顶上。判断逻辑我放在一个独立的SCL块里不掺进PID启动辅泵变频器输出已到50Hz且持续30秒同时实际压力仍低于目标值0.005MPa以上则启动辅泵。停辅泵辅泵运行中变频器输出已降到最低频20Hz且持续60秒同时实际压力高于目标值0.01MPa以上则停辅泵。两个时间常数一个30秒一个60秒不是随手写的。管路里有水锤惯性泵刚提到最大频率时压力并不会立刻掉到最低如果确认时间太短辅泵会被“虚低”的压力误导而反复启停。实测下来30秒确认时间能滤掉绝大多数假信号。辅泵启动瞬间我加了PID输出保持逻辑检测到启动辅泵指令后先把PID_Compact的输出强制到35%等辅泵运行反馈到位后再释放PID自动控制。原因是工频泵一启动瞬间多了一整台泵的流量如果PID还在自由计算输出会先猛掉再猛补现场压力会出现一个明显的“下跌-反弹-再收敛”的波浪。强制输出等于给切换过程加了一个前馈实测切换瞬间压力波动控制在0.015MPa以内。辅泵停止判断同理只是方向相反。注意停辅泵的阈值比启动阈值高一些天然形成滞环避免辅泵在临界点来回启停。4.2 泵轮换与休眠唤醒策略泵轮换这块我做了个简化HMI上可以手动选择1#泵还是2#泵作为变频主泵另一台自动变成工频辅泵。至于真正意义上的自动轮换——用一台变频器通过切换接触器轮流带两台泵——这次没做。原因很现实一套切换接触器加互锁逻辑的成本对5.5kW这种小泵来说占比太高而且现场对等寿命轮换的需求没那么强。如果你的项目泵大、或者甲方的连续运行要求高再考虑一拖二切换柜。休眠唤醒是我认为这套系统最值钱的节能逻辑。夜间客房没人用水时变频器已经降到最低频压力还高于目标值0.01MPa持续5分钟PLC就把主泵停了管路压力靠出口止回阀和一个小膨胀罐保持。压力慢慢泄到低于目标值0.03MPa时重新启动主泵。加这套逻辑前夜间泵空转一晚加之后夜间启停次数从原来的几十次降到两三次甲方统计下来的节电量非常可观。这里有个前提泵出口必须装合格的止回阀膨胀罐也要按管网容积选型不然压力泄得太快休眠逻辑形同虚设。5. 冷热水双回路的联锁保护与安全细节5.1 热水回路三个容易被忽略的风险冷水回路保护相对成熟进水压力低压报警、泵干转保护、电机热继、变频器故障自动切辅泵这些按常规思路做就行。热水回路要额外关注的三个点是我这次最想提醒同行的。第一个是储罐低液位联锁。现场热水通过集中热水机组加热后进储水罐再由热水增压泵送到客房。用水高峰时热水机组产水跟不上储罐液位会明显下降。液位一旦低于下限热水泵必须停否则泵会吸空产生汽蚀那声音像泵里含了沙子长时间运行叶轮直接被打坏。联锁做的时候别把液位下限卡在罐底要给热源产水留出缓冲时间不然联动启停太频繁。第二个是热膨胀。热水泵停止后管路里的水还在被高温加热体积膨胀如果出口没有膨胀罐或者泄压阀管路压力会缓慢爬升检修时一拆法兰就是热水喷出。我在热水出口加了一个小容积膨胀罐并在最高点装了自动排气阀这个问题才算根治。第三个是汽蚀余量的温度效应。热水的汽化压力比冷水高同样一台泵抽热水允许的吸入口最低压力远高于抽冷水。如果储罐液位低、吸入口静压不够泵入口就会出现局部汽化。所以热水回路的最低压力保护值不能照抄冷水水温越高越要往上留裕量。调试时我把热水目标压力从0.25MPa往上调到0.30MPa并同时抬高储罐低液位联锁值泵的汽蚀噪音才消失。5.2 故障分级与自动切换策略故障我分成三级处理级别故障示例处理方式轻压力短时波动、通信单次错误记录趋势不动作中主泵变频器故障、电机过载切到辅泵工频运行报警提示重进水断流、储罐低液位、检测到干转停对应回路全部泵声光报警需人工复位热继电器、变频器故障输出、止回阀异常这些硬信号全部进PLC的DI点而不是只靠通信来判断。Modbus通信再怎么稳也没有硬接点可靠通信断了你还靠数据判断故障那就是连环坑。急停回路我没有进程序而是直接串在接触器控制回路的硬件里。急停按钮按下所有泵的接触器失电不管PLC在跑什么逻辑。理由很朴素安全回路越简单越可靠程序里的急停逻辑再怎么写也顶不过硬件断电路的一根线。6. 现场调试实录三个典型的坑与完整排查过程6.1 冷水压力来回震荡先查传感器再动PID冷水回路第一次上自动压力就在0.40MPa附近来回摆了约±0.05MPa变频器输出频率在30Hz到50Hz之间来回冲。第一反应是PID参数问题我试着把Gain从2.8降到1.5震荡确实变小了但压力拉回设定值的时间拖得很长再加大Ti又开始震荡。这时候我意识到不对劲把压力趋势调出来看原始PV发现信号本身就有明显的毛刺每隔几百毫秒跳一次。顺着信号查找到了根因压力变送器就装在泵出口第一个弯头的下游200mm处泵出口的旋流直接打在变送器膜片上测出来的压力本身就是带脉动的。后面我把变送器挪到距离泵出口1.5米的位置中间加了一个小缓冲罐同时在PID_Compact输入端把测量值滤波时间设置到1秒。结果不用动PID参数震荡直接消失。这个坑我印象极深。调恒压系统第一件事永远是先确认你的测量值可不可信测量信号脏后面整定再精细都是白费。很多工程师一上来就调PID调三天发现还在晃最后才发现传感器装错位置浪费的时间完全没必要。6.2 Modbus RTU通信间歇中断一条排查链路走到底冷水变频器投用第二天开始出现通信故障现象是每隔几分钟MB_MASTER返回一次错误变频器保持上一次给定频率运行压力开始慢慢漂。查的过程我按这个链路一步一步来先看错误码。TIA Portal里MB_MASTER的STATUS输出16#8184表示从站无响应16#8185表示CRC校验错误。现场两种码交替出现说明不是纯无响应而是数据被干扰或线路质量差。核对通信参数。变频器站号、波特率、奇偶校验与PLC侧MB_COMM_LOAD设置逐项比对确认一致。查线路。RS485的A/B线有没有接反、屏蔽层有没有单端接地、终端电阻有没有接。这一步发现两处问题RS485电缆和变频器输出电缆在同一个线槽里平行走了约2米线路两端都没接终端电阻。重新布线和加终端电阻。把RS485电缆换成了屏蔽双绞线单独走线槽远离变频器输出电缆PLC侧和末端变频器侧各接了一个120Ω终端电阻。改完后连续跑一周通信错误基本归零。这里有个经验Modbus RTU通信问题八成是物理层问题而不是参数问题。先看线、再看站号、最后才怀疑程序。另外MB_MASTER的REQ别用太快的脉冲我设的是500ms一次总线负载很低够用。两台变频器分站号1和2读写用同一个REQ脉冲顺序轮询完全没冲突。6.3 工频辅泵启动瞬间的水锤强制输出加膨胀罐辅泵第一次自动启动管道传来“咚”的一声压力曲线先是掉到0.36MPa然后冲到0.48MPa接着又回落整个过程像荡秋千。分析下来两个原因叠加一是工频泵直接启动瞬间流量阶跃太大管网里水柱惯性被瞬间激发二是PID在切换瞬间还在自由输出来不及响应这个扰动。解决分两步。程序层面我先在SCL里加了输出保持逻辑启动辅泵前把PID输出强制到35%等辅泵运行反馈信号到位、管网压力重新稳定后再释放IF start_aux_pump AND NOT aux_pump_fbk THEN hold_pid_output : TRUE; PID_Cold.ManualEnable : TRUE; PID_Cold.ManualValue : 35.0; END_IF; IF aux_pump_fbk THEN PID_Cold.ManualEnable : FALSE; hold_pid_output : FALSE; END_IF;物理层面在冷热水共用总管上加了一个小容积的膜式膨胀罐吸收切换瞬间的压力尖峰。这两个措施一起上切换瞬间压力波动从±0.06MPa压到了±0.015MPa以内。之后辅泵启动再也没出现管道水锤声。6.4 热水泵峰值时段的汽蚀噪音液位联锁别卡底线热水回路调试后期晚间用水高峰时热水泵发出明显的汽蚀声流量也不稳定。百思不得其解——泵的扬程选型没问题管路也没堵。最后查出根因热水储罐液位下限我设在了罐底往上200mm处但高峰时段热水产水跟不上液位被拉到下限附近泵的进水静压不够吸入口开始汽化。修法不是加大泵而是把液位下限从200mm抬高到600mm同时给热水变频器设了45Hz的输出上限限制峰值流量不要超过热水产水能力太多。配合热源侧的产水时间提前问题就解决了。这个经历再次印证了一件事热水系统的问题很多时候不在泵和管道而在上游的液位和产热能力排查时永远要往上游看。这套系统交付到现在运行了半年多我个人的体会是恒压供水看起来是个成熟得不能再成熟的方案但真正落地每一个细节都在考验对现场的理解。调试时多看趋势曲线、少开会拍脑袋冷热水参数坚决分开整定变频器通信按物理层、参数层、程序层逐级排查现场永远保留手动优先和强制启停的入口。做到这几点项目就不会差到哪里去。最后再说一个可以扩展的点甲方后来要把这套系统挂到楼宇自控里我只用S7-1200自带的PROFINET口加一个MB_CLIENT指令以Modbus TCP方式把压力、泵状态、故障码周期上报到BMS网关五分钟就调通了。所以当初选型时多考虑一步通信预留后面收益远超预期。