Add power stats and generator control visibility
This commit is contained in:
@@ -345,8 +345,14 @@ class ReactorDashboard:
|
||||
left_y,
|
||||
"Core",
|
||||
[
|
||||
("Fuel Temp", f"{state.core.fuel_temperature:8.1f} K"),
|
||||
("Core Power", f"{state.core.power_output_mw:8.1f} MW"),
|
||||
(
|
||||
"Fuel Temp",
|
||||
f"{state.core.fuel_temperature:6.1f} K (Max {constants.CORE_MELTDOWN_TEMPERATURE:4.0f})",
|
||||
),
|
||||
(
|
||||
"Core Power",
|
||||
f"{state.core.power_output_mw:6.1f} MW (Nom {constants.NORMAL_CORE_POWER_MW:4.0f}/Max {constants.TEST_MAX_POWER_MW:4.0f})",
|
||||
),
|
||||
("Neutron Flux", f"{state.core.neutron_flux:10.2e}"),
|
||||
("Rods", f"{self.reactor.control.rod_fraction:.3f}"),
|
||||
("Rod Mode", "AUTO" if not self.reactor.control.manual_control else "MANUAL"),
|
||||
@@ -362,7 +368,10 @@ class ReactorDashboard:
|
||||
[
|
||||
("Pump1", self._pump_status(state.primary_pumps, 0)),
|
||||
("Pump2", self._pump_status(state.primary_pumps, 1)),
|
||||
("Flow", f"{state.primary_loop.mass_flow_rate:7.0f} kg/s"),
|
||||
(
|
||||
"Flow",
|
||||
f"{state.primary_loop.mass_flow_rate:7.0f}/{self.reactor.primary_pump.nominal_flow * len(self.reactor.primary_pump_units):.0f} kg/s",
|
||||
),
|
||||
("Inlet Temp", f"{state.primary_loop.temperature_in:7.1f} K"),
|
||||
("Outlet Temp", f"{state.primary_loop.temperature_out:7.1f} K"),
|
||||
("Pressure", f"{state.primary_loop.pressure:5.2f} MPa"),
|
||||
@@ -394,6 +403,7 @@ class ReactorDashboard:
|
||||
"Turbine / Grid",
|
||||
[
|
||||
("Turbines", " ".join(self._turbine_status_lines())),
|
||||
("Rated Elec", f"{len(self.reactor.turbines)*self.reactor.turbines[0].rated_output_mw:7.1f} MW"),
|
||||
("Unit1 Elec", f"{state.turbines[0].electrical_output_mw:7.1f} MW" if state.turbines else "n/a"),
|
||||
(
|
||||
"Unit2 Elec",
|
||||
@@ -410,6 +420,8 @@ class ReactorDashboard:
|
||||
],
|
||||
)
|
||||
right_y = self._draw_section(right_win, right_y, "Generators", self._generator_lines(state))
|
||||
right_y = self._draw_section(right_win, right_y, "Power Stats", self._power_lines(state))
|
||||
right_y = self._draw_section(right_win, right_y, "Generators", self._generator_lines(state))
|
||||
right_y = self._draw_section(right_win, right_y, "Maintenance", self._maintenance_lines())
|
||||
self._draw_health_bars(right_win, right_y)
|
||||
|
||||
@@ -548,10 +560,25 @@ class ReactorDashboard:
|
||||
for idx, gen in enumerate(state.generators):
|
||||
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 ""
|
||||
lines.append((f"Gen{idx + 1}", f"{status} {gen.power_output_mw:6.1f} 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}%"))
|
||||
return lines
|
||||
|
||||
def _power_lines(self, state: PlantState) -> list[tuple[str, str]]:
|
||||
draws = getattr(state, "aux_draws", {}) or {}
|
||||
primary_nom = constants.PUMP_POWER_MW * len(self.reactor.primary_pump_units)
|
||||
secondary_nom = constants.PUMP_POWER_MW * len(self.reactor.secondary_pump_units)
|
||||
lines = [
|
||||
("Base Aux", f"{draws.get('base', 0.0):6.1f}/{constants.BASE_AUX_LOAD_MW:4.1f} MW"),
|
||||
("Primary Aux", f"{draws.get('primary_pumps', 0.0):6.1f}/{primary_nom:4.1f} MW"),
|
||||
("Secondary Aux", f"{draws.get('secondary_pumps', 0.0):6.1f}/{secondary_nom:4.1f} MW"),
|
||||
("Aux Demand", f"{draws.get('total_demand', 0.0):6.1f} MW"),
|
||||
("Aux Supplied", f"{draws.get('supplied', 0.0):6.1f} MW"),
|
||||
("Gen Output", f"{draws.get('generator_output', 0.0):6.1f} MW"),
|
||||
("Turbine Elec", f"{draws.get('turbine_output', 0.0):6.1f} MW"),
|
||||
]
|
||||
return lines
|
||||
|
||||
def _draw_health_bars(self, win: "curses._CursesWindow", start_y: int) -> int:
|
||||
height, width = win.getmaxyx()
|
||||
inner_width = width - 4
|
||||
|
||||
Reference in New Issue
Block a user