hab es nun den Level Jet mit IPS verknüpft!
Nun zeigt mir die Variable den Wert Abstand in cm an?
Bin auf der Suche nach einen Script das mir die Werte in Liter bzw. in Prozent errechnet!
Im Level Jet hab ich als Tank „frei“ gewählt und die Werte cm = x Liter usw…eingetragen.
wenn du deine Werte kennst dann ist das doch nur eine kleine Rechenaufgabe.
Wie viel Liter sind den bei deinen Tank 1cm oder anders herum wie viel cm sind ein Liter?
Wenn ich davon ausgehe, dass der Sensor 30cm über einem vollen Tank angebracht ist und bei einem Mess-Abstand von 165cm der 4000ltr Tank leer ist, dann ist bei
Messwert = 30cm = 4000 ltr
Messwert = 165cm = 0 ltr
Messbereich dann 135cm
Das bedeutet pro cm sind es 29,62962962962963 ltr
So würde ich das sehen.
Dann müßte das Script dem Wert von einem vollen Tank (4000ltr) das Ergebniss aus der Rechnung ((Messwert-30cm) mal 29,62962962962963) abziehen und dieses Ergebniss in Liter in eine Floatvariable eintragen.
Nachtrag, wenn der Wert dann unbedingt in % dargestellt werden soll: Floatvariable (Liter) dann einfach durch 40 teilen
Die Tankform ist weder Kugel, noch Zylinder. Somit musste ich beim Level Jet die Tankform „frei“ eingeben. Hierfür stehen bis zu 32 Messpunkte zur Verfügung, die man selber eintragen muss ( Habe 30 Messpunkte verwendet)
Per Anhang die Bauform meines Tankes.
Der Sensorkopf ist 23,2 cm vom Höchststand entfernt, das sind die 4000 Liter.
Der Wasserstand ist vom Boden bis zur Oberfläche 165 cm (Messbereich ist dann 141,8 cm)
Habe alle 132 Liter, die ich in den Tank per Wasseruhr befüllt habe eine Messmarke in cm gesetzt:
132 Liter =15 cm
264 Liter =23 cm
396 Liter = 30 cm
528 Liter = 36 cm
666 Liter = 42 cm
793 Liter = 46 cm
925 Liter = 51 cm
1057 Liter = 55 cm
1189 Liter = 60 cm
usw…
Er hatte die Frage nunmal so gestellt, als ob er das Volumen berechnen wollte und bei 165cm 4000l im Tank sind.
Diese Angaben reichen dafür nicht.
Und woher wusstet du die Bauform?
Zum schätzen der Füllmenge braucht er doch IPS nicht, oder?
Ich habe für Dich mal mein HID-Modul als Daten-Quelle genommen, Du mußt also das was ich mit HID einlese per ser. Schnittstelle einlesen. Aber Das hast Du ja schon vorliegen
Ich habe eine Registervariable auf mein HID-Modul gesetzt und als Aktionscript dieses geschrieben.
<?
switch($IPS_SENDER) // ermitteln, wodurch das Skript aufgerufen wurde
{
case "RegisterVariable": // durch Registervariable aufgerufen: neuer Wert wurde empfangen
$data = substr ($IPS_VALUE, 4, 1);
// nächste Stellen an $data anhängen
$data .= substr ($IPS_VALUE, 5, 1);
$data .= substr ($IPS_VALUE, 6, 1);
//echo $data; // zur Kontrolle
//echo strval ($data); // zur Kontrolle
If (strval($data) > "0"):
SetValue(10274 /*[Füllstand\Messwert_Michl_Float]*/,$data); // Die Floatvariable beschreiben
$Messwert = GetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/);
SetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/ ,$Messwert);
$FloatWert = GetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/ );
$Liter = (4000-(($FloatWert-23.2) * 28.20874471086037));
SetValueFloat(57418 /*[Füllstand\Michl's Tank in Liter]*/ ,$Liter );
//SetValueFloat(58065 /*[Füllstand\Michl's Füllstand in %]*/,intval($Liter/40));
SetValueinteger(50134 /*[Füllstand\Michl Füllstand in %]*/,intval($Liter/40));
endif;
}
?>
Du mußt 2 Floatvariablen erstellen, eine mit Suffix ~Water und eine Integer mit Suffix ~Intensity.100)
Geht sicher besser, bin nicht der PHP-Freak ;=)
Gruß Helmut
Ich hab jetzt eine Register Variable angelegt! Instanz hinzufügen ->Register Variable.
Dann hab ich den Serial Port ProJet gewählt und bei Target das Script gewählt?
Hoff das stimmt so?
Aber leider passiert hier nichts bei den Angelegten 3 Float Variablen?
Ich habe keine serielle Schnittstelle und nie ein ProjetLevel-Dingsda gesehen, weiß also nicht wie da die Daten kommen.
Hier mal ein Script, das passen könnte, wäre gut wenn Du mal Hardcopy von Deinen Daten (was kommt im Debugfenster der ser.Schnittstelle/Registervariable usw) zeigst.
<?
switch($IPS_SENDER) // ermitteln, wodurch das Skript aufgerufen wurde
{
case "RegisterVariable": // durch Registervariable aufgerufen: neuer Wert wurde empfangen
SetValue(10274 /*[Füllstand\Messwert_Michl_Float]*/,$IPS_VALUE); // Die Floatvariable beschreiben
$Messwert = GetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/);
SetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/ ,$Messwert);
$FloatWert = GetValueFloat(10274 /*[Füllstand\Messwert_Michl_Float]*/ );
$Liter = (4000-(($FloatWert-23.2) * 28.20874471086037));
SetValueFloat(57418 /*[Füllstand\Michl's Tank in Liter]*/ ,$Liter );
//SetValueFloat(58065 /*[Objekt #58065 existiert nicht]*/,intval($Liter/40));
SetValueinteger(50134 /*[Füllstand\Michl Füllstand in %]*/,intval($Liter/40));
}
?>
Hallo Helmut,
danke!
Also dein Script das du erstellt hast, da brauche ich die Werte nicht Manuell zufügen (132 Liter =15 cm, 264 Liter =23 cm, usw…) das wird automatisch errechnet? Oder liege ich da falsch?
Anhand der Exel Tabelle weis man, das 1cm 28 Liter sind?
Ich glaube auch, dass diese Auflösung in den unteren Werten unnötig ist.
Zumal eine Anzeige in % so eine „Kleinkariertheit“ widerspricht. Du weißt ja, dass der Tank unten so geformt ist, dass die Werte nicht linear sein können.
hab das momentan so gelöst:
Der Level Jet zeigt mir ja immer die Distance zur Wasseroberfläche der Zisterne an, an dem wird dann anhand deines Skriptes der Prozent und Literanteil errechnet.
Wenn sich beim Level Jet die Distance ändert ( Alle 2 Stunden erfolgt eine Messung ), dann löse ich dein Script mit
einem Ereignis (Auslösung bei Variablenänderung) aus.