
1. 项目概述为什么说一拖三恒压供水是PLC入门的必修课刚接触工控的朋友或者已经在自动化行业摸爬滚打几年的同行应该都听过“恒压供水”这个词。说它是PLC最经典的实训项目之一一点不夸张——一个合格的恒压供水程序几乎涵盖了你日常会用到的大部分基础功能模拟量采集、PID调节、变频器通讯、电机启停逻辑、报警处理、触摸屏交互。能把一套一拖三一台变频器拖动三台水泵电机的恒压供水系统独立做出来并且稳定运行那你的工业现场入门算是真正过关了。S7-1200是西门子目前中小型项目的主力PLC性能和价格都很适合供水这类场景。项目里所谓“一拖三”指的是用一台变频器配合三台水泵电机正常情况下变频器拖动一号泵恒压运行当用水量增大、一号泵达到工频上限还压不住管网压力时系统自动把一号泵切到工频同时变频器启动二号泵继续调速以此类推。反过来用水量减少时再依次退出。这套逻辑的难点不在PID本身而在“什么时候该加泵、什么时候该减泵、切换瞬间怎么抑制水压波动”这几件事上。而这恰恰是供水控制系统的灵魂。这篇内容面向三类人刚学完PLC基础指令但没接触过实际项目的新手想把自己手头恒压供水方案做得更稳的电气工程师以及在现场被“水管压力震荡、频繁启停”折磨得头疼的售后调试人员。我会从方案设计、主电路选型、PLC程序框架、PID参数整定、触摸屏联动、常见坑点这几个角度把整套项目的完整细节拆开讲透。项目配置我按最常见的标准来S7-1200 CPU1214C DC/DC/DC或者带继电器输出的版本均可一台ABB ACS580或西门子V20变频器三台7.5kW水泵电机一块威纶通MT8071iP触摸屏。压力变送器输出4-20mA直接进PLC模拟量模块。整套方案下来成本不高但功能完整非常适合作为标准模板复用。2. 方案设计与系统架构2.1 一拖三控制模式的选择依据恒压供水从控制结构上分主要有三大类一拖一、一拖多固定循环、一拖多工变频切换。一拖一最简单变频器直接带一台泵PID闭环调压适合用水量波动小的小型场合比如单栋楼或小型加压站。一拖多按固定轮换方式运行水泵顺序启动、顺序停止每台泵都有机会当“主力变频泵”缺点是切换逻辑复杂频率较高时对泵和管网的冲击明显。一拖三工变频切换是目前住宅小区、学校、工厂供水的主流方案也是我这次选用并重点拆解的结构。它的优点很直观硬件成本最低只需要一台变频器能耗控制好大部分时间只有一台泵调速运行其余泵处于工频或者停机状态系统冗余度可用遇到某台泵故障可以通过参数修改把故障泵屏蔽掉不至于整个系统瘫痪。但代价是控制逻辑复杂。你得在三台泵之间分配“变频泵”和“工频泵”的角色要处理加泵、减泵时的时序还要考虑泵累计运行时间做轮换。程序写不好最容易出两个问题切换瞬间水压突变用户端花洒忽大忽小加泵减泵过于频繁接触器咔咔响电机和电网都受罪。我这套方案选用的逻辑是开机默认一号泵为变频泵其余泵为备用工频泵。当变频器频率输出达到50Hz上限且持续超过设定时间比如60秒仍然管网压力偏低则判断“用水量大于单泵能力”系统先把当前变频泵切到工频运行短暂延时后再由变频器启动二号泵从0Hz开始升频追压。减泵逻辑相反变频泵频率降到25Hz以下且持续低频率运行超过设定时间说明用水量下降系统先停掉最后启动的那台工频泵等管网压力回升后变频泵再降速维持压力。2.2 主电路设计接触器互锁与切换安全主电路这块很多新手看图能看懂但自己画就容易忽略细节。一拖三的主电路核心是三个接触器与变频器的组合关系每台电机配备两个接触器一个接在变频器输出端用于“变频运行”一个接在工频电源端用于“工频运行”。也就是说三台电机一共六个接触器同一台电机的工频接触器和变频接触器必须做到硬互锁和软互锁双重保护。软互锁在PLC程序里做两个输出线圈互锁硬互锁要在接触器电气回路里做把工频接触器的常闭触点串进变频接触器线圈回路反之亦然。为什么强调硬互锁干过现场的都懂一旦PLC程序跑飞或者输出模块故障两个接触器同时吸合三相工频电会直接倒灌进变频器输出端轻则炸模块重则火灾。这个代价没人愿意承担。还有一个细节是电机保护。工频回路要配热继电器整定电流按电机额定电流的1.1倍左右设置。变频回路的热保护则可以由变频器内部的电子热保护来完成不用再额外配热继电器但前提是变频器参数里的电机额定电流要正确输入。有些人图省事变频回路也加了热继结果变频器低频运行时热继误动作反而增加故障点。电源侧如果现场有三相四线制供电建议给PLC、触摸屏、压力变送器配上隔离变压器和开关电源成本不高但能避免电机启停时电源跌落导致PLC重启。我在这类项目上吃过亏变频器启动瞬间电压闪了一下PLC直接掉电重启程序从头开始所有泵全关管网压力瞬间掉到底。后来加了优质的开关电源和输入滤波器问题才根除。2.3 硬件选型与IO地址规划具体的选型清单我按一套实际落地过的项目整理如下。这里不追求绝对最优只求稳定可靠、成本可控、采购容易。设备型号/规格备注PLCS7-1200 CPU 1214C DC/DC/DC自带14DI/10DO扩展1个SM1231 AI 8x13bit变频器西门子V20 11kW建议比电机功率大一档留有裕量水泵7.5kW 三相异步电机×3扬程和流量按实际管网计算压力变送器扩散硅 4-20mA 两线制量程0-1.6MPa看楼高触摸屏威纶通MT8071iP支持S7-1200以太网通讯接触器施耐德LC1D18×6额定电流18A7.5kW电机够用热继电器施耐德LRD21×3整定范围12-18A开关电源明纬DR-45-24给PLC和触摸屏供电变频器功率比电机大一档是刻意的。恒压供水没有重载启动需求变频器平时运行在30-45Hz区间功率裕量主要留给加泵切换瞬间的电流冲击。选型时不差这几百块钱后面故障率会少很多。IO分配我按固定习惯来规划大家抄作业也方便。数字量输入一号泵手自动选择、二号泵手自动选择、三号泵手自动选择、一号泵故障、二号泵故障、三号泵故障、远程启动、远程停止、水池低液位、消防信号。数字量输出一号泵变频接触器、一号泵工频接触器、二号泵变频接触器、二号泵工频接触器、三号泵变频接触器、三号泵工频接触器、故障声光报警。模拟量输入管网压力反馈、水池液位。这里提醒一句每台泵的“手自动选择”开关和“故障”信号看似重复但实际项目中几乎不能省。手动模式用于检修和单泵调试故障信号用于程序里屏蔽故障泵防止系统反复尝试启动损坏设备。两者缺一个系统都谈不上完整可用。3. 核心程序逻辑与PID调节实现3.1 程序整体框架与调用结构S7-1200的程序组织单位分三种组织块OB、函数块FB、函数FC。恒压供水程序我习惯按模块化思路划分这样后续维护和移植项目都会轻松很多。OB1主循环负责调用所有功能块OB100启动组织块负责初始化参数OB35循环中断组织块专门放PID运算中断周期设为100ms。为什么PID要放循环中断里因为PID计算需要严格定时执行如果放在OB1里主程序扫描周期可能因为通讯、触摸屏刷新等原因波动定时不准直接影响调节质量。放到OB35后无论主循环多忙每隔100ms必定执行一次PID运算稳定可靠。功能块划分上我建立三个核心FBFB1000“泵组控制逻辑”负责三台泵的状态管理和加泵/减泵切换FB2000“PID调节”封装S7-1200自带的PID_Compact指令FB3000“报警与保护”负责压力超高、超低、水位低、变频器故障等信号的综合处理。另外再写几个FC做辅助功能比如模拟量工程量转换、泵累计运行时间记录等。程序里各功能块之间的关系是这样PID_Compact输出0-100的百分比频率给定值送给泵组控制逻辑。泵组控制逻辑根据频率值和压力偏差判断是否需要加泵或者减泵并将最终的启停命令、变频器启停命令、频率给定值写到输出点。报警保护块则独立采集各路故障一旦触发关键保护立即封锁泵组输出。3.2 加泵减泵时序的细节设计加泵减泵是这套程序里最考验功底的部分逻辑看起来不复杂但细节非常讲究。先说加泵条件。我用的是“频率-时间”双条件判断法变频泵运行频率持续大于49Hz超过60秒且管网压力仍低于设定压力0.02MPa以上。为什么不用单一条件如果只看频率管网压力传感器故障时可能误加泵如果只看压力用水量突然增大瞬间压力还没掉下来判断会滞后。双条件同时满足才动作误判概率大幅降低。加泵的动作时序我在程序里用一个定时器链实现检测到加泵条件满足后第一步变频泵升频到50Hz等待2秒让管网压力趋于稳定第二步断开变频接触器变频器停止输出等待3秒第三步吸合该泵的工频接触器电机切换到工频电源第四步等待3秒变频器启动下一台备用泵并从25Hz开始升频追压。这串动作看着简单但每一步的延时都有讲究。第一步等待2秒是为了让正在工频运行的那台泵被带载稳定不会因为管网阀门和管路缓冲导致压力波动影响后续判断。第三步停3秒是为了让接触器灭弧后充分断开防止电弧短路。第四步等3秒是为了让工频接触器完全吸合稳定同时让管网压力略回升变频器再追压时不会产生过大的压力超调。减泵条件则反过来变频泵运行频率持续低于25Hz超过60秒且管网压力高于设定压力0.02MPa以上。这里有个经验值要说一下减泵判断的频率阈值不应和加泵阈值对称设置。如果加泵是49Hz、减泵是25Hz中间留了一个很大的滞回区间。这个滞回区间的意义就是防止“边界抖动”——用水量在临界点上下波动时系统不会频繁加泵减泵接触器的寿命和管网的稳定性都会好很多。3.3 PID参数整定实操PID参数整定是恒压供水项目里大家最犯怵的环节。我说句大实话现场项目里真正靠理论公式算出来的PID参数没几个能直接用大部分都是经验值加现场微调。但完全不理解原理也不行否则参数乱了连往哪个方向调都不知道。S7-1200的PID_Compact指令集成在工艺对象里组态时选择“压力控制”即可输出类型选“百分比”。整定步骤我建议按以下顺序操作先设一个保守的初始参数比例增益Kp2积分时间Ti30秒微分时间Td0微分增益默认。然后手动模式启动一台泵将频率给定设为40Hz观察压力表读数是否稳定。如果压力稳定且无振荡再切入自动模式PID开始根据压力偏差调节频率。观察压力趋势曲线的反应压力到达设定值时如果超调大且回落后再次超调反复震荡几次才能稳定说明Kp偏大或Ti偏小优先调小Kp每次按20%左右的幅度下调压力上升非常慢而且最终偏差一直存在比如设定0.4MPa只能维持在0.38MPa说明Kp太小或Ti太大适当加大Kp或者在保证不振荡的前提下减小Ti压力到设定值后有小幅高频抖动像锯齿一样多半是反馈信号有噪声干扰或者微分作用太强检查屏蔽线和接地同时把微分时间设为0。整定过程中有一件特别容易被忽略的事管网的机械特性对PID参数影响非常大。管路越长、弯头越多、水锤效应越明显系统惯性越大PID越容易振荡。这种情况下要适当增大积分时间牺牲一点响应速度来换取稳定。我在一个高区管网项目里管道长度将近两公里Kp从2一路压到0.6Ti从30秒放到120秒才把压力稳住。所以说PID参数没有万能组合拿着别人的参数去套自己的管网往往不好使。PID_Compact内部还有一个“手动/自动切换”的机制启动时默认手动需要程序里在系统稳定后切到自动。我习惯的做法是开机后先让泵组以最小频率运行5秒待压力传感器读数正常再切自动投PID。这样避免启动瞬间压力反馈为0PID输出直接拉满给管网带来巨大冲击。4. 威纶通触摸屏与S7-1200通讯配置4.1 建立以太网连接与标签导入做S7-1200项目触摸屏我基本首选威纶通理由是它自带一个特别好用的功能——直接导入西门子的PLC标签变量。不用一个一个手动建立地址不用查数据块偏移省下的时间不是一点半点。具体操作路径是这样在威纶通软件EB Pro里新建工程选择设备型号MT8071iP在“设备列表”中添加新设备通讯类型选择“Siemens S7-1200”IP地址填PLC的实际地址比如192.168.0.10。通讯方式选以太网端口默认102。关键一步在这里添加完设备后右键设备选择“导入标签”。软件会要求你提供S7-1200导出的变量表文件。在TIA Portal里选中PLC变量表右键导出为Excel格式即可。威纶通能直接解析这个Excel把PLC的符号名、数据类型、地址全部自动映射到触摸屏工程里。导入完成后你会发现触摸屏变量表里自动生成了跟PLC一模一样的变量名比如“一号泵变频接触器”“管网压力”“压力设定值”等等。后面做画面时直接拖这些变量绑定控件地址完全不会错。要注意的是数据块变量导入时S7-1200默认开启了数据块优化访问变量在DB块内没有固定偏移地址。使用这种变量前需要在DB块属性里取消“优化的块访问”勾选否则威纶通无法识别固定地址。老版本固件的S7-1200还需要在硬件组态中把“连接机制”设为允许PUT/GET通讯访问。这些设置漏掉任何一个触摸屏都读不到数据。经常有人问怎么触摸屏显示全是#####十有八九就是这里的问题。4.2 画面设计与操作权限触摸屏画面我习惯设计成四页主画面、参数设定、运行监控、报警记录。主画面放系统运行状态总览包括当前压力实际值、压力设定值、变频器频率、三台泵的运行状态显示。运行状态用指示灯体现绿色表示变频运行黄色表示工频运行灰色表示停止红色闪烁表示故障。操作按钮放“自动启动”“自动停止”“故障复位”三个傻瓜化设计现场操作工不需要任何培训就能上手。参数设定页放PID和目标压力等参数的在线修改入口压力设定值、Kp、Ti、加泵延时、减泵延时、泵切换间隔。这个页面需要设用户权限我一般分两级操作员可以改压力设定值维护工程师才能改PID和加泵减泵参数。用威纶通的用户管理功能设置两组不同密码简单可靠。运行监控页展示模拟量趋势曲线和泵累计运行时间。趋势曲线对调试太重要了压力波动情况、加泵减泵是否频繁曲线上一眼就能看出来。泵累计运行时间主要用于泵轮换策略累计运行时间最短的泵优先作为下次启动的备用泵保证三台泵磨损均衡。这个逻辑PLC里写触摸屏只负责显示和手动清零。报警记录页显示当前报警和历史报警。报警信息通过PLC内部M变量触发触摸屏读数后记录。报警内容覆盖管网压力过高、管网压力过低、水池低液位、某号泵故障、变频器故障。报警记录支持按时间查询方便售后分析问题。4.3 常见通讯故障排查顺序触摸屏和PLC通讯不上是现场最常见的故障。我的排查顺序一向固定效率最高先看触摸屏右上角通讯状态图标是否正常。如果显示断开第一步ping PLC的IP地址确认物理链路通不通。ping不通检查网线、交换机、PLC网口指示灯。第二步确认PLC里“允许PUT/GET通讯”是否勾选。第三步确认触摸屏设备型号里的PLC固件版本是否和实际一致S7-1200固件升级过的话触摸屏的通讯参数经常需要同步更新。最后检查触摸屏IP地址是否和PLC在同一网段并且没有IP冲突。还有一种隐蔽故障PLC程序里使用了DB块的绝对地址但在TIA Portal里修改过变量声明顺序导致地址变了触摸屏读到的数据错位。我遇到过压力显示正常、频率显示乱码的情况查到最后是变量地址错位。解决办法就是统一用符号名导入标签别在触摸屏手动填地址做变量。5. 系统联调与现场问题排查5.1 模拟量信号干扰的实战处理联调阶段第一件事是验证模拟量通道。压力变送器接好后用万用表量4-20mA信号是否正常然后在PLC程序里监控AIW原始值和换算后的工程量。压力显示的异常情况里最常见的是信号波动大比如实际0.4MPa压力管道稍微有点震动压力显示就在0.35和0.45之间跳。这时候先别怀疑变送器重点查两件事屏蔽层是否单端接地信号线是否和动力线走在同一根线槽里。信号线必须用屏蔽双绞线屏蔽层在PLC端单端接地。切记不要在变送器端也接地两端接地形成地环路反而引入更大的干扰。动力线和信号线分开走桥架间距至少20cm。实在避不开交叉时一定要垂直交叉不能平行走线。另外变频器输出侧加装输出电抗器或者磁环对抑制高频干扰效果明显。S7-1200的模拟量模块里还有数字滤波功能量程内的采样值可以做平均滤波。我一般把滤波等级设成中档过度滤波会让压力反馈变“钝”PID反应迟钝切泵瞬间容易压力偏大。5.2 水压振荡、频繁启停的排查实录联调和运行阶段我整理了几次印象最深的现场故障排除过程水泵切到工频的瞬间压力猛掉。第一次遇到这个问题我还以为是PID响应不快把Kp调大了许多结果压力震荡更厉害。后来才反应过来变频泵切工频的几秒钟内变频器停止输出而这个泵刚切换时是依靠电网惯性慢慢减速的在此期间管网压力失去调节能力自然往下掉。解决方案是切换前把变频泵频率拉满保证切换瞬间管网压力尽可能接近设定值同时工频泵吸合后延时缩短让变频器尽快带上一台泵追压。调整后压力跌落从0.08MPa缩小到0.02MPa以内用户的体感几乎察觉不到。低水位保护误动作导致系统频繁启停。水池水位明明充足液位开关却频繁触发。后来查出来是液位开关安装位置距离进水管太近进水时水流波动导致浮球抖动。排查时把报警延时从2秒提高到10秒同时把低水位检测点下移问题解决。这个案例告诉我们报警信号加上延时处理能滤掉大量瞬时干扰。三号泵工频接触器吸合后变频器立即报过流。检查发现三号泵的工频接触器主触头有一条接线端子松动导致电机单相运行启动电流偏大。紧固端子后故障消失。这种问题靠程序排查不出来必须现场用钳形电流表逐相测电流三相电流明显不平衡时就要怀疑接触器触点和接线。5.3 泵切换过程中的压力波动抑制关于泵切换时压力波动这应该是所有供水项目最核心的痛点。我总结了几个经过验证有效的技巧第一切换时序中工频泵启动前先把变频泵频率提到50Hz让管网压力处于“预加压”状态弥补切换瞬间的真空期。第二变频器带新泵启动时起始频率不要从0Hz开始直接从25Hz起调这样压力建立更快。第三如果现场条件允许可以在管网出水总管上加装一个小容量的气压罐切换瞬间由气压罐补偿几十升水量压力波动会大幅减小。第四PID参数在切泵完成后的一段时间内可以临时调高比例增益让压力快速收敛几秒后再恢复原值。这个方法用编程实现效果也不错。6. 从项目落地谈几点真实体会做恒压供水项目最怕的不是程序写不出来而是写完觉得逻辑没问题一上现场就各种不对劲。很多问题根本不在程序而在你对现场的认知。干这行越久越明白一套好的供水系统设计考验的是对管网特性的理解。管网弹性、水锤效应、阀门响应速度、泵的选型匹配度这些因素直接影响你的控制策略。程序只是把物理世界的规律用逻辑表达出来而已。同样一套程序放在一个管网短、用水稳定的场合运行无比顺畅放到高楼层长管道可能天天报警。遇到这种情况别急着改程序先回头看看机械和管路侧有没有可以优化的空间。关于PID参数整定我再多说一句永远不要在客户现场一上来就调用自动整定功能。S7-1200的PID_Compact带自动整定功能听起来很智能但在供水这种大惯性、强扰动的系统里自动整定跑出来的参数经常过于激进现场压力震荡得厉害。我建议手动整定为主自动整定只作为参考最终参数必须结合观察曲线微调。另外程序里务必做好“手动模式”的支持。现场调试时手动模式的作用远超你想象。接线检查、单泵测试、排除程序故障都需要手动模式兜底。很多新手程序只写了自动逻辑手动模式调试时泵都启不了只能干瞪眼改程序现场效率极低。最后分享一个小技巧项目交付时用S7-1200的存储卡把程序、组态和触摸屏工程备份一份交给甲方同时在PLC里设置好密码保护。但密码一定要写在纸质的交付文档里别只存在自己脑子里。很多项目运行两三年后甲方喊你去改一个液位报警阈值结果你密码早忘了还得远程帮人家恢复出厂再重新下载程序白白折腾一晚上。这大概就是工控行业的真实日常。