恒压供水系统听着不算高大上,但它几乎把自动化控制里最核心的技术点都串起来了:压力变送器的模拟量采集、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版本的G120XA,PLC和变频器之间的通讯很省事,博途里组好网络、分配好设备名和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字节)+ 功能码0x03(1字节)+ 起始寄存器地址(2字节)+ 寄存器数量(2字节)+ CRC校验(2字节)。变频器侧收到后,会把对应寄存器的数据放在响应帧里回传。S7-1200里你不用自己拼这帧,MB_MASTER已经把封装工作做了,你只需要填好引脚参数即可。但这个基础报文结构一定要懂,因为排查通讯故障时要靠它判断问题出在PLC侧、线路侧还是变频器侧。
G120XA作为MODBUS RTU从站,需要先在变频器上设置站地址和通讯协议。主要参数包括:P2030设为MODBUS RTU协议,P2021设置为站地址,P2022设置为波特率,P2023设置为数据格式。这些参数设错,PLC侧怎么调都是白费。我调试时碰到过最典型的坑就是:站地址设了0,因为很多设备从站地址范围是1-247,0是非法的,但有些参数默认值就是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。排查方法很简单:用笔记本临时设置同一网段的IP,ping一下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到变频器到触摸屏全是西门子,做后续扩展也很顺畅。如果你也在折腾恒压供水或者类似的西门子全家桶项目,希望这篇笔记能帮你少踩几个坑。