from components.pid import Pid from components.pid import Kalman class TempController: def __init__(self, params): self.dt = params['dt'] self.pid_hold = Pid() self.pid_rate = Pid() self.theta_ist = 0 self.theta_soll = 0 self.heatrate_ist = 0 self.heatrate_soll = 0 self.params = params def set_theta_ist(self, value): self.theta_ist = value def set_heatrate_ist(self, value): self.heatrate_ist = value def set_theta_soll(self, value): self.theta_soll = value def set_heatrate_soll(self, value): self.heatrate_soll = value def process(self): theta_err = self.theta_soll - self.theta_ist heatrate_err = self.heatrate_soll - self.heatrate_ist self.pid_hold.process(self.dt, self.params['Hold']['Pid'], theta_err) self.pid_rate.process(self.dt, self.params['Heat']['Pid'], heatrate_err) def get_power_hold(self): power_hold = 200 + self.params['P_max'] * self.pid_hold.get_y() return max(self.params['P_min'], min(self.params['P_max'], power_hold)) def get_power_heat(self): power_heat = 1500 + self.params['P_max'] * self.pid_rate.get_y() return max(self.params['P_min'], min(self.params['P_max'], power_heat))