Füllstand liegender Zylinder berechnen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • schlossbauer@krempl
    Smart Home'r
    • 31.07.2020
    • 40

    #1

    Füllstand liegender Zylinder berechnen

    Grüß euch!

    hat jemand diese Formel schon als "Baustein" umgesetzt?

    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: tank.jpg
Ansichten: 2337
Größe: 11,1 KB
ID: 387560
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: formel_tank.png
Ansichten: 2206
Größe: 3,7 KB
ID: 387559

    mit der Formel sollte man den Füllstand in mm eines liegenden zylindrischen Tanks schön in Liter umrechnen können. ;-)

    als LoxConfig "Anfänger" stellt sich die Frage wie man das am schönsten umsetzt?

    schöne Grüße
    Thomas
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4711

    #2
    Na, der Formelbaustein beherrscht doch alles, was Du brauchst. Das hat mit Loxone ja wenig zu tun sondern eher mit mathematischen Grundkenntnissen Der Formelbaustein kann ARCCOS und auch Quadratwurzel (SQRT). Der Rest sind doch nur Klammern.

    Online-Dokumentation LoxoneConfig Programmbaustein Formel: Holen Sie sich hier mehr Informationen!


    Ich baue soetwas gerne im Excel vor, dann kannst Du sehen, ob Du die Klammern richtig gesetzt hast - und übertrage es dann in den Formelbaustein.
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar

    • Prof.Mobilux
      Supermoderator
      • 25.08.2015
      • 4711

      #3
      Weils so schön ist habe ich es mal schnell nachgebaut ;-)

      Im Excel mit Kontrollrechnung: Wenn Höhe gleich dem Durchmesser ist, muss das Maximalvolumen herauskommen (voll):

      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 2191
Größe: 18,7 KB
ID: 387564

      Die Formel für das Teilvolumen ist (mit vielen Klammern zum besseren Verständnis): =B2*(B4^2*ARCCOS(1-(B1/B4))-((B4-B1)*WURZEL(2*B4*B1-(B1^2))))

      Und umgesetzt in Loxone Config im Formelbaustein (Ausgabe direkt in Litern):

      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 2146
Größe: 15,7 KB
ID: 387565

      Formel: (I2*(I3^2*ARCCOS(1-(I1/I3))-((I3-I1)*SQRT(2*I3*I1-(I1^2)))))/1000



      🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


      LoxBerry - Beyond the Limits

      Kommentar

      • romildo
        Lebende Foren Legende
        • 25.08.2015
        • 5144

        #4
        Es gibt auch schon einige Posts hier im Forum. Hier ein Beispiel und hier noch eins
        lg Romildo

        Kommentar

        • schlossbauer@krempl
          Smart Home'r
          • 31.07.2020
          • 40

          #5
          Vielen Dank für die vielen Inputs - funktioniert perfekt - wieder was gelernt ;-)

          Kommentar

          • Michael Sommer
            Lox Guru
            • 25.08.2015
            • 1952

            #6
            Hallo Thomas,
            da Du keine Angaben zum Medium machst, hoffe ich dass Du darin Wasser bevorraten willst. Wenn das aber zum Beispiel ein Tank zur Heizöllagerung sein sollte, brauchst Du dafür geignete Füllstands-Messeinrichtungen die für eine entsprehende Ex-Zulassung der Messeinrichtung.
            Gruß Michael
            Haustechnik UG: MS2, 7 Extensionen, WAGO 750er I/O-Module, 19"-Notbedienebene, EMA-Anlage
            ELT-Allgemein UG: MS1, 4 Extensionen Notbedienebene, RM+WM-Anlage, Mehrere Shellys
            Wohnung OG: MS1, 8 Extensionen, Notbedienebene, Mehrere Shellys
            Wohnung EG: konvent. E-Installation, Autarke EZR-Regelkreise (0-10V) für Stat.-HZG mit Aufschaltung (Schwellwert) des Heizkreises auf den Miniserver UG, Zeitsteuerung EG-Wohnung aus Miniserver UG). Mehrere Shellys
            LoxBerry-Nutzer: Stats4Lox,
            Testserver: 2xMS-GEN1

            Kommentar

            • Labmaster
              Lox Guru
              • 20.01.2017
              • 2574

              #7
              Hier mein eine etwas allgemeinere Art bei einer unförmige Zisterne die Füllmenge zu erfassen.
              Das ganze hab ich zwar über KNX und NodRed am laufen, liefert am Ende aber die Daten dann auch in Loxone.
              Auch wäre das relativ einfach als PicoC Code direkt in Loxone umzusetzen.

              Habe seit 2021 eine Graf Flachzisterne mit China Drucksensor ( https://www.amazon.de/gp/product/B08C77PPWB ) an einem MDT AIO-0410V.01 ( https://www.mdt.de/fileadmin/user_up...ng_Ausgang.pdf ) über NodeRed am laufen.

              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: z1.jpg
Ansichten: 2055
Größe: 63,1 KB
ID: 387625

              Code für die Umrechung von mA zu Liter (ist für eine NodeRed "function Node")
              Für die Umrechnung nutze ich eine Ausliterungstabelle ( [ATTACH]n387628[/ATTACH] ​ [ATTACH]n387628[/ATTACH] ) vom Zisternen Hersteller (Graf) in welcher er die Daten des Füllstands in Bezug zur Füllhöhe angibt. Die Zisterne ist extrem unförmig.

              Für die Messpunkte zwischen den Tabellendaten wird einfach eine Gerade angenommen.
              Da diese 7500 l Flachzisterne doch ziemlich unförmig ist war das zumindest eine sehr gangbarer Weg.

              Ich kommen damit trotz der unförmigkeit der Zisterne auf eine Genauigkeit von ca. 10L (mit definierter Entnahme bei unterschiedlichen Ständen ausgelitert)

              Code:

              Code:
              // cistern measurement table (got from manufacturer GRAF)
              // data below are from a 7500l flat plastic cistern
              //
              // first column = fillheight in mm
              // second column = liter
              const literingTable = [
              [0, 0],
              [100, 368],
              [200, 976],
              [300, 1621],
              [400, 2339],
              [500, 3153],
              [600, 3796],
              [700, 4609],
              [800, 5341],
              [900, 6057],
              [1000, 6731],
              [1100, 7301],
              [1200, 7515],
              [1260, 7550]
              ];
              
              // pressure Sensor parameters
              const max_height = 2; // 2m
              const max_mA = 20; // mA at max_height
              const min_mA = 4; // mA at zero height
              
              // index to table for lowest level in cistern where water
              // can still be sourced. Below, pump can't reach the water
              
              const percent_0_index = 2 // eg, 2 is 200mm
              
              
              // Main starts here
              var y;
              
              var measured_mA = msg.payload; // get mA value from Sensor as input
              if (measured_mA < min_mA){
              // if its below allowed range, then exit
              node.warn("Error ! Input Value below 4mA")
              return;
              }
              
              var high_mm = ((max_height * 1000 / (max_mA - min_mA) * (measured_mA - min_mA))).toFixed(0);
              var x = high_mm;
              
              //search for fitting table area, getting index into table as i
              for(var i = 0; i < literingTable.length; i++) {
              if ( literingTable[i][0] > x ) break; // if "end entry" found, then exit
              }
              i = i - 1; // correct index to "start entry"
              
              
              // check if index was inside table and not the last entry
              if (i<literingTable.length-1){
              // was inside table
              // get values from table
              var x1 = literingTable[i+0][0];
              var y1 = literingTable[i+0][1];
              var x2 = literingTable[i+1][0];
              var y2 = literingTable[i+1][1];
              // and calculate the value in between
              y=y1+((x-x1)/(x2-x1)*(y2-y1));
              }
              else{
              // was the last entry,
              // so return last entry as fixe value from table
              // no calcuation needed
              y=literingTable[i+0][1]
              }
              
              // calculate percentage from table index 2 as 0% to last table index as 100%
              
              var percent = 100 / (literingTable[literingTable.length-1][1] - literingTable[percent_0_index][1]);
              percent = (percent * (y - literingTable[2][1])).toFixed(0) * 1;
              if (percent < 0){
              percent = -1;
              }
              
              msg = { topic: "L", payload: y };
              msg2 = { topic: "%", payload: percent };
              
              return [msg, msg2];​


              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: zps1.jpg
Ansichten: 1977
Größe: 26,2 KB
ID: 387626

              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: zds2.jpg
Ansichten: 1995
Größe: 71,0 KB
ID: 387627


              Kommentar


              • Prof.Mobilux
                Prof.Mobilux kommentierte
                Kommentar bearbeiten
                Coole Lösung. Etwas einfacher wäre es vermutlich noch, sich im Excel die Ausgleichsgerade der Tabelle anzeigen zu lassen und dann einfach die entsprechende Formel der Ausgleichsgeraden zur Berechnung zu verwenden. Dann brauchst Du die komplizierte Interpolation nicht.
            • Prof.Mobilux
              Supermoderator
              • 25.08.2015
              • 4711

              #8
              Ich habe das programmtechnisch sehr cool gelöste Beispiel von Labmaster noch einmal etwas einfacher mit Excel gelöst: Tabelle in Excel bringen und im Diagramm eine Trendlinie hinzufügen. In diesem Fall "Polynomisch 6. Grades" - damit legt sich die Trendlinie recht genau an die tatsächliche Gerade heran. Dann "Formel im Diagramm anzeigen".

              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 2063
Größe: 38,6 KB
ID: 387705


              Die erzeugte Geradengleichung kann man dann einfach in den Formelbaustein bringen und sich das Ergebnis anzeigen lassen. Damit spart man sich die komplizierte Interpolation, die ansonsten notwendig ist.

              Nachteil: Etwas ungenauer je nach Komplexität der Zisternenform. In diesem Beispiel wird im oberen Bereich ein höherer Wert angezeigt. Nimmt man ein Polynom 5. Grades, ist der Wert leicht niedriger. Hier muss man einen Kompomiss finden.

              Vorteil: Sehr einfache Umsetzung im Formelbaustein ohne PicoC.

              🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


              LoxBerry - Beyond the Limits

              Kommentar

              • Labmaster
                Lox Guru
                • 20.01.2017
                • 2574

                #9
                Zitat von Prof.Mobilux
                Ich habe das programmtechnisch sehr cool gelöste Beispiel von Labmaster noch einmal etwas einfacher mit Excel gelöst: Tabelle in Excel bringen und im Diagramm eine Trendlinie hinzufügen. In diesem Fall "Polynomisch 6. Grades" - damit legt sich die Trendlinie recht genau an die tatsächliche Gerade heran. Dann "Formel im Diagramm anzeigen".

                ...​
                irgendwo hier im Forum gab es mal einen Thread dazu, weshalb ich es dann auch genauso so versucht habe, war aber mit der Zisternen Form einfach nicht gut hinzubekommen und die Polynome wurde immer länger und ungenauer.

                Aus dem Grund ist es dann die programmtechnisch etwas aufwendigere Variante geworden.
                Zuletzt geändert von Labmaster; 16.04.2023, 09:32.

                Kommentar


                • Prof.Mobilux
                  Prof.Mobilux kommentierte
                  Kommentar bearbeiten
                  Ja, ein Polynom ist dann immer ein Kompomiss. Wobei das Polynom oben in meiner Excel sehr genau ist - außer im volleren Bereich der Zysterne. Aber im mittleren Bereich (z. B. bei 600mm) ist es ziemlich gut. Wenn die einzelnen Punkte zu weit auseinander liegen, dann ist auch eine Interpolation wie bei Dir wieder ungenau. Es kommt also halt immer drauf an ;-) Aber wenn man kein NodeRed oder ein LoxBerry mit XL hat und das wirklich über PicoC machen müsste, würde ich das Polynom vorziehen. PicoC ist auf dem MS einfach zu fehleranfällig.
              • Prof.Mobilux
                Supermoderator
                • 25.08.2015
                • 4711

                #10
                Wer packt's ins Wiki?
                🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                LoxBerry - Beyond the Limits

                Kommentar

                • Thonder60
                  Dumb Home'r
                  • 21.10.2018
                  • 14

                  #11
                  Hallo,
                  ich wollte die Lösung von Prof.Mobilux auch bei meiner Zisterne anwenden.

                  Dazu habe ich die Füllstandkurve des Herstellers im Excel nachgebaut, leider funktioniert die Berechnung mit der Trendlinie nicht - ersuche daher um Unterstützung was ich falsch gemacht habe
                  Angehängte Dateien

                  Kommentar

                  • Sammy
                    LoxBus Spammer
                    • 23.08.2018
                    • 413

                    #12
                    Hallo,

                    soweit ich sehe sind da zwei kleine Fehler drin:

                    In Deiner Formel steht:
                    =-0,0004*C246+0,0974*C245-​.. (in Zelle C246 und C245 steht aber nichts)

                    korrekt wäre:
                    =-0,0004*C24^6+0,0974*C24^5-​..

                    Aber selbst wenn ich den Fehler korrigiere, lande ich nicht beim richtigen Ergebnis, da hat Excel anscheinend eine falsche Trendlinie berechnet. Ich habe noch einmal ein neues xy-Diagramm erstellt und dazu eine Trendlinie 4. Grades erstellt, das spuckt Excel dann wie folgt aus:

                    y = 5E-10x^4 - 3E-06x^3 + 0,0053x^2 + 0,0855x + 20,829

                    Übersetzt in eine Formel sieht das dann so aus:
                    =5*10^-10*C24^4-3*10^-6*C24^3+0,0053*C24^2+0,0855*C24+20,829

                    Also 5E-10 heißt 5x 10^-10 = 0,0...005

                    Das funktioniert auch soweit, die Funktion 6. Grades wollte ich jetzt nicht komplett abtippen.

                    Viel Erfolg,
                    Michael


                    Angehängte Dateien

                    Kommentar

                    • Thonder60
                      Dumb Home'r
                      • 21.10.2018
                      • 14

                      #13
                      Hallo Michael,
                      danke für deine Mühe und Rückmeldung.

                      Ich habe das xy-Diagramm auch nochmals neu erstellt, die Trendlinie hinzugefügt und mir die Formel im Diagramm anzeigen lassen.

                      Dann kommt jedoch auch bei polynomisch Grad 4 dieser Wert y = 0,8227x4 - 28,68x3 + 300,67x2 - 517,56x + 269,98 und nicht deiner?
                      Keine Ahnung was ich da falsch mache - habe die beiden Screenshots angefügt.

                      Wenn ich mit deiner Formel rechne dann komme ich in den Bereich der Füllstandkurve +/-. Ideal wäre sicher polynomisch 6


                      Kannst Du mir bitte die Formel in mein Excel einarbeiten, dann sehe ich was ich falsch gemacht habe

                      Danke & LG
                      Walter


                      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 2023-07-27 12_49_51-Füllstandkurve-.xlsx - Excel.png
Ansichten: 1886
Größe: 68,2 KB
ID: 398222 Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 2023-07-27 12_51_48-Füllstandkurve-.xlsx - Excel.png
Ansichten: 1840
Größe: 59,7 KB
ID: 398223

                      [ATTACH]n398224[/ATTACH]




                      Kommentar

                      • Sammy
                        LoxBus Spammer
                        • 23.08.2018
                        • 413

                        #14
                        Hallo Walter,

                        Dein Diagramm ist ein Linien-Diagramm, wie da Excel die Trendlinie ausrechnet ist für mich unlogisch. Ich habe irgendwann für mich festgestellt, dass nur bei dem xy-Diagramm-Typ eine korrekte Formel von Excel ausgespuckt wird.

                        Ich habe jetzt mehrere Variante durchgespielt und mich zig mal vertippt ;-)

                        Ein Polynom 3. Grades sieht schon ganz gut aus - Excel-Formel = -B3^3*9*10^-7+B3^2*0,0024+1,272*B3

                        Mit Polynom 4. Grades wird es noch besser - Excel-Formel =B3^4*5*10^-10-B3^3*3*10^-6+B3^2*0,0051+0,1863*B3

                        Hier mal das Ergebnis plus die Abweichung zur Vorgabe:

                        Ergebnisse:
                        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 33,3 KB ID: 398229

                        Bei Polynom 5. oder 6. Grades produziert Excel irgendwie Murks oder ich vertippe mich bei den 10er Potenzen. Der 4. Grad scheint mir aber von der Genauigkeit vollkommen ausreichend.

                        Schöne Grüße,
                        Michael

                        Zuletzt geändert von Sammy; 27.07.2023, 16:10.

                        Kommentar

                        • romildo
                          Lebende Foren Legende
                          • 25.08.2015
                          • 5144

                          #15
                          Excel rechnet schon richtig nur müssten die Werte in der Formel auf mehr Dezimalstellen erweitert werden.
                          Wenn man die Dezimalstellen Beispielsweise auf 30 erweitert kommt dann bei 6. Grad folgendes heraus:
                          y = 0.000000000000000191500635756842x6 - 0.000000000000970954922840657000x5 + 0.000000001913606280812970000000x4 - 0.000003170506156724430000000000x3 + 0.004310943745736040000000000000x2 + 0.552273145483923000000000000000x - 2.301619722740720000000000000000
                          ​​​
                          umgesetzt auf die Excelformel in deinem Beispiel in Zelle C24
                          =1.91500635756842*10^-16*C24^6-9.70954922840657*10^-13*C24^5+1.91360628081297*10^-9*C24^4-3.17050615672443*10^-6*C24^3+4.31094374573604*10^-3*C24^2+5.55227314548392*10^-1*C24-2.30161972274072
                          und in Loxone wenn an Eingang I1 eines Formelbausteins die Höhe angelegt wird, dann die Formel:
                          1.91500635756842*10^-16*I1^6 - 9.70954922840657*10^-13*I1^5 + 1.91360628081297*10^-9*I1^4 - 3.17050615672443*10^-6*I1^3 + 0.00431094374573604*I1^2 + 0.552273145483923*I1- 2.30161972274072
                          Als Ergebis kämen so folgende Werte:
                          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Füllstandsberechnung1.png
Ansichten: 1824
Größe: 18,8 KB
ID: 398256
                          Zuletzt geändert von romildo; 27.07.2023, 20:43.
                          lg Romildo

                          Kommentar

                          Lädt...