本节摘要:水质报告里的 pH、溶解氧、电导、硬度、碱度,不是一堆孤立数字,而是描述水体“同步平衡态”的一组成像探针。本节先把主要水质参数逐个讲清,重点放在溶解氧(DO)与氧化还原这一对主宰水生态的主角上:用亨利定律按温度算 DO 饱和值,用氧垂曲线解释排污口下游为何缺氧,用能斯特方程判断含氮化合物的去向。看完你能从一份 DO 与 pH 读数判读水体健康与自净状态。
阅读完本节,你应当能够:
理想的饮用水或天然水,其实是一套在碳酸与矿物缓冲下维持的平衡体系。每根“探针”量一个侧面:pH 看酸碱强度,溶解氧看呼吸与光合的余量,电导大致反映溶解离子总量,硬度看钙镁,碱度看抵抗酸化的能力。它们相互印证,单独看哪根都可能误判——这正是环境化学强调“同步态”的原因。
水能溶氧,但溶入量有限,且随温度上升快速下降。越冬湖泊能保持较高的 DO,到了盛夏就可能跌破鱼类标准。这就是为什么夏季憋闷的水体最容易发生“死鱼”——同一份氧,被更低的饱和阈值、更高的耗氧率两头夹击。
import math # 溶解氧饱和度经验公式(淡水面,近似) def do_sat(T): return 14.652 - 0.4102*T + 0.007991*T**2 - 0.0000777*T**3 for T in [0, 10, 20, 25, 30]: print(f"{T:3d} ℃ 饱和 DO = {do_sat(T):5.2f} 毫克每升")
可以看到,从 0 ℃ 到 30 ℃,饱和溶解氧从约 14.6 降到约 7.6 毫克每升,接近腰斩。因此夏季同一水体即便“绝对氧”不低,饱和度却可能告急。
当有机物(BOD)排入河流,细菌微生物消耗溶解氧,同时在流动和波浪中复氧,二者竞争形成经典的氧垂曲线——凹下去的最低点就是最缺氧、最脆弱的断面。
# 简化欧拉积分解氧垂(耗氧-复氧竞争) import math kd = 0.25 # 脱氧速率 1/day kr = 0.40 # 复氧速率 1/day La = 30.0 # 初始BOD mg/L Do = 8.0 # 初始氧亏 mg/L(饱和DO-实际DO) dt, t, days = 0.01, 0.0, [] while t <= 6.0: BOD = La * math.exp(-kd*t) deficit = Do*math.exp(-kr*t) + kd*La/(kr-kd)*(math.exp(-kd*t)-math.exp(-kr*t)) days.append((t, round(BOD,2), round(deficit,2))) t += dt for t, bod, d in days[::120]: print(f"第 {t:4.1f} 天 BOD {bod:5.1f} 氧亏 {d:5.2f} 毫克每升")
氧所在下游 1 至 3 天达到峰值氧亏,BOD 同步衰减。从这条曲线反推,能在排污前预判哪一段河水会先缺氧——这是水环境容量计算的最小基本面。
溶解氧低到一定程度,微生物会改用硝酸盐、硫酸盐、甚至二氧化碳作为最终电子受体,电子顺次向下流动。决定“使用顺序”的,是各氧化还原物种的标准电位梯度。用能斯特方程看一眼氮物种:
import math # 含氮物种氧化还原半反应: 硝酸盐优先被还原 # 用能斯特方程估算 NO3/N2 与 O2/H2O 的相对顺序 R, T, F = 8.314, 298.15, 96485.0 def e_h(E0, n, ratio): return E0 + (0.0592/n)*math.log10(ratio) print("含氮与氧体系的标准/实际电位(伏):") print(f" NO3/N2 还原电位 ≈{e_h(0.75,1,1.62):.3f}") # 简化示意 print(" O2/H2O 使用顺序最高 (好氧先), 缺氧才用 NO3, 再 SO4, 最后 CO2")
现实里,这正是我们常说的“氧化还原分层”:好氧层硝化、厌氧层反硝化与产硫酸/甲烷。从某一层面的是否检出亚硝酸盐或闻到臭鸡蛋味(硫化物),就能反推系统处于哪个氧化还元梯级。

(注:纵轴方向示意,实际 DO 随耗氧/复氧竞争先降后升。)
把前面的探针合起来想象:一份盛夏的监测单若显示“DO 28% 饱合、pH 偏低、电导偏高”,基本可以推断这是一个富营养化初期的浅湖——白天藻类光合好氧高、夜里呼吸耗氧转为缺氧,加上有机输入的酸化和离子负荷。这一判断的每一步,都在本节对应的公式与机制里找得到出处。