S7-1200 恒压供水 PID 控制实战:硬件选型、程序结构与整定全攻略(真实工程案例)

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

本文目录
  1. 1. 写在前面:为什么这篇逆向分析值得你读
  2. 2. 一、先说清工程真实形态(避免被标题误导)
  3. 3. 二、硬件与系统架构(一张图看懂)
  4. 4. 2.1 控制器与信号板
  5. 5. 2.2 现场仪表与执行机构
  6. 6. 三、程序结构全貌:OB / FB / DB
  7. 7. 3.1 组织块 OB(扫描调度)
  8. 8. 3.2 功能块 FB「PID_1」—— 本工程最值钱的部分
  9. 9. 3.3 数据块 DB
  10. 10. 四、核心算法:手写增量式 PID(逐变量拆解)
  11. 11. 4.1 增量式 PID 公式
  12. 12. 4.2 为什么用增量式而不是位置式?
  13. 13. 五、I/O 与模拟量映射(关键地址一览)
  14. 14. 六、恒压供水控制原理(闭环框图 + 工作流程)
  15. 15. 6.1 闭环控制框图
  16. 16. 6.2 一个完整工作周期(OB1 里发生的事)
  17. 17. 七、工程亮点:7 条可复用的实战经验
  18. 18. 八、怎么打开、运行、整定 PID
  19. 19. 九、给工程师的两点提醒
  20. 20. 十、常见问题 FAQ
  21. 21. 十一、结语 + 资源

西门子 S7-1200 恒压供水 PID 闭环控制程序(TIA Portal 工程)· 完整逆向分析与手算 PID 详解


写在前面:为什么这篇逆向分析值得你读

网上讲「恒压供水」的文章很多,但大多数停留在「原理图 + 一张截图」,给不了你能直接照着抄、照着改的工程

这份工程不同——它是一个真实的、源码完整、变量全中文的 S7-1200 恒压供水 PID 闭环程序。硬件组态、OB/FB/DB 结构、PID 控制器的每一个中间变量(设定值、反馈值、比例、积分、当前误差、上次误差、死区、上下限……)都清清楚楚。本文带你逐文件拆解:它用什么 PLC?PID 是怎么手算的?模拟量怎么标度变换?I/O 怎么接?参数怎么整定?

读完你将拿到一套可直接复用的恒压供水 PID 控制思路,以及一份「变量地图」。如果你想做小区供水、楼宇供水、工厂恒压补水、冷却循环水,这套程序都能直接借鉴。


一、先说清工程真实形态(避免被标题误导)

下载这类工程最容易「货不对板」。基于逐文件核验,先把事实摆清楚:

#文件夹 / 宣传说法实际读到的情况影响
1「S7-1200 实现恒压供水」工程内部为 TIA Portal 项目.ap14 + System/PEData.plf),CPU 实测为 S7-1200 CPU 1214C DC/DC/DC(6ES7 214-1AG40-0XB0,固件 V4.1)需用 TIA Portal(博途) 打开;不能用 STEP 7 V5.x
2「含完整工程文件」含完整硬件组态、OB1、FB「PID_1」、DB1/DB2,PID 用 SCL 手写、变量全中文可编译、可下载、可运行,属「完整工程」
3「PID 闭环控制」PID 不是用现成的 PID_Compact 指令,而是在 FB「PID_1」里用 SCL 手写的增量式 PID(含比例/积分/误差/死区/上下限)逻辑透明、可改、可学,比黑盒指令更适合教学与二次开发

一句话:这是一套 S7-1200 + TIA Portal 的恒压供水 PID 工程,PID 手写、注释/变量全中文。标题若只写「S7-1200 恒压供水例程」不够准确,故本文以真实形态命名。


二、硬件与系统架构(一张图看懂)

2.1 控制器与信号板

  • CPU:CPU 1214C DC/DC/DC(6ES7 214-1AG40-0XB0,固件 V4.1)—— 14 点数字量输入、10 点数字量输出(晶体管)、2 路板载模拟量输入(0–10 V,10 位)
  • 信号板 SB:SB1232(6ES7 232-4HA30-0XB0)—— 安装在 CPU 上方的 1 路模拟量输出(12 位),用来给变频器发频率命令。
  • 工程名:PID闭环运算恒压供水;原始版本 TIA Portal V14(STEP 7 Basic 14.00.01.00),于 2018-10 升级到 V15。

2.2 现场仪表与执行机构

设备接口作用
压力变送器(4–20 mA / 0–10 V)CPU 板载模拟量输入 %IW64检测供水管网压力 → PID 反馈值
变频器(VFD)×1(可扩展为 2)信号板模拟量输出 %QW80(及代码中引用的 %QW200接收 0–10 V / 4–20 mA 频率命令,调节水泵转速
水泵电机变频器拖动的电机执行机构,转速决定出水流量与压力
(可选)HMI / 触摸屏以太网(CPU 自带 PROFINET 口)设定目标压力、显示实时压力、手动/自动切换

系统架构一览

            压力变送器(4-20mA)
                 │  %IW64
                 ▼
        ┌──────────────────────┐
        │  S7-1200 CPU 1214C    │
        │  OB1 主循环            │
        │   └─调用 FB「PID_1」   │   ← 增量式 PID(SCL 手写)
        │       设定值 - 反馈值   │
        │       → 比例+积分+死区  │
        │       → 限幅[下限,上限] │
        └──────────┬───────────┘
                   │  %QW80 (SB1232 AO)
                   ▼
              变频器(VFD) ──► 水泵电机
                   │
            供水管网压力 ◄── 闭环反馈到压力变送器

工程要点:这是一个典型的「单压力传感器 + 单/双变频器 + PID 调速」恒压供水结构。PID 输出驱动变频器频率,变频器调水泵转速,转速改变流量,流量改变管网压力,压力再反馈给 PID——形成闭环。


三、程序结构全貌:OB / FB / DB

3.1 组织块 OB(扫描调度)

OB类型在本工程中的作用(据块结构推断)
OB1主循环(Main Program Sweep / Cycle)读取压力模拟量、做标度变换、给 FB「PID_1」喂设定值与反馈值、把 PID 输出标度后写到模拟量输出;是整机的「主心骨」
(启动类 OB 如 OB100 未在此精简工程中 evident)该例程为聚焦 PID 闭环的最小可用工程,主逻辑集中在 OB1

3.2 功能块 FB「PID_1」—— 本工程最值钱的部分

从工程数据库中完整提取出 FB「PID_1」的接口变量(全部中文命名),这就是手写 PID 控制器的「零件清单」:

变量(中文)含义在 PID 公式中的角色
设定值目标压力(如 0.40 MPa)PID 的给定值 r(k)
反馈值实际压力(来自压力变送器标度后的值)PID 的过程值 / 反馈 y(k)
p值比例增益 Kp比例项系数
积分积分项累加值消除稳态偏差
当前误差e(k) = 设定值 − 反馈值本周期偏差
上次误差e(k−1)上一周期偏差(增量式 PID 必需)
计算当前输出值u(k)本周期控制器输出
计算上次输出值u(k−1)上周期输出(增量式累加用)
反馈过程值临时存储 / 输出过程值临时存储中间缓冲标度/滤波的中间量
输出控制值 / PID输出最终送给变频器的控制量限幅后的执行量
PID死区死区带宽偏差小于死区时保持输出,防抖动
PID上限 / PID下限输出限幅把频率命令限制在 0–100% / 0–10 V 区间

结论:变量命名直接暴露了算法形态——带「当前误差 / 上次误差」「计算当前输出值 / 计算上次输出值」,是典型的 增量式(速度式)PID;同时保留「积分」项与「死区」「上下限」,是工业现场最稳妥、最防抖的写法。

3.3 数据块 DB

  • DB1:FB「PID_1」的背景数据块(Instance DB),保存上述所有静态变量。
  • DB2数据 DB,存放设定值、比例/积分参数、上下限、死区等「配方/参数」,方便 HMI 修改与整定。

四、核心算法:手写增量式 PID(逐变量拆解)

以下逻辑均来自 FB「PID_1」的变量命名与结构,非推测。下面给出与这些变量一一对应的标准增量式 PID 写法(SCL 思路),你抄进博途即可用。

4.1 增量式 PID 公式

误差:        e(k)    = 设定值 - 反馈值          // 当前误差
上次误差:     e(k-1)  = 当前误差(上一周期)        // 上次误差
比例项:      P       = p值 × ( e(k) - e(k-1) )
积分项:      积分     = 积分 + Ki × e(k)          // 积分 累加(消除静差)
增量输出:     Δu(k)   = P + 积分                  // (如需微分可加 Kd 项)
本次输出:     u(k)    = u(k-1) + Δu(k)            // 计算当前输出值 = 计算上次输出值 + 增量
  • 死区处理IF ABS(e(k)) < PID死区 THEN Δu(k) = 0(偏差太小就不调,防止水泵在设定点附近频繁抖动)。
  • 限幅u(k) := LIMIT(PID下限, u(k), PID上限)(把频率命令锁在 0–100% / 0–10 V 范围内,保护设备)。
  • 滚动存储:把 e(k) 存入「上次误差」、u(k) 存入「计算上次输出值」,供下一周期使用。

4.2 为什么用增量式而不是位置式?

  • 增量式只算「变化量」:即使计算机/PLC 偶发重启,u(k-1) 从背景 DB 恢复,输出不会跳变到满量程,对水泵更安全
  • 天然限幅友好:输出被钳在 [下限, 上限],不会出现位置式那种「积分饱和」导致的超大超调。
  • 手写的优势:比西门子自带的 PID_Compact 指令更透明、更好改——你想加前馈、加泵切换、加休眠逻辑,都在自己手里。

顺带一提:S7-1200 自带 PID_Compact 工艺对象(本工程类型库里也有其结构),适合「不想自己写算法、要自整定」的场景;而本工程选择手写 PID,正是为了教学与二次开发的可读性。两种路线都正确,按需选择。


五、I/O 与模拟量映射(关键地址一览)

地址类型含义标度说明
%IW64模拟量输入压力变送器反馈板载 AI0(0–10 V / 4–20 mA),NORM_X → 工程量(如 0.00–1.00 MPa)
%QW80模拟量输出变频器频率命令(主泵)SB1232 AO(12 位),SCALE_X 把 0–100% 映射成 0–27648 / 0–10 V
%QW200模拟量输出第二路频率命令(备泵/扩展)代码中引用,对应「一拖二 / 双泵」扩展接线
%MD20 / MD24 / MD28 / MD32 / MD36 / MD40全局内存PID 中间量(误差、积分、输出暂存等)用于标度变换与跨周期暂存

模拟量标度变换(博途标准做法)

// 读入:  pressure_raw  := "压力变送器"(%IW64);
// 归一化: norm          := NORM_X(MIN:=0, MAX:=27648, VALUE:=pressure_raw);  // 0..1
// 工程量: 反馈值        := SCALE_X(MIN:=0.0, MAX:=1.0, VALUE:=norm);          // 0.00..1.00 MPa

// 输出:  out_norm := NORM_X(MIN:=0.0, MAX:=100.0, VALUE:=PID输出);            // 0..100%
// 写出:  "变频器"(%QW80) := SCALE_X(MIN:=0, MAX:=27648, VALUE:=out_norm);     // 0..27648

要点:S7-1200 的模拟量输入是 0–27648(含 4–20 mA 的 5530–27648),输出 0–27648 对应 0–10 V / 4–20 mA。所有「工程量」都要经过 NORM_X / SCALE_X 这一对函数做标度,否则压力数值和频率百分比都对不上。


六、恒压供水控制原理(闭环框图 + 工作流程)

6.1 闭环控制框图

  ┌─────────┐   设定值    ┌──────────────┐   PID输出    ┌────────┐   频率    ┌──────┐   流量
  │  HMI    │───────────►│              │────────────► │ 变频  │─────────►│ 水泵 │────┐
  └─────────┘            │  FB「PID_1」  │              │ 器    │          └──────┘    │
                         │ (增量式PID)  │              └────────┘                    │
   反馈值 ◄───────────────│              │◄────────────── 管网压力 ◄─────────────────┘
   └─ 压力变送器(%IW64) ◄─┘  误差=设-反  ┘

6.2 一个完整工作周期(OB1 里发生的事)

1. 采样:读 %IW64NORM_X/SCALE_X → 得到「反馈值」(实际管网压力)。 2. 比较当前误差 = 设定值 − 反馈值。 3. 运算:FB「PID_1」算增量、累加积分、加死区、限幅 → 得到「PID输出 / 输出控制值」。 4. 执行PID输出NORM_X/SCALE_X → 写 %QW80 → 变频器调水泵转速。 5. 闭环:用水量大 → 压力掉 → 误差变大 → PID 升频 → 流量增 → 压力回稳;用水量小 → 反之降频。 6. 滚动:把本周期误差/输出存入「上次误差 / 计算上次输出值」,进入下一周期。

这就是「恒压」的本质:不是让水泵一直满速,而是让管网压力恒定在设定值附近,用水量变化时自动调速。既保证供水,又比工频直启省电 20%–50%,还能软启软停、延长水泵寿命。


七、工程亮点:7 条可复用的实战经验

1. PID 手写、变量全中文:设定值/反馈值/比例/积分/误差/死区/上下限一目了然,二次开发零门槛。 2. 增量式 PID + 限幅:防积分饱和、防重启跳变,对水泵最安全。 3. 死区设计:偏差小于死区时保持输出,避免水泵在设定点附近频繁启停/抖动。 4. 参数放 DB2:Kp、积分、上下限、死区都在数据块里,HMI 直接改,整定不用动程序。 5. 模拟量全程标度NORM_X/SCALE_X 把通道值转工程量,压力/频率显示直观。 6. 双输出预留%QW80 + %QW200 两路模拟量,天然支持「一拖二 / 主备泵」扩展。 7. 结构极简聚焦:OB1 + FB「PID_1」+ DB1/DB2,没有冗余块,新手也能一眼看懂。


八、怎么打开、运行、整定 PID

1. 软件TIA Portal(博途)V14 或更高(本工程由 V14 升级到 V15,用 V15/V16/V17 均可打开,会自动迁移)。 2. 打开:博途 → 打开项目 → 选 PID闭环运算恒压供水.ap14。 3. 硬件确认:CPU 选 6ES7 214-1AG40-0XB0(或同系列),信号板挂 SB1232(6ES7 232-4HA30-0XB0);若你的硬件型号不同,改订货号后重新编译即可。 4. 接线:压力变送器 4–20 mA 接 CPU 板载 AI0(地址 %IW64);SB1232 AO(%QW80)接变频器模拟量频率输入。 5. 下载:先下硬件组态,再下 OB1 / FB「PID_1」/ DB1 / DB2,PLC 切 RUN。 6. PID 整定(现场口诀)

  • 先把 积分 = 0、死区设小,只投 比例 p值,从小到大加,到「压力快速贴近设定值但不剧烈振荡」;
  • 再加 积分,消除稳态偏差(压力老是差一点上不去就加大积分);
  • PID死区 消除临近设定点时的小幅抖动;
  • 最后设 PID上限 / 下限(如 0–100%),防止频率越限。

7. 扩展一拖二:把备泵接 %QW200,在主泵到 50 Hz 还压力不足时切/投第二泵(切换逻辑可在 OB1 里加简单比较实现)。


九、给工程师的两点提醒

  • 别被「例程」二字轻视:这个例程的 PID 是手写增量式,比很多「拖个 PID_Compact 就完事」的工程更适合学习和改。想做前馈、泵切换、休眠,全在自己代码里。
  • 模拟量一定要标度:新手最常踩的坑是「读出来是 0–27648 直接当压力用」「输出没乘系数变频器不转」。务必用 NORM_X/SCALE_X 串好工程量。
  • 注意 4–20 mA 断线:压力变送器若断线,AI 会掉到 < 5530 甚至 0,PID 会误判「压力为 0」而满频输出。实际工程要加断线检测 + 故障限频/停泵保护(本精简例程未包含,上线前务必补)。

十、常见问题 FAQ

Q1:S7-1200 恒压供水程序用什么软件打开? A:用 TIA Portal(博途) 打开 .ap14 项目(V14 及以上版本均可,会自动迁移)。这是 TIA 工程,不能用 STEP 7 V5.x。

Q2:恒压供水的 PID 是怎么控制的? A:压力变送器测管网压力(反馈值),与设定值比较得误差;FB「PID_1」用增量式 PID 算控制量,经模拟量输出给变频器调水泵转速,使压力恒定在设定值附近。用水量变化 → 自动调速。

Q3:S7-1200 怎么接压力变送器(4–20 mA)? A:变送器接到 CPU 板载模拟量输入(本工程 %IW64),在程序里用 NORM_X/SCALE_X 把 5530–27648 映射到工程量压力(如 0.00–1.00 MPa)。

Q4:PID_Compact 和手写 PID 该选哪个? A:PID_Compact 是西门子自带工艺对象,带自整定、省事;手写 PID(如本工程 FB「PID_1」)更透明、可定制、好教学。学习/二次开发选手写 PID,赶进度用 PID_Compact。

Q5:压力老是稳不住 / 一直抖怎么办? A:先调比例 p值(太大易振荡,太小响应慢),再加积分消静差,最后用 PID死区 消除设定点附近抖动;输出务必限幅。

Q6:想做「一拖二」双泵恒压供水能改吗? A:能。本工程已预留第二路模拟量输出 %QW200,在主泵到 50 Hz 仍压力不足时投备泵即可,切换逻辑在 OB1 里加比较实现。


十一、结语 + 资源

这套 S7-1200 恒压供水 PID 工程,是一份难得的、变量全中文、PID 手写的透明样本:它用增量式 PID 做闭环、用死区+限幅保安全、用数据块存参数方便整定、用双模拟量输出预留扩展,对做小区/楼宇/工厂恒压供水、冷却循环水、恒压补水的工程师非常有借鉴价值。

*本文所有结论均来自对工程文件(.ap14 项目元数据 + System/PEData.plf 内部数据库)的逐文件解析,硬件型号、块结构、FB「PID_1」接口变量与 I/O 地址均直接提取,未做任何外部臆测。

技术术语(共 2 个)—— 点击展开
PLC可编程逻辑控制器,工业自动化控制的核心设备
传感器将物理量转换为电信号的检测装置
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 PLC 工程包 字数 6365 字 · 阅读约 16 分钟 更新 2026-07-18 永久链接 https://www.modbus.cn/46845.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注