
1. 先搞清楚这套系统要解决什么问题1.1 恒压供水的本质恒压供水不是什么新鲜概念但真正在项目里落地过的人都知道它比想象中要麻烦得多。说白了就是要让管网出口压力恒定不管用水量怎么变化压力波动都控制在一个可接受范围内。用水量小的时候水泵降速运行用水量大的时候水泵提速甚至多台泵同时投入。整个过程要平滑、可靠还不能出现频繁启停把接触器继电器打坏的情况。这套系统的核心价值在于节能和稳定。传统供水靠高位水箱或定速泵加阀门调节水泵全速运转再靠阀门憋压能量浪费非常大。变频调速是把电机转速直接降下来根据相似定律泵的轴功率和转速的三次方成正比转速降到80%功率理论上只剩大约一半这个账一算就清楚长期跑下来电费差异巨大。另一个价值是用水体验直接管网供水时压力忽高忽低洗澡水忽冷忽热高层用户更痛苦恒压之后整条管网的用水感受会好很多。这次项目选型是西门子S7-200 Smart作为主控配合变频器驱动水泵压力变送器实时采集管网压力PID调节闭环控制再叠加多台电机的自动投切逻辑最后配一个触摸屏HMI做监控和参数设置。S7-200 Smart属于小型PLC里性价比非常高的一款自带以太网口和RS485口内置PID向导做两三台泵的恒压供水完全够用而且编程软件STEP 7-MicroWIN SMART免费不需要授权狗这对预算有限的场合是非常现实的优势。1.2 适合谁来参考这篇文章适合正在做小型供水项目、污水处理、循环水系统改造的工程师也适合刚接触S7-200 Smart想找个完整案例学习的电气自动化学生。我下面写的内容会尽量把硬件选型、IO分配、PID整定、投切逻辑、变频器通讯、HMI组态这些环节全部串起来。一台泵的系统不复杂真正的坑在于多泵投切和PID配合之间的逻辑关系这块是本项目的重点。2. 系统硬件选型与整体架构2.1 主控、变频器、压力采集怎么搭先交代一下系统规模。这套系统是典型的两用一备三台泵方案每台泵功率11kW一个变频器通过接触器切换让变频器可以驱动任意一台泵。这种方案的好处是省钱一台变频器比三台便宜太多缺点是切换逻辑要处理得足够仔细否则容易出现机械互锁不可靠导致的短路事故。PLC用的就是标题里的S7-200 Smart具体型号选择要根据IO点数和通讯需求来。我这次选的是SR40CPU自带24路数字量输入和16路继电器输出加上一个EM AM06模拟量扩展模块提供4路AI和2路AO。模拟量是用来接压力变送器的4-20mA信号和输出给定频率用的0-10V信号不过最后我给频率给定改成了RS485通讯的方式模拟量输出口空着备用这个后面细说。压力变送器选的是扩散硅型量程0-1.6MPa输出4-20mA两线制。选量程的时候有个原则正常工作压力最好落在量程的50%-80%区间这样既有精度又有余量。比如系统设定压力0.5MPa选0-1.0MPa更合适选0-1.6MPa也是能用的但如果选了0-0.6MPa停泵的时候压力可能超过量程上限变送器容易损坏。HMI选的是Smart Line 7寸触摸屏通过以太网和PLC连接。Smart Line屏直接和S7-200 Smart配套底层驱动是嵌好的不用像威纶通那样还得装驱动配置起来非常省事画面反应速度也不错。如果你的预算紧张用国产屏也没问题但参数设置和工程量会比Smart Line多一些这个取决于你愿不愿意折腾。2.2 电气回路与IO分配电气回路是整个系统安全运行的基础。主回路其实就是常规的电气控制图QF断路器进线经过交流接触器和热继电器到电机变频器输出U/V/W直接驱动当前投入的那台泵。每台泵有三个接触器变频运行接触器KM1和工频运行接触器KM2两个接触器之间必须做电气互锁和机械互锁。为什么要有这两个接触器因为正常运行时由变频器驱动但如果变频器故障了可以通过接触器切换让泵直接工频运行保证供水不间断。这是供水系统的冗余思想属于基础但必须有的功能。这里必须强调一下互锁的严重性。如果在KM1吸合的同时KM2误动作那就相当于变频器输出端直接和工频电源短接烧变频器只需一瞬间柜体内部会冒浓烟。所以除了在PLC程序里加互锁还要在接触器线圈回路里串对方的常闭触点做硬线互锁甚至触点全部选2开2闭的型号。这个动作不能省程序锁是软件保护硬件互锁才是最后一道防线。IO分配我列一个表出来方便参考输入点功能输出点功能I0.0手动/自动切换Q0.01号泵变频接触器I0.1启动按钮Q0.12号泵变频接触器I0.2停止按钮Q0.23号泵变频接触器I0.3故障复位Q0.31号泵工频接触器I0.41号泵变频运行反馈Q0.42号泵工频接触器I0.52号泵变频运行反馈Q0.53号泵工频接触器I0.63号泵变频运行反馈Q0.6电铃报警I0.7变频器故障信号Q0.7运行指示灯I1.0缺水信号--反馈信号是从接触器辅助触点引的目的是让程序确认接触器真的吸合了。这个点和很多初学者想的不一样很多人觉得输出点给了就行但实际上接触器万一卡死没吸合或者触点粘连没断开程序一无所知后续切换就会出现两台泵同时接触的风险。我后来在程序里加了输出反馈校验逻辑发出吸合指令后延时500ms检测反馈信号如果没有反馈就报故障并断开所有输出。这个功能在关键柜体里几乎是标配。3. 核心控制逻辑PID调节与电机自动投切3.1 PID在恒压供水里到底怎么用PID调节是恒压供水的大脑。它做的事情很简单不断比较设定压力和目标压力根据偏差计算出一个输出值用这个输出值去控制变频器的频率频率变了水泵转速变了压力跟着变然后又回头影响压力变送器的采样值形成一个闭环。S7-200 Smart的PID功能在软件里是以向导方式配置的它会生成一个名为PID0_INT的子程序调用一次就执行一次周期计算这一点比S7-200经典版方便很多。PID参数整定是最考验经验的环节。我先给一个经验范围供水系统因为管网容积大、水锤效应等原因纯滞后时间比较长所以Kp不宜太大通常在0.5-2.5之间Ti在3-10秒之间Td大多数情况下设为0。你没看错供水系统我基本不用微分因为压力信号本身经过管道传输后噪声不小加上微分会放大噪声严重时会让变频器输出频率剧烈抖动。很多人拿到PID就习惯性三段都设结果压力波动反而变大这就是没用理解供水系统的特性。整定步骤我也顺手说一下。先把PID输出上限限制在50Hz比例增益从1.0开始积分时间设5秒微分设0。跑起来看压力曲线如果压力在设定值附近震荡但幅度不大说明Kp偏大往小调如果从低到高爬得很慢到了设定值还停不下来冲出去一大截再回来说明积分太慢或者比例太小适当增大Kp或减小Ti。每次只改一个参数改完观察15分钟不要心急。压力曲线怎么看Smart Line屏上画趋势图或者用电脑在线监控PID输出和过程变量从波形就能看出系统处于欠阻尼还是过阻尼。采样时间的选择也有讲究。S7-200 Smart的PID向导会让你填循环周期我推荐扫掠时间Sample Time设在0.5-1.0秒。太短了比如0.1秒程序频繁计算但阀门和泵的响应根本跟不上白白消耗CPU太长了比如5秒压力波动时就来不及调整系统响应迟钝。这个时间是基于管网容积、泵启动延迟、传感器响应速度综合出来的经验值定0.5秒是很稳的起始值。3.2 自动投切电机逻辑到底怎么编排单台泵变频运行能覆盖的流量范围有限。当用水量大到变频泵跑到50Hz仍然压力不够时就需要第二台泵投入运行这就是自动投切电机逻辑要解决的问题。这套逻辑如果只拿西门子200PLC手工写状态转换代码量不大但边界情况多我建议用S7-GRAPH或者自己画个状态机图先梳理逻辑再写梯形图。这里给出我调试后最终稳定的投切策略增泵条件PID输出持续大于98%且时间超过30秒管网压力低于设定值0.05MPa以上这时认为单泵能力不足投入第二台泵。减泵条件PID输出持续低于35%且时间超过60秒管网压力高于设定值0.05MPa以上这时认为单泵都能干完活撤下一台泵。投切顺序按累计运行时间排序优先投入累计运行时间最短的泵优先切除累计运行时间最长的泵这样三台泵磨损均匀。这个逻辑在PLC里写起来不复杂用比较指令加循环就能实现。切换瞬态处理新泵启动时变频器要先以最低频率启动然后跳回PID自动控制。不能让变频器直接跳到当前目标频率因为电机从零速直接大频率启动会有很大的启动电流而且水管网会受到水锤冲击。这里涉及一个非常重要但很多人忽略的问题PID输出信号和泵组状态之间的配合。假设当前PID输出值是72%相当于36Hz这时用户用水量突然变小PID开始下降输出但2号泵仍然是工频运行。如果程序没做处理2号泵工频满速运转、1号泵变频低速调节整个系统的压力会急剧上升。所以切泵逻辑必须和PID输出联动当有泵处于工频状态时变频泵的PID输出要能被强行限制在一个较低的水平防止过度补偿。我用的是PID输出上限动态调整法工频泵投入数量越多变频泵的PID输出上限越小比如一台工频泵投入时PID输出上限压到80%两台工频泵投入时压到65%。这样不管怎么切换压力都不会失控。这个技巧是我反复调试总结经验出来的最初版本没有做限制结果每次增泵后系统都出现一次高压跳变靠增泵延时和PID积分饱和调节压住了。现在把限制条件写清楚系统任何时候切换都是平稳过渡。3.3 RS485通讯控制变频器的关键点变频器控制方式有模拟量端子和通讯两种。本项目用的是RS485通讯方式原因是多方面的一是模拟量给定受干扰影响大信号线走长了压降明显还容易串入变频器自身的高频干扰二是RS485通讯可以读取变频器的运行电流、频率、故障代码等多个状态量这对HMI显示和故障诊断非常重要三是调试改参数方便不用改线改电位器。S7-200 Smart的CPU本体自带一个RS485口需要设置对应串口端口为Modbus RTU模式。先定义通讯参数波特率我选9600bps数据位8停止位1无校验。这个组合最稳妥虽然可以用19200bps但现场变频器旁边的电磁环境复杂9600bps的错误率更低。每次通讯超时时间设为100ms重试次数2次。PLC作为Modbus RTU主站变频器作为从站站号建议从1开始编。使用西门子库函数MBUS_CTRL和MBUS_MSG实现每个扫描周期调用一次MBUS_CTRL初始化用SM0.0常ON完成位和错误位都做监控。MBUS_MSG用来读写变频器的保持寄存器写频率控制字和给定频率读运行频率、输出电流和故障代码。需要注意MBUS_MSG同一个时刻只能有一个激活我用一个轮询指针来控制每次通讯结束后自动切换到下一个读写任务。变频器那边需要设置的参数是控制源选择为MODBUS通讯频率源选择为MODBUS通讯通讯波特率、数据格式与PLC端保持一致站号和PLC端设置一致。每一台变频器的站号要不同这在初始设置时就要规划好。接线用屏蔽双绞线屏蔽层单端接地A口接B口B口接A口不能搞错。如果通讯距离超过50米终端电阻要接上这个是好习惯。说实话RS485通讯看是简单坑都在现场。最大的坑是变频器没做正确的信号地隔离导致共模电压太大通讯时好时坏。我在这个项目里用了一对RS485信号隔离器成本不高但稳定性提升非常明显。还有一次调试时发现一启动变频器PLC就收不到数据查了半天是通讯线从变频器出线孔经过的路径贴着输出动力线干扰太严重。把通讯线改道远离输出线20厘米以上问题就消失了。经验就是通讯线和动力线一定要分槽走线实在分不开要垂直交叉不要平行走线。4. 实操过程从程序到界面的完整落地4.1 程序块划分与实现整个PLC程序我按功能分成几个独立子程序这样调试和后期修改都方便。主程序OB1里只做一件事按顺序调用各功能子程序。以下是程序骨架的伪代码逻辑子程序功能调用条件INIT初始化参数、通讯口配置SM0.0首次扫描AI_RD读取压力变送器4-20mA并标定SM0.0每个周期PID_CAL执行PID0_INT向导程序SM0.0每个周期PUMP_SEL判断泵组增投、切除状态自动模式有效MOTOR_SW控制各接触器吸合/断开自动模式有效或手动按钮MBUS_RWModbus读写变频器寄存器SM0.0轮询调度ALARM故障判断和报警输出SM0.0每个周期初始化子程序里除了设置系统参数还要记得把变频器运行状态字清零确保上电时不会突然启动。AI_RD子程序里S7-200 Smart模拟量通道的原始值是0到27648对应4-20mA转换成工程量就按线性比例计算压力值和PID过程变量的单位需要统一这个细节容易出错。水泵切换子程序PUMP_SEL是重点。我在这里用了一个先入先出的队列思想三台泵的状态用一个整数表示每次投切都更新状态字。队列核心是记录每台泵的累计运行时间这个时间用定时中断累加保存到扩展数据块里断电保持。投切时要检查目标泵是否处于备用状态还要检查变频器当前是否在故障状态如果故障要自动切换到下一台。MOTOR_SW子程序里设置了一连串的接触器切换逻辑最关键的是延时和互锁。变频接触器从断开到吸合之间要有200ms的间隔工频接触器从断开到变频接触器吸合之间要有1秒的间隔。这个延时确保电机完全停稳后再切换避免电机在旋转状态下被工频电源硬拉造成过流跳闸。逻辑上在接触器置位指令之前先强制复位所有相关接触器输出再加上800ms的停机等待然后才允许置位。这样即使在程序跳变时也不会出现两个接触器同时吸合的情况。I/O分配和传感器信号处理上还有个小细节压力变送器的4-20mA信号进入模拟量模块后要在程序里做一些滤波。我用了移动均值滤波每500ms采样一次取5次的平均值参与PID计算。纯PID计算不能直接吃原始信号因为供水时管道内的微小湍流会让压力信号抖动抖动传到PID会产生不必要的频率波动均值滤波后信号干净很多PID输出的稳定性也好了。4.2 变频器参数设置不同品牌的变频器参数命名不同但思路一致。这篇项目用了几款常见变频器做了兼容测试包括汇川MD系列和ABB ACS510系列。先说汇川MD200这是很多小项目里常见的变频器价格适中参数简单。在MD200里需要把调速方式设为面板电位器失效、频率由外部给定源决定比如标准Modbus通讯给定对应地址一般是1000H控制字在2000H附近写频率时按0.01Hz为单位比如要给定30.00Hz需要写入3000这个数值。变频器的额定参数设好电机参数设好这些会让矢量控制底层的模型尽可能准确。ABB ACS510也是供水系统里很常见的变频器内置了PID宏甚至可以不用PLC直接干恒压。但用PLC做PID时要把它设为外部控制和外部给定模式。ABB的参数比汇川要繁琐尤其通讯参数组需要一组一组翻。关键参数是串口配置波特率、校验方式、从站地址还有控制盘和通讯控制的优先级。ACS510还有一个优点自带内部PI控制器如果哪天PLC宕机了可以把PI切换给变频器备份运行系统还能继续恒压供水一段时间这在可靠性要求高的场景里非常实用。在这里我建议一个参数设置的顺序步骤电机铭牌参数额定电压、额定电流、额定频率、额定转速一一对应输入不能抄错。变频器控制源设置为端子控制或通讯控制根据你的系统来决定。本项目选择通讯控制。变频器频率源设置为通讯给定。这个是决定速度的关键。通讯协议参数波特率、校验、从站号、数据格式与PLC端一致。加减速时间供水泵建议8-15秒太长压力建立太慢太短会喘振。电流保护值按电机额定电流的1.1倍整定不能按变频器额定电流整定否则电机过载了变频器毫无反应。最低频率和最高频率供水泵最低频率设20Hz左右太低泵的扬程不够出水很少电机还可能因为散热不良而发热。4.3 HMI组态友好界面Smart Line触摸屏用WinCC flexible组态也可以用TIA Portal看你习惯。我做界面遵循一个原则操作员第一眼就能看到系统状态三秒钟内能完成启停操作。首页画面放一个系统总览显示当前压力、设定压力、PID输出百分比、各泵运行状态和当前频率在界面上用颜色区分变频运行和工频运行。比如变频运行显示绿色闪烁工频运行显示绿色常亮停机状态显示灰色。参数设置页面放三个区块PID参数、投切参数、通讯参数。PID参数区放Kp、Ti、Td和设定压力这些值用I/O域关联PLC的VW变量。投切参数区放增泵延时、减泵延时、投切压力阈值。操作员一般只允许调整设定压力其他参数只读要通过管理员权限才能修改。权限等级在Smart Line的组态里可以直接设置用户管理功能给不同用户分配不同权限这个功能看起来简单但现场很好用防止误操作导致工艺参数被改乱。故障页面要用表格列出所有可能的报警事件故障发生时间和故障内容都要在上位机里同步记录方便事后分析。报警变量从PLC的M区读取HMI组态时把报警变量关联到报警控件上。还要做一个数据趋势页面把压力历史趋势和PID输出趋势实时画出来对调试PID参数非常有用。我在前期整定PID时基本全程盯这个趋势画面效果比拿万用表测信号直观一百倍。组态过程中有一个比较隐蔽的坑Smart Line屏默认的通信超时时间比较短如果PLC因为PID计算量大导致扫描周期变长屏幕偶尔会弹出通信中断的提示。解决办法是把屏幕的通信超时时间从默认500ms放宽到2000ms同时确保PLC扫描周期不要超过100ms这个在做趋势图数据采集时要特别注意否则数据会丢帧。5. 常见问题与排查技巧实录5.1 压力波动大、系统振荡这是最常见的问题症状是压力设定值周围反复震荡变频器频率上下乱跳。排查顺序按优先级来先看压力变送器信号是否稳定用万用表串在信号回路里或直接看PLC模拟量通道的原始值。如果原始值每秒都在跳动那就是信号问题检查屏蔽层接地、变送器供电电压、信号回路是否有接触不良。如果信号稳定但PID输出乱跳那就是PID参数问题按前面说的顺序调整Kp和Ti。还有一个容易忽略的原因是PID输出的正反作用设反了。S7-200 Smart向导里有一项选择正作用还是反作用默认是正作用也就是PV变大时输出变大这对冷却系统可能是对的但对恒压供水恰恰是反的。供水系统压力高了应该降低输出频率是反作用。如果这里设反了程序跑起来会出现压力越高频率越高最终系统疯狂振荡甚至停机。这个问题我第一次做时遇到过当时排查半小时才意识到是向导里默认设置没改。检查这个选项只需要看一点新建向导时有一个页面让你选控制方式选反作用时系统会提示输出与误差反向认真看说明就不会踩坑。系统振荡的第三个常见原因是增泵逻辑和PID冲突。比如单泵PID输出在95%触发了增泵条件第二台泵工频投入后压力快速上升但PID输出还保持在一个较高水平于是压力继续冲高直到超调。我在项目里做过输出上限联动之后这个问题就基本消失了。增泵后延时一段时间再让PID重新接管比如2秒这段时间内保持当前频率不变让管网压力先稳定一下PID恢复后不会因为巨大偏差产生过大输出。5.2 自动投切次数过于频繁如果用户用水量正好卡在单泵和双泵的分界点上泵组的投切就会像开关一样反复切换。我在某些项目里就见过一辆小时切十几次的这对接触器、电机和变频器都是不小的损耗。解决办法不是改压力阈值而是引入滞回区间。增泵条件是压力低于0.05MPa且持续30秒减泵条件是压力高于0.05MPa且持续60秒这个0.05MPa的偏差就是滞回区间。另一个管用的办法是给切换条件加启动次数上限限制一个小时内最多切换4次超过后即使条件满足也要等到下个周期。这个策略运行时虽然会损失一点压力精度但大幅提高了设备寿命。5.3 通讯时断时续或完全不通通讯问题排查要按物理层、链路层、应用层逐一排查。物理层检查接线是否正确、屏蔽层是否接好、A和B是否接反、终端电阻是否匹配、共模电压是否过高。用万用表量一下A-B之间的电压正常情况下应该大于0.2V且稳定。链路层检查PLC和变频器的波特率、数据位、停止位、校验方式是否完全一致。应用层检查Modbus地址和功能码是否对应写寄存器时数据格式是否正确。现场最常见的故障就是变频器的数据格式和PLC端的库函数期望格式不一致比如8-E-1和8-N-1的区别这种问题必须逐项核对参数表。我调试时习惯先在电脑上用一个串口调试助手直接发Modbus报文给变频器先验证变频器能响应报文再排查PLC程序端的逻辑。这样能快速定位故障在前端还是后端。还有一个从项目上学到的小技巧在MBUS_MSG的错误位里面加上一个计数累加报3次以上的错误就触发通讯报警并自动切换为模拟量备用给定方式这样即使通讯彻底断了系统也能继续运行只是精度会下降。备用方案这个东西平时用不上但真的出问题时就是救命稻草。5.4 缺水保护与空转水泵空转是烧毁机械密封的主要元凶之一。如果在水位不足时变频器仍然输出大扭矩泵腔里没有水机械密封干磨发热几十分钟就可能报废。所以系统必须加缺水保护逻辑。我的方案是加一个液位开关放在吸水池低液位位置信号进PLC的I1.0。当液位低信号持续5秒以上程序自动把变频器频率降为零同时关闭所有水泵面板上亮起缺水平报。当液位恢复后系统要手动复位才能重新启动不能自动恢复这是防止液位波动时反复启停。这个手动复位在安全性上是必要的我见过一些项目加了自动恢复结果液位还在临界点附近反复跳变泵频繁启停最后坏得很惨。6. 几个扎心的调试心得最后分享几个我在这类项目里踩过的坑都是花钱买来的教训。第一变频器输出侧的接触器不能随便用来启停电机。很多老师傅习惯了在变频器和电机之间串接触器直接控制启停这在正常运行时没问题但如果接触器在变频器有输出时吸合或断开电流冲击会导致变频器过流跳闸甚至IGBT模块损坏。正确做法是变频器已经输出但电机还没接入时先让变频器停止输出再切换接触器切换完成后再启动变频器。在PLC程序里要严格实现这个时序不能靠操作员手动去按。第二电机电缆超过50米时变频器输出侧必须加输出电抗器。长电缆的分布电容会产生较大的充电电流反射波会造成电压尖峰电机绝缘寿命会明显缩短。我有个项目电机电缆只有80米没加电抗器运行半年后绕组匝间短路排查的时候变频器驱动板也没幸免。后来加上电抗器问题再没出现。三相输出线尽量用对称屏蔽电缆屏蔽层在变频器端接地这个细节比想象中重要。第三PID调参时要有人在现场看着水泵和管道。不要只看触摸屏上的数据。我有一次在办公室远程调参把Ti从8秒调到了2秒屏幕上看压力曲线似乎很完美但现场管道在剧烈震动水锤冲击声好远都能听到。调参不能只看数字系统的物理状态才是最真实的反馈。如果现场管道出现高频振动声说明参数过激进必须立刻回调。第四设备投产前的联动测试不能省。很多项目出问题都是因为现场从没做过完整的模拟测试。至少要做一遍手动启停每台泵、自动状态下模拟缺水、压力变送器断线、变频器故障、主备切换这些故障场景全部测试通过之后才能交工。断线测试尤其重要压力变送器如果电流信号线断了模拟量通道会显示0mA程序如果不做断线判断会认为压力是0PID就会疯狂输出最大频率泵全速运转后果非常严重。所以程序里必须有信号品质判断比如实测压力低于0.05MPa时先不启动PID而是报传感器异常。这个逻辑在投运前一定要模拟测试到位。如果有什么想了解的细节比如你正在调的变频器具体型号或者现场的接线方式评论区留下信息我看到会回。