Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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