Hochsprachenprogrammierung - Logik Script
Inhaltsverzeichnis |
Allgemein
Hinweis: Dieses Modul ist nur aus kompatibilitätsgründen noch vorhanden!
Aktiv weiternetwickelt wird nur mehr das Scriptmodul in der grafischen Logikprogrammierung, siehe Logik GUI...
Mit diesem Logikodul 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 und Debugger zur Verfügung. Sie können aber auch jeden anderen Editor verwenden, beispielsweise Scite oder Nodepad++.
Das Hauptfenster ist aufgeteilt in einem Editor plus Watch- und Tracefenster. Im Tracefenster (6) werden ausgeben 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.
Editor
Grün | Kommentar | -- Das ist ein Kommentar |
Blau | Grundbefehlssatz | function, if, then, else, end |
Rot | HMI-Master Spracherweiterungen | hmi_watch, hmi_print |
Funktionen
function OnNetvar (name,value,adr_scr,adr_dst,cmd,from) end ________________________________________________________ |
Diese Funktion wird aufgerufen sobald ein Bustelegramm empfangen wurde. Als Parameter wird der Name des EIB Gerätes und der Wert übergeben. Es werden nur Telegramme weitergeleitet in welchem als Zieladresse ein Gerät in der KNX Konfiguration angelegt wurde, unbekannte Adressen werden nicht weitergegeben
|
function OnTimer (value_ms)
-- 100 Millisekunden if value_ms == 100 then
end
-- 1 Sekunde if value_ms == 1000 then
end
-- 10 Sekunden if value_ms == 10000 then
end -- 1 Minute if value_ms == 60000 then
end end |
Diese Funktion wird zyklisch in vordefinierten Zeitabständen aufgerufen. In der Variable „value_ms“ wird der Abstand in Millisekunden angegeben. Beispielsweise 100 für den 100 Millisekunden Intervall. Zurzeit wird die Funktion in folgenden Abständen aufgerufen: 100 ms Kleinste Zeiteinheit 1000 ms 1 Sekunde 10000 ms 10 Sekunden 60000 ms 1 Minute Größere Abständen können beispielsweise durch hoch zählen einer Variable gebildet werden. Kleinere Abstände als 100 ms sind zurzeit nicht vorgesehen.
|
Eigene Funktionen definieren
Befehlssatzerweiterungen
hmi_write_var |
hmi_write_var(„Name“, Wert, Force) Mit diesem Befehl wird ein Bustelegramm gesendet. Name: String in Anführungszeichen, Name der EIB Variable aus der EIB KNX Konfiguration. Der Name muss exakt so wie in der Konfiguration angegeben werden, zwischen Groß Kleinschreibung wird ebenfalls unterscheiden. Wert: Wert der Variable. Es können beliebige Werte angegeben werden, beispielsweise können auch Solltemperaturen oder Dimmwerte gesendet werden. Force: Wird hier eine 1 angegeben, wird die Variable immer auf den Bus gesendet, auch wenn sich der Zustand nicht geändert hat. Bei 0 wird das Telegramm nur gesendet wenn sich der Zustand geändert hat. Hinweis: In Programmen die Zyklisch bearbeitet werden sollte dieser Parameter mit 0 angegeben werden, ansonsten wird bei jedem Aufruf ein Telegramm gesendet. if hmi_get_var(„Schalter1“) == 0 then hmi_write_var(„Aktor“,1,0) end
|
hmi_write_var_ex | Mit diesem Befehl können beliebige Bustelegramme gesendet werden, die Adressen müssen nicht wie beim Befehl „hmi_write_var“ in der Adressdatenbank vorhanden sein. hmi_write_var(1,1,1,1,1) hmi_write_var(1,1,1,1,0) Parameter 1-3: Zieladresse Hauptgruppe/Mittelgruppe/Untergruppe Parameter 4: EIS Typ (1-14, 15 wird nicht unterstützt) Parameter 5: Wert Im Beispiel wird zuerst eine 1 an die Adresse 1/1/1 gesendet, danach eine 0.
|
hmi_get_var | hmi_get_var(„Name“) Mit diesem Befehl wird der Zustand einer EIB Variable abgefragt. Es wird hierbei kein Read Befehl auf den Bus gesendet, der Wert kommt aus dem Cache des EIB Daemons. if hmi_get_var(„Schalter1“) ~= 0 then hmi_write_var(„Aktor“,1,0) end
|
hmi_print | hmi_print("Nachricht an den Debugger..."); hmi_print("Clock0.0: ", g_clock_0); Mit diesem Befehl können Debug Meldungen an den Debugger gesendet werden, es können auch im Programm verwendete Variablen angegeben werden. hmi_print("Diese Variable ist: ", g_clock_0,“ km/h“ ); Obiger Befehl gibt folgendes in das Ausgabefenster des Debuggers aus: "Diese Variable ist: 123 km/h“
|
hmi_get_wdir | Liefert das Arbeitsverzeichnis als String zurück, dies ist für die Funktion „dofile“ hilfreich, mit dem Befehl dofile können Funktionen in weitere Dateien ausgelagert werden, dabei muss immer der komplette Pfad mit angegeben werden. Die Funktion „hmi_get_wdir“ liefert immer das aktuelle Konfigurationsverzeichnis zurück, damit können Scripte in mehreren verschiedenen Konfigurationen gleich verwendet werden. Beispiel: "hmi_master_lua_f1.lua" function f_extern_1() hmi_print(g_schalter_1); end function f_extern_2() hmi_print(g_schalter_2); end Aufruf im Hauptscript: f = loadfile( hmi_get_wdir() .. "hmi_master_lua_f1.lua"); f(); Im Script können dann die Funktionen aus der externen Datei aufgerufen werden f_extern_1(); f_extern_2(); Mit dieser Änderung können externe Scripte unter Linux und Windows gleich aufgerufen werden, bisher musste immer der komplette Pfad mit angegeben werden.
|
hmi_watch | hmi_watch(„Text“, Variable) Mit diesem Befehl können interne Programmvariablen überwacht werden, der Wert der Variable wird dann im Debugger ausgegeben. Anders als mit dem Print Befehl wird die Ausgabe nicht überschreiben sondern kontinuierlich in der selben Zeile angezeigt.
|
hmi_ser_open |
com_handle = hmi_ser_open("com2","CBR_115200","DATABIT8","ONESTOPBIT","NOPARITY"); Mit den Befehlen "hmi_ser" kann eine serielle Schnittstelle vom Script aus verwendet werden. Um die Schnittstelle nutzen zu können, muss diese erst geöffnet werden. Tritt ein Fehler auf , beispiesweise weil die Schnittstelle nicht vorhanden oder von einem anderen Prozess verwendet wird, wird nil zurückgegeben. |
hmi_ser_close |
hmi_ser_close(com_handle) Schließen der Schnittstelle mit dem Handle aus "hmi_ser_open"
|
hmi_ser_read |
len,str_data = hmi_ser_read(max_len,timeout_ms,"_STRING"); Lesen von Daten der seriellen Schnittstelle, als Parameter wird die maximale Länge, Timeout und Datentyp angegeben. Als Datentyp kann entweder "_STRING" oder "_HEX" angegeben werden. Wird "_HEX" angegeben, werden die Daten als Hexstring zurückgegeben (FF0E00 usw.). Daten und String werden als zwei Variablen im Rückgabewert zurückgegeben. |
hmi_ser_write |
hmi_ser_write(len,str_data,"_STRING"); Schreiben von Daten auf die serielle Schnittstelle |