Python仿真:医疗污水“流量前馈+余氯反馈“自动加药消毒控制(含安全联锁)
医疗污水消毒是医院污水站最核心的控制环节。本文用Python仿真一套"流量前馈+余氯反馈"的自动加药逻辑,并加上余氯上下限、药箱液位、设备故障等安全联锁,帮助理解工业控制器(如威泰普IntBoxIO/I500)内部的实现思路。实际工程中这些功能块已固化在控制器里,零代码配置即可,无需手写代码。
一、控制目标与思路
目标:出水余氯稳定在目标区间 [Cl_min, Cl_max],既保证消毒效果又不超标浪费。
思路:
• 前馈:进水流量越大,基础投加量越大(快速跟踪水量波动)
• 反馈:根据出水余氯实测值PID微调(消除静差)
• 联锁:余氯越限、药箱空、计量泵故障时进入安全策略并报警
二、仿真代码
import math
class DisinfectionCtrl:
def init(self, cl_target=0.5, cl_min=0.3, cl_max=1.0,
kp=0.8, ki=0.15):
self.cl_target = cl_target # 目标余氯 mg/L
self.cl_min, self.cl_max = cl_min, cl_max
self.kp, self.ki = kp, ki
self.integral = 0.0
self.dose = 0.0 # 计量泵投加量(相对值 0~100)
self.tank_level = 100.0 # 药箱液位 %
self.pump_ok = True
self.alarm = []
def safety_check(self, cl):
self.alarm = []
if not self.pump_ok:
self.alarm.append("计量泵故障-切备用并报警")
if self.tank_level <= 10:
self.alarm.append("药箱低液位-提醒补药")
if cl < self.cl_min:
self.alarm.append("余氯下限-加大投加/排查")
elif cl > self.cl_max:
self.alarm.append("余氯上限-收泵防过量")
def step(self, inflow, cl_now, dt=1.0):
# 1) 前馈:流量决定基础投加(假设 流量0~20t/h 映射到 10~60)
feedforward = 10 + min(inflow, 20)/20*50
# 2) 反馈:余氯PID微调
err = self.cl_target - cl_now
self.integral += err*dt
self.integral = max(-20, min(20, self.integral)) # 抗积分饱和
feedback = self.kp*err*10 + self.ki*self.integral
self.dose = max(0, min(100, feedforward + feedback))
# 3) 药箱随投加下降(仿真)
self.tank_level = max(0, self.tank_level - self.dose*0.002)
# 4) 简化对象模型:余氯随投加上升、随流量稀释
cl_next = cl_now + (self.dose*0.01 - inflow*0.012)*0.5
cl_next = max(0, cl_next)
# 5) 安全联锁与报警
self.safety_check(cl_next)
return round(cl_next,3), round(self.dose,1), self.alarm
模拟医院一天水量波动:白天高峰、夜间低谷
ctrl = DisinfectionCtrl()
cl = 0.4
for hour in range(0, 24, 3):
# 白天(9-18点)水量大,夜间小
inflow = 16 if 9 <= hour <= 18 else 3
cl, dose, alarm = ctrl.step(inflow, cl)
print(f"{hour:02d}:00 水量={inflow:2d}t/h 投加={dose:5.1f} 余氯={cl:.3f} 报警={alarm or ‘无’}")
三、关键工程点
- 前馈是应对医院水量波动的关键。 只靠余氯反馈,要等出水余氯掉下来才补,存在滞后;加入流量前馈,水量一变投加立刻跟上,余氯曲线更平稳。
- 抗积分饱和。 代码对积分项限幅,防止长时间偏差导致积分累积、恢复时大幅超调,工程PID必备。
- 余氯上下限双向保护。 低了要报警加大(生物安全),高了也要报警收泵(防过量、防腐蚀),不是越大越好。
- 药箱与泵的联锁。 低液位提前补药、计量泵故障切备用泵,保证"消毒不中断"这条铁律。
- 本地优先。 真实工程中闭环必须在控制器本地运行,上位机或云端只做监视记录,断网消毒不能停——这正是IntBoxIO/I500断网自治的意义。
四、从仿真到落地
Python仿真用于验证逻辑和培训理解,真实污水站用工业控制器做硬实时控制,并接入在线余氯仪、流量计和计量泵,数据上传司水云官形成台账。把前馈、反馈、联锁三件事做扎实,医疗污水消毒就能从"凭感觉投药"变成"稳定达标且省药"的自动闭环。
更多推荐




所有评论(0)