自动水位控制的核心逻辑是:通过水位传感器采集液位信号,S7-1200 依据液位值判断水泵(由 ACS510 驱动)的启停 / 调速,最终将水位稳定在设定区间内。以下是完整的实现流程,包含硬件选型、控制逻辑、程序编写及参数优化。
一、 系统整体架构
plaintext
水位传感器(模拟量/数字量)→ S7-1200 PLC → Modbus RTU → ABB ACS510 → 水泵 ↑ ↓ 上位机/本地HMI(监控/参数设置) 水位反馈(闭环调节)
核心逻辑:
二、 硬件补充选型(基于原有通讯硬件)
| 设备 | 型号 / 规格 | 作用 |
|---|---|---|
| 水位传感器 | 投入式液位变送器(4-20mA 输出) | 采集实时水位,输出模拟量信号 |
| 模拟量模块 | S7-1200 SM 1231 AI(6ES7 231-4HD32-0XB0) | 接收传感器的 4-20mA 信号 |
| 水泵 | 离心泵 / 潜水泵 | 由 ACS510 驱动补水 / 排水 |
| 继电器模块(可选) | 24V 继电器 | 故障报警(如声光报警器) |
硬件接线补充
三、 核心参数定义(PLC 内部变量)
在 TIA Portal 中定义以下变量,便于程序编写和监控:
| 变量地址 | 变量名 | 类型 | 说明 | 示例值 |
|---|---|---|---|---|
| VW100 | AI_Raw | INT | AI 模块采集的 4-20mA 原始值 | 0-27648(对应 4-20mA) |
| VW102 | Water_Level | REAL | 实际水位值(米) | 0-5.0m(根据传感器量程) |
| VW106 | Level_Set | REAL | 水位设定值(目标值) | 2.5m |
| VW110 | Level_Low | REAL | 低水位阈值(启动泵) | 1.0m |
| VW114 | Level_High | REAL | 高水位阈值(停止泵) | 4.0m |
| VW118 | Pump_Freq_Set | INT | 水泵频率给定值(0.01Hz) | 5000(对应 50Hz) |
| VW122 | Pump_Run | BOOL | 水泵运行指令(1 = 运行,0 = 停止) | 1 |
| VW123 | Fault_Alarm | BOOL | 故障报警(传感器 / 变频器故障) | 0 |
四、 控制逻辑设计(两种模式可选)
模式 1:启停控制(简单版,适合小量程)
逻辑规则:
模式 2:PID 变频控制(精准版,适合大范围 / 高精度)
逻辑规则:
五、 程序编写步骤(TIA Portal)
步骤 1:模拟量采集与标度转换(AI 信号→实际水位)
4-20mA 液位传感器的标度转换公式:
plaintext
实际水位 = (AI原始值 - 4mA对应值) / (20mA对应值 - 4mA对应值) × (传感器量程上限 - 量程下限) + 量程下限
示例(传感器量程 0-5m,4mA=0m,20mA=5m):
plaintext
// OB1 中编写标度转换程序 L "AI_Raw"; // 读取 AI 模块原始值(VW100) L 5530; // 4mA 对应的原始值(27648×4/20=5530) -I; // 差值 = 原始值 - 5530 L 22118; // 20mA-4mA 差值(27648-5530=22118) /R; // 归一化(0-1) L 5.0; // 传感器量程上限(5m) *R; // 乘以量程,得到实际水位 T "Water_Level"; // 存储到 VW102(REAL 型)
步骤 2:启停控制程序(调用 Modbus 写指令)
plaintext
// 1. 低水位启动水泵 A "Water_Level" < "Level_Low"; // 水位低于低阈值 = "Pump_Run"; // 置位运行指令(VW122) // 2. 高水位停止水泵 A "Water_Level" > "Level_High"; AN "Pump_Run"; // 复位运行指令 // 3. 调用 MB_CLIENT 写指令,控制变频器 CALL "MB_CLIENT", "Modbus_Write"; REQ := "Pump_Run"; // 上升沿触发(可加边沿检测) ADDR := 1; // 变频器站地址 MODE := 1; // 写操作 DATA_ADDR := 40001; // 变频器控制字寄存器 DATA_LEN := 2; // 写入2个寄存器(控制字+频率) DATA_PTR := &"Pump_Control"; // 指向 VW200(控制字)+ VW202(频率) PORT := 1; // CM1241 端口号 DONE := "Write_Done"; // 写完成标志 ERROR := "Write_Error"; // 写错误标志 STATUS := "Write_Status"; // 错误代码 // 赋值控制字和频率 L "Pump_Run"; JC RUN; // 运行分支 L 0; // 控制字=0(停止) T VW200; JMP END; RUN: L 1; // 控制字=1(运行) T VW200; L 5000; // 频率=5000(50Hz) T VW202; END: NOP 0;
步骤 3:PID 变频控制程序(调用 PID_Compact 指令)
步骤 4:故障保护程序
plaintext
// 1. 传感器故障检测(AI 信号超出 4-20mA 范围) A "AI_Raw" < 5000; // 低于 4mA,传感器断线 O "AI_Raw" > 28000;// 高于 20mA,传感器短路 = "Fault_Alarm"; // 置位故障报警 // 2. 变频器故障检测(读取故障代码寄存器) CALL "MB_CLIENT", "Modbus_Read_Fault"; REQ := "Read_Fault_Trig"; ADDR := 1; MODE := 0; // 读操作 DATA_ADDR := 30004; // 故障代码寄存器 DATA_LEN := 1; DATA_PTR := &"Fault_Code"; // VW300,故障代码 PORT := 1; // 3. 故障时停止水泵 A "Fault_Alarm"; O "Fault_Code" <> 0; // 变频器故障代码非0 = "Pump_Stop"; // 复位水泵运行指令 = "Alarm_Light"; // 触发声光报警
六、 变频器参数补充设置(ACS510)
除原有 Modbus 参数外,需增加水泵适配参数:
| 参数号 | 参数名称 | 设置值 | 说明 |
|---|---|---|---|
| 9908 | 电机额定电流 | 水泵电机额定电流 | 保护电机过载 |
| 2001 | 最小频率 | 10Hz | 避免水泵低频运行烧毁 |
| 2002 | 最大频率 | 50Hz | 限制水泵最高转速 |
| 2201 | 加速时间 | 5s | 根据水泵特性调节 |
| 2202 | 减速时间 | 5s | 避免水锤效应 |
| 3001 | 故障复位选择 | 1(通讯复位) | 支持 PLC 远程复位故障 |
七、 调试与优化
八、 常见问题及解决方法
| 问题现象 | 原因 | 解决方法 |
|---|---|---|
| 水位显示波动大 | 传感器受水泵振动干扰 | 传感器加装阻尼器,程序中加滤波(如平均值滤波) |
| 水泵启动后水位不上升 | 变频器频率给定错误 / 水泵反转 | 检查 Modbus 频率寄存器写入值,调换水泵电机相序 |
| PID 调节震荡 | 比例增益过大 / 积分时间过短 | 减小 GAIN,增大 TI(如改为 15s) |
| 故障报警误触发 | 传感器信号受干扰 | 传感器电缆与动力电缆分开敷设,增加屏蔽层接地 |

