Generation at any orbital phase φ = 2π·t / Torbit depends on whether the station is sunlit or in Earth's shadow, and on how much the array has degraded:
illum(φ) = 1 if φ falls in the sunlit arc (fraction 1 − f_eclipse)
illum(φ) = 0 during the eclipse arc (fraction f_eclipse)
P_gen = P_max · (1 − degradation) · illum(φ)
The battery integrates the surplus or deficit between generation and the sum of the currently-online loads' demand, with round-trip charge/discharge efficiency η:
dE/dt = η·(P_gen − P_demand) if P_gen ≥ P_demand (charging)
dE/dt = (P_gen − P_demand)/η if P_gen < P_demand (discharging)
SOC = 100 · E / E_capacity
A load-shedding controller watches state of charge against two hysteresis thresholds, exactly like the undervoltage protection on a real spacecraft power bus:
- SOC drops below 30% — the lowest-priority online load is shed (turned off), lowest priority first: science payload, then comms, then cabin lighting.
- SOC climbs back above 55% — the highest-priority shed load is restored first, in the reverse order it was dropped.
- CO₂ scrubbing and thermal control are priority-1 and are never shed — losing either is a crew-safety emergency, so the controller always protects them, even if every other load has to go dark and SOC keeps falling regardless.
The degradation slider models the 0.5–1%/year power loss real arrays suffer from radiation and micrometeorite erosion — push it high enough and the array can no longer recharge the battery faster than eclipse drains it, so loads start cycling on and off every orbit. The micrometeorite strike button knocks out 35% of the array's instantaneous output for 90 seconds, a sharp analogue of a real impact, to show how the controller reacts to a sudden supply shock rather than a slow decline.