2026-07-10 10:38:57 +02:00

90 lines
3.1 KiB
Python

from ScEpTIC.emulator.energy import energy_utils
from ScEpTIC.emulator.energy.system_energy_model import SystemEnergyModel
from ScEpTIC.exceptions import ConfigurationException
class ChangePointDetector:
"""
Base model of the FBTC Changepoint Detector.
"""
def __init__(self, R1, R2, system_model):
"""
:param R1: R1 of the changepoint detector's voltage divider
:param R2: R2 of the changepoint detector's voltage divider
:param system_model: the SystemEnergyModel
"""
if not isinstance(system_model, SystemEnergyModel):
raise ConfigurationException(f"{system_model.__class__.__name__} is not a valid SystemEnergyModel for {self.__class__.__name__}")
self.system_model = system_model
self.R1 = energy_utils.str_to_float(R1)
self.R2 = energy_utils.str_to_float(R2)
self.partition = self.R2 / (self.R1 + self.R2)
def output(self):
"""
Outputs the logical value of the Changepoint Detector
:return: a changepoint is reached
"""
raise Exception(f"{self.__class__.__name__} must implement output()")
def _get_output_charge_detector(self):
"""
Outputs the logical value of the Changepoint Detector configured to detect charge
:return: a charge changepoint is reached
"""
v_buff = self.system_model.energy_buffer.get_voltage() * self.partition
v_sup = self.system_model.voltage_regulator.get_voltage()
#print(f"Charge state: v_buff = {v_buff}V; v_sup = {v_sup}V; {v_buff > v_sup}")
return v_buff > v_sup
def _get_output_discharge_detector(self):
"""
Outputs the logical value of the Changepoint Detector configured to detect discharge
:return: a discharge changepoint is reached
"""
v_buff = self.system_model.energy_buffer.get_voltage() * self.partition
v_sup = self.system_model.voltage_regulator.get_voltage()
#print(f"Discharge state: v_buff = {v_buff}V; v_sup = {v_sup}V; {v_buff < v_sup}")
return v_buff < v_sup
class ChangepointChargeDetector(ChangePointDetector):
"""
Model of the FBTC Changepoint Charge Detector.
It consists in an OpAmp that outputs if the voltage of the energy buffer is higher than a certain threshold w.r.t.
the voltage of the voltage regulator.
"""
def output(self):
"""
Outputs the logical value of the Changepoint Charge Detector
:return: a charge changepoint is reached
"""
return self._get_output_charge_detector()
class ChangepointDischargeDetector(ChangePointDetector):
"""
Model of the FBTC Changepoint Discharge Detector.
It consists in an OpAmp that outputs if the voltage of the energy buffer is lower than a certain threshold w.r.t.
the voltage of the voltage regulator.
"""
def output(self):
"""
Outputs the logical value of the Changepoint Discharge Detector
:return: a discharge changepoint is reached
"""
return self._get_output_discharge_detector()