Versionen im Vergleich

Schlüssel

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

Robert: Grundsätzlich geprüft, einiges fehlt aber noch (Wertbereiche, Links, etc.)

...

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

  • Level (Deklaration in der Custom-Logik verwendeten Variablen),

  • Module (die eigentlichen Handlungsanweisungen, d.h. eine Abfolge Logikbausteinen),

  • Input (Definition der Eingänge und Zuordnung der Variablen) und

  • Output (Definition der Eingänge und Zuordnung der Variablen).

...

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 die 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 Logikmodule 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:

    Null, ----------- Trifft dies zu? -----------------

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

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

    • Fließkommazahl (float; zulässiger Wertebereich von --------------------- bis ---------------- ).
      Wichtiger Hinweis: Die Werte müssen immer einen Punkt enthalten

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

    • 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 von Eingangsvariablen verwendet werden kann, kann eine ------Multivariable------ Mehrfachvariable 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 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:

...

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

Es gilt folgende Syntax:

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

...

  • Variablen können durch ein vorangestelltes Minuszeichen direkt bei der Übergabe an einen Modulbaustein invertiert werden (→Invertierungsfunktion). 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"-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 Zahlenwert 0 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 zB. wenn nur der Mittelwert benötigt wird
    ["Statistic",["$VAR<Helligkeit!>"],0,"$Stat_Max"0,"$Stat_Mean","$Stat_Median"0]

  • Alle Module 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änge true ist.
    Damit wird das Senden der im Array “Output” definierten Ausgänge wird unterdrückt. Daher ist Break nicht geeignet, wenn beim Abbruch ein definierter Zustand (bspw. das Schliessen eines Ventils) gewünscht wird.

...