Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Probleme mir Real Berechnung

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    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 ?
    Zitieren Zitieren Probleme mir Real Berechnung  

  2. #2
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    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
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    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'}
    Geändert von emilio20 (01.04.2014 um 20:36 Uhr)

  4. #4
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Zitat Zitat von emilio20 Beitrag anzeigen
    .. 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.
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  5. #5
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    danke erst mal für deine Hilfe.
    die Formel für die Berechnung habe ich aus einem Heizungsforum.

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Man könnte auch die Division durch 0 abfangen BEVOR man sie ausführt. Die wird immer auftreten wenn ti = taumin ist (oder auch schon fast gleich ist?).

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 21.12.2012, 08:04
  2. Probleme beim Umwandeln von INT --> Real
    Von Stahlhart im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 09.06.2010, 14:29
  3. Berechnung DINT oder REAL
    Von mitchih im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.01.2010, 09:24
  4. Antworten: 3
    Letzter Beitrag: 28.03.2009, 09:47
  5. Antworten: 1
    Letzter Beitrag: 23.09.2005, 13:56

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •