Ich habe ein gutes Stück gesucht und gelesen, aber habe keine genaue Antwort gefunden. Ich mache Python-Anwendung, die mit anderen über den seriellen Port kommunizieren wird. Ich habe PySerial verwendet, um dies zu erreichen. Die Arten von Paketen, die ich senden möchte, sind Statusinformationen und Datenlesungen. schlage ich vor meiner Pakete wie folgt zu bilden:Python: Was ist der beste Weg, um Statusbits und Zeitstempel mit PySerial zu senden?
[ Start Byte ][ Length ][ Message ][ End Byte ][ Checksum ]
Obwohl ich nicht glaube, ich das Ende Byte müssen, da dort eine Länge haben. Hab ich recht?
Ich denke, die ‚Message‘ Teil des Pakets für Statusinformationen wie so die Gestaltung:
[ MsgTypeID ][ PacketID ][ Status Bits ][ Timestamp ]
Die Botschaft ID ist nur zu unterscheiden, dass dies ein Statuspaket ist eher als ein Datenpaket. Die Statusinformation selbst besteht aus 16 Bits, die den Zustand einer Anzahl von Subsystemen in der sendenden Anwendung darstellen. Für einige dieser Subsysteme liefert ein einzelnes Bit genügend Informationen ("0" bedeutet, dass das Subsystem ausgeschaltet ist/niedrig/falsch, "1" für "Ein/Hoch/Wahr"). Andere benötigen 2 oder 3 Bits (die Zustände und dergleichen darstellen). Um das System zu prototypieren, konstruiere ich einfach einen String, der die Bits zu einem so etwas wie '1001110101101100'
verkettet und diesen an den seriellen Port sendet, wobei die Checksumme ein Modulo 256 der Statusbits ist.
Ich bin ziemlich neu in Python und serielle Kommunikation, aber ich weiß, das ist wahrscheinlich eine Verschwendung von Bandbreite. Ich weiß, dass PySerial Strings senden muss, aber jedes Bit als '0' oder '1' darstellen muss, so dass für jedes Bit eine vollständige String-Repräsentation verwendet wird. Ich habe mich gefragt, was der beste Weg ist, diese Bits zu senden, um die Bandbreite zu reduzieren?
Zum Beispiel würde ich nehmen jeweils 8 Bits, wandeln sie verketteten hex Bytes verhexen und zu senden, wie in:
'10011101' + '01101100'
dargestellt als
'\x9d' + '\x6c'
oder sollte ich sie als ASCII senden ? Ich habe auch das Struct-Modul erwähnt. Sollte ich stattdessen diese Route gehen?
Die andere Sache, die ich mich wundere, ist, wie man die Zeitstempel Teile der Nachricht darstellt.
Jede Hilfe, Vorschläge, die Sie mir geben können, würde sehr geschätzt werden. sehr viel
Thanks :)
Danke für Ihre Antwort Thomas. – Jack
@Jack: Gern geschehen. Kannst du tun, was du versuchst? –
Ich werde mir das Strukturmodul ansehen. Ich bin mir jedoch nicht sicher, ob ich verstehe, was du meinst. Wenn ich die Bits als '11011001' dargestellt habe, wie bekomme ich die codierte Zeichenketten-Darstellung dieser binären Zahl (schon Zeichenfolge dargestellt)? – Jack