1. 项目背景与核心需求
去年接手的一个工业废水处理项目里,我负责设计溢流水循环系统的自动化控制方案。这个系统需要实时监测6个不同工艺段的液位状态,通过西门子S7-1200 PLC控制12台泵阀设备,实现三级溢流保护和水资源循环利用。系统最关键的难点在于要处理突发性大流量进水(实测峰值可达80m³/h)的同时,确保任何情况下都不会发生溢流事故。
选择博途V16作为开发平台主要基于三点考虑:一是项目后期需要与TP1200触摸屏做深度交互,二是系统需要集成PID调节功能来控制回流速度,三是考虑到未来可能扩展物联网接口。实际开发过程中发现,这种涉及多重安全联锁的系统,单纯靠梯形图编程会非常吃力,最终采用了SCL+梯形图混合编程的模式。
2. 硬件架构设计要点
2.1 设备选型逻辑
主控PLC选用S7-1215C DC/DC/DC型号,主要看中其:
- 自带2个PROFINET端口(一个用于触摸屏,一个预留)
- 支持4个高速计数器(用于流量计脉冲采集)
- 14点数字量输入(DI)刚好满足6个液位开关+6个阀位反馈+2个急停信号
- 10点数字量输出(DO)控制6台泵+4个气动阀
特别说明:为什么没选更便宜的S7-1214C?因为需要同时处理:
- 4-20mA模拟量输入(6路液位传感器)
- 2路PT100温度检测(循环水温度监控)
- 1路模拟量输出(调节回流阀开度)
2.2 安全回路设计
所有急停信号采用硬线连接(未通过PLC),形成独立的安全回路。包括:
- 现场急停按钮(常闭触点)
- 配电柜门磁开关
- 电机热继电器信号
- 液位超高限位开关(机械式)
这些信号串联后直接切断主接触器线圈电源,响应时间<50ms,符合GB 5226.1-2019要求。PLC程序里也做了对应的软件互锁,但只是作为二级保护。
3. 软件核心逻辑实现
3.1 主控制流程架构
采用模块化编程结构,主要OB块分工:
- OB1:主循环(调度其他FB)
- OB35:100ms定时中断(处理快速响应逻辑)
- OB82:诊断错误处理
- OB86:机架故障处理
关键功能块:
pascal复制// 液位分级控制FB
IF "液位传感器1" > 80.0 THEN
"一级溢流阀" := TRUE;
"回流泵1" := TRUE;
ELSIF "液位传感器1" > 70.0 THEN
"预警指示灯" := TRUE;
// 启动PID调节
"PID_回流控制".EN := TRUE;
END_IF;
3.2 抗干扰处理技巧
现场调试时发现几个典型问题:
- 液位信号跳变:在SCL中增加移动平均滤波
pascal复制// 10次采样移动平均
"液位滤波值" := ("液位滤波值" * 9 + "液位原始值") / 10;
- 泵频繁启停:增加延时判断
pascal复制IF "泵运行反馈" AND NOT "泵启动命令" THEN
"泵异常计时" := "泵异常计时" + 1;
IF "泵异常计时" > 50 THEN // 5秒超时
"故障报警" := TRUE;
END_IF;
END_IF;
4. 触摸屏交互设计
4.1 TP1200画面规划
共设计7个主要画面:
- 工艺总览(带动态流程图)
- 参数设置(密码保护)
- 趋势记录(存储30天数据)
- 报警历史(带确认功能)
- 手动操作(权限分级)
- 系统诊断
- 维护提醒
特别优化了报警显示逻辑:
- 一级报警(红色):立即弹出中断画面
- 二级报警(黄色):底部状态栏闪烁
- 三级提示(蓝色):仅记录不显示
4.2 数据记录方案
使用PLC的DB块做循环存储:
pascal复制// 每小时记录一次数据
IF "记录触发" THEN
"历史数据".PTR := "历史数据".PTR + 1;
IF "历史数据".PTR > 720 THEN // 30天*24小时
"历史数据".PTR := 1;
END_IF;
"历史数据".时间["历史数据".PTR] := "当前时间";
"历史数据".液位["历史数据".PTR] := "液位滤波值";
END_IF;
5. 现场调试避坑指南
5.1 典型故障排查表
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 液位显示波动大 | 传感器接地不良 | 1. 检查屏蔽层接地 2. 测量信号端对地电压 3. 套磁环测试 |
| 泵启动后立即跳闸 | 软启动参数不当 | 1. 检查启动电流曲线 2. 调整转矩提升参数 3. 延长加速时间 |
| 触摸屏通讯中断 | IP地址冲突 | 1. Ping测试物理连接 2. 检查PROFINET名称 3. 确认GSD文件版本 |
5.2 重要参数设置
- PROFINET通讯:
- 设备名称必须与硬件配置完全一致
- 同步周期建议设为2ms
- 开启MRP环网检测(如果有冗余网络)
- 时钟同步:
pascal复制// 每小时同步一次PLC时钟
IF "时钟同步标志" THEN
"系统时间" := "HMI.时间";
"时钟同步标志" := FALSE;
END_IF;
6. 系统优化经验
- 内存优化技巧:
- 将频繁访问的变量放在DB块的开始位置
- 对大型数组使用优化块访问
- 关闭非必要的诊断功能
- 程序维护建议:
- 所有FB/FC接口变量必须添加注释
- 重要修改必须更新交叉引用表
- 定期进行离线备份(建议每周一次)
- 扩展性考虑:
- 预留20%的IO余量
- DB块地址预留扩展空间
- 网络负载控制在70%以下
这套系统连续运行一年后,水循环利用率从原来的60%提升到92%,意外停机次数从月均3.2次降到0.5次。最让我意外的是通过优化控制逻辑,每年竟节省了15%的电耗——这比最初预估的8%高出近一倍。
