From 766639c5598f97e74aa25bc50f60cf8964f86758 Mon Sep 17 00:00:00 2001 From: Dejan Date: Mon, 13 Jul 2026 10:30:43 +0000 Subject: [PATCH] Update dew-point-calulator.md --- dew-point-calulator.md | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/dew-point-calulator.md b/dew-point-calulator.md index d318636..ab282ca 100644 --- a/dew-point-calulator.md +++ b/dew-point-calulator.md @@ -51,5 +51,87 @@ BEGIN #DewPoint_C := 0.0; END_IF; +END_FUNCTION +``` + +# Buck version +``` + +FUNCTION "FC_DewPoint_Buck" : Void +{ S7_Optimized_Access := 'TRUE' } + +VAR_INPUT + Temperature_C : Real; // Air temperature in °C + Humidity_RH : Real; // Relative humidity in % +END_VAR + +VAR_OUTPUT + DewPoint_C : Real; // Dew point in °C + Valid : Bool; +END_VAR + +VAR_TEMP + T : LReal; + RH : LReal; + SaturationVP : LReal; + ActualVP : LReal; + S : LReal; + Discriminant : LReal; + Td : LReal; +END_VAR + +BEGIN + // RH must be greater than zero because LN(0) is undefined. + #Valid := + (#Humidity_RH > 0.0) AND + (#Humidity_RH <= 100.0); + + IF #Valid THEN + #T := REAL_TO_LREAL(#Temperature_C); + #RH := REAL_TO_LREAL(#Humidity_RH); + + // Buck saturation vapour pressure over liquid water. + // Result is in hPa. + #SaturationVP := + 6.1121 * + EXP( + (18.678 - (#T / 234.5)) * + (#T / (257.14 + #T)) + ); + + // Actual water vapour pressure. + #ActualVP := + (#RH / 100.0) * #SaturationVP; + + // Intermediate logarithmic value. + #S := + LN(#ActualVP / 6.1121); + + // Part below the square root. + #Discriminant := + ((18.678 - #S) * (18.678 - #S)) + - + ((4.0 * 257.14 * #S) / 234.5); + + IF #Discriminant >= 0.0 THEN + #Td := + (234.5 / 2.0) * + ( + 18.678 + - #S + - SQRT(#Discriminant) + ); + + #DewPoint_C := LREAL_TO_REAL(#Td); + + ELSE + #DewPoint_C := 0.0; + #Valid := FALSE; + END_IF; + + ELSE + #DewPoint_C := 0.0; + END_IF; + END_FUNCTION ``` \ No newline at end of file