Herunterladen Inhalt Inhalt Diese Seite drucken

IFTOOLS MSB-RS485-PLUS Handbuch Seite 128

Inhaltsverzeichnis

Werbung

KAPITEL 13. DER PROTOKOLLMONITOR
l o c a l t e l e g r a m = t e l e g r a m s . a t ( i n d e x )
Dabei adressiert der Parameter index ein Telegramm auf zweierlei Weise.
Ein positiver Index (absolute Adresse oder Position innerhalb der Aufzeich-
nung) gibt das Telegramm mit dem angebenen Index bzw. Nummer zurück.
So liefert ein Index von 1 das allererste Telegramm , ein Index von 100 das
Hunderste. Sollte kein Telegramm an dem angegebenen Position existieren er-
halten Sie ein klassisches Lua nil.
Weit interessanter sind allerdings 'negative' Indexe. Ein negativer Indexwert
steht für 'relative Adressierung' und zählt rückwärts vom aktuell in out() be-
handelten Telegramm.
So bedeutet ein Index von -1 das aktuelle Telegramm in out() und telegrams.this()
ist lediglich ein etwas eingängigerer Alias dafür. Ein Index von -2 greift auf das
vorherige Telegramm zu. Auch hier existiert mit telegrams.prev() ein Alias.
Anwender mit Lua Background dürften negative Indexe bereits aus mehreren
Lua String Funktionen geläufig sein.
Die folgenden Code Zeilen demonstrieren wie Sie die Antwortzeit zwischen
dem vorherigen und aktuellen Telegramm ermitteln können:
1
function o u t ( )
2
l o c a l t c u r r = t e l e g r a m s . t h i s ( )
l o c a l t p r e v = t e l e g r a m s . prev ( )
3
4
i f not t p r e v then
5
t p r e v = t c u r r
6
end
7
l o c a l d t = t c u r r : t i m e ( )
end
8
Während telegrams.this() immer ein gültiges Ergebnis liefert, ist dies
beim Zugriff auf den Vorläufer des allerersten Telegramms nicht gegeben. tprev
bekommt einen nil Wert zugewiesen, sobald Sie zum Anfang der Aufzeich-
nung scrollen. Da nil keine gültigen Telegrammdaten darstellt, belohnt Sie
Lua ohne die Abfrage in Zeile 4 hier mit einem leeren Telegramm Fenster.
In den allermeisten Fällen werden Sie in out() nur auf das entsprechend
zugehörige Telegramm per telegrams.this() zugreifen. Es gibt allerdings
auch Protokolle bei denen die Reaktion eines Busteilnehmers von einem zuvor
empfangenen Telegramm abhängt. Um ein solches Verhalten korrekt nachzu-
bilden müssen Sie durch die davor liegenden Telegramme iterieren und diese
entsprechend auswerten.
Die Zugriffszeit von telegrams.at(index) ist linear, nicht desto trotz ist
es keine gute Idee über eine unbegrenzte Anzahl von Telegrammen zu iterie-
ren, da dies leicht zu Endlosschleifen führt die der Lua Interpreter mit einem
'Overrun of allowed executions' bestraft. Vermeiden Sie dies indem Sie z.B. die
Anzahl der telegrams.at(index) Zugriffe innerhalb einer Schleife auf eine
von vorn herein bestimmte Anzahl begrenzen.
Wie Sie auf das aktuelle oder auch beliebig andere Telegramm in out() zu-
greifen haben wir nun im Detail erörtert. Wenden wir uns jetzt dem eigentlichen
Ergebnis zu, dem Rückgabewert telegram.
116
t p r e v : t i m e ( )

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis