Endezeichen.
Dies ist der Grund, warum die split mit zusätzlichen Parametern aufgerufen
wird. Diese sind:
1
data
Das aktuelle Datenbyte (bis zu 9 Bits)
2
interval
(kurz intval), die Zeitdifferenz zum letzten Byte in Sekunden (mit
Mikrosekunden Auflösung)
3
alternation
(kurz alter), wahr wenn sich die Datenrichtung geändert hat
4
string
(kurz str), alle bisher im aktuellen Telegramm empfangenen Bytes als
String
5
filter
Die aktuelle Auswahl in der Toolbar Filtereingabe
Sie können die einzelnen Parameter umbenennen sofern eine andere Bezeich-
nung für Sie mehr Sinn ergibt. Sie dürfen allerdings nicht die Reihenfolge än-
dern. Erlaubt ist, unnötige Parameter vom der rechten Seite ab wegfallen zu
lassen ohne das dabei Lücken entstehen.
Kompliziert? Sehen wir uns einige Beispiele an. Stellen Sie sich ein einfaches
Protokoll vor, in welchem jedes Telegramm durch ein Linefeed abgeschlossen
wird.
1
function s p l i t ( data , i n t v a l , a l t e r , s t r )
2
i f # s t r == 1 then r e t u r n STARTED end
3
i f data == 10 then r e t u r n COMPLETED end
4
r e t u r n MODIFIED
5
end
Der Filter-Parameter wird nicht benötigt und wir können ihn deshalb weglassen
(Zeile 1).
Unser Beispiel verwendet kein spezielles Startkriterium. Mit anderen Worten:
Ein neues Telegramm beginnt sobald das vorherige mit einem Linefeed been-
det wurde und ein beliebiges anderes Zeichen empfangen wird.
Der Parameter str ist ein Lua String und enthält alle Zeichen des aktuellen
(wenn auch unvollständigen) Telegramms. Im Falle des ersten Bytes ist die
Länge des Telegramms 1 und wir geben STARTED zurück. Lua verwendet
einen speziellen Längen-Operator '#' um die Anzahl von Zeichen innerhalb
eines String (einer Zeichenkette) zu ermitteln (Zeile 2). Alternativ können Sie
die Abfrage der Länge auch wie folgt formulieren:
i f s t r : l e n ( ) == 1 then . . .
Zeile 3 definiert die Ende Bedingung. Das Telegramm ist komplett, wenn ein
Linefeed empfangen wird (das aktuelle Zeichen wird in data übergeben). Wir
vergleichen deshalb den Parameter data mit Linefeed (der Zeichenwert ist de-
zimal 10) und liefern COMPLETED zurück, wenn dies zutrifft.
In allen anderen Fällen (wenn es sich um ein beliebiges anderes Zeichen han-
delt und bereits mindestens ein Zeichen empfangen wurde, d.h. die aktuelle
Telegrammlänge ist größer als 1) kehrt die Funktion mit MODIFIED zurück.
Im nächsten Schritt passen wir das Beispiel an ein Protokoll an, welches für je-
des Telegramm ein Startzeichen sowie ein Endestring spezifiziert, wie es u.a.
13.3. TEMPLATE SPRACHSYNTAX
107