Stellen Sie sich vor, jedes dieser beiden Geräte steht an einem unterschied-
lichen Standort. Der Sender (oder Bus Master) erfragt bei jeden Teilnehmer in
wahlloser Reihenfolge eine dieser Informationen. Die Antwort ist eine Fliess-
kommazahl. Mit Ausnahme des Startzeichens ':' sowie dem CRLF am Ende
werden alle Datenbytes des Telegramms als zwei ASCII Zeichen kodiert (hex
Format oder Base16). Ein Beispiel:
Das Byte 5Bh wird als zwei Zeichen 35h und 42h übertragen (35h = '5', 42h =
'B' in ASCII).
Zu guter Letzt sorgt eine einfache Prüfsumme für die Integrität der übertrage-
nen Daten. Ein einzelnes Telegramm sieht damit wie folgt aus:
Start
Address
:
2 chars
Beachten Sie das die Anfragen des Master ein leeres Datenfeld besitzen!
In einem ersten Schritt wandeln wir die im Base16 (oder Hex-ASCII) Format
vorliegenden Daten zurück in ihre binäre Represenatation. Dies erleichert uns
die nachfolgende Bearbeitung der im Telegramm enthaltenen Informationen.
Sie können - natürlich - eine kleine Lua Funktion schreiben, die dies über-
nimmt. Allerdings bietet der Protokollmonitor für solche Zwecke ein eigenes
base16 Modul um solche Daten flexibel zu handhaben. Das Module ist auf
Seite
222
detailiert beschrieben.
Zur Rückgewinnung der Originaldaten in einem base16 kodierten String über-
geben Sie diesen einfach der Funktion base16.decode(string).
1
l o c a l t g = t e l e g r a m s . t h i s ( )
2
l o c a l b i n d a t a = base16 . decode ( t g : s t r i n g ( ) : sub ( 2 ,
tg:string() liefert alle in einem Telegramm enthaltenen Bytes als Lua string.
Der Doppelpunkt ':' und die End-Of-String Sequenz CRLF sind allerdings nicht
Teil der in Base16 kodierten Daten. Dekodiert werden muss der Teilstring vom
zweiten Byte (Position 2) bis zum dritt-letzten Byte (Position -3). Die Extraktion
eines Teilstrings ist in Lua eine häufig benötigte Anwendung und Lua's string
Modul offeriert hierzu eine geeignete Funktion: sub(first,last).
Das einzige was wir tun müssen ist die sub Funktion direkt vom Ergebnis via
tg:string():sub(2,-3) aufzurufen.
Beachten Sie bitte! Da Lua Strings nur normale Bytes enthalten können, wer-
den alle 9-Bit Daten im Telegramm auf normale Bytes reduziert. Wenn Ihr Pro-
tokoll explizit 9-Bit Werte verwendet, müssen Sie auf die einzelnen Daten per
telegram:data(index) zugreifen.
Das Resultat der Umwandlung wird in Zeile 2 der Variable bindata zuge-
wiesen, welche wir für alle weiteren Schritte verwenden wollen. Der Inhalt der
binären Sequenz ist:
Address
Function
1 byte
1 byte
13.3. TEMPLATE SPRACHSYNTAX
Function
Data
2 chars
0 or 8 chars
Data
Checksum
0 or 4 bytes
1 byte
Checksum
End
2 chars
CRLF
3 ) )
123