20.6. EINE AUFZEICHNUNG TRIGGERN MIT MSB_TRIGGER
type record.msblog für Windows Anwender oder cat record.msblog
für Linux User. Im Falle des vorherigen Beispiels (Windows):
type modbus-rtu.msblog | msb_trigger --pre-triger=2560
--post-trigger=2560 script.lua > record.msblog
20.6.5
Eine Aufzeichnung nach bestimmten Ereignissen durchsuchen
Stellen Sie sich vor, Sie wollen wissen ob in einer aktiven Übertragung oder
einer bereits gemachten Aufzeichnung falsche Prüfsummen - oder generell ir-
gendwelche Fehler - vorhanden sind. Sie wollen aber keine neue Aufzeichnung
analysieren, sondern das Resultat Ihrer Prüfung (Zeit und/oder Nummer des
entsprechenden Telegramms) direkt auf dem Bildschirm sehen.
Das msb_trigger Tool bietet einen speziellen Parameter --debug der Ihnen
nicht nur dabei hilft, Ihr Skript zu testen. Er dient zudem als 'Schalter' um die
Ausgabe der aufgenommenen Ereignisse im Falle einer Trigger Auslösung zu
unterdrücken und damit einen Mix aus eigenen Ausgabeanweisungen und bi-
nären Ereignisdaten zu vermeiden.
Kommen wir auf unser Modbus RTU Prüfsummen Beispiel zurück. Wir wollen
nun nach Telegrammen mit ungültiger Prüfsumme suchen und das Ergebnis
in Form der Telegrammzeit zusammen mit der übertragenen (falschen) und
erwarteten CRC16 Prüfsumme ausgeben.
Zunächst die entsprechende trigger Funktion:
1
a Lua s t r i n g r e p r e s e n t i n g t h e l a s t r e c e i v e d data o f one channel
2
seq = " "
3
c o n t a i n s t h e t i m e stamp o f t h e f i r s t b y t e o f t h e c u r r e n t t e l e g r a m
4
t s = 0
5
6
function t r i g g e r ( data , i n t v a l , d i r , a l t e r )
7
i f a l t e r or i n t v a l > t r a n s m i s s i o n . bytepause ( 3 . 5 ) then
8
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
9
read 16 b i t ckecksum o f c u r r e n t t e l e g r a m
10
i f #seq >= 2 then
11
l o c a l c k s _ i s = seq : b y t e ( 1)
12
l o c a l cks_must = checksum . crc16_modbus ( seq : sub (1 ,
13
i f c k s _ i s ~= cks_must then
14
p r i n t ( s t r i n g . f o r m a t ( "%6 f \ t i s :%04X , must:%04X " ,
15
16
end
17
end
18
s t a r t a new t e l e g r a m sequence
19
seq = " "
20
s t o r e t h e t e l e g r a m t i m e
21
t s = event . t i m e ( )
22
end
23
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
24
seq = seq . . s t r i n g . char ( data )
25
don ' t s t o p p a r s i n g
r e t u r n f a l s e
26
end
27
Ganz wichtig! Da Sie nicht wollen, das die Verarbeitung der eingehenden Da-
ten bei der ersten Triggerung (falsche Prüfsumme erkannt) aufhört muss die
trigger Funktion IMMER false zurück geben (Zeile 26). Ansonsten been-
det sich das Programm ohne Ausgabe. Der Grund: Der --debug Parameter
256 + seq : b y t e ( 2)
t s , c k s _ i s , cks_must ) )
3) )
273