From 448afb3e9a4a05c7aaaead1f9e254ff0ca304dda Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 5 Dec 2020 18:40:23 +0100 Subject: [PATCH] - refactored PID params --- brewpi.py | 23 ++++++++---------- components/pid/pid.py | 15 +++++++----- components/pid/temp_controller.py | 40 ++++++++++++++----------------- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/brewpi.py b/brewpi.py index 61cb6b3..a87a9dc 100644 --- a/brewpi.py +++ b/brewpi.py @@ -212,22 +212,19 @@ if __name__ == '__main__': # Temperature Controller tc_params = { - "dt": 1.0, "Hold": { - "Pid": { - "kp": 0.5, - "ki": 0.005, - "kd": 0.0, - "rho": 1.0 - } + "dt": 1.0, + "kp": 0.5, + "ki": 0.005, + "kd": 0.0, + "rho": 1.0 }, "Heat": { - "Pid": { - "kp": 0.1, - "ki": 0.01, - "kd": 0.0, - "rho": 1.0 - } + "dt": 1.0, + "kp": 0.1, + "ki": 0.01, + "kd": 0.0, + "rho": 1.0 } } tc = temp_controller.TempController(tc_params, kalman_params) diff --git a/components/pid/pid.py b/components/pid/pid.py index 7a8a1be..05445e3 100644 --- a/components/pid/pid.py +++ b/components/pid/pid.py @@ -2,7 +2,9 @@ import numpy as np class Pid: - def __init__(self): + def __init__(self, params): + self.params = params + # Integrator self.yi = 0 @@ -25,11 +27,12 @@ class Pid: self.yi = 0 self.err = 0 - def process(self, dt, params, err): - kp = params['kp'] - ki = params['ki'] - kd = params['kd'] - rho = params['rho'] + def process(self, err): + dt = self.params['dt'] + kp = self.params['kp'] + ki = self.params['ki'] + kd = self.params['kd'] + rho = self.params['rho'] self.yi = rho*self.yi + ki*dt * err yd = kd/dt*(err - self.err) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index b804c89..8549395 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -14,19 +14,18 @@ class States(Enum): class TempController(AttributeChange): - def __init__(self, params, params_kalman): + def __init__(self, params_pid, params_kalman): AttributeChange.__init__(self) - self.dt = params['dt'] - self.pid_hold = pid.Pid() - self.pid_rate = pid.Pid() + self.pid_hold = pid.Pid(params_pid['Hold']) + self.pid_rate = pid.Pid(params_pid['Heat']) self.theta_ist_set = 0 self.theta_soll_set = 0 self.heatrate_ist_set = 0 - self.heatrate_soll_set = 2.0 + self.heatrate_soll_set = 1.0 self.theta_ist = 0 self.heatrate_ist = 0 - self.params = params + self.params = params_pid self.kalman = kalman.Kalman(params_kalman) self.y = 0 self.state = States.HOLD @@ -71,8 +70,8 @@ class TempController(AttributeChange): self.pid_hold.reset() if self.state != States.IDLE: - self.pid_hold.process(self.dt, self.params['Hold']['Pid'], theta_err) - self.pid_rate.process(self.dt, self.params['Heat']['Pid'], heatrate_err) + self.pid_hold.process(theta_err) + self.pid_rate.process(heatrate_err) if self.state == States.HEAT: self.y = self.pid_rate.get_y() @@ -90,22 +89,19 @@ class TempController(AttributeChange): if __name__ == '__main__': params = { - "dt": 1.0, "Hold": { - "Pid": { - "kp": 0.5, - "ki": 0.005, - "kd": 0.0, - "rho": 1.0 - } + "dt": 1.0, + "kp": 0.5, + "ki": 0.005, + "kd": 0.0, + "rho": 1.0 }, "Heat": { - "Pid": { - "kp": 0.1, - "ki": 0.01, - "kd": 0.0, - "rho": 1.0 - } + "dt": 1.0, + "kp": 0.1, + "ki": 0.01, + "kd": 0.0, + "rho": 1.0 } } @@ -173,7 +169,7 @@ if __name__ == '__main__': _y = np.append(_y, y) _fb = np.append(_fb, fb) _t = np.append(_t, t) - _heatrate_ist_kalman = np.append(_heatrate_ist_kalman, min(3000, ctrl.heatrate_ist)) + _heatrate_ist_kalman = np.append(_heatrate_ist_kalman, min(3, ctrl.heatrate_ist)) _temp_ist_kalman = np.append(_temp_ist, ctrl.theta_ist) t += 1