Logo Online Hilfe www.anyviz.de

Skripte

Für lokale Berechnungen oder einfache Automatisierungsaufgaben können Skripte hinterlegt werden. Diese Skripte werden in der Programmiersprache Lua programmiert und können auf alle Datenpunkte zugreifen.

Lua Schnelleinstieg

Lua ist eine leichtgewichtige, einfach zu erlernende Skriptsprache. Variablen werden ohne Typangabe deklariert (a = 10), Kommentare beginnen mit --. Blöcke wie Bedingungen und Schleifen werden mit then und end abgeschlossen (if a > 5 then ... end). Funktionen werden mit function definiert (function name(arg) ... end). Tabellen (table) sind das zentrale Datenstrukturkonzept und werden mit geschweiften Klammern erstellt (t = {}). Lua ist dynamisch typisiert und verwendet nil für nicht gesetzte Werte. Die Sprache ist minimalistisch, aber sehr flexibel und eignet sich ideal für Automatisierungsaufgaben.

Weiterführende Dokumentation

-- Eine einfache Funktion, die zwei Zahlen addiert function addiere(a, b) return a + b end ergebnis = addiere(5, 7) print("Das Ergebnis ist: " .. ergebnis)

Zugriff auf Variablen

Mit tags kann auf alle Datenpunkte aller Verbindungen lesend und schreibend zugegriffen werden. Der Zugriff erfolgt unter Angabe des Verbindungsnamens gefolgt vom symbolischen Namen (z.B. tags["ModbusConnection"]["Temperature"]). Bei einigen Geräten kann auf lokale IOs zugegriffen werden. Diese stehen unter Device zur Verfügung.

-- Temperatur über Modbus auslesen temp = tags["ModbusConnection"]["Temperature"] -- Ventilator einschalten, wenn Temperatur 25°C überschreitet tags["Device"]["ioman.gpio.dio0"] = temp > 25

Eingangsvariablen

Wenn für die Skript-Logik Werte aus anderen Cloud Adaptern oder aus AnyViz benötigt werden, können diese über requirenumber(), requireboolean() und requirestring()-Funktionen angefordert werden. In AnyViz steht dann ein beschreibbares Symbol zur Verfügung. So kann beispielsweise ein Sollwert aus AnyViz vorgegeben werden. Alternativ kann über die Datenpunkt-Quelle der Wert eines anderes Datenpunktes als Eingangsvariable des Skriptes dienen.

level = requirenumber("Water level tank") -- Pegelstand über die Cloud beziehen pumpIsOn = tags["Modbus"]["Pump"] -- Aktuellen Pumpenstatus ermitteln if pumpIsOn then -- Pumpe ausschalten, wenn 400cm erreicht sind tags["Modbus"]["Pump"] = level < 400 else -- Pumpte einschalten, wenn 300cm unterschritten wurden tags["Modbus"]["Pump"] = level < 300 end

Rückgabewerte

Ein Skript kann einen Wert oder alternativ eine Tabelle zurückgeben. Alle Rückgabewerte stehen als Symbol in AnyViz zur Verfügung. So können beispielsweise lokale Berechnungen von ein oder mehren Datenpunkten vorgenommen werden.

-- Eingabewerte volumenstrom = tags["OPC-UA"]["volume flow"] -- m³/h temp_vl = tags["OPC-UA"]["temp 1"] -- Vorlauf in °C temp_rl = tags["OPC-UA"]["temp 2"] -- Rücklauf in °C -- Berechnung delta_T = temp_vl - temp_rl waerme_kW = volumenstrom * 1.16 * delta_T -- Rückgabe beider Werte als Table return { Temperaturdifferenz = delta_T, Leistung = waerme_kW }

nil Überprüfung

Es gibt mehrere Gründe, warum der Wert eines Datenpunktes nicht zur Verfügung steht:

In diesen Fällen wird nil zurück geliefert. Die Skript-Abarbeitung wird fortgesetzt. Es wird empfohlen, Werte von Datenpunkten immer auf nil zu überprüfen, bevor sie weiterverarbeitet werden. So können Fehler durch fehlende oder noch nicht verfügbare Werte vermieden werden.

temp = tags["ModbusConnection"]["Temperature"] if temp == nil then print("Wert steht noch nicht zur Verfügung --> keine weitere Abarbeitung") return end

Nutzung von Lua Funktionen

Lua bietet einige nützliche Funktionen, die über die IntelliSense-Funktion (STRG+Leerzeichen) des Editors einsehbar sind. Für komplexere Berechnungen stehen mathematische Funktionen über die math Tabelle zur Verfügung. Die os Tabelle bietet Funktionen zum Auslesen von Datum und Uhrzeit.

-- Aktuelle Stunde über die Funktion os.date() hour = tonumber(os.date("%H")) -- Stunde (00-23) -- Licht nach 19:00 Uhr bis 06:00 Uhr einschalten tags["Siemens TCP"]["Light"] = hour >= 19 or hour < 6

Aus Sicherheitsgründen sind nicht alle Lua-Funktionen verfügbar. Beispielsweise sind keine Dateioperationen erlaubt und Methoden, wie os.execute() oder os.exit() wurden entfernt.