Ejemplo n.º 1
0
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)
Ejemplo n.º 2
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')
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 def __init__(self):
     #Initialise Recursive Least Squares Object
     self.rls = RLS()