diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index c604d50..5e30389 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -1,5 +1,6 @@ -from components.pid import Pid -from components.pid import Kalman +from components.pid.pid import Pid +from matplotlib.pyplot import plot, figure, subplot, title, xlabel, ylabel, grid, show +import numpy as np class TempController: @@ -33,9 +34,53 @@ class TempController: 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)) + return self.pid_hold.get_y() 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)) + return self.pid_rate.get_y() + + +if __name__ == '__main__': + params = { + "dt": 1.0, + "Hold": { + "Pid": { + "kp": 0.4, + "ki": 0.00004, + "kd": 0.0, + "rho": 1.0 + } + }, + "Heat": { + "Pid": { + "kp": 0.002, + "ki": 0.0002, + "kd": 0.0, + "rho": 1.0 + } + } + } + + temp_ist = 0 + temp_soll = 20 + ctrl = TempController(params) + ctrl.set_theta_ist(temp_ist) + ctrl.set_theta_soll(temp_soll) + t = range(0, 100) + _temp_ist = np.empty(0) + _temp_soll = np.empty(0) + for i in t: + _temp_ist = np.append(_temp_ist, temp_ist) + _temp_soll = np.append(_temp_soll, temp_soll) + ctrl.process() + y = ctrl.get_power_hold() + temp_ist += round(y, 2) + ctrl.set_theta_ist(temp_ist) + + figure(1) + plot(t, _temp_ist - _temp_soll, 'bx', linewidth=1) + grid(True) + show() + + print("End of program") +