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.