Ich werde das binäre Senden und Empfangen unter Verwendung von Pyserial als Erinnerung beschreiben.
Referenz: Binärdaten über Pyserial (serielle Python-Schnittstelle) Unter diesen sendet die Serial.write () -Methode von pyserial nur Zeichenfolgendaten. Ist geschrieben.
Sie können eine binär konvertierte Version senden, sodass die Ausgabe ungefähr "\ x00" ist. ("\ X" bedeutet, die folgenden zwei Zeichen als ganzzahligen Wert in hexadezimaler Notation zu interpretieren.)
Als Konvertierungsbeispiel Es wird beschrieben, wie [Array - feste Datentypsequenz] verwendet wird (http://ja.pymotw.com/2/array/).
import serial
import array
#Ich möchte Binärdaten senden
b = [0xc0, 0x04, 0x00]
print(b)
#Wird nach der Konvertierung in eine Dezimalzahl angezeigt
# >>>[192, 4, 0]
#Methode mit Konvertierungsarray zu Binary of Python
b_data=array.array('B', [0xc0, 0x04, 0x00]).tostring()
print(b_data)
# >>>b'\xc0\x04\x00'
#Methode mit Konvertierungsbytes für Binary of Python
b2_data = bytes(b)
print(b2_data)
# >>>b'\xc0\x04\x00'
#Beide sind im Vergleich gleich.
print(b_data==b2_data)
# >>>True
Es ist einfacher, bytes () zu verwenden, verwenden Sie dies also. Es kann beim Austausch im binären Modus von TWELITE im vorherigen Artikel verwendet werden.
#Senden Sie zum Beispiel
senddata=[0xA5,0x5A,0x80,0x07,0x00,0x00,0x00,0x64,0xFF,0xFF,0x02,0x67]
print(senddata)
#Die Druckausgabe erfolgt in Dezimalschreibweise
# [65, 90, 128, 7, 1, 0, 0, 100, 255, 255, 2, 103]
#In Binär konvertieren
send_binary =bytes(senddata)
# bytearray()Vielleicht
# send_binary =bytearray(senddata)
print(send_binary)
#Daten senden Binär
# b'\xa5Z\x80\x07\x01\x00\x00d\xff\xff\x02g'
#Senden Sie per Pyserial
with serial.Serial('COM12', 115200) as ser:
print('---')
ser.write(send_binary)
print('---')
with serial.Serial('COM12', 115200) as ser:
#Geben Sie die Anzahl der zu lesenden Bytes im Argument read an.
b_reply = ser.read(23)
#Beim Lesen aller
b_reply = ser.read_all()
print(b_reply)
# >>> b'\xa5Z\x80\x04\xdb\xa1\x98\x01\xe3\x04\xa5Z\x80\x07\x01\x04\x00\x013<")\x04'
#Mit dem struct-Modul muss angegeben werden, wie viele Bytes und welcher Typ gelesen werden sollen.
#Dieses Mal werden 23 Bytes in Schritten von 1 Byte gelesen.
#23B ist dasselbe wie 23 Bs in einer Reihe. B ist ein vorzeichenloser Zeichentyp in der Sprache C, der in Python eine Ganzzahl von 1 Byte ist.
reply =struct.unpack('23B',b_reply)
print(reply)
# >>> 165, 90, 128, 4, 219, 161, 152, 1, 227, 4, 165, 90, 128, 7, 1, 4, 0, 1, 51, 60, 34, 41, 4
#Die letzten 4 sind(EOT)Übertragungsendezeichen (Ende-of-Transmission character)
#Analysieren Sie gemäß den Spezifikationen, welche Anzahl von Bytes welche Informationen enthält.