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