Gegeben ist ein Analog-Modul, welches an einem RS485BUS hängt. Der Master pollt regelmäßig die Daten von dem Modul.
Der Datendump aud dem Bus sieht so aus:
Code: Alles auswählen
f 55 aa 50 60 00 02 00 a1 93 ff 55 aa 60 50 01 00 31 ff 55 aa 50 60 01 02 00 00
33 ff 55 aa 60 50 02 00 32 ff 55 aa 50 60 02 02 00 67 57 ff 55 aa 60 50 03 00 33 ff 55 aa 50 60 03 02 00 a2 93 ff 55 aa
60 50 04 00 34 ff 55 aa 50 60 04 02 00 a3 95 ff 55 aa 60 50 05 00 35 ff 55 aa 50 60 05 02 00 4b 7c ff 55 aa 60 50 06 00
36 ff 55 aa 50 60 06 02 00 40 74 ff 55 aa 00 50 00 02 07 01 54 ff 55 aa 50 00 00 02 07 02 57 ff 55 aa 10 50 00 00 40 ff
55 aa 50 10 00 01 07 46 ff 55 aa 60 50 00 00 30 ff 55 aa 50 60 00 02 00 a1 93 ff 55 aa 60 50 01 00 31 ff 55 aa 50 60 01
02 00 00 33 ff 55 aa 60 50 02 00 32 ff 55 aa 50 60 02 02 00 67 57 ff 55 aa 60 50 03 00 33 ff 55 aa 50 60 03 02 00 a2 93
ff 55 aa 60 50 04 00 34 ff 55 aa 50 60 04 02 00 a1 97 ff 55 aa 60 50 05 00 35 ff 55 aa 50 60 05 02 00 4a 7d ff 55 aa 60
50 06 00 36 ff 55 aa 50 60 06 02 00 40 74 ff 55 aa 00 50 00 02 07 01 54 ff 55 aa 50 00 00 02 07 02 57 ff 55 aa 10 50 00
00 40 ff 55 aa 50 10 00 01 07 46 ff 55 aa 60 50 00 00 30 ff 55 aa 50 60 00 02 00 a1 93 ff 55 aa 60 50 01 00 31 ff 55 aa
50 60 01 02 00 00 33 ff 55 aa 60 50 02 00 32 ff 55 aa 50 60 02 02 00 67 57 ff 55 aa 60 50 03 00 33 ff 55 aa 50 60 03 02
00 a2 93 ff 55 aa 60 50 04 00 34 ff 55 aa 50 60 04 02 00 a1 97 ff 55 aa 60 50 05 00 35 ff 55 aa 50 60 05 02 00 4a 7d ff
55 aa 60 50 06 00 36 ff 55 aa 50 60 06 02 00 40 74 ff 55 aa 00 50 00 02 07 01 54 ff 55 aa 50 00 00 02 07 02 57 ff 55 aa
10 50 00 00 40 ff 55 aa 50 10 00 01 07 46 ff 55 aa 60 50 00 00 30 ff 55 aa 50 60 00 02 00 a1 93 ff 55 aa 60 50 01 00 31
ff 55 aa 50 60 01 02 00 00 33 ff 55 aa 60 50 02 00 32 ff 55 aa 50 60 02 02 00 67 57 ff 55 aa 60 50 03 00 33 ff 55 aa 50
Code: Alles auswählen
ff 55 aa 50 60 00 02 00 a1 93
ff 55 aa 50 60 01 02 00 00 33
ff 55 aa 50 60 02 02 00 66 56
ff 55 aa 50 60 03 02 00 a2 93
ff 55 aa 50 60 04 02 00 a2 94
ff 55 aa 50 60 05 02 00 4b 7c
Code: Alles auswählen
ff 55 aa Startsequenz
50 60 Quelladresse, Zieladresse
00 Kommando, bzw Kanaladresse
02 Anzahl Datenbytes
00 ab Datenwort
93 Xor über Alles
Code: Alles auswählen
ser_z = (serial.Serial('/dev/csTTY3' , 9600))
while True:
for c in ser_z.read(1): // Ankommende einzelne Zeichen wird in c gespeichert
string+=c // Zeichen werden in string aneinander gesetzt
if string.find('\xff\x55\xaa\x50\x60\'): //Suche nach der Zeichenfolge, wenn Zeichenfolge erkannt
data=ser_z.read(4) // Einlesen der nächsten 4 Zeichen da müsste in data jetzt zb 00 02 00 00 33 oder 05 02 00 4b 7c drin stehen
if data[0]==(’\x00’): //Wenn das 1 byte 00 ist, nehme den Wert der 4. Stelle und pack den in Ubat
Ubat=data[3]
if data[0]==('\x01’):
Uger=data[3]
usw.
Die Baudrate stimmt und ich kann die Daten auch richtig umwandeln und lesen:
255 85 170 80 96 3 2 0 142
Wenn ich das mache:
data=ser_z.read(1)
print ( ord(data[0]))
Im Moment kommt da das raus:
0
255
255
255
255
85
0