def run(self): if platform.system() == "Windows": starttime = time.clock() if platform.system() == "Linux": starttime = time.time() print starttime step = 0 now_time = 0 # p1=PID(8,4/160,4*40) Werte für Regelung mit Totzeit!! p1 = PID(2, 3 / 160, 2 / 40) while self.running: # Checking State step = step + 1 time.sleep(5) # Daten ueber IP besorgen lock.acquire() daten_IP = GetData(self.ip, self.port, "#02" + chr(13)) lock.release() time.sleep(2) lock.acquire() data_Linseis = GetData("192.168.8.190", 10001, "DATA" + chr(13)) lock.release() if data_Linseis[0] != "A": my_Linseis = N.dtype( [ ("Value1", "int"), ("Value2", "int"), ("Value3", "int"), ("Value4", "int"), ("Value5", "int"), ("Value6", "int"), ("Value7", "int"), ("Value8", "int"), ("Value9", "int"), ("Value10", "int"), ("Value11", "int"), ("Value12", "int"), ("Value13", "int"), ("Value14", "int"), ("Value15", "int"), ("Value16", "int"), ("Value17", "int"), ("Value18", "int"), ("Value19", "int"), ("Value20", "int"), ("Value21", "int"), ("Value22", "int"), ("Value23", "int"), ("Value24", "int"), ("Value25", "int"), ("Value26", "int"), ("Value27", "int"), ("Value28", "int"), ("Value29", "int"), ("Value30", "int"), ("Value31", "int"), ("Value32", "int"), ("Value33", "int"), ("Value34", "int"), ("Value35", "int"), ("Value36", "int"), ] ) if data_Linseis[0] != "T": Linseis = read_array(data_Linseis, my_Linseis, separator=",") # echte Zeit als Datensatz verwenden, da die Übertragung eventuell gestört sein könnte if platform.system() == "Windows": now_time = time.clock() - starttime if platform.system() == "Linux": now_time = time.time() - starttime # Formatierung des Datenstring + Zeitstempel data_str = "%.1f ; %.1f %s " % (now_time, self.delta_temp + self.kick, daten_IP) data_str = data_str.replace("+", " ; +") data_str = data_str.replace("-", " ; -") # data_str=data_str + ' ; ' + str(Linseis[0][0]) # Fuer Debug-Zwecke Daten nochmal auf die Konsole posten # print Linseis[0][0] # T1 - Ofenheizung # T2 - Probe Halb # T3 - Probe Mitte # T4 - Abluft-Temp # T5 - T8 Ofenelemente # CO-Rechnungswert (Umrechnung muss erfolgen) mydescr = N.dtype( [ ("Zeit", "float"), ("Delta", "float"), ("T1", "float"), ("T2", "float"), ("T3", "float"), ("T4", "float"), ("T5", "float"), ("T6", "float"), ("T7", "float"), ("T8", "float"), ] ) myrecarray = read_array(data_str, mydescr) # T3 Probe # T4 Regelthermoelement # T1 Heizung # T7 Probe Rand # T2 Probe Halb # Änderung des PID reglers # wenn myrecarray['T3'][0]+self.delta_temp > myrecarray['T4'][0] # dann neuen Setpoint ..sonst nur updaten. Check_delta = myrecarray["T1"][0] - myrecarray["T3"][0] # Änderung myrecarray['T4'][0] ist jetzt Ablufttemp!!. Med_Temp = (myrecarray["T7"][0] + myrecarray["T6"][0] + myrecarray["T5"][0]) / 3 # Wenn die all. Ofentemperatur die Probentemperatur unterschreitet # ein wenig mehr Temperaturoffset und schneller Nachregeln if myrecarray["T1"][0] > 50: if (Med_Temp - 5) < ((myrecarray["T3"][0] + myrecarray["T2"][0]) / 2): self.kick = self.kick + 1 p1.setKp(3) p1.setKi(3 / 160) if self.kick > 50: self.kick = 50 else: self.kick = 0 p1.setPoint2(self.delta_temp + self.kick) PID_Error = p1.update(Check_delta) SP_Point = myrecarray["T3"][0] + self.delta_temp + self.kick + PID_Error if SP_Point < 10: SP_Point = 10 if SP_Point > 350: SP_Point = 350 # print SP_Point,PID_Error,Check_delta,self.kick,Med_Temp data_str1 = "%s ; %.1f" % (data_str[: len(data_str) - 2], Linseis[0][1]) # print Linseis[0][0],Linseis[0][1] SPQueue.put(SP_Point) DatenQueue.put(data_str1) print data_str1 if step == 100000: break
def run(self): if platform.system()=='Windows': starttime = time.clock() if platform.system()=='Linux': starttime = time.time() print starttime step=0 now_time=0 # p1=PID(8,4/160,4*40) Werte für Regelung mit Totzeit!! p1=PID(2,3/160,2/40) while self.running: # Checking State step = step +1 time.sleep(10) #Daten ueber IP besorgen lock.acquire() daten_IP=GetData(self.ip,self.port,'#02'+chr(13)) lock.release() # echte Zeit als Datensatz verwenden, da die Übertragung eventuell gestört sein könnte if platform.system()=='Windows': now_time = time.clock() -starttime if platform.system()=='Linux': now_time = time.time() -starttime # Formatierung des Datenstring + Zeitstempel data_str= '%.1f ; %.1f %s'%(now_time,self.delta_temp+self.kick,daten_IP) data_str= data_str.replace('+',' ; +') data_str= data_str.replace('-',' ; -') # Fuer Debug-Zwecke Daten nochmal auf die Konsole posten print data_str mydescr = N.dtype([('Zeit', 'float'), ('Delta', 'float'),('T1', 'float'), ('T2', 'float'), ('T3', 'float'),('T4', 'float'),('T5', 'float'), ('T6', 'float'), ('T7', 'float'),('T8', 'float')]) myrecarray = read_array(data_str, mydescr) # T3 Probe # T4 Regelthermoelement # T1 Heizung # T7 Probe Rand # T2 Probe Halb # Änderung des PID reglers # wenn myrecarray['T3'][0]+self.delta_temp > myrecarray['T4'][0] # dann neuen Setpoint ..sonst nur updaten. Check_delta = myrecarray['T1'][0] - myrecarray['T3'][0] Med_Temp = (myrecarray['T7'][0] + myrecarray['T6'][0] +myrecarray['T5'][0] +myrecarray['T4'][0])/4 # Wenn die all. Ofentemperatur die Probentemperatur unterschreitet # ein wenig mehr Temperaturoffset und schneller Nachregeln if myrecarray['T1'][0]>50: if (Med_Temp-5) < ((myrecarray['T3'][0]+myrecarray['T2'][0])/2): self.kick = self.kick + 1 p1.setKp(3) p1.setKi(3/160) if self.kick > 50: self.kick = 50 else: self.kick = 0 p1.setPoint2(self.delta_temp + self.kick) PID_Error = p1.update(Check_delta) SP_Point = (myrecarray['T3'][0] + self.delta_temp + self.kick + PID_Error) if SP_Point<10: SP_Point = 10 if SP_Point>320: SP_Point=320 print SP_Point,PID_Error,Check_delta,self.kick,Med_Temp SPQueue.put(SP_Point) DatenQueue.put(data_str) if step == 100000: break
def run(self): if platform.system()=='Windows': starttime = time.clock() if platform.system()=='Linux': starttime = time.time() print starttime step=0 now_time=0 # p1=PID(8,4/160,4*40) Werte für Regelung mit Totzeit!! p1=PID(2,3/160,2/40) while self.running: # Checking State step = step +1 time.sleep(5) #Daten ueber IP besorgen lock.acquire() daten_IP = GetData(self.ip,self.port,'#02'+chr(13)) lock.release() time.sleep(2) lock.acquire() data_Linseis = GetData('192.168.8.190',10001,'DATA'+chr(13)) lock.release() if data_Linseis[0] != 'A': my_Linseis = N.dtype([('Value1', 'int'),('Value2', 'int'),('Value3', 'int'),('Value4', 'int'),('Value5', 'int'),('Value6', 'int'), ('Value7', 'int'),('Value8', 'int'),('Value9', 'int'),('Value10', 'int'),('Value11', 'int'),('Value12', 'int'), ('Value13', 'int'),('Value14', 'int'),('Value15', 'int'),('Value16', 'int'),('Value17', 'int'),('Value18', 'int'), ('Value19', 'int'),('Value20', 'int'),('Value21', 'int'),('Value22', 'int'),('Value23', 'int'),('Value24', 'int'), ('Value25', 'int'),('Value26', 'int'),('Value27', 'int'),('Value28', 'int'),('Value29', 'int'),('Value30', 'int'), ('Value31', 'int'),('Value32', 'int'),('Value33', 'int'),('Value34', 'int'),('Value35', 'int'),('Value36', 'int')]) if data_Linseis[0] !='T': Linseis = read_array_str(data_Linseis, my_Linseis,separator=',') # echte Zeit als Datensatz verwenden, da die Übertragung eventuell gestört sein könnte if platform.system()=='Windows': now_time = time.clock() -starttime if platform.system()=='Linux': now_time = time.time() -starttime # Formatierung des Datenstring + Zeitstempel data_str= '%.1f ; %.1f %s '%(now_time,self.delta_temp+self.kick,daten_IP) data_str= data_str.replace('+',' ; +') data_str= data_str.replace('-',' ; -') #data_str=data_str + ' ; ' + str(Linseis[0][0]) # Fuer Debug-Zwecke Daten nochmal auf die Konsole posten #print Linseis[0][0] #T1 - Ofenheizung #T2 - Probe Halb #T3 - Probe Mitte #T4 - Abluft-Temp #T5 - T8 Ofenelemente # CO-Rechnungswert (Umrechnung muss erfolgen) mydescr = N.dtype([('Zeit', 'float'), ('Delta', 'float'),('T1', 'float'), ('T2', 'float'), ('T3', 'float'),('T4', 'float'),('T5', 'float'), ('T6', 'float'), ('T7', 'float'),('T8', 'float')]) myrecarray = read_array_str(data_str, mydescr) # T3 Probe # T4 Regelthermoelement # T1 Heizung # T7 Probe Rand # T2 Probe Halb # Änderung des PID reglers # wenn myrecarray['T3'][0]+self.delta_temp > myrecarray['T4'][0] # dann neuen Setpoint ..sonst nur updaten. Check_delta = myrecarray['T1'][0] - myrecarray['T3'][0] # Änderung myrecarray['T4'][0] ist jetzt Ablufttemp!!. Med_Temp = (myrecarray['T7'][0] + myrecarray['T6'][0] +myrecarray['T5'][0])/3 # Wenn die all. Ofentemperatur die Probentemperatur unterschreitet # ein wenig mehr Temperaturoffset und schneller Nachregeln if myrecarray['T1'][0]>50: if (Med_Temp-5) < ((myrecarray['T3'][0]+myrecarray['T2'][0])/2): self.kick = self.kick + 1 p1.setKp(3) p1.setKi(3/160) if self.kick > 50: self.kick = 50 else: self.kick = 0 p1.setPoint2(self.delta_temp + self.kick) PID_Error = p1.update(Check_delta) SP_Point = (myrecarray['T3'][0] + self.delta_temp + self.kick + PID_Error) if SP_Point<10: SP_Point = 10 if SP_Point>350: SP_Point=350 #print SP_Point,PID_Error,Check_delta,self.kick,Med_Temp data_str1= '%s ; %.1f'%(data_str[:len(data_str)-2],Linseis[0][1]) #print Linseis[0][0],Linseis[0][1] SPQueue.put(SP_Point) DatenQueue.put(data_str1) print data_str1 if step == 100000: break