Dampfdrucktabelle r290

mc161

Level-2
Beiträge
82
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich bräuchte mal eure Unterstützung.

Ich bräuchte eine Dampfdrucktabelle fur r290. Habe mal rumgestöbert finde da nichts.

Nun bin ich auf eine Seite gestossen, die einen maschinenlesbaren Code hinterlegt hat ( im Anhang)

Kann man sowas dann in ST übernehmen, muss gestehen habe mit der Aufgabenstellung überhaupt keinen Plan.

Kann mir einer Tipps und evtl. wenn das möglich wäre, einen Programmieranfang zur Verfügung stellen ?

Grüsse und besten Dank
 

Anhänge

  • Dampfdruck r290.jpg
    Dampfdruck r290.jpg
    130 KB · Aufrufe: 68
  • R_290_pT_DE.pdf
    R_290_pT_DE.pdf
    303,8 KB · Aufrufe: 26
Kann man sowas dann in ST übernehmen
Die paar Zeilen? ---> Str+C und Strg+V und ein bisschen händisch nacharbeiten?
Wenn die Datei größer ist, dann z.B. in Excel kopieren und nach Bedarf bearbeiten oder ein Makro/VB-Funktion programmieren.
Oder soll die SPS solche Dateien einlesen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ja ich würde den gerne in meinem Funktionsblock der Wärmepumpe benützen. Habe da den Druck und hätte gerne dann die zugehörige Temperatur. (Überhitzung Kältemittel)

Grüsse
 
Hi,
ich habe mich vielleicht falsch ausgedrückt.

Würde gerne die Überhitzung des Kältemittels haben. Durch den momentane Druck des Kältemittels soll der Funktionsblock die dazugehörige Temperatur lt. der Dampfdrucktabelle Propan anzeigen. Druck ändert sich ja ständig.

Grüsse
 

Anhänge

  • wp.jpg
    wp.jpg
    407,6 KB · Aufrufe: 29
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich habe mich vielleicht falsch ausgedrückt.

Würde gerne die Überhitzung des Kältemittels haben. Durch den momentane Druck des Kältemittels soll der Funktionsblock die dazugehörige Temperatur lt. der Dampfdrucktabelle Propan die dazugehörige Temperatur anzeigen. Druck ändert sich ja ständig.

Grüsse
Quasi ein Block der den Druck als Eingang hat und die Temperatur als Ausgang? Dein Bild und die PDF unterscheiden sich etwas.
 
Ich würde ein Array erstellen (einmalig). Dann kannst du in einer Schleife durchgehen deinen Druck raussuchen und hast durch den Index deine Temperatur.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde ein Array erstellen (einmalig). Dann kannst du in einer Schleife durchgehen deinen Druck raussuchen und hast durch den Index deine Temperatur.
Genau, wenn dir eine Ganzzahl ausreicht, wenn nicht kommt noch die Interpolation dazu.
Also das Array durchlaufen lassen und wenn der Wert kleiner ist als dein aktueller Index, dann dein Index -1 und - dein Startpunkt im Array (z.B. -60) .
 
Ich würde ein Array erstellen (einmalig). Dann kannst du in einer Schleife durchgehen deinen Druck raussuchen und hast durch den Index deine Temperatur.
Hi,
sowas dachte ich mir schon.

Nur habe noch nie mit Array gearbeitet, kann ich nicht
Bin eben nur ein quereinsteigender Heizi
:mad:
Auf der Baustelle hat man App oder Monteurhilfe die Überhitung anzeigt.
 
Ohne Array:
Du könntest die pdf-Datei mit einer OCR Software in Zahlen umwandeln. Das gibt's auch online. Die Zahlen kopierst du in EXCEL und EXCEL liefert dir direkt die Formel.
..oder gleich Google fragen.
Dann bekommst du diese Formel (geprüft habe ich sie nicht!):
Screenshot_20260131_195319_Opera.jpg
 
Ohne Array:
Du könntest die pdf-Datei mit einer OCR Software in Zahlen umwandeln. Das gibt's auch online. Die Zahlen kopierst du in EXCEL und EXCEL liefert dir direkt die Formel.
..oder gleich Google fragen.
Dann bekommst du diese Formel (geprüft habe ich sie nicht!):
Anhang anzeigen 94045
Moin,
habe mit deiner Gleichung und den Werten gearbeitet, passt aber sowas von 100%.

Dann mein altes Schulwissen ausgekramt und die Formel nach T umgestellt.

In Codesys gibts auch LOG Funktion, war dann auf einmal ganz einfach, mit perfekten Ergebnis.

Nochmals vielen Dank an alle für die Unterstützung.

Grüsse
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also Copilot hat das mal raus, (was nicht schlecht aussieht) . Müsste ziemlich ähnlich sein. Anonsten klappt die variante mittels 5x8 Lagrange interpolation 1770814157368.png1770813927137.png1770813956458.png
Code:
(*
    FB_R290_Pbar_To_Tsat
    Zweck: Sättigungstemperatur (°C) von R290 aus Druck (bar abs.)
    Quelle Konstanten: NIST Chemistry WebBook – Propane (Antoine-Parameter, P in bar, T in K)
    Gültigkeitsbereiche:
      - Helgeson & Sage (1967):   277.6–360.8 K
      - Rips (1963):              230.6–320.7 K
      - Kemp & Egan (1938):       166.02–231.41 K
    Achtung: Eingangsdruck MUSS absolut in bar(a) sein!
*)

FUNCTION_BLOCK FB_R290_Pbar_To_Tsat
VAR_INPUT
    PressureBar : REAL;  // bar(a) – absoluter Druck
END_VAR
VAR_OUTPUT
    Tsat_C      : REAL;  // °C – Sättigungstemperatur
    InRange     : BOOL;  // TRUE = innerhalb der abgedeckten Bereiche
    RangeId     : INT;   // 3=Helgeson&Sage, 2=Rips, 1=Kemp&Egan, 0=keine Zuordnung
END_VAR
VAR
    log10P      : REAL;
    A           : REAL;
    B           : REAL;
    C           : REAL;
    T_K         : REAL;
END_VAR

// Hilfsfunktion: log10(x) (falls System keine Log10 bereitstellt, ln(x)/ln(10))
METHOD PRIVATE _Log10 : REAL
VAR_INPUT
    x : REAL;
END_VAR
VAR
    LN10 : REAL := 2.302585093; // natürliche Logarithmus-Basis-Umrechnung
END_VAR
IF x > 0.0 THEN
    _Log10 := LN(x) / LN10;
ELSE
    _Log10 := -1.0E38; // Marker für ungültig
END_IF


// Hauptalgorithmus
IF PressureBar <= 0.0 THEN
    // Ungültiger Eingang
    Tsat_C := REAL#NaN;
    InRange := FALSE;
    RangeId := 0;
ELSE
    // Vorab: log10(P)
    log10P := _Log10(PressureBar);

    // Bereichslogik:
    // Wir wählen den Parametersatz anhand des Drucks, der zu den T-Bereichen passt.
    // Grobe Druckfenster passend zu den NIST-Temperaturbereichen (heuristisch):
    //  - Kemp & Egan (sehr kalt):    P <= ~1.2 bar(a)
    //  - Rips (kalt bis ~47.5°C):    ~1.0 … ~8.5 bar(a)
    //  - Helgeson & Sage (≥ ~4.5°C): ~5 … ~36 bar(a)
    // Überlappungen werden bewusst so aufgelöst, dass die "beste" Näherung verwendet wird.
    IF PressureBar >= 5.0 THEN
        // Helgeson & Sage 1967
        A := 4.53678;  B := 1149.36;  C := 24.906;   // P[bar], T[K]
        RangeId := 3;
    ELSIF PressureBar >= 1.0 THEN
        // Rips 1963
        A := 3.98292;  B := 819.296;  C := -24.417;  // P[bar], T[K]
        RangeId := 2;
    ELSE
        // Sehr niedrige Drücke -> Kemp & Egan 1938
        A := 4.01158;  B := 834.26;   C := -22.763;  // P[bar], T[K]
        RangeId := 1;
    END_IF

    // Inversion der Antoine-Gleichung:
    // T[K] = B / (A - log10(P)) - C
    T_K := B / (A - log10P) - C;

    // Ausgabe in °C
    Tsat_C := T_K - 273.15;

    // Plausibilitätsflag: innerhalb des abgedeckten T-Bereichs?
    // Wir prüfen konservativ die T-Bereiche der drei Korrelationen und setzen TRUE,
    // wenn T in einem der originalen Bereiche liegt.
    IF (T_K >= 277.6 AND T_K <= 360.8) OR
       (T_K >= 230.6 AND T_K <= 320.7) OR
       (T_K >= 166.02 AND T_K <= 231.41) THEN
        InRange := TRUE;
    ELSE
        InRange := FALSE; // Ergebnis ist eine Extrapolation
    END_IF
END_IF

END_FUNCTION_BLOCK
 
Zurück
Oben