import numpy as np import json from aplant import APlant from math import sqrt class Mass(APlant): def __init__(self, params): print(json.dumps({'Mass': params}, indent=4, sort_keys=True)) self.dt = params['dt'] self.alpha = 1.0 self.e = 0 self.x = 0 self.gain = 0.95 self.C = params['C'] self.M = params['M'] self.L = params['L'] self.Td = params['Td'] self.kn = params['kn'] self.theta_amb = params['theta_amb'] self.theta = 0 self.P = 0 if self.Td > 0: self.alpha = self.dt/self.Td def process(self): self.e = self.e*(1 - ((self.L*self.theta)*self.dt)/(self.M*self.C)) self.x = (1-self.alpha)*self.x + self.gain*self.alpha*self.P self.e += self.x self.theta = self.e/(self.M*self.C) def setPower(self, power_w): self.P = power_w def getPower(self): return self.P def getTemperature(self): return self.theta + self.theta_amb + self.kn*np.random.normal(0,1)/sqrt(12.0)