Inhalt dieser Seite
Inhalt | ||||
---|---|---|---|---|
|
Einführung
Als Beispiel diene folgende einfache Aufgabenstellung: Es soll auf eine KNX-Adresse Gruppenadresse TRUE gesendet werden, sobald mindestens eine von drei Türen geöffnet wird.
Für diese Logik-Zelle kann ein OR-Logik-Modul verwendet werden, es gibt TRUE aus, sobald an einem seiner Eingänge TRUE anliegt. Die fertig erstellte Logikzelle Logik-Zelle wird im Logikeditor Logik Manager wie folgt dargestellt:
...
Die Logik-Zelle verwendet die drei KNX-Objekte K-1186, K-1187 und K-1187 1188 als Eingänge, verarbeitet die dort erhaltenen Informationen in der Form einer ODER-Verknüpfung und gibt das Resultat an das KNX-Objekt K-1196 weiter.
Für den Anwender besteht eine Logik-Zelle somit auf den ersten Blick aus drei Elementen:
Eingang resp. Auslöser (wird auf der linken Seite dargestellt): im Beispiel die drei KNX-Objekte, welche die drei Türzustände (offen/geschlossen) repräsentieren und an die drei Variablen “Input 1”, “Input 2” und “Input 3” übergeben werden; . Durch das C (Change) hinter den Eingängen ist definiert, dass jede Wertänderung an einem dieser Eingänge löst die Abarbeitung Ausführung der Logik aus-Zelle auslöst.
Kernfunktion (ist bei bei einem Logikmodul Logik-Modul fest vorgegeben oder wird bei einer Custom-Logik individuell vom Anwender codiert): im Im Beispiel die logische ODER-Verknüpfung.
Ausgang (wird auf der rechten Seite dargestellt): im Beispiel die Variable “Output”, welche an das KNX-Objekt für den , an das der gesammelte Türzustand (offen/geschlossen) übergeben wird.
Dieses Grundwissen reicht grundsätzlich aus, um erste Logiken anzulegen. Zusätzliche Informationen zu diesen Themen finden sich unter →Kernfunktion einer Logik, →Eingänge, →Ausgänge und →Triggerfunktion.
...
Info |
---|
Der wichtigste Merkpunkt für das Verständnis |
...
Logikfunktion ist |
...
, dass eine Logik-Zelle (nur) abgearbeitet wird, wenn sie ausgelöst |
...
wurde. Sie benötigt somit einen |
...
Trigger. Im obigen Beispiel “triggert” jede Wertänderung an einem der drei Eingänge die |
...
Ausführung der Logik-Zelle, nicht aber zwingend das wiederholte Senden eines gleichen Wertes. Dies ist in vielen Anwendungsfällen |
...
gewünscht und ist daher die Standardeinstellung von Eingängen. |
Dieses Grundwissen reicht aus, um erste Logik-Zellen anzulegen. Zusätzliche Informationen zu diesen Themen finden sich in den Detailkapiteln dieser Dokumentation.
Als Nächstes sollte sich der Anwender damit vertraut machen, in welchen Schritten die Ausführung einer Logik-Zelle intern abläuft, damit er versteht, wie er auf den Ausführungsprozess Einfluss nehmen kann.
Wer sich später vertiefter mit der Logikfunktion des TWS auseinandersetzen wird, wird rasch erkennen, dass der Logikeditor Logik Manager als Erweiterung der beiden Hauptelemente Eingang “Eingang” und Ausgang “Ausgang” zusätzliche Funktionen , resp. als Einstellungsmöglichkeiten zur Verfügung stellt. Diese werden unter →Weitere (optionale) Funktionen der Ein- und Ausgänge vorgestelltweiter unten näher beschrieben.
Kernfunktion einer Logik-Zelle
Beim Anlegen einer Logik-Zelle muss sich der Anwender entscheiden, ob er entweder eines der auf dem TWS fix installierten Logik-Module verwenden will, oder ob er eine eigene Custom-Logik codieren will.
Verwendung eines Logik-Modul
Aktuell stehen über 45 Die Liste der verfügbaren Logik-Module zur Verfügung; sie werden unter Eingebaute Logik-Module vorgestellt. Weil sie mit den Zusatzfunktionen der Ein- und Ausgänge kombiniert werden können, geht ihr Funktionsumfang wesentlich weiter, als dies im ersten Moment aufgrund der blossen Funktionsbeschreibung zu erahnen wärefinden Sie hier: Logik-Module
Bei vielen Logik Modulen kann die Anzahl der Eingänge konfiguriert werden, zudem stehen Funktionen am Eingang und Ausgang (Timer, Konvertierer, Mapper usw.) zur Verfügung. Damit ist der tatsächliche Funktionsumfang größer, als dies beim erstmaligen Lesen der Beschreibung der “Kernfunktionen” erscheinen mag. Zudem erlauben die Einstellungen der Trigger sehr feine Einstellungen, wann eine Logikzelle gerechnet wird. Auf diese Weise erhält bspw. bereits ein einfaches “AND”-Logik-Modul ein äusserst äußerst breites und umfassendes Einsatzfeld. Dies wird unter https://wiregate.atlassian.net/wiki/spaces/TSKB/pages/397803554/Die+Verwendung+der+Bausteine+am+Beispiel+des+AND-Moduls) anhand von Beispielen dargestellt.
Weitere Umsetzungsbeispiele finden sich unter Mit Logik-Modulen gelöste Aufgabenstellungen (Beispiele).
...
Durch die Verknüpfung von einzelnen Logik-Zellen über den Verknüpfungsassistenten können auch komplexere Logiken abgebildet werden. Zur Erhaltung der Übersicht sollten die Logiken geeignet benannt bzw. TAGs verwendet werden.
Verwendung einer Custom-Logik
Reicht die Funktionalität der Logik-Module nicht aus , erstellt sich der Anwender eine bzw. müssen sehr viele Logik-Module kombiniert werden, so empfiehlt sich die Verwendung einer Custom-Logik; diese . Diese setzt sich aus mehreren Modulbausteinen zusammen, welche ähnliche Funktionen aufweisen wie die den Kernfunktionen der Logik-Module , zusammenentsprechen. Zudem werden aus der Community
Fertige Die Community stellt fertige Custom-Logiken (Beispiele) zur Verfügung gestellt. Diese können sehr einfach importiert und für den eigenen Anwendungszweck leicht angepasst werden.
Eingänge und Eingangstypen
Eingänge übergeben Werte an die Logik-Zelle und / oder beeinflusst sie in Ihrem Verhalten.
Eine Logik-Zelle kann zwischen 0 und einer beliebigen Zahl von Eingänge Eingängen verfügen; dabei wird in den eingebauten Logik-Modulen grundsätzlich zwischen drei Arten Typen von Eingängen unterschieden:
Wertübergabe-Eingänge (in einer Logik meist häufig als “Input” bezeichnet): Sie übergeben der Logik die -Zelle zu verarbeitenden Werte und Ihre Bedeutung ist abhängig von der Logikfunktion
Sperr-Eingänge (“Inhibit”): Über ein TRUE auf diesem Eingang kann die Ausführung der Logik-Zelle gesperrt werden, näheres dazu unten unter → Sperrfunktion)
Trigger-Eingänge (“Trigger”): Sie definieren weitere Elemente, die dieser Logik-Zelle als Trigger dienen; näheres dazu unten unter → Triggerfunktion.
Die Eingänge haben für die Abarbeitung Ausführung einer Logik folgende Funktionen:
...
-Zelle eine Reihe von optionalen Aufgaben,
sie können den Wert eines Objektes des Objektsystems an die Logik übergeben (→Wertübergabefunktion)
sie lösen können die Abarbeitung der Logikzelle aus auslösen (→Triggerfunktion), resp.
sie beeinflussen können das Startverhalten der Logik beeinflussen (→Startfunktion),
sie können einen vom einem Objekt des Obkektsystem übergebenen Wert als fester Wert vorgegeben werden ohne dabei mit einem Objekt verknüpft zu sein (Parameterfunktion),
sie können einen übergebenen Objektwert vor der Bearbeitung in der Logik logisch negieren invertieren (→NegationsfunktionInvertierungsfunktion),
sie können einen von einem Objekt des Objektsystems stammenden Wert übergebenen Objektwert umwandeln (→Konvertierungsfunktionüber z.B. “Innerhalb Bereich”),
sie können einen von einem Objekt des Objektsystems stammenden Wert mit einer Vorgabe vergleichen (→Vergleichsfunktion).
Ausgänge
...
, “Schwellwert”, “Glättung mittels Tiefpass”).
Ausgänge
Ausgänge übergeben grundsätzlich Werte an Objekte des Objektsystems (Wertübergabefunktion). Eine Logik-Zelle muss mindestens einen Ausgang haben.
Der Anwender kann dabei ein- und demselben Ausgang bei Bedarf auch mit mehrerer Objekten des Objektsystems verknüpfen. Je nach Kernfunktion der Logik-Zelle stehen u. U. auch mehrere Ausgänge mit unterschiedlichen Ausgabewerten oder Verhalten zur Verfügung. Weil der der Anwender einem Ausgang mehrere Objekte des TWS-Objektsystems zuordnen kann, ist es faktisch möglich, mit einer Logik gleichzeitig mehrere Objekte zu bedienen.
Die Ausgänge haben für die Abarbeitung einer Logik folgende Funktionen:
...
sie übergeben Werte an Objekte des Objektsystems (→Wertübergabefunktion),
sie bestimmen,
(teilweise optionale) Aufgaben:
über diese ist definiert, bei welchem Ereignis die Ausgabewerte an
das ObjektObjekte des Objektsystems übergeben werden
soll(
→ und- ob diese Übergabe
es kann gewählt werden ob Zustandswechsel (binär) unmittelbar oder verzögert
erfolgen soll (→übergeben werden (Umschalt-Verzögerungsfunktion)
sie können einen Wert ein Ausgangswert kann vor der Übergabe an das Objekt des Objektsystem logisch negieren (→Negationsfunktion), sie können einen von einem Objekt des Objektsystems stammenden Wert umwandeln (→Objekte des Objektsystems invertiert werden (Invertierungsfunktion),
ein Ausgangswert kann vor der Übergabe an Objekte des Objektsystems umgewandelt werden (Konvertierungsfunktionüber “Mapping”).
...
Verknüpfung der Ein- und Ausgänge
...
Die GUI des Logikeditors stellt bei den Ein- und Ausgängen verschiedene Optionen zur Verfügung. Diese Optionen stellen - funktional betrachtet - Erweiterung der Kernfunktion des jeweils gewählten Logik-Moduls um weitere Funktionen dar. Oder mit Worten ausgedrückt. Jede dieser Optionen fügt der betreffende Logik - neben ihrer Kernfunktion - eine zusätzliche Funktion hinzu; damit wird das Programmieren einfach gemacht oder - wieder mit anderen Worten - es können mehrere prozedurale Funktionen miteinander kombiniert werden- ohne dass eine Custom-Logik erstellt werden muss.
Die Leistungsbreite dieses Konzepts wird unter https://wiregate.atlassian.net/wiki/spaces/TSKB/pages/397803554/Die+Verwendung+vom+Logik-Modulen+am+Beispiel+des+AND-Modulsvorgestellt.
Wertübergabefunktion
Ein- und Ausgänge stellen die Schnittstellen eine Logik zum Objektsystem des TWS dar.
Über diese Schnittstellen können Werte an die und von der Logik übergeben werden. Voraussetzung ist, dass die Datentypen der Objekte und der Logik übereinstimmen. Ist dies nicht der Fall, stellt der Logikeditor →Konvertierungsfunktionen zur Verfügung. Im Rahmen der Wertübergabe können im Logikeditor gleichzeitig auch →Vergleichsfunktionen hinzugefügt werden.
Jedem Ein- und Ausgang können mehrere Objekte des Objektsystems zugeordnet werden. Auf diese Weise kann bspw. das Resultat einer Logik gleichzeitig an mehrere Objekte gesendet werden.
Bei Eingängen können die übergebenen Werte
entweder als dynamische Variable von einem Objekt des TWS-Objektsystems stammen,
oder als feste definierte Variable (“Konstante”) vorgeben werden; in der Logikbox wird eine Konstante über die Verwendung der Funktion “Parameter” definiert.
[------- Achtung: Der als Parameter zugewiesene Wert wird nur beim Abspeichern in die Berechnung übernommen; es muss somit explizit ein Trigger definiert werden, damit die Logik erneut ausgeführt werden kann --------].
Konvertierungsfunktion
Jede Datenübergabe in der Informatik setzt voraus, dass die Datentypen übereinstimmen. Der Objektsystem des TWS (und damit auch die Logikfunktion) arbeitet mit folgenden Datentypen:
Boolean
Integer
Float
String
Bei der Datenübergabe an Eingängen
Bei Eingängen, denen intern eine Boolean-Variable zugewiesen ist
Beispiel: Das AND-Logik-Modul arbeitet mit Boolean-Daten. Soll es mit einem Wert vom Typ Float bedient werden, muss bei der Übergabe an die Logik eine Datenkonvertierung erfolgen.
Für diesen Zweck kann man in der GUI einem Eingang die Funktion “Innerhalb Bereich” zuordnen. Diese Funktion prüft, ob der Eingangswert im angegebenen Bereich liegt; falls ja, erhält der Eingang den Zustand TRUE, anderenfalls FALSE.
Bei Eingängen, denen intern eine Integer-Variable zugewiesen ist
Soll eine Glättung der am Eingang übergebenen Werte vorgenommen werden, steht die “Tiefpass”-Funktion zur Verfügung; sie dient der Glättung der Eingangswerte über einen bestimmten Zeitraum hinweg. Die Funktionsweise der Tiefpassfunktion wird beim entsprechenden Logik-Modul beschrieben → Tiefpass (Logik-Modul).
Bei der Datenübergabe an Ausgängen
Bei Ausgängen stellt die GUI die Funktion “Mapping” zur Verfügung. Sie erlaubt es, Werte umzuwandeln. Dies kann beispielsweise sinnvoll sein, wenn ein AND-Logik-Modul ein Objekt bedienen soll, welches vom Typ Integer ist. So kann bspw. ein Dimmwert von 60% an eine Leuchte gesendet werden, wenn das Ergebnis der Logik TRUE lautet.
In Custom-Logiken
In Custom-Logiken kann die Datenkonvertierung direkt im Code erfolgen. Dafür stehen - abhängig vom Anwendungsfall - verschiedene Modulbausteine (bspw. “Latch” oder “Multiplexer”) zur Verfügung.
Negationsfunktion
In der GUI des Logikeditors können Werte auch umgewandelt werden, indem sie negiert werden. Dies erfolgt indem das kleine Kreissymbol beim entsprechenden Ein- oder Ausgang angeklickt wird.
...
normal (nicht negiert)
...
negiert
In Custom-Logiken erfolgt die Negation, indem einer Variablen (vor dem $-Zeichen, aber innerhalb der Anführungszeichen) ein “-” vorangestellt wird, beispielsweise so "-$Out"
. Diese Negation ist aber nur innerhalb des Module-Array zulässig.
Vergleichsfunktion
In der GUI des Logikeditors kann festgelegt werden, dass die an den Eingängen übergebenen Daten einer Vergleichsoperationen unterzogen werden, bevor sie von der Logik verarbeitet werden. Der Eingang erhält so - je nach Anwendungsfall oder Betrachtungsweise - entweder eine Filter- oder eine Wenn-Dann-Funktion.
So kann bspw. geprüft werden, ob der übergebene Integer-Wert kleiner als “500” ist; trifft dies zu, wird der Logik ein boolean TRUE zur Verarbeitung übergeben.
In der GUI stehen folgende Vergleichsfunktionen zur Verfügung:
“Innerhalb Bereich”: prüft, ob der Eingangswert im angegebenen Bereich liegt; falls ja, erhält der Eingang den Wert TRUE, anderenfalls FALSE. [--------- Hinweis: Werden der Min- und der Max-Wert auf den gleichen Wert gesetzt, kann damit eine “Ist gleich”-Prüfung des Eingangswerts vorgenommen werden ------------]
“Schwellwert unter”: prüft, ob der vorgegebene Schwellwert unterschritten ist; falls ja, erhält der Eingang den Wert TRUE, anderenfalls FALSE.
“Schwellwert über”: prüft, ob der vorgegebene Schwellwert überschritten ist; falls ja, erhält der Eingang den Wert TRUE, anderenfalls FALSE.
“Schwellwert mit Hysterese”: vergleicht den Eingangswert gleichzeitig mit der oberen und unteren Grenze;
ist die obere Grenze überschritten, erhält der Eingang den Zustand TRUE,
ist die untere Grenze unterschritten, erhält der Eingang den Wert FALSE (Hinweis: die untere Grenze sollte so festgelegt sein, dass sie unterschritten werden kann: bspw. macht es bei einem Lux-Wert die untere Grenze auf 0 zu legen; dieser Wert kann nie unterschritten werden),
liegt der Wert dazwischen, verbleibt der Eingang im bisherigen Zustand.
In einer Custom-Logik können für diese Zwecke die Modul-Bausteine “Comperator” und “Limiter” verwendet werden (siehe dazu auch https://wiregate.atlassian.net/wiki/spaces/TSKB/pages/397771178/Anwendungshilfen+f+r+Custom-Logiken+How-to+s#Vergleiche ).
Startfunktion
Die GUI bietet an den Eingängen unter dem Titel “Start-Verhalten” eine Einstellungsmöglichkeit mit zwei Optionen an.
Standardmässig ist die Option “Startwert” ausgewählt: Damit kann dem Eingang ein Wert zugewiesen, mit welchem die Logik arbeitet, bis erstmals an diesem Eingang ein (externer) Wert eingetroffen ist.
Stattdessen kann die Option “Logik sperren bis Input verfügbar ist” gewählt werden. Damit wird verhindert, dass die Logik ausgeführt wird, bevor dieser Eingang mit einem externen Wert bedient worden ist. Technisch gesehen wird über diese Einstellung für die Logik eine Abbruchsfunktion ausgelöst, die solange andauert bis der entsprechende Eingang erstmals mit einem Wert bedient wurde.
In einer Custom-Logik kann der Startwert im Level-Array über den “Init Value” festgelegt werden. Das Sperren bis der Variablen (hier $In) ein Eingangswert zugewiesen wurde, kann bspw. wie folgt erreicht werden ["Break",["-$In"]].
Sendefunktion
Funktion und Einstellungsmöglichkeiten
Die Sendefunktion, legt fest, unter welchen Bedingungen der in der Logik berechnete Ausgangswert an das (resp. die ) mit dem Ausgang verbundene(n) Objekt(e) übergeben werden soll.
Es stehen folgende Optionen zur Verfügung:
"A": jedesmal (always)
"C": nur bei Wertänderung (on change)
"T": wenn ein Timer-Trigger abgelaufen ist (on timer);
“CT”: sobald eine Wertänderung erfolgt oder ein Timer-Trigger abgelaufen ist ([---------- nur GUI -------].
Verwendung in der Logikbox der GUI des Logikeditors
In der GUI erfolgt die Einstellungam Ausgang über den entsprechenden Schalter
...
Verwendung in einer Custom-Logik
In einer Custom-Logik kann die Einstellung im Output-Array über die “Sende-Optionen” erfolgen. In Bezug auf die Option "T" ist bei Custom-Logiken zu beachten, dass diese nicht selektiv wirkt. Dies heisst, wenn werden mehrere Timer in einer Custom-Logik verwendet werden, führt jeder abgelaufene Timer dazu, dass der Ausgang gesendet wird. Dabei ist weiter zu beachten, dass bei Verwendung eines Timers die Berechnungen weiterhin durchgeführt werden (abhängig von der Optionen der Eingänge), nur eben nichts gesendet wird. Mögliche Timer-Modulbausteine sind:
Monoflop (single shot timer): Triggert nach Ablauf der Zeitdauer
Clock (zyklischer Timer) : Triggert jedesmal nach Wechsel des Taktzustandes
Cron (Uhrzeit abhängiger Timer): Triggert jedesmal bei Erreichen der eingestellten Zeit(en)
Verzögerungsfunktion
Funktion und Einstellungsmöglichkeiten
Die Verzögerungsfunktion, legt fest, ob der in der Logik berechnete Ausgangswert erst mit einer zeitlichen Verzögerung an das (resp. die ) mit dem Ausgang verbundene(n) Objekt(e) übergeben werden soll. Damit kann beispielsweise eine sog. “Treppenhausschaltung” realisiert werden.
Es stehen folgende Optionen zur Verfügung:
Einschaltverzögerung: Das Einschalten von 0 auf 1 wird um eine vorgegebene Anzahl Sekunden verzögert gesendet.
Ausschaltverzögerung: Das Ausschalten von 1 auf 0 wird um eine vorgegebene Anzahl Sekunden verzögert gesendet.
Ein- und Ausschaltverzögerung: Das Umschalten von 0 auf 1 und 1 auf 0 wird vorgegebene Anzahl Sekunden verzögert gesendet. Dabei können getrennte Verzögerungszeiten für das Ein- bzw. Ausschalten festgelegt werden.
Verwendung in der Logikbox der GUI des Logikeditors
In der GUI erfolgt die Einstellung am Ausgang über den entsprechenden Schalter
...
Verwendung in einer Custom-Logik
...
mit einem Objekt
Nach dem Anlegen der Logik-Zelle, und sogar noch vor dem Speichern dieser, können bereits die Ein- und Ausgänge mit Objekten des Objektsystems verknüpft werden. Durch das Anklicken eines Ein- oder Ausganges öffnet sich der Verknüpfungsassistent, mit dem passende Objekt ausgewählt und zugeordnet werden können.
Die Suche erfolgt dynamisch nach Wahl des Quell- bzw. Zielsystems (KNX, 1-Wire, andere Logikfunktionen, Zeitserien, MQTT, HTTP-/REST-API, ekey etc.). Durch Auswahl eines Objektes in den Suchergebnissen und Bestätigung wird das Objekt nach anschließendem Betätigen von [Speichern und anwenden] verknüpft.
Diese Verknüpfung ist sofort wirksam, es bedarf keiner Übertragung uns keines Neustarts des Servers.
...
Info |
---|
Beim Speichern einer Logik-Zelle wird automatisch für jeden Ein- und Ausgang ein Logik-Objekt angelegt, welches direkt als Eingang in weiteren Logik-Zellen verwendet werden kann. Um einen Ausgangswert an eine andere Logik-Zelle weiter zu geben, ist es also nicht erforderlich, selber ein Objekt anzulegen und / oder für die Informationsübertragung einen Umweg über ein KNX-Objekt zu nehmen. Sie können direkt Ausgänge von Logikzellen mit Eingängen von Logikzellen verknüpfen. |
Nächster Schritt
Als nächstes sollte sich der Anwender damit vertraut machen, in welchen Schritten die Ausführung einer Logik-Zelle intern abläuft, damit er versteht, wie er auf den Ausführungsprozess Einfluss nehmen kann.