Einführung
...
Über diese Schnittstellen können Werte von und an die 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.
...
Beispiel: Das AND-Logik-Modul arbeitet mit BOOLEANBoolean-Daten. Soll es mit einem Wert vom Typ “Float” 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 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 eine 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” 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.
...
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 - 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” TRUE zur Verarbeitung übergeben.
In der GUI stehen folgende Vergleichsfunktionen zur Verfügung:
“Innerhalb Bereich”“Innerhalb Bereich”: prüft, ob der Eingangswert im angegebenen Bereich liegt; falls ja, erhält der Eingang den Zustand "Wert TRUE", anderenfalls " FALSE".Schwellwert unter: prüft, ob der vorgebene Schwellwert . [--------- 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 Zustand "Wert TRUE", anderenfalls " FALSE".Schwellwert
“Schwellwert über”: Wird prüft, ob der vorgegebene Schwellwert überschritten , dann nimmt ist; falls ja, erhält der Eingang den Zustand "true" anWert TRUE, anderenfalls FALSE.
“Schwellwert mit Hysterese: Wird ”: vergleicht den Eingangswert gleichzeitig mit der oberen und unteren Grenze;
ist die obere Grenze überschritten,
erhält der Eingang den Zustand
TRUE,
ist dies untere Grenze überschritten, erhält der Eingang den Wert FALSE,
liegt der Wert dazwischen, verbleibt der Eingang im bisherigen Zustand.
Es kann bspw. verglichen
Startfunktion
Sendefunktion
Verzögerungsfunktion
Ab hier Steinbruch (, d.h. blosse Grundlage für die weitere redaktionelle Bearbeitung)
Optionen für Eingänge
Parameter: Definiert für einen Eingang einen konstanten Wert. Achtung: Dieser wird nur beim Abspeichern in die Berechnung übernommen.
Innerhalb Bereich: Prüft ob der Eingangswert im Bereich liegt (wenn ja, dann bekommt der Eingang den Zustand "true", sonst "false").
Schwellwert unter: Wird der Schwellwert unterschritten, dann nimmt der Eingang den Zustand "true" an.
Schwellwert über: Wird der Schwellwert überschritten, dann nimmt der Eingang den Zustand "true" an.
Schwellwert mit Hysterese: Wird die obere Grenze überschritten, dann nimmt der Eingang den Zustand "true" an, beim Unterschreiten des unteren Grenze schaltet der Eingang auf "false". Dazwischen verbleibt der Eingang im bisherigen Zustand.
Der untere Schwellwert darf damit nicht 0 sein: https://forum.timberwolf.io/viewtopic.php?f=24&t=1043&hilit=logikeditor…
Optionen für Ausgänge
Mapping: Damit kann den Werten true/false ein beliebiger Wert zB Szenennummer oder Float-Zahl zugeordnet werden.
Einschaltverzögerung: Das Einschalten von 0 auf 1 wird um eine definierte Zeit verzögert gesendet.
Ausschaltverzögerung: Das Ausschalten von 1 auf 0 wird um eine definierte Zeit verzögert gesendet.
Ein- und Ausschaltverzögerung: Das Umschalten von 0 auf 1 und 1 auf 0 wird verzögert. Es können getrennte Verzögerungszeiten für das Ein- bzw. Ausschalten definiert werden.
Hinweis: Man kann einem Ausgang mehrere Ziele zuordnen! Zu diesem Zweck einfach in der Zielauswahl (DOS) eine weitere Auswahl treffen.
Neuberechnung, sobald
entweder sich ein Eingangsinal ändert
oder ein Triggereingang betätigt wird.
Nicht bei Wertänderung eines Parameters (bspw. im Doktor-Modus)
Trigger-Optionen an den Eingängen
"a" (always): Jedesmal wenn ein Telegramm am Eingang empfangen wird.
"c" (on change): wenn ein Telegramm mit geändertem Wert empfangen wurde
"u" (update only): kein Trigger der Logikzelle, aber der Wert wird in die Logik übernommen. Wird die Logik durch einen anderen Eingang oder Trigger später ausgeführt, wird der letzte an diesem Eingang empfangene Wert verwendet. "u" ist eigentlich selten notwendig, insbesondere aber, wenn ein Objekt mehrfach an eine Zelle angeschlossen ist zB. Eingang + Inhibit. Ausführlicheres siehe hier: https://forum.timberwolf.io/app.php/kb/viewarticle?a=120
Sende-Optionen an den Ausgängen
"a": jedesmal (always)
"c": nur bei Wertänderung
"t": wenn ein Timer abgelaufen ist (on timer);
Die Option "t" ist nicht selektiv, d.h. werden mehrere Timer in einer Custom Logik verwendet, dann führt jeder abgelaufene Timer dazu, dass der Ausgang gesendet wird. Zu beachten ist, 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-Module 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)
Data Value: Zusätzliches Eingangsobjekt, dass als Trigger dient.
Zeit: Trigger zu einem bestimmten Zeitpunkt (auswählbar Wochentage und Uhrzeit)
...