1. 项目背景与核心价值
恒压供水系统是工业自动化领域最常见的应用场景之一,也是PLC编程入门的经典案例。三菱FX系列PLC凭借其稳定性和性价比,在国内中小型供水项目中占据着重要市场份额。这次要拆解的实战代码来自某小区二次供水改造项目,系统要求维持管网压力在0.35MPa±0.02MPa范围内,需要处理水泵切换、休眠唤醒、故障联锁等典型逻辑。
这套代码最值得学习的地方在于:
- 采用模块化编程思想,将压力控制、设备轮换、报警处理等逻辑分离
- 实现了真正的"一用一备"泵组控制策略
- 包含完整的PID参数自整定逻辑
- 设置了详细的设备运行时间统计功能
2. 系统硬件架构解析
2.1 主要设备清单
| 设备类型 | 型号规格 | 数量 | 备注 |
|---|---|---|---|
| PLC主机 | FX3U-48MR | 1 | 继电器输出型 |
| 模拟量模块 | FX3U-4AD | 1 | 4通道12位AD |
| 压力变送器 | EJA530A | 2 | 4-20mA输出,1备1用 |
| 变频器 | FR-D720S-0.4K-CHT | 2 | 0.4kW,1控1备 |
| 水泵机组 | CR15-6 | 2 | 1用1备配置 |
2.2 关键接线要点
- 压力信号采用双通道冗余输入,通过X0/X1端子接入PLC
- 变频器启停控制使用Y0-Y3输出点
- 模拟量输出通过FX3U-4AD的CH1通道连接主变频器
- 急停按钮直接串联在控制回路中(硬件级保护)
重要提示:压力变送器必须安装在距泵出口5-8倍管径处,避免水流扰动影响测量精度
3. 程序结构深度剖析
3.1 主程序流程图
ladder复制[主程序OB1]
├─[压力采集处理FB1]
├─[PID运算FB2]
├─[泵组控制FB3]
├─[报警处理FB4]
└─[数据记录FB5]
3.2 核心功能块详解
3.2.1 压力采集处理(FB1)
采用中位值平均滤波算法,程序片段:
st复制// 压力采样滤波处理
IF T20 THEN
MOV K5 D100 // 采样次数
MOV K0 D101 // 累加值
FOR K1 TO D100
MOV D200 D300 // 读取AD值
ADD D300 D101 D101
NEXT
DIV D101 D100 D102 // 平均值
END_IF
3.2.2 PID控制算法(FB2)
使用增量式PID公式:
code复制Δu(k) = Kp[e(k)-e(k-1)] + Ki*e(k) + Kd[e(k)-2e(k-1)+e(k-2)]
参数整定经验值:
- 比例带P=40%
- 积分时间Ti=30s
- 微分时间Td=5s
3.2.3 泵组轮换逻辑(FB3)
实现要点:
- 累计运行时间差值>2小时触发切换
- 切换时先启动备用泵,再停止原运行泵
- 最小运行时间保护(>10分钟)
4. 关键问题解决方案
4.1 水锤现象抑制
通过梯形图实现软启停控制:
ladder复制LD M100 // 启动命令
OUT T0 K50 // 加速时间5秒
MOV K0 D200 // 初始频率
LD T0
OUT INC D200 // 频率递增
4.2 变频器干扰处理
- 模拟量信号采用双绞屏蔽线
- PLC侧加装信号隔离器
- 程序增加突变值过滤:
st复制SUB D102 D103 D104 // 本次与上次差值
CMP D104 K100 // 变化量阈值
LD M8000
AND <=
OUT M50 // 有效信号标志
5. 调试经验与参数优化
5.1 现场调试步骤
- 先测试手动模式各泵独立运行
- 校准压力变送器零点和量程
- 设置PID初始参数
- 进行阶跃响应测试
- 根据波形调整PID参数
5.2 典型问题处理记录
| 现象 | 排查方法 | 解决方案 |
|---|---|---|
| 压力波动大 | 检查采样周期与PID周期是否匹配 | 将PID运算周期调整为200ms |
| 备用泵无法自动启动 | 监控辅助继电器状态 | 修正M205触点的自锁逻辑 |
| 变频器报过载 | 检查加速时间参数 | 将C1-01参数从5s改为10s |
6. 系统扩展建议
- 增加Modbus RTU通讯功能,可接入上位机监控
- 添加压力-流量复合控制模式
- 实现手机APP远程监控(需加装通讯模块)
- 增加能效计算功能,统计耗电量数据
这套代码经过3个实际项目验证,最关键的体会是:PID参数必须结合管网特性调整,教科书推荐值往往需要根据实际工况优化。另外建议在程序初始化段加入设备检测逻辑,可提前发现传感器故障等问题。