- refactored PID params
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user