Skip to content

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 ​

ServicePurpose
ABACControllerAmmonia-Based Aeration Control (cascade NH4→DO→airflow)
AVNControllerAmmonia vs NOx control for TN minimization
BlowerModelBlower dynamics with affinity laws and VFD control
BlowerSystemMulti-blower staging and coordination
OxygenTransferModelKLa and AOTR calculations with correction factors
IntermittentAerationControllerTime-based cycling with overrides
AerationControlServiceOrchestrates 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 ​

ParameterTypical RangeNotes
NH4 Kp0.3 - 1.0Start low, increase slowly
NH4 Ki0.05 - 0.2For steady-state offset elimination
DO Kp30 - 80Higher for faster DO response
DO Ki5 - 20Eliminate offset
DO Kd1 - 5Derivative filter recommended
Response Time10 - 30 minNH4 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 ​

ModeDescriptionUse Case
DO_setpointAdjusts DO targetContinuous aeration systems
cycle_timeAdjusts aeration on/off ratioIntermittent aeration
combinedAdjusts both DO and cycleMaximum 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:

RelationshipEquationExponent
FlowQ₂/Q₁ = (N₂/N₁)¹1
PressureΔP₂/ΔP₁ = (N₂/N₁)²2
PowerW₂/W₁ = (N₂/N₁)³3

Blower Types ​

TypeCharacteristicEfficiency Range
PD (Positive Displacement)Linear flow-speed50-70%
CentrifugalHead-capacity curve60-80%
TurboSurge protection needed70-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 ​

LogicDescriptionBest For
equalAll blowers at same speedUniform wear
lead_lagSequential stagingVariable demand
optimalMinimize powerEnergy 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 ​

FactorSymbolRangeDescription
Alphaα0.4-0.8Wastewater / clean water
Betaβ0.95-0.99Salinity correction
Thetaθ1.024Temperature correction
FF0.7-1.0Field correction
Fouling-0.65-0.9Diffuser 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 Efficiency

Intermittent 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 ​

  1. DO High Override: Force aeration OFF (prevent over-aeration)
  2. DO Low Override: Force aeration ON (prevent anaerobic conditions)
  3. 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 efficiency

Event 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 ​

PerformancekWh/kg O2
Excellent< 0.6
Good0.6 - 0.8
Average0.8 - 1.0
Poor> 1.0

Optimization Strategies ​

  1. Match airflow to load: Use ABAC or AVN control
  2. Optimize blower staging: Use 'optimal' staging logic
  3. Maintain diffuser cleanliness: Monitor fouling factor
  4. Control DO setpoint: Lower DO saves energy
  5. Use intermittent aeration: Enable SND operation

Best Practices ​

  1. Tuning Order: Tune inner loop (DO) first, then outer loop (NH4)
  2. Start Conservative: Use lower gains initially
  3. Monitor Saturation: Anti-windup prevents integral buildup
  4. Regular Calibration: Verify NH4/DO sensor accuracy
  5. Surge Margin: Maintain 10-15% margin for turbo blowers
  6. Diffuser Maintenance: Schedule regular cleaning
  • PID-Controller - Base controller theory
  • Cascade-Controller - Cascade control fundamentals
  • Biogas-Production - Energy recovery calculations

References ​

  1. WEF MOP 8 (2009). "Design of Municipal Wastewater Treatment Plants"
  2. Metcalf & Eddy (2014). "Wastewater Engineering" Chapter 8
  3. Olsson, G. & Newell, B. (1999). "Wastewater Treatment Systems"