2016-04-06 4 views
0

Ich habe ein Problem mit pyserialAusgabe von seriell mit Pyserial lesen.

Zuerst stellen Sie eine Verbindung:

ser = serial.Serial(
device, 
baudrate=115200, 
parity=serial.PARITY_NONE, 
stopbits=serial.STOPBITS_ONE, 
bytesize=serial.EIGHTBITS 
) 

Wenn ich eine Taste ein Menü drücken erscheinen (ich nicht dieses Menü sehen können, aber ich weiß, wenn ich ‚1‘ drücken erhalten einen Dump von Daten):

0=Cfg 
1=Dump 
2=Erase 
3=Cal 
In-> 

In meinem Code drücken '1':

cmd = "1" 
ser.write(cmd.encode('ascii')) 

S o, wenn ich drücke ‚1‘ das serielle Ergebnis eine sehr lange Liste von Nummer ist wie folgt:

816 81e 81e 
828 820 820 
816 816 81a 
82a 826 824 
816 80e 81a 
81e 824 820 
820 81a 80e 
816 80e 81e 
82a 81c 824 
... and many other 

Ich versuche, die Ausgabe mit diesem Befehl nach 60 Sekunden zu lesen: (60 Sekunden geht es um eine Zeit scroll alle Zeile)

time.sleep(60) 
dumpfile.write(str(ser.read_all())) 

Aber in Dumpfile habe ich nur ein paar Zeilen. Wie kann ich die Gesamtausgabe der seriellen lesen?

+0

hinzufügen mehr schlafen? oder benutzen Sie einen Sentinal, um auf eine Sequenz zu warten, die signalisiert, dass sie erledigt ist? –

+0

Ich versuche, den Schlaf zu erhöhen, aber ich denke, ist ein Pufferproblem. Die beste Lösung, vielleicht, ist Zeile für Zeile gelesen, aber ich weiß nicht wie !! – karmax

+1

Was ist ser.read_all()? Es ist nicht in der pySerial API-Dokumentation aufgeführt: https://pythonhosted.org/pyserial/pyserial_api.html – Neil

Antwort

0

Nach einer langen Nacht fand ich die Lösung !!

while 1: 
    serial_line = ser.readline() 
    dumpfile.write(str(serial_line)) 
    print serial_line #for debug 
    if len(serial_line) == 0: 
     break