KAPITEL 13. DER PROTOKOLLMONITOR
Vorgabe gleichbedeutend mit dem Stringanfang ist können wir hier auf die Po-
sition verzichten.
Die eigentliche 'Magie' oder Vielfalt von bunpack liegt in seinem Formatstring.
Jeweils ein einzelnes Zeichen ist einem ganz bestimmten Datentyp zugeord-
net. Ein '<' oder '>' davor definiert die Byteordnung. Ein '<' steht für Little Endi-
an, ein '>' bedeutet eine Interpretation als Big Endian.
Der Formatparamter versteht eine ganze Reihe unterschiedlichster Typen. Sie
sind alle detailiert im Abschnitt
In unserem Beispiel interpretiert bunpack die ersten vier Bytes als Vorzeichen
behaftete 32 Bit Zahl in Little-Endian, d.h. niedriges Byte zuerst ("<i"). Die
Funktion liefert als ersten Wert die Position nach erfolgter Dekodierung. Hier
ist pos 5 da der nächste Wert (die Fließkommazahl) an Position 5 beginnt. Das
zweite Resultat i ist die Longwert selbst, also 75000.
Die Umwandlung in Zeile 3 startet an der Position die wir im vorherigen Auf-
ruf zurück erhalten haben. Da es sich bei dem erwarteten Zahlentyp um eine
32-Bit Fließkommazahl in Little-Endian Ordnung handelt, übergeben wir als
Formatstring "<f".
3
pos , f = bunpack ( seq , " < f " , pos )
Das Resultat ist erneut ein Wertepaar. pos zeigt auf das neunte Byte (das auf
die Fließkommazahl folgende Byte) und f enthält den Fließkommawert 10.85.
In unserem Beispiel folgen beide Zahlenwerte (long integer und float) direkt
aufeinander. In einem solchen Fall können wir die Extraktion auch in einem
Rutsch durchführen und auf die 'Mitnahme' des Positionsparamters ganz ver-
zichten.
pos , i , f = bunpack ( seq , " < i < f " )
Fantastisch - nicht wahr!
Und da Ihnen der Protokollmonitor erlaubt, mit diversen Formatparametern zu
'spielen' und gleichzeitig die Auswirkung auf die Telegrammdarstellung zu se-
hen, ist es besonders einfach Telegrammabschnitte auf bestimmte Datentypen
hin zu prüfen. Handelt es sich um ein Ganz- oder Fließkommazahl, um Big
oder Little-Endian? Die Antwort ist immer nur eine kurze Änderung des For-
matparameters entfernt - ein gewaltiger Vorteil gerade bei unbekannten Proto-
kollspezifikationen.
Ok, lassen Sie uns nach diesem kleinen Exkurs zu unserem Tutorial zurück
kehren. Wir hatten bereits die Hex ASCII Daten in ihre binäre Repräsentation
umgewandelt. Sie erinnern sich, daß ein Antwort Telegramm den angeforder-
ten Wert (übergeben als Funktionsnummer) als Fließkommazahl enthält. Hier
noch einmal die Struktur des Antwort Telegramms:
Address
Function
1 byte
1 byte
Die folgenden Zeilen fassen alle bisherigen Modifikationen in der out() Funk-
tion zusammen:
1
function o u t ( )
2
128
18.2.3
aufgelistet.
Float Number
Checksum
4 bytes
1 byte