Elexol Ether I/O 24 Modul
Heinz
- css
Moin!
Gestern habe ich mir das Elexol Ether I/O 24 Modul (http://www.elexol.com/IO_Modules/Ether_IO_24.php) zum Testen einfacher Schaltungen gekauft und bin nun am Ausprobieren mit Python. Wenn man nun einen einfachen Befehl wie '%' an das Gerät schickt, so kommt nach Anleitung ein String zurück, der sich wiefolgt zusammensetzt:
1 Byte Response Identifier
3 Byte IO24 Serial
4 Byte Sender IP
6 Byte Sender MAC
2 Byte Sender Port
Als Ergebnis erhält man dann:
'%\x02\x01\x8e\xc0\xa8\x00\n\x00\x11\xd8j\x9eR\x80;'
Meine Frage ist nun, wie dieser String genau codiert ist. Man kann ihn wohl mit dem struct-Modul zerlegen, doch wie genau mache ich das? Und was macht das struct Modul in diesem Falle eigentlich genau?
Mfg, Heinz
Hallo,
1 Byte Response Identifier
3 Byte IO24 Serial
4 Byte Sender IP
6 Byte Sender MAC
2 Byte Sender Port
Als Ergebnis erhält man dann:
'%\x02\x01\x8e\xc0\xa8\x00\n\x00\x11\xd8j\x9eR\x80;'
Meine Frage ist nun, wie dieser String genau codiert ist.
steht doch ausführlich oben drüber.
1 Byte Response Identifier 0x25 = '%'
3 Byte IO24 Serial 0x02, 0x01, 0x8E = 00000010, 00000001, 10001110 binär
4 Byte Sender IP 192.168.0.10
6 Byte Sender MAC 00 11 D8 6A 9E 52
2 Byte Sender Port 15232 (0x3B80) oder 32827 (0x803B)
Bei der Portnummer ist nicht ganz klar, ob LSB zuerst übertragen wird (Intel-Format) oder das MSB (Motorola). Deswegen sind da zwei Interpretationen möglich.
Man kann ihn wohl mit dem struct-Modul zerlegen, doch wie genau mache ich das? Und was macht das struct Modul in diesem Falle eigentlich genau?
Ich kenne Python nicht, und das struct-Modul noch weniger. Aber eigentlich brauchst du doch nur auf die einzelnen Bytes des Strings zuzugreifen.
So long,
Martin
Moin!
Als Ergebnis erhält man dann:
'%\x02\x01\x8e\xc0\xa8\x00\n\x00\x11\xd8j\x9eR\x80;'Meine Frage ist nun, wie dieser String genau codiert ist.
steht doch ausführlich oben drüber.
1 Byte Response Identifier 0x25 = '%'
3 Byte IO24 Serial 0x02, 0x01, 0x8E = 00000010, 00000001, 10001110 binär
4 Byte Sender IP 192.168.0.10
6 Byte Sender MAC 00 11 D8 6A 9E 52
2 Byte Sender Port 15232 (0x3B80) oder 32827 (0x803B)Bei der Portnummer ist nicht ganz klar, ob LSB zuerst übertragen wird (Intel-Format) oder das MSB (Motorola). Deswegen sind da zwei Interpretationen möglich.
Danke für die genaue Aufdröselung. Was mir aber nicht ganz klar ist, ist folgendes:
Warum wird der Linefeed (\n) z.B. nicht als \x0A kodiert sondern steht hier als Escape-Sequenz? Das gleiche ist auch bei % oder dem Strichpunkt für mich nicht ganz erklärlich ...
Und was bedeutet das \xd8j bzw. das \x9eR? Das sind doch keine gültigen Hexadezimalzahlen, oder?
Mfg, Heinz
Yerf!
Warum wird der Linefeed (\n) z.B. nicht als \x0A kodiert sondern steht hier als Escape-Sequenz? Das gleiche ist auch bei % oder dem Strichpunkt für mich nicht ganz erklärlich ...
Und was bedeutet das \xd8j bzw. das \x9eR? Das sind doch keine gültigen Hexadezimalzahlen, oder?
Scheint einfach nur eine Eigenheit der Ausgabe zu sein:
Gruß,
Harlequin