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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Berechnung in AWL

  1. #11
    Registriert seit
    09.08.2006
    Beiträge
    3.640
    Danke
    912
    Erhielt 661 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    a^0,5 = a^(1/2) = Quadratwurzel(a)

    Potenzgesetzte... ohne Mathe wird's auch als SPS-Programmierer nix...

  2. #12
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    34
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So nun habe ich mal einen FC erstellt.
    Leider Rechnet dieser ein wenig falsch, finde aber im Moment den Fehler nicht.
    Verwendete Parameter:
    Länge: 2.48
    Durchmesser: 1.9
    Wasserspiegel: 1.9

    Resultat sollte 7.0315 ergeben
    doch es spuckt 6.853 aus

    Wo ist wohl der Fehler versteckt, ich finde diesen nicht! Wenn jemand einen Vorschlag hat..... dieser ist willkommen!

    Quelle:
    FUNCTION "Vol_Tank_Calc" : VOID
    TITLE =Berechnet das Volumen eines Tankes
    VERSION : 0.1


    VAR_INPUT
    Durchmesser_Tank : REAL ;
    Laenge_Tank : REAL ;
    Hoehe_Wasserspiegel : REAL ;
    END_VAR
    VAR_OUTPUT
    Liter : REAL ;
    END_VAR
    VAR_TEMP
    Temp_Real_1 : REAL ;
    Temp_Real_2 : REAL ;
    Temp_Real_3 : REAL ;
    Teil_1 : REAL ;
    Teil_2 : REAL ;
    Teil_3 : REAL ;
    Teil_4 : REAL ;
    Teil_1_mul_Teil_2 : REAL ;
    Teil_3_mul_Teil_4 : REAL ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Teil 4 berechnen

    L #Durchmesser_Tank;
    L #Hoehe_Wasserspiegel;
    *R ;
    T #Temp_Real_1;
    L #Hoehe_Wasserspiegel;
    L #Hoehe_Wasserspiegel;
    *R ;
    T #Temp_Real_2;

    L #Temp_Real_1;
    L #Temp_Real_2;
    -R ;
    T #Temp_Real_3;

    CALL "Potenz" (
    P_in := #Temp_Real_3,
    X_in := 5.000000e-001,
    Y_out := #Teil_4);

    NETWORK
    TITLE =Teil 3 berechnen

    L #Durchmesser_Tank;
    L 2.000000e+000;
    /R ;
    L #Hoehe_Wasserspiegel;
    -R ;
    T #Teil_3;

    NETWORK
    TITLE =Teil 3 mit Teil 4 multiplizieren

    L #Teil_3;
    L #Teil_4;
    *R ;
    T #Teil_3_mul_Teil_4;
    NETWORK
    TITLE =Teil 1 berechnen

    L #Durchmesser_Tank;
    L 2.000000e+000;
    /R ;
    T #Temp_Real_1;

    CALL "Potenz" (
    P_in := #Temp_Real_1,
    X_in := 2.500000e+000,
    Y_out := #Teil_1);

    NETWORK
    TITLE =Teil 2 berechnen

    L #Durchmesser_Tank;
    L 2.000000e+000;
    /R ;
    T #Temp_Real_1;

    L #Teil_3;
    L #Temp_Real_1;
    /R ;
    T #Temp_Real_2;
    ACOS ;
    T #Teil_2;

    NETWORK
    TITLE =Teil 1 mit Teil 2 multiplizieren

    L #Teil_1;
    L #Teil_2;
    *R ;
    T #Teil_1_mul_Teil_2;

    NETWORK
    TITLE =#Teil_1_mul_Teil_2 von Teil_3_mul_Teil_4 subtrahieren

    L #Teil_1_mul_Teil_2;
    L #Teil_3_mul_Teil_4;
    -R ;
    T #Temp_Real_1;
    NETWORK
    TITLE =...mit der Länge multiplizieren

    L #Temp_Real_1;
    L #Laenge_Tank;
    *R ;
    T #Liter;
    END_FUNCTION


    Quelle des FC3:
    FUNCTION FC 3 : VOID
    TITLE =Potenz
    VERSION : 0.1


    VAR_INPUT
    P_in : REAL ; //Basis
    X_in : REAL ;
    END_VAR
    VAR_OUTPUT
    Y_out : REAL ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Potenz

    L #P_in;
    LN ;
    L #X_in;
    *R ;
    EXP ;
    T #Y_out;
    END_FUNCTION
    Geändert von Supermario73 (23.05.2013 um 14:30 Uhr)

  3. #13
    Registriert seit
    09.08.2006
    Beiträge
    3.640
    Danke
    912
    Erhielt 661 Danke für 543 Beiträge

    Standard

    sehe in Deiner Formel nix mit a^2,5

    Code:
    CALL "Potenz" (
    P_in := #Temp_Real_1,
    X_in := 2.500000e+000,
    Y_out := #Teil_1);

    Gruß.

  4. #14
    Registriert seit
    18.01.2007
    Ort
    Breitenbach am Inn
    Beiträge
    18
    Danke
    0
    Erhielt 2 Danke für 1 Beitrag

    Standard

    Hi

    Mhm Mir hat ein schlauer mann bei Siemens gesagt das beim rechnen mit real zahlen fehler auftreten ( rechenfehler) in der cpu) hatte mengenrechner mit realzahlen gemacht die aber falsch rechneten nicht viel aber ein bischen. er sagte ich muss da umdispunieren und mit int und ganzen zahlen rechnen sprich vergleich wann ich eine gewisse zahl adieren kann und die dann adieren aber im ganzzahlbereich mit gleitzahlen rechnet die s7 falsch. Ob das bei jeder S7 ist weis ich nicht.

  5. #15
    Registriert seit
    09.08.2006
    Beiträge
    3.640
    Danke
    912
    Erhielt 661 Danke für 543 Beiträge

    Standard

    Zitat Zitat von smilie108 Beitrag anzeigen
    Hi

    Mhm Mir hat ein schlauer mann bei Siemens gesagt das beim rechnen mit real zahlen fehler auftreten ( rechenfehler) in der cpu) hatte mengenrechner mit realzahlen gemacht die aber falsch rechneten nicht viel aber ein bischen. er sagte ich muss da umdispunieren und mit int und ganzen zahlen rechnen sprich vergleich wann ich eine gewisse zahl adieren kann und die dann adieren aber im ganzzahlbereich mit gleitzahlen rechnet die s7 falsch. Ob das bei jeder S7 ist weis ich nicht.
    Das ist was ganz anderes...

    bei real kannst Du irgendwann nicht mehr 1 dazuaddieren, weils nicht im Real abgebildet wird. Aber im DINT geht's noch... Im real gehen 8 bits für den Exponenten verloren, bei DINT stehen die zur Verfügung

    Gruß

  6. #16
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    34
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ducati

    Genau das wars!!!!! Ich danke Dir!!! Habe ich nicht gefunden.

    Der Fehler war:

    CALL "Potenz" (
    P_in := #Temp_Real_1,
    X_in := 2.500000e+000, muss 2.000000e+000 sein!
    Y_out := #Teil_1);

    Werde nun noch die runden Ende des Tanks links und rechts berechnen und mit dem Zylinder addieren das Ganze, wahrscheinlich morgen, hier einstellen!

    Besten Dank und Grüsse

  7. #17
    Registriert seit
    09.08.2006
    Beiträge
    3.640
    Danke
    912
    Erhielt 661 Danke für 543 Beiträge

    Standard

    Bitte bitte,

    übersichtlicher wird's, wenn Du anstatt der Potenzfunktion einfach SQRT nimmst, und den Radius einmal am Anfang berechnest, dann musst Du nicht xmal D/2 rechnen...

    Zitat Zitat von Supermario73 Beitrag anzeigen
    Werde nun noch die runden Ende des Tanks links und rechts berechnen
    da bin ich ja mal gespannt...

  8. #18
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    auf meiner hp liegt ein projekt zum berechnen eines liegenden zylinders
    ob ich das mit der obigen formel berechnet hab weiß ich nicht mehr. 100 jahre her
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  9. #19
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    34
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ducati
    Ja hast recht, doch ich habs gelassen, damit die Nachvollziehbarkeit auch noch in 5 Monaten möglich ist.

    @Volker
    Vielen Dank für Dein Link mit all den Bausteinen

    So, nun die Quelle für FC3
    Code:
    FUNCTION FC 3 : VOID
    TITLE =Potenz
    VERSION : 0.1
    
    
    VAR_INPUT
      P_in : REAL ;     //Basis
      X_in : REAL ;     
    END_VAR
    VAR_OUTPUT
      Y_out : REAL ;  
    END_VAR
    BEGIN
    NETWORK
    TITLE =Potenz
    
          L     #P_in; 
          LN    ; 
          L     #X_in; 
          *R    ; 
          EXP   ; 
          T     #Y_out; 
    END_FUNCTION
    ...und die Berechnung des Volumens für liegen Zylinder mit runden Köpfen
    Code:
    FUNCTION "Vol_Tank_Calc" : VOID
    TITLE =Berechnet das Volumen eines Tankes
    VERSION : 0.1
    
    
    VAR_INPUT
      Durchmesser_Tank : REAL ;        
      Laenge_Tank : REAL ;   
      Hoehe_Wasserspiegel : REAL ;  
    END_VAR
    VAR_OUTPUT
      Liter : REAL ;     
    END_VAR
    VAR_TEMP
      Temp_Real_1 : REAL ;   
      Temp_Real_2 : REAL ;   
      Temp_Real_3 : REAL ;   
      Teil_1 : REAL ;  
      Teil_2 : REAL ;  
      Teil_3 : REAL ;  
      Teil_4 : REAL ;  
      Teil_1_mul_Teil_2 : REAL ;         
      Teil_3_mul_Teil_4 : REAL ;         
      Zylinder : REAL ;             
      Koepfe : REAL ;               
    END_VAR
    BEGIN
    NETWORK
    TITLE =Teil 4 berechnen
    
          L     #Durchmesser_Tank; 
          L     #Hoehe_Wasserspiegel; 
          *R    ; 
          T     #Temp_Real_1; 
          L     #Hoehe_Wasserspiegel; 
          L     #Hoehe_Wasserspiegel; 
          *R    ; 
          T     #Temp_Real_2; 
    
          L     #Temp_Real_1; 
          L     #Temp_Real_2; 
          -R    ; 
          T     #Temp_Real_3; 
    
          CALL "Potenz" (
               P_in                     := #Temp_Real_3,
               X_in                     := 5.000000e-001,
               Y_out                    := #Teil_4);
    
    NETWORK
    TITLE =Teil 3 berechnen
    
          L     #Durchmesser_Tank; 
          L     2.000000e+000; 
          /R    ; 
          L     #Hoehe_Wasserspiegel; 
          -R    ; 
          T     #Teil_3; 
    
    NETWORK
    TITLE =Teil 3 mit Teil 4 multiplizieren
    
          L     #Teil_3; 
          L     #Teil_4; 
          *R    ; 
          T     #Teil_3_mul_Teil_4; 
    NETWORK
    TITLE =Teil 1 berechnen
    
          L     #Durchmesser_Tank; 
          L     2.000000e+000; 
          /R    ; 
          T     #Temp_Real_1; 
    
          CALL "Potenz" (
               P_in                     := #Temp_Real_1,
               X_in                     := 2.000000e+000,
               Y_out                    := #Teil_1);
    
    NETWORK
    TITLE =Teil 2 berechnen
    
          L     #Durchmesser_Tank; 
          L     2.000000e+000; 
          /R    ; 
          T     #Temp_Real_1; 
    
          L     #Teil_3; 
          L     #Temp_Real_1; 
          /R    ; 
          T     #Temp_Real_2; 
          ACOS  ; 
          T     #Teil_2; 
    NETWORK
    TITLE =Teil 1 mit Teil 2 multiplizieren
    
          L     #Teil_1; 
          L     #Teil_2; 
          *R    ; 
          T     #Teil_1_mul_Teil_2; 
    
    NETWORK
    TITLE =#Teil_1_mul_Teil_2 von Teil_3_mul_Teil_4 subtrahieren
    
          L     #Teil_1_mul_Teil_2; 
          L     #Teil_3_mul_Teil_4; 
          -R    ; 
          T     #Temp_Real_1; 
    NETWORK
    TITLE =...mit der Länge multiplizieren
    
          L     #Temp_Real_1; 
          L     #Laenge_Tank; 
          *R    ; 
          T     #Zylinder; 
    NETWORK
    TITLE =Köpfe berechnen
    
          L     #Hoehe_Wasserspiegel; 
          L     #Hoehe_Wasserspiegel; 
          *R    ; 
          T     #Temp_Real_1; 
    
          L     3.141593e+000; 
          L     6.000000e+000; 
          /R    ; 
          L     #Temp_Real_1; 
          *R    ; 
          T     #Temp_Real_2; 
    
          L     1.500000e+000; 
          L     #Durchmesser_Tank; 
          *R    ; 
          L     #Hoehe_Wasserspiegel; 
          -R    ; 
          T     #Temp_Real_3; 
    
          L     #Temp_Real_2; 
          L     #Temp_Real_3; 
          *R    ; 
          T     #Koepfe; 
    NETWORK
    TITLE =Zylinder und Köpfe addieren
    
          L     #Koepfe; 
          L     2.000000e+000; 
          *R    ; 
          L     #Zylinder; 
          +R    ; 
          L     1.000000e+003; 
          *R    ; 
          T     #Liter; 
    END_FUNCTION
    Wünsche allen frohes Arbeiten und beste Grüsse......

  10. #20
    Registriert seit
    22.07.2009
    Ort
    NRW
    Beiträge
    90
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Berechnungen in AWL. Na ja ...
    SCL wäre da schon die bessere Sprache.
    Und schau die deine Berechnung noch mal genau an ( Köpfe )
    Schlagwort Klöpperboden ...

    Grüße
    wiesel

Ähnliche Themen

  1. Berechnung einer Zahl in AWL
    Von Licht9885 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 07.04.2013, 18:50
  2. Antworten: 33
    Letzter Beitrag: 31.05.2012, 19:15
  3. Berechnung in Step 7 AWL
    Von Fabix im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.11.2010, 00:28
  4. Berechnung in AWL, bitte um Eure Hilfe
    Von marcelmoonwalker im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 07.10.2009, 18:52
  5. Antworten: 1
    Letzter Beitrag: 23.09.2005, 13:56

Stichworte

Lesezeichen

Berechtigungen

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