|
Suche
|
archiv.hobbybrauer.de mit Google durchsuchen:
|
|
| |
Board Index > > Gärung / Abfüllung / Reifung > Spindel Korrektur Formel bei anderer Temperatur |
|
ACHTUNG: Auf dieses Forum kann nur noch lesend zugegriffen werden. Falls Du hier im alten Forum bereits registriert warst, musst Du Dich im neuen Forum mit dem gleichen Usernamen UND der gleichen E-Mailadresse NEU registrieren, damit Dein Ranking (Anzahl Deiner Posts) aus diesem Forum ins neue mit übernommen wird. Zum neuen Forum geht's hier
Junior Member Beiträge: 44 Registriert: 9.12.2009 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 17:38 |
|
|
Hallo ihr Rechen-Spezialisten,
auf diversen Seiten kann man immer wieder Korrekturtabellen für Spindeln
aufgrund der Temperatur finden.
Auf Fabier zB gibt es auch einen Rechner...
Ich möchte auf meiner Hauseigenen Brausteuerung einen Rechner einbauen,
jedoch konnte ich bisher keine Formel für die Berechnung finden.
Ich möchte ungern eine Tabelle zur Abfrage einbinden.
Habt ihr eine Idee wie eine Korrekturformel aussehen kann?
Danke euch.
Fritz
____________________ Grüße
Friedrich
|
|
Junior Member Beiträge: 44 Registriert: 9.12.2009 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 17:48 |
|
|
|
|
Antwort 1 |
|
Gast
|
|
erstellt am: 4.9.2014 um 17:52 |
|
|
Nur weil es nicht linear ist, müsste man es ja trotzdem berechnen können.
Ich mag mir jedenfalls auch nicht recht vorstellen, dass diese Tabellen
alle durch unzählige Messreihen zustandegekommen sind.
Allerdings kann ich dazu nichts sachdienliches beitragen und würde
lediglich anmerken, dass mir diese Umrechnung sowieso einigermaßen suspekt
ist. Ich kann zwischen 20 und 30 °C keinerlei Unterschied auf der Spindel
erkennen, jedenfalls bei weitem nicht den Literaturwert. Möglicherweise
dehnt sich also nicht jede Spindel so aus wie angenommen bzw. ich warte
sowieso nicht lange genug, dass sie die Temperatur der Würze annimmt.
|
|
Posting Freak Beiträge: 919 Registriert: 29.9.2007 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 18:20 |
|
|
Muss sie das denn ?
Weder das Gewicht noch das Volumen der Spindel ändert sich bei Erwärmung.
Bei grosser Differenz kann natürlich die Spindel die korrekte
Temperaturmessung der Würze beeinflussen.
[Editiert am 4.9.2014 um 18:21 von Tyrion]
|
|
Antwort 3 |
|
Gast
|
|
erstellt am: 4.9.2014 um 19:54 |
|
|
Naja, durch thermische Ausdehnung des Glases sollte sich das Volumen schon
ändern. Und ich meine auch mal gelesen zu haben, dass man die Spindel auf
Temperatur kommen lassen soll, weil das einkalkuliert sei. Für den
Hausgebrauch ist es vermutlich absolut vernachlässigbar.
|
|
Posting Freak Beiträge: 893 Registriert: 25.5.2012 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 20:15 |
|
|
...und nachdem die Dichte der Würze gemessen wird, ist ja die Spindel mit
ihrer vergleichsweise geringen Masse auch nicht zwingend das
Ausschlaggebende. Und die Dichte der Würze dürfte sich mit der Temperatur
... es wird also schon seinen Grund haben, warum da 20° draufsteht.
Sicherlich wird es nicht um wirklich relevante Grössenordnungen handeln,
aber wenn es jemand genau wissen will, dann will er es eben genau.
Deswegenkauft er sich ja evtl. auch eine geeichte Spindel.
Harry
P.S. Sorry, passt irgendwie auch nicht zur eigentlichen Frage :-(
[Editiert am 4.9.2014 um 20:16 von HarryHdf]
____________________ Ich kann allem widerstehen, außer der Versuchung (Oscar Wilde)
|
|
Antwort 5 |
|
Posting Freak Beiträge: 1762 Registriert: 6.1.2013 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 20:41 |
|
|
Zitat: | Sicherlich wird es nicht
um wirklich relevante Grössenordnungen
handeln, |
Sondern ? Hast du Dir mal angeguckt
wieviel der Ablesewert vom tatsächlichen korrigierten Meßwert abweicht
wenn du z.B. statt bei 20 Grad bei 30 Grad misst ?
Wenn das "nicht wirklich relevant" wäre, gäbe es nicht die Notwendigkeit
von Korrekturtabellen.
Grüsse
Bernd
[Editiert am 4.9.2014 um 21:00 von BerndH]
|
|
Antwort 6 |
|
Posting Freak Beiträge: 893 Registriert: 25.5.2012 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 20:53 |
|
|
Nein habe ich nicht, da ich keine Spindeln habe. Ich hätte aber eher
geschätzt, daß es sich um Abweichungen im einstelligen Prozentbereich
handelt. Dass es so gravierend ist, überrascht mich auch. Also umso
sinnvoller, daß die Hersteller 20° draufschreiben.
Ändert aber leider auch nix dran, daß es wohl anscheinend keine
Berechnungsformel gibt.
Harry
P.S.: Hast ja recht. Wer keine Spindel hat, sollte dann mal besser die
Klappe halten.
[Editiert am 4.9.2014 um 20:56 von HarryHdf]
____________________ Ich kann allem widerstehen, außer der Versuchung (Oscar Wilde)
|
|
Antwort 7 |
|
Posting Freak Beiträge: 646 Registriert: 5.4.2004 Status: OfflineGeschlecht:
|
|
erstellt am: 4.9.2014 um 23:04 |
|
|
Hallo Fritz,
So banal die Anforderung auch sein mag -
eine einzige Formel die Deinen
Wunsch erfüllt gibt es nicht. Ein bunter Mix aus Extrakkonzentrationen,
Meßtemperaturen und Meßinstrumenten steht parat um aus Deiner Anforderung
eine Wissenschaft zu machen.
Mein Ansatz für dieses Problem war eine Matrix von Dichten in Abhängigkeit
von Extraktkonzentration und Temperaturen aufzubauen und zwischen den
gesuchten Werten zu interpolieren - Auszüge aus meinem Quellcode( //,
///, /* = Kommentare):
/* Dichten je °P und Temperaturbereich */
// Stammwürzebereich P0 P5 P10 P15
P20 P25 P30 P35 P40
this._dtblDichten.Rows.Add( 1.0002, 1.0204, 1.0418, 1.0632,
1.0851, 1.1088, 1.1323, 1.1574, 1.1840 ); // 0°C
this._dtblDichten.Rows.Add( 0.9997, 1.0196, 1.0402, 1.0614,
1.0835, 1.1064, 1.1301, 1.1547, 1.1802 ); // 10°C
this._dtblDichten.Rows.Add( 0.9982, 1.0178, 1.0381, 1.0591,
1.0810, 1.1035, 1.1270, 1.1513, 1.1764 ); // 20°C
this._dtblDichten.Rows.Add( 0.9957, 1.0151, 1.0353, 1.0561,
1.0777, 1.1000, 1.1232, 1.1473, 1.1723 ); // 30°C
this._dtblDichten.Rows.Add( 0.9922, 1.0116, 1.0316, 1.0522,
1.0737, 1.0958, 1.1189, 1.1428, 1.1676 ); // 40°C
this._dtblDichten.Rows.Add( 0.9881, 1.0072, 1.0271, 1.0477,
1.0690, 1.0910, 1.1140, 1.1377, 1.1624 ); // 50°C
this._dtblDichten.Rows.Add( 0.9832, 1.0023, 1.0221, 1.0424,
1.0636, 1.0856, 1.1085, 1.1321, 1.1568 ); // 60°C
this._dtblDichten.Rows.Add( 0.9778, 0.9968, 1.0165, 1.0368,
1.0579, 1.0798, 1.1026, 1.1262, 1.1507 ); // 70°C
this._dtblDichten.Rows.Add( 0.9718, 0.9908, 1.0104, 1.0306,
1.0517, 1.0735, 1.0963, 1.1198, 1.1443 ); // 80°C
this._dtblDichten.Rows.Add( 0.9653, 0.9842, 1.0038, 1.0240,
1.0450, 1.0669, 1.0896, 1.1130, 1.1375 ); // 90°C
this._dtblDichten.Rows.Add( 0.9584, 0.9773, 0.9968, 1.0169,
1.0379, 1.0599, 1.0825, 1.1058, 1.1301 ); // 100°C
Quelle:
"Tafeln für die Malzanalyse. Berechnet nach der Tafel der
Normaleichungskommission. (ugs. Plato-Tabelle)"
(Meindl Otto,Nürnberg, Verlag F.Carl, 1935)
Innerhalb dieser Matrix muss man entlang der
Anwendereingaben(Dichte/Temperatur) nach einem Interpolationspolynom suchen
- die " Lagrangesche Interpolationsformel" bietet sich an - hier
meine Implementierung:
/// <summary>
/// LAGRANGE-Interpolation: Sinn ist ein Polynom zu finden, welches
durch die vorgegebenen "Punkte" läuft. Diese Aufgabenstellung wird auch
/// das "Interpolationsproblem" genannt, welches u.a. mit der
Lagrange-Interpolation zu lösen ist.
/// </summary>
/// <param name="x1">x Stützstelle(Koordinate)
1</param>
/// <param name="y1">y Stützwert(Koordinate)
1</param>
/// <param name="x2">x Stützstelle(Koordinate)
2</param>
/// <param name="y2">y Stützwert(Koordinate)
2</param>
/// <param name="x3">x Stützstelle(Koordinate)
3</param>
/// <param name="y3">y Stützwert(Koordinate)
3</param>
/// <param name="x4">x Stützstelle(Koordinate)
4</param>
/// <param name="y4">y Stützwert(Koordinate)
4</param>
/// <param name="x">bekannte Koordinate X</param>
/// <returns>pn(x)</returns>
public static double
LagInterpolation( double x1, double y1, double x2, double y2,
double x3, double y3, double x4, double y4, double x ) {
double y =
y1 * ( ( ( x - x2 ) * ( x - x3 ) * ( x - x4 ) ) / ( ( x1 - x2
) * ( x1 - x3 ) * ( x1 - x4 ) ) ) +
y2 * ( ( ( x - x1 ) * ( x - x3 ) * ( x - x4 ) ) / ( ( x2 - x1
) * ( x2 - x3 ) * ( x2 - x4 ) ) ) +
y3 * ( ( ( x - x1 ) * ( x - x2 ) * ( x - x4 ) ) / ( ( x3 - x1
) * ( x3 - x2 ) * ( x3 - x4 ) ) ) +
y4 * ( ( ( x - x1 ) * ( x - x2 ) * ( x - x3 ) ) / ( ( x4 - x1
) * ( x4 - x2 ) * ( x4 - x3 ) ) );
return y;
}
Jetzt braucht es noch zwei Methoden
die die Temperatur- und Konzentration Interpolation interpretieren:
/// <summary>
/// Interpoliert den Spindelwert
/// </summary>
/// <param name="abgelesen_d20_4">Der abgelesene Spindelwert
in D20/4 bei einer Temperatur von <paramref
name="abgelesenBeiGradC"/>.</param>
/// <param name="abgelesenBeiGradC">Die Temperatur bei der
<paramref name="abgelesen_d20_4"/> abgelesen wurde.</param>
/// <returns>Grad Plato bei 20°C</returns>
internal double
interpolierePlato( double abgelesen_d20_4, double abgelesenBeiGradC
) {
//double d20_4 = System.Math.Round(
this._plato.D20_4fromfromGG( gradPlato ), 4 );
double[] aGrad = interpoliereTemperatur(
abgelesenBeiGradC );
int minId = 0;
for ( int i = 0; i < aGrad.Length; i++ )
if ( abgelesen_d20_4 > aGrad )
minId = i;
int min = minId - 1;
if ( 0 > min ) min = 0;
if ( min > aGrad.Length - 4 ) min = aGrad.Length - 4;
int p1 = min;
int p2 = min + 1;
int p3 = min + 2;
int p4 = min + 3;
return CommonMath.LagInterpolation( aGrad[p1], p1 * 5,
aGrad[p2], p2 * 5, aGrad[p3], p3 * 5, aGrad[p4], p4 * 5, abgelesen_d20_4
);
}
/// <summary>
/// Liefert ein Array aus interpolierten Dichten bei
unterschiedlichen Temperaturen
/// </summary>
/// <param name="abgelesenBeiGradC"></param>
/// <returns></returns>
internal double[]
interpoliereTemperatur( double abgelesenBeiGradC ) {
double[] ret = new double[this._dtblDichten.Columns.Count];
int min = (int)System.Math.Floor( abgelesenBeiGradC / 10 ) -
1;
if ( 0 > min ) min = 0;
if ( min > this._dtblDichten.Rows.Count - 4 ) min =
this._dtblDichten.Rows.Count - 4;
int t1 = min;
int t2 = min + 1;
int t3 = min + 2;
int t4 = min + 3;
for ( int i = 0; i < this._dtblDichten.Columns.Count; i++
)
ret = CommonMath.LagInterpolation( t1 * 10,
(double)this._dtblDichten.Rows[t1], t2 * 10,
(double)this._dtblDichten.Rows[t2], t3 * 10,
(double)this._dtblDichten.Rows[t3], t4 * 10,
(double)this._dtblDichten.Rows[t4], abgelesenBeiGradC );
return ret;
}
Eine "Formel/Funktion/Methode" die
dann alles miteinander verheiratet, könnte dann z.B. so aussehen:
/// <summary>
/// Errechnet für die Angabe <paramref
name="abgelesen_d20_4"/> und <paramref name="abgelesenBeiGradC"/>
den Spindelwert
/// bei 20°C
/// </summary>
/// <param name="abgelesen_d20_4">Der abgelesene Spindelwert
in D20/4 bei einer Temperatur von <paramref
name="abgelesenBeiGradC"/>.</param>
/// <param name="abgelesenBeiGradC">Die Temperatur bei der
<paramref name="abgelesen_d20_4"/> abgelesen wurde.</param>
/// <returns>Grad Plato bei 20°C</returns>
internal double SpindelWertBei20Grad( double
abgelesen_d20_4, double abgelesenBeiGradC ) {
double erg = 0;
if ( abgelesen_d20_4 >= 1.04646 && abgelesen_d20_4 <=
1.06345 )
erg = interpolierePlato( abgelesen_d20_4,
abgelesenBeiGradC ) - 0.02;
else
erg = interpolierePlato( abgelesen_d20_4,
abgelesenBeiGradC );
return erg;
}
Du siehst, es ist nicht trivial und dies hier war in Auszügen mein
Lösungsansatz - aber es gibt auch andere die einen weniger detailverliebten
Ansatz pflegen aber deswegen nicht weniger genau sein müssen.
Wichtig ist zu wissen, dass Korrektur(tabellen) zunächst einmal zum
Messinstrument gehören - ganz individuell - sie sind auf oder mit dem
Meßinstrument dokumentiert und gelten auch nur für dieses. Alles was wir
hier machen ist eine "Vereinfachung" des Ganzen und mit gewissen
Tücken behaftet. Wirklich falsch sein sollte es aber dennoch nicht
Gruß
Oli
____________________ http://www.brewrecipedeveloper.de
|
|
|
|
Board Index > > Gärung / Abfüllung / Reifung > Spindel Korrektur Formel bei anderer Temperatur |
|
|
|
Alle Logos und Warenzeichen auf dieser Seite sind Eigentum der jeweiligen Besitzer und Lizenzhalter. Im übrigen gilt Haftungsausschluss. Weitere Details findest Du im Impressum. |
Die Artikel sind geistiges Eigentum des/der jeweiligen Autoren, alles andere © 1998 - 2022 by Hobbybrauer.de |
|
|
|