Seite 1 von 3

Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 9:17 pm
von Robert_Mini
Nachdem ich unlängst ein wenig in Logiken eingetaucht bin, hab ich gleich auch mit der Doku für die KB begonnen!
Der Anfang ist damit gemacht, die ersten Kapitel zur Logik sind online und werden bald weiter wachsen!

Wie immer: Feedback highly welcome!

LG Robert

4.6 Logikeditor
4.6.1 Einleitung
4.6.2 Beschreibung der wichtigsten Basis-Logikbausteine
4.6.3 Mehrere Logikbausteine verknüpfen
4.6.4 Custom-Logikbausteine
4.6.5 Verwendung von Standard Logikbausteinen in Custom-Logiken
4.6.6 Beispiele für Custom Logikbausteine
4.6.6.1 Custom-Logik: Sensorauswertung mittels Polynomfunktionen
4.6.6.2 Custom-Logik: Einfache Solarsteuerung mit 3-Wege-Ventil

Re: Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 9:30 pm
von 773H
Hallo. Bei der Polynomfunktion wäre es hilfreich, wenn man Infos hätte, was man machen soll, wenn die eigene Funkton von der idealen Form a + xa1 + a2x2 + a3x3 ... abweicht.
Will sagen: was mache ich, wenn ich z.B. die Formel P0=P/(1-h/44330) hoch 5.255 eingeben möchte ...

Gruß
Stephan

Re: Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 9:37 pm
von blaubaerli
Hi Robert, prüf bitte mal den ersten Link.

Gruß
jens

Re: Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 9:42 pm
von Robert_Mini
Einleitung gibt’s noch nicht...

Re: Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 9:43 pm
von blaubaerli
Ach soooooooo :confusion-scratchheadyellow:

Re: Es geht los: Erste Doku zu Logik

Verfasst: Fr Jun 07, 2019 10:08 pm
von gbglace
sehr gut, so wird es einfacher die LE sich zu erschließen.

Re: Es geht los: Erste Doku zu Logik

Verfasst: Sa Jun 08, 2019 11:28 am
von S. Kolbinger
Hallo Stephan,

ein guter Punkt:
773H hat geschrieben: Fr Jun 07, 2019 9:30 pm Hallo. Bei der Polynomfunktion wäre es hilfreich, wenn man Infos hätte, was man machen soll, wenn die eigene Funkton von der idealen Form a + xa1 + a2x2 + a3x3 ... abweicht.
Will sagen: was mache ich, wenn ich z.B. die Formel P0=P/(1-h/44330) hoch 5.255 eingeben möchte ...
Dann möchte ich mal an diesem Beispiel zeigen, wie man hier vorgehen kann.

Mit der Basisfunktion "Ratio" haben wir schon die Möglichkeit den Quotienten A/B zu berechen.
In unserem Fall ist A der Druck (P), also brauchen wir noch eine Möglichkeit das B, den Korrekturterm (1-h/44330)5.255, zu berechnen.
Ich will das über die Polynomfunktion machen und erstelle mir in EXEL oder LibreOffice Calc eine Wertetabelle für den gewünschten Bereich:
Bild

Dann gehe ich auf eine WEB-Page mit der ich mir passende Polynom-Koeffizienten berechnen lassen kann, z.B.: https://www.arndt-bruenner.de/mathe/scripts/regr.htm, und versuche es mal mit einem Polynom 5.Grades
Bild

Und siehe da, es bleibt nur ein Polynom 2.Grades übrig und die Koeffizienten wähle ich mal auf sechs Stellen genau:
a0 = 1.0
a1 = -0.000118543
a2 = 5.68913e-9

Damit ergibt sich folgende Custom-Logic:

Code: Alles auswählen

{
    "Level": [
        ["$SensorWert","float",2.0],
        ["$Hoehe","float",550.0],
        ["$P_Abs","float",900.0],
        ["$P_Rel","float",1013.0],
        ["$P_Offset","float",700.0],
        ["$P_Gradient","float",3.2],
        ["$Korr_A0","float",1.0],
        ["$Korr_A1","float",-0.000118543],
        ["$Korr_A2","float",5.68913e-9],
        ["$H_Korr","float",0.9]
    ],
    "Module": [
        ["Polynomial","$SensorWert","$P_Abs",["$P_Offset","$P_Gradient"]],
        ["Polynomial","$Hoehe","$H_Korr",["$Korr_A0","$Korr_A1","$Korr_A2"]],
        ["Ratio","$P_Abs","$P_Rel","$H_Korr"]
    ],
    "Input": [
        ["SensorWert","Wert des Barometersensors","$SensorWert","c"],
        ["Höhe","Höhe über Meeresspiegel","$Hoehe","c"]
    ],
    "Output": [
        ["P(abs)","Absoluter Druck","$P_Abs","c"],
        ["P(rel)","Realtiver Druck, bezogen auf Meereshöhe","$P_Rel","c"]
    ]
}
Bild

Jetzt mache ich noch eine Abschätzung, wie groß der Fehler mit dieser Näherung ist.
Dazu erweitere ich meine EXEC-Tabelle mit der Näherungsformel und berechne den relativen Fehler für den normierten Luftdruck.
Bild

Man sieht hier, dass unter 1500m ü.NN der Fehler kleiner als 0,1% ist. Das ist vermutlich für den Großteil der Anwender ausreichend genau.

Damit aber unser Timberwolf auch noch auf Lager 4 am Mount Everest eine vernünftige Wetterprognose möglich macht, müssen wir genauer werden:

Dazu Teilen wir die Berechnung des Korrekturterms (1-h/44330)5.255 in zwei Schritte (Polynomfunktionen) auf:

1. Schritt: x = 1-h/44330 = 1 - 0.000022558 * h

2. Schritt: Korrekturterm_B = x5.255

Für das erste Polynom können wir die Koeffizienten direkt ablesen:
a0 = 1.0
a1 = -0.000022558

Für das zweite Polynom machen ich mir wieder eine Wertetabelle und lasse mir die Koeffizienten berechnen:
Bild

Bild

Daraus bauen wir folgende Custom-Logic:

Code: Alles auswählen

{
    "Level": [
        ["$SensorWert","float",2.0],
        ["$Hoehe","float",550.0],
        ["$P_Abs","float",900.0],
        ["$P_Rel","float",1013.0],
        ["$P_Offset","float",700.0],
        ["$P_Gradient","float",3.2],
        ["$Korr_A0","float",1.0],
        ["$Korr_A1","float",-0.000022558],
        ["$Wert_X","float",1.0],
        ["$Korr_B0","float",-0.950185],
        ["$Korr_B1","float",5.271796],
        ["$Korr_B2","float",-11.773697],
        ["$Korr_B3","float",13.356636],
        ["$Korr_B4","float",-7.983565],
        ["$Korr_B5","float",3.079016],
        ["$H_Korr","float",0.9]
    ],
    "Module": [
        ["Polynomial","$SensorWert","$P_Abs",["$P_Offset","$P_Gradient"]],
        ["Polynomial","$Hoehe","$Wert_X",["$Korr_A0","$Korr_A1"]],
        ["Polynomial","$Wert_X","$H_Korr",["$Korr_B0","$Korr_B1","$Korr_B2","$Korr_B3","$Korr_B4","$Korr_B5"]],
        ["Ratio","$P_Abs","$P_Rel","$H_Korr"]
    ],
    "Input": [
        ["SensorWert","Wert des Barometersensors","$SensorWert","c"],
        ["Höhe","Höhe über Meeresspiegel","$Hoehe","c"]
    ],
    "Output": [
        ["P(abs)","Absoluter Druck","$P_Abs","c"],
        ["P(rel)","Realtiver Druck, bezogen auf Meereshöhe","$P_Rel","c"]
    ]
}
Bild

Eine erneute Fehlerberechnung des Näherungsformel ergibt:
Bild

Und damit sind wir vermutlich viele, viele Größenordnungen genauer, als der Messwert des Drucksensors.

Re: Es geht los: Erste Doku zu Logik

Verfasst: Sa Jun 08, 2019 11:40 am
von 773H
Hallo Stefan, absolut topp!
Danke für die ausführliche Anleitung.

Gruß
Stephan

Re: Es geht los: Erste Doku zu Logik

Verfasst: Sa Jun 08, 2019 12:24 pm
von blaubaerli
Moin zusammen,

oh mein Gott, hätt ich in Mathe mal besser aufgepasst :confusion-scratchheadyellow:

Beste Grüße
Jens

Re: Es geht los: Erste Doku zu Logik

Verfasst: Sa Jun 08, 2019 12:41 pm
von StefanW
Der Hammer, was für ein Beitrag Stefan.

Liebe Foristen, jetzt wisst ihr, warum Stefan die Logikengine programmiert hat.

Das eigentlich geilste Feature ist das, was man am wenigsten sieht:
Jede der zig angelegten Logiken läßt sich unabhängig von allen anderen Logikzellen einzeln stoppen, starten, verändert. Das war eine der schwierigsten Aufgaben hierbei überhaupt. Wer die Wettbewerbsprodukte kennt: Bei den meisten wird die ganze Logik komplett neu gestartet, wenn man an einer Logik auch nur ein Fitzelchen geändert hat. Und so ein Neustart kann auch Minuten dauern, wobei in der Zeit nichts funktioniert. Bei uns am Timberwolf Server alles andere weiter und man kann auch noch die Ein- und Ausgänge live abknipsen, was ebenfalls ein Alleinstellungsmerkmal ist.

==> Das sind sehr wichtige Eigenschaften, bitte bei Berichten in anderen Foren auch herausstellen, weil die meisten achten bei Ihrer Kaufentscheidung nicht auf solche Details (klar, der Wettbewerb stellt das in seinen schönen Farbprospekten auch nicht heraus, dass die Logik immer komplett neu gestartet werden muss und in dieser Zeit nicht verfügbar ist) und daher sollt Ihr uns bitte dabei helfen zu vermitteln, dass es mittlerweile auch ein modernes Produkt mit modernen EIgenschaften gibt: Den Timberwolf Server, bei dem nix von vorne gestartet werden muss, wenn man was daran verändert - weil das gilt auch für alle anderen Engines (selbst beim WireGate Server wurde der Prozess neu gestartet, wenn man an der 1-Wire Einstellungsseite was geändert hat).

Danke fürs Beachten.

lg

Stefan