- added delay line for pot sim
This commit is contained in:
@@ -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()))
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
from components.aplant import APlant
|
from components.aplant import APlant
|
||||||
|
from components.plant.delay import Delay
|
||||||
|
|
||||||
|
|
||||||
class Pot(APlant):
|
class Pot(APlant):
|
||||||
@@ -24,13 +25,18 @@ class Pot(APlant):
|
|||||||
|
|
||||||
self.power_set = 0
|
self.power_set = 0
|
||||||
self.power_actual = 0
|
self.power_actual = 0
|
||||||
|
self.delay = Delay(self.dt, self.Td)
|
||||||
|
|
||||||
def activate(self, enable):
|
def activate(self, enable):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def process(self):
|
def process(self):
|
||||||
# Delay
|
# Delay
|
||||||
|
if 0:
|
||||||
self.power_actual = (1-self.alpha_delay) * self.power_actual + self.alpha_delay * self.power_set
|
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
|
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
|
self.temp += (self.power_actual / (self.M * self.C) + leak) * self.dt
|
||||||
|
|||||||
Reference in New Issue
Block a user