fix: don't override primary pump speed; warn in TUI if far from suggested 65%

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dominik Moritz Roth 2026-03-15 11:20:27 +01:00
parent 2bb4207a98
commit 24a8999b18

View File

@ -5,7 +5,7 @@ Architecture:
- Rod PID: keeps CORE_TEMP at setpoint via ROD_BANK_POS_0_ORDERED
Per-train control (trains 1/2/3, 0-indexed as 0/1/2 in param names):
- Primary pump: fixed 65% (higher than 50% improves heat transfer per manual)
- Primary pump: not touched; warns in TUI if far from suggested 65%
- MSCV PI: drives train power output, gated on steam availability
- Secondary pump feedforward: half of steam outlet + level PID
- Bypass: hold at 0
@ -128,11 +128,11 @@ class TrainController:
out_min=-2.0, out_max=2.0, integral_max=3.0)
self.sec_level_target = 25_000.0
self.prim_pump = 65.0
self.prim_pump = float(nucon.get(f'COOLANT_CORE_CIRCULATION_PUMP_{self.i}_ORDERED_SPEED') or 50.0)
self.PRIM_PUMP_SUGGESTED = 65.0 # warn in TUI if far from this
self.mscv = 9.0
self.sec_pump = 40.0
set_param(f'COOLANT_CORE_CIRCULATION_PUMP_{self.i}_ORDERED_SPEED', self.prim_pump)
set_param(f'STEAM_TURBINE_{self.i}_BYPASS_ORDERED', 0.0)
self._params = [
@ -141,6 +141,7 @@ class TrainController:
f'STEAM_TURBINE_{self.i}_RPM',
f'STEAM_TURBINE_{self.i}_BYPASS_ACTUAL',
f'GENERATOR_{self.i}_KW',
f'COOLANT_CORE_CIRCULATION_PUMP_{self.i}_ORDERED_SPEED',
f'COOLANT_SEC_CIRCULATION_PUMP_{self.i}_ORDERED_SPEED',
f'COOLANT_SEC_{self.i}_LIQUID_VOLUME',
]
@ -172,6 +173,8 @@ class TrainController:
self.mscv = float(np.clip(new_mscv, 0.5, 100.0))
set_param(f'MSCV_{self.i}_OPENING_ORDERED', self.mscv)
self.prim_pump = s.get(f'COOLANT_CORE_CIRCULATION_PUMP_{self.i}_ORDERED_SPEED', self.prim_pump)
sec_ff = steam_out / 2.0
level = s[f'COOLANT_SEC_{self.i}_LIQUID_VOLUME']
level_error = self.sec_level_target - level
@ -499,10 +502,14 @@ def run_controller(stdscr):
_safe_addstr(stdscr, row, 32,
f'[{_bar(pwr_pct, 14)}] {power_error/1000:+5.1f}MW {tgt_str}')
row += 1
prim_warn = abs(tc.prim_pump - tc.PRIM_PUMP_SUGGESTED) > 10
prim_attr = YELLOW if prim_warn else 0
prim_str = f'{tc.prim_pump:3.0f}%{"!" if prim_warn else " "}'
_safe_addstr(stdscr, row, 16,
f'Steam: {steam_out:5.1f} MSCV: {tc.mscv:4.1f} '
f'Prim: {tc.prim_pump:3.0f}% Sec: {tc.sec_pump:3.0f}% '
f'Lvl: {level:.0f}{level_error:+.0f})')
f'Steam: {steam_out:5.1f} MSCV: {tc.mscv:4.1f} Prim: ')
_safe_addstr(stdscr, row, 51, prim_str, prim_attr)
_safe_addstr(stdscr, row, 56,
f' Sec: {tc.sec_pump:3.0f}% Lvl: {level:.0f}{level_error:+.0f})')
elif not is_active:
hint = ' (+/Up to add)' if is_sel else ''
_safe_addstr(stdscr, row, 16, f'not controlled{hint}',