42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
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))
|