Appearance
Advanced Aeration Control System
Comprehensive aeration control including ABAC, AVN, blower dynamics, and oxygen transfer modeling
Overview
The Advanced Aeration Control System provides sophisticated control strategies for wastewater treatment aeration, enabling energy-efficient operation while maintaining treatment performance.
Services
| Service | Purpose |
|---|---|
ABACController | Ammonia-Based Aeration Control (cascade NH4→DO→airflow) |
AVNController | Ammonia vs NOx control for TN minimization |
BlowerModel | Blower dynamics with affinity laws and VFD control |
BlowerSystem | Multi-blower staging and coordination |
OxygenTransferModel | KLa and AOTR calculations with correction factors |
IntermittentAerationController | Time-based cycling with overrides |
AerationControlService | Orchestrates all aeration components |
ABAC (Ammonia-Based Aeration Control)
Cascade Control Structure
ABAC uses a cascade control strategy with two loops:
mermaid
graph LR
NH4_SP[NH4 Setpoint] --> E1((+/-))
NH4_PV[NH4 Measured] --> E1
E1 --> NH4_PID[NH4 Controller<br>Outer Loop]
NH4_PID --> DO_SP[DO Setpoint]
DO_SP --> E2((+/-))
DO_PV[DO Measured] --> E2
E2 --> DO_PID[DO Controller<br>Inner Loop]
DO_PID --> Airflow[Airflow Demand]Configuration
typescript
import { createABACController, ABACConfig } from '@/flow/services/simulation/aeration';
const config: ABACConfig = {
id: 'abac-zone1',
type: 'ABAC',
enabled: true,
NH4target: 2.0, // mg/L effluent target
DOmin: 0.5, // mg/L minimum DO setpoint
DOmax: 3.0, // mg/L maximum DO setpoint
NH4controllerGains: { // Outer loop (slow)
Kp: 0.5,
Ki: 0.1,
Kd: 0,
},
DOcontrollerGains: { // Inner loop (fast)
Kp: 50,
Ki: 10,
Kd: 2,
},
responseTime: 15, // NH4 filter time (minutes)
NH4NodeId: 'reactor1',
DONodeId: 'reactor1',
targetNodeId: 'blower1',
manipulatedVariable: 'airflowDemand',
mode: 'auto',
bumplessTransfer: true,
antiWindup: {
enabled: true,
backCalculationCoeff: 0.5,
},
};
const controller = createABACController(config);Tuning Guidelines
| Parameter | Typical Range | Notes |
|---|---|---|
| NH4 Kp | 0.3 - 1.0 | Start low, increase slowly |
| NH4 Ki | 0.05 - 0.2 | For steady-state offset elimination |
| DO Kp | 30 - 80 | Higher for faster DO response |
| DO Ki | 5 - 20 | Eliminate offset |
| DO Kd | 1 - 5 | Derivative filter recommended |
| Response Time | 10 - 30 min | NH4 analyzer lag compensation |
AVN (Ammonia vs NOx) Control
Control Theory
AVN control balances NH4 and NOx concentrations to minimize total nitrogen by maintaining:
$$\text{AVN Ratio} = \frac{\text{NH}_4}{\text{NH}_4 + \text{NO}_x} \approx 0.5$$
At AVN ≈ 0.5, simultaneous nitrification-denitrification (SND) is optimized.
Control Modes
| Mode | Description | Use Case |
|---|---|---|
DO_setpoint | Adjusts DO target | Continuous aeration systems |
cycle_time | Adjusts aeration on/off ratio | Intermittent aeration |
combined | Adjusts both DO and cycle | Maximum flexibility |
Usage
typescript
import { createAVNController, calculateAVNRatio } from '@/flow/services/simulation/aeration';
const avnConfig = {
id: 'avn-zone1',
type: 'AVN',
enabled: true,
targetAVNRatio: 0.5,
controllerGains: { Kp: 0.3, Ki: 0.05, Kd: 0 },
controlMode: 'DO_setpoint',
DOsetpointRange: { min: 0.3, max: 2.5 },
NH4filterTime: 0.01, // days
NOxFilterTime: 0.01, // days
NH4NodeId: 'reactor1',
NOxNodeId: 'reactor1',
targetNodeId: 'blower1',
manipulatedVariable: 'DOsetpoint',
mode: 'auto',
};
const controller = createAVNController(avnConfig);
// Calculate ratio manually
const ratio = calculateAVNRatio(nh4Concentration, noxConcentration);Blower Dynamics Model
Affinity Laws
The blower model implements standard affinity laws:
| Relationship | Equation | Exponent |
|---|---|---|
| Flow | Q₂/Q₁ = (N₂/N₁)¹ | 1 |
| Pressure | ΔP₂/ΔP₁ = (N₂/N₁)² | 2 |
| Power | W₂/W₁ = (N₂/N₁)³ | 3 |
Blower Types
| Type | Characteristic | Efficiency Range |
|---|---|---|
| PD (Positive Displacement) | Linear flow-speed | 50-70% |
| Centrifugal | Head-capacity curve | 60-80% |
| Turbo | Surge protection needed | 70-85% |
Configuration
typescript
import { createBlowerSystem, BlowerSystemConfig } from '@/flow/services/simulation/aeration';
const systemConfig: BlowerSystemConfig = {
id: 'blower-system-1',
nBlowers: 3,
stagingLogic: 'optimal', // 'equal', 'lead_lag', or 'optimal'
blowers: [
{
id: 'blower-1',
blowerType: 'centrifugal',
ratedFlow: 2000, // Nm³/h
ratedPressure: 50, // kPa
ratedSpeed: 3000, // rpm
minSpeed: 1500,
maxSpeed: 3600,
efficiencyCurve: [
{ flow: 500, efficiency: 0.65 },
{ flow: 1500, efficiency: 0.75 },
{ flow: 2000, efficiency: 0.72 },
],
ratedPower: 75, // kW
motorEfficiency: 0.95,
vfdEfficiency: 0.97,
},
// ... more blowers
],
dischargePressureSetpoint: 45,
minBlowersRunning: 1,
rotationInterval: 7, // days for lead-lag rotation
};
const system = createBlowerSystem(systemConfig);
const output = system.calculate(targetFlow, systemPressure, dtHours);Staging Logic
| Logic | Description | Best For |
|---|---|---|
equal | All blowers at same speed | Uniform wear |
lead_lag | Sequential staging | Variable demand |
optimal | Minimize power | Energy efficiency |
Oxygen Transfer Model
SOTR to AOTR Conversion
$$\text{AOTR} = \text{SOTR} \times \alpha \times F \times \frac{\beta \cdot C^_{s,T,H} - C_L}{C^_{s,20}} \times \theta^{(T-20)}$$
Correction Factors
| Factor | Symbol | Range | Description |
|---|---|---|---|
| Alpha | α | 0.4-0.8 | Wastewater / clean water |
| Beta | β | 0.95-0.99 | Salinity correction |
| Theta | θ | 1.024 | Temperature correction |
| F | F | 0.7-1.0 | Field correction |
| Fouling | - | 0.65-0.9 | Diffuser aging |
Usage
typescript
import { calculateOxygenTransfer, DEFAULT_O2_TRANSFER_CONFIG } from '@/flow/services/simulation/aeration';
const result = calculateOxygenTransfer({
temperature: 20, // °C
operatingDO: 2.0, // mg/L
airflowRate: 1000, // Nm³/h
config: {
...DEFAULT_O2_TRANSFER_CONFIG,
alpha: 0.6,
depth: 4.5,
diffuserType: 'fine_bubble_disc',
},
});
console.log(result.SOTR); // kg O2/h at standard conditions
console.log(result.AOTR); // kg O2/h at actual conditions
console.log(result.KLa); // 1/h volumetric transfer coefficient
console.log(result.SOTE); // % Standard Oxygen Transfer Efficiency
console.log(result.AOTE); // % Actual Oxygen Transfer EfficiencyIntermittent Aeration Control
Cycle Configuration
typescript
import { createIntermittentAerationController } from '@/flow/services/simulation/aeration';
const config = {
id: 'intermittent-zone1',
type: 'IntermittentAeration',
enabled: true,
aerationOnTime: 30, // minutes
aerationOffTime: 15, // minutes
DOhighOverride: 3.0, // mg/L - force OFF
DOlowOverride: 0.5, // mg/L - force ON
NH4Override: 8.0, // mg/L - extend ON
DONodeId: 'reactor1',
NH4NodeId: 'reactor1',
targetNodeId: 'blower1',
onOutput: 100, // % airflow when ON
offOutput: 0, // % airflow when OFF
mode: 'auto',
};
const controller = createIntermittentAerationController(config);Override Priority
- DO High Override: Force aeration OFF (prevent over-aeration)
- DO Low Override: Force aeration ON (prevent anaerobic conditions)
- NH4 Override: Extend aeration ON (ensure nitrification)
Aeration Control Service
Orchestration
The AerationControlService coordinates all aeration components:
typescript
import {
getAerationControlService,
AerationControlContext,
} from '@/flow/services/simulation/aeration';
const service = getAerationControlService();
// Register components
service.registerABACController(abacConfig);
service.registerAVNController(avnConfig);
service.registerBlowerSystem(blowerSystemConfig);
service.registerOxygenTransferConfig('zone1', o2Config);
service.registerIntermittentController(intermittentConfig);
// Execute each simulation step
const context: AerationControlContext = {
currentTime: simulationTime,
dt: timeStep,
measurements: processMeasurements,
};
const result = service.execute(context);
console.log(result.totalAirflow); // Nm³/h
console.log(result.totalPower); // kW
console.log(result.specificEnergy); // kWh/kg O2
console.log(result.systemEfficiency); // Overall efficiencyEvent Subscription
typescript
service.subscribe((event) => {
switch (event.type) {
case 'abac-updated':
console.log('DO setpoint:', event.data.DOsetpoint);
break;
case 'blower-staged':
console.log('Blower staged:', event.data);
break;
case 'surge-warning':
console.log('Surge protection active!');
break;
}
});Energy Optimization
Specific Energy Benchmarks
| Performance | kWh/kg O2 |
|---|---|
| Excellent | < 0.6 |
| Good | 0.6 - 0.8 |
| Average | 0.8 - 1.0 |
| Poor | > 1.0 |
Optimization Strategies
- Match airflow to load: Use ABAC or AVN control
- Optimize blower staging: Use 'optimal' staging logic
- Maintain diffuser cleanliness: Monitor fouling factor
- Control DO setpoint: Lower DO saves energy
- Use intermittent aeration: Enable SND operation
Best Practices
- Tuning Order: Tune inner loop (DO) first, then outer loop (NH4)
- Start Conservative: Use lower gains initially
- Monitor Saturation: Anti-windup prevents integral buildup
- Regular Calibration: Verify NH4/DO sensor accuracy
- Surge Margin: Maintain 10-15% margin for turbo blowers
- Diffuser Maintenance: Schedule regular cleaning
Related Topics
- PID-Controller - Base controller theory
- Cascade-Controller - Cascade control fundamentals
- Biogas-Production - Energy recovery calculations
References
- WEF MOP 8 (2009). "Design of Municipal Wastewater Treatment Plants"
- Metcalf & Eddy (2014). "Wastewater Engineering" Chapter 8
- Olsson, G. & Newell, B. (1999). "Wastewater Treatment Systems"