
恒压供水系统听着不算高大上但它几乎把自动化控制里最核心的技术点都串起来了压力变送器的模拟量采集、PID闭环调节、变频器调速、PLC逻辑控制、触摸屏人机交互还有背后的通讯链路和故障保护。我做这个项目的时候选的是西门子全家桶——S7-1200 PLC做控制器G120XA变频器驱动水泵KTP1200触摸屏做监控界面博途TIA Portal统一开发。整套系统从需求确认到稳定运行花了两周多中间踩了不少坑也沉淀了很多通用经验。这篇实战笔记就按项目推进的顺序把架构设计、核心控制逻辑、通讯细节和调试记录一条条写清楚。做完这个项目你会发现恒压供水真的是一套非常好的练手项目能把西门子平台的完整开发路径走一遍无论是刚入门的电气工程师还是正在做类似供水/过程控制项目的同行都有参考价值。1. 恒压供水项目的需求梳理与西门子全家桶架构选型1.1 恒压供水的控制逻辑核心一个典型的闭环反馈系统恒压供水要解决的核心问题其实很简单不管用户用水量怎么变管网压力必须稳定在一个设定值附近。用水量大了就要多供水用水量小了就要少供水。如果不加控制直接让水泵工频运行压力会随着用水量波动得很厉害而且对水泵电机和整个管网都是不小的冲击。所以恒压供水系统本质上是一个典型的闭环控制系统信号流是这样走的压力传感器检测管网压力得到反馈值压力变送器把压力信号转换成4-20mA或者0-10V的标准模拟量信号送给PLC的AI模块PLC内部通过PID运算得出变频器的频率给定值也就是控制量变频器根据这个频率去调节水泵电机的转速从而改变供水量最终让管网压力稳定在设定值附近。这个环路每一秒都在闭环运行任何一个环节出问题整个系统都稳不住。我在这个项目里把核心关注点放在四个环节上压力信号的采样是否准确、抗干扰是否到位这决定了PID的反馈质量PID参数是否匹配实际工况参数不合适系统会出现振荡或者响应迟钝多泵切换时的逻辑是否可靠多泵系统里切换抖动是最容易出问题的地方故障保护是否完善包括电机过载、缺相、变频器故障、欠压超压等。1.2 为什么选西门子全家桶选型思路与设备分工为什么选西门子全家桶而不是一套混搭方案最直接的原因是统一平台带来的开发效率。PLC程序用博途TIA Portal写触摸屏画面也用同一个博途组态G120XA变频器作为RS485从站接入整个链条里的数据类型、网络配置、诊断信息都是统一的。调试的时候在博途里就能直接在线监控所有设备的通信状态和运行参数不用在PLC编程软件、触摸屏组态软件、变频器调试软件之间来回切换效率高很多。具体到设备选型这个项目用的是控制器S7-1200具体型号是CPU 1214C DC/DC/DC。选它的理由有三个一是成本适中二是博途平台支持好三是CPU本身集成了PID功能块和以太网口省去很多外围模块。如果现场预算更紧也可以换成S7-200 SMART那个系列做简单供水项目也是绰绰有余的。变频器G120XA。选它是因为它主打泵类负载内置了供水专用功能比如多泵控制、休眠/唤醒、超欠压补偿很多逻辑在变频器里就能实现等于给系统加了一道冗余保护。触摸屏KTP1200。12寸的TFT屏支持以太网直连PLC组态简单现场操作起来也直观。当然并不是所有项目都适合全套西门子。如果现场没有以太网条件或者甲方指定了第三方变频器那就得走MODBUS RTU甚至自由串口去对接。ABB变频器、ATV930之类的第三方变频器与西门子PLC通讯也是很多现场的真实需求后面我会专门讲485和MODBUS RTU的通讯细节这套思路换到第三方变频器上一样适用。2. 核心控制逻辑实现PID调节、多泵切换与保护参数整定2.1 PID_Compact在S7-1200里的配置和参数整定恒压供水最核心的控制手段就是PID。在S7-1200里博途提供了PID_Compact这个功能块可以直接在OB1里调用配置界面也做得比较友好。使用PID_Compact时最关键的是把Input引脚配置为压力传感器反馈值对应的工程量把Output引脚配置为变频器频率给定值的范围比如0-50Hz。这里有个非常容易踩的坑PID的Input和Output到底用工程量还是归一化值。PID_Compact的Input引脚默认使用工程量单位但需要在功能块配置里把上下限改正确。假设你的压力传感器量程是0-1.6MPa输出4-20mA那么Input的上限设成1.6下限设成0。Output这边配置为0-50Hz。这样PID的P、I、D参数才不会因为量纲问题变得不可理解。从工程实践角度看恒压供水这种惯性大、滞后大的环节基本上用PI控制就够了D项几乎不用甚至为了稳定性要禁用微分。原因很简单压力传感器到PID输出中间隔着水泵转速、管道容水量、压力传播过程这系统本身有大滞后。微分项对这类系统的噪声和滞后非常敏感整定不好反而会引发振荡。博途里PID_Compact也支持选择控制器类型我一般直接选PI控制器省得D项干扰。实际参数整定我用了两种方法效果都还可以方法一试凑法。先把积分时间设成很大的值相当于几乎没有积分作用然后P从0慢慢往上加观察压力曲线直到压力出现等幅振荡记下此时的P值然后按比例回退到50%-60%再把积分时间从大往小调直到压力能稳定在设定值且超调在可接受范围。方法二用PID_Compact的自整定功能。博途里可以一键启动自整定它会自动做阶跃扰动识别给出P、I、D值。但是要注意自整定必须在系统能安全运行的前提下执行——它会主动施加扰动如果供水系统正在给关键用户供水整定过程可能导致压力波动。我实际试下来自整定给出的参数比较保守动态响应偏慢所以一般会把自整定结果作为初值再手动微调。2.2 多泵切换的滞回逻辑与运行时间均衡单台变频器带一台泵的构架最简单但在实际项目中尤其是用水量波动大的场景多泵切换几乎是标配。常见的构架是“一变两定”或“一变三定”一台泵由变频器驱动负责连续调节另外一两台泵工频运行负责在用水量大时补充供水。多泵切换逻辑听起来简单实际上有很多细节我总结了几条关键经验第一切换条件必须带滞回。如果变频泵频率在25Hz附近飘忽不定切泵逻辑不带滞回就会出现工频泵频繁投切的抖动问题。我在程序里用“频率低于20Hz持续30秒”和“压力低于设定值0.02MPa持续10秒”这两个条件同时满足才切泵避免短暂波动造成误动作。第二工频泵切换时要有延时分时。如果直接全压启动工频泵启动电流很大会造成电网压降和机械冲击。条件允许的情况下建议用软启动器或星三角启动。如果条件受限至少要在PLC里做延时和联锁错开多台泵同时启动的时间一般间隔5秒以上比较稳妥。第三每台泵的运行时间要均衡。否则同一台泵长期运行其他泵长期闲置检修和维护都不方便。这个可以在PLC里做一个运行时间累计切换时优先启动累计时间最短的泵这样能让所有泵的磨损水平差不多延长整体使用寿命。另外我还在PLC里加了超前滞后补偿的思路。恒压供水系统的压力反馈存在明显滞后虽然PID_Compact本身没有直接的超前滞后功能块但博途里有LAG、LEAD这些指令可以单独对反馈信号做一阶惯性补偿让PID的反馈更接近现场真实压力变化趋势。这个技巧在管网较长、压力响应特别慢的项目里很有用。2.3 水泵电机参数与保护设置这些参数必须严格核对水泵电机的额定参数要准确写入变频器。额定功率、额定电压、额定电流、额定频率、额定转速、功率因数cosφ这些参数必须跟电机铭牌严格一致。否则变频器的过载保护、转矩计算都会不准。我见过有人偷懒直接不填额定电流结果变频器过载但该跳闸没跳闸电机烧了才发现。恒压供水的电机功率一般都不小保护逻辑必须做全。在PLC程序里至少要包含这几类保护电机过载保护一般通过变频器自身的热过载保护实现PLC侧也要监控变频器的故障输出信号缺相保护变频器侧都有但要确认是否真的生效而不是只接了个接触器就完事水压超限保护压力超过设定上限一定值且持续一段时间要报警甚至停机防止爆管变频器故障联锁变频器如果有故障信号程序必须能及时锁定输出并报警避免在故障状态下继续输出频率造成二次损坏水箱低水位保护如果是水箱供水水位太低时水泵绝对不能启动否则会烧毁机封。保护逻辑注意不要做得太灵敏。比如水位低信号如果只是短暂晃一下就立即停机可能造成频繁启停。一般做法是加延时确认比如水位低持续5秒才触发停机。这个延时值也是调出来的太短和太长都有问题实际调试的时候要根据现场情况取平衡。3. 西门子设备通讯实战485通讯、TCP排查与111报文解析3.1 1200PLC与G120XA变频器的MODBUS RTU通讯实战如果用的是PROFINET版本的G120XAPLC和变频器之间的通讯很省事博途里组好网络、分配好设备名和IP地址用系统功能块直接读写即可。但很多现场因为成本或者布线原因用的是RS485版本的G120XA这时候PLC和变频器之间就要走MODBUS RTU通讯。S7-1200走MODBUS RTU需要用到CM1241 RS485通信模块或者CB1241通信板然后在博途中调用MB_COMM_LOAD和MB_MASTER这两个功能块。MB_COMM_LOAD用于配置串口参数比如波特率9600、数据位8、停止位1、无校验具体参数要和变频器侧一致MB_MASTER用于发起读写请求需要指定从站地址、功能码、寄存器地址和数据长度。这里把MODBUS RTU的报文结构拆开说清楚。假设PLC要读变频器运行频率发出的是读保持寄存器的请求帧格式是从站地址1字节 功能码0x031字节 起始寄存器地址2字节 寄存器数量2字节 CRC校验2字节。变频器侧收到后会把对应寄存器的数据放在响应帧里回传。S7-1200里你不用自己拼这帧MB_MASTER已经把封装工作做了你只需要填好引脚参数即可。但这个基础报文结构一定要懂因为排查通讯故障时要靠它判断问题出在PLC侧、线路侧还是变频器侧。G120XA作为MODBUS RTU从站需要先在变频器上设置站地址和通讯协议。主要参数包括P2030设为MODBUS RTU协议P2021设置为站地址P2022设置为波特率P2023设置为数据格式。这些参数设错PLC侧怎么调都是白费。我调试时碰到过最典型的坑就是站地址设了0因为很多设备从站地址范围是1-2470是非法的但有些参数默认值就是0导致PLC一直报超时。如果是多台变频器挂在同一条485总线上就要做轮询。S7-1200做MODBUS主站时程序里要用一个轮询指针依次给各从站发送读写请求不能同时发。轮询周期要根据波特率和数据量来算9600波特率下一轮读10个寄存器大概需要几百毫秒这在恒压供水这种慢过程中完全够用。至于自由串口和MODBUS的区别也说一句自由串口是S7-1200通过RS485模块直接收发任意格式的字节流协议完全自己定MODBUS RTU则是在串口帧基础上定义了请求/响应格式标准化程度高。如果第三方设备没有标准的MODBUS协议只给了一份私有报文格式那就得用自由串口来做。我在另一个项目里用自由串口对接过一台老款水泵控制器思路就是用MB_COMM_LOAD配置好串口参数程序里用西门子SEND_RECV功能块直接收发字节数组再按对方协议手册去解析每个字节的含义。3.2 触摸屏与PLC的以太网通讯TCP连接问题的排查思路KTP1200和S7-1200默认走以太网用Profinet协议连接。博途里组态很简单把PLC和触摸屏拉到同一个网络设置不同的IP地址下载时选择对应设备即可。但实际项目里触摸屏连不上PLC的问题非常常见我总结几个高频原因和处理方法第一个是IP地址冲突。现场的网段里可能有多台PLC或者有第三方设备占了相同IP。排查方法很简单用笔记本临时设置同一网段的IPping一下PLC的IP看是否有响应再用交叉网线直连触摸屏和PLC排除交换机问题。如果直连正常、经过交换机就不行基本就是交换机端口配置或者VLAN的问题。第二个是触摸屏和PLC的“设备名”不一致。在Profinet网络中PLC和触摸屏之间可能通过设备名来寻址尤其是RT/IRT通讯。如果设备名配置错即使IP通通讯也建立不了。这时需要重新分配设备名博途在线工具里就可以操作。第三个是时间同步和信任关系问题。有些人会碰到KTP1200触摸屏改完时间后显示“不信任PLC”的报错。这个现象多出现在KTP1200和S7-1200的Profinet安全通讯或时间同步场景下本质原因是PLC和触摸屏之间的时钟或证书信任关系被破坏了。解决思路把触摸屏项目里的“信任”设置清零或者重新建立信任关系然后在触摸屏的时间设置里重新同步PLC时间。不要一上来就怀疑硬件坏了这个和“PLC程序下载不了、设备离线”的处理方式完全不一样。还有一个搜索热词里提到的现象西门子TCP只有每次重启的时候才能连上一分钟。这通常是上位机用S7协议连接PLC时出现的问题。原因一般是PLC侧还有其他通信任务占用了连接资源或者上位机在断开连接时没有正确释放。排查时可以在博途里查看在线诊断里的通信连接数确认扫描周期内连接是否被反复建立和关闭。我写C#上位机采集PLC数据时也遇到过类似问题后来通过静态连接对象复用、避免频繁new对象解决。3.3 111报文与V90调试的经验补充搜索热词里提到“西门子111报文详细说明”“西门子v90调试助手中定位模式111报文回零回参考点方式中的信号REF”。虽然恒压供水项目用不到伺服定位但既然做西门子全家桶项目难免会遇到周边设备或者下一个项目需要扩展这里把111报文相关的个人理解整理一下算是提前储备。111报文是西门子Profinet/Profibus标准报文中的一种主要应用于与V90/V90 PN伺服驱动器的基本定位控制EPOS中。报文结构里包含了控制字1、控制字2、状态字1、状态字2加上速度设定值、速度实际值、当前位置等数据。在博途的工艺对象里组态轴时用得最多的就是111报文搭配FB38000这种PLCopen Motion Control的方式。用V90调试助手做回参考点时关键是要明白“信号REF”的含义。回参考点方式有很多种直接绝对编码器、数字量输入回零、通过高速计数器回零等。在V90调试助手里选择“定位模式111报文”后需要在组态里定义回参考点方式比如“通过数字量输入回零”那么需要把驱动器的数字量输入信号如DI0配置为REF功能并在回参考点流程里给出参考点信号电平。很多人卡住就是因为REF信号的触发逻辑设错导致驱动器始终找不到参考点。注意有些版本的调试助手里“REF直接设置”的意思是参考点信号由PLC通过报文里的控制位来给定而不是通过硬接线输入这个要看清组态界面里的说明再选。4. 调试过程实录经典故障、排查速查表与博途环境经验4.1 调试中遇到的三个典型坑这个项目从开始调试到系统稳定运行前后大约花了两周时间。有几个问题非常有代表性值得单独说一下。第一个是模拟量AI模块采集压力变送器信号时读数跳变。刚开始以为是变送器质量问题换了变送器还是一样。最后发现是信号线跟变频器的输出电缆在同一个桥架里走了十几米变频器的高频干扰串进来了。解决办法信号线改成屏蔽双绞线并且屏蔽层单端接地布线时拉开与动力电缆的距离至少保持20厘米以上如果现场条件实在没法拉开就在AI模块的输入端并联一个0.1uF加10uF的电容做滤波。这个问题在实际项目里非常常见排查优先级应该排在所有通讯问题之前因为模拟量信号比数字通讯更容易受干扰。第二个是PID_Compact的输出在自动模式下总是跑到上限。排查后发现是压力传感器的量程设置错误——变送器本身量程0-1.6MPa输出4-20mA但AI模块的组态里却用了0-20mA导致采集值偏小PID一直觉得压力不够拼命提频率。这是一个特别基础但特别容易犯的错误因为很多传感器支持4-20mA和0-20mA两种输出要仔细核对硬件拨码和组态配置是否一致。这个坑也提醒我模拟量通道的组态做完之后一定要先在线看原始值和工程量换算关系对不对再往下做PID逻辑。第三个是半夜无人值守时低流量睡眠模式失效。G120XA配置了睡眠模式后现场反馈夜里还是出现水泵频繁启停。排查后才发现睡眠唤醒阈值设得太靠近正常工作压力夜里管路微漏导致压力缓慢下降每次掉到唤醒阈值就启动一次启动后压力又快速回到正常值然后进入睡眠形成循环。解决办法把唤醒阈值降低了0.03-0.05MPa同时把睡眠进入延时时间加大到30秒问题解决。这个案例说明现场工况和理想模型之间总有差距参数设置要给实际场景留余量。4.2 通讯故障排查速查表故障现象可能原因排查步骤与方法PLC与变频器485通讯超时站地址错误、波特率不一致、A/B接线反接核对变频器通讯参数用USB转485工具单独测试变频器响应检查终端电阻触摸屏显示“不信任PLC”时钟或信任关系异常重置触摸屏项目的信任设置重新同步PLC时间必要时恢复出厂设置上位机连接只能维持1分钟连接资源未释放、连接数超限博途里查看通信诊断中的连接数上位机代码中复用连接对象模拟量读数跳变信号干扰、屏蔽层未接地换屏蔽双绞线屏蔽层单端接地拉大与动力电缆距离加滤波电容PID输出一直顶到上限量程设置错误、传感器接线错误、PID极性反核对AI模块量程组态检查变送器实际输出在PID中查看反馈值是否真实变化4.3 博途软件安装、注册表清理与许可排查经验用博途做西门子项目软件环境本身就经常折腾人。很多人在装TIA Portal V16/V17的时候遇到安装失败、授权失效、或者打开项目非常卡的问题。这里分享几个我自己积累的经验。安装博途最好用全新的Windows系统或者干净的虚拟机。各种精简版系统、优化工具处理过的Windows装博途经常出现莫名其妙的问题。博途对操作系统的组件依赖很重装完系统后先Windows Update跑一遍再装博途成功率会高很多。如果机器上之前装过其他版本的博途升级安装之前最好把旧版本先卸载干净。如果博途装到一半失败或者卸载后重装不上经常是注册表残留导致的。网上有关于“西门子删除注册表”的说法其实就是把SIMATIC相关的注册表项清理干净再重新装。操作前切记先备份注册表不要乱删HKEY_LOCAL_MACHINE\SOFTWARE\Siemens下面的子键删错了可能只能重装系统。比较稳妥的方式是先用系统自带的“程序和功能”正常卸载重启后再用注册表清理工具扫一遍残留项。许可问题也要留意。博途的许可证放在Automation License Manager里破解补丁容易被杀毒软件误删安装时先关掉杀毒软件安装完再加白名单。企业项目建议直接买正版授权省心且能享受官方技术服务尤其是需要售后或者后续升级的项目正版许可带来的价值远高于省下的那点成本。博途打开项目慢大部分是因为项目里硬件组态太庞大或者历史版本过多。可以尝试用“项目归档”功能压缩或者把不用的设备离线化。另外博途项目文件尽量放在固态硬盘上机械硬盘跑大项目能让你怀疑人生。我一开始图省事把项目文件放在机械硬盘的共享目录里结果每次编译要等两分钟挪到本地固态之后明显改善。最后分享一点个人实操体会恒压供水系统看似简单但真正把它做扎实靠的是对每一个环节的把控信号采样要准、PID参数要合、通讯链路要稳、保护逻辑要全。做这个项目时我把博途里每个功能块的帮助文档都翻过一遍在调试台上反复验证过每一个参数的边界行为。很多问题看起来神秘其实背后都有确定的物理或逻辑原因只要耐心定位总能找到解决办法。如果后续再优化这个系统我会考虑三个方向一是把压力传感器从单点改成双点冗余提高可靠性二是把触摸屏的监控界面做成多级权限让操作工和管理层看到不同维度的数据三是把系统接入上位机数据采集平台实现远程监控和用水量数据分析。这套架构从PLC到变频器到触摸屏全是西门子做后续扩展也很顺畅。如果你也在折腾恒压供水或者类似的西门子全家桶项目希望这篇笔记能帮你少踩几个坑。