Script

Mit dieser Logik können einfache Scripte erstellt werden. Als Syntax wird Lua (www.lua.org) verwendet. Diese Programmiersprache ähnelt in der Syntax Basic und wurde mit einigen zusätzlichen Befehlen erweitert. Es stehen ein einfacher Editor mit syntax highlighting und ein Debugger, in welchem Werte von Variablen und Debug Meldungen ausgegeben werden, zur Verfügung.

Wichtig: In einem Programm das vom Anwender programmiert wird, kann die Bearbeitungszeit nicht mehr garantiert werden. Wird beispielsweise die Funktion OnTimer verwendet und dauert die Bearbeitung im Script sehr lange, betrifft das auch alle anderen Logiken die Timer verwenden. An diesen Logiken wird der Timer dann auch entsprechend später aufgerufen. Dies kann insbesondere bei Zählern oder Timern zu Fehlfunktionen führen.


Eingänge

E1 Eingang 1-x
Diese sind im Script über die symbolischen Namen "E1","E2" usw. auslesbar.


Ausgänge

A1 Ausgang 1-x
Diese sind im Script über die symbolischen Namen "A1","A2" usw. beschreibbar.


Parameter

Anzahl Eingänge
Anzahl der Eingänge für die Logik. Diese sind im Script über die symbolischen Namen E1,E2 usw. auslesbar.
Anzahl Ausgänge
Anzahl der Ausgänge für die Logik. Diese sind im Script über die symbolischen Namen A1,A2 usw. beschreibbar.
Timer 1s verwenden
Mit dieser Option wir die Timerfunktion "onTimer1s" zyklisch jede Sekunde aufgerufen. Diese Funktion ist optional um die Zykluszeit nicht unnötig zu belasten. Sie sollten diese Option nur verwenden, wenn dieses tatsächlich benötigt wird, normalerweise können die meisten Aufgaben in "onVKE" erledigt werden, diese wird automatisch aufgerufen sobald sich ein Eingang ändert.
onTgm aufrufen
Mit dieser Option wird die Funktion "onTgm" aufgerufen sobald ein Telegramm empfangen wurde in welchem die Zieladresse an einem Ein- oder Ausgang verknüpft wurde.Diese Option ist nur für Sonderfälle gedacht in der Telegramme ausgewertet werden müssen, bei großen Projekten kann dies die Logiken extrem verlangsamen.
onTgm Filter deaktivieren
Normalerweise wird "onTgm" nur aufgerufen, wenn im Telegramm die Zieladresse an einem Ein- oder Ausgang der Logik verknüpft wurde. Mit dieser Option kann dieser Filter deaktiviert werden, die Funktion wird dann bei jedem Telegramm aufgerufen das von einem angeschlossenem Gerät kommt. Diese Option ist nur für Sonderfälle gedacht in der Telegramme ausgewertet werden müssen, bei großen Projekten kann dies die Logiken extrem verlangsamen.

Allgemeines

Klicken Sie mit der rechten Maustaste auf die Logik und wählen Sie Script auf dem Menü, danach wird der Editor angezeigt:





Das Hauptfenster ist aufgeteilt in einem Editor plus Watch- und Tracefenster. Im Tracefenster werden Werte ausgegeben mit dem Befehl "hmi_print" oder Fehlermeldungen des Interpreters ausgegeben. Im Watchfenster werden Meldungen mit dem Befehl "hmi_watch" ausgegeben, über diesen Befehl kann der Wert von Variablen online beobachtet werden.

Mit dem linken Toolbutton (Pfeil) wird das aktuelle Script zum Server übertragen und im Interpreter ausgeführt. Über den Toolbutton "Befehle" in der Titelleiste können Befehle aus der Befehlssatzerweiterung in den Editor eingefügt werden.

Im Script werden automatisch globale Variablen definiert über diese auf Ein- Ausgänge und Parameter zugegriffen werden kann:



Die Funktion "onVKE" wird automatisch aufgerufen, wenn sich Werte den Eingängen geändert haben. Alle Programmfunktionen sollten von dieser Funktion aus aufgerufen werden.

Erstes Beispiel


Ein erstes Beispiel könnte so aussehn:

function onVKE()

    if E1 ~= 0 then

       A1 = 0

    else

       A1 = 1

    end

end


Dieses Beispiel stellt einen einfachen Inverter dar. Die Scriptsprache an sich wird in dieser Beschreibung nicht behandelt, hierfür gibt es im Internet oder auch in Buchform sehr gute Dokumentation.

Standard Funktionen


Im Script gibt es keine Main Schleife die kontinuierlich durchlaufen wird, vom Interpreter werden nur Funktionen aufgerufen. Dies macht die Scripterweiterung sehr effizient, besonders im Vergleich zu zyklisch aufgerufenen Interpretern. 

Es gibt einige Funktionen welche immer im Script vorhanden sein müssen:


onPostCreate() Diese Funktion wird nach jeder Initialisierung einmal aufgerufen. Hier sollten alle Initialisierungen aufgerufen werden, beispielsweise Parameter initialisieren oder Aliase vergeben.
onVKE ()

Diese Funktion wird bei jeder Änderung an den Eingängen aufgerufen und immer wenn ein Telegramm empfangen wird. Alle Logikfunktionen sollten von dieser Funktion aus aufgerufen werden.
onTgm() Diese Funktion wird aufgerufen, wenn ein Telegramm empfangen wird, siehe "onTgm aufrufen". Folgende Parameter werden hierbei übergeben:
  1. name: Kommentar der Variable
  2. value: Wert
  3. adr_src: Quelladresse im Format "1.1.1"
  4. adr_dst: Zieladresse im Format: "1/1/1"
  5. cmd: Befehl als Text: CMD_READ,CMD_WRITE,CMD_RESPONSE
  6. from: Nummer des Prozesses von dem das Telegramm gesendet wurde, beispielsweise "6" wenn das Telegramm vom KNX Bus empfangen wurde. Eine Liste finden Sie im Kapitel Diagnose.
  7. datatyp: Datentyp, siehe Adressfenster
Diese Funktion ist nur für Sonderfälle gedacht und sollte nur verwendet werden, wenn man genau weiß was Telegramme sind und wie diese im Server geroutet werden.


onTimer1s() Timerfunktion wird jede Sekunde aufgerufen, diese Parameter Timer1sverwenden


Befehlserweiterungen


hmi_get_var
Auslesen einer Adresse.

Beispiel: v =
hmi_get_var("1/1/2")

Weist der lokalen Variable "v" den Wert der Variable mit der Adresse "1/1/1" zu.
hmi_write_var
Variable über die Adresse ausgeben.

Beispiel: hmi_write_var("1/1/2",1,0)

Setzt die Variable mit der Adresse 1/1/2 auf den Wert 1.

Parameter 1=Adresse
Parameter 2=Wert
Parameter 3=Wert immer senden.

Bei Parameter 3 = 1 wird die Variable bei jedem Aufruf des Befehls gesendet, ansonsten nur wenn sich der Wert geändert hat.
hmi_print
Debug Ausgabe in das Tracefenster

Beispiel: hmi_print("Text", var)

Variable 1: Beliebiger Text
Variable 2: Interne Variable deren Wert ausgegeben wird.
hmi_watch
Variable überwachen

Beispiel: hmi_watch("Name",v)

Der Wert der Variable "v" wird im Watchfenster mit dem Titel "Name" ausgegeben. Im Unterschied zu "hmi_print" wird der Wert immer in derselben Zeile ausgegeben. Dieser Befehl dient also um Variablen zu überwachen. Wichtig: Die Variable im Watchfenster wird nur aktualisiert, wenn dieser Befehl auch durchlaufen wird.

hmi_get_wdir
Rückgabe des aktuellen Arbeitsordners

Beispiel: var wdir = hmi_get_wdir()

Der Pfad zum aktuellen Arbeitsordner wird von dieser Funktion zurück gegeben. Im Beispiel wird dieser in eine Variable gespeichert.

hmi_alias
Alias Namen vergeben

Beispiel: hmi_alias("E1","Aussentemperatur")

Mit dieser Funktion wird der Systemvariable E1 (erster Eingang der Logik) ein symbolischer Name zugewiesen. Statt beispielsweise "if E1 > 10" zu schreiben, kann man "if Aussentemperatur > 10" verwenden. Das macht das Script wesentlich besser lesbar. Dieser Befehl muss in der Funktion "
onPostCreate" aufgerufen werden.
hmi_update_output
Erneutes updaten eines Ausgangs

Beispiel: hmi_update_output(1)

Hiermit wird ein Ausgang erneut aus der Logik geschrieben. Dies kann verwendet werden, wenn man bei einer nachfolgenden Logik den Wert bei jeder ausführung des Skripts erhalte möchte. In diesem Beispiel wird der Ausgang 1 neu ausgesendet.