Step 7 Probleme mir Real Berechnung

emilio20

Level-1
Beiträge
835
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich habe eine Berechnung für eine Heizungskurfe
Code:
tv := (ti + ( tvmax - ti ) * ( ( ti - tau ) / ( ti - taumin ) ) ** ( 1 / n ))+Niveau;
 // TEMP_SOLL maximum = TEMP_MAX
    IF tv > tvmax THEN
       tv := tvmax;
    END_IF;   

// TEMP_SOLL  minimum von 25.0°C
    IF tv < 25.0 THEN
       tv := 25.0;
    END_IF;


Formel hat auch den ganzen witter funktioniert.
Jetzt ist die ausentemperatur bei 18°C und ich erhalte als ergebenis

1.#QNAN0e+000.

Wie kann ich in der If abfrage dies lösen ? Mochte Tv 25 haben wenn der Berechnete wert kleiner 25 und nicht logisch ist ?
 
In SCL kannst du das OK-Flag abfragen.

Code:
FUNCTION "...": VOID
{SetOKFlag := 'y'}

BEGIN
     ...;                  // Berechnung
     IF NOT OK THEN
        ...;
     END_IF;
END_FUNCTION


In AWL kann man das Statuswort auswerten.
Code:
      L     STW
oder auch
Code:
      U     OV
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
schau mal ist das richtig so

Code:
FUNCTION Heizkurve : VOID

TITLE = 'Heizkurve'
//
//
VERSION : '1.0'
AUTHOR  : Zehe
NAME    : Heizkurve
FAMILY  : Heizung


(*********************************************************
tv=ti+(tvmax-ti)*((ti-tau)/(ti-taumin))^(1/n)
tv=aktuelle Vorlauftemperatur
ti=Raumtemperatur innen Soll
tau=aktuelle Außentemperatur
taumin= minimale Ausentemperatur
n=Heizkörperexponent (meist 1,2)  

 ***********************************************************)
 
VAR_INPUT
  ti: REAL;      //Raumtemperatur innen Soll
  tau: REAL;     //aktuelle Außentemperatur
  taumin: REAL;  //minimale Außentemperatur
  n: REAL;       //Heizkörperexponent (meist 1,2)
  tvmax : REAL;  // Max Vorlauftemperatur 
  Niveau : REAL;
   
END_VAR

VAR_OUTPUT
  tv : REAL;
    
    
END_VAR

VAR
  
  
END_VAR 

BEGIN

   
// Heizungsfunktion Berechnung
tv := (ti + ( tvmax - ti ) * ( ( ti - tau ) / ( ti - taumin ) ) ** ( 1 / n ))+Niveau;
 
// TEMP_SOLL maximum = TEMP_MAX
    IF tv > tvmax THEN
       tv := tvmax;
    END_IF;   

// TEMP_SOLL  minimum von 25.0°C wenn Ergebins tv < 25.0 oder OK Flag nicht TRUE 
    IF tv < 25.0 OR NOT OK THEN
       tv := 25.0;
    END_IF;


END_FUNCTION


Was machst du mit {SetOKFlag := 'y'}
 
Zuletzt bearbeitet:
.. Was machst du mit {SetOKFlag := 'y'}
Ich bin mir nicht ganz sicher, ob man "Heizkurfe" nicht besser mit "v" schreiben sollte, aber ansonsten sieht es ganz gut aus. Dieses {Klammerdingens} ist eine Compileroption, die das OK-Flag in diesem Baustein aktiviert. Man kann statt dessen auch in SCL in den Compiler-Einstellungen unter "Extras-Einstellungen-Compiler" die Option "OK-Flag setzen" global aktivieren, aber im Code bleibt es halt auch für die Nachwelt erhalten.

Wodurch kam denn eigentlich das NAN (not a number) zustande? Ich kenne das z.Bsp. bei einer Division durch Null oder bei einem Wurzelziehen aus einer negativen Zahl.
 
Hallo
danke erst mal für deine Hilfe.
die Formel für die Berechnung habe ich aus einem Heizungsforum.
 
Zurück
Oben