基于 ASM1 模型的污水处理工艺认知与代码实现
基于 ASM1 模型的污水处理工艺原理及代码实现。首先阐述 AAO 工艺运行流程与控制参数,解析状态变量、生化动力学反应、化学计量常数及动力学参数。随后通过手动计算与 Python 代码演示单个曝气池中氨氮组分的动态模拟过程,利用 scipy 求解微分方程展示浓度变化曲线,为污水厂智能化控制提供理论依据与工程参考。

基于 ASM1 模型的污水处理工艺原理及代码实现。首先阐述 AAO 工艺运行流程与控制参数,解析状态变量、生化动力学反应、化学计量常数及动力学参数。随后通过手动计算与 Python 代码演示单个曝气池中氨氮组分的动态模拟过程,利用 scipy 求解微分方程展示浓度变化曲线,为污水厂智能化控制提供理论依据与工程参考。

需要建立'进水 -> 物理处理 -> 生物处理 -> 深度处理 -> 出水'的宏观概念。
生物池(Biological Tank)是核心,也是我们模拟的对象。
关键流向: 进水 (Influent) -> 格栅 -> 沉砂池 -> 初沉池 -> 生物反应池 -> 二沉池 -> 消毒/排放。
伴随流向: 污泥回流 (RAS) 和 剩余污泥排放 (WAS)。

AAO (Anaerobic-Anoxic-Oxic) 是脱氮除磷的经典工艺。
三个区的环境与功能:
厌氧区 (Anaerobic)(DO=0): 释磷(PAOs 释放磷,吸收 VFA)。聚磷菌释磷,易降解有机物 (VFA) 并将其转化为体内的储能物质 PHB(类似人类存脂肪)【大分子有机物变成小分子有机物】。
缺氧区 (Anoxic)(DO<0.5): 反硝化脱氮(将硝酸盐还原为氮气)。
好氧区 (Oxic)(DO>2.0): 硝化(氨氮转硝酸盐)、吸磷、去除 BOD。
两条关键回流线:

建模视角的 AAO:它就是三个串联的反应器(CSTR),每个反应器有不同的溶解氧(DO)设定。
控制参数
| 参数名称 | 专业术语 | 作用位置 | AI 调节逻辑 (Objective Function) |
|---|---|---|---|
| 溶解氧 | DO (Dissolved Oxygen) | 好氧池 | 这是最关键的能耗控制点。 ❌ 过高 (>3.0): 浪费电;还会把氧气带回缺氧池,破坏反硝化环境。 ❌ 过低 (<1.0): 硝化菌停止工作,氨氮超标;易诱发污泥膨胀。 ✅ 目标: 维持在 2.0 mg/L 左右。 |
| 内回流比 | IR (Internal Recycle Ratio) | 好氧 / 缺氧 | 控制脱氮效率。 通常是进水流量的 200%-300%。 ❌ 过小: 硝酸盐排走了,脱氮不彻底。 ❌ 过大: 带来太多 DO,破坏缺氧环境,且浪费泵的电费。 |
| 外回流比 | R (Return Sludge Ratio) | 二沉 / 厌氧 | 控制系统泥量平衡。 通常是进水流量的 50%-100%。 ❌ 过小: 生化池细菌不够用。 ❌ 过大: 稀释了进水浓度,且把硝酸盐带回厌氧池,导致厌氧释磷失败(反硝化菌抢了聚磷菌的饭)。 |
| 剩余污泥排放 | Q_was (Waste Sludge) | 二沉池 | 控制污泥龄 (SRT)。 通过排泥,把吸饱了磷的细菌排走,这是除磷的唯一出口。 ❌ 排多了: 硝化菌长得慢,会被洗出系统(氨氮超标)。 ❌ 排少了: 污泥老化,活性差,水质浑浊。 |
生化池(厌氧 + 缺氧 + 好氧)并没有把污染物真的从水里'拿出来',而是把它们'转移'到了细菌体内。
如果说 AAO 工艺是污水处理厂的'硬件架构',那么 ASM1 模型就是运行在其中的'软件内核'。它用一组微分方程 (ODEs) 精确描述了:什么细菌 (Who),在什么环境 (Where),以多快的速度 (How Fast),吃掉了多少污染物 (How Much)。
| 分类 | 状态变量 | 中文名称 | 大白话解读(核心作用 / 特点) |
|---|---|---|---|
| 有机物相关(食物 / 剩饭) | Si | 溶解性惰性有机物浓度 | 溶于水的'不可消化小分子垃圾',细菌吃不动,不参与反应,最终随出水或污泥排出 |
| Xi | 颗粒惰性有机物浓度 | 不溶于水的'不可消化大块垃圾'(如泥沙、纤维),细菌无法分解,最终沉降到污泥中排出 | |
| Ss | 溶解性可生化降解基质浓度 | 溶于水的'细菌美食'(如乙酸、葡萄糖),是异养菌分解 COD 的主要口粮,好氧 / 缺氧池会被大量消耗 | |
| Xs | 颗粒性可生化降解基质浓度 | 颗粒状'带包装的食物'(如淀粉、蛋白质颗粒),需先被水解成小分子(Ss),才能被细菌消化 | |
| XP | 微生物衰减产生的污泥颗粒浓度 | 细菌老化、死亡后的'尸体',惰性强不参与反应,最终随剩余污泥排出 | |
| 细菌本身(干活的工人) | XBH | 活性异养菌生物污泥浓度 | 分解 COD、参与脱氮的'主力工人'(含反硝化菌),好氧用氧气、缺氧用硝酸盐当燃料,吃有机物存活 |
| XBA | 活性自养菌生物污泥浓度 | 处理氨氮的'专业工人'(硝化细菌),仅好氧环境干活,以氨氮为食,将其转化为硝酸盐 | |
| 氮相关(脱氮原料 / 产物) | SNH | 氨氮浓度(NH3 + NH4+) | 污水中含氮污染物(如尿液、粪便中的氮),自养菌的专属食物,是水体富营养化的元凶之一 |
| SNO | 硝酸盐氮与亚硝酸盐氮浓度 | 自养菌的'产物'、反硝化菌的'替代燃料',最终被反硝化菌转化为氮气排到空气中 | |
| SND | 降解有机氮浓度溶解性可生物 | 溶于水的'隐藏氮源'(如氨基酸),会被细菌分解释放氨氮,再参与硝化 - 反硝化循环 | |
| XND | 颗粒性可生物降解有机氮浓度 | 颗粒状的'打包氮源'(如蛋白质颗粒中的氮),需先拆分成小分子(SND),再释放氨氮参与反应 |
| 应分类 | 生化动力学反应 | 核心参与者 | 反应环境 | 核心过程(大白话) |
|---|---|---|---|---|
| 细菌增长反应 | 异养菌好氧增长 | 活性异养菌(XBH) | 好氧池(充足溶解氧 So) | 异养菌用氧气分解溶解性有机物(Ss),降解 COD 的同时繁殖(XBH 增多),产生少量细菌尸体(XP) |
| 异养菌缺氧增长 | 活性异养菌(XBH) | 缺氧池(无 So,有硝酸盐 SNO) | 异养菌用硝酸盐替代氧气分解 Ss,降解 COD、繁殖(XBH 增多),同时将 SNO 转化为氮气 | |
| 自养菌的好氧增长 | 活性自养菌(XBA) | 好氧池(充足 So + 碱度 SALK) | 自养菌分解氨氮(SNH),转化为硝酸盐(SNO),同时繁殖(XBA 增多),消耗碱度、产生 XP | |
| 细菌衰亡反应 | 异养菌的衰亡 | 活性异养菌(XBH) | 所有池体(速率不同) | 异养菌因食物不足、环境不适老化死亡,转化为 XP,少量分解为溶解性惰性有机物(Si) |
| 自养菌的衰亡 | 活性自养菌(XBA) | 主要在好氧池 | 自养菌因氨氮 / 碱度不足老化死亡,转化为 XP,少量分解为 Si | |
| 预处理反应 | 溶解性有机氮的氨化反应 | 活性异养菌(XBH) | 所有池体(好氧速率更快) | 异养菌分解溶解性有机氮(SND),释放氨氮(SNH) |
| 有机质的'水解'反应 | 活性异养菌(XBH) | 主要在厌氧 / 缺氧池 | 异养菌分泌酶,将颗粒性有机物(Xs)拆解为小分子溶解性有机物(Ss) | |
| 有机氮的'水解'反应 | 活性异养菌(XBH) | 主要在厌氧 / 缺氧池 | 异养菌分泌酶,将颗粒性有机氮(XND)拆解为小分子溶解性有机氮(SND) |
'化学计量常数'理解成反应里各物质的'定量配方'——就像做饭时'1 份米配 2 份水'的比例,它规定了生物反应中'反应物消耗多少、产物生成多少'的定量关系。
| 参数 | 大白话作用解释 |
|---|---|
| YH(异养菌产率) | 衡量异养菌'吃多少 COD 长多少肉'的效率。比如 Y_H 高,说明异养菌吃一点 COD 就能长很多生物量,处理 COD 的同时污泥也多;Y_H 低则相反。 |
| YA(自养菌产率) | 衡量自养菌'吃多少氨氮长多少肉'的效率。Y_A 高,自养菌吃少量氨氮就长很多,硝化氨氮时污泥产量大;Y_A 低则硝化相同氨氮产生的污泥少。 |
| fP(颗粒性衰减产物比例) | 表示细菌死了之后,有多少比例变成'惰性颗粒污泥'。f_P 高,细菌衰减后产生的惰性污泥多,剩余污泥总量大;f_P 低则惰性污泥少。 |
| iXB(生物量中 N 的比例) | 说明细菌体内'氮占自身重量的多少'。比如 i_XB 高,细菌每长一点生物量,消耗的氮多,同时硝化等反应消耗的碱度也多(因为氮代谢和碱度相关)。 |
| iXP(生物量产物 COD 中 N 的比例) | 表示细菌死后变成的污泥里,'氮在污泥 COD 里占多少'。i_XP 高,说明污泥里氮含量高,这些氮如果没处理好,可能影响出水总氮。 |
'动力学'研究的是'反应速度规律',这些参数就是用来量化微生物反应'有多快'的——比如细菌繁殖多快、底物降解多快、环境变化对反应速度的影响有多大。就像给生物反应装了个'速度仪表盘',所以叫'动力学参数'。
| 动力学参数 | 核心作用(大白话) |
|---|---|
| μH, KS, KO,H, KNO, bH | 描述异养菌的生长和衰减:- μH:异养菌'繁殖速度的上限';- KS:异养菌吃底物的'半饱和浓度'(底物浓度达到这个值,生长速度减半);- KO,H:异养菌用好氧呼吸的'氧气半饱和浓度';- KNO:异养菌缺氧呼吸的'硝酸盐半饱和浓度';- bH:异养菌'自然死亡的速度'。 |
| μA, KNH, KO,A, bA | 描述自养菌(硝化菌)的生长和衰减:- μA:自养菌'繁殖速度的上限';- KNH:自养菌吃氨氮的'半饱和浓度';- KO,A:自养菌用好氧呼吸的'氧气半饱和浓度';- bA:自养菌'自然死亡的速度'。 |
| ηg | 异养菌缺氧生长的'效率修正系数':缺氧时异养菌用硝酸盐呼吸的效率比用好氧呼吸低,这个系数用来调整缺氧生长的速度。 |
| ka | 氨化反应的'速度常数':溶解性有机氮被异养菌分解成氨氮的'快慢程度'。 |
| kh, KX | 水解反应的'速度常数和半饱和系数':- kh:颗粒性有机物被分解成溶解性有机物的'速度';- KX:水解反应的'半饱和浓度'(颗粒性有机物浓度达到这个值,水解速度减半)。 |
| ηh | 缺氧水解的'效率修正系数':缺氧时颗粒性有机物水解的效率比好氧时低,这个系数用来调整缺氧水解的速度。 |



异养菌在好氧环境下,根据溶解性底物和溶解氧的浓度,按照'底物越多、氧气越充足,生长速度越快'的规律繁殖,公式里的μ H 是繁殖速度上限,K S 和 K O,H 是半饱和浓度(到这个浓度时生长速度减半),最后乘以异养菌浓度(X B,H)得到生长速率。

异养菌在缺氧环境下,用**硝酸盐(S NO)**代替氧气,同样根据底物(S S)浓度繁殖,但此时氧气浓度(S O)越低、硝酸盐浓度越高,生长速度越快,η g 是缺氧生长的效率修正系数,最后乘以异养菌浓度得到生长速率。
自养菌(硝化菌)在好氧环境下,根据**氨氮(S NH)**和溶解氧(S O)的浓度繁殖,μ H 是繁殖速度上限,K NH 和 K O,A 是半饱和浓度,乘以自养菌浓度(X B,A)得到生长速率。


异养菌自然死亡的速率,由衰减系数(b H)和异养菌浓度(X B,H)决定,衰减系数越大、菌浓度越高,死亡速度越快。

自养菌自然死亡的速率,由衰减系数和自养菌浓度决定,逻辑同异养菌衰减。

溶解性有机氮(S ND)被异养菌分解成氨氮的速率,由氨化速率常数(k a)、有机氮浓度和异养菌浓度决定,速率常数越大、有机氮和菌浓度越高,氨化越快。

颗粒性有机物(X S)被分解成溶解性有机物的速率,受底物浓度(X S 与 X B,H 的比值)、溶解氧(S O)、硝酸盐(S NO)浓度影响,好氧时水解快,缺氧时需乘以修正系数(η h),最后乘以异养菌浓度得到水解速率。

颗粒性有机氮(X ND)的水解速率,是慢速有机物水解速率(ρ 7)乘以有机氮与有机物的比例(X ND/X S),逻辑是有机氮水解规律和有机物水解一致,只是比例不同。


| 物质 | 方程大白话解释 |
|---|---|
| SI(溶解性惰性有机物) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 反应中自身的变化(r1,这里 r1=0,所以只看进出水) |
| SS(溶解性可生化底物) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 反应中被异养菌吃、水解生成的变化(r2) |
| XI(颗粒惰性有机物) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 反应中自身的变化(r3=0,只看进出水) |
| XS(颗粒可生化底物) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 细菌衰减生成、水解消耗的变化(r4) |
| XBH(活性异养菌) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 异养菌生长、衰减的变化(r5) |
| XBA(活性自养菌) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 自养菌生长、衰减的变化(r6) |
| XP(微生物衰减污泥颗粒) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 细菌衰减生成的变化(r7) |
| SO(溶解氧) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 曝气溶解的氧(KL a(SO*−SO)) + 反应中消耗的变化(r8) |
| SNO(硝酸盐氮) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 反硝化消耗、硝化生成的变化(r9) |
| SNH(氨氮) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 硝化消耗、氨化生成的变化(r10) |
| SND(溶解性可生物降解有机氮) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 氨化消耗、水解生成的变化(r11) |
| XND(颗粒性可生物降解有机氮) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 细菌衰减生成、水解消耗的变化(r12) |
| S ALK(碱度) | 变化速率 = (进水带进来的量 - 出水带走的量)÷ 反应器体积 + 各反应消耗 / 生成的变化(r13) |
以氨氮为例:
假设我们有一个曝气池(CSTR 完全混合反应器),我们需要计算当前时刻氨氮的反应速率和浓度变化。

水质组分(状态变量)当前浓度:

动力学参数 (ASM1 典型值):

第一步:计算动力学过程速率

第二步:计算氨氮的反应速率

第三步:计算质量平衡

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# --------------------------
# 解决中文显示问题
# --------------------------
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC", "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False
# --------------------------
# 1. 参数设置(ASM1 标准,20℃)
# --------------------------
params = {
# --- 动力学参数 (单位: /d) ---
'mu_A': 0.5, # 自养菌最大比生长速率 (1/d)
'k_a': 0.05, # 氨化速率 (m³/(g COD·d))
'b_A': 0.05, # 自养菌衰减系数 (1/d)
# --- 半饱和常数 (单位: mg/L) ---
'K_NH': 1.0, # 氨氮半饱和常数
'K_OA': 0.4, # 自养菌氧半饱和常数
# --- 化学计量参数 ---
'Y_A': 0.24, # 自养菌产率 (g VSS/g N)
'i_XB': 0.086, # 生物体含氮量 (g N/g VSS)
# --- 水力与环境参数 ---
'q_in': 100.0, # 进水流量 (m³/h)
'q_out': 100.0,
: ,
:
}
():
S_O = env_vars[]
S_ND = env_vars[]
X_BA = env_vars[]
X_BH = env_vars[]
monod_NH = S_NH / (params[] + S_NH)
monod_O = S_O / (params[] + S_O)
rho3 = (params[] / ) * monod_NH * monod_O * X_BA
rho6 = (params[] / ) * S_ND * X_BH
consumption = (params[] + / params[]) * rho3
generation = rho6
r_NH = -consumption + generation
rho3, rho6, r_NH
():
S_NH = y[]
S_NH < :
S_NH =
_, _, r_NH = calc_rates_nh(S_NH, env_vars, params)
transport = (params[] * params[] - params[] * S_NH) / params[]
dSNH_dt = transport + r_NH
[dSNH_dt]
env_vars = {
: ,
: ,
: ,
:
}
S_NH_init =
t_span = (, )
t_eval = np.linspace(, , )
sol = solve_ivp(
fun= t, y: nh_dynamics(t, y, env_vars, params),
t_span=t_span,
y0=[S_NH_init],
t_eval=t_eval,
method=
)
plt.figure(figsize=(, ))
plt.plot(sol.t, sol.y[], , linewidth=, label=)
plt.axhline(y=params[], color=, linestyle=, alpha=, label=)
plt.xlabel(, fontsize=)
plt.ylabel(, fontsize=)
plt.title(, fontsize=)
plt.grid(alpha=)
plt.legend(fontsize=)
final_conc = sol.y[][-]
plt.text(, , , transform=plt.gca().transAxes, fontsize=, bbox=(facecolor=, alpha=, edgecolor=))
plt.tight_layout()
plt.show()
rho3_init, rho6_init, r_NH_init = calc_rates_nh(S_NH_init, env_vars, params)
()
()
()
()
()
()


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
| 反应环境条件 | So | 溶解氧浓度(单位:mg/L) | 水里的氧气含量,好氧池需充足(供异养菌、自养菌干活),缺氧池需极低(避免抑制反硝化) |
| SALK | 碱度(摩尔单位) | 水里的'缓冲剂',稳定 pH 值,避免硝化反应导致水变酸杀死细菌 |