#!/usr/bin/python3 from time import * CTlong = 20 # 0 .. n-1 trend values CTwide = 5 # columns TIME, PV, SP, OV, MD CT_PID = [[0.0 for x in range(CTlong)] for y in range(CTwide)] #print(Matrix) TI = 0 PV = 1 SP = 2 OV = 3 MD = 4 CTfill = True # make a ring buffer CTrec = -1 def CTcount(): global CTlong, CTrec CTrec = CTrec + 1 if CTrec == CTlong: CTrec = 0 CTfill = False return CTrec def CTpoint(i): global CTlong, CTrec CTlist = CTrec+1+i if CTlist >= CTlong: CTlist = CTlist - CTlong return CTlist def CT_PID_save(PVval,SPval,OVval,MDval): CT_PID[TI][CTcount()] = localtime(time()) # create time stamp CT_PID[PV][CTrec] = PVval CT_PID[SP][CTrec] = SPval CT_PID[OV][CTrec] = OVval CT_PID[MD][CTrec] = MDval def CT_PID_make(counts): # make up data and store ringbuffer PVval=-1.0 PVdel=1.0 for i in range(0 , counts ): PVval=PVval+PVdel SPval=50.0 OVval=(PVval-SPval)*0.1 MDval = 2.0 CT_PID_save(PVval,SPval,OVval,MDval) print("made ",counts," records and stored last ",CTlong) def CT_PID_print(): print(" i, p, M[TI] , M[PV], M[SP], M[OV], M[MD] ") for i in range(0,CTlong): fTI = CT_PID[TI][CTpoint(i)] if fTI == 0.0: fTI = gmtime(i) # 1970-01-01 00:00:00 + i(sec) Tstr=strftime("%Y-%m-%d %H:%M:%S",fTI) fPV = CT_PID[PV][CTpoint(i)] fSP = CT_PID[SP][CTpoint(i)] fOV = CT_PID[OV][CTpoint(i)] fMD = CT_PID[MD][CTpoint(i)] # print ("%2d, %8.2f, %2d, %s, %8.2f" % (i,CT_PID[PV][i],CTpoint(i),Tstr,CT_PID[PV][CTpoint(i)] ) ) print ("%2d, %2d, %s, %8.2f, %8.2f, %8.2f, %8.2f" % (i,CTpoint(i),Tstr,fPV,fSP,fOV,fMD ) ) CT_PID_make(10) CT_PID_print()