diff --git a/components/plant/delay.py b/components/plant/delay.py new file mode 100644 index 0000000..6bd0e40 --- /dev/null +++ b/components/plant/delay.py @@ -0,0 +1,32 @@ +import numpy as np + + +class Delay: + def __init__(self, dt, delay): + nd = int(delay/dt + 0.5) + self.delay_line = np.zeros(nd) + self.ri = 0 + self.wi = 0 + + def put(self, data): + if self.wi >= self.delay_line.size: + self.wi = 0 + self.delay_line[self.wi] = data + self.wi += 1 + + def get(self): + self.ri += 1 + if self.ri >= self.delay_line.size: + self.ri = 0 + + result = self.delay_line[self.ri] + + return result + + +if __name__ == '__main__': + d = Delay(1, 10) + + for i in range(1, 20): + d.put(i) + print("In = {}, out = {}".format(i, d.get())) diff --git a/components/plant/pot.py b/components/plant/pot.py index 2e25c82..4eed5be 100644 --- a/components/plant/pot.py +++ b/components/plant/pot.py @@ -1,4 +1,5 @@ from components.aplant import APlant +from components.plant.delay import Delay class Pot(APlant): @@ -24,13 +25,18 @@ class Pot(APlant): self.power_set = 0 self.power_actual = 0 + self.delay = Delay(self.dt, self.Td) def activate(self, enable): pass def process(self): # Delay - self.power_actual = (1-self.alpha_delay) * self.power_actual + self.alpha_delay * self.power_set + if 0: + self.power_actual = (1-self.alpha_delay) * self.power_actual + self.alpha_delay * self.power_set + else: + self.delay.put(self.power_set) + self.power_actual = self.delay.get() leak = 1/self.M * self.L * (self.theta_amb - self.temp)/self.theta_amb self.temp += (self.power_actual / (self.M * self.C) + leak) * self.dt