- Compensate for max heat rate to reduce overshoot

This commit is contained in:
jens
2020-12-16 19:54:38 +01:00
parent cc20211c20
commit 24437329f0
2 changed files with 12 additions and 4 deletions
+8 -4
View File
@@ -3,6 +3,7 @@
class Pid:
def __init__(self, params):
self.params = params
self.k = 1.0
# Integrator
self.yi = 0
@@ -18,6 +19,9 @@ class Pid:
# Output
self.y = 0
def scale(self, k):
self.k = k
@staticmethod
def params(kp, ki, kd, kt):
p = dict(kp=kp, ki=ki, kd=kd, kt=kt)
@@ -30,10 +34,10 @@ class Pid:
def process(self, err):
dt = self.params['dt']
kp = self.params['kp']
ki = self.params['ki']
kd = self.params['kd']
kt = self.params['kt']
kp = self.params['kp'] * self.k
ki = self.params['ki'] * self.k
kd = self.params['kd'] * self.k
kt = self.params['kt'] * self.k
self.yi = self.yi + ki*dt * err + kt*dt * self.awu
yd = kd/dt*(err - self.err)
+4
View File
@@ -55,6 +55,10 @@ class TempController(AttributeChange):
self.theta_ist = self.theta_ist_set
self.heatrate_ist = self.heatrate_ist_set
# Compensate for max heat rate to reduce overshoot
if self.heatrate_soll_set > 0:
self.pid_hold.scale(1.0/self.heatrate_soll_set)
self.heatrate_soll = self.heatrate_soll_set * self.pid_hold.get_y()
theta_err = self.theta_soll_set - self.theta_ist
heatrate_err = self.heatrate_soll - self.heatrate_ist