2014-07-03 12 views
5

Im usando pyserial per elaborare alcuni dati che vengono trasmessi su un'interfaccia seriale con 1.25MBaud. Im utilizzando un filo molto semplice per raccogliere i dati:PySerial: danneggiamento dei dati nei primi 256 byte

class SerialReadThread(StoppableThread): 

    def __init__(self, port): 
     super(SerialReadThread, self).__init__() 
     self.serial = s.Serial(
      port=port, 
      baudrate=1250000, # 1.25 MBaud 
      bytesize=s.EIGHTBITS, 
      parity=s.PARITY_NONE, 
      stopbits=s.STOPBITS_ONE, 
      timeout=0.5 # Do not wait longer than a half second for next message 
     ) 
     self.data = [] 

    def run(self): 
     # Discard old Buffer Data 
     self.serial.flushInput() 
     #self.serial.read(256) 
     while not self.stopped(): 
      data = self.serial.read(64) 
      self.data.append(data) 
      log.debug(":".join("{:02x}".format(ord(c)) for c in data)) 

Se leggo ed elaborare i dati ottengo allways un byte di sbagliato nei primi 256 byte. Uno dei messaggi che sono normali 8 byte è lungo 9 byte e non ho idea da dove provenga questo byte aggiuntivo. Se avvio il mittente dopo aver avviato il ricevitore, non vengono trasmessi byte errati. L'unica soluzione finora che funziona è quella di commentare nella riga self.serial.read(256). Dopo di ciò, non si verificano errori anche se leggo molti dati.

C'è un'altra soluzione oltre a saltare i primi messaggi?

risposta

0

Questo è probabilmente solo un rumore sulla linea. Di solito per baudrate più di 115200 avete bisogno di 2 bit di stop, quindi sarà:

stopbits=s.STOPBITS_TWO 
+0

Non credo che il rumore. Perché dovrebbe esserci rumore durante i primi 256 byte e mai dopo? E non posso semplicemente impostare le battute su due, questo non corrisponderebbe alle impostazioni specificate dal mittente. – jrast

+0

Ci sono cose come l'induttanza parassita (I) e la capacità (C) e, a causa di esso, il rumore è maggiore all'inizio della trasmissione quando la linea inizia a cambiare I e C cambiando la tensione. Fondamentalmente ci saranno oscillazioni più grandi in linea all'inizio della trasmissione. Per dimostrarlo o eliminarlo hai bisogno dell'oscilloscopio digitale. Ma in ogni caso, secondo la mia esperienza, hai bisogno di 2 stop bit a tale velocità di trasmissione – cy8g3n

+0

Puoi anche provare a comprare un buon cavo USB di alta qualità, ma non è garantito che funzioni perché il problema potrebbe essere nella periferica del chip. – cy8g3n

Problemi correlati