Aufbau von Custom Logiken

In diesem Kapitel wird anhand eines Beispiels kurz ein Überblick über Aufbau, Funktion und Visualisierung gegeben. Auf den folgenden Kapiteln wird auf die weiteren Details eingegangen:

Kurzleitfaden

Aufgabenstellung

Folgende Schaltung soll mittels Custom Logik abgebildet werden:

  • In, dt_ON und dT_OFF sind Eingangsvariablen (mit einem Eingang verbunden)

  • Limit_ON, Delayed_ON und Extend_ON sind interne Variablen

  • Out ist die Ausgangsvariable (mit dem Ausgang verbunden)

Custom Logikzelle anlegen und editieren

  • Zum erstmaligen Anlegen einer Custom Logik wählt man "Add Logic" im Logik Manager.

  • "Benutzerdefiniert Logik" anklicken und im Texteditor den Code eintragen/einfügen und mit OK abschließen.

  • Um diesen nachträglich anzupassen oder zu ändern, muss die Logikzelle zunächst aufgeklappt werden und anschließend klickt man neben dem Zellennamen auf editieren.

{ "Level":[ ["$In","bool",false], ["$dT_ON","float",0], ["$dT_OFF","float",0], ["$Out","bool",false], ["$Limit_ON","bool",false], ["$Delayed_ON","bool",false], ["$Extend_ON","bool",false], ["$VAR<Inhibit?>","bool",false] ], "Module":[ ["Break",["$VAR<Inhibit?>"]], ["Monoflop","$In","-$In","$Limit_ON","$dT_ON",2], ["And",["$In","-$Limit_ON"],"$Delayed_ON"], ["Monoflop","$Delayed_ON","$Delayed_ON","$Extend_ON","$dT_OFF",4], ["Or",["$Delayed_ON","$Extend_ON"],"$Out"] ], "Input":[ ["In","Eingang","$In","c"], ["dT_Ein","Einschaltverzögerung[s]","$dT_ON","c"], ["dT_Aus","Ausschaltverzögerung[s]","$dT_OFF","c"], ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"] ], "Output":[ ["Out","Ausgang","$Out","c"] ] }

Logik-Zelle mit Objekten verknüpfen:

Damit erhält man folgende Logikzelle, deren Ein- und Ausgänge noch mit Objekten verbunden werden müssen:

 

Erklärungen zur Custom Logik:

Das Grundgerüst jeder Logik-Definition sind die Abschnitte Level, Module, Input und Output mit jeweils einem Array als Wert: { "Level": [] , "Module": [], "Input": [], "Output": [] }

Level-Array:

Der Level-Abschnitt ist die Deklaration von Variablen, über die Informationen zwischen Modulen, In- und Outputs ausgetauscht werden können.

Es gilt folgende Syntax:

  • "Level": [ [<Variablenname>, <Typ>, <Init value>], ... ]

  • Der Variablenname ist ein String, beginnend mit einem "$". Darauf kann man sich später in Module, Input und Output beziehen.

  • Mögliche Typen: "bool", "float", "integer" oder "string". Mit dem Init value kann für die Variable ein Default-Wert gesetzt werden, der bis zum ersten Beschreiben der Variable gültig ist. Der Wert muss dabei zum <Typ> passen!

Modul-Array:

Im Modul-Abschnitt werden die Variablen mit den Ein-und Ausgängen der Logik-Modulbausteine verknüpft.

Es gilt folgende Syntax:

  • "Modul": [ [<Basis-Modul>, <spezifische Parameter des Basis-Moduls> ], ... ]

  • Die Basis-Module sind vorgegebene (kompilierte) Funktionen . Die Auswähl hängt von der Software Version des TWS ab. Die genaue Beschreibung jedes einzelnen Basis-Moduls und dessen Parameter erfolgen im Abschnitt Modulbausteine für Custom Logiken.

  • Variablen können vorangestellten Minus bei der Übergabe in ein Modul direkt invertiert werden. Beim Typ boolean verhält sich das Minuszeichen wie ein NOT, und bei float und integer wie ein *(-1).
    Achtung: Diese Syntax ist nur bei den Referenzen im "Modul"-Block erlaubt (nicht bei "Input" oder "Output)!

"Module":[ ["And",["$In","-$Limit_ON"],"$Delayed_ON"], ],

Hinweis: In den Funktionen sind aktuell nur Variablen, die im Abschnitt Level definiert wurden erlaubt. Es können keine Parameter als Zahl eingeben werden!

 

Input-Array:

Im Abschnitt Input werden die Variablen mit den Eingängen der Custom-Logikzelle verknüpft.

Es gilt folgende Syntax:

  • "Input": [ [<Name>, <Beschreibung>, <Variablenname>, <Trigger-Option> ], ... ]

  • Der Name ist ein String, mit dem der Eingang in der GUI angezeigt wird. Die Beschreibung wird bei "Mouse over" angezeigt.

  • Der Variablenname bestimmt, welche Variable mit den Eingang verknüpft ist.

  • Die Trigger-Optionen bestimmen analog den Standardlogiken, wann ein Signal am Eingang die Berechnung der Logikzelle anstößt. Mögliche Optionen:

    • "a": jedesmal (always)

    • "c": nur bei Wertänderung (on change)

    • "u": kein Trigger, nur Wertübernahme (update only)

    • "ai": jedesmal (always), Logik bis zur ersten Wertaktualisierung gesperrt

    • "ci": nur bei Wertänderung (on change), Logik bis zur ersten Wertaktualisierung gesperrt

    • "ui": kein Trigger, nur Wertübernahme (update only), Logik bis zur ersten Wertaktualisierung gesperrt

Output-Array:

Im Abschnitt Output werden die Variablen mit den Ausgängen der Custom-Logikzelle verknüft.

Es gilt folgende Syntax:

  • "Output": [ [<Name>, <Beschreibung>, <Variablenname>, <Sende-Option> ], ... ]

  • Der Name ist ein String, mit dem der Ausgang in der GUI angzeigt wird. Die Beschreibung wird bei "Mouse over" angezeigt.

  • Der Variablenname bestimmt, welcher Variable mit den Ausgang verknüpft ist.

  • Die Sende-Optionen bestimmen analog den Standardlogiken, wann ein Wert am Ausgang gesendet wird. Mögliche Optionen:

    • "a": jedesmal (always)

    • "c": nur bei Wertänderung (on change)

    • "t": wenn ein Timer abgelaufen ist (on timer)

    • “ct”: timer abgelaufen oder Wert geändert

    • “x”: send explict (innerhalb der Logik festgelegtes Sendeverhalten)

Visualisierung der Variablen in Grafana (DokMode) - Fehlersuche

Für den Funktionstest und Fehlersuche von Custom Logiken ist der Doktormodus unerlässlich. Durch klick auf das Grafana-Symbol (rechts unten, oberhalb des Speichern Buttons) können alle Variablen im zeitlichen Verlauf angezeigt werden. Dies ist insbesondere für interne Variablen, Timer etc. hilfreich.

 

2019 - 2024 by Elaborated Networks GmbH / Impressum / Datenschutzerklärung