Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

Grundstruktur einer Custom-Logik

Das Grundgerüst jeder Custom-Logik sind 4 Abschnitte (im Detail ein JSON-Objekt mit den vier Schlüsseln)

...

In welcher Reihenfolge die vier Schlüssel im JSON-Objekt erwähnt werden, spielt keine Rolle und ist Geschmackssache des jeweiligen Anwenders. Einige Anwender stellen bspw. Input und Output an den Anfang; andere stellen den Abschnitt Module vorab, weil dort die meisten Änderungen gemacht werden müssen und sie auf diese Weise nicht lange scrollen müssen.

Grundsätzliches zur JSON-Datenstruktur und -Notation

Um Custom-Logiken zu erstellen, ist es nicht erforderlich, sich vertieft in die JSON-Notation einzuarbeiten.
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:

    • Boolean (bool ; zulässige Schlüsselwörter: true und false)

    • Ganzzahl (integer; 32 Bit, zulässiger Wertebereich zwischen -2 147 483 648 und 2 147 483 647)

    • Fließkommazahl (float; zulässiger Wertebereich von -1.72E35 bis 1.72E35).
      Wichtiger Hinweis: Dezimal-Werte müssen mit Punkt geschrieben werden, ein Komma ist nicht zulässig. Beim Arbeiten mit großen Wertebereichen sind die Einschränkungen der numerischen Mathematik zu berücksichtigen!

    • Zeichenkette (string; zulässige Zeichen sind alle Buchstaben, alle Ziffern und folgende Sonderzeichen: ------------- Welche? -----------

    • Array: Ein Array schließt beliebig viele durch Kommas getrennte Werte in eckigen Klammern [ ] ein; jeder Eintrag kann einen beliebigen für JSON zugelassenen Typ annehmen.

  • 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: Zur Verwendung einer variablen Zahl von Eingängen, muss eine Mehrfachvariable definiert werden. Auf diese Weise kann in der grafischen Oberfläche durch Klick auf + mehrfach von diesem Typ ein Eingang hinzugefügt werden.
    Bei der Definition 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.

Level-Array

Der Level-Array dient der Deklaration von Variablen. Es müssen hier sämtliche Variablen deklariert werden, die im Logikmodul angewendet werden.

...

Code Block
 "Level": [
    ["$true","bool",true],
    ["$false","bool",false],
    ["$Start","integer",0],
    ["$Ende","integer",3],
    ["$Period","float",5.0],
    ["$CronExpr","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 Logikmoduls definiert.

...

Code Block
  "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
  ],

Input-Array

Im Input-Array werden die Eingänge der Custom-Logikzelle festgelegt und je mit einer Variable verknüpft.

...

Code Block
"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"] 
  ],

Output-Array

Im Output-Array werden die Ausgänge der Custom-Logikzelle festgelegt und je mit einer Variable verknüpft.

...

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