home *** CD-ROM | disk | FTP | other *** search
- (*--------------------------------------------------------------------------*)
- (* Modul: bemess.inc *)
- (*--------------------------------------------------------------------------*)
- (* Ermittelt das erforderliche Traegheitsmoment und das erforderliche
- Widerstandsmoment des Stahlprofils das verwendet werden soll. *)
-
- PROCEDURE StahlBemessung;
-
- CONST Emodul = 2.1E8; (* E-Modul von Stahl *)
- SigmaMax : ARRAY [1..2] OF REAL = (14.0,21.0);
- (* maximale Spannungen fuer St-37 und St-52 im Lastfall H *)
-
- VAR erfI, (* erforderliches Traegheitsmoment *)
- erfW, (* erforderliches Widerstandsmoment *)
- DeltaSoll : REAL; (* zulaessige Durchbiegung *)
- d,Stahlguete : INTEGER;
-
- (*------------------------------------------------------------------------*)
-
- PROCEDURE Eingabe (VAR delta : REAL; VAR n,Guete : INTEGER);
-
- BEGIN
- CLRSCR;
- REPEAT
- GOTOXY (1,1); WRITE('Eingabe der Stahlguete 1 = St-37 2 = St-52 : ');
- READLN (Guete);
- UNTIL Guete IN [1,2];
- WRITELN ('Begrenzung der maximalen Durchbiegung auf l/x');
- WRITE ('Eingabe x : '); READLN (n);
- delta := Feldlaenge / n;
- END; (* eingabe *)
-
- (*------------------------------------------------------------------------*)
- (* Berechnet die maximale Durchbiegung des Traegers mit Hilfe des
- MOHR'schen Satzes. *)
-
- FUNCTION Durchbiegung : REAL;
-
- VAR deltaH, (* Intervallgroesse *)
- Momentenflaeche, (* Groesse der Momentenflaeche *)
- Haelfte, (* Haelfte der Momentenflaeche *)
- step, (* Schrittweite *)
- MomAufA, (* Groesse der linken Auflagerkraft aus Momentenbelastung *)
- Resultort, (* Ort der Resultierenden der Momentenflaeche *)
- Summe,dummy : REAL;
- i : INTEGER;
-
- (*----------------------------------------------------------------------*)
- (* Numerische Intergration der Momentenflaeche mit Hilfe der
- SIMPSON'schen Regel *)
-
- FUNCTION Simpson (Ort,dH : REAL) : REAL;
-
- VAR Moment1,Moment2,Moment3,Q : REAL;
-
- BEGIN
- Schnittkraft (Ort,Moment1,Q); (* Berechnung von drei *)
- Schnittkraft (Ort+dH,Moment2,Q); (* *)
- Schnittkraft (Ort+2*dH,Moment3,Q); (* Stuetzordinaten *)
- Simpson := dH/3 *
- (Moment1 + 4*Moment2 + Moment3); (* SIMPSON'sche Regel *)
- END; (* simpson *)
-
-
- BEGIN (* Durchbiegung *)
- Momentenflaeche := 0; Haelfte := 0;
- deltaH := Feldlaenge / 20; (* Festlegung der Genauigkeit *)
- FOR i:=0 TO 9 DO (* Integration der Momentenflaeche *)
- Momentenflaeche := Momentenflaeche + Simpson(2*i*deltaH,deltaH);
- dummy := Feldlaenge / 2; step := 1;
- REPEAT (* Suche nach dem Ort der Resultierenden der M-flaeche *)
- deltaH := dummy / 10; Haelfte := 0;
- FOR i:=0 TO 4 DO Haelfte := Haelfte + Simpson(2*i*deltaH,deltaH);
- IF Haelfte>Momentenflaeche/2 THEN BEGIN
- dummy := dummy - step;
- step := step/10;
- END; (* if *)
- dummy := dummy + step; (* bis ausreichende Ge- *)
- UNTIL ABS(Haelfte-Momentenflaeche/2) < 0.01; (* nauigkeit erreicht ist*)
- Resultort := ROUND(dummy*100)/100; (* runde auf zwei Stellen genau *)
- MomAufA := (Feldlaenge-Resultort)/Feldlaenge * Momentenflaeche;
- Summe := MomAufA * Resultort; deltaH := Resultort / 10;
- FOR i:=0 TO 4 DO
- Summe := Summe - Simpson(2*i*deltaH,deltaH)
- *(Resultort-(2*i+1)*deltaH);
- Durchbiegung := Summe;
- END; (* durchbiegung *)
-
- (*--------------------------------------------------------------------------*)
-
- PROCEDURE Ausgabe;
-
- BEGIN
- CLRSCR;
- WRITELN ('Bemessung als Stahltraeger');
- WRITELN ('==========================');
- WRITELN;
- WRITE ('Stahlguete : St-');
- CASE Stahlguete OF
- 1 : WRITELN ('37');
- 2 : WRITELN ('52');
- END; (* case *)
- WRITELN ('erforderliches Traegheitsmoment = ',erfI:7:0,' cm4');
- WRITELN ('bei einer maximalen Duchbiegung von l /',d:4,' = ',
- DeltaSoll*100:5:2,' cm');
- WRITELN ('erforderliches Widerstandsmoment = ',erfW:7:0,' cm3');
- WRITELN ('bei einer maximalen Spannung Sigma = ',
- SigmaMax [Stahlguete]:5:2,' kN/cm2');
- END; (* ausgabe *)
-
-
- BEGIN (* stahlbemessung *)
- Eingabe (Deltasoll,d,Stahlguete);
- erfI := Durchbiegung / Emodul / DeltaSoll * 1E8; (* Einheit : [cm4] *)
- erfW := Maxmoment * 100 / SigmaMax [Stahlguete]; (* Einheit : [cm3] *)
- Ausgabe;
- END; (* stahlbemessung *)
-
- (*--------------------------------------------------------------------------*)
- (* Ermittelt bei Vorgabe einer Teilung die notwendigen Laengs- und Schub-
- bewehrungen, und gibt sie als Stahlflaechen aus. *)
-
- PROCEDURE BetonBemessung;
-
- TYPE BetonArt = (B15,B25,B35,B45,B55); (* erlaubte Betongueten *)
- Error = (M,Q,ok); (* moegliche Fehler bei der Bemessung *)
- Test = SET OF Error; (* zur Abfangung der Fehler *)
- String3 = STRING[3];
-
- VAR Betonguete : BetonArt;
- Erfolg1,Erfolg2 : Error;
- Kontrolle : Test;
- Schubbereich : String3;
- nochnicht : BOOLEAN;
- Hoehe, (* Hoehe des Querschnitts *)
- statHoehe, (* statische Hoehe des Querschnitts *)
- Breite, (* Breite des Querschnitts *)
- vorhKz,vorhKs, (* Hilfswerte zur Bemessung *)
- AsM, (* Stahlflaeche der Laengsbewehrung *)
- AsQ, (* Stahlflaeche der Querbewehrung *)
- step, (* Schrittweite bei der Bemessung *)
- maxTau, (* vorhandene Schubspannung *)
- Tau, (* entsprechend dem Schubbereich abgeminderte Schubspannung *)
- Moment,Querkraft, (* Schnittreaktionen *)
- Ort, (* Bemessungsort *)
- Abstand : REAL;
- i,Teilung : INTEGER;
-
- (*------------------------------------------------------------------------*)
-
- PROCEDURE Eingabe;
-
- VAR help : INTEGER;
-
- BEGIN
- REPEAT
- WRITE ('Wahl der Betonguete : 1=B15,2=B25,..,5=B55 : ');
- READLN (help);
- UNTIL help IN [1..5];
- Betonguete := BetonArt (help);
- WRITELN;
- WRITE ('Rechteckquerschnitt : Eingabe der Hoehe [cm] : ');
- READLN (Hoehe);
- WRITE (' und der Breite [cm] : ');
- READLN (Breite);
- WRITE ('Abstand der Bewehrungsachse vom unteren Rand [cm] : ');
- READLN (Abstand);
- statHoehe := Hoehe - Abstand;
- WRITELN;
- WRITE ('Teilung : ');
- READLN (Teilung);
- END; (* eingabe *)
-
- (*------------------------------------------------------------------------*)
- (* Ermittelt die Beiwerte Ks und Kz fuer die Laengsbewehrung *)
-
- PROCEDURE BemessungM (Moment : REAL; VAR Ks,Kz : REAL; VAR Fehler : Error);
-
- CONST (* Tabelle der Kh - Werte *)
- KhTAB : ARRAY[1..5,1..13] OF REAL =
- ( (9.09,5.49,4.14,3.33,2.98,2.75,2.60,2.51,2.46,2.40,2.34,2.28,2.22),
- (7.04,4.25,3.21,2.58,2.31,2.13,2.01,1.94,1.90,1.86,1.81,1.77,1.72),
- (6.14,3.71,2.80,2.25,2.01,1.86,1.75,1.69,1.66,1.62,1.58,1.54,1.50),
- (5.67,3.43,2.58,2.08,1.86,1.72,1.62,1.56,1.53,1.50,1.46,1.42,1.38),
- (5.38,3.25,2.45,1.97,1.76,1.63,1.54,1.48,1.45,1.42,1.38,1.35,1.31) );
- (* Tabelle der Ks - Werte *)
- KsTAB : ARRAY[1..13] OF REAL =
- (3.6,3.7,3.8,3.9,4.0,4.1,4.1,4.2,4.2,4.3,4.4,4.4,4.5);
- (* Tabelle der Kz - Werte *)
- KzTAB : ARRAY[1..13] OF REAL =
- (0.97,0.95,0.93,0.90,0.88,0.87,0.85,0.84,0.83,0.82,0.81,0.79,0.78);
-
- VAR vorhKh : REAL; (* berechneter Kh - Wert *)
- i : INTEGER; (* Zaehler *)
-
- BEGIN
- Fehler := ok; Ks := 0; Kz := 1;
- vorhKh := statHoehe / SQRT (Moment / Breite * 100); (* berechne Kh *)
- IF vorhKh < KhTAB [ORD(Betonguete),13] THEN
- Fehler := M (* wenn zu gross dann erkenne Fehler *)
- ELSE BEGIN
- FOR i:=1 TO 12 DO IF vorhKh < KhTAB [ORD(Betonguete),i] THEN BEGIN
- Ks := KsTAB [i+1]; (* sonst ermittle zugehoerigen *)
- Kz := KzTAB [i+1]; (* Ks- und Kz-Wert *)
- END; (* for *)
- END; (* else *)
- END; (* bemessungm *)
-
- (*-------------------------------------------------------------------------*)
- (* Ermittelt die Schubspannung, den Schubbereich und die abgeminderte
- Schubspannung, aus der die notwendige Schubbewehrung berechnet wird. *)
-
- PROCEDURE BemessungQ (Querkraft,Kz : REAL; VAR mT,T : REAL;
- VAR Bereich : string3;
- VAR Fehler : Error);
-
- CONST (* Tabellen der Schubbereichsgrenzen *)
- T012 : ARRAY [1..5] OF REAL = (0.050,0.075,0.100,0.110,0.125);
- T02 : ARRAY [1..5] OF REAL = (0.120,0.180,0.240,0.270,0.300);
- T03 : ARRAY [1..5] OF REAL = (0.200,0.300,0.400,0.450,0.500);
-
- BEGIN
- Fehler := ok;
- IF mT > T03 [ORD(Betonguete)] THEN
- Fehler := Q; (* erkenne Fehler *)
- mT := Querkraft / Breite / Kz / statHoehe; (* berechne Schubspannung *)
- IF mT <= T012 [ORD(Betonguete)] THEN BEGIN (* Schubbreich I *)
- Bereich := 'I';
- T := 0.4 * mT;
- END; (* if *)
- IF (T012 [ORD(Betonguete)] < mT)
- AND (mT <= T02 [ORD(Betonguete)]) THEN BEGIN (* Schubbreich II *)
- Bereich := 'II';
- T := mT*mT/T02[ORD(Betonguete)];
- IF T < 0.4*mT THEN
- T := 0.4*mT;
- END; (* if *)
- IF (T02 [ORD(Betonguete)] < mT)
- AND (mT <= T03 [ORD(Betonguete)]) THEN BEGIN (* Schubbreich III *)
- Bereich := 'III';
- T := mT;
- END; (* if *)
- END; (* bemessungq *)
-
-
- (*------------------------------------------------------------------------*)
-
- PROCEDURE Ausdruck (Fehler1,Fehler2 : Error);
-
- BEGIN
- IF i=0 THEN BEGIN
- CLRSCR;
- WRITELN ('Bemessung als Stahlbetontraeger');
- WRITELN ('===============================');
- WRITELN;
- WRITELN ('Materialgueten : Stahl: BSt 500 S');
- WRITELN (' Beton: B ',CHR(ORD(Betonguete)+48)
- ,'5');
- WRITELN ('Querschnittswerte d/b/h: ',Hoehe:6:2,'/',Breite:6:2,
- '/',statHoehe:6:2,' cm');
- WRITELN;
- WRITELN (' x Moment As-unten Querkraft tau 0 Schub- ',
- ' tau As-Buegel');
- WRITELN (' m kNm cm2 kN MN/m2 bereich',
- ' MN/m2 cm2/m');
- WRITELN;
- END; (* if *)
- IF (Fehler1 = ok) AND (Fehler2 = ok) THEN
- WRITELN (Ort:5:2,Moment:10:2,AsM:9:2,Querkraft:13:2,10*maxTau:8:3,
- Schubbereich:5,10*Tau:9:3,AsQ:10:2);
- IF Fehler1 = M THEN
- WRITELN (Ort:5:2,Moment:10:2,' *******',Querkraft:13:2,' *********',
- '*********************');
- IF Fehler2 = Q THEN
- WRITELN (Ort:5:2,Moment:10:2,AsM:9:2,Querkraft:13:2,' *************',
- '*****************');
- END; (* ausdruck *)
-
-
- BEGIN (* betonbemessung *)
- CLRSCR;
- REPEAT
- Eingabe;
- Kontrolle := []; (* loesche Fehler *)
- step := Feldlaenge / Teilung; (* berechne Schrittweite *)
- nochnicht := TRUE;
- FOR i:=0 TO Teilung+1 DO BEGIN
- Ort := i * step; (* berechne Bemessungsort *)
- IF (Ort > OrtMaxMoment) AND nochnicht THEN BEGIN
- (* bemesse auch fuer die Stelle des maximalen Momentes *)
- nochnicht := FALSE;
- i := i - 1;
- Ort := OrtMaxmoment;
- END; (* if *)
- Schnittkraft (Ort,Moment,Querkraft); (* berechne M und Q *)
- IF Moment <= 0 THEN BEGIN (* fange Fall: Moment kleiner Null ab *)
- AsM := 0; vorhKz := 1;
- END (* then *)
- ELSE BEGIN (* sonst bemesse Moment *)
- BemessungM (Moment,vorhKs,vorhKz,Erfolg1);
- AsM := vorhKs * Moment / statHoehe;
- Kontrolle := Kontrolle + [Erfolg1];
- END; (* else *)
- BemessungQ (ABS(Querkraft),vorhKz,maxTau,Tau,Schubbereich,Erfolg2);
- AsQ := 1.4 * maxTau * Breite;
- Kontrolle := Kontrolle + [Erfolg2];
- Ausdruck (Erfolg1,Erfolg2);
- END; (* for *)
- IF M IN Kontrolle THEN BEGIN (* Fehler in der Momentenbemessung *)
- LOWVIDEO;
- WRITELN ('Bei der Momentenbemessung ist ein Fehler aufgetreten.');
- WRITELN ('Die Materialwerte und / oder die Querschnittswerte sind');
- WRITELN ('unterdimensioniert. ');
- WRITELN ('Bitte fuer eine erneute Berechnung neue Werte eingeben.');
- END; (* if *)
- IF Q IN Kontrolle THEN BEGIN (* Fehler in der Querkraftbemessung *)
- LOWVIDEO;
- WRITELN ('Bei der Querkraftbemessunung ist ein Fehler aufgetreten.');
- WRITELN ('Die Materialwerte und / oder die Querschnittswerte sind');
- WRITELN ('unterdimensioniert. ');
- WRITELN ('Bitte fuer eine erneute Berechnung neue Werte eingeben.');
- END; (* if *)
- NORMVIDEO;
- UNTIL Kontrolle = [ok]; (* Ende, wenn kein Fehler mehr vorliegt *)
- END; (* betonbemessung *)
-
- (**************************************************************************)
- (* Wahl der Art der Bemessung *)
-
- PROCEDURE Bemessung;
-
- VAR Wahl : CHAR;
-
- BEGIN
- WRITELN;
- WRITELN ('Bemessung als : S - Stahltraeger');
- WRITELN (' B - Stahlbetontraeger');
- WRITELN (' X - keine Bemessung');
- WRITELN;
- WRITE (' Ihre Wahl :');
- REPEAT
- GOTOXY(18,9); READ (Wahl);
- UNTIL Wahl IN ['s','S','b','B','x','X'];
- CASE Wahl OF
- 's','S' : StahlBemessung;
- 'b','B' : BetonBemessung;
- END; (* case *)
- END; (* bemessung *)
-
- (*--------------------------------------------------------------------------*)
-
- PROCEDURE Ausgabe;
-
- BEGIN
- CLRSCR;
- WRITELN ('Auflager A (links) = ',Auflagerlinks:8:2,' kN');
- WRITELN ('Auflager B (rechts) = ',Auflagerrechts:8:2,' kN');
- WRITELN ('maximales Moment = ',MaxMoment:8:2,' kNm ',
- ' bei x = ',OrtMaxMoment:5:2,' m');
- END; (* ausgabe *)
-