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

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

Thema: Volumenberechnung in liegendem Zylinder mit Step-7

  1. #11
    Registriert seit
    28.02.2005
    Beiträge
    186
    Danke
    7
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also, wenn deine mathematischen Funktionen nicht ausreichen in der CPU, würde ich auch zu einem Plygonzug tendieren. Wobei man aber von der Form des Behälters nicht weis, wieviel jetzt reingegangen ist nehme ich an.
    Die Stirnflächen des Zylinders sind bestimmt nicht Plan. Somit könnte man den Polygonzug nur durch austesten (also 1000l rein und messen) bestimmen.

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

    Standard

    hallo

    ich hatte sowas mal für ne s5 geschrieben. dann wurde das irgendwann mal auf s7 umgebaut und ich habe den fc etwas angepasst.

    ist in awl/fup.

    in scl wie oben ist das natürlich viel einfacher.

    Code:
    DATA_BLOCK "DB 111 Tankinhalt 1"
    TITLE =
    VERSION : 0.1
    
    
      STRUCT 	
       DB_VAR : REAL ;	//vorläufige Platzhaltervariable
       r : REAL  := 1.450000e+002;	//r = radius
       h : REAL ;	//h = inhalt in cm
       rh : REAL ;	//rh
       s : REAL ;	//s
       alpha1 : REAL ;	//alpha1
       alpha : REAL ;	//alpha
       lb : REAL ;	//lb
       a : REAL ;	//a = Füllstand in Liter
       aqm : REAL ;	//aqm = Füllstand in m^3
       l : REAL  := 7.750000e+002;	//l = länge
       dummy1 : REAL ;	//dummy1
       dummy2 : REAL ;	//dummy2
       dummy3 : REAL ;	//dummy3
       dummy4 : REAL ;	//dummy4
       dummy5 : REAL ;	//dummy5
       dummy6 : REAL ;	//dummy6
       dummy7 : REAL ;	//dummy7
       dummy8 : REAL ;	//dummy8
       dummy9 : REAL ;	//dummy9
       dummy10 : REAL ;	//dummy10
       dummy11 : REAL ;	//dummy11
       dummy12 : REAL ;	//dummy12
       dummy13 : REAL ;	//dummy13
       dummy14 : REAL ;	//dummy14
       dummy15 : REAL ;	//dummy15
       dummy16 : REAL ;	//dummy16
       fuellen_aus : REAL  := 2.450000e+002;	//füllen aus
       fuellen_ein : REAL  := 2.350000e+002;	//füllen ein
       leeren_aus : REAL  := 2.450000e+002;	//entleeren aus
       leeren_ein : REAL  := 2.500000e+002;	//entleeren ein
      END_STRUCT ;	
    BEGIN
       DB_VAR := 0.000000e+000; 
       r := 0.000000e+000; 
       h := 0.000000e+000; 
       rh := 0.000000e+000; 
       s := 0.000000e+000; 
       alpha1 := 0.000000e+000; 
       alpha := 0.000000e+000; 
       lb := 0.000000e+000; 
       a := 0.000000e+000; 
       aqm := 0.000000e+000; 
       l := 0.000000e+000; 
       dummy1 := 0.000000e+000; 
       dummy2 := 0.000000e+000; 
       dummy3 := 0.000000e+000; 
       dummy4 := 0.000000e+000; 
       dummy5 := 0.000000e+000; 
       dummy6 := 0.000000e+000; 
       dummy7 := 0.000000e+000; 
       dummy8 := 0.000000e+000; 
       dummy9 := 0.000000e+000; 
       dummy10 := 0.000000e+000; 
       dummy11 := 0.000000e+000; 
       dummy12 := 0.000000e+000; 
       dummy13 := 0.000000e+000; 
       dummy14 := 0.000000e+000; 
       dummy15 := 0.000000e+000; 
       dummy16 := 0.000000e+000; 
       fuellen_aus := 0.000000e+000; 
       fuellen_ein := 0.000000e+000; 
       leeren_aus := 0.000000e+000; 
       leeren_ein := 0.000000e+000; 
    END_DATA_BLOCK
    
    FUNCTION "FC 111 Tankinhalt 1" : VOID
    TITLE =berechnung des tankinhalts 1
    AUTHOR : 'V.L.'
    VERSION : 0.1
    
    BEGIN
    NETWORK
    TITLE =feste daten
    
          L     1.450000e+002; //tankradius
          T     "DB 111 Tankinhalt 1".r; 
    
          L     7.750000e+002; //tanklänge
          T     "DB 111 Tankinhalt 1".l; 
    
    NETWORK
    TITLE =nicht erlaubte werte verhindern
    
          L     "DB 111 Tankinhalt 1".h; // füllstand in cm
          L     1.500000e-001; // 0.15 cm
          >=D   ; 
          SPB   m001; 
          L     1.500000e-001; 
          T     "DB 111 Tankinhalt 1".h; 
    m001: NOP   0; 
    
          L     "DB 111 Tankinhalt 1".h; // füllstand in cm
          L     2.899900e+002; // 289.99 cm
          <=D   ; 
          SPB   m002; 
          L     2.899900e+002; 
          T     "DB 111 Tankinhalt 1".h; 
    m002&#58; NOP   0; 
    
    NETWORK
    TITLE =rh = r - h
    
          L     "DB 111 Tankinhalt 1".r; 
          L     "DB 111 Tankinhalt 1".h; 
          -R    ; 
          T     "DB 111 Tankinhalt 1".rh; 
          NOP   0; 
    NETWORK
    TITLE =dummy1 = r * r
    
          L     "DB 111 Tankinhalt 1".r; 
          SQR   ; 
          T     "DB 111 Tankinhalt 1".dummy1; 
          NOP   0; 
    NETWORK
    TITLE =dummy2 = rh * rh
    
          L     "DB 111 Tankinhalt 1".rh; 
          SQR   ; 
          T     "DB 111 Tankinhalt 1".dummy2; 
          NOP   0; 
    NETWORK
    TITLE =dummy3 = r * r - rh * rh ~~~~~ = dummy1 - dummy2
    
          L     "DB 111 Tankinhalt 1".dummy1; 
          L     "DB 111 Tankinhalt 1".dummy2; 
          -R    ; 
          T     "DB 111 Tankinhalt 1".dummy3; 
          NOP   0; 
    NETWORK
    TITLE =dummy4 = sqrt&#40;r * r - rh * rh&#41; ~~~~~ = sqrt &#40;dummy3&#41;
    
          L     "DB 111 Tankinhalt 1".dummy3; 
          SQRT  ; 
          T     "DB 111 Tankinhalt 1".dummy4; 
          NOP   0; 
    NETWORK
    TITLE =s = 2 * sqrt&#40;r * r - rh * rh&#41; ~~~~~ = 2 * dummy4
    
          L     "DB 111 Tankinhalt 1".dummy4; 
          L     2.000000e+000; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".s; 
          NOP   0; 
    NETWORK
    TITLE =dummy5 = 2 * rh
    
          L     "DB 111 Tankinhalt 1".rh; 
          L     2.000000e+000; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy5; 
          NOP   0; 
    NETWORK
    TITLE =dummy6 = rh * 2 / s ~~~~~ = dummy5 / s
    
          L     "DB 111 Tankinhalt 1".dummy5; 
          L     "DB 111 Tankinhalt 1".s; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".dummy6; 
          NOP   0; 
    NETWORK
    TITLE =dummy7 = atan&#40;rh * 2 / s&#41; ~~~~~ = atan&#40;dummy6&#41;
    
          L     "DB 111 Tankinhalt 1".dummy6; 
          ATAN  ; 
          T     "DB 111 Tankinhalt 1".dummy7; 
          NOP   0; 
    NETWORK
    TITLE =dummy8 = atan&#40;rh * 2 / s&#41; * 180 ~~~~~ = dummy7 * 180
    
          L     "DB 111 Tankinhalt 1".dummy7; 
          L     1.800000e+002; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy8; 
          NOP   0; 
    NETWORK
    TITLE =alpha1 = atan&#40;rh * 2 / s&#41; * 180 / pi ~~~~~ = dummy8 / pi
    
          L     "DB 111 Tankinhalt 1".dummy8; 
          L     3.141500e+000; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".alpha1; 
          NOP   0; 
    NETWORK
    TITLE =alpha = 90 - alpha1
    
          L     9.000000e+001; 
          L     "DB 111 Tankinhalt 1".alpha1; 
          -R    ; 
          T     "DB 111 Tankinhalt 1".alpha; 
          NOP   0; 
    NETWORK
    TITLE =dummy9 = r * pi
    
    
    
          L     "DB 111 Tankinhalt 1".r; 
          L     3.141500e+000; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy9; 
          NOP   0; 
    NETWORK
    TITLE =dummy10 = r * pi * 2 ~~~~~ = dummy9 * 2
    
          L     "DB 111 Tankinhalt 1".dummy9; 
          L     2.000000e+000; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy10; 
          NOP   0; 
    NETWORK
    TITLE =dummy11 = r * pi * 2 * alpha ~~~~~ = dummy10 * alpha
    
          L     "DB 111 Tankinhalt 1".dummy10; 
          L     "DB 111 Tankinhalt 1".alpha; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy11; 
          NOP   0; 
    NETWORK
    TITLE =lb = r * pi * 2 * alpha / 180 ~~~~~ = dummy11 / 180
    
          L     "DB 111 Tankinhalt 1".dummy11; 
          L     1.800000e+002; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".lb; 
          NOP   0; 
    NETWORK
    TITLE =dummy12 = lb * r
    
          L     "DB 111 Tankinhalt 1".lb; 
          L     "DB 111 Tankinhalt 1".r; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy12; 
          NOP   0; 
    NETWORK
    TITLE =dummy13 = s * rh
    
          L     "DB 111 Tankinhalt 1".s; 
          L     "DB 111 Tankinhalt 1".rh; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy13; 
          NOP   0; 
    NETWORK
    TITLE =dummy14 = &#40;lb * r - s * rh&#41; ~~~~~ = dummy12 - dummy13
    
          L     "DB 111 Tankinhalt 1".dummy12; 
          L     "DB 111 Tankinhalt 1".dummy13; 
          -R    ; 
          T     "DB 111 Tankinhalt 1".dummy14; 
          NOP   0; 
    NETWORK
    TITLE =dummy15 = &#40;lb * r - s * rh&#41; / 2 ~~~~~ = dummy14 / 2
    
          L     "DB 111 Tankinhalt 1".dummy14; 
          L     2.000000e+000; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".dummy15; 
          NOP   0; 
    NETWORK
    TITLE =dummy16 = &#40;lb * r - s * rh&#41; / 2 * l ~~~~~ = dummy15 * l
    
          L     "DB 111 Tankinhalt 1".dummy15; 
          L     "DB 111 Tankinhalt 1".l; 
          *R    ; 
          T     "DB 111 Tankinhalt 1".dummy16; 
          NOP   0; 
    NETWORK
    TITLE =a = dummy16 / 1000 = Füllstand in Liter
    
          L     "DB 111 Tankinhalt 1".dummy16; 
          L     1.000000e+003; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".a; 
          NOP   0; 
    NETWORK
    TITLE =aqm = a / 1000 = Füllstand in m^3
    
          L     "DB 111 Tankinhalt 1".a; 
          L     1.000000e+003; 
          /R    ; 
          T     "DB 111 Tankinhalt 1".aqm; 
          NOP   0; 
    END_FUNCTION
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  3. #13
    Registriert seit
    26.03.2005
    Beiträge
    58
    Danke
    6
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich habe das so gelöst


    -------------------------------------------
    r² * 2acos(r-h) - sin(2acos(r-h))
    - --- ---
    2 r r
    ----------------------------------------------

    L #radius
    L #FH = füllhöhe des Tanks Scalierter wert mit FC105
    -R

    L #radius
    /R
    T #E1

    ACOS
    L 2.000000e+000
    *R
    SIN
    T #E2

    L #E1
    ACOS
    L 2.000000e+000
    *R

    L #E2
    -R
    T #E3

    L #radius
    L #radius
    *R

    L 2.000000e+000
    /R

    L #E3
    *R

    L #laenge
    *R
    L 1.220000e+000
    *R
    T #inhalt

  4. #14
    Registriert seit
    04.11.2004
    Beiträge
    51
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ersteinmal vielen Dank für Eure zahlreichen Beiträge,

    nun zu meinem Lösungsansatz:

    Bekannt sind der Radius r die Länge und die Füllhöhe h, wobei die Höhe aus Differenzdruck und Dichte der Flüssigkeit ermittel wird.

    Als erstes wird Alpha berechnet, aus h=r * (1-cos(Alpha/2)) wird cos(Alpha/2)=(r-h)/r.

    Danach bestimmt man das Bogenmaß, BM=(PI/180) * Alpha.

    Die Fläche ergibt aus A=r² / 2 * (BM - sin(Alpha))

    ==> V := A * L

    FUNCTION TankVolume : REAL

    TITLE = 'Berechnung des Volumens eines liegenden Zylinders'
    //
    // Inputs Radius und Länge des Zylinders in dm, sowie aktuelle Füllhöhe in dm
    // alle Längenwerte in [dm], damit ersparen wir uns das Umrechnen
    // V=A*L [dm³] bzw. [l]
    // A= r*r/2 * (BM-sin(Alpha)) [dm²]
    // Alpha=2* acos((R-H)/R) [°]
    // BM= PI*Alpha/180 [°]
    // Release: 28.03.2005
    // TODO: Korrekturfaktor für die gewölbten Seitenflächen
    //

    VERSION : '1.0'
    AUTHOR : mg
    NAME : name
    FAMILY : family

    // Bausteinparameter
    VAR_INPUT
    // Eingangsparameter
    vH :REAL; // aktuelle Füllstandshöhe
    vR :REAL; // Radius des Zylinders
    vL :REAL; // Länge des Zylinders
    END_VAR

    CONST
    // Konstanten
    PI := 3.141592;
    END_CONST

    VAR_TEMP
    // temporäre Variablen
    vAlpha :REAL; // Winkel
    vBM :REAL; // Bogenmass
    vA :REAL; // Fläche
    END_VAR

    BEGIN
    // Anweisungsteil
    ;
    vAlpha := 2 * ACOS((vR - vH) / vR);
    vBM := PI / 180 * vAlpha;
    vA := vR**2 / 2 * (vBM - SIN(vAlpha));
    ;
    TankVolume := vA * vL;
    ;
    END_FUNCTION


    Mein SCL-Baustein sieht damit so aus, die Korrektur für die gewölbten Seitenflächen werde ich durch Anpassung der Länge versuchen, damit bekomme ich zwar kein 100% genaues Ergebnis, aber in den Bereich <5% sollte ich schon kommen.
    Angehängte Dateien Angehängte Dateien
    \"Ein Computerprogramm tut, was Du schreibst, nicht was Du willst.\"
    (Murphys Gesetze)

  5. #15
    Registriert seit
    04.11.2004
    Beiträge
    51
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich war wohl zu voreilig,

    nach dem ich endlich geschnallt habe, dass die Trignometrischen Funktionen bereits das Bogenmaß liefern, funktioniert meine Simultion mit dem geändertem SCL-Baustein.

    Code:
    FUNCTION TankVolume &#58; REAL
    
    TITLE = 'Berechnung des Volumens eines liegenden Zylinders'
    //
    // Inputs Radius und Länge des Zylinders in dm, sowie aktuelle Füllhöhe in dm
    // alle Längenwerte in &#91;dm&#93;, damit ersparen wir uns das Umrechnen ;-&#41; 
    // V=A*L &#91;dm³&#93; bzw. &#91;l&#93;
    // A= r*r/2 * &#40;BM-sin&#40;Alpha&#41;&#41; &#91;dm²&#93;
    // Alpha=2* acos&#40;&#40;R-H&#41;/R&#41; in Bogenmaß
    // Release&#58; 28.03.2005
    // TODO&#58; Korrekturfaktor für die gewölbten Seitenflächen
    // 
    
    VERSION &#58; '1.0'
    AUTHOR  &#58; mg
    NAME    &#58; name
    FAMILY  &#58; family
    
    // Bausteinparameter
    VAR_INPUT
      // Eingangsparameter
      vH &#58;REAL;  // aktuelle Füllstandshöhe
      vR &#58;REAL;  // Radius des Zylinders
      vL &#58;REAL;  // Länge des Zylinders
    END_VAR
    
    CONST
      // Konstanten
      PI &#58;= 3.141592;
    END_CONST
    
    VAR_TEMP
      // temporäre Variablen
      vAlpha &#58;REAL; // Winkel
      vA     &#58;REAL; // Fläche    
    END_VAR
    
    BEGIN
      // Anweisungsteil
      ;
      vAlpha &#58;= 2 * ACOS&#40;&#40;vR - vH&#41; / vR&#41;;
      vA &#58;= vR**2 / 2 * &#40;vAlpha - SIN&#40;vAlpha&#41;&#41;;
      ;
      TankVolume &#58;= vA * vL;
      ;
    END_FUNCTION
    Gruß Micha
    \"Ein Computerprogramm tut, was Du schreibst, nicht was Du willst.\"
    (Murphys Gesetze)

  6. #16
    Anonymous Gast

    Standard

    Einfach und sehr genau mit Wägezellen
    z.B. Siwarex von Siemens

  7. #17
    Registriert seit
    31.08.2009
    Beiträge
    20
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich häng gerade an dem gleichen Problem und kämpf gerade an der Seitenwölbung für einen Zylindrisch liegenden Tank hat jemand schon eine Lösung gefunden?

    Gesamtvolumen ist kein Problem.

    V = h² [pi] / 3 * (3r-h) aber dann fängt der spaß schon an.

    Hilfe wäre super!
    Danke schon mal.

    Michi
    Zitieren Zitieren Hallo  

  8. #18
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Ist das nicht das, was mikel in seinem SCL-Baustein berechnet? Liegender zylindrischer Tank.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #19
    Registriert seit
    31.08.2009
    Beiträge
    20
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    eist sind die liegenden Tanks (Zylindrisch) nicht Zylindrisch sondern aus statischen Gründen noch die geraden Flächen ausgewölbt. und da befindet sich ja auch noch Material also noch zwei abgeschnittene "Kugeln" noch hinten und vorne auf den Tank

  10. #20
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ah verstehe. Wenn es exakte Halbkugeln sind, hätte man es einfacher, zu der Formel von mikel kommt dann noch das Volumen einer Kugel entsprechend hinzu. Oder sind die Kugelwände kleiner als 1/2 Kugel?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Endlagenüberwachung Zylinder
    Von mzva im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 01.03.2012, 23:26
  2. SPS VISU Zylinder mit Objekt verschrauben
    Von Hans.S im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.09.2009, 15:11
  3. Zylinder verfahren lassen
    Von Vauxhall1983 im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 02.09.2009, 15:44
  4. Ansteuerung Zylinder parallel ausfahren
    Von Keeper im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 15.03.2007, 11:01
  5. Frage über Zylinder
    Von waldy im Forum Stammtisch
    Antworten: 12
    Letzter Beitrag: 27.01.2006, 11:34

Lesezeichen

Berechtigungen

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