| 1 | within ;
|
|---|
| 2 | package FlexBeamPackage "FEM exported package"
|
|---|
| 3 |
|
|---|
| 4 | model FlexBeam
|
|---|
| 5 | import SI = Modelica.SIunits;
|
|---|
| 6 | import Cv = Modelica.SIunits.Conversions;
|
|---|
| 7 | import Modelica.Math.*;
|
|---|
| 8 | parameter Integer N = 2 "Number of elements";
|
|---|
| 9 | parameter Integer M = 3 * N;
|
|---|
| 10 | parameter Real q_start[M] = zeros(M) "Initialization||Initial deformation";
|
|---|
| 11 | parameter Real dq_start[M] = zeros(M)
|
|---|
| 12 | "Initialization||Initial velocity of deformation";
|
|---|
| 13 | parameter SI.Length L "Beam Length";
|
|---|
| 14 | parameter SI.Density rho "Material Volume Density";
|
|---|
| 15 | parameter SI.Area A "Cross sectional area";
|
|---|
| 16 | parameter Real d "Damping coefficient";
|
|---|
| 17 | parameter SI.ModulusOfElasticity E "Material Youngs modulus";
|
|---|
| 18 | parameter SI.SecondMomentOfArea J "Cross sectional inertia";
|
|---|
| 19 | parameter Boolean ClampedFree = true
|
|---|
| 20 | "if true Clamped-Free else simply supported model";
|
|---|
| 21 | parameter Boolean CircularSection = true
|
|---|
| 22 | "if true the beam has circular section";
|
|---|
| 23 | parameter Modelica.Mechanics.MultiBody.Types.Color ColorBeam = {128, 0, 0}
|
|---|
| 24 | "|3D Graphics|| Beam color ";
|
|---|
| 25 | Modelica.Mechanics.MultiBody.Interfaces.Frame_a FrameA annotation(Placement(transformation(extent = {{-116, -12}, {-84, 20}}, rotation = 0)));
|
|---|
| 26 | Modelica.Mechanics.MultiBody.Interfaces.Frame_b FrameB annotation(Placement(transformation(extent = {{84, -12}, {116, 20}}, rotation = 0)));
|
|---|
| 27 | Modelica.Mechanics.MultiBody.Frames.Orientation R_rel;
|
|---|
| 28 | Real q[M](start = q_start,fixed=true) "Elastic coordinates";
|
|---|
| 29 | Real dq[M](start = dq_start,fixed=true) "Elastic velocities";
|
|---|
| 30 | Real ddq[M] "Elastic accelerations";
|
|---|
| 31 | Real h_w_r[3, 1];
|
|---|
| 32 | Real h_w_theta[3, 1];
|
|---|
| 33 | Real h_w_f[M, 1];
|
|---|
| 34 | Real h_e_r[3, 1];
|
|---|
| 35 | Real h_e_theta[3, 1];
|
|---|
| 36 | Real h_e_f[M, 1];
|
|---|
| 37 | Real ra_w[3];
|
|---|
| 38 | Real r_cm_w[3];
|
|---|
| 39 | Real va_a[3];
|
|---|
| 40 | Real v_0a[3];
|
|---|
| 41 | Real aa_a[3];
|
|---|
| 42 | Real wa_a[3];
|
|---|
| 43 | Real za_a[3];
|
|---|
| 44 | Real fa[3];
|
|---|
| 45 | Real taua[3];
|
|---|
| 46 | Real rb_w[3];
|
|---|
| 47 | Real fb[3];
|
|---|
| 48 | Real taub[3];
|
|---|
| 49 | Real fb_a[3];
|
|---|
| 50 | Real taub_a[3];
|
|---|
| 51 | //terms for energy calculations
|
|---|
| 52 | Real MassMat[M + 6, M + 6];
|
|---|
| 53 | Real coords[M + 6];
|
|---|
| 54 | Real KinEnergy;
|
|---|
| 55 | Real PotEnergy;
|
|---|
| 56 | Real TotalEnergy;
|
|---|
| 57 | parameter Real m = rho * A * L;
|
|---|
| 58 | parameter Real r0b[3] = {L, 0, 0};
|
|---|
| 59 | parameter Real Cm[3] = {L / 2, 0, 0};
|
|---|
| 60 | final parameter Real h = L / N;
|
|---|
| 61 | final parameter Real KffEl[6, 6] = E * [A / h, 0, 0, -A / h, 0, 0; 0, 12 * J / h ^ 3, 6 * J / h ^ 2, 0, -12 * J / h ^ 3, 6 * J / h ^ 2; 0, 6 * J / h ^ 2, 4 * J / h, 0, -6 * J / h ^ 2, 2 * J / h; -A / h, 0, 0, A / h, 0, 0; 0, -12 * J / h ^ 3, -6 * J / h ^ 2, 0, 12 * J / h ^ 3, -6 * J / h ^ 2; 0, 6 * J / h ^ 2, 2 * J / h, 0, -6 * J / h ^ 2, 4 * J / h];
|
|---|
| 62 | final parameter Real SbarEl[3, 6] = m / N / 12 * [6, 0, 0, 6, 0, 0; 0, 6, h, 0, 6, -h; 0, 0, 0, 0, 0, 0];
|
|---|
| 63 | final parameter Real Sbar11[6, 6] = m / N * [1 / 3, 0, 0, 1 / 6, 0, 0; 0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0; 1 / 6, 0, 0, 1 / 3, 0, 0; 0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0];
|
|---|
| 64 | final parameter Real Sbar12[6, 6] = transpose(Sbar21);
|
|---|
| 65 | final parameter Real Sbar13[6, 6] = zeros(6, 6);
|
|---|
| 66 | final parameter Real Sbar21[6, 6] = m / N * [0, 0, 0, 0, 0, 0; 7 / 20, 0, 0, 3 / 20, 0, 0; 1 / 20 * h, 0, 0, 1 / 30 * h, 0, 0; 0, 0, 0, 0, 0, 0; 3 / 20, 0, 0, 7 / 20, 0, 0; -1 / 30 * h, 0, 0, -1 / 20 * h, 0, 0];
|
|---|
| 67 | final parameter Real Sbar22[6, 6] = m / N * [0, 0, 0, 0, 0, 0; 0, 13 / 35, 11 / 210 * h, 0, 9 / 70, -13 / 420 * h; 0, 11 / 210 * h, 1 / 105 * h ^ 2, 0, 13 / 420 * h, -1 / 140 * h ^ 2; 0, 0, 0, 0, 0, 0; 0, 9 / 70, 13 / 420 * h, 0, 13 / 35, -11 / 210 * h; 0, -13 / 420 * h, -1 / 140 * h ^ 2, 0, -11 / 210 * h, 1 / 105 * h ^ 2];
|
|---|
| 68 | final parameter Real Sbar23[6, 6] = zeros(6, 6);
|
|---|
| 69 | final parameter Real Sbar31[6, 6] = zeros(6, 6);
|
|---|
| 70 | final parameter Real Sbar32[6, 6] = zeros(6, 6);
|
|---|
| 71 | final parameter Real Sbar33[6, 6] = zeros(6, 6);
|
|---|
| 72 | final parameter Real Ibar11[1, 6] = h * m / N * [1 / 6, 0, 0, 1 / 3, 0, 0]
|
|---|
| 73 | annotation(Evaluate=true);
|
|---|
| 74 | final parameter Real Ibar11adj[1, 6] = h * m / N * [1 / 2, 0, 0, 1 / 2, 0, 0] annotation(Evaluate=true);
|
|---|
| 75 | final parameter Real Ibar12[1, 6] = h * m / N * [0, 3 / 20, 1 / 30 * h, 0, 7 / 20, -1 / 20 * h] annotation(Evaluate=true);
|
|---|
| 76 | final parameter Real Ibar12adj[1, 6] = h * m / N * [0, 1 / 2, 1 / 12 * h, 0, 1 / 2, -1 / 12 * h] annotation(Evaluate=true);
|
|---|
| 77 | final parameter Real Ibar13[1, 6] = zeros(1, 6);
|
|---|
| 78 | final parameter Real Ibar21[1, 6] = zeros(1, 6);
|
|---|
| 79 | final parameter Real Ibar22[1, 6] = zeros(1, 6);
|
|---|
| 80 | final parameter Real Ibar23[1, 6] = zeros(1, 6);
|
|---|
| 81 | final parameter Real Ibar31[1, 6] = zeros(1, 6);
|
|---|
| 82 | final parameter Real Ibar32[1, 6] = zeros(1, 6);
|
|---|
| 83 | final parameter Real Ibar33[1, 6] = zeros(1, 6);
|
|---|
| 84 | final parameter Real S0[3, 6] = [1, 0, 0, 0, 0, 0; 0, 1, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0];
|
|---|
| 85 | final parameter Real dS0[3, 6] = [0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0; 0, 0, 1, 0, 0, 0];
|
|---|
| 86 | final parameter Real S1[3, 6] = [0, 0, 0, 1, 0, 0; 0, 0, 0, 0, 1, 0; 0, 0, 0, 0, 0, 0];
|
|---|
| 87 | final parameter Real S2[3, 6] = [0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 1, 0; 0, 0, 0, 0, 0, 0];
|
|---|
| 88 | final parameter Real dS1[3, 6] = [0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 0; 0, 0, 0, 0, 0, 1];
|
|---|
| 89 | SI.Acceleration g_0[3] "Gravity acc. vector resolved in world frame";
|
|---|
| 90 | //matrici di connettivita
|
|---|
| 91 | Real B[N, 6, M];
|
|---|
| 92 | //matrice di forma del connettore B, � variabile perch� dipende dalle condizioni al contorno dell'asta
|
|---|
| 93 | Real Sb[3, M];
|
|---|
| 94 | Real SbCap[3, M];
|
|---|
| 95 | Real Ke[M, M];
|
|---|
| 96 | Real Me[M, M];
|
|---|
| 97 | Real Ct[M, 3];
|
|---|
| 98 | Real Sbar[3, M];
|
|---|
| 99 | Real Stbar[3];
|
|---|
| 100 | Real mDcbar[3];
|
|---|
| 101 | Real mDcbartilde[3, 3];
|
|---|
| 102 | Real Ithf_bar[3, M];
|
|---|
| 103 | Real Cr[M, 3];
|
|---|
| 104 | Real Ithth_bar[3, 3];
|
|---|
| 105 | Real Ithth_bar11;
|
|---|
| 106 | Real Ithth_bar22;
|
|---|
| 107 | Real Ithth_bar33;
|
|---|
| 108 | Real Ithth_bar12;
|
|---|
| 109 | Real Jbar[3, 3];
|
|---|
| 110 | //per il calcolo di h_w_f
|
|---|
| 111 | Real F[6, 6];
|
|---|
| 112 | Real H[6, 6];
|
|---|
| 113 | Real wCross[3, 3];
|
|---|
| 114 | Real wCross2[3, 3];
|
|---|
| 115 | protected
|
|---|
| 116 | outer Modelica.Mechanics.MultiBody.World world;
|
|---|
| 117 | /* 3D graphics variables */
|
|---|
| 118 | type vec3D = Real[3];
|
|---|
| 119 | vec3D r0shape[N];
|
|---|
| 120 | vec3D rrelshape[N];
|
|---|
| 121 | Real Lshape[N];
|
|---|
| 122 | parameter Real pi = Modelica.Constants.pi;
|
|---|
| 123 | Modelica.Mechanics.MultiBody.Visualizers.Advanced.Shape Segment[N](r_shape = r0shape, length = Lshape, each width = if CircularSection then 2 * sqrt(A / pi) else A / (0.4 * sqrt(A)), each height = if CircularSection then 2 * sqrt(A / pi) else 0.4 * sqrt(A), lengthDirection = rrelshape, each widthDirection = {0, 0, 1}, each shapeType = if CircularSection then "cylinder" else "box", each color = ColorBeam, each extra = 0.0, each r = FrameA.r_0, each R = FrameA.R);
|
|---|
| 124 | equation
|
|---|
| 125 | Connections.branch(FrameA.R, FrameB.R);
|
|---|
| 126 | assert(cardinality(FrameA) > 0 or cardinality(FrameB) > 0, "Frames both disconnected, object floating!");
|
|---|
| 127 | //connectivity matrices calculus, in beam model connectivity matrixes determinate boundary conditions
|
|---|
| 128 | if ClampedFree then
|
|---|
| 129 | B[1, :, :] = [zeros(3, 3 * N); identity(3), zeros(3, 3 * (N - 1))];
|
|---|
| 130 | B[N, :, :] = [zeros(6, 3 * (N - 2)), identity(6)];
|
|---|
| 131 | else
|
|---|
| 132 | B[1, :, :] = [zeros(2, 3 * N); [zeros(1, 3 * (N - 1)), [0, 1, 0]]; identity(3), zeros(3, 3 * (N - 1))];
|
|---|
| 133 | B[N, :, :] = [zeros(3, 3 * (N - 2)), identity(3), zeros(3, 3); zeros(3, 3 * (N - 2)), zeros(3, 3), [1, 0, 0; 0, 0, 0; 0, 0, 1]];
|
|---|
| 134 | end if;
|
|---|
| 135 | for i in 2:N - 1 loop
|
|---|
| 136 | B[i, :, :] = [zeros(6, 3 * (i - 2)), identity(6), zeros(6, 3 * (N - i))];
|
|---|
| 137 | end for;
|
|---|
| 138 | /* calcolo dei componenti della matrice di inerzia */
|
|---|
| 139 | /*-----------------------*/
|
|---|
| 140 | //Sbar in modello beam equivale a Ct trasposto in FEM
|
|---|
| 141 | Sbar = sum(SbarEl * B[i, :, :] for i in 1:N);
|
|---|
| 142 | Ct = transpose(Sbar);
|
|---|
| 143 | //Stbar equivale a mDcbar
|
|---|
| 144 | Stbar = m * Cm + Sbar * q;
|
|---|
| 145 | mDcbar = Stbar;
|
|---|
| 146 | mDcbartilde = skew(mDcbar);
|
|---|
| 147 | //Ithf_bar equivale a Cr trasposto
|
|---|
| 148 | Ithf_bar = [zeros(2, 3 * N); sum((Ibar12 + (i - 1) * Ibar12adj + transpose(matrix(q)) * transpose(B[i, :, :]) * (Sbar12 - Sbar21)) * B[i, :, :] for i in 1:N)];
|
|---|
| 149 | Cr = transpose(Ithf_bar);
|
|---|
| 150 | //Ithth equivale a Jbar
|
|---|
| 151 | //ATTENZIONE per calcolare Ithth_bar � necessario calcolare molte quantit�
|
|---|
| 152 | Ithth_bar11 = scalar(transpose(matrix(q)) * sum(transpose(B[i, :, :]) * Sbar22 * B[i, :, :] for i in 1:N) * q);
|
|---|
| 153 | Ithth_bar22 = m * L ^ 2 / 3 + scalar(2 * sum((Ibar11 + (i - 1) * Ibar11adj) * B[i, :, :] for i in 1:N) * q + transpose(matrix(q)) * sum(transpose(B[i, :, :]) * Sbar11 * B[i, :, :] for i in 1:N) * q);
|
|---|
| 154 | Ithth_bar33 = Ithth_bar11 + Ithth_bar22;
|
|---|
| 155 | Ithth_bar12 = scalar((-sum((Ibar12 + (i - 1) * Ibar12adj) * B[i, :, :] for i in 1:N) * q) - transpose(matrix(q)) * sum(transpose(B[i, :, :]) * Sbar21 * B[i, :, :] for i in 1:N) * q);
|
|---|
| 156 | Ithth_bar = [Ithth_bar11, Ithth_bar12, 0; Ithth_bar12, Ithth_bar22, 0; 0, 0, Ithth_bar33];
|
|---|
| 157 | Jbar = Ithth_bar;
|
|---|
| 158 | //credo di poterlo calcolare come der(Jbar)
|
|---|
| 159 | //mff equivale a Me
|
|---|
| 160 | Me = sum(transpose(B[i, :, :]) * (Sbar11 + Sbar22) * B[i, :, :] for i in 1:N);
|
|---|
| 161 | //kff equivale a Ke
|
|---|
| 162 | Ke = sum(transpose(B[i, :, :]) * KffEl * B[i, :, :] for i in 1:N);
|
|---|
| 163 | r_cm_w = FrameA.r_0 + Modelica.Mechanics.MultiBody.Frames.resolve1(FrameA.R, Cm);
|
|---|
| 164 | g_0 = Modelica.Mechanics.MultiBody.Frames.resolve2(FrameA.R, world.gravityAcceleration(r_cm_w));
|
|---|
| 165 | ra_w = FrameA.r_0;
|
|---|
| 166 | va_a = Modelica.Mechanics.MultiBody.Frames.resolve2(FrameA.R, der(FrameA.r_0));
|
|---|
| 167 | v_0a = der(ra_w);
|
|---|
| 168 | aa_a = Modelica.Mechanics.MultiBody.Frames.resolve2(FrameA.R, der(v_0a));
|
|---|
| 169 | wa_a = Modelica.Mechanics.MultiBody.Frames.angularVelocity2(FrameA.R);
|
|---|
| 170 | za_a = der(wa_a);
|
|---|
| 171 | fa = FrameA.f;
|
|---|
| 172 | taua = FrameA.t;
|
|---|
| 173 | rb_w = FrameB.r_0;
|
|---|
| 174 | fb = FrameB.f;
|
|---|
| 175 | taub = FrameB.t;
|
|---|
| 176 | //Relation between A and B DYNAMIC positions, must write equations for translation AND rotation
|
|---|
| 177 | //translation
|
|---|
| 178 | rb_w = ra_w + Modelica.Mechanics.MultiBody.Frames.resolve1(FrameA.R, r0b + Sb * q);
|
|---|
| 179 | //Devo definire l'orientamento di B rispetto al world frame
|
|---|
| 180 | R_rel = Modelica.Mechanics.MultiBody.Frames.planarRotation({0, 0, 1}, q[M], dq[M]);
|
|---|
| 181 | FrameB.R = Modelica.Mechanics.MultiBody.Frames.absoluteRotation(FrameA.R, R_rel);
|
|---|
| 182 | //forces and torques on B expressed in A
|
|---|
| 183 | fb_a = Modelica.Mechanics.MultiBody.Frames.resolve1(R_rel, fb);
|
|---|
| 184 | taub_a = Modelica.Mechanics.MultiBody.Frames.resolve1(R_rel, taub);
|
|---|
| 185 | dq = der(q);
|
|---|
| 186 | ddq = der(dq);
|
|---|
| 187 | //coriolis terms calculus
|
|---|
| 188 | h_w_r = matrix((-cross(wa_a, cross(wa_a, mDcbar))) - 2 * cross(wa_a, transpose(Ct) * dq));
|
|---|
| 189 | h_w_theta = matrix((-cross(wa_a, Jbar * wa_a)) - der(Jbar) * wa_a - cross(wa_a, transpose(Cr) * dq));
|
|---|
| 190 | wCross = skew(wa_a);
|
|---|
| 191 | wCross2 = wCross * wCross;
|
|---|
| 192 | F = Sbar11 * wCross2[1, 1] + Sbar12 * wCross2[2, 1] + Sbar21 * wCross2[1, 2] + Sbar22 * wCross2[2, 2];
|
|---|
| 193 | H = Sbar11 * wCross[1, 1] + Sbar12 * wCross[2, 1] + Sbar21 * wCross[1, 2] + Sbar22 * wCross[2, 2];
|
|---|
| 194 | h_w_f = -sum(transpose(B[i, :, :]) * transpose([(Ibar11 + (i - 1) * Ibar11adj) * wCross2[1, 1] + (Ibar12 + (i - 1) * Ibar12adj) * wCross2[2, 1]]) + matrix(transpose(B[i, :, :]) * F * B[i, :, :] * q) + matrix(2 * (transpose(B[i, :, :]) * H * B[i, :, :]) * dq) for i in 1:N);
|
|---|
| 195 | h_e_r = matrix(fa + fb_a);
|
|---|
| 196 | h_e_theta = matrix(taua + taub_a + cross(r0b + Sb * q, fb_a));
|
|---|
| 197 | transpose(h_e_f) = transpose(matrix(fb_a)) * S1 * B[N, :, :] + transpose(matrix(taub_a)) * dS1 * B[N, :, :];
|
|---|
| 198 | Sb = S1 * B[N, :, :];
|
|---|
| 199 | SbCap = dS1 * B[N, :, :];
|
|---|
| 200 | /*---Dynamic equations---*/
|
|---|
| 201 | //rigid traslation
|
|---|
| 202 | [m * identity(3), transpose(mDcbartilde), transpose(Ct)] * [aa_a - g_0; za_a; ddq] = h_w_r + h_e_r;
|
|---|
| 203 | //rigid rotation
|
|---|
| 204 | [mDcbartilde, Jbar, transpose(Cr)] * [aa_a - g_0; za_a; ddq] = h_w_theta + h_e_theta;
|
|---|
| 205 | //flexible modal dynamic equations
|
|---|
| 206 | [Ct, Cr, Me] * [aa_a - g_0; za_a; ddq] = h_w_f + h_e_f - matrix(Ke * q) - matrix(d / 100 * (Me + 0.5 * Ke) * dq);
|
|---|
| 207 | //Conservation of Energy
|
|---|
| 208 | MassMat = [m * identity(3), transpose(mDcbartilde), transpose(Ct); mDcbartilde, Jbar, transpose(Cr); Ct, Cr, Me];
|
|---|
| 209 | coords = vector([va_a; wa_a; dq]);
|
|---|
| 210 | KinEnergy = scalar(0.5 * transpose(matrix(coords)) * MassMat * matrix(coords));
|
|---|
| 211 | PotEnergy = world.g * m * r_cm_w[2] + 0.5 * scalar(transpose(matrix(q)) * Ke * matrix(q));
|
|---|
| 212 | TotalEnergy = KinEnergy + PotEnergy;
|
|---|
| 213 | /* 3D Visual Representation */
|
|---|
| 214 | r0shape[1, :] = {0, 0, 0};
|
|---|
| 215 | rrelshape[1, :] = r0shape[2, :];
|
|---|
| 216 | Lshape[1] = sqrt(rrelshape[1, :] * rrelshape[1, :]);
|
|---|
| 217 | r0shape[N, :] = {L * (N - 1) / N, 0, 0} + S1 * B[N - 1, :, :] * q;
|
|---|
| 218 | rrelshape[N, :] = {L, 0, 0} + S1 * B[N, :, :] * q - r0shape[N, :];
|
|---|
| 219 | Lshape[N] = sqrt(rrelshape[N, :] * rrelshape[N, :]);
|
|---|
| 220 | for i in 2:N - 1 loop
|
|---|
| 221 | r0shape[i, :] = {L * (i - 1) / N, 0, 0} + S1 * B[i - 1, :, :] * q;
|
|---|
| 222 | rrelshape[i, :] = r0shape[i + 1, :] - r0shape[i, :];
|
|---|
| 223 | Lshape[i] = sqrt(rrelshape[i, :] * rrelshape[i, :]);
|
|---|
| 224 | end for;
|
|---|
| 225 | annotation(Diagram(graphics), Icon(graphics={ Text(extent = {{-118, 102}, {114, 38}}, lineColor = {0, 0, 255}, fillColor = {0, 0, 255},
|
|---|
| 226 | fillPattern = FillPattern.Solid, textString = "%name"), Rectangle(extent = {{-98, 46}, {96, -40}}, lineColor = {0, 0, 255}, fillColor = {0, 0, 255},
|
|---|
| 227 | fillPattern = FillPattern.Solid)}), DymolaStoredErrors);
|
|---|
| 228 | end FlexBeam;
|
|---|
| 229 |
|
|---|
| 230 |
|
|---|
| 231 |
|
|---|
| 232 |
|
|---|
| 233 | package ExamplesBeam
|
|---|
| 234 | model FreeVibrationBeam
|
|---|
| 235 |
|
|---|
| 236 | FlexBeamPackage.FlexBeam fEMBeam(
|
|---|
| 237 | CircularSection=true,
|
|---|
| 238 | L=2,
|
|---|
| 239 | N=2,
|
|---|
| 240 | rho=2767,
|
|---|
| 241 | A=0.01*0.01*3.1415,
|
|---|
| 242 | E=7.2e10,
|
|---|
| 243 | d=1,
|
|---|
| 244 | J=Modelica.Constants.pi*0.01^4/4) annotation (Placement(transformation(
|
|---|
| 245 | extent={{-8,-18},{12,2}}, rotation=0)));
|
|---|
| 246 | inner Modelica.Mechanics.MultiBody.World world annotation(Placement(transformation(extent = {{-74, -18}, {-54, 2}}, rotation = 0)));
|
|---|
| 247 | Modelica.Mechanics.MultiBody.Parts.Body body(sphereDiameter = 0.1, sphereColor = {255, 0, 0}, m = 0,
|
|---|
| 248 | r_CM={0,0,0}) annotation(Placement(transformation(extent = {{50, -18}, {70, 2}}, rotation = 0)));
|
|---|
| 249 | equation
|
|---|
| 250 | connect(world.frame_b, fEMBeam.FrameA) annotation(Line(points = {{-54, -8}, {-28, -8}, {-28, -7.6}, {-8, -7.6}}, color = {95, 95, 95}, thickness = 0.5));
|
|---|
| 251 | connect(fEMBeam.FrameB, body.frame_a) annotation(Line(points = {{12, -7.6}, {32, -7.6}, {32, -8}, {50, -8}}, color = {95, 95, 95}, thickness = 0.5));
|
|---|
| 252 | annotation(Diagram(graphics));
|
|---|
| 253 | end FreeVibrationBeam;
|
|---|
| 254 |
|
|---|
| 255 | model PendulumBeam
|
|---|
| 256 | parameter Real b_length=0.4;
|
|---|
| 257 | parameter Integer N=2;
|
|---|
| 258 | parameter Integer M=3*10;
|
|---|
| 259 | inner Modelica.Mechanics.MultiBody.World world annotation(Placement(transformation(extent = {{-92, 8}, {-72, 28}}, rotation = 0)));
|
|---|
| 260 | FlexBeamPackage.FlexBeam fEMBeam(
|
|---|
| 261 | CircularSection=true,
|
|---|
| 262 | N=10,
|
|---|
| 263 | L=b_length,
|
|---|
| 264 | A=0.0239*0.0239*Modelica.Constants.pi,
|
|---|
| 265 | d=0,
|
|---|
| 266 | E=4.7124e7,
|
|---|
| 267 | J=Modelica.Constants.pi*0.0239^4/4,
|
|---|
| 268 | rho=5.54e3,
|
|---|
| 269 | q_start=zeros(M),
|
|---|
| 270 | dq_start=zeros(M)) annotation (Placement(transformation(extent={{6,4},{
|
|---|
| 271 | 32,30}}, rotation=0)));
|
|---|
| 272 | Modelica.Mechanics.MultiBody.Joints.Revolute revolute(phi(fixed=true, start=0),
|
|---|
| 273 | w(fixed=true, start=0)) annotation(Placement(transformation(extent = {{-42, 10}, {-22, 30}})));
|
|---|
| 274 | Modelica.Mechanics.MultiBody.Parts.Body body(m = 0, I_11 = 0, I_22 = 0, I_33 = 0,
|
|---|
| 275 | r_CM={b_length,0,0}) annotation(Placement(transformation(extent = {{66, 8}, {86, 28}})));
|
|---|
| 276 | equation
|
|---|
| 277 | connect(world.frame_b, revolute.frame_a) annotation(Line(points = {{-72, 18}, {-58, 18}, {-58, 20}, {-42, 20}}, color = {95, 95, 95}, thickness = 0.5, smooth = Smooth.None));
|
|---|
| 278 | connect(revolute.frame_b, fEMBeam.FrameA) annotation(Line(points = {{-22, 20}, {-8, 20}, {-8, 17.52}, {6, 17.52}}, color = {95, 95, 95}, thickness = 0.5, smooth = Smooth.None));
|
|---|
| 279 | connect(fEMBeam.FrameB, body.frame_a) annotation(Line(points = {{32, 17.52}, {50, 17.52}, {50, 18}, {66, 18}}, color = {95, 95, 95}, thickness = 0.5, smooth = Smooth.None));
|
|---|
| 280 | annotation(Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},
|
|---|
| 281 | {100,100}}),
|
|---|
| 282 | graphics));
|
|---|
| 283 | end PendulumBeam;
|
|---|
| 284 |
|
|---|
| 285 |
|
|---|
| 286 | end ExamplesBeam;
|
|---|
| 287 |
|
|---|
| 288 | annotation(uses(Modelica(version = "3.2.1")));
|
|---|
| 289 | end FlexBeamPackage;
|
|---|