...
...
...
Seitenhierarchie | ||
---|---|---|
|
Inhalt dieser Seite
Inhalt |
---|
Tipp |
---|
Robert: Grundsätzlich geprüft, einiges fehlt aber noch (Wertbereiche, Links, etc.) |
Grundstruktur einer Custom-Logik
...
Um Logikmodule zu erstellen, ist es nicht erforderlich, sich vertieft in die JSON-Notation einzuarbeiten. Grundlegende Informationen zu JSON findet sich bspw. unter https://wiki.selfhtml.org/wiki/JSON oder https://de.wikipedia.org/wiki/JavaScript_Object_Notation.
Hier sollen im Moment nur folgende Besonderheiten erläutert werden:
...
Alle Eigenschaftsnamen in einem Objekt müssen in doppelten Anführungszeichen (
" "
) notiert werden.Folgende Typen können verwendet werden:
Null, ----------- Trifft dies zu? -----------------
Boolean (
bool
; zulässige Schlüsselwörter: true und false)Ganzzahl (
integer
; zulässiger Wertebereich von --------------------- bis ----------------)Fliesszahl (
float
; zulässiger Wertebereich von --------------------- bis ---------------- ).
Wichtiger Hinweis: Die Werte müssen immer einen Punkt enthaltenZeichenkette (
string
; zulässige Zeichen sind alle Buchstaben, alle Ziffern und folgende Sonderzeichen: ------------- Welche? -----------Array: Ein Array schliesst schließt beliebig viele durch Kommas getrennte Werte in eckigen Klammern (
[ ]
) ein; jeder Eintrag kann einen beliebigen für JSON zugelassenen Typ annehmen.Objekt: Ein Objekt wird in geschweiften Klammern (
{}
) eingeschlossen. --------- Objekte werden bei der Erstellung von eigenem Code nicht benötigt. ----------
Variablen werden über einen String, der mit einem
$
beginnt, bezeichnet. Über den Variablenname kann man sich innerhalb von “Module”, “Input” und “Output” auf den Wert dieser Variable beziehen.Spezialfall bei den Variablen: Damit bei der Kodierung die variable Zahl der von Eingangsvariablen offengehalten verwendet werden kann, kann eine ------Multivariable------ definiert werden. Auf diese Weise kann in der grafischen Oberfläche durch Klick auf + (mehrfach) mehrere Variablen von diesem Typ als Eingang hinzugefügt werden.
Bei der Definition einer ----- Multivariablen----- gibt es zwei Varianten:$VAR<name?>
: Mehrfache, aber optionale Verwendung (0 .. n), d.h. die Variable kann auch weggelassen werden.$VAR<name!>
: Mindestens einmalige, optional mehrfache Verwendung (1 .. n).
…..
...
.
...
Kommentare
Um die Lesbarkeit des Codes zu verbessern, empfiehlt es sich, Kommentare zu verwenden. Um Text als Kommentar zu kennzeichnen, stehen in JSON verschiedene Möglichkeiten offen:
...
Wie in anderen Programmiersprachen kann über Kommentar-Kennzeichnungen nicht nur der Code erläutert werden, sondern es können auch Code-Zeilen (vorübergehend) “ausgeschaltet” werden. Dies kann die Fehlersuche erleichtern.
Ergänzende Hinweise zum Bearbeitungsprozess einer Logik
Der Bearbeitungsprozess eine Logik wird unter https://wiregate.atlassian.net/wiki/spaces/TSKB/pages/397672460/Aufbau+und+Funktionsweise+der+Logiken#Bearbeitungsprozess-einer-Logikerläutert. Für Entwickler können folgende Zusatzinfomationen von Bedeutung sein:
...
Es gilt der Grundsatz “Abgerechnet wird erst am Schluss.” Das bedeutet, dass bei einem Abbruch einer Logik über den Logik-Baustein “Break” einerseits alle nachfolgenden Module im Code nicht mehr berechnet oder ausgeführt werden und andererseits dass auch keine Daten an die Ausgänge übergeben werden. Dies gilt auch namentlich auch für Variablen, die im Zeitpunkt des Erreichens des Breaks bereits berechnet worden sind.
...
.
Level-Array
Der Level-Array dient der Deklaration von Variablen. Es müssen hier sämtliche Variablen deklariert werden, die im Logikmodul angewendet.
...
Austausch von Informationen zwischen den Modulen, In-und Output;
Ablaufsteuerung innerhalb des Moduls, indem einer Variable abhängig vom erfüllen einer Bedingung einen bestimmten Wert zugewiesen wird (Beispiele siehe ….)
Verwendung als Konstante, um bestimmte fixe Werte in den Modulen zu verwenden.
...
Codeblock |
---|
"Level": [ ["$true","bool",true], ["$false","bool",false], ["$Start","integer",0], ["$Ende","integer",03], ["$Zaehler","integer",0], ["$Period","integerfloat",5.0], ["$Out$CronExpr","integer",0], ["$Z0", "integer",0], ["$Z1", "integer",1], ["$Z2", "integer",2], ["$Z3", "integer",3], ["$Z4", "integer",4], ["$Z5", "integer",5], ["$Z6", "integer",6], ["$Z7", "integer",7], ["$Z8", "integer",8], ["$Z9", "integer",9] ]string","1 2 3 * * *"] ] |
Modul-Array
Im Modul-Array werden die Variablen mit den Ein- und Ausgängen der Modulbausteinen verknüpft und so die eigentliche(n) Funktion(en) des Logiksmoduls definiert.
...
Variablen können durch ein vorangestelltes Minuszeichen direkt bei der Übergabe an einen Modulbaustein negiert oder invertiert werden (→Negationsfunktion→Invertierungsfunktion). Beim Typ
boolean
verhält sich das Minuszeichen wie einNOT
, und beifloat
undinteger
wie ein*(-1).
Achtung: Diese Syntax ist nur bei den Referenzen im "Modul"-Arrray erlaubt, in den Arrays "Input" sowie "Output ist sie nicht zulässig.Codeblock "Module":[ ["And",["$In","-$Limit_ON"],"$Delayed_ON"], ],
Als Parameter der Modulbausteine sind aktuell nur Variablen, die im Abschnitt Level definiert wurden erlaubt. Es können keine Parameter als Zahl eingeben werden!
Für diese Regel besteht nur folgende Ausnahme: Wird ein Ausgangswert nicht weiter verwendet, kann anstelle einer Variablen auch der Zahlenwert0
eingesetzt werden; man spart sich so die Definition einer Variablen. Beispiel:
Statt:["Statistic",["$VAR<Helligkeit!>"],"$Stat_Min","$Stat_Max","$Stat_Mean","$Stat_Median"]
kürzer :["Statistic",["$VAR<Helligkeit!>"],0,"$Stat_Max","$Stat_Mean","$Stat_Median"]
Alle Module (mit Ausnahme des Moduls
Break)
werden in der Reihenfolge, wie sie im Array stehen, ausgeführt.Das Modul
Break
nimmt eine Sonderstellung ein. Es wertet seine 0..n Eingänge aus und bricht die weitere Abarbeitung der Logikzelle ab, falls einer der Eingängetrue
ist.
Damit wird das Senden der im Array “Output” definierten Ausgänge wird unterdrückt. Daher istBreak
nicht geeignet, wenn beim Abbruch ein definierter Zustand (bspw. das Schliessen eines Ventils) gewünscht wird.
...
Codeblock |
---|
"Module": [ ["Clocksignal","$true",0,"$Period"], // Intervalltakter ["Polynomial","$Z1","$Startwert",["$Start","-$Z1"]], // Startwert setzen, muss um 1 kleiner als Start sein, weil am Schluss Zaehler noch um 1 erhöht wird ["Polynomial","$Z1","$Endwert",["$Ende","-$Z1"]], // Endwert setzen, muss um 1 kleiner als Ende sein, siehe oben ["Comparator", "$Zaehler","$Test", "$Startwert"], // Prüfen, ob Zaehler über Startwert liegt ["Latch","$Start","$Zaehler","-$Test",0], // wenn Bedingung nicht erfüllt, Zaehler auf Start setzen ["Comparator", "$Zaehler", "$Test", "$Endwert"], // Prüfen, ob Zaheler über Endwert liegt ["Latch","$Startwert","$Zaehler","$Test",0], // wenn Bedingung erfüllt, Zaehler auf Startwert setzen ["Polynomial","$Z1","$Zaehler",["$Zaehler","$Z1"]] // Zaehler um 1 erhöhen ], |
...
Name: String, mit dem der Eingang in der GUI bezeichnet wird.
Beschreibung: String, der als Erläuterungstext bei "Mouse over" über dem Namen angezeigt wird.
Variablenname: Legt fest, welche Variable mit den Eingang verknüpft ist.
Die Trigger-Optionen bestimmen, wann ein Signal am Eingang die Berechnung der Logikzelle anstößt ( und zulässige Optionen siehe → Triggerfunktion Triggerverhalten an Eingängen).
Beispiel:
Codeblock |
---|
"Input": [ ["Startwert","Wert (integer), der als erstes ausgegeben wird ","$Start","c" ], ["Endwert","Wert (integer), der als letztes ausgegeben wird ","$Ende","c" ], ["Intervalldauer","in Sekunden","$Period","c"] ], |
...
Name: String, mit dem der Ausgang in der GUI bezeichnet wird.
Beschreibung: String, der als Erläuterungstext bei "Mouse over" über dem Namen angezeigt wird.
Variablenname: Legt fest, welche Variable mit den Ausgang verknüpft ist.
Die Sende-Optionen bestimmen, wann ein Wert am Ausgang gesendet wird (Funktionsweise und zulässige Optionen siehe →Sendefunktion Sendeverhalten an Ausgängen).
Beispiel:
Codeblock |
---|
"Output": [ ["Zähler","Aufaddierter Wert","$Zaehler","a"] ], |
...
Wegen der Gefahr von Endlosschlaufen ist es nicht zulässig, eine Variable sowohl im Input- wie auch im Output-Array zu verwenden. Dies führt zu einem Fehler.
Wird der Variablenname am Ende um ein
?
ergänzt, wird der Ausgang in der Logikzelle nur angezeigt, wenn in der GUI der Eingang bewusst über das Kreuzsymbol aktiviert worden ist (zum Beispiel:["Nacht","Schwarze Nacht","$Dark_night?","c"]
).
Weiterführende Links:
Grundlegende Informationen zu JSON findet sich bspw. unter https://wiki.selfhtml.org/wiki/JSON oder https://de.wikipedia.org/wiki/JavaScript_Object_Notation.