2017-03-28 1 views
0

Ich muss eine bestimmte Größe Daten durch serielle Schnittstelle während bestimmter Zeit warten. Wenn ich für diese Zeit weniger Daten bekomme, möchte ich Lesedaten vermeiden. Wenn ich früh genug Daten bekomme, möchte ich sie lesen und aufhören, auch auf Daten zu warten.Warten auf Daten über die serielle Schnittstelle während einer bestimmten Zeit in Python

Meine aktuelle Lösung sieht wie folgt aus:

serial.open() 
start_time = time() 
while serial.in_waiting < expected_data_size: # waiting certain size of data 
    if time_to_wait < time() - start_time: # time is expired 
     serial.close() 
     return 
data = serial.read(expected_data_size) 
serial.close() 

Aber ich denke, es ist nicht gut Lösung, weil Vergleiche (in „während“ und „wenn“ Blöcke) viele Male auftreten, während es für eine wartet Daten.

Bitte beraten Sie mich, wie Sie es besser in Python 3 implementieren. Um mit der seriellen Schnittstelle zu arbeiten, verwende ich pySerial.

Vielen Dank im Voraus!

Antwort

1

müssen Sie kein neues Rad erfinden. 1) Wenn Sie den Port öffnen, sollten Sie Timeout einrichten. 2) Nachdem der Port geöffnet wurde, sollten Sie die Datengröße so einstellen, dass sie in der "read" API gelesen wird.

lesen API wird entweder mit der Größe der Daten zurückgegeben oder weniger Daten zurückgegeben, wenn Timeout auftritt.

siehe Probe aus Dokumentation:

>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser: 
...  x = ser.read()   # read one byte 
...  s = ser.read(10)  # read up to ten bytes (timeout) 
+0

Vielen Dank für Ihre Antwort! Genau das brauche ich! Kannst du mir noch etwas sagen? Ich weiß, dass die ersten N Sekunden ich sowieso nicht genug Daten bekommen werde. Lohnt es sich, vor ser.read (data_size) sleep (N) hinzuzufügen oder nicht? –

+0

@RomanAlexeev, Sie müssen nicht schlafen hinzufügen, API wird das für Sie behandeln. – Windchill

+0

Vielen Dank für Ihre Hilfe! –

Verwandte Themen