三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

污水处理自动加药控制系统设计:前馈+反馈复合控制实现

污水处理自动加药控制系统设计:前馈+反馈复合控制实现

污水处理自动加药控制系统设计与实现

一、系统架构

在线仪表(TP/NO3/ORP/流量) → IntBoxIO控制器 → 计量泵 → 加药点 ↓ 司水云平台(远程监控)

二、前馈+反馈复合控制算法

2.1 控制模型

投加量 = 前馈基础量 × β修正 + PID反馈量

2.2 Python实现

classDosingController:def__init__(self,dosing_type):self.type=dosing_type# 'pac' or 'carbon'self.flow=0self.influent_quality=0self.effluent_quality=0self.setpoint=0# PAC参数ifdosing_type=='pac':self.Kp=15.0# L/h per mg/Lself.Ti=900# 15minself.beta=1.5self.dose_factor=25.0# mg/L per mg/L Pself.min_dose=5.0self.max_dose=80.0self.deadband=0.1# 碳源参数else:self.Kp=20.0self.Ti=2700# 45minself.alpha=4.5self.dose_factor=20.8self.min_dose=0.0self.max_dose=180.0self.deadband=1.0self.integral=0self.last_time=0self.beta_adjust_timer=0defcompute(self,flow,influent_q,effluent_q,dt):self.flow=flow self.influent_quality=influent_q self.effluent_quality=effluent_q# 前馈计算ifself.type=='pac':q_remove=max(0,influent_q-0.3)base_dose=flow*q_remove*self.dose_factor/1000else:q_remove=max(0,influent_q-self.setpoint)base_dose=flow*q_remove*self.dose_factor/1000# 反馈PIDerror=effluent_q-self.setpointifabs(error)>self.deadband:self.integral+=error*dt# 积分限幅self.integral=max(-100,min(100,self.integral))else:error=0pid_output=self.Kp*error+(self.Kp/self.Ti)*self.integral# 总输出total_dose=base_dose*(1+pid_output/100)total_dose=max(self.min_dose,min(self.max_dose,total_dose))# β/α自动修正(缓慢)self.beta_adjust_timer+=dtifself.beta_adjust_timer>1800:# 30minself.beta_adjust_timer=0ifself.type=='pac':ifeffluent_q>0.6:self.beta=min(2.5,self.beta+0.05)elifeffluent_q<0.2:self.beta=max(1.0,self.beta-0.05)returntotal_dosedefset_setpoint(self,sp):self.setpoint=sp

三、Modbus通讯实现

frompymodbus.clientimportModbusSerialClientclassDosingPump:def__init__(self,port,slave_id):self.client=ModbusSerialClient(port=port,baudrate=9600,parity='E',stopbits=1,bytesize=8,timeout=1)self.slave=slave_iddefset_frequency(self,freq_pct):# 频率给定寄存器,0-10000对应0-100%value=int(freq_pct*100)self.client.write_register(0x2000,value,slave=self.slave)defread_status(self):result=self.client.read_holding_registers(0x3000,4,slave=self.slave)return{'freq':result.registers[0]/100,'current':result.registers[1]/10,'status':result.registers[2]}

四、实际部署效果

某5000吨/日厂部署后:

  • PAC消耗降低24%,出水TP稳定0.3-0.5mg/L
  • 碳源消耗降低27%,出水TN稳定8-12mg/L
  • 系统连续运行可用率>99%
    代码可直接在IntBoxIO上运行,支持远程参数调整和OTA升级。
← 返回列表