From ff90c6d90cf9dfc87f5349787b083b8f07b904cc Mon Sep 17 00:00:00 2001 From: jens Date: Mon, 11 Oct 2021 19:54:03 +0200 Subject: [PATCH] - added initial for filling Delay line - added gain parameter for Pot sim - from state change to heat init model temp with plant temp - updated config template --- components/pid/temp_controller.py | 3 ++- components/pid/temp_controller_smith.py | 8 +++++--- components/plant/delay.py | 7 +++++-- components/plant/pot.py | 7 ++++++- config.json.templ | 14 ++++++++------ 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index f40b61a..343e1fd 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -165,7 +165,8 @@ if __name__ == '__main__': "M" : 20, "L" : 0.05, "Td" : 80, - "kn" : 0.2 + "kn" : 0.2, + "gain" : 0.8 } temp_ist = 0 diff --git a/components/pid/temp_controller_smith.py b/components/pid/temp_controller_smith.py index 724413a..629ec37 100755 --- a/components/pid/temp_controller_smith.py +++ b/components/pid/temp_controller_smith.py @@ -145,7 +145,7 @@ class TempController(APid): self.state = state_next print("New state = {}".format(state_next)) if state_next == States.HEAT: - self.kalman_plant.initial((self.theta_ist, 0)) + self.model.initial(self.theta_ist) self.kalman_model.initial((self.theta_ist, 0)) def process_pid(self, theta_err, heatrate_err): @@ -174,7 +174,8 @@ if __name__ == '__main__': "M" : 20, "L" : 0.05, "Td" : 80, - "kn" : 0.2 + "kn" : 0.2, + "gain" : 0.8 }, "Kalman": { "var_P" : 1.0, @@ -202,7 +203,8 @@ if __name__ == '__main__': "M" : 20 + 4, "L" : 0.07, "Td" : 80 + 5, - "kn" : 0.2 + "kn" : 0.2, + "gain" : 0.8 } temp_ist = 0 diff --git a/components/plant/delay.py b/components/plant/delay.py index 5604eaa..ddc8931 100644 --- a/components/plant/delay.py +++ b/components/plant/delay.py @@ -3,11 +3,14 @@ import numpy as np class Delay: def __init__(self, dt, delay, ic): - nd = int(delay/dt + 0.5) - self.delay_line = np.ones(nd+1)*ic + self.nd = int(delay/dt + 0.5) + self.delay_line = np.ones(self.nd+1)*ic self.ri = 0 self.wi = 0 + def initial(self, ic): + self.delay_line = np.ones(self.nd+1)*ic + def put(self, data): self.delay_line[self.wi] = data self.wi += 1 diff --git a/components/plant/pot.py b/components/plant/pot.py index 2c00b2a..f86e8d7 100644 --- a/components/plant/pot.py +++ b/components/plant/pot.py @@ -9,8 +9,8 @@ class Pot(APlant): self.e = 0 self.x = 0 - self.gain = 0.999 + self.gain = params['gain'] self.C = params['C'] self.M = params['M'] self.L = params['L'] @@ -24,6 +24,11 @@ class Pot(APlant): self.power_set = 0 self.delay = Delay(self.dt, self.Td, params['theta']) + def initial(self, temp): + self.temp_intermediate = temp + self.temp = temp + self.delay.initial(temp) + def activate(self, enable): pass diff --git a/config.json.templ b/config.json.templ index a423646..67e6ffb 100644 --- a/config.json.templ +++ b/config.json.templ @@ -13,8 +13,9 @@ "C": 4190, "M": 25, "L": 0.05, - "Td": 80, - "kn": 0.2 + "Td": 15, + "kn": 0.2, + "gain" : 0.8 }, "Kalman": { "dt": 1.0, @@ -39,12 +40,13 @@ }, "Plant": { "dt": 1.0, - "theta": 15, + "theta": 20, "C": 4190, - "M": 20, + "M": 25, "L": 0.1, - "Td": 60, - "kn": 0.2 + "Td": 15, + "kn": 0.2, + "gain" : 0.8 }, "Heater": { "dt": 1.0,