工业级恒压供水系统解决方案,包含系统架构设计、硬件配置、PLC 程序设计、PID 调节、变频器通讯和上位机组态。
一、系统总体设计
1. 系统架构图
┌─────────────────────────────────────────────────────────────────┐
│ 恒压供水系统架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 压力传感器(4-20mA) ──▶ 模拟量输入模块(SM331) ──▶ S7-300 PLC │
│ │
│ 液位传感器(4-20mA) ──▶ 模拟量输入模块(SM331) ──▶ CPU 315-2DP │
│ │
│ PLC ──▶ PROFIBUS-DP ──▶ 变频器(ABB ACS510) ──▶ 水泵电机 │
│ │ │
│ ├──▶ 数字量输出 ──▶ 接触器 ──▶ 备用水泵 │
│ │ │
│ └──▶ Ethernet ──▶ 上位机(WinCC) ──▶ 监控与数据记录 │
│ │
└─────────────────────────────────────────────────────────────────┘
2. 控制原理
| 控制方式 |
说明 |
| PID闭环控制 |
根据管网压力反馈自动调节变频器频率 |
| 变频调速 |
通过改变电机转速实现恒压供水 |
| 多泵切换 |
主泵+备用泵自动轮换,故障切换 |
| 休眠功能 |
夜间低流量时停泵,保压休眠 |
| 节能运行 |
根据用水量自动调节运行频率 |
二、硬件配置清单
1. PLC 硬件配置(STEP 7 硬件组态)
| 模块 |
型号 |
数量 |
功能 |
| 电源模块 |
PS 307 5A |
1 |
24V DC 供电 |
| CPU |
CPU 315-2 DP |
1 |
主控制器,带PROFIBUS接口 |
| 数字量输入 |
SM 321 DI16×DC24V |
1 |
按钮、限位开关、故障信号 |
| 数字量输出 |
SM 322 DO16×DC24V |
1 |
接触器、指示灯、报警器 |
| 模拟量输入 |
SM 331 AI8×12Bit |
1 |
压力、液位、流量信号 |
| 模拟量输出 |
SM 332 AO4×12Bit |
1 |
变频器速度给定 |
2. 现场设备清单
| 设备 |
规格 |
数量 |
备注 |
| 变频器 |
ABB ACS510-01-025A-4 |
2 |
11kW,PROFIBUS-DP通讯 |
| 压力变送器 |
E+H PMC51 |
2 |
0-1.6MPa,4-20mA |
| 液位变送器 |
E+H FMP40 |
1 |
0-5m,4-20mA |
| 水泵 |
ISG80-160 |
2 |
11kW,2900rpm |
| 接触器 |
LC1-D2510 |
4 |
控制水泵启停 |
| 断路器 |
NSX100N |
2 |
电机保护 |
三、PLC 程序设计
1. 变量定义(符号表)
// 系统参数
MW10 设定压力值 REAL // 目标压力 (bar)
MW20 实际压力值 REAL // 当前压力 (bar)
MW30 PID输出值 REAL // 变频器频率 (%)
MW40 运行模式 INT // 0=手动, 1=自动
MW50 当前泵号 INT // 1=1#泵, 2=2#泵
MW60 系统状态 INT // 0=停止, 1=运行, 2=故障
// 模拟量
PIW256 压力反馈 INT // 压力传感器输入 (0-27648)
PIW258 液位反馈 INT // 液位传感器输入 (0-27648)
PQW260 频率输出 INT // 变频器速度给定 (0-27648)
// 数字量
I0.0 启动按钮 BOOL
I0.1 停止按钮 BOOL
I0.2 1#泵故障 BOOL
I0.3 2#泵故障 BOOL
I0.4 缺水保护 BOOL
I0.5 超压保护 BOOL
Q0.0 1#泵运行 BOOL
Q0.1 2#泵运行 BOOL
Q0.2 报警指示 BOOL
Q0.3 系统运行指示 BOOL
2. 主程序(OB1)
ORGANIZATION_BLOCK OB1
VAR_TEMP
Temp_Real : REAL;
END_VAR
BEGIN
// 系统初始化
CALL FC1; // 初始化功能块
// 模拟量采集与转换
CALL FC10; // 模拟量处理
// 运行模式选择
IF "运行模式" = 0 THEN
CALL FC20; // 手动控制
ELSE
CALL FC30; // 自动控制
END_IF;
// PID调节
CALL FB41; // PID控制器
// 多泵逻辑控制
CALL FC40; // 水泵切换逻辑
// 变频器通讯
CALL FB125; // PROFIBUS通讯
// 故障检测与保护
CALL FC50; // 安全保护
// 数据记录与上位机通讯
CALL FC60; // 数据交换
END_ORGANIZATION_BLOCK
3. 模拟量处理(FC10)
FUNCTION FC10 : VOID
VAR_INPUT
Pressure_Raw : INT; // 原始压力值 (0-27648)
Level_Raw : INT; // 原始液位值 (0-27648)
END_VAR
VAR_OUTPUT
Pressure_Real : REAL; // 转换后压力 (bar)
Level_Real : REAL; // 转换后液位 (m)
END_VAR
BEGIN
// 压力转换 (0-1.6MPa 对应 0-27648)
Pressure_Real := INT_TO_REAL(Pressure_Raw) * 1.6 / 27648.0;
// 液位转换 (0-5m 对应 0-27648)
Level_Real := INT_TO_REAL(Level_Raw) * 5.0 / 27648.0;
// 滤波处理
Pressure_Real := (Pressure_Real + "上次压力值") / 2.0;
// 更新全局变量
"实际压力值" := Pressure_Real;
"实际液位值" := Level_Real;
END_FUNCTION
4. PID 控制器(FB41 - CONT_C)
FUNCTION_BLOCK FB41
VAR_INPUT
COM_RST : BOOL := FALSE; // 完全重启
MAN_ON : BOOL := FALSE; // 手动模式
PVPER_ON : BOOL := FALSE; // 外部过程值
P_SEL : BOOL := TRUE; // 比例作用
I_SEL : BOOL := TRUE; // 积分作用
D_SEL : BOOL := FALSE; // 微分作用
CYCLE : TIME := T#100ms; // 采样周期
SP_INT : REAL := 0.5; // 内部设定值 (bar)
PV_IN : REAL; // 过程值输入
PV_PER : WORD; // 外部过程值
MAN : REAL; // 手动值
GAIN : REAL := 2.0; // 比例增益
TI : TIME := T#20s; // 积分时间
TD : TIME := T#10s; // 微分时间
DEADB_W : REAL := 0.02; // 死区宽度
END_VAR
VAR_OUTPUT
LMN : REAL; // 控制器输出
LMN_PER : WORD; // 外部输出
QLMN_HLM : BOOL; // 输出上限报警
QLMN_LLM : BOOL; // 输出下限报警
END_VAR
VAR
PID : FB_PID; // PID实例
END_VAR
BEGIN
// 设定目标压力
SP_INT := "设定压力值";
// 过程值输入
PV_IN := "实际压力值";
// 调用PID算法
PID(
COM_RST := COM_RST,
MAN_ON := MAN_ON,
PVPER_ON := PVPER_ON,
P_SEL := P_SEL,
I_SEL := I_SEL,
D_SEL := D_SEL,
CYCLE := CYCLE,
SP_INT := SP_INT,
PV_IN := PV_IN,
MAN := MAN,
GAIN := GAIN,
TI := TI,
TD := TD,
DEADB_W := DEADB_W,
LMN => LMN,
LMN_PER => LMN_PER
);
// 输出限幅 (20-50Hz)
IF LMN < 20.0 THEN
LMN := 20.0;
ELSIF LMN > 50.0 THEN
LMN := 50.0;
END_IF;
// 更新全局输出
"PID输出值" := LMN;
END_FUNCTION_BLOCK
5. 多泵切换逻辑(FC40)
FUNCTION FC40 : VOID
VAR_STATIC
Pump_Runtime[1..2] : TIME; // 泵运行时间
Last_Switch_Time : TIME; // 上次切换时间
Switch_Delay : TIME := T#3600s; // 切换延时1小时
END_VAR
BEGIN
// 泵运行时间累计
IF "1#泵运行" THEN
Pump_Runtime[1] := Pump_Runtime[1] + T#1s;
END_IF;
IF "2#泵运行" THEN
Pump_Runtime[2] := Pump_Runtime[2] + T#1s;
END_IF;
// 自动切换逻辑
IF "运行模式" = 1 AND "系统状态" = 1 THEN
// 主泵运行
IF "当前泵号" = 1 THEN
"1#泵运行" := TRUE;
"2#泵运行" := FALSE;
// 运行时间到,切换到备用泵
IF Pump_Runtime[1] >= Switch_Delay THEN
"当前泵号" := 2;
Pump_Runtime[1] := T#0s;
END_IF;
// 主泵故障,切换到备用泵
IF "1#泵故障" THEN
"当前泵号" := 2;
"报警指示" := TRUE;
END_IF;
// 备用泵运行
ELSE
"1#泵运行" := FALSE;
"2#泵运行" := TRUE;
// 运行时间到,切换回主泵
IF Pump_Runtime[2] >= Switch_Delay THEN
"当前泵号" := 1;
Pump_Runtime[2] := T#0s;
END_IF;
// 备用泵故障,切换回主泵
IF "2#泵故障" THEN
"当前泵号" := 1;
"报警指示" := TRUE;
END_IF;
END_IF;
END_IF;
// 休眠功能(低流量时停泵)
IF "实际压力值" > "设定压力值" + 0.1 AND "PID输出值" < 25.0 THEN
"1#泵运行" := FALSE;
"2#泵运行" := FALSE;
"系统状态" := 0; // 进入休眠
END_IF;
END_FUNCTION
6. 变频器通讯(FB125 - PROFIBUS)
FUNCTION_BLOCK FB125
VAR_INPUT
Start : BOOL; // 启动命令
Stop : BOOL; // 停止命令
Speed_SP : REAL; // 速度设定 (%)
END_VAR
VAR_OUTPUT
Speed_Act : REAL; // 实际速度 (%)
Current : REAL; // 电机电流 (A)
Fault : BOOL; // 故障状态
Ready : BOOL; // 就绪状态
END_VAR
VAR
Comm_Data : ARRAY[0..15] OF BYTE; // 通讯数据
END_VAR
BEGIN
// PROFIBUS-DP通讯
// 发送数据到变频器
Comm_Data[0] := REAL_TO_BYTE(Speed_SP); // 速度设定
Comm_Data[1] := 16#01; // 启动命令
// 接收数据从变频器
Speed_Act := BYTE_TO_REAL(Comm_Data[2]); // 实际速度
Current := BYTE_TO_REAL(Comm_Data[3]); // 电流
Fault := Comm_Data[4] = 16#01; // 故障状态
Ready := Comm_Data[5] = 16#01; // 就绪状态
// 更新模拟量输出
"PQW260" := REAL_TO_INT(Speed_SP * 27648.0 / 100.0);
END_FUNCTION_BLOCK
7. 安全保护(FC50)
FUNCTION FC50 : VOID
BEGIN
// 缺水保护
IF "实际液位值" < 0.5 THEN // 液位低于0.5m
"1#泵运行" := FALSE;
"2#泵运行" := FALSE;
"报警指示" := TRUE;
"系统状态" := 2; // 故障状态
END_IF;
// 超压保护
IF "实际压力值" > 1.8 THEN // 压力超过1.8MPa
"1#泵运行" := FALSE;
"2#泵运行" := FALSE;
"报警指示" := TRUE;
"系统状态" := 2;
END_IF;
// 电机过载保护
IF "1#泵故障" OR "2#泵故障" THEN
"报警指示" := TRUE;
"系统状态" := 2;
END_IF;
// 紧急停止
IF "停止按钮" THEN
"1#泵运行" := FALSE;
"2#泵运行" := FALSE;
"系统状态" := 0;
END_IF;
END_FUNCTION
四、WinCC 上位机组态
1. 画面设计
┌─────────────────────────────────────────────────────────────┐
│ 恒压供水监控系统 │
├─────────────────────────────────────────────────────────────┤
│ [系统概览] [实时曲线] [历史数据] [报警记录] [参数设置] [帮助] │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────┐ │
│ │ 工艺流程图 │ │ 实时数据面板 │ │
│ │ │ │ │ │
│ │ [水池] ──▶ [泵1] │ │ 设定压力: 0.50 MPa │ │
│ │ ↓ ↓ │ │ 实际压力: 0.48 MPa │ │
│ │ [泵2] ──▶ [管网] │ │ 运行频率: 35.2 Hz │ │
│ │ ↓ ↓ │ │ 电机电流: 12.5 A │ │
│ │ [用户] ──▶ [出口] │ │ 运行时间: 1256.5 h │ │
│ │ │ │ 当前泵号: 1#泵 │ │
│ │ ●运行 ○停止 ●故障 │ │ 系统状态: 正常运行 │ │
│ └─────────────────────┘ └─────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 压力趋势图 │ │
│ │ │ │
│ │ 0.6 ┤ │ │
│ │ 0.5 ┤ ╱╲ │ │
│ │ 0.4 ┤ ╱ ╲ │ │
│ │ 0.3 ┤ ╱ ╲ │ │
│ │ 0.2 ┤ ╱ ╲ │ │
│ │ 0.1 ┤╱ ╲ │ │
│ │ 0.0 ┼──────────╲───────────────────────────────────│ │
│ │ 10:00 11:00 12:00 13:00 14:00 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
2. 变量连接表
| WinCC变量名 |
PLC地址 |
数据类型 |
说明 |
| Set_Pressure |
MW10 |
Float |
设定压力 |
| Act_Pressure |
MW20 |
Float |
实际压力 |
| Pump_Speed |
MW30 |
Float |
泵转速 |
| Run_Status |
MW60 |
Int |
运行状态 |
| Pump1_Run |
Q0.0 |
Bool |
1#泵运行 |
| Alarm_Status |
Q0.2 |
Bool |
报警状态 |
五、PID 参数整定
1. 整定步骤
1. 关闭积分和微分作用 (Ti=∞,Td=0)
2. 逐渐增大比例增益 Kp,直到系统出现临界振荡
3. 记录临界增益 Ku 和临界周期 Tu
4. 按Ziegler-Nichols公式计算PID参数:
- Kp = 0.6 × Ku
- Ti = 0.5 × Tu
- Td = 0.125 × Tu
2. 推荐参数
| 系统类型 |
Kp |
Ti(s) |
Td(s) |
| 恒压供水 |
2.0 |
20 |
5 |
| 快速响应 |
3.5 |
15 |
3 |
| 稳定优先 |
1.2 |
30 |
8 |
参考代码 S7300 PLC写的恒压供水系统 www.youwenfan.com/contentcsv/112929.html
六、系统调试
1. 调试流程
1. I/O检查
├── 模拟量输入校准 (4-20mA对应0-27648)
├── 数字量输入输出测试
└── 变频器通讯测试
2. 单机测试
├── 手动启停水泵
├── 变频器本地控制
└── 阀门开度检查
3. 联动测试
├── PID闭环控制
├── 多泵切换逻辑
└── 故障保护功能
4. 负载测试
├── 不同用水量下的压力稳定性
├── 长时间运行可靠性
└── 节能效果评估
2. 常见问题处理
| 问题 |
原因 |
解决方法 |
| 压力波动大 |
PID参数不合适 |
减小Kp,增大Ti |
| 响应慢 |
比例增益太小 |
增大Kp |
| 超调量大 |
积分时间太短 |
增大Ti |
| 变频器不启动 |
通讯故障 |
检查PROFIBUS地址和电缆 |
| 压力不准 |
传感器零点漂移 |
重新校准传感器 |
七、项目文件结构
S7-300_Water_Supply/
├── STEP7_Project/
│ ├── Blocks/
│ │ ├── OB1.AWL # 主程序
│ │ ├── FB41.AWL # PID控制器
│ │ ├── FC1.AWL # 初始化
│ │ ├── FC10.AWL # 模拟量处理
│ │ ├── FC30.AWL # 自动控制
│ │ └── FC50.AWL # 安全保护
│ ├── Symbols/
│ │ └── Symbol.sdf # 符号表
│ └── Hardware/
│ └── Config.hwc # 硬件组态
├── WinCC_Project/
│ ├── Pictures/
│ │ ├── Main.pdl # 主画面
│ │ ├── Trend.pdl # 趋势图
│ │ └── Alarm.pdl # 报警画面
│ └── Tags/
│ └── Tag.csv # 变量表
├── Documents/
│ ├── Design_Spec.pdf # 设计说明书
│ ├── IO_List.xlsx # I/O清单
│ ├── PID_Tuning.pdf # PID整定报告
│ └── Test_Report.pdf # 测试报告
└── README.md
八、系统扩展功能
1. 远程监控
// 通过GPRS/4G远程监控
CALL FB100; // 远程通讯模块
IP_Address := "192.168.1.100";
Port := 502;
Data_Send := "系统状态数据";
END_CALL;
2. 能耗管理
// 电能计量
Energy_Consumption := Energy_Consumption + Current * Voltage * Time;
3. 预测性维护
// 轴承温度监测
IF Bearing_Temp > 80.0 THEN
Maintenance_Alert := TRUE;
END_IF;
这个恒压供水系统采用标准的工业控制架构,具有良好的稳定性、可靠性和可维护性。系统支持多种运行模式,具备完善的保护功能,能够满足不同场合的供水需求。
所有评论(0)