class preSourcedDataID: def __init__(self): #Initialise Recursive Least Squares Object self.rls = RLS() def run(self): self.testData() self.rls.setup(self.X,np.matrix.transpose(self.Z)) while(True): for i in range(3, self.Z.size-1): x = self.X[:,i] y = self.Z[:,i] self.rls.solve(x,y) print self.rls.sysID print "Done, SysID is:" print self.rls.sysID break def testData(self): #U = np.array([[350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400]]) #Y = np.array([[90,90,91,87,95,93,100,87,93,86,87,94,91,91,97,92,104,109,115,123,126,134,131,146,149,154,163,170,178,180,180,193,194,203,209,212,210,218,230,239,240,241,245,247,251,263,259,271,273,274,278,284,281,294,298,302,303,305,308,309,320,321,322,326,327,333,336,337,343,350,352,353,358,358,363,366,365,367,367,372,376,374,382,378,387,388,389,392,394,397,399,402,396,402,401,403,407,410,415,421,423,418,418,427,427,427,426,426,429,429,432,427,429,429,430,432,434,434,433,436,437,447,448,436,442,454,446,445,452,448,448,447,456,454,456,457,458,457,459,459,460,460,463,460,460,463,466,465,458,467,463,464,464,471,466]]) #self.Z = np.array([[90,91,87,95,93,100,87,93,86,87,94,91,91,97,92,104,109,115,123,126,134,131,146,149,154,163,170,178,180,180,193,194,203,209,212,210,218,230,239,240,241,245,247,251,263,259,271,273,274,278,284,281,294,298,302,303,305,308,309,320,321,322,326,327,333,336,337,343,350,352,353,358,358,363,366,365,367,367,372,376,374,382,378,387,388,389,392,394,397,399,402,396,402,401,403,407,410,415,421,423,418,418,427,427,427,426,426,429,429,432,427,429,429,430,432,434,434,433,436,437,447,448,436,442,454,446,445,452,448,448,447,456,454,456,457,458,457,459,459,460,460,463,460,460,463,466,465,458,467,463,464,464,471,466,469]]) #U = np.array([[29.6,29.5,29.8,30.3,29.8,30.8,30,30.9,31.8,32.6,32.7,34.1,35,35.8,36,36.7,37.4,38.6,38.8,39.4,39.6,40.6,41.5,41.7,42.1,42.4,42.5,43.3,43.5,44.4,44.1]]) #Y = np.array([[37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40]]) #self.Z = np.array([[29.5,29.8,30.3,29.8,30.8,30,30.9,31.8,32.6,32.7,34.1,35,35.8,36,36.7,37.4,38.6,38.8,39.4,39.6,40.6,41.5,41.7,42.1,42.4,42.5,43.3,43.5,44.4,44.1,45]]) U = np.array([[47.3,47.4,48.3,48.3,48.1,48.3,48.2,48.5,48.3,48.3,48.5,49.2,50,50.3,51.2,51.3,51.5,52.3,53.8,54.5,55.2,55.5,57.1,57.2,57.7,57.8,57.8,58.3,58.7,58.8,60.3,60.5,60.6,60.5,60.8]]) Y = np.array([[40,40,40,40,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5,42.5]]) self.Z = np.array([[47.4,48.3,48.3,48.1,48.3,48.2,48.5,48.3,48.3,48.5,49.2,50,50.3,51.2,51.3,51.5,52.3,53.8,54.5,55.2,55.5,57.1,57.2,57.7,57.8,57.8,58.3,58.7,58.8,60.3,60.5,60.6,60.5,60.8,0]]) self.X = np.concatenate((Y,U), axis=0)
class liveSystemParamID: def __init__(self): # Objects self.ext = osTools() #Initialise data key press self.xls = xlsLogging(6) #Initialise excel data logging self.pg = plotActiveGraph() #For graphical plot (PV,SP,OP) self.rls = RLS() #Initialise Recursive Least Squares Object if int(sys.argv[1]) == 1: self.r = testModel("../../tests/") #Initialise simulated lab rig else: self.rw = comClient() #Initialise Modbus comms class # Variables self.count = 0 #For 'heart beat' counter self.intDataPoints = 4 #Initial Data Points to be read self.sampleTime = 40 #Calculation loop time def run(self): z = np.array([[0,self.X[0,self.intDataPoints-1]],[0,self.X[1,self.intDataPoints-1]]]) #Array in the form Yt, Ut time.sleep(self.sampleTime - (time.time()-self.timer)) startTime = time.time() #For time reference while(True): loopTime = time.time() #Itteration start time r = self.dataPipe() #Read controller data as r z[:,0] = z[:,1] #Shift Array z[:,1] = r.getRegister(0),r.getRegister(3) #Update Array self.rls.solve(z[:,0],z[0,1]) #Call recursive least squares method self.xls.writeXls(startTime,r,self.rls.sysID) #Pass data to excel for logging purposes self.pg.dataUpdate((time.time() - startTime),r.getRegister(0),r.getRegister(2),r.getRegister(3),self.rls.sysID[0],self.rls.sysID[1]) if self.ext.kbdExit(): #Detect exit condition break print self.count #Heartbeat self.count += 1 #Heartbeat time.sleep(self.sampleTime - (time.time() - loopTime)) def initialSetup(self): self.X = np.array([np.zeros(self.intDataPoints),np.zeros(self.intDataPoints)]) self.Y = np.array([np.zeros(self.intDataPoints)]) for i in range(0,self.intDataPoints): r = self.dataPipe() self.X[0,i] = r.getRegister(0) self.X[1,i] = r.getRegister(3) if i > 0: self.Y[:,i-1] = self.X[0,i] if i < (self.intDataPoints-1): time.sleep(self.sampleTime) self.timer = time.time() self.rls.setup(self.X[:,:-1],np.matrix.transpose(self.Y[:,:-1])) print "Setup Complete" def dataPipe(self): if int(sys.argv[1]) == 1: self.r.readModel() return self.r else: return self.rw.dataHandler('r')
def __init__(self): # Objects self.ext = osTools() #Initialise data key press self.xls = xlsLogging(6) #Initialise excel data logging self.pg = plotActiveGraph() #For graphical plot (PV,SP,OP) self.rls = RLS() #Initialise Recursive Least Squares Object if int(sys.argv[1]) == 1: self.r = testModel("../../tests/") #Initialise simulated lab rig else: self.rw = comClient() #Initialise Modbus comms class # Variables self.count = 0 #For 'heart beat' counter self.intDataPoints = 4 #Initial Data Points to be read self.sampleTime = 40 #Calculation loop time
def __init__(self): #Initialise Recursive Least Squares Object self.rls = RLS()