这套基于西门子S7-1200 PLC的污水处理控制系统,是我去年为某食品厂中水回用项目开发的实战方案。系统包含PLC程序、HMI组态、电气图纸三大核心模块,完整实现了从机械格栅到消毒池的全流程自动化控制。相比市面上常见的教学Demo,这套系统最显著的特点是采用了工业现场验证过的三重安全机制:
整个PLC程序采用"金字塔型"分层结构,从下至上分为设备层、功能层、工艺层三个层级:
code复制设备层(FC块)
├─ 泵阀控制FC1
├─ 仪表读取FC2
└─ 报警处理FC3
功能层(FB块)
├─ 过滤反洗FB1000
├─ 曝气控制FB2000
└─ 污泥回流FB3000
工艺层(OB块)
├─ 主循环OB1
├─ 中断OB35
└─ 故障OB82
特别值得关注的是曝气控制功能块(FB2000)中的PID参数自整定算法,通过在线识别系统滞后时间τ和增益K,自动计算最优PID参数:
code复制IF "Auto_Tune" THEN
// 计算过程增益K=(ΔPV)/(ΔMV)
"Process_Gain" := ("PV"-"Last_PV") / ("MV"-"Last_MV");
// 通过拐点法识别滞后时间
IF ("PV" > 0.632*"Steady_Value") AND ("Tau"=0) THEN
"Tau" := "Current_Time" - "Step_Time";
END_IF;
END_IF;
污水处理的核心是SBR(序批式反应器)工艺,程序用枚举变量明确定义了5个状态:
code复制TYPE SBR_State :
(
IDLE := 0, // 待机
FILLING := 1, // 注水
AERATION := 2, // 曝气
SETTLING := 3, // 沉淀
DECANTING := 4 // 排水
);
END_TYPE
状态转换条件通过结构化文本清晰表述,例如从曝气到沉淀的转换逻辑:
code复制IF "Aeration_Time" >= "Set_Aeration_Time" THEN
IF "DO_Level" < 2.0 OR "NH3N_Value" < 15.0 THEN
"Current_State" := SETTLING;
"Settling_Timer" := 0;
END_IF;
END_IF;
系统需要采集4台智能仪表的实时数据,采用分时复用方式通过Modbus TCP通信。关键点在于动态调整轮询周期:
| 仪表类型 | 默认轮询周期 | 异常时轮询周期 |
|---|---|---|
| pH计 | 10s | 5s |
| DO仪 | 15s | 3s |
| 浊度仪 | 30s | 10s |
| 余氯仪 | 60s | 20s |
对应的PLC程序实现了一个自适应的轮询调度器:
code复制// 在DB50中定义设备轮询表
"Device_DB".Poll_Interval[0] := 10;
"Device_DB".Poll_Interval[1] := 15;
...
// 动态调整轮询周期
IF "Alarm_Active" THEN
FOR i := 0 TO 3 DO
"Device_DB".Poll_Interval[i] := "Device_DB".Poll_Interval[i] / 2;
END_FOR;
END_IF;
现场采集的模拟量信号普遍存在噪声干扰,系统采用复合滤波算法:
对应的STL实现代码:
code复制// 移动平均滤波
"Filter_Buffer"["Filter_Index"] := "Raw_Value";
"Filter_Index" := ("Filter_Index" + 1) MOD 8;
"Temp_Sum" := 0;
FOR i := 0 TO 7 DO
"Temp_Sum" := "Temp_Sum" + "Filter_Buffer"[i];
END_FOR;
"Average_Value" := "Temp_Sum" / 8;
// 中值滤波
IF ABS("Average_Value" - "Last_Value") > "Threshold" THEN
"Output_Value" := "Last_Value";
ELSE
"Output_Value" := "Average_Value";
END_IF;
WinCC Flexible的报警系统采用三级管理策略:
报警历史记录使用环形缓冲区技术,关键脚本如下:
code复制Dim alarmArray(200)
Dim pointer
Sub AddAlarm(message)
If pointer >= 200 Then
For i = 0 To 198
alarmArray(i) = alarmArray(i+1)
Next
pointer = 199
End If
alarmArray(pointer) = FormatDateTime(Now(), vbShortDate) & " " & _
FormatDateTime(Now(), vbLongTime) & " " & message
pointer = pointer + 1
End Sub
为防止操作员误输入,所有参数设置界面都实施了数值范围校验:
code复制// 在PLC端进行最终校验
IF "HMI_SetValue" < "Min_Limit" THEN
"Actual_Value" := "Min_Limit";
ELSIF "HMI_SetValue" > "Max_Limit" THEN
"Actual_Value" := "Max_Limit";
ELSE
"Actual_Value" := "HMI_SetValue";
END_IF;
同时,在触摸屏画面上用颜色直观显示参数状态:
| 数值状态 | 背景色 | 边框样式 |
|---|---|---|
| 正常范围 | 白色 | 实线 |
| 接近限值 | 黄色 | 闪烁 |
| 超出安全范围 | 红色 | 粗体+闪烁 |
根据CAD图纸,关键设备的I/O对应关系必须严格遵循:
| 设备名称 | PLC地址 | 电气图符号 | 保护器件 |
|---|---|---|---|
| 进水泵 | Q0.0 | KM1 | FU1(10A) |
| 曝气风机 | Q0.1 | KM2 | FU2(16A) |
| 污泥回流泵 | Q4.2 | KM3 | FU3(10A) |
| 加药计量泵 | Q0.3 | KM4 | FU4(6A) |
特别注意污泥回流泵的互锁逻辑:
所有关键设备都设置了硬件急停回路,独立于PLC程序:
code复制Emergency_Stop_Circuit:
NC急停按钮 -> 安全继电器 -> 接触器线圈
↑
PLC故障触点
PLC程序中的软件保护措施包括:
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| pH值波动大 | 电极老化/校准失效 | 1. 检查电极斜率(应>95%) |
| 加药泵脉动 | 2. 观察加药后30秒内的pH变化 | |
| DO值响应迟缓 | 曝气管堵塞 | 1. 检查空气流量计读数 |
| 膜头污染 | 2. 进行空气校准 | |
| Modbus通信中断 | 终端电阻未接 | 1. 测量总线两端电阻(应为120Ω) |
| 站地址冲突 | 2. 用Modscan逐个测试设备 |
生化处理单元的关键参数经验值:
溶解氧DO控制:
污泥龄(SRT)计算:
code复制SRT = (MLSS * V) / (WAS * WAS_SS + Effluent_SS * Q)
通常控制在8-15天为宜
反洗周期确定:
对于不同规模的污水处理项目,可按以下原则调整:
小型站(<50m³/d):
中型站(50-500m³/d):
大型站(>500m³/d):
实际部署中发现,将曝气控制从时间基准改为DO基准可节能15-20%。具体做法是在FB2000中增加以下逻辑:
code复制IF "DO_Control_Mode" THEN
// DO基准控制
"Aeration_Time" := "DO_Setpoint" - "Actual_DO";
"PID".SP := "Aeration_Time";
ELSE
// 时间基准控制
"Aeration_Time" := "Set_Aeration_Time";
END_IF;