Seite 1 von 1

InterThreadKommunikation

Verfasst: Freitag 3. Februar 2012, 17:53
von hypnoticum
Hallo,
Ich habe einen Thread gestartet der wie folgt aussieht:

Code: Alles auswählen

class SerialThread(threading.Thread):
    def __init__(self, Prm): 
        self.Prm = Prm
        self.SerialOK = threading.Event()
        self.halt = threading.Event()
        threading.Thread.__init__(self)

    def run(self):  
        self.client = serial.Serial(  port = self.Prm['port'], 
                                      baudrate = self.Prm['baudrate'], 
                                      bytesize = self.Prm['bytesize'], 
                                      parity = self.Prm['parity'], 
                                      stopbits = self.Prm['stopbits'], 
                                      timeout = 60)
        
        buffer = ''
        i = 0
        
        if self.Prm['boot'] == 'true':
            boot = False
            while not boot:
                buffer = buffer + self.client.read(self.client.inWaiting())
                
                if buffer.count('\n') > i: 
                    lines = buffer.split('\n')
                    if self.Prm['print'] == 'true':
                        print lines[i] 
                    i = i + 1       
                    
                if buffer.rsplit('\n', 1)[-1].strip() == self.Prm['Prompt01']:
                    self.client.write(self.Prm['Login']) 
                    print buffer.rsplit('\n', 1)[-1].strip()
                    buffer = buffer + '\n' 
                    boot = True               
                        
        self.SerialOK.set()   
               
    def stop(self):
        self.halt.set()
        self.client.close()
nun starte ich einen zweiten Thread, der die Daten der seriellen Schnittstelle weiterverarbeiten soll:

Code: Alles auswählen

class GSM_ATA_Thread(threading.Thread):
    def __init__(self, Prm, client): 
        self.Prm = Prm
        self.client = client
        self.Connected = threading.Event()
        self.halt = threading.Event()
        threading.Thread.__init__(self)

    def run(self):    
        i = 0
        connected = False
        buffer = ''
        
        
        print "waiting for Call"
        while not connected:
            buffer = buffer + self.client.read(self.client.inWaiting())
            
            if buffer.rsplit('\n', 1)[-1].strip() == self.Prm['Prompt02']:
                self.client.write(self.Prm['SerialClient'])
                buffer = buffer + '\n'
               
            if buffer.count('\n') > i: 
                print '--------> ' + str(buffer.count('\n'))
                print '--------> ' + str(i)
                lines = buffer.split('\n')
                print lines[i]
                

                if lines[i].strip().upper() == self.Prm['A']:
                    self.client.write(self.Prm['C'])
                    buffer = buffer + '\n'
                    print 'accepted!'
  
                if lines[i].strip().upper() == self.Prm['B']:
                    self.client.write(self.Prm['D'])
                    buffer = buffer + '\n'
                    print 'aborted!'
                    
                i = i + 1
  
        print "GSM_ATA_Thread terminated" 
irgendwie wird der Text zum Prm['A'] nie erkannt, bzw ich verstehe die Ausgabe nicht ganz.
sollte ich das anders machen?
Danke

Re: InterThreadKommunikation

Verfasst: Montag 6. Februar 2012, 14:00
von hypnoticum
Hat sich erledigt. Ich hatte Formatierungszeichen in den Strings die detektiert werden sollten und musste Verzögerungen bei den threads berücksichtigen.