-
Notifications
You must be signed in to change notification settings - Fork 0
RAILWAY_ENERGY_MANAGEMENT
GitHub Actions edited this page Jan 2, 2026
·
1 revision
Echtzeit-Berechnung und -Steuerung des Stromverbrauchs für das Bahnnetz mit Integration zur Kraftwerkssteuerung.
Gesamtstromverbrauch DB: ~3,2 TWh/Jahr
├─ Fernverkehr (ICE/IC): 1,8 TWh/Jahr (~56%)
├─ Regionalverkehr: 1,0 TWh/Jahr (~31%)
└─ S-Bahnen: 0,4 TWh/Jahr (~13%)
Durchschnitt pro Zug:
- ICE 3: ~2,5 kWh/km (200 km/h, 8 Wagen, 435 Tonnen)
- ICE 4: ~2,8 kWh/km (250 km/h)
- IC/EC: ~2,0 kWh/km (160 km/h)
- RE: ~1,5 kWh/km (120 km/h)
- RB: ~1,2 kWh/km (100 km/h)
- S-Bahn: ~0,8 kWh/km (Leichter Triebzug)
Spitzenlast:
- Morgens (07:00-09:00): ~800 MW
- Abends (17:00-19:00): ~750 MW
- Nacht (00:00-05:00): ~150 MW
-
Geschwindigkeit (kubische Beziehung)
P ∝ v³ Beispiel: 200 km/h → 300 km/h = 3,4x mehr Energie -
Steigung/Gefälle
Steigung 10‰ (1%): +30% Energieverbrauch Gefälle 10‰: -20% (Rekuperation) -
Masse
Pro 100 Tonnen: +12% Energieverbrauch Leerzug vs. Vollzug: 20-25% Unterschied -
Beschleunigung/Bremsen
Anfahren: ~500 kWh (ICE) Bremsen mit Rekuperation: -400 kWh zurückgewonnen -
Wetter
Gegenwind 30 km/h: +8% Energie Temperatur <0°C: +5% (Heizung) Temperatur >30°C: +3% (Klimaanlage)
Kraftwerke → Umspannwerke → Unterwerke → Oberleitungen → Züge
(380/220 kV) (110 kV) (15 kV) (15 kV)
Deutschland: ~800 Unterwerke
Abstand: durchschnittlich 40-60 km
Leistung: 10-60 MW pro Unterwerk
Spannung: 15 kV, 16,7 Hz (DB) / 25 kV, 50 Hz (Hochgeschwindigkeit)
DB Energie GmbH Kraftwerke:
1. Kraftwerk Hamburg-Tiefstack: 220 MW
2. Kraftwerk Kirchmöser: 150 MW
3. Umrichterwerke (50 Hz → 16,7 Hz)
Externe Beschaffung:
- Wasserkraft: 45%
- Windkraft: 25%
- Solar: 15%
- Konventionell: 15%
Ziel 2030: 100% Grünstrom
# Basis-Energieverbrauch (Traktionsenergie)
E_traction = mass_kg * distance_m * gradient_factor * speed_factor
# Rekuperation (Bremsenergie-Rückgewinnung)
E_recuperation = braking_energy * recuperation_efficiency # 0.6-0.85
# Nebenverbraucher
E_auxiliary = (heating_power + ac_power + lighting_power) * time_h
# Gesamtverbrauch
E_total = E_traction - E_recuperation + E_auxiliaryFahrzeugdaten:
- Masse: 435 Tonnen (leer) + 25 Tonnen (Passagiere) = 460 Tonnen
- Durchschnittsgeschwindigkeit: 180 km/h
- Fahrzeit: 4,3 Stunden
Energieverbrauch:
1. Traktionsenergie: ~1.950 kWh
2. Rekuperation: -320 kWh (16%)
3. Nebenverbraucher:
- Klimaanlage: +85 kWh
- Beleuchtung: +40 kWh
- Bordküche: +25 kWh
- Systeme: +30 kWh
Gesamt: ~1.810 kWh
Pro km: ~2,31 kWh/km
CO₂-Äquivalent: ~362 kg (bei 200g/kWh Strommix)
# Vorhersage Strombedarf für nächste 24h
def predict_power_demand():
trains_schedule = get_timetable_next_24h()
power_profile = []
for hour in range(24):
trains_in_hour = filter_trains_by_hour(trains_schedule, hour)
total_power_mw = 0
for train in trains_in_hour:
power_kw = calculate_train_power(
train.category,
train.speed_kmh,
train.weight_tons,
train.gradient
)
total_power_mw += power_kw / 1000
power_profile.append({
'hour': hour,
'power_mw': total_power_mw,
'trains_count': len(trains_in_hour)
})
return power_profile# Optimiere Kraftwerks-Einsatz
def dispatch_power_plants(demand_profile):
"""
Ziel: Minimale Kosten + Maximale Grünstrom-Nutzung
"""
power_sources = [
{'type': 'hydro', 'capacity_mw': 200, 'cost_eur_mwh': 25, 'co2_g_kwh': 0},
{'type': 'wind', 'capacity_mw': 150, 'cost_eur_mwh': 30, 'co2_g_kwh': 0},
{'type': 'solar', 'capacity_mw': 100, 'cost_eur_mwh': 35, 'co2_g_kwh': 0},
{'type': 'battery', 'capacity_mw': 50, 'cost_eur_mwh': 80, 'co2_g_kwh': 0},
{'type': 'gas', 'capacity_mw': 300, 'cost_eur_mwh': 120, 'co2_g_kwh': 350},
]
dispatch_plan = []
for hour_data in demand_profile:
demand_mw = hour_data['power_mw']
# Sortiere nach Kosten (Merit-Order)
sources_sorted = sorted(power_sources, key=lambda x: x['cost_eur_mwh'])
allocation = {}
remaining_demand = demand_mw
for source in sources_sorted:
if remaining_demand <= 0:
break
# Verfügbarkeit prüfen (Wetter, Tageszeit)
available_mw = get_available_capacity(source, hour_data['hour'])
# Allokiere Kapazität
used_mw = min(available_mw, remaining_demand)
allocation[source['type']] = used_mw
remaining_demand -= used_mw
dispatch_plan.append({
'hour': hour_data['hour'],
'demand_mw': demand_mw,
'allocation': allocation,
'total_cost_eur': calculate_cost(allocation, power_sources),
'co2_kg': calculate_co2(allocation, power_sources)
})
return dispatch_plan# Verschiebe nicht-kritische Züge in Zeiten mit günstiger Energie
def optimize_timetable_for_energy():
"""
Güterverkehr kann zeitlich flexibel sein
→ Verschiebe in Nachtstunden (Wind, günstiger)
"""
freight_trains = get_freight_trains()
for train in freight_trains:
# Prüfe Flexibilität
if train.time_window_hours >= 4:
# Finde günstigste Zeitfenster
cheapest_slot = find_cheapest_energy_slot(train.time_window_hours)
# Verschiebe Fahrplan
reschedule_train(train, cheapest_slot)
savings_eur = calculate_savings(train, cheapest_slot)
co2_reduction_kg = calculate_co2_reduction(train, cheapest_slot)# Verteile Last auf Unterwerke
class SubstationManager:
def __init__(self):
self.substations = load_substations() # ~800 Unterwerke
def allocate_power(self, train_position, train_power_kw):
"""
Finde nächstes Unterwerk und prüfe Kapazität
"""
nearest_substation = self.find_nearest(train_position)
# Prüfe Auslastung
current_load = nearest_substation.current_load_mw
max_capacity = nearest_substation.capacity_mw
if current_load + (train_power_kw / 1000) > max_capacity * 0.9:
# Überlast → Warnung
alert_overload(nearest_substation, train_power_kw)
# Alternative Versorgung
alternative = self.find_alternative_path(train_position)
return alternative
# Allokiere Last
nearest_substation.current_load_mw += train_power_kw / 1000
return nearest_substation
def find_nearest(self, train_pos):
"""Finde nächstes Unterwerk (spatial query)"""
return min(self.substations,
key=lambda s: distance(s.location, train_pos)){
"_key": "substation:UW_FFM_SUED",
"type": "substation",
"name": "Unterwerk Frankfurt Süd",
"location": {
"track": "3600",
"km": 12.5,
"lat": 50.0234,
"lon": 8.5678
},
"technical_data": {
"capacity_mw": 45,
"voltage_input_kv": 110,
"voltage_output_kv": 15,
"frequency_hz": 16.7,
"transformer_count": 2,
"transformer_power_mva": 25
},
"current_state": {
"current_load_mw": 32.5,
"utilization_percent": 72.2,
"temperature_celsius": 45,
"status": "operational"
},
"connected_tracks": ["3600", "3601", "3602"],
"supply_range_km": {
"start": 0.0,
"end": 50.0
},
"backup_substations": ["UW_FFM_NORD", "UW_MAINZ"]
}{
"metric": "train_energy_consumption",
"entity": "ICE508",
"timestamp": "2024-12-13T15:30:00Z",
"value": {
"instantaneous_power_kw": 4200,
"cumulative_energy_kwh": 1523.5,
"traction_power_kw": 3800,
"auxiliary_power_kw": 400,
"recuperation_power_kw": -300,
"efficiency_percent": 87.3,
"voltage_v": 15000,
"current_a": 280
}
}{
"metric": "substation_load",
"entity": "UW_FFM_SUED",
"timestamp": "2024-12-13T15:30:00Z",
"value": {
"total_load_mw": 32.5,
"transformer_1_load_mw": 18.2,
"transformer_2_load_mw": 14.3,
"utilization_percent": 72.2,
"voltage_kv": 15.1,
"frequency_hz": 16.71,
"temperature_celsius": 45,
"active_trains": 12,
"peak_load_today_mw": 42.1
}
}{
"metric": "grid_total_load",
"entity": "DB_NETZ",
"timestamp": "2024-12-13T15:30:00Z",
"value": {
"total_power_mw": 687,
"active_trains": 1234,
"substations_active": 782,
"substations_overload": 3,
"renewable_share_percent": 78.5,
"grid_frequency_hz": 16.70,
"reserve_capacity_mw": 213
}
}POST /api/energy/forecast
{
"horizon_hours": 24,
"include_scenarios": ["normal", "peak", "disruption"]
}
Response:
{
"forecast": [
{
"hour": 0,
"power_mw": 687,
"trains_count": 1234,
"confidence": 0.92
},
...
],
"peak_hours": [7, 8, 17, 18],
"total_energy_mwh": 14250,
"renewable_share_percent": 78.5
}POST /api/energy/dispatch
{
"target_hour": 17,
"target_power_mw": 750,
"optimize_for": "cost" # oder "co2", "reliability"
}
Response:
{
"allocation": {
"hydro": 200,
"wind": 150,
"solar": 80,
"battery": 50,
"gas": 270
},
"total_cost_eur": 82500,
"co2_kg": 94500,
"renewable_percent": 64.0
}┌──────────────────────────────────────────────────────────┐
│ Echtzeit Energieverbrauch │
├──────────────────────────────────────────────────────────┤
│ │
│ Aktuelle Last: 687 MW Grünstrom: 78.5% │
│ Spitzenlast: 842 MW CO₂: 137 kg/MWh │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Lastprofil (24h) │ │
│ │ 900 MW ┤ │ │
│ │ │ ╭─╮ ╭─╮ │ │
│ │ 600 MW ┤ ╭╯ ╰╮ ╭╯ ╰╮ │ │
│ │ │ ╭╯ ╰─╮ ╭──╯ ╰╮ │ │
│ │ 300 MW ┤ ╭╯ ╰───╯ ╰╮ │ │
│ │ │──╯ ╰───── │ │
│ │ 0 MW └────────────────────────────────── │ │
│ │ 0h 6h 12h 18h 24h │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Kraftwerks-Mix │ │
│ │ │ │
│ │ Wasserkraft: ████████████████░░░░ 200 MW │ │
│ │ Wind: ████████████░░░░░░░░ 150 MW │ │
│ │ Solar: ████████░░░░░░░░░░░ 80 MW │ │
│ │ Batterie: ████░░░░░░░░░░░░░░░ 50 MW │ │
│ │ Gas: █████████████████░░ 207 MW │ │
│ │ │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ Top Energie-Verbraucher: │
│ 1. ICE 508 → 4.2 MW (Frankfurt → Hamburg) │
│ 2. ICE 711 → 3.8 MW (München → Berlin) │
│ 3. GZ 52341 → 3.5 MW (Frachtzug) │
│ │
└──────────────────────────────────────────────────────────┘
// Überlast-Warnung Unterwerk
CREATE RULE substation_overload AS
SELECT
substation_id,
current_load_mw,
capacity_mw,
utilization_percent
FROM SubstationLoadEvents
WHERE utilization_percent > 90
WINDOW TUMBLING(1 MINUTE)
ACTION sequence(
alert('grid_operator', priority='HIGH'),
redistribute_load(substation_id),
activate_backup_power()
);
// Unerwarteter Energie-Anstieg
CREATE RULE unexpected_power_spike AS
SELECT
AVG(power_mw) as avg_power,
STDDEV(power_mw) as stddev
FROM GridTotalLoadEvents
WINDOW SLIDING(15 MINUTES)
HAVING AVG(power_mw) > (SELECT AVG(power_mw) FROM history WHERE time > now() - 24h) * 1.3
ACTION investigate_anomaly();1. Rekuperation (Bremsenergie):
Potential: 15-20% Energie-Rückgewinnung
Einsparung: ~640 GWh/Jahr = ~64 Mio. EUR
2. Fahrweise-Optimierung:
Potential: 5-10% durch vorausschauendes Fahren
Einsparung: ~320 GWh/Jahr = ~32 Mio. EUR
3. Lastverschiebung (Güterverkehr):
Potential: 3-5% durch Nutzung günstiger Zeiten
Einsparung: ~160 GWh/Jahr = ~16 Mio. EUR
4. Grünstrom-Maximierung:
CO₂-Reduktion: 200.000 Tonnen/Jahr
CO₂-Preis-Einsparung: ~10 Mio. EUR
Gesamt-Einsparung: ~122 Mio. EUR/Jahr
# In train_simulator.py erweitern
class TrainEnergyCalculator:
def calculate_energy_consumption(self, train, dt_seconds):
# Traktionsenergie
traction_kw = self._calculate_traction_power(
train.mass_kg,
train.speed_kmh,
train.acceleration_mps2,
train.gradient_permille
)
# Nebenverbraucher
auxiliary_kw = self._calculate_auxiliary_power(train)
# Rekuperation (beim Bremsen)
recuperation_kw = 0
if train.braking:
recuperation_kw = -self._calculate_recuperation(
train.mass_kg,
train.speed_kmh,
train.deceleration_mps2
)
# Gesamt
total_power_kw = traction_kw + auxiliary_kw + recuperation_kw
energy_kwh = (total_power_kw * dt_seconds) / 3600
return {
'power_kw': total_power_kw,
'energy_kwh': energy_kwh,
'traction_kw': traction_kw,
'auxiliary_kw': auxiliary_kw,
'recuperation_kw': recuperation_kw
}- ✅ Energiedaten-Modell definiert
- ⏳ Energieverbrauchs-Berechnung in Simulator integrieren
- ⏳ Unterwerks-Lastverteilung implementieren
- ⏳ Kraftwerks-Dispatch-Algorithmus
- ⏳ WPF Energie-Dashboard
- ⏳ API für Lastprognose
- ⏳ CEP Rules für Energie-Anomalien
- DB Energie GmbH: Geschäftsbericht 2023
- VDE-Studie: Energieeffizienz Schienenverkehr
- IEEE: Railway Power Systems
- Siemens Mobility: Energy Management White Papers
ThemisDB v1.3.4 | GitHub | Documentation | Discussions | License
Last synced: January 02, 2026 | Commit: 6add659
Version: 1.3.0 | Stand: Dezember 2025
- Übersicht
- Home
- Dokumentations-Index
- Quick Reference
- Sachstandsbericht 2025
- Features
- Roadmap
- Ecosystem Overview
- Strategische Übersicht
- Geo/Relational Storage
- RocksDB Storage
- MVCC Design
- Transaktionen
- Time-Series
- Memory Tuning
- Chain of Thought Storage
- Query Engine & AQL
- AQL Syntax
- Explain & Profile
- Rekursive Pfadabfragen
- Temporale Graphen
- Zeitbereichs-Abfragen
- Semantischer Cache
- Hybrid Queries (Phase 1.5)
- AQL Hybrid Queries
- Hybrid Queries README
- Hybrid Query Benchmarks
- Subquery Quick Reference
- Subquery Implementation
- Content Pipeline
- Architektur-Details
- Ingestion
- JSON Ingestion Spec
- Enterprise Ingestion Interface
- Geo-Processor Design
- Image-Processor Design
- Hybrid Search Design
- Fulltext API
- Hybrid Fusion API
- Stemming
- Performance Tuning
- Migration Guide
- Future Work
- Pagination Benchmarks
- Enterprise README
- Scalability Features
- HTTP Client Pool
- Build Guide
- Implementation Status
- Final Report
- Integration Analysis
- Enterprise Strategy
- Verschlüsselungsstrategie
- Verschlüsselungsdeployment
- Spaltenverschlüsselung
- Encryption Next Steps
- Multi-Party Encryption
- Key Rotation Strategy
- Security Encryption Gap Analysis
- Audit Logging
- Audit & Retention
- Compliance Audit
- Compliance
- Extended Compliance Features
- Governance-Strategie
- Compliance-Integration
- Governance Usage
- Security/Compliance Review
- Threat Model
- Security Hardening Guide
- Security Audit Checklist
- Security Audit Report
- Security Implementation
- Development README
- Code Quality Pipeline
- Developers Guide
- Cost Models
- Todo Liste
- Tool Todo
- Core Feature Todo
- Priorities
- Implementation Status
- Roadmap
- Future Work
- Next Steps Analysis
- AQL LET Implementation
- Development Audit
- Sprint Summary (2025-11-17)
- WAL Archiving
- Search Gap Analysis
- Source Documentation Plan
- Changefeed README
- Changefeed CMake Patch
- Changefeed OpenAPI
- Changefeed OpenAPI Auth
- Changefeed SSE Examples
- Changefeed Test Harness
- Changefeed Tests
- Dokumentations-Inventar
- Documentation Summary
- Documentation TODO
- Documentation Gap Analysis
- Documentation Consolidation
- Documentation Final Status
- Documentation Phase 3
- Documentation Cleanup Validation
- API
- Authentication
- Cache
- CDC
- Content
- Geo
- Governance
- Index
- LLM
- Query
- Security
- Server
- Storage
- Time Series
- Transaction
- Utils
Vollständige Dokumentation: https://makr-code.github.io/ThemisDB/