Volumenberechnung liegender Zylinder mit JKM-868 (LevelJET)

Hallo,

ich zerbreche mir seit Tagen den Kopf wie ich bei einem liegenden Zylinder die Menge in Liter anzeigen kann.
Ein Formel habe ich, auf einem Blattpapier klappt es auch, hat jemand ein Script oder eine Idee wie ich das machen kann?
Ich habe die Länge, den Durchmesser und die Füllhöhe wird per Variable an IP-Symcon übergeben.

Danke

Gruss Jan

Ja wenn du die Formel eh hast, wo ist dann das Problem diese in ein Script zu packen ?
:confused::confused:

Liegender Zylinder ? Also quasi ein liegendes dickes Rohr ?
Das hier sollte doch weiterhelfen: http://de.wikipedia.org/wiki/Kreissegment

greez
bb

Ja, ich habe die Formel aber ich weiss einfach nicht wie ich die Formel in das IP-Symcon einpacken kann.

Ich habe die Formel von Wikipedia http://de.wikipedia.org/wiki/Zylinder_(Geometrie), die funktioniert auch aber ich bekomme sie nicht berechnet im IPS so das ich das Ergebnis als Ergebnis bekomme.

8071148aa683952b34862648c58279c8.png

amsonsten kannst du auch den zylinder in segmente aufteilen, so wie der leveljet auflöst (zb 1cm)
für jedes segment kannst du ein bestimmtes volumen errechnen (oben u unten gleich)
die ergebnisse packst du in eine tabelle und lässt dann immer vergleichen
also pelgelstand:
5 cm=150 liter
6 cm=175 liter
.
.
und wenn du gar nicht rechnen möchtest, dann füllst du litergenau mit wasser über ekm868 und markierst entsprechend den tank und packst es wieder in eine tabelle.

ansonsten bleibt dir nur der weg über die formel. ist übrigens nicht schwer, musst sie nur in teile zerlegen und jeden schritt einzeln in dem script schreiben

Tolle Idee,

er könnte auch seine Zisterne wieder ausgraben und hochkant einbauen.
Dann wird die Formel erheblich vereinfacht :smiley:

Gesendet mit TapaTalk

Naja, in dem du gleich wie mitm Taschenrechner arbeitest.
Von innen nach außen Teilergebnisse berechnen und dann zusammenfügen.
Oder eine Klammerorgie, das macht aber keinen Spass und ist unleserlich.

Wenn ich zeit hab tippe ichs dir heute Abend mal zusammen. Ist keine große Hexerei.

gruß
bb

Vielen Dank, ich probiere mal weiter, wenn es heute Abend bei Dir klappt wäre ich Dir zu tiefst dankbar.

zu der Idee mit dem ausgraben und Hochkant wieder eingraben, die Idee hatte ich auch schon, :wink:

Ich tue mir immer noch etwas schwer mit dem Skripten, einfache bekomme ich hin.

Danke Euch allen.

er könnte auch seine Zisterne wieder ausgraben und hochkant einbauen.
Dann wird die Formel erheblich vereinfacht

meine erste zisterne stand auch hochkant, ist echt einfacher :smiley:
oder aber mal beim hersteller anfragen, der hat das dingen ja bestimmt konstruiert, da gibts doch daten

Wenn es nicht so genau sein muss, schau mal hier:

http://www.hansney.de/HoPa/Kreisabschnittsflaeche.html

Sorry, funktioniert nicht, du hast ja nur die Höhe

Gruss
Erwin

Jetzt hat sich noch ein neues Problem aufgetan, ich wollte einen Zeitabschnitt von dem aktuellen Monat abrufen.
Ich habe mir gedacht ich kann folgendes abändern:

$nacht = mktime(0,0,0,date(„n“),date(„j“),date(„Y“)); hier bekomme ich den Zeitstempel von 0 Uhr des aktuellen Tages

um auf den 1 des aktuellen Monats zu kommen habe ich die Zeile wie folgt umgeschrieben:

$monat = mktime(0,0,0,0,1,date(„Y“));

Aber ich bekomme komische Daten zurück, hab ich da was falsch gemacht?

Gruss Jan

Hallo Jan,

hast du die Liter-Berechnung mittlerweile in PHP für IP-Symcon umsetzen können?
Wäre schön, wenn du das Skript hier einmal bereitstellen könntest.
Spätestens hierbei würden meine PHP-Kenntnisse nichtmehr ausreichen.

Solche Code-Schnipsel sollten IMHO übrigens von den Admins bei den Hardware-Infos bereitgestellt werden. Ich meine, der Leveljet ermittelt ja schon irgendwie die Literangabe… wenn ich mir dann schon die „teure“ IP-Symcon-Anbindung kaufe, sollte es doch mehr oder weniger „plug&play“ möglich sein, mit der selben Formel rechnen zu dürfen.

Viele Grüße,
Michael

Hallo Michael!

in Google Peiltabellen suchen. Sind für Öltanks.
Gibt es bei deinem Tankhersteller solche Peiltabelle?
Wenns dann noch genauer sein soll kann man die Werte ganz einfach Interpolieren.

Schönen Gruß:)
Egon

Hallo Jan,

leider habe ich auch keine Plug&Play-Lösung mit ein und derselben Formel
für einen 30 Grad schräg liegenden Kegel-Holstumpf-Zylinder :rolleyes:
Für eine normale Tonne so etwa:


$level = GetValue(12345);  // vom JET

// $level = 0.30;    // zum Testen
$sensorabstand = 0.30; // vom oberen Rand
$hoehe = 1.8;
$durchmesser = 0.85;

$fuellhoehe = $hoehe - ($level - $sensorabstand) ;
//echo $fuellhoehe . "
";

$liter = (pi() / 4) * $durchmesser * $durchmesser * $fuellhoehe * 1000;

//echo $liter. "
";

SetValue(67890, $liter);

Hier ein Link zu den Peiltabellen.

MST

Lasst doch den Armen nicht so hängen. So geht’s:


function CalcVolZylinder($r,$L,$h) {
  $a = sqrt(2*$r*$h - $h*$h);
  $b = ($r-$h) * $a / ($r*$r);
  $c = acos(($r-$h)/$r);
  $vol = $r*$r*$L*($c-$b);
  return($vol);
}

function VolKontrolle($r,$L) {
  $v = $r*$r*$L*pi();
  return($v);
}

$r = Radius des Zylinders
$L = Länge des Zylinders
$h = Füllhöhe

Zu beachten sind natürlich die Einheiten: Gibt man $r und $L in m ein, bekommt man Kubikmeter zurück, d.h. dividiert durch 1000 ergibt Liter.

Die Funktion VolKontrolle gibt eine Überprüfungsmöglichkeit für den vollen Zylinder, :slight_smile:

@steiner und martinwk: VIELEN DANK für eure Mühe! „Leider“ hat mich egonkernien in die richtige Richtung geschubst: Peiltabelle meines Herstellers! (wow, DIN sei dank, findet man sogar für einen Tank von 1970). Danke Egon!
Ich denke eine Auswertung nach der Tabelle sollte sinnvoller/genauer sein als die reine Berechnung nach Zylinder?!

Für die Nachwelt untenstehend auch mein aktuelles Skript. Die ganzen if-Abfragen muss man natürlich gemäß seiner eigenen Peiltabelle anpassen… kann man das in PHP schöner coden als die (in meinem Fall 160 Stck.) if-Abfragen?



<?

$distance = GetValueFloat(58600 /*[LevelJET-Distance]*/);
$sensorabstand = 14;
$maxfuellhoehe = 159;
$pegel = ($maxfuellhoehe + $sensorabstand - $distance);

if ($pegel >=1) $multiplikator = (8.5	/1);
if ($pegel >=2) $multiplikator = (23.3	/2);
(...)
if ($pegel >=158) $multiplikator = (10045.4/158);
if ($pegel >=159) $multiplikator = (10053.9/159);

$liter = ($pegel * $multiplikator);

SetValue(58888 /*[Heizöl verbleibend]*/, $liter);

?>



… vielleicht mit einem Array:

$multiplikator  = array(1 => 8.5, 2 => 23.5, 158 => 10045.4, 159 => 10053.9);
echo ($multiplikator [1]);

MST

Hallo,
es gibt mehrere Möglichkeiten:
1.) Du schreibst die Peiltabelle in ein Array oder eine Datenbank. Letzteres wäre zu bevorzugen.

2.) Du schreibst die Peiltabelle mal in eine Excel Tabelle und lässt Dir einen Graphen zeichnen. Da solltest Du dann eine Funktion draus schreiben können. Meistens sind diese am Anfang und am Ende nicht linear und in der Mitte linear. Dann wären es noch 3 IFs und gut ist.

Gruß