简介:这是一份基于西门子S7-1200 PLC的恒压供水PID闭环控制工程源码,面向工业自动化工程师、PLC编程学习者与恒压供水系统调试人员。资源围绕PID比例、积分、微分调节原理,给出完整的S7-1200项目及参数配置思路,帮助理解变频驱动水泵如何依据压力反馈维持管网恒定压力。压缩包共50个文件,核心包含TIA Portal项目文件(ap14、plf、db等程序与数据块)、界面图示(png)、转换与调试日志(xml、cfs)等,总大小377KB,轻量易用。目前已有433人学习下载,适合从入门到进阶逐步研习。项目内还提供ICOPE信息图、搜索索引及辅助文件,可直接在TIA Portal中打开工程,查看PID功能块组态、传感器地址分配和调速逻辑,便于二次开发、参数整定及故障排查,为实际恒压供水方案提供可落地的设计样板。
1. PID闭环运算恒压供水,到底在解决什么问题
恒压供水不是把变频器接到水泵上那么简单。传统工频泵加节流阀的方案里,流量波动时管网压力忽高忽低,低峰用水时段大量电能白白消耗在阀门压降上。恒压供水的本质,是把“出口压力稳定在设定值”变为一个闭环控制问题:压力变送器连续采集管网压力,PLC读取实测值与设定值比较,经过PID闭环运算输出调节信号给变频器,变频器实时调整电机转速,让供水量与用水量动态匹配。这套方案在居民小区、工厂工艺用水、农业灌溉里已经是最常见的控制架构,而真正让系统表现出色或糟糕的,全在PID参数整定、多泵切换逻辑和信号滤波这三个环节。本文按工程落地路线展开,先把闭环模型和PID公式讲透,再给出基于西门子S7-200 SMART的最小可运行方案,最后把参数整定、振荡排查和容易忽略的节能细节一次说清。
2. 恒压供水PID闭环的数学模型与算法选型
2.1 被控对象:单泵变频驱动下的供水压力特性
从自动控制视角看,供水管网是一个典型的大惯性、纯滞后系统。变频器频率改变后,要经过电机电磁时间常数、泵轮惯量、管路水锤和压力波传输时间,压力才会在变送器端产生可观察的变化。工程上常用一阶惯性加纯滞后模型近似描述:
G(s) = K / (T·s + 1) · e^(-τ·s)
其中K是稳态增益,表示变频器频率变化1Hz时压力稳态变化多少MPa;T是时间常数,市政供水管网一般在5~20秒范围;τ是纯滞后时间,供水距离远、管径大时可达数秒。这个简化模型对PID参数整定的指导意义很大:T大说明积分作用不能太强,τ大说明微分作用要谨慎使用。实际操作中,压力变送器装在泵出口附近时τ只有0.5~2秒,装在管网末端时τ可能到5秒以上,两组工况下PID参数相差明显。
2.2 位置式PID、增量式PID与PLC内的实现差异
PID闭环运算在PLC里有两条实现路径。位置式PID输出直接是控制量绝对值,公式为:
u(k) = Kp·e(k) + Ki·Σe(i) + Kd·[e(k) - e(k-1)]
增量式PID只计算控制量变化量:
Δu(k) = Kp·[e(k)-e(k-1)] + Ki·e(k) + Kd·[e(k) - 2e(k-1) + e(k-2)]
在恒压供水场景里,西门子S7-200 SMART的PID指令块内部采用位置式,对外提供手动/自动切换功能,关键在于积分预置值的处理。三菱FX系列用PID指令时,D参数表直接暴露Kp、Ti、Td和采样周期,属于混合型实现。选增量式的理由有两个:一是输出限幅方便,积分项不会因执行器饱和而无限累积;二是故障时输出增量归零,变频器保持最后一次给定频率,不会突跳。但增量式在前馈叠加、手自动切换场景里要额外管理基准值,所以大多数成套恒压供水程序仍然用厂家自带的PID指令块,配好限幅即可。
2.3 西门子smart200恒压供水程序里的PID回路表配置
S7-200 SMART的PID指令依赖一张以VB为起始地址的回路表,长度80字节。核心字段分布如下:
| 偏移 | 含义 | 注意点 |
|---|---|---|
| VD+0 | 过程变量PV | 必须归一化到0.0~1.0 |
| VD+4 | 给定值SP | 与PV用相同的归一化方式 |
| VD+8 | 输出值M | 归一化0.0~1.0 |
| VD+24 | 比例增益Kp | 工程上常用0.3~3.0 |
| VD+28 | 积分增益Ki | 注意是1/Ti的分钟单位 |
| VD+32 | 微分增益Kd | 恒压供水慎用 |
| VD+36 | 采样时间TS | 单位秒,范围0.01~0.33 |
PID指令要求PV归一化,把AIW的0~32000原始值直接送进去是错误做法。标准流程是先做标准化处理:
// 压力变送器4~20mA对应0~1.6MPa,AIW0为模拟量原始值 // 先减去4mA对应的6400,再除以量程跨度 LD SM0.0 MOVW AIW0, AC0 // 读入模拟量原始值 ITD AC0, AC0 DTR AC0, AC0 MOVR AC0, LD0 -R 6400.0, LD0 // 6400是4mA对应的AIW读数 MOVR LD0, LD2 /R 25600.0, LD2 // 32000-6400,即满量程跨度 MOVR LD2, VD100 // 归一化的PV值进入PID回路表这里6400对应4mA的AIW值,25600是满量程跨度。变送器量程0~1.6MPa时,归一化后1.0代表1.6MPa,设定值0.5就代表0.8MPa。最容易犯的错是设定值和反馈用了不同的归一化基准,导致PID输出一直顶到上限,压力却始终“差一点”。
2.4 采样周期与PID运算周期的匹配关系
恒压供水调试中的一个隐性问题是采样周期和扫描周期的混淆。S7-200 SMART的PID指令用SM0.0条件调用时,回路表里的采样时间TS决定内部是否执行计算。扫描周期小于TS时,PID块跳过未到采样时刻的运算,但PV值仍然刷新。扫描周期大于TS时,PID实际按扫描周期执行,此时要把TS设成不小于扫描周期的值,否则定时抖动会造成输出毛刺。
三菱PLC的PID指令要求程序在每个运算周期调用一次,采样周期在D参数表中设定。经验值是压力环采样周期取0.2~0.5秒,对应PLC扫描周期10~20ms时,PID指令有充足裕量做滤波和抗积分饱和处理。采样周期取太小,压力信号噪声直接进微分项;取太大,系统响应迟钝,用水突增时压力跌落明显。
3. PLC恒压供水系统从接线到模拟量通道配置
3.1 变频器、PLC与压力变送器的经典拓扑
标准恒压供水柜里,PLC是控制核心,变频器和接触器是执行层。单泵恒压方案最简单:变频器由PLC的模拟量输出模块给定频率,压力变送器一路4~20mA信号进入PLC模拟量输入通道。多泵方案则是每台泵配一组接触器,主泵变频运行,压力不足时PLC把变频泵切到工频,再启动下一台泵做变频启动,泵与泵之间循环轮换。
接线层面最隐蔽的坑是模拟量共地。压力变送器是两线制时,24V正极供电,信号线同时承载电流回路,信号线必须接到PLC模拟量模块的通道负端,且PLC电源、变送器电源、变频器地线要形成单点接地。变频器输出侧串接触器时,接触器通断瞬间会在模拟量通道上耦合干扰。处理方法是信号线用屏蔽双绞线,屏蔽层只在PLC侧单端接地,控制线与动力线在柜内分开走线槽。
3.2 压力变送器量程选择与AIW原始值换算
压力变送器量程一般取额定工作压力的1.2~1.5倍。管网正常工作压力0.6MPa时,量程取0~1.0MPa比较合适,兼顾低量程段的测量精度。4~20mA对应0~1.0MPa时,AIW0读数范围是6400~32000,工程值换算公式为:
压力值(MPa) = (AIW0 - 6400) / 25600 × 量程
在S7-200 SMART里用浮点运算把AIW0换算成VD1000,供PID指令和触摸屏显示共用:
LD SM0.0 MOVW AIW0, AC0 ITD AC0, AC0 DTR AC0, AC0 MOVR AC0, VD1000 -R 6400.0, VD1000 MOVR VD1000, VD1004 *R 0.000039, VD1004 // 1.0MPa除以25600的结果0.000039这个系数来自1.0/25600。如果换成1.6MPa量程,系数变为0.0000625。把工程量VD1004直接作为PID回路的PV时,还要再除以量程做归一化,即0.8MPa在1.6MPa量程下对应0.5。很多从业者在触摸屏上看到压力显示0.8,就以为PV已经是0.8,直接送进PID,结果输出永远在饱和区,这是恒压供水调试中排名第一的初级错误。
3.3 数字量输出控制变频器启停与多泵切换逻辑
数字量输出点控制变频器启停有两种常见接线:一种把PLC数字量输出接到变频器DI1端子,用外部端子控制启停;一种通过Modbus RTU写变频器命令字。端子方式响应直接,但在多泵切换时要严格锁好互锁关系。
多泵切换的工程时序是:泵1变频运行,PID输出到50Hz持续15秒而压力仍低于设定值0.02MPa,则PLC先把泵1切到工频,再启动泵2变频运行。切换操作必须加延时:
// 泵1变频切工频的互锁与延时逻辑 LD M0.0 // 需要切换标志 AN Q0.3 // 泵1工频接触器未吸合 TON T37, 50 // 切断变频给定后延时5秒 LD T37 AN Q0.2 // 泵1变频接触器已断开 S Q0.3, 1 // 吸合泵1工频接触器这段逻辑的关键不在指令本身,而在于延时放在变频接触器断开与工频接触器吸合之间。变频器从停止输出到接触器断开还有残压泄放时间,5秒延时足够电弧熄灭和变频器内部电容放电。泵切换瞬间管网压力会有一段短暂回落,PID在此刻要闭锁输出,否则积分项会把频率拉高,切换完成后又造成过冲。
3.4 模拟量滤波与信号断线保护
压力变送器信号断线在4~20mA回路里表现为电流小于4mA,AIW读数可能跌到0或跳到最大值。PID闭环运算遇到断线会把输出打到最大,变频器全速运行,管网压力可能超限。标准做法是在PID运算前做有效值检查:
LDW>= AIW0, 3200 // 对应电流低于3.5mA MOVR 0.0, VD1004 // PV强制归零 R M1.0, 1 // 解除PID自动模式 LDW<= AIW0, 31000 // 信号超过满量程的97%模拟量滤波优先用PLC内部数字平均。S7-200 SMART的模拟量输入通道自带滤波配置,选择50Hz工频抑制有效,能滤掉变频器载波耦合进来的纹波。三菱FX系列没有内置滤波,需要程序里做滑动平均,例如每50ms采样一次取最近5次平均值,再进入PID运算。滤波时间常数选得不当会引入相位滞后,压力环响应变慢,调Kp时震荡临界点变化很大,容易被误判为“PID参数没整定好”。
4. 恒压供水PID参数整定流程与振荡排查
4.1 PID参数物理意义与整定前置检查
先把三个参数的物理意义固定。Kp决定对当前误差的反应力度,Kp越大频率调节越猛,稳态残差越小,但太大会引发等幅振荡。Ki负责消除稳态误差,Ki太强会导致系统低频振荡,表现为压力在设定值附近缓慢爬升再跌落。Kd反映误差变化趋势,供水这种大惯性系统里Kd稍加一点可以抑制超调,但压力信号带有噪声时Kd会把噪声放大成输出抖动。
自动整定或手工整定之前必须确认三个前提:压力变送器读数与标准表偏差在允许范围内,至少用0.5%精度标准压力表对拍校验;变频器加减速时间设为5~10秒,不要设成0.1秒的快速响应,否则电机轴扭矩冲击过大;管网阀门全部处于实际运行状态,居民小区还要把早晚高峰用水差异考虑进去,整定必须在典型工况下进行。
4.2 临界比例度法整定步骤
闭环整定用临界比例度法最直接。第一步把Ki和Kd全部置0,Kp从0.3开始缓慢增大,每次增加0.1,观察压力曲线出现等幅振荡时记下临界增益Ku和振荡周期Tu。第二步按经验公式设置参数:
| 控制类型 | Kp | Ti | Td |
|---|---|---|---|
| P控制 | 0.5·Ku | ∞ | 0 |
| PI控制 | 0.45·Ku | Tu/1.2 | 0 |
| PID控制 | 0.6·Ku | Tu/2 | Tu/8 |
这套对应Ziegler-Nichols临界比例度整定法则,恒压供水里一般取PI模式即可,加入微分容易被变送器纹波干扰。设某小型供水系统在Kp=2.8时压力在0.4MPa附近等幅振荡,Tu约8秒,取PI参数Kp=1.26,Ti=6.67秒。换算成S7-200 SMART回路表字段时,Ki字段填的是1/Ti的分钟值,即1/(6.67/60)=9.0。这个分钟与秒的单位换算是老手也容易翻车的细节。
4.3 阶跃响应法作为备选整定方案
临界比例度法要在闭环下让压力振荡起来,有些管网不允许这种压力波动。此时改用开环阶跃响应法。方法是把变频器切到手动模式,输出50Hz稳定运行,等压力稳定后突然降到40Hz,记录压力从旧稳态过渡到新稳态的曲线,从曲线读取一阶惯性模型的增益K、时间常数T和纯滞后τ。
整定公式采用无超调设置的Chien-Hrones-Reswick法则:
Kp = 0.6·T / (K·τ) Ti = T Td = 0.5·τ
当T=12秒,K=0.02MPa/Hz,τ=2秒时,Kp=0.6×12/(0.02×2)=180。这个数值看起来很大,是因为K的单位是MPa/Hz,把压力误差换算成频率修正量时自然放大了。这套方法的优点是整定过程完全离线,适合已经建成投产、不能轻易振荡的泵站。缺点在于管网非线性明显,不同流量段模型参数会漂移,整定结果对中间流量范围最有效。
4.4 增量式PID在PLC里的手动实现
如果PLC没有自带PID指令,或者想完全掌控运算细节,可以用结构化文本手写增量式PID:
dKp := 0.8; Ti := 5.0; // 积分时间,秒 Td := 0.5; // 微分时间,秒 Ts := 0.2; // 采样周期,秒 e0 := SP - PV; // 当前误差 du := dKp * (e0 - e1) + dKp * Ts / Ti * e0 + dKp * Td / Ts * (e0 - 2*e1 + e2); Out := Out + du; IF Out > 50.0 THEN Out := 50.0; ELSIF Out < 0.0 THEN Out := 0.0; END_IF; e2 := e1; e1 := e0;du是频率增量,Out是叠加后的频率给定。积分项用Kp乘以Ts/Ti,微分项用Kp乘以Td/Ts,所有参数都归一化到工程单位。增量式的优势在这里体现得很明显:输出限幅只需在累加器上做饱和判断,积分项不会因为长期偏差无限增大。换成位置式PID,需要在算法外部单独做积分限幅,或者依赖厂家指令块内置的抗积分饱和功能。
4.5 常见振荡现象与排查路径
恒压供水调试遇到振荡,先按周期分类定位。快速振荡(周期1~3秒)多数是压力信号噪声或Kd过大,先看AIW原始值波动幅度,把采样均值窗口加大到100ms再试。中等振荡(周期5~15秒)通常是Kp偏大,降低Kp的同时适当加大Ti。慢振荡(周期1分钟以上)几乎都是积分作用过强,压力在设定值附近爬升再跌落,把Ti增大到原来的2倍观察。还有一种特殊情况,变频器与PLC之间用模拟量给定频率时,信号线上的共模干扰会让输出频率显示值和实际值不一致,表现出的症状也是压力波动但PID参数怎么调都没用。
三菱FX3U的PID指令支持通过RBF指令运行自动调谐,自整定的前提是系统工况稳定、压力偏差在允许范围内,结束后参数写入D参数表。但自整定结果往往偏激进,参数有震荡倾向,建议再用临界比例度法的计算结果复核一次,不要盲目信任自整定输出。
5. 恒压供水PID的进阶验证与前馈补偿技巧
整定完成后做一个标准阶跃验证。把设定值从0.4MPa提升到0.5MPa,记录压力曲线,评判三个指标:超调量控制在10%以内,调整时间小于20秒,稳态误差小于0.005MPa。如果超调过大把Ti加大,如果调整时间过长适当增加Kp。验证期间同步监视变频器输出频率曲线,正常情况是频率快速上升再回落,如果频率一直顶在50Hz不回退,说明积分饱和没有处理好。S7-200 SMART的PID指令带有输出限幅字段,但积分项饱和后恢复慢是固有现象。一个实用的处理办法是:当输出达到上限时把PID切到手动模式,输出保持上限值,等PV接近SP后再切回自动模式,切换时PV与SP偏差要小。
多泵切换瞬间,主管网压力会短暂下降0.03~0.06MPa,纯PID反馈对这个冲击的响应会出现明显凹坑。常见补救办法是增加前馈补偿:检测到泵切换标志置位时,给PID输出预加固定偏置频率,持续3秒后逐步撤除。
LD M0.0 // 泵切换中标志 MOVR 3.0, VD2000 // 前馈频率偏置,单位Hz LD SM0.0 MOVR VD2010, AQW0 // PID结果与前馈叠加后输出 +R VD2000, VD2010前馈值不是常数,夏季用水量大时切换冲击更明显,前馈要加大;末端用户离泵房越远,管道缓存越大,前馈可以调小,这组参数做两三次切换试验就能定下来。夜间的低流量时段是另一个容易被忽视的点,此时管网用水量可能只有额定流量的1%到5%,PID闭环仍在维持压力,但泵可能进入气蚀区。更可靠的做法是夜间切换小泵运行,或启用变频器的休眠唤醒功能,设定休眠频率阈值和休眠延时,压力满足要求后变频器自动休眠,PID输出保持但频率降为零。验证节能效果看吨水耗电量,改造前工频恒速供水约0.35~0.45度每吨,PID恒压供水整定到位后可以降到0.25~0.35度每吨。判断PID是否真正工作在合理区间,除了看压力曲线,还要看变频器输出频率分布直方图,如果频率长期在48~50Hz顶部运行,说明压力设定值偏高或PID参数不合理,系统处于伪恒压状态,频率运行时段占比才是恒压供水节能效果最直接的证据。
本文还有配套的精品资源,点击获取