Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Einführung

...

In einem nächsten Schritt sollte sich der Anwender mit der Frage auseinandersetzen, in welchen Schritten die Bearbeitung einer Logik intern abläuft, damit er weiss, wie er allenfalls auf den →Bearbeitungsprozess Einfluss nehmen kann. Wichtigster Merkpunkt für das Verständnis des Bearbeitungsprozesses ist die Erkenntnis, dass eine Logik (nur) abgearbeitet wird, wenn sie ausgelöst wird. Sie benötigt somit einen Trigger. Im obigen Beispiel “triggert” jede Wertänderung an einem der drei Eingänge die Logik; dies genügt in vielen Anwendungsfällen.
Zweiter wichtiger Merkpunkt in diesem Zusammenhang ist, dass die Berechnung der Logik und alle daran anschliessen Bearbeitungsschritte über einen auf TRUE gestellten Inhibit-Eingang, resp. genauer über die dadurch ausgelöste→Abbruchfunktiongestoppt werden können.

Wer sich später etwas vertiefter mit der Logikfunktion des TWS auseinandersetzen wird, wird rasch erkennen, dass der Logikeditor innerhalb der drei oben vorgestellten Hauptelemente (Eingang, Auslöser, Kernfunktion und Ausgang) über viele als Erweiterung der beiden Hauptelemente Eingang und Ausgang zusätzliche Funktionen, resp. Einstellungsmöglichkeiten verfügtzur Verfügung stellt. Diese werden unter →Weitere (optionale) Funktionen der Ein- und Ausgänge vorgestellt.

...

Reicht die Funktionalität der Logik-Module nicht aus, erstellt sich der Anwender eine Custom-Logik; diese setzt sich aus Modulbausteinen, welche ähnliche Funktionen aufweisen wie die Logik-Module, zusammen.
Zudem werden aus der Community Fertige Custom-Logiken (Beispiele) zur Verfügung gestellt.

...

  • sie übergeben Werte an die Logik (Wertübergabefunktion), wobei diese Werte

    • entweder von einem Objekt des Objektsystems stammen,

    • oder als Parameter für die konkrete Logik (im Sinne von Konstanten) vorgegeben sind;

  • sie lösen die Abarbeitung der Logikzelle aus (Triggerfunktion), resp.

  • sie beeinflussen das Startverhalten der Logik (Startfunktion),

  • sie können einen vom einem Objekt des Obkektsystem übergebenen Wert vor der Bearbeitung in der Logik logisch negieren (Negationsfunktion),

  • sie können einen von einem Objekt des Objektsystems stammenden Wert umwandeln (Konvertierungsfunktion über “Innerhalb Bereich”),

  • sie können einen von einem Objekt des Objektsystems stammenden Wert mit einer Vorgabe vergleichen (Vergleichsfunktion).

Ausgänge

Eine Logik muss mindestens einen Ausgang haben, je nach Kernfunktion der Logik stehen u. U. auch mehrere Ausgänge 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.

...

  • sie übergeben Werte an Objekte des Objektsystems (Wertübergabefunktion),

  • sie bestimmen,

    • bei welchem Ereignis die Ausgabewerte an das Objekt des Objektsystems übergeben werden soll (Sendefunktion), und

    • ob diese Übergabe unmittelbar oder verzögert erfolgen soll (Verzögerungsfunktion)

  • sie können einen Wert vor der Übergabe an das Objekt des Obkektsystem logisch negieren (Negationsfunktion),

  • sie können einen von einem Objekt des Objektsystems stammenden Wert umwandeln (Konvertierungsfunktion über “Mapping”).

Triggerfunktion

...

Triggerfunktion zu einem bestimmten Zeitpunkt

Grundsätzliches

Will man ein Logik nur an einem bestimmten Zeitpunkt (bspw. jeden Tag um 08:15 Uhr ausführen lassen, kann ein Zeitpunkt-Trigger verwendet werden.

...

Werden komplexere Anforderungen an die Definition des Zeitpunkts gestellt, kann dies mit Hilfe der Cron-Syntax realisiert werden. Zu diesem Zweck wählt man in der vorstehenden Eingabemaske als Typ nicht “Zeit“, sondern “Cron-Syntax”. Man erhält so ein Eingabefeld, in welches man einen String eingeben kann. Dieser String muss der Cron-Syntax entsprechen.

Cron-Syntax

Die Cron-Syntax baut auf 6 Feldern auf, welche jeweils durch eine Leerschlag voneinander getrennt sind. Die Reihenfolge der Felder ist wie folgt vorgegeben:

...

Weitere Erläuterungen zur Cron-Syntax (einer in der UNIX-Welt gebräuchlichen Notation) findet sich bspw. unter https://de.wikipedia.org/wiki/Cron; zu beachten ist, dass die Cron-Syntax des TWS zusätzlich auch ein Feld Sekunden (ganz links) vorsieht.

Zeitlich beschränkte Intervalle

Über die Cron-Syntax können auch Intervalle definiert werden: Der String 0 0/30 0-5,21-23 * * * führt dazu, dass der Trigger jeden Tag, im Zeitraum zwischen 21 Uhr bis 05 Uhr jeweils zur ganzen Stunden und dann in einem Intervall von 30 Minuten ausgelöst wird.

In der GUI ist dies in einem etwas eingeschränkterem Rahmen auch möglich, in dem man in der Eingabemaske “Source” den Typ Intervall anwendetWer zeitlich beschränkte Intervalle ohne Cron-Syntax (aber mit etwas eingeschränkterem Einstellungsmöglichkeiten) definieren möchte, kann im Eingabefeld “Source” den Typ Intervall wählen und erhält so eine Eingabemaske mit den Einstellungsmöglichkeiten.

Triggerfunktion über einen Wertveränderung am Eingang

...

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 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 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.

...

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.

  • 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)

...