Herunterladen Inhalt Inhalt Diese Seite drucken

Msb_Trigger Spezifische Lua Erweiterungen - IFTOOLS MSB-RS485-PLUS Handbuch

Inhaltsverzeichnis

Werbung

20.7. MSB_TRIGGER SPEZIFISCHE LUA ERWEITERUNGEN
Im Gegensatz zu einem Skript für einmaliges Triggern müssen Sie bei mehr-
fachem Triggern dafür sorgen, das Ihre im Skript definierte Trigger Bedingung
nach erfolgter 'Triggerung' zurückgesetzt wird. Das folgende Beispiel zeigt das.
Es triggert bei einer bestimmten Datensequenz, hier 'hello' für Kanal 1 (A) und
'world' für Kanal 2 (B).
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
t h e t r i g g e r f u n c t i o n
function t r i g g e r ( data , i n t v a l , d i r , a l t e r )
4
5
channel A uses " h e l l o " , channel B " w o r l d "
l o c a l p a t t e r n = { " h e l l o " , " w o r l d " }
6
7
add t h e data t o t h e s t o r e d s t r i n g / sequence
8
seq = seq . . s t r i n g . char ( data )
9
l i m i t t h e s i z e f o r a b e t t e r search performance
10
i f #seq > 2048 then seq = seq : sub (
11
check i f t h e a l r e a d y r e c e i v e d b y t e s c o n t a i n t h e g i v e n p a t t e r n
12
i f seq : f i n d ( p a t t e r n [ d i r ] ) then
13
MATCHED!
14
NOTE! We must c l e a r t h e sequence b u f f e r f o r t h e n e x t m u l t i
t r i g g e r !
15
seq = " "
16
t r i g g e r i s t r u e
17
r e t u r n t r u e
18
else
19
r e t u r n f a l s e
20
end
21
end
Das Skript bzw. die Funktion trigger hängt dabei in Zeile 8 jedes eintreffen-
de Datenbyte an den internen Puffer seq an. Anschließend prüft es in Zeile
12, ob der Puffer das gesuchte Muster ('hello' oder 'world', je nach Kanal oder
Datenrichtung) enthält. Sobald dies zutrifft, ist die Trigger Bedingung erfüllt.
Bei einmaligem Triggern reicht es, den Wert true zurück zu geben. Betrachten
Sie nun aber den Fall, das die Funktion bei mehrfachem Triggern erneut aufge-
rufen wird. In diesem Fall enthält der interne Puffer seq immer noch die bereits
zuvor zur Triggerung führende Datensequenz. Die Funktion liefert erneut true
obwohl noch keine weitere 'hello' oder 'world' Sequenz empfangen wurde.
Um dies zu verhindern, müssen Sie den Trigger Mechanismus zurücksetzen.
Hier bedeutet das: Sie müssen den internen Puffer löschen, bevor Sie true zu-
rück geben. Wir machen dies in Zeile 15.
Generell ist es ratsam, im Skript die Trigger Bedingung bei erfolgter Triggerung
korrekt zu reseten, unabhängig davon, ob die das Skript für einmaliges oder
mehrfaches Triggern verwenden.
20.7 msb_trigger spezifische Lua Erweiterungen
Die folgenden Lua Erweiterungen werden vom msb_trigger Programm un-
terstützt:
base16 Modul :
Funktionen zur Codierung und Dekodierung von base16 Se-
quenzen (i.a. verwendet in Modbus ASCII und Intel SRecord Telegrammen),
siehe Lua Erweiterungen, Abschnitt 18.2.1.
bit32 module :
Dieses Modul bietet Bitweise Operationen für 32 Bit Werte.
Siehe Lua Erweiterungen, Abschnitt 18.2.2.
32,
1 ) end
277

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis