Show generator battery output and slow idle drain
This commit is contained in:
@@ -565,7 +565,7 @@ class ReactorDashboard:
|
|||||||
status = "RUN" if gen.running else "START" if gen.starting else "OFF"
|
status = "RUN" if gen.running else "START" if gen.starting else "OFF"
|
||||||
spool = f" spool {gen.spool_remaining:4.1f}s" if gen.starting else ""
|
spool = f" spool {gen.spool_remaining:4.1f}s" if gen.starting else ""
|
||||||
lines.append((f"Gen{idx + 1}", f"{status} {gen.power_output_mw:6.1f}/{self.reactor.generators[idx].rated_output_mw:4.0f} MW{spool}"))
|
lines.append((f"Gen{idx + 1}", f"{status} {gen.power_output_mw:6.1f}/{self.reactor.generators[idx].rated_output_mw:4.0f} MW{spool}"))
|
||||||
lines.append((f" Battery", f"{gen.battery_charge*100:5.1f}%"))
|
lines.append((f" Battery", f"{gen.battery_charge*100:5.1f}% out {gen.battery_output_mw:4.1f} MW"))
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
def _power_lines(self, state: PlantState) -> list[tuple[str, str]]:
|
def _power_lines(self, state: PlantState) -> list[tuple[str, str]]:
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class GeneratorState:
|
|||||||
power_output_mw: float
|
power_output_mw: float
|
||||||
battery_charge: float
|
battery_charge: float
|
||||||
status: str = "OFF"
|
status: str = "OFF"
|
||||||
|
battery_output_mw: float = 0.0
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -48,9 +49,11 @@ class DieselGenerator:
|
|||||||
|
|
||||||
def step(self, state: GeneratorState, load_demand_mw: float, dt: float) -> float:
|
def step(self, state: GeneratorState, load_demand_mw: float, dt: float) -> float:
|
||||||
"""Advance generator dynamics and return delivered power."""
|
"""Advance generator dynamics and return delivered power."""
|
||||||
|
state.battery_output_mw = 0.0
|
||||||
if state.starting:
|
if state.starting:
|
||||||
state.spool_remaining = max(0.0, state.spool_remaining - dt)
|
state.spool_remaining = max(0.0, state.spool_remaining - dt)
|
||||||
state.power_output_mw = self.rated_output_mw * (1.0 - state.spool_remaining / max(self.spool_time, 1e-6))
|
state.power_output_mw = self.rated_output_mw * (1.0 - state.spool_remaining / max(self.spool_time, 1e-6))
|
||||||
|
state.battery_output_mw = min(0.5, load_demand_mw)
|
||||||
if state.spool_remaining <= 0.0:
|
if state.spool_remaining <= 0.0:
|
||||||
state.starting = False
|
state.starting = False
|
||||||
state.running = True
|
state.running = True
|
||||||
@@ -67,8 +70,8 @@ class DieselGenerator:
|
|||||||
if state.running:
|
if state.running:
|
||||||
state.battery_charge = min(1.0, state.battery_charge + 0.02 * dt)
|
state.battery_charge = min(1.0, state.battery_charge + 0.02 * dt)
|
||||||
elif state.starting:
|
elif state.starting:
|
||||||
state.battery_charge = max(0.0, state.battery_charge - 0.01 * dt)
|
state.battery_charge = max(0.0, state.battery_charge - 0.003 * dt)
|
||||||
else:
|
else:
|
||||||
state.battery_charge = max(0.0, state.battery_charge - 0.001 * dt)
|
state.battery_charge = max(0.0, state.battery_charge - 0.00005 * dt)
|
||||||
|
|
||||||
return state.power_output_mw
|
return state.power_output_mw
|
||||||
|
|||||||
Reference in New Issue
Block a user