Gelöste Aufgaben/StaB

Aus numpedia
Version vom 27. November 2024, 08:06 Uhr von Mechaniker (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


Aufgabenstellung

Wir untersuchen die Belastung eines ebenen Stabwerks. Die Stäbe haben wie skizziert die Länge bzw. ℓ/2. Die Struktur wird mit der Kraft F belastet.


Stabwerk mit fest verbundenen Stäben.

Gesucht ist ein Vergleich zwischen der klassischen Stabwerkstheorie und einer Herangehensweise, bei der wir eine feste Verbindung der Stäbe in den Knoten ansetzten. Grundlage des Modells ist die analytische Lösung der Felddifferentialgleichungen.


Modellierung in der klassischen Stabwerkstheorie - nur mit Stab-Längskraften

In der klassischen Stabwerkstheorie (rechts) werden nur die Stab-Längskräfte berücksichtigt – das Ersatzmodell bildet die Verbindungen der Stäbe durch Gelenke ab. Trotzdem wurden und werden die Stäbe in der praktischen Ausführung mit Knotenblechen vernietet oder verschweißt – von Gelenk also keine Spur.

Wir untersuchen, welchen Einfluss diese Vereinfachung auf die berechneten Belastungen der Struktur hat. Hier sollen die beiden Modell-Varianten – also die Modellierung mit Gelenken einerseits und Knotenblechen andererseits – miteinander verglichen werden. Gesucht ist die analytische Lösung der beiden Randwertprobleme und ein Vergleich.

Lösung mit Maxima

Wir nutzen das Computer-Algebra-System Maxima zur Lösung. Das macht Sinn, weil wir eine große Anzahl von Gleichungen verwalten müssen.

Declarations

Knoten- und Stab-Nummern

Wir beginnen mit der Einführung von passenden Bezeichnungen für unser System:  

In Knoten I und II sind gelenkige Lager. Stäbe 1,2 und 3 sind im Knoten III verbunden, Stäbe 2 und 4 im Knoten II und Stäbe 3 und 4 im Knoten IV.

Lokales Koordinatensystem - hier für Stab "k"

Jeder Stab – hier Stab k mit den Knoten I und J – trägt sein eigenes xk, zk – Koordinatensystem und ist im Winkel αk zur Horizontalen eingebaut. Hier sind α2 = 60° und α3 = -60° sowie α1 = 0 und α4 = 0.

Als Systemparameter je Stab definieren wir vier Stablängen und die jeweils identischen Steifigkeiten für Dehnung und Biegung. Der Querschnitt der Stäbe sei ein doppeltsymmetrisches Profil (s.u.) mit der Querschnittsfläche und dem Flächenmoment .

Für das Referenzmodell, das unser System als Stabwerk mit gelenkigen Verbindungen erfasst, wählen wir die Stabkräfte Si als Zugkräfte und schreiben folgende Gleichgewichtsbedingungen an:

Die Stabkräfte dazu sind

.

Im Vergleich zur Berechnung der Stabkräfte mit dem Referenzmodell ist unser Randwertproblem mit fest verbundenen Stäben deutlich komplizierter. Es besteht aus den Gleichgewichtsbedingung im Feld - den Felddifferentialgleichungen - und den Randbedingungen. Diese schreiben wir im Folgenden auf:


/*******************************************************/
/* MAXIMA script                                       */
/* version: wxMaxima 21.05.2                           */
/* author: Andreas Baumgart                            */
/* last updated: 2024-09-20                            */
/* ref: NMM, Labor 1, dimensionsbehaftete              */
/*                           Vorgehensweise            */
/* description: finds the analytic solution for        */
/*              lab problem #1                         */
/*******************************************************/

assume(A>0,H>h,h>0, a>0);

/*-----------------------------------------------------*/
/* Euler-Matrix                                        */
DR(α) := matrix([cos(α),sin(α),0],[-sin(α),cos(α),0],[0, 0, 1]);
/* ... and return                                      */
/* Note: the inverse of the matrix is its transposed   */
DI(α):= trigsimp(invert(DR(α)));

/* for each rod, define
            * angle α, and
	    * node-IDs
   at its start and end                                */
index : [[ 0  ,[1,3]],  /* rod #1*/
         [α[2],[2,3]],  /* rod #2*/
	 [α[3],[3,4]],  /* rod #3*/
	 [ 0  ,[2,4]]   /* rod #4*/];

/*-----------------------------------------------------*/
/* system parameters                                   */
params: [ℓ[1]=ℓ[0]/2, ℓ[2]=ℓ[0], ℓ[3]=ℓ[0], ℓ[4]=ℓ[0],
         α[2]=%pi/3,α[3]= -%pi/3,
	 EA = E*A, EI = E*I, I=η*A^2/12];

moreParams: [A = a^2, ℓ[0]= 100*a];

/*****************************************************/
/* Stabwerk-Lösung                                   */
nodalequ : [-S[1]-S[2]*cos(α[2])+S[3]*cos(α[2])        = 0, /* node I  */
                 -S[2]*sin(α[2])-S[3]*sin(α[2])        = 0, /* node II */
	                        -S[3]*cos(α[2]) - S[4] = 0, /* node III*/
                      	        -S[3]*sin(α[2])     +F = 0  /* node IV */];
rodForces: solve(nodalequ,[S[1],S[2],S[3],S[4]])[1];
rodForces: subst(params,rodForces);




Die Lösung der Felddifferentialgleichung

Wenn wir die Stäbe in den Knotenpunkten fest verbinden, wird das System statisch überbestimmt – wir müssen die Verformungen des Systems berücksichtigen. Durch die geometrische Anordnung der Stäbe sind die Längs- und Querverformung der vier Stäbe miteinander gekoppelt. Wir müssen also zwei Differentialbeziehungen berücksichtigen:

  • in Stab-Längsrichtung mit und
  • in Stab-Querrichtung mit .

Für Stab 3 sieht dies folgendermaßen aus:

Lokale Koordinaten der Verformung u(x)und w(x).

Die Differentialbeziehungen des Gleichgewichts in u und w sowie deren Lösungen für unsere Stäbe sind

Wenn die allgemeinen Lösungen hier etwas ungewohnt aussehen: wir haben die Faktoren a sowie die dimensionslosen Koordinaten eingeführt - damit alle Integrationskonstanten dimensionslos sind.

Für den Kippwinkel des Balkens nutzen wir zusätzlich

.

Die Schnittkräfte im Stab ergeben sich dann aus


Diese Schnittgrößen jeweils am positiven und negativen Schnittufer sind hier dargestellt:

Schnittlasten am Stab.

/*----------------------------------------------------*/
/* analytic solution for EBB "i"                      */
/* C[i,j] chosen so that dim(C[i,j]) = 1              */
ebb: [diff(w[i](x),x,4)=q[i,0]/EI,
           w[i](x) = sum(a/j!*C[i,j]*(x/ℓ[i])^j,j,0,3),
	   u[i](x) = sum(a/j!*D[i,j]*(x/ℓ[i])^j,j,0,1)];
/* funnctions for w, φ, M, Q and N                    */
fcts: [w[i](x) =    diff(subst(ebb,w[i](x)),x,0),
       φ[i](x) =    diff(subst(ebb,w[i](x)),x,1),
       M[i](x) =-EI*diff(subst(ebb,w[i](x)),x,2),
       Q[i](x) =-EI*diff(subst(ebb,w[i](x)),x,3),
       u[i](x) =    diff(subst(ebb,u[i](x)),x,0),
       N[i](x) = EA*diff(subst(ebb,u[i](x)),x,1)];
       
/*-----------------------------------------------------*/
/* replace forces and moments at rod-ends with         */
/* expressions from the generic solution               */
internalForces : expand(flatten(makelist([/* beam "i" */
            N[j]( 0  ) = subst([i=j,x= 0  ], subst(fcts,N[i](x))),
            N[j](ℓ[j]) = subst([i=j,x=ℓ[j]], subst(fcts,N[i](x))),
            Q[j]( 0  ) = subst([i=j,x= 0  ], subst(fcts,Q[i](x))),
            Q[j](ℓ[j]) = subst([i=j,x=ℓ[j]], subst(fcts,Q[i](x))),
            M[j]( 0  ) = subst([i=j,x= 0  ], subst(fcts,M[i](x))),
            M[j](ℓ[j]) = subst([i=j,x=ℓ[j]], subst(fcts,M[i](x)))],j,1,4)));
nodalForces: flatten(makelist([N[j]( 0  ),N[j](ℓ[j]),Q[j]( 0  ),Q[j](ℓ[j]),M[j]( 0  ),M[j](ℓ[j])],j,1,4));




Randbedingungen: Kinematische Verträglichkeit der Knotenverschiebungen

In den Knoten hat jetzt jeder Stab seine eigenen, lokalen Koordinaten der Verschiebung

,

wobei i den Knoten und k den Stab indexiert. Die Verdrehung des Knotens nennen wir

.

Die Verdrehungen der Knoten an den Enden sind in unserem 2D-System natürlich für jeden Stab gleich - wir führen den Index k hier nur ein, damit wir eine gleiche Nomenklatur für alle Koordinaten haben.

Referenz- oder "0"-Koordinatensystem.

Damit diese Verschiebungen (und Verdrehungen) miteinander verträglich sind, führen wir ein Referenzsystem „0“ mit den entsprechenden Koordinaten der Auslenkung in horizontale und vertikale Richtung ein:

Umrechnen zwischen den lokalen (Stab-) Koordinaten und dem globalen ("0"-) Koordinantensystem.

Diese verschiedenen Koordinatensysteme müssen wir ineinander umrechnen. Das können wir anschaulich tun – wie hier im Beispiel für Knoten III und Stab 3 und finden

Oder wir wählen einen formalen Ansatz mit der Euer-Transformationsmatrix

,

mit der wir die obige kinematische Beziehung aus

gewinnen. Die gesuchten kinematischen Beziehungen erhalten wir für 4 Stäbe an ihren jeweiligen Enden zu

Alle Gleichungen zu den Drehwinkeln sind - im besten Sinne des Wortes - trivial. Wir nehmen sie hier trotzdem mit, um die Systematik nicht zu brechen.


/*-----------------------------------------------------*/
/* abbreviations for displacements at beams' ends      */

nodalDisp: [];
for rod:1 thru length(index) do
   (nodes: index[rod][2],
    nodalDisp: append(nodalDisp,makelist(
                       [U[nodes[j+1],rod] = subst([i=rod,x=j*ℓ[rod]], subst(fcts,u[i](x))),
 		        W[nodes[j+1],rod] = subst([i=rod,x=j*ℓ[rod]], subst(fcts,w[i](x))),
		        Φ[nodes[j+1],rod] = subst([i=rod,x=j*ℓ[rod]], subst(fcts,φ[i](x)))], j,0,1)))$
nodalDisp: flatten(nodalDisp);

localCoords: makelist(lhs(nodalDisp[i]),i,1,length(nodalDisp));

/*-----------------------------------------------------*/
/* define kinematic relations between local and globale displacements */

kinematics:[];
for rod:1 thru length(index) do
   (nodes: index[rod][2],
    α[k]: index[rod][1],
    kinematics: append(kinematics,makelist(
                       matrix([U[nodes[i],rod]],[W[nodes[i],rod]],[Φ[nodes[i],rod]])=DI(α[k]).matrix([U[nodes[i],0]],[W[nodes[i],0]],[Φ[nodes[i],0]]),
		                 i,1,2)))$
kinematics: flatten(makelist(makelist(lhs(kinematics[i])[j][1]=rhs(kinematics[i])[j][1],i,1,length(kinematics)),j,1,3));

globalCoords: flatten(makelist([U[i,0],W[i,0],Φ[i,0]],i,1,4));



              

Randbedingungen: die kinematischen Zwangsbedingungen an den Lagern

Zusätzlich zur kinematischen Verträglichkeit müssen wir auch noch die Randbedingungen in Knoten I und II anschrieben:


/*-----------------------------------------------------*/
/* define boundary conditions at nodes I and II        */
boundaryConds:[U[1,0] = 0,
	       W[1,0] = 0,
	       U[2,0] = 0,
	       W[2,0] = 0];




Randbedingungen: Kräfte und Momente in den Knoten

Es fehlen noch die Gleichgewichtsbedingungen für die Knotenpunkte. Wir erhalten für jeden Knoten – außer denen der Lager – zwei Kraft- und ein Momentengleichgewicht. Für die Lager-Knoten können wir nur die Momentengleichgewichte anschreiben – ohne neue Unbekannte für die Lager-Reaktionskräfte einzufügen.

Kräftegleichgewicht am Knoten.

Die Schnittbilder je Knoten erhalten wir, indem wir die Schnittgrößen an den entsprechenden Schnittufern anzeichnen und dann die Gleichgewichtsbedingungen je Knoten ansetzen.

Auch hier arbeiten wir der Eulerschen Drehmatrix, um diese Arbeit zu formalisieren.

Für Knoten III:

Für Knoten IV:

Für Knoten I und II gewinnen wir jeweils nur die Momentenbilanzen, da wir die Lagerreaktionskräfte nicht als Unbekannte einführen wollen:

Der gesuchte Satz an Gleichgewichtsbedingungen für die vier Knoten lautet dann


/*-----------------------------------------------------*/
/* define equlibrium conditions at all nodes           */
/* (except foces in I and II where the bearings are  ) */
/* ((employ Euler-Matrix for transformations))         */
equilib:   [/* node 1 */
            [[M[1](0)]] = [[0]],
	    /* node 2 */
            [[ M[2](0)
	      +M[4](0)]] = [[0]],
	    /* node 3 */
             -           matrix([N[1](ℓ[1])],[Q[1](ℓ[1])],[M[1](ℓ[1])])
	     - DR(α[2]).matrix([N[2](ℓ[2])],[Q[2](ℓ[2])],[M[2](ℓ[2])])
	     + DR(α[3]).matrix([N[3]( 0  )],[Q[3]( 0  )],[M[3]( 0  )]) = matrix([0],[0],[0]),
	    /* node 4 */
             - DR(α[3]).matrix([N[3](ℓ[3])],[Q[3](ℓ[3])],[M[3](ℓ[3])])
	               - matrix([N[4](ℓ[4])],[Q[4](ℓ[4])],[M[4](ℓ[4])]) = matrix([0],[-F],[0])
	    ];
equilib: flatten(makelist(makelist(lhs( equilib [k])[l][1]=rhs( equilib [k])[l][1],l,1,length(lhs( equilib [k]))),k,1,length( equilib )));




Solving

Wir wählen hier zur Lösung der linearen Gleichungen einen Ansatz, bei dem wir die lokalen Ansatzfunktionen für die Schnittkräfte und die Verschiebungen schon in die Gleichungen der kinematischen Verträglichkeit und des Gleichgewichts einsetzten.

So erhalten wir z.B. aus

die Gleichung

.

Und aus der Momentenbilanz für Knoten IV erhalten wir entsprechend

             

Durch das Einsetzen der Lösungen für uk(xk) und wk(xk) haben wir als Unbekannte nur noch je Stab die 6 Integrationskonstanten Cij, Dij sowie je Knoten die Knotenverschiebungen Koordinaten Uk0, Wk0 und Φk0, also 36 Unbekannte.

Für das lineare Gleichungssystem

ist dann

Für deren Lösung stehen 4 Randbedingungen, 8 Gleichgewichtsbedingungen und 24 kinematische Verträglichkeitsbeziehungen – also 36 Gleichungen - zur Verfügung. Diese Gleichungen müssen sukzessive in die Matrix A und die rechte Seite des Gleichungssystems eingearbeitet werden.

Maxima liefert dann die Lösungen für unsere 36 Unbekannten.

Wir erhalten z.B. für die Normalkraft in Stab 3 den Ausdruck

der für η=0 (die Biegesteifigkeit ist Null)

.

liefert – also die Lösung für das vereinfachte Stabwerk.


/*-----------------------------------------------------*/
/* solving ......                                      */
sol: append(internalForces,subst(params,kinematics));

equs: append(boundaryConds,
             subst(internalForces,equilib),
	     subst(subst(params,kinematics),nodalDisp));

X: flatten([globalCoords,
            makelist(makelist(C[i,j],j,0,3),i,1,4),
            makelist(makelist(D[i,j],j,0,1),i,1,4)]);

/* ... in matrix-notation ......                       */
ACM: augcoefmatrix(equs,X)$
print(submatrix(ACM,37),"*",transpose(X),"=",-col(ACM,37))$

sol: ratsimp(solve(expand(subst(params,equs)),X)[1]);

/**********************************/
beamForces: ratsimp(makelist(nodalForces[i]=ratsimp(subst(params,subst(sol,subst(internalForces,nodalForces[i])))),i,1,length(nodalForces)));




Postprocessing

Wir tragen für alle Stäbe das Verhältnis Ni/Si auf:

Verhältnis der Stab-Längekräfte zwischen "verschweißten" Stäben und gelenkig verbundenen Stäben.

Wenn die Biegesteifigkeit der Stäbe klein wird, konvergiert unsere Lösung der Normalkräfte also gegen die einfache Stabwerkslösung.

Bleibt noch zu klären, ob die Spannungen durch die Biegung im Querschnitt ebenfalls vernachlässigbar klein bleiben.

Doppeltsymmetrische Querschnitte der Stäbe mit H > h und A=H2-h2.

Dazu benötigen wir die Ausdrücke für

,

die wir in die Gleichungen für die Normalspannungen im Querschnitt durch Normalkraft und Biegemoment einsetzten. Für die grafische Darstellung nutzen wir die Referenzspannung

und berechnen damit die Spannungsverhältnisse

mit

mit dem Widerstandsmoment

.

Das angefügte Maxima-Skript analysiert diese Biegespannungen - im Vergleich zu den Normalspannungen. Auch hier gibt es keine spektakulären Änderungen zur Kernaussage: solange wir ein klassisches Stabwerk mit schlanken Stäben untersuchen, ist die Approximation durch Gelenke sicher zulässig.

Die Auslenkungen der Knoten für η=1 sind

.

/*-----------------------------------------------------*/
/* post-processing                                     */

collect: flatten(subst(rodForces,subst(beamForces,makelist([N[i](0)/S[i]],i,1,4))));
collect: ratsimp(subst(moreParams, collect));

plot2d(collect,[η,0,5], [xlabel, "ηeta = EI/EA^2 ->"], [ylabel, "N[i]/S[i] ->"],[legend, "#1","#2","#3","#4"]);
/*******************************************************/

collect: flatten(subst(rodForces,subst(beamForces,makelist([M[i](0),M[i](ℓ[i])]/(F*a),i,1,4))));
collect: ratsimp(subst(moreParams, collect));

plot2d(collect,[η,0,5], [xlabel, "eta = EI/EA^2 ->"], [ylabel, "M[i]/(h*F) ->"],[legend, "#1, x=0", "#1, x=l","#2, x=0", "#2, x=l","#3, x=0", "#3, x=l","#4, x=0", "#4, x=l"]);

/* critical stresses for both models                   */
critStress: makelist([S[i]/A, [N[i](0)/A, M[i](0)/W, M[i](ℓ[i])/W]],i,1,4);

crossSection: [A= H^2-h^2, A=a^2, I= 1/12*(H^4-h^4), W=I/(H/2)];
tmp: η = subst(crossSection,I/(A^2/12));
tmp: append([tmp], solve([crossSection[1],crossSection[2], tmp],[A,H,h])[1]);
critStress: ratsimp(subst(tmp,subst(moreParams,subst(params,subst(crossSection[4],subst(sol,subst(internalForces,subst(rodForces,critStress))))))));
critStress: flatten(ratsimp(makelist(critStress[i][2]/critStress[i][1],i,1,4)));

plot2d(critStress,[η,0,5], [xlabel, "eta = I/A^2 ->"], [ylabel, "s[i]/s_ref ->"],[legend, "#1, N", "#1, M@x=0", "#1, M@x=l/2","#2, N", "#2, M@x=0", "#2, M@x=l","#3, N","#3, M@x=0", "#3, M@x=l","#4, N","#4, x=0", "#4, x=l"]);$





Links

Literature

  • ...