1. 系统方案选型与整体设计思路做恒压供水这套系统我最早接触的项目用的还是老式继电控制加变频器面板操作压力波动大、换泵麻烦不说半夜管网用水量小的时候变频器还容易因为低频运行发热。后来换成基于通信控制的方案才算真正把问题解决干净。这篇就以一套基于西门子S7-200 SMART PLC、通过RS485总线控制变频器、实现一拖二恒压供水的程序样例为主线把从硬件选型到程序调试的完整思路走一遍。先说清楚这套系统是干什么的。一拖二意思是一台变频器通过接触器切换轮流驱动两台水泵电机。恒压供水就是通过压力传感器实时检测管网压力PLC 内部跑PID运算把结果通过RS485通讯下发给变频器变频器调整输出频率让水泵转速跟着变最终让管网压力稳定在设定值上。相比每台泵配一台变频器的方案一拖二的最大优势是省钱——变频器只有一台另外一台泵作为备用或轮换使用投资直接砍掉将近一半。对于住宅小区、工厂厂区、小型自来水增压站这类场合性价比非常突出。通讯方案为什么选RS485而不是模拟量控制这个问题我反复对比过。传统方式用模拟量端子控制变频器0-10V或4-20mA给定频率好处是简单直接但也有几个让人头疼的问题一是模拟量信号长距离传输容易受干扰尤其在变频器旁边电缆的屏蔽层稍微接地不规范频率给定就开始飘压力跟着来回晃二是只能单向给频率变频器运行电流、母线电压、故障代码这些状态信息你拿不到出了问题全靠人跑到柜子跟前看面板非常被动。用RS485通讯走Modbus RTU协议一根双绞线就能同时完成下行控制和上行状态采集抗干扰能力强、传输距离远理论上一千多米没问题而且接线极其省事——两根线并联挂上去就行不用像模拟量那样考虑阻抗匹配和隔离问题。这套系统的硬核组成包括以下几个部分PLC 控制器西门子S7-200 SMART系列具体型号看点数需求一般用CPU SR20或SR30就够了集成的RS485口直接拿来当Modbus主站用不需要额外扩展通讯模块。变频器支持标准Modbus RTU协议的通用型变频器例如市面上常见的国产变频器或者国际品牌变频器都可以关键是通讯参数要可配置、寄存器地址要明确。压力变送器输出4-20mA或0-10V的管网压力传感器量程根据实际扬程选比如0-1.6MPa、0-2.5MPa。接触器组两台电机各配一个主接触器加互锁逻辑确保任何时候只有一台泵的接触器吸合。触摸屏可选配我用的是西门子SMART LINE系列用来设定压力、显示运行参数、查看报警和历史曲线现场调设备时特别好用。断路器、热继电器、中间继电器、开关电源等标准电气元件。一拖二的控制逻辑并不是简单的“一台坏了一台顶上”而是要处理好轮换策略。我常用的策略有两种一种是时间轮换比如设定每24小时轮换一次让两台泵的运行时间累计差不多另一种是故障切换当前运行泵出现故障时立刻切换到备用泵启动。两种策略可以同时生效时间到了优先轮换运行中突然报故障就强制切换并且把故障信息记录下来方便后续排查。选择这套方案的整体考虑归根结底就是三个字稳、省、好维护。通讯控制取消了模拟量信号的漂移烦恼一拖二结构省了一台变频器的钱所有运行参数和故障信息都能在触摸屏上看到维护人员不需要懂编程也能操作。2. 通讯组态与变频器寄存器映射2.1 硬件接线和通讯端口规划S7-200 SMART PLC 本体上集成了一个RS485通讯口某些型号有两个在系统块里把这个口分配给Modbus RTU协议它就能作为主站轮询变频器。接线时注意S7-200 SMART 的RS485口是A/B两线制A接变频器通讯端子的正极一般是D或AB接负极D-或B-两头不要接反。电缆推荐用屏蔽双绞线屏蔽层单端接地避免形成地环路干扰。通讯距离如果超过几百米或者现场变频器数量多、干扰严重建议在PLC的RS485口侧加一个隔离中继器。不要为了省这点钱去赌现场的电磁环境变频器运行时的干扰是实打实的尤其是大功率变频器通讯偶发超时排查起来比加隔离器痛苦得多。2.2 Modbus RTU 通讯参数设置S7-200 SMART 的Modbus主站库指令支持RTU模式。通讯参数需要在PLC系统块和变频器参数中保持一致我这里列一个实际项目中最常用的配置参数项PLC侧设置变频器侧设置波特率96009600数据位88校验方式偶校验偶校验停止位11从站地址1目标变频器地址1协议模式Modbus RTU主站Modbus RTU从站波特率我一般不会设得太高。9600bps够用了一条指令只有几十个字节每次读写也就几十毫秒完成压力控制的实时性完全不受影响。设19200甚至更高反而容易在干扰较大的现场出现通讯错误。2.3 变频器寄存器地址映射表Modbus RTU协议中变频器的控制数据通过保持寄存器4xxxx区域读写。我用的变频器常见的寄存器分配如下实际项目请务必对照你手里变频器手册确认不同品牌寄存器地址差异非常大这是一个容易踩坑的地方寄存器地址功能码含义读写属性数据类型40001运行控制字启动/停止/正转/反转读写16位整数40002频率设定值单位0.01Hz读写16位整数40003输出频率单位0.01Hz只读16位整数40004输出电流单位0.01A只读16位整数40005母线电压单位0.1V只读16位整数40006故障代码只读16位整数40010变频器运行状态位只读16位整数运行控制字每一位的含义一般是这样bit0代表启动/停止bit1代表正转/反转bit2代表点动。写入时把需要的位组合成整数再写进40001。比如正常启动正转运行就写1停止就写0。频率设定值的格式大多定义为单位0.01Hz比如想设30Hz写入值是3000想设45.5Hz写入值是4550。实际值除以100就是实际频率。2.4 通讯故障临界值设定通讯指令发送之后要设定一个合理的超时时间和重试次数。我习惯把单次通讯超时设为200ms连续3次通讯失败就判定为“变频器通讯故障”然后执行故障停机并报警。这样设置的好处是单次瞬时干扰不会立刻触发停机给系统留出自动恢复的余地如果变频器真的掉线或者断电3次重试的大约600ms时间内就能捕捉到异常响应足够快。同时PLC每200ms轮询一次变频器的运行状态和输出电流这个频率既能保证监视的实时性又不会让通讯总线负担过重。3. 恒压PID控制与一拖二程序逻辑详解3.1 PID控制在S7-200 SMART中的实现恒压供水的核心控制闭环是压力传感器读到的管网压力作为过程变量PV操作人员在触摸屏上设定的目标压力作为给定值SP两者偏差送入PID控制器PID输出的控制量对应变频器的频率给定值。S7-200 SMART自带PID指令配合PID向导使用在STEP 7-MicroWIN SMART软件里可以比较方便地完成组态。需要注意一个关键点PID指令的输入输出都经过归一化处理。压力传感器的量程比如0-1.6MPa对应4-20mA电流PLC模拟量模块把4-20mA转换成0-27648的整数。在程序中要先把AIW原始值标定成0.0-1.0之间的工程量百分比归一化PID才能正确运算。同样PID输出也归一化为0.0-1.0需要再映射到实际的频率给定范围。我的做法是这样压力反馈归一化PV 实际压力值 / 传感器量程上限。比如实际压力0.8MPa量程1.6MPaPV 0.5。PID输出映射频率输出0.0-1.0映射到0-50Hz。PID输出0.5就是25Hz。3.2 PID参数整定心得经常有人问PID参数怎么调才能又快又稳。这个没有万能公式但有一些非常实用的经验法则可以少走弯路。我调试这套系统的典型做法先手动模式给变频器一个固定频率比如30Hz让系统稳定运行此时压力稳定在某个值。观察压力变化趋势初步估算系统的时间常数。把积分时间设大一些比如先设为500秒比例增益从0.5开始逐渐加大观察压力曲线。比例太小时压力响应慢、静差大比例太大会出现持续震荡。找到刚好出现轻微震荡的比例值再退回20%左右作为实际使用值。比例基本确定后慢慢减小积分时间消除静差。积水管路系统一般积分时间100-300秒比较合适。微分项在恒压供水这种滞后不太明显的系统里基本可以不用如果现场压力波动频繁稍微加一点点微分有助于抑制超调但作用非常有限而且容易放大高频干扰我的建议是默认关闭。最直接判断PID效果好坏的指标管网用水量突变时比如有人突然打开多个水龙头压力能否在5-15秒内恢复到设定值附近恢复过程中不能有明显的持续震荡。3.3 一拖二轮换控制逻辑一拖二的轮换逻辑是整个程序里最考验思路的部分。我见过有同事用简单的“运行泵故障才切换到备用泵”这种逻辑太粗糙长此以往两台泵运行时间差距越拉越大容易导致一台泵过度磨损而另一台几乎没动过。我的程序里这样设计轮换每台泵累计运行时间通过PLC内部定时器累加存储在VD区保持寄存器中断电不丢失。系统压力稳定后压力与设定值的偏差小于某个阈值持续30秒判断当前运行泵的运行时间是否达到轮换设定值比如24小时或者48小时触摸屏可设。若达到轮换时间则执行轮换先停当前泵断开对应接触器等待5秒确保接触器完全释放再吸合另一台泵的接触器延时2秒后启动变频器PID自动跟踪。若当前运行的泵发生故障变频器故障、热继电器动作等立即执行故障切换停止变频器断开故障泵接触器启动备用泵同时产生故障报警记录到触摸屏。新增一个细节当备用泵投入后如果故障现场的故障原因还没有排除不要自动切回原泵而是保持备用泵运行直到人工确认故障解除再恢复自动轮换。这是从现场事故中总结出来的教训——曾经有自动切回逻辑在故障未排除时反复交替启动两台泵把接触器都打坏了。加互锁是必须的PLC输出控制一号泵接触器的Q点与控制二号泵接触器的Q点在梯形图中互相串联常闭触点在物理回路里两个接触器也要加电气互锁双保险防止两个接触器同时吸合。两泵同时启动轻则跳闸重则水锤损坏管道这条底线千万不能破。3.4 休眠与唤醒功能深夜用水量很小的时候压力传感器显示管网压力已经达到设定值但PID输出仍然降到最低频率比如20Hz运行时水泵还是在运转空转浪费电而且低频下电机散热条件差长时间运行容易烧电机。大多数恒压供水系统都需要休眠功能。我的实现逻辑是这样的当PID输出持续低于休眠频率阈值比如25Hz对应输出0.5且压力高于设定值时系统进入休眠状态——变频器停机水泵停止。休眠期间压力传感器继续监测管网压力当压力下降到比设定值低一定差值比如0.05MPa即再生压力系统自动唤醒变频器从设定的启动频率重新开始PID跟踪。唤醒偏差设置太大会导致频繁启停设置太小可能压力还没跌就再启动需要根据管网大小和用水波动范围反复调整。另外休眠前要确保管网内的储水容量足够支撑休眠期间的供水否则管网压力会跌得太快导致系统在一分钟内反复休眠唤醒这种“打嗝”现象对设备和管网都是折磨。4. 程序关键模块实现细节与实操记录4.1 初始化与通讯指令调用程序开头做初始化首次上电时设置变频器为远程通讯控制模式、禁止面板操作、设置加减速时间一般加速10-15秒、减速10秒避免水锤、设置最低和最高运行频率等。这些参数可以通过PLC用Modbus指令写进去也可以通过变频器面板预先设好我更推荐PLC上电写一次这样即使变频器被人误操作恢复出厂值只要PLC重新上电也会把参数拉回来。通讯指令使用S7-200 SMART的库函数MBUS_CTRL和MBUS_MSG。MBUS_CTRL放在SM0.0上每个扫描周期都调用用于初始化Modbus主站、监视通讯状态。MBUS_MSG用于触发单条读写请求一条指令完成后完成位Done置1或者超时才能发起下一条不能同时两条MBUS_MSG指令占用总线。我一般用定时器做一个20ms周期的脉冲串每次脉冲上升沿触发一条MBUS_MSG请求保证总线操作井然有序。工程实现的套路大概是这样的每200ms执行一次“读变频器状态”任务读取运行状态字、输出频率、输出电流、故障代码。每500ms执行一次“写变频器频率给定”任务把PID输出映射后的频率值写入40002。根据启停逻辑在需要改变运行/停止状态时执行“写运行控制字”任务。要注意的是PID输出的频率给定值在浮点转整数时要做四舍五入而不是直接截断不然频率给定会有0.01Hz级别的锯齿虽然影响不大但强迫症患者看着不舒服。4.2 压力信号滤波与断线保护压力传感器4-20mA信号经过模拟量模块读进AIW寄存器后原始值直接用于PID会导致反馈有高频噪声尤其在变频器附近压力曲线会毛刺很多。我的做法是在程序中做一个简单的移动平均滤波取最近10次采样值的平均值参与PID运算采样周期100ms相当于1秒的平均窗口。这样既过滤了噪音又不会产生明显的滞后。这里还要加一个非常关键的传感器断线保护。4-20mA信号如果线断了电流会降到0mAAIW读数直接掉到低限如果信号线短路AIW读数会冲高。这两种情况都要在程序里判断AIW原始值低于量程的10%或者高于量程的90%都当作传感器故障处理此时立即停泵并报警绝不能让系统检测到“压力为零”或“压力爆表”后还在PID闭环里运行——曾经有过传感器断线导致PID输出到最高频率管道压力迅速升高差点把管路接头崩开的事故想想都后怕。AIW原始值转换成工程量的公式压力值 AIW原始值 / 27648 × 传感器量程。这个公式在量程起点是0的情况下成立如果传感器的量程起点不是0比如0.5MPa到2.5MPa就需要先减去量程起点对应的数字量再做线性换算。4.3 触摸屏变量组态触摸屏界面一般包含主监控画面显示当前管网压力、目标压力、变频器频率、输出电流、当前运行泵编号、系统状态自动/手动/休眠/故障。参数设置画面目标压力设定、轮换时间设定、休眠阈值设定、PID参数设定比例、积分时间、传感器量程设定。报警画面显示历史故障记录故障代码、故障时刻、故障内容带确认复位功能。趋势曲线画面压力、频率的实时趋势和历史趋势曲线调试阶段非常有价值我调节PID参数基本靠看这个画面。触摸屏与PLC通讯用西门子的以太网方式一根网线直连或者走交换机都非常方便。组态时变量地址要和PLC程序里的V区或M区一一对应。注意PID向导生成的PID指令内部参数存储在分配给它的V区范围内程序里不要随意读写这些地址否则PID会突然不正常。4.4 上电自检与手动/自动切换程序上电后首先要完成以下自检逻辑全部通过才能进入自动运行状态PLC与触摸屏通讯正常压力传感器读数在合理范围内0到量程上限之间偏合理区域内变频器通讯正常MBUS_MSG读状态成功两台水泵的接触器都在断开状态无未复位的故障标志。面板上设置手动/自动转换开关。手动模式下操作人员可以直接通过触摸屏指定启动一号泵还是二号泵频率用面板手动给定PID不参与控制。自动模式下系统进入前述的PID闭环和一拖二自动轮换逻辑。这个切换逻辑我一般放在程序的独立循环中任何模式下都能响应转换开关的变化并做相应的停机/状态切换。5. 调试与现场问题排查实录5.1 通讯频繁超时之前在某工厂调试一套系统PLC与变频器通讯频繁超时FC95错误代码频繁出现。排查步骤先用示波器观察RS485总线上的波形发现信号毛刺明显并且有较大的共模噪声。怀疑是布线问题。拆开柜子检查发现通讯线跟变频器的输出动力线在同一个线槽里走了一长段这是大忌。变频器输出侧是强干扰源PWM调制的高频成分会直接耦合进通讯线。处理办法通讯线改为单独穿管走线远离动力线在PLC侧加装隔离器两端的终端电阻也按要求匹配好。折腾完再测试通讯稳定跑了一天一夜没有一次超时。5.2 水泵轮换时压力波动剧烈系统自动轮换时压力会掉下去一截再慢慢恢复最严重的时候压力从0.8MPa掉到0.35MPa用户体验非常差。分析原因轮换时先停泵再启动另一台泵中间有接触器切换时间这期间水泵不出水管网压力迅速下跌。解决办法是在逻辑上优化切换时序轮换前先确认管网压力处于较高水平高于设定值0.1MPa以上相当于提前存点水在管网里为切换期间的短暂断供提供缓冲。减小切换时间间隔。原来的5秒等待时间优化为2秒前提是接触器确实已经可靠释放这个需要实际测试。变频器频率在启动备用泵时不是从0Hz开始加速而是直接给一个起始频率比如35Hz让备用泵迅速建立流量和压力再交给PID收敛。类似“抢占”的加速思路实测下来压力跌落能控制在0.15MPa以内。5.3 休眠功能异常频繁启停有一段时间系统在夜间出现“打嗝”现象休眠后两三分钟又启动启动后一分钟又休眠一夜反复十几次。查了一圈发现是再生压力偏差设置太小了——当时设的是2%也就是0.016MPa左右管网稍有渗漏压力就会跌到这个范围触发启动。而且之前的休眠判断只看PID输出没有检查系统当前压力是否真的在一个稳定区间。调整策略再生压力从0.016MPa改到0.05MPa休眠进入条件增加延时确认PID输出连续低于休眠阈值5分钟才真正休眠。调整后一夜启停次数降到一两次效果明显。5.4 PID出口震荡频率来回摆动这台系统的压力反馈波形很妖PID输出在30Hz到45Hz之间来回反复一周之内竟然把变频器的IGBT模块烧了。解决思路先查是否因为采样频率和输出频率不匹配导致控制周期太短。我将PID运算周期从200ms改到500ms相当于让系统有足够时间响应泵转速变化压力才来得及反映到反馈上。再次整定PID参数比例增益从原来的2.0降到1.2积分时间从120秒增加到300秒。在PID输出的频率值上增加变化率限制每个扫描周期频率变化不超过0.05Hz。这样即使PID输出有瞬间跳变实际的频率给定也是平滑过渡不会刺激变频器剧烈波动。改变之后频率曲线像一条平缓的斜坡再也没有肉眼可见的震荡。经验总结就一句话恒压供水系统的PID参数“干了这么多年从来没见谁家是靠加大比例赢的多数还是柔和一点稳妥”。5.5 故障复位后系统不自动恢复有次其他工地的系统没人在现场变频器因为瞬时过流跳故障PLC捕捉到了并切换去启动备用泵备用泵运行正常管网压力没问题。但故障的变频器故障代码一直没被复位导致PLC每次上电自检时都认为“当前变频器故障”系统只能停在手动模式直到有人到场手动复位。后续在程序中增加了一个针对这类情况的自动复位策略切换到备用泵运行后每隔10分钟尝试写一次故障复位命令给原来那台变频器复位成功且能读到正常状态字后就把那台泵恢复为“可用”状态。这样即使人员不在现场系统也能在一定时间内自动恢复到完备的一拖二待用状态。当然这种自动复位只针对可恢复的瞬时故障比如过流、过压、通讯中断对于电机绝缘损坏这类严重故障自动复位反而是安全隐患这个逻辑里要做一个故障类型的判断可以复位的故障和不可复位的故障分类处理。6. 调试工具与参数速查调试这套系统时有一些实用工具和经验值非常关键整理成一个速查表现场直接用调试工具/方法作用备注Modbus调试助手先于PLC单独测试变频器通讯可以直接写入控制字确认寄存器地址正确示波器查看RS485总线的信号质量波形眼睛能看到的大量毛刺就要处理触摸屏趋势画面PID整定实时观察调参时同时看压力和频率曲线自制的测试电阻箱模拟压力传感器信号方便单独测试程序逻辑不用等真实管网压力变化记录型万用表长时间记录模拟量信号排查压力信号偶发跳变时使用再啰嗦一下参数速查参数建议值调试备注PID比例增益1.0-1.5以压力震荡临界值的80%为准PID积分时间200-400ms实际是200-400秒写错了更正一下补一句单位是秒PID微分时间0默认关闭控制周期300-500ms太长响应慢太短震荡休眠频率阈值25Hz根据需要调整唤醒偏差0.03-0.05MPa管网水容量大的可以设小点容量小设大点轮换间隔24-72小时依据水泵轴承寿命建议平均分配运行时间最后再分享一个我在实际调试中反复验证过的体会这套一拖二恒压供水系统硬件搭好之后真正考验人的是PID参数整定和轮换逻辑的细节优化。不要怕前期调参花时间调好了系统可以几年不闹情绪调不好三天两头跑现场维护费足够再买半套系统了。如果后续还想加功能可以考虑把两台泵都配上软启动器、增加水锤消除器选型计算、把无线远程监控通过4G模块把数据上传到云平台加进去整个系统会变得更完整、更省心。