Hallo,
ich beschäftige mich seit einigen Wochen mit Python, bin also neu in dem
Thema.
Ich will Werte an eine Zentrale senden. Die Zentrale hat 112 Adressen.
Jede Adresse bekommt einen Wert von einem Byte gesendet.
Es wird immer ein Byte mit der Adresse gefolgt von einem Byte mit den
entsprechenden Werten gesendet.
Prinzipieller Ablauf:
1 | Schnittstelle öffnen
|
2 | Adresse1 (1 Byte)
|
3 | Werte für Adresse 1 (1Byte)
|
4 | Adresse2 (1 Byte)
|
5 | Werte für Adresse 2 (1Byte)
|
6 | Adresse3 (1 Byte)
|
7 | Werte für Adresse 3 (1Byte)
|
8 | ...
|
9 | Schnittstelle schließen
|
Die Adressen und die Werte können direkt nacheinander ohne Pause
gesendet werden. Das Problem ist hierbei aber folgendes. Wenn genau ein
Byte aufgrund eines Übertragungsfehlers verloren geht, verschiebt sich
die ganze Zuordnung und es kommt nur noch "Müll" heraus.
Deswegen soll zwischen den einzelnen Paaren bestehend aus Adresse und
Daten eine Pause sein. Die Pause soll mindestens die Länge von 10 Bit
haben. Die Pause dient der Zentrale zur Synchronisierung.
Ich habe mir folgendes Programm überlegt. Da ich mir bei der Funktion
von ser.flush() nicht ganz sicher bin, wäre meine Frage ob ich da so
alles richtig verstanden habe.
1 | ser = serial.Serial('/dev/ttyUSB0', 19200)
|
2 | for i in range(112):
|
3 | ser.write(bytes([128|i]) + bytes([daten[i]]))
|
4 | ser.flush()
|
5 | time.sleep(0.001)
|
6 | ser.close()
|
Wenn ich das richtig verstanden habe wird mit der Zeile ser.write....
die beiden Bytes Adresse und Wert gesendet.
Danach wartet ser.flush() darauf, daß die beiden Bytes vollständig
gesendet wurden.
Erst nach dem vollständigen Senden der beiden Bytes startet jetzt meine
Wartezeit von 1ms.
Nach der Wartezeit wird das nächste Paar gesendet.
Ist das so alles so korrekt, oder habe ich etwas falsch verstanden?
Die Funktion von dem Programm ist gegeben, läuft alles. Allerdings habe
ich keine Möglichkeit, die Pause zu Überprüfen. Hier bräuchte ich ein
vernünftiges Speicheroszi. Und solange kein Byte verloren geht,
funktioniert das ganze auch ohne die Pause.