- 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
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)
+9 -6
View File
@@ -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)
+18 -22
View File
@@ -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