- refactored PID params

This commit is contained in:
jens
2020-12-05 18:40:23 +01:00
parent 55aa043efb
commit 448afb3e9a
3 changed files with 37 additions and 41 deletions
+10 -13
View File
@@ -212,22 +212,19 @@ if __name__ == '__main__':
# Temperature Controller # Temperature Controller
tc_params = { tc_params = {
"dt": 1.0,
"Hold": { "Hold": {
"Pid": { "dt": 1.0,
"kp": 0.5, "kp": 0.5,
"ki": 0.005, "ki": 0.005,
"kd": 0.0, "kd": 0.0,
"rho": 1.0 "rho": 1.0
}
}, },
"Heat": { "Heat": {
"Pid": { "dt": 1.0,
"kp": 0.1, "kp": 0.1,
"ki": 0.01, "ki": 0.01,
"kd": 0.0, "kd": 0.0,
"rho": 1.0 "rho": 1.0
}
} }
} }
tc = temp_controller.TempController(tc_params, kalman_params) tc = temp_controller.TempController(tc_params, kalman_params)
+9 -6
View File
@@ -2,7 +2,9 @@ import numpy as np
class Pid: class Pid:
def __init__(self): def __init__(self, params):
self.params = params
# Integrator # Integrator
self.yi = 0 self.yi = 0
@@ -25,11 +27,12 @@ class Pid:
self.yi = 0 self.yi = 0
self.err = 0 self.err = 0
def process(self, dt, params, err): def process(self, err):
kp = params['kp'] dt = self.params['dt']
ki = params['ki'] kp = self.params['kp']
kd = params['kd'] ki = self.params['ki']
rho = params['rho'] kd = self.params['kd']
rho = self.params['rho']
self.yi = rho*self.yi + ki*dt * err self.yi = rho*self.yi + ki*dt * err
yd = kd/dt*(err - self.err) yd = kd/dt*(err - self.err)
+18 -22
View File
@@ -14,19 +14,18 @@ class States(Enum):
class TempController(AttributeChange): class TempController(AttributeChange):
def __init__(self, params, params_kalman): def __init__(self, params_pid, params_kalman):
AttributeChange.__init__(self) AttributeChange.__init__(self)
self.dt = params['dt'] self.pid_hold = pid.Pid(params_pid['Hold'])
self.pid_hold = pid.Pid() self.pid_rate = pid.Pid(params_pid['Heat'])
self.pid_rate = pid.Pid()
self.theta_ist_set = 0 self.theta_ist_set = 0
self.theta_soll_set = 0 self.theta_soll_set = 0
self.heatrate_ist_set = 0 self.heatrate_ist_set = 0
self.heatrate_soll_set = 2.0 self.heatrate_soll_set = 1.0
self.theta_ist = 0 self.theta_ist = 0
self.heatrate_ist = 0 self.heatrate_ist = 0
self.params = params self.params = params_pid
self.kalman = kalman.Kalman(params_kalman) self.kalman = kalman.Kalman(params_kalman)
self.y = 0 self.y = 0
self.state = States.HOLD self.state = States.HOLD
@@ -71,8 +70,8 @@ class TempController(AttributeChange):
self.pid_hold.reset() self.pid_hold.reset()
if self.state != States.IDLE: if self.state != States.IDLE:
self.pid_hold.process(self.dt, self.params['Hold']['Pid'], theta_err) self.pid_hold.process(theta_err)
self.pid_rate.process(self.dt, self.params['Heat']['Pid'], heatrate_err) self.pid_rate.process(heatrate_err)
if self.state == States.HEAT: if self.state == States.HEAT:
self.y = self.pid_rate.get_y() self.y = self.pid_rate.get_y()
@@ -90,22 +89,19 @@ class TempController(AttributeChange):
if __name__ == '__main__': if __name__ == '__main__':
params = { params = {
"dt": 1.0,
"Hold": { "Hold": {
"Pid": { "dt": 1.0,
"kp": 0.5, "kp": 0.5,
"ki": 0.005, "ki": 0.005,
"kd": 0.0, "kd": 0.0,
"rho": 1.0 "rho": 1.0
}
}, },
"Heat": { "Heat": {
"Pid": { "dt": 1.0,
"kp": 0.1, "kp": 0.1,
"ki": 0.01, "ki": 0.01,
"kd": 0.0, "kd": 0.0,
"rho": 1.0 "rho": 1.0
}
} }
} }
@@ -173,7 +169,7 @@ if __name__ == '__main__':
_y = np.append(_y, y) _y = np.append(_y, y)
_fb = np.append(_fb, fb) _fb = np.append(_fb, fb)
_t = np.append(_t, t) _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) _temp_ist_kalman = np.append(_temp_ist, ctrl.theta_ist)
t += 1 t += 1