KAPITEL 20. KOMMANDOZEILEN API
Modbus RTU Telegramme, indem es die Inaktiv (Idle) Zeiten zwischen den ein-
zelnen Datenbytes auswertet. Modbus RTU spezifiziert eine Idle Zeit von 3.5
Byte (die Zeit, die zur Übertragung von 3.5 Byte benötigt wird) als Telegramm
Trennung. Im Falle einer größeren inaktiven Pause (idle time) enthält die glo-
bale Variable seq (Zeile 2) das komplette Telegramm.
Modbus RTU verwendet eine 16 Bit CRC16 Prüfsumme die in den letzten bei-
den Bytes eines Telegramms übertragen werden. Das Lua Skript testet zu-
nächst die Telegrammlänge (Zeile 7) auf mindestens 2 Bytes (um den Zugriff
auf nicht vorhandene Daten zu vermeiden), und vergleicht anschließend die
letzten beiden Bytes mit der berechneten Prüfsumme. Die Funktion trigger
liefert true wenn die Trigger Bedingung zutrifft, d.h. die empfangene Prüfsum-
me nicht der berechneten entspricht.
1
r e p r e s e n t s t h e a c t u a l t e l e g r a m
2
seq = " "
3
function t r i g g e r ( data , i n t v a l , d i r , a l t e r )
4
i f i n t v a l > t r a n s m i s s i o n . bytepause ( 3 . 5 ) then
5
seq r e p r e s e n t s t h e c u r r e n t telegram , t e s t checksum
6
read 16 b i t ckecksum o f c u r r e n t t e l e g r a m
7
i f #seq >= 2 then
8
l o c a l c k s _ i s = seq : b y t e ( 1)
9
l o c a l cks_must = checksum . crc16_modbus ( seq : sub (1 ,
10
i f c k s _ i s ~= cks_must then
11
r e t u r n t r u e
12
end
13
end
14
s t a r t a new t e l e g r a m sequence
15
seq = " "
end
16
17
add t h e c u r r e n t data b y t e t o t h e a c t u a l t e l e g r a m sequence
18
seq = seq . . s t r i n g . char ( data )
r e t u r n f a l s e ;
19
end
20
Sie finden das entsprechende Skript im examples/API Verzeichnis.
Modbus RTU Telegramme sind auf eine maximale Länge von 256 Bytes limi-
tiert. In unserem Beispiel wollen wir mindestens 10 Telegramme vor und nach
dem Telegramm mit der ungültigen Prüfsumme aufzeichnen. Dies gibt uns eine
Pre- und Post-Trigger Anzahl von 2560.
msb_record | msb_trigger --pre-triger=2560 --post-trigger=2560
script.lua > record.msblog
Beachten Sie, das es sich bei obiger Eingabe um eine Zeile handelt die nur
zur Übersicht hier umgebrochen wird (
20.6.4
Trigger Ausschnitt aus Aufzeichnung extrahieren
Das msb_trigger Programm dient nicht nur zur Auslösung einer aktiven Auf-
zeichnung. Sie können damit genauso gut eine bereits gemachte Aufzeich-
nung nach bestimmten Ereignissen durchsuchen und das Ergebnis zur späte-
ren Analyse als neue Aufzeichnung abspeichern.
Der Aufruf des msb_trigger Tools ist identisch. Sie müssen lediglich das
msb_record als Datenquelle durch die Ausgabe der entsprechenden Auf-
zeichnung ersetzen. Also:
272
256 + seq : b y t e ( 2)
kennzeichnet den Zeilenumbruch).
3) )