| 1 | "
|
|---|
| 2 | function Complex \"Automatically generated record constructor for Complex\"
|
|---|
| 3 | input Real re;
|
|---|
| 4 | input Real im;
|
|---|
| 5 | output Complex res;
|
|---|
| 6 | end Complex;
|
|---|
| 7 |
|
|---|
| 8 | function Complex.'*'.multiply \"Inline before index reduction\" \"Multiply two complex numbers\"
|
|---|
| 9 | input Complex c1 \"Complex number 1\";
|
|---|
| 10 | input Complex c2 \"Complex number 2\";
|
|---|
| 11 | output Complex c3 \"= c1*c2\";
|
|---|
| 12 | algorithm
|
|---|
| 13 | c3 := Complex(c1.re * c2.re - c1.im * c2.im, c1.re * c2.im + c1.im * c2.re);
|
|---|
| 14 | end Complex.'*'.multiply;
|
|---|
| 15 |
|
|---|
| 16 | function Complex.'*'.scalarProduct \"Inline before index reduction\" \"Scalar product c1*c2 of two complex vectors\"
|
|---|
| 17 | input Complex[:] c1 \"Vector of Complex numbers 1\";
|
|---|
| 18 | input Complex[size(c1, 1)] c2 \"Vector of Complex numbers 2\";
|
|---|
| 19 | output Complex c3 \"= c1*c2\";
|
|---|
| 20 | algorithm
|
|---|
| 21 | c3 := Complex(0.0, 0.0);
|
|---|
| 22 | for i in 1:size(c1, 1) loop
|
|---|
| 23 | c3 := Complex.'+'(c3, Complex.'*'.multiply(c1[i], c2[i]));
|
|---|
| 24 | end for;
|
|---|
| 25 | end Complex.'*'.scalarProduct;
|
|---|
| 26 |
|
|---|
| 27 | function Complex.'+' \"Inline before index reduction\" \"Add two complex numbers\"
|
|---|
| 28 | input Complex c1 \"Complex number 1\";
|
|---|
| 29 | input Complex c2 \"Complex number 2\";
|
|---|
| 30 | output Complex c3 \"= c1 + c2\";
|
|---|
| 31 | algorithm
|
|---|
| 32 | c3 := Complex(c1.re + c2.re, c1.im + c2.im);
|
|---|
| 33 | end Complex.'+';
|
|---|
| 34 |
|
|---|
| 35 | function Complex.'-'.negate \"Inline before index reduction\" \"Unary minus (multiply complex number by -1)\"
|
|---|
| 36 | input Complex c1 \"Complex number\";
|
|---|
| 37 | output Complex c2 \"= -c1\";
|
|---|
| 38 | algorithm
|
|---|
| 39 | c2 := Complex(-c1.re, -c1.im);
|
|---|
| 40 | end Complex.'-'.negate;
|
|---|
| 41 |
|
|---|
| 42 | function Complex.'-'.subtract \"Inline before index reduction\" \"Subtract two complex numbers\"
|
|---|
| 43 | input Complex c1 \"Complex number 1\";
|
|---|
| 44 | input Complex c2 \"Complex number 2\";
|
|---|
| 45 | output Complex c3 \"= c1 - c2\";
|
|---|
| 46 | algorithm
|
|---|
| 47 | c3 := Complex(c1.re - c2.re, c1.im - c2.im);
|
|---|
| 48 | end Complex.'-'.subtract;
|
|---|
| 49 |
|
|---|
| 50 | function Complex.'/' \"Inline before index reduction\" \"Divide two complex numbers\"
|
|---|
| 51 | input Complex c1 \"Complex number 1\";
|
|---|
| 52 | input Complex c2 \"Complex number 2\";
|
|---|
| 53 | output Complex c3 \"= c1/c2\";
|
|---|
| 54 | algorithm
|
|---|
| 55 | c3 := Complex((c1.re * c2.re + c1.im * c2.im) / (c2.re ^ 2.0 + c2.im ^ 2.0), (c1.im * c2.re - c1.re * c2.im) / (c2.re ^ 2.0 + c2.im ^ 2.0));
|
|---|
| 56 | end Complex.'/';
|
|---|
| 57 |
|
|---|
| 58 | function Complex.'constructor'.fromReal \"Inline before index reduction\" \"Construct Complex from Real\"
|
|---|
| 59 | input Real re \"Real part of complex number\";
|
|---|
| 60 | input Real im = 0.0 \"Imaginary part of complex number\";
|
|---|
| 61 | output Complex result = Complex(re, im) \"Complex number\";
|
|---|
| 62 | end Complex.'constructor'.fromReal;
|
|---|
| 63 |
|
|---|
| 64 | function ElPower.Electric.Basics.abs
|
|---|
| 65 | input Real u;
|
|---|
| 66 | output Real y;
|
|---|
| 67 | algorithm
|
|---|
| 68 | y := if noEvent(u >= 0.0) then u else -u;
|
|---|
| 69 | end ElPower.Electric.Basics.abs;
|
|---|
| 70 |
|
|---|
| 71 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.getDerTableValue \"Derivative of interpolated 1-dim. table defined by matrix\"
|
|---|
| 72 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 73 | input Integer icol;
|
|---|
| 74 | input Real u;
|
|---|
| 75 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 76 | input Real der_u;
|
|---|
| 77 | output Real der_y;
|
|---|
| 78 |
|
|---|
| 79 | external \"C\" der_y = ModelicaStandardTables_CombiTable1D_getDerValue(tableID, icol, u, der_u);
|
|---|
| 80 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.getDerTableValue;
|
|---|
| 81 |
|
|---|
| 82 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.getTableValue \"Interpolate 1-dim. table defined by matrix\"
|
|---|
| 83 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 84 | input Integer icol;
|
|---|
| 85 | input Real u;
|
|---|
| 86 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 87 | output Real y;
|
|---|
| 88 |
|
|---|
| 89 | external \"C\" y = ModelicaStandardTables_CombiTable1D_getValue(tableID, icol, u);
|
|---|
| 90 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.getTableValue;
|
|---|
| 91 |
|
|---|
| 92 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.readTableData \"Read table data from ASCII text or MATLAB MAT-file\"
|
|---|
| 93 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 94 | input Boolean forceRead = false \"= true: Force reading of table data; = false: Only read, if not yet read.\";
|
|---|
| 95 | input Boolean verboseRead \"= true: Print info message; = false: No info message\";
|
|---|
| 96 | output Real readSuccess \"Table read success\";
|
|---|
| 97 |
|
|---|
| 98 | external \"C\" readSuccess = ModelicaStandardTables_CombiTable1D_read(tableID, forceRead, verboseRead);
|
|---|
| 99 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.readTableData;
|
|---|
| 100 |
|
|---|
| 101 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.getDerTableValue \"Derivative of interpolated 1-dim. table defined by matrix\"
|
|---|
| 102 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 103 | input Integer icol;
|
|---|
| 104 | input Real u;
|
|---|
| 105 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 106 | input Real der_u;
|
|---|
| 107 | output Real der_y;
|
|---|
| 108 |
|
|---|
| 109 | external \"C\" der_y = ModelicaStandardTables_CombiTable1D_getDerValue(tableID, icol, u, der_u);
|
|---|
| 110 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.getDerTableValue;
|
|---|
| 111 |
|
|---|
| 112 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.getTableValue \"Interpolate 1-dim. table defined by matrix\"
|
|---|
| 113 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 114 | input Integer icol;
|
|---|
| 115 | input Real u;
|
|---|
| 116 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 117 | output Real y;
|
|---|
| 118 |
|
|---|
| 119 | external \"C\" y = ModelicaStandardTables_CombiTable1D_getValue(tableID, icol, u);
|
|---|
| 120 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.getTableValue;
|
|---|
| 121 |
|
|---|
| 122 | function Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.readTableData \"Read table data from ASCII text or MATLAB MAT-file\"
|
|---|
| 123 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 124 | input Boolean forceRead = false \"= true: Force reading of table data; = false: Only read, if not yet read.\";
|
|---|
| 125 | input Boolean verboseRead \"= true: Print info message; = false: No info message\";
|
|---|
| 126 | output Real readSuccess \"Table read success\";
|
|---|
| 127 |
|
|---|
| 128 | external \"C\" readSuccess = ModelicaStandardTables_CombiTable1D_read(tableID, forceRead, verboseRead);
|
|---|
| 129 | end Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.readTableData;
|
|---|
| 130 |
|
|---|
| 131 | function Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.getDerTableValue \"Derivative of interpolated 1-dim. table defined by matrix\"
|
|---|
| 132 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 133 | input Integer icol;
|
|---|
| 134 | input Real u;
|
|---|
| 135 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 136 | input Real der_u;
|
|---|
| 137 | output Real der_y;
|
|---|
| 138 |
|
|---|
| 139 | external \"C\" der_y = ModelicaStandardTables_CombiTable1D_getDerValue(tableID, icol, u, der_u);
|
|---|
| 140 | end Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.getDerTableValue;
|
|---|
| 141 |
|
|---|
| 142 | function Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.getTableValue \"Interpolate 1-dim. table defined by matrix\"
|
|---|
| 143 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 144 | input Integer icol;
|
|---|
| 145 | input Real u;
|
|---|
| 146 | input Real tableAvailable \"Dummy input to ensure correct sorting of function calls\";
|
|---|
| 147 | output Real y;
|
|---|
| 148 |
|
|---|
| 149 | external \"C\" y = ModelicaStandardTables_CombiTable1D_getValue(tableID, icol, u);
|
|---|
| 150 | end Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.getTableValue;
|
|---|
| 151 |
|
|---|
| 152 | function Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.readTableData \"Read table data from ASCII text or MATLAB MAT-file\"
|
|---|
| 153 | input Modelica.Blocks.Types.ExternalCombiTable1D tableID;
|
|---|
| 154 | input Boolean forceRead = false \"= true: Force reading of table data; = false: Only read, if not yet read.\";
|
|---|
| 155 | input Boolean verboseRead \"= true: Print info message; = false: No info message\";
|
|---|
| 156 | output Real readSuccess \"Table read success\";
|
|---|
| 157 |
|
|---|
| 158 | external \"C\" readSuccess = ModelicaStandardTables_CombiTable1D_read(tableID, forceRead, verboseRead);
|
|---|
| 159 | end Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.readTableData;
|
|---|
| 160 |
|
|---|
| 161 | function Modelica.Blocks.Types.ExternalCombiTable1D.constructor \"Initialize 1-dim. table defined by matrix\"
|
|---|
| 162 | input String tableName \"Table name\";
|
|---|
| 163 | input String fileName \"File name\";
|
|---|
| 164 | input Real[:, :] table;
|
|---|
| 165 | input Integer[:] columns;
|
|---|
| 166 | input enumeration(LinearSegments, ContinuousDerivative, ConstantSegments) smoothness;
|
|---|
| 167 | output Modelica.Blocks.Types.ExternalCombiTable1D externalCombiTable1D;
|
|---|
| 168 |
|
|---|
| 169 | external \"C\" externalCombiTable1D = ModelicaStandardTables_CombiTable1D_init(tableName, fileName, table, size(table, 1), size(table, 2), columns, size(columns, 1), smoothness);
|
|---|
| 170 | end Modelica.Blocks.Types.ExternalCombiTable1D.constructor;
|
|---|
| 171 |
|
|---|
| 172 | function Modelica.Blocks.Types.ExternalCombiTable1D.destructor \"Terminate 1-dim. table defined by matrix\"
|
|---|
| 173 | input Modelica.Blocks.Types.ExternalCombiTable1D externalCombiTable1D;
|
|---|
| 174 |
|
|---|
| 175 | external \"C\" ModelicaStandardTables_CombiTable1D_close(externalCombiTable1D);
|
|---|
| 176 | end Modelica.Blocks.Types.ExternalCombiTable1D.destructor;
|
|---|
| 177 |
|
|---|
| 178 | function Modelica.ComplexMath.'abs' \"Inline before index reduction\" \"Absolute value of complex number\"
|
|---|
| 179 | input Complex c \"Complex number\";
|
|---|
| 180 | output Real result \"= abs(c)\";
|
|---|
| 181 | algorithm
|
|---|
| 182 | result := (c.re ^ 2.0 + c.im ^ 2.0) ^ 0.5;
|
|---|
| 183 | end Modelica.ComplexMath.'abs';
|
|---|
| 184 |
|
|---|
| 185 | function Modelica.ComplexMath.arg \"Inline before index reduction\" \"Phase angle of complex number\"
|
|---|
| 186 | input Complex c \"Complex number\";
|
|---|
| 187 | input Real phi0(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") = 0.0 \"Phase angle phi shall be in the range: -pi < phi-phi0 < pi\";
|
|---|
| 188 | output Real phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"= phase angle of c\";
|
|---|
| 189 | algorithm
|
|---|
| 190 | phi := Modelica.Math.atan3(c.im, c.re, phi0);
|
|---|
| 191 | end Modelica.ComplexMath.arg;
|
|---|
| 192 |
|
|---|
| 193 | function Modelica.ComplexMath.conj \"Inline before index reduction\" \"Conjugate of complex number\"
|
|---|
| 194 | input Complex c1 \"Complex number\";
|
|---|
| 195 | output Complex c2 \"= c1.re - j*c1.im\";
|
|---|
| 196 | algorithm
|
|---|
| 197 | c2 := Complex(c1.re, -c1.im);
|
|---|
| 198 | end Modelica.ComplexMath.conj;
|
|---|
| 199 |
|
|---|
| 200 | function Modelica.ComplexMath.exp \"Inline before index reduction\" \"Exponential of complex number\"
|
|---|
| 201 | input Complex c1 \"Complex number\";
|
|---|
| 202 | output Complex c2 \"= exp(c1)\";
|
|---|
| 203 | algorithm
|
|---|
| 204 | c2 := Complex(exp(c1.re) * cos(c1.im), exp(c1.re) * sin(c1.im));
|
|---|
| 205 | end Modelica.ComplexMath.exp;
|
|---|
| 206 |
|
|---|
| 207 | function Modelica.ComplexMath.imag \"Inline before index reduction\" \"Imaginary part of complex number\"
|
|---|
| 208 | input Complex c \"Complex number\";
|
|---|
| 209 | output Real r \"= c.im\";
|
|---|
| 210 | algorithm
|
|---|
| 211 | r := c.im;
|
|---|
| 212 | end Modelica.ComplexMath.imag;
|
|---|
| 213 |
|
|---|
| 214 | function Modelica.ComplexMath.real \"Inline before index reduction\" \"Real part of complex number\"
|
|---|
| 215 | input Complex c \"Complex number\";
|
|---|
| 216 | output Real r \"= c.re\";
|
|---|
| 217 | algorithm
|
|---|
| 218 | r := c.re;
|
|---|
| 219 | end Modelica.ComplexMath.real;
|
|---|
| 220 |
|
|---|
| 221 | function Modelica.Math.atan3 \"Four quadrant inverse tangent (select solution that is closest to given angle y0)\"
|
|---|
| 222 | input Real u1;
|
|---|
| 223 | input Real u2;
|
|---|
| 224 | input Real y0(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") = 0.0 \"y shall be in the range: -pi < y-y0 <= pi\";
|
|---|
| 225 | output Real y(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\");
|
|---|
| 226 | protected constant Real pi = 3.141592653589793;
|
|---|
| 227 | protected Real w;
|
|---|
| 228 | protected constant Real pi2 = 6.283185307179586;
|
|---|
| 229 | algorithm
|
|---|
| 230 | w := atan2(u1, u2);
|
|---|
| 231 | if y0 == 0.0 then
|
|---|
| 232 | y := w;
|
|---|
| 233 | else
|
|---|
| 234 | y := w + 6.283185307179586 * /*Real*/(integer(0.5 + 0.1591549430918953 * (y0 - w)));
|
|---|
| 235 | end if;
|
|---|
| 236 | end Modelica.Math.atan3;
|
|---|
| 237 |
|
|---|
| 238 | function Modelica.Math.tempInterpol1 \"Temporary function for linear interpolation (will be removed)\"
|
|---|
| 239 | input Real u \"input value (first column of table)\";
|
|---|
| 240 | input Real[:, :] table \"table to be interpolated\";
|
|---|
| 241 | input Integer icol \"column of table to be interpolated\";
|
|---|
| 242 | output Real y \"interpolated input value (icol column of table)\";
|
|---|
| 243 | protected Integer i;
|
|---|
| 244 | protected Integer n \"number of rows of table\";
|
|---|
| 245 | protected Real u1;
|
|---|
| 246 | protected Real u2;
|
|---|
| 247 | protected Real y1;
|
|---|
| 248 | protected Real y2;
|
|---|
| 249 | algorithm
|
|---|
| 250 | n := size(table, 1);
|
|---|
| 251 | if n <= 1 then
|
|---|
| 252 | y := table[1,icol];
|
|---|
| 253 | else
|
|---|
| 254 | if u <= table[1,1] then
|
|---|
| 255 | i := 1;
|
|---|
| 256 | else
|
|---|
| 257 | i := 2;
|
|---|
| 258 | while i < n and u >= table[i,1] loop
|
|---|
| 259 | i := 1 + i;
|
|---|
| 260 | end while;
|
|---|
| 261 | i := -1 + i;
|
|---|
| 262 | end if;
|
|---|
| 263 | u1 := table[i,1];
|
|---|
| 264 | u2 := table[1 + i,1];
|
|---|
| 265 | y1 := table[i,icol];
|
|---|
| 266 | y2 := table[1 + i,icol];
|
|---|
| 267 | assert(u2 > u1, \"Table index must be increasing\");
|
|---|
| 268 | y := y1 + (y2 - y1) * (u - u1) / (u2 - u1);
|
|---|
| 269 | end if;
|
|---|
| 270 | end Modelica.Math.tempInterpol1;
|
|---|
| 271 |
|
|---|
| 272 | function Modelica.Math.tempInterpol1_der \"Temporary function for linear interpolation (will be removed)\"
|
|---|
| 273 | input Real u \"input value (first column of table)\";
|
|---|
| 274 | input Real[:, :] table \"table to be interpolated\";
|
|---|
| 275 | input Integer icol \"column of table to be interpolated\";
|
|---|
| 276 | input Real du;
|
|---|
| 277 | output Real dy \"interpolated input value (icol column of table)\";
|
|---|
| 278 | protected Integer i;
|
|---|
| 279 | protected Integer n \"number of rows of table\";
|
|---|
| 280 | protected Real u1;
|
|---|
| 281 | protected Real u2;
|
|---|
| 282 | protected Real y1;
|
|---|
| 283 | protected Real y2;
|
|---|
| 284 | algorithm
|
|---|
| 285 | n := size(table, 1);
|
|---|
| 286 | if n <= 1 then
|
|---|
| 287 | dy := 0.0;
|
|---|
| 288 | else
|
|---|
| 289 | if u <= table[1,1] then
|
|---|
| 290 | i := 1;
|
|---|
| 291 | else
|
|---|
| 292 | i := 2;
|
|---|
| 293 | while i < n and u >= table[i,1] loop
|
|---|
| 294 | i := 1 + i;
|
|---|
| 295 | end while;
|
|---|
| 296 | i := -1 + i;
|
|---|
| 297 | end if;
|
|---|
| 298 | u1 := table[i,1];
|
|---|
| 299 | u2 := table[1 + i,1];
|
|---|
| 300 | y1 := table[i,icol];
|
|---|
| 301 | y2 := table[1 + i,icol];
|
|---|
| 302 | assert(u2 > u1, \"Table index must be increasing\");
|
|---|
| 303 | dy := (y2 - y1) / (u2 - u1);
|
|---|
| 304 | end if;
|
|---|
| 305 | end Modelica.Math.tempInterpol1_der;
|
|---|
| 306 |
|
|---|
| 307 | function Modelica.SIunits.Conversions.to_deg \"Inline before index reduction\" \"Convert from radian to degree\"
|
|---|
| 308 | input Real radian(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"radian value\";
|
|---|
| 309 | output Real degree(quantity = \"Angle\", unit = \"deg\") \"degree value\";
|
|---|
| 310 | algorithm
|
|---|
| 311 | degree := 57.29577951308232 * radian;
|
|---|
| 312 | end Modelica.SIunits.Conversions.to_deg;
|
|---|
| 313 |
|
|---|
| 314 | function Modelica.Utilities.Strings.Advanced.skipWhiteSpace \"Scans white space\"
|
|---|
| 315 | input String string;
|
|---|
| 316 | input Integer startIndex(min = 1) = 1;
|
|---|
| 317 | output Integer nextIndex;
|
|---|
| 318 |
|
|---|
| 319 | external \"C\" nextIndex = ModelicaStrings_skipWhiteSpace(string, startIndex);
|
|---|
| 320 | end Modelica.Utilities.Strings.Advanced.skipWhiteSpace;
|
|---|
| 321 |
|
|---|
| 322 | function Modelica.Utilities.Strings.isEmpty \"Return true if a string is empty (has only white space characters)\"
|
|---|
| 323 | input String string;
|
|---|
| 324 | output Boolean result \"True, if string is empty\";
|
|---|
| 325 | protected Integer nextIndex;
|
|---|
| 326 | protected Integer len;
|
|---|
| 327 | algorithm
|
|---|
| 328 | nextIndex := Modelica.Utilities.Strings.Advanced.skipWhiteSpace(string, 1);
|
|---|
| 329 | len := Modelica.Utilities.Strings.length(string);
|
|---|
| 330 | if len < 1 or nextIndex > len then
|
|---|
| 331 | result := true;
|
|---|
| 332 | else
|
|---|
| 333 | result := false;
|
|---|
| 334 | end if;
|
|---|
| 335 | end Modelica.Utilities.Strings.isEmpty;
|
|---|
| 336 |
|
|---|
| 337 | function Modelica.Utilities.Strings.length \"Returns length of string\"
|
|---|
| 338 | input String string;
|
|---|
| 339 | output Integer result \"Number of characters of string\";
|
|---|
| 340 |
|
|---|
| 341 | external \"C\" result = ModelicaStrings_length(string);
|
|---|
| 342 | end Modelica.Utilities.Strings.length;
|
|---|
| 343 |
|
|---|
| 344 | class SwP3v04
|
|---|
| 345 | parameter Real load = 0.877;
|
|---|
| 346 | parameter Real yMaxi = 1.5;
|
|---|
| 347 | Real cycle;
|
|---|
| 348 | Real torque;
|
|---|
| 349 | Real torqueS;
|
|---|
| 350 | input Real dt(start = 0.0);
|
|---|
| 351 | Real meter.u.re \"Real part of complex number\";
|
|---|
| 352 | Real meter.u.im \"Imaginary part of complex number\";
|
|---|
| 353 | Real meter.i.re(start = 0.0) \"Real part of complex number\";
|
|---|
| 354 | Real meter.i.im(start = 0.0) \"Imaginary part of complex number\";
|
|---|
| 355 | Real meter.Pin1.i.re \"Real part of complex number\";
|
|---|
| 356 | Real meter.Pin1.i.im \"Imaginary part of complex number\";
|
|---|
| 357 | Real meter.Pin1.v.re \"Real part of complex number\";
|
|---|
| 358 | Real meter.Pin1.v.im \"Imaginary part of complex number\";
|
|---|
| 359 | Real meter.Pin2.i.re \"Real part of complex number\";
|
|---|
| 360 | Real meter.Pin2.i.im \"Imaginary part of complex number\";
|
|---|
| 361 | Real meter.Pin2.v.re \"Real part of complex number\";
|
|---|
| 362 | Real meter.Pin2.v.im \"Imaginary part of complex number\";
|
|---|
| 363 | Real meter.up.re \"Real part of complex number\";
|
|---|
| 364 | Real meter.up.im(start = 1.0) \"Imaginary part of complex number\";
|
|---|
| 365 | Real meter.Strom;
|
|---|
| 366 | Real meter.Spannung;
|
|---|
| 367 | Real meter.P;
|
|---|
| 368 | Real meter.Q;
|
|---|
| 369 | Real meter.S;
|
|---|
| 370 | Real meter.I.re \"Real part of complex number\";
|
|---|
| 371 | Real meter.I.im \"Imaginary part of complex number\";
|
|---|
| 372 | Real meter.strom \"Betrag Strom\";
|
|---|
| 373 | Real meter.spannung \"Betrag Spannung\";
|
|---|
| 374 | Real meter.p \"Wirkleistung\";
|
|---|
| 375 | Real meter.q \"Blindleistung\";
|
|---|
| 376 | Real meter.s \"Scheinleistung\";
|
|---|
| 377 | Real meter.sComplex.re \"Real part of complex number\";
|
|---|
| 378 | Real meter.sComplex.im \"Imaginary part of complex number\";
|
|---|
| 379 | Real meter.phiU \"Phasenwinkel Spannung U\";
|
|---|
| 380 | Real meter.i2t(start = 0.0, fixed = true) \"i2t Integral\";
|
|---|
| 381 | Real meter.energy(start = 0.0, fixed = true) \"u*i Integral\";
|
|---|
| 382 | Real meter.NULL.i.re \"Real part of complex number\";
|
|---|
| 383 | Real meter.NULL.i.im \"Imaginary part of complex number\";
|
|---|
| 384 | Real meter.NULL.v.re \"Real part of complex number\";
|
|---|
| 385 | Real meter.NULL.v.im \"Imaginary part of complex number\";
|
|---|
| 386 | Real InertiaT.flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 387 | Real InertiaT.flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 388 | Real InertiaT.flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 389 | Real InertiaT.flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 390 | parameter Real InertiaT.J(quantity = \"MomentOfInertia\", unit = \"kg.m2\", min = 0.0, start = 1.0) = 32.47 \"Moment of inertia\";
|
|---|
| 391 | parameter enumeration(never, avoid, default, prefer, always) InertiaT.stateSelect = StateSelect.default \"Priority to use phi and w as states\";
|
|---|
| 392 | Real InertiaT.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\", stateSelect = StateSelect.default) \"Absolute rotation angle of component\";
|
|---|
| 393 | Real InertiaT.w(quantity = \"AngularVelocity\", unit = \"rad/s\", stateSelect = StateSelect.default) \"Absolute angular velocity of component (= der(phi))\";
|
|---|
| 394 | Real InertiaT.a(quantity = \"AngularAcceleration\", unit = \"rad/s2\") \"Absolute angular acceleration of component (= der(w))\";
|
|---|
| 395 | Real shaft.phi_rel(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\", start = 0.0, nominal = if shaft.phi_nominal >= 1e-15 then shaft.phi_nominal else 1.0, stateSelect = StateSelect.prefer) \"Relative rotation angle (= flange_b.phi - flange_a.phi)\";
|
|---|
| 396 | Real shaft.w_rel(quantity = \"AngularVelocity\", unit = \"rad/s\", start = 0.0, stateSelect = StateSelect.prefer) \"Relative angular velocity (= der(phi_rel))\";
|
|---|
| 397 | Real shaft.a_rel(quantity = \"AngularAcceleration\", unit = \"rad/s2\", start = 0.0) \"Relative angular acceleration (= der(w_rel))\";
|
|---|
| 398 | Real shaft.tau(quantity = \"Torque\", unit = \"N.m\") \"Torque between flanges (= flange_b.tau)\";
|
|---|
| 399 | Real shaft.flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 400 | Real shaft.flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 401 | Real shaft.flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 402 | Real shaft.flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 403 | parameter Real shaft.phi_nominal(quantity = \"Angle\", unit = \"rad\", displayUnit = \"rad\", min = 0.0) = 0.0001 \"Nominal value of phi_rel (used for scaling)\";
|
|---|
| 404 | parameter enumeration(never, avoid, default, prefer, always) shaft.stateSelect = StateSelect.prefer \"Priority to use phi_rel and w_rel as states\";
|
|---|
| 405 | parameter Boolean shaft.useHeatPort = false \"=true, if heatPort is enabled\";
|
|---|
| 406 | Real shaft.lossPower(quantity = \"Power\", unit = \"W\") \"Loss power leaving component via heatPort (> 0, if heat is flowing out of component)\";
|
|---|
| 407 | parameter Real shaft.c(quantity = \"RotationalSpringConstant\", unit = \"N.m/rad\", min = 0.0, start = 100000.0) = 52.94 \"Spring constant\";
|
|---|
| 408 | parameter Real shaft.d(quantity = \"RotationalDampingConstant\", unit = \"N.m.s/rad\", min = 0.0, start = 0.0) = 0.0 \"Damping constant\";
|
|---|
| 409 | parameter Real shaft.phi_rel0(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") = 0.0 \"Unstretched spring angle\";
|
|---|
| 410 | protected Real shaft.tau_c(quantity = \"Torque\", unit = \"N.m\") \"Spring torque\";
|
|---|
| 411 | protected Real shaft.tau_d(quantity = \"Torque\", unit = \"N.m\") \"Damping torque\";
|
|---|
| 412 | parameter Boolean asm.SteadyState = true;
|
|---|
| 413 | parameter Boolean asm.InitSpeed = true;
|
|---|
| 414 | Real asm.tau;
|
|---|
| 415 | Real asm.phi(start = 0.0, fixed = true);
|
|---|
| 416 | Real asm.w;
|
|---|
| 417 | Real asm.leistung.re \"Real part of complex number\";
|
|---|
| 418 | Real asm.leistung.im \"Imaginary part of complex number\";
|
|---|
| 419 | Real asm.leistungMech;
|
|---|
| 420 | Real asm.strom;
|
|---|
| 421 | Real asm.spannung;
|
|---|
| 422 | Real asm.deltaP \"Differenz El-Mech\";
|
|---|
| 423 | Real asm.Pin.i.re \"Real part of complex number\";
|
|---|
| 424 | Real asm.Pin.i.im \"Imaginary part of complex number\";
|
|---|
| 425 | Real asm.Pin.v.re \"Real part of complex number\";
|
|---|
| 426 | Real asm.Pin.v.im \"Imaginary part of complex number\";
|
|---|
| 427 | Real asm.Flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 428 | Real asm.Flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 429 | Real asm.Flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 430 | Real asm.Flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 431 | parameter String asm.projecthome = \"/home/hans/Projekte/Swansea/ShaftStudy/OM/\";
|
|---|
| 432 | parameter Real asm.x1s = 0.1708;
|
|---|
| 433 | parameter Real asm.x2s = 0.1216;
|
|---|
| 434 | parameter Real asm.xh = 3.2;
|
|---|
| 435 | parameter Real asm.r1 = 0.0139;
|
|---|
| 436 | parameter Real asm.r2 = 0.0117;
|
|---|
| 437 | parameter Boolean asm.bSat = false \"table for saturation\";
|
|---|
| 438 | Real asm.u1.re \"Real part of complex number\";
|
|---|
| 439 | Real asm.u1.im(start = 1.0) \"Imaginary part of complex number\";
|
|---|
| 440 | Real asm.i1.re(start = -1.0) \"Real part of complex number\";
|
|---|
| 441 | Real asm.i1.im(start = -0.5) \"Imaginary part of complex number\";
|
|---|
| 442 | Real asm.i2.re(start = 1.0) \"Real part of complex number\";
|
|---|
| 443 | Real asm.i2.im(start = 0.3) \"Imaginary part of complex number\";
|
|---|
| 444 | Real asm.psi1.re(start = 0.0) \"Real part of complex number\";
|
|---|
| 445 | Real asm.psi1.im(start = -1.0) \"Imaginary part of complex number\";
|
|---|
| 446 | Real asm.psi2.re(start = 0.3) \"Real part of complex number\";
|
|---|
| 447 | Real asm.psi2.im(start = -0.9) \"Imaginary part of complex number\";
|
|---|
| 448 | Real asm.psim.re(start = 0.2) \"Real part of complex number\";
|
|---|
| 449 | Real asm.psim.im(start = -0.91) \"Imaginary part of complex number\";
|
|---|
| 450 | Real asm.im.re(start = 0.0) \"Real part of complex number\";
|
|---|
| 451 | Real asm.im.im(start = -0.3) \"Imaginary part of complex number\";
|
|---|
| 452 | Real asm.fdm \"Faktor Saettigung xh\";
|
|---|
| 453 | Real asm.fd1 \"Faktor Saettigung x1\";
|
|---|
| 454 | Real asm.fd2 \"Faktor Saettigung x2\";
|
|---|
| 455 | Real asm.psi1abs;
|
|---|
| 456 | Real asm.psi2abs;
|
|---|
| 457 | Real asm.psimabs;
|
|---|
| 458 | Real asm.i1Abs(start = 1.0);
|
|---|
| 459 | Real asm.i2Abs(start = 1.0);
|
|---|
| 460 | parameter Boolean asm.bXlsat = true \"table for xsat.\";
|
|---|
| 461 | parameter String asm.XlFileName = asm.projecthome + \"xsat.txt\";
|
|---|
| 462 | constant Real asm.J.re = 0.0 \"Real part of complex number\";
|
|---|
| 463 | constant Real asm.J.im = 1.0 \"Imaginary part of complex number\";
|
|---|
| 464 | parameter Integer asm.TsatM.n = 1 \"Number of inputs (= number of outputs)\";
|
|---|
| 465 | Real asm.TsatM.u[1] \"Connector of Real input signals\";
|
|---|
| 466 | Real asm.TsatM.y[1] \"Connector of Real output signals\";
|
|---|
| 467 | parameter Boolean asm.TsatM.tableOnFile = asm.bXlsat \"= true, if table is defined on file or in function usertab\";
|
|---|
| 468 | parameter Real asm.TsatM.table[1,1] = -1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 469 | parameter Real asm.TsatM.table[1,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 470 | parameter Real asm.TsatM.table[2,1] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 471 | parameter Real asm.TsatM.table[2,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 472 | parameter Real asm.TsatM.table[3,1] = 20.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 473 | parameter Real asm.TsatM.table[3,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 474 | parameter String asm.TsatM.tableName = \"xh\" \"Table name on file or in function usertab (see docu)\";
|
|---|
| 475 | parameter String asm.TsatM.fileName = asm.XlFileName \"File where matrix is stored\";
|
|---|
| 476 | parameter Boolean asm.TsatM.verboseRead = true \"= true, if info message that file is loading is to be printed\";
|
|---|
| 477 | parameter Integer asm.TsatM.columns[1] = 2 \"Columns of table to be interpolated\";
|
|---|
| 478 | parameter enumeration(LinearSegments, ContinuousDerivative, ConstantSegments) asm.TsatM.smoothness = Modelica.Blocks.Types.Smoothness.LinearSegments \"Smoothness of table interpolation\";
|
|---|
| 479 | protected Modelica.Blocks.Types.ExternalCombiTable1D asm.TsatM.tableID = Modelica.Blocks.Types.ExternalCombiTable1D.constructor(\"xh\", \"/home/hans/Projekte/Swansea/ShaftStudy/OM/xsat.txt\", {{-1.0, 1.0}, {1.0, 1.0}, {20.0, 1.0}}, {2}, Modelica.Blocks.Types.Smoothness.LinearSegments) \"External table object\";
|
|---|
| 480 | protected parameter Real asm.TsatM.tableOnFileRead(fixed = false) \"= 1, if table was successfully read from file\";
|
|---|
| 481 | parameter Integer asm.Tsat1.n = 1 \"Number of inputs (= number of outputs)\";
|
|---|
| 482 | Real asm.Tsat1.u[1] \"Connector of Real input signals\";
|
|---|
| 483 | Real asm.Tsat1.y[1] \"Connector of Real output signals\";
|
|---|
| 484 | parameter Boolean asm.Tsat1.tableOnFile = asm.bXlsat \"= true, if table is defined on file or in function usertab\";
|
|---|
| 485 | parameter Real asm.Tsat1.table[1,1] = -1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 486 | parameter Real asm.Tsat1.table[1,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 487 | parameter Real asm.Tsat1.table[2,1] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 488 | parameter Real asm.Tsat1.table[2,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 489 | parameter Real asm.Tsat1.table[3,1] = 20.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 490 | parameter Real asm.Tsat1.table[3,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 491 | parameter String asm.Tsat1.tableName = \"x1\" \"Table name on file or in function usertab (see docu)\";
|
|---|
| 492 | parameter String asm.Tsat1.fileName = asm.XlFileName \"File where matrix is stored\";
|
|---|
| 493 | parameter Boolean asm.Tsat1.verboseRead = true \"= true, if info message that file is loading is to be printed\";
|
|---|
| 494 | parameter Integer asm.Tsat1.columns[1] = 2 \"Columns of table to be interpolated\";
|
|---|
| 495 | parameter enumeration(LinearSegments, ContinuousDerivative, ConstantSegments) asm.Tsat1.smoothness = Modelica.Blocks.Types.Smoothness.LinearSegments \"Smoothness of table interpolation\";
|
|---|
| 496 | protected Modelica.Blocks.Types.ExternalCombiTable1D asm.Tsat1.tableID = Modelica.Blocks.Types.ExternalCombiTable1D.constructor(\"x1\", \"/home/hans/Projekte/Swansea/ShaftStudy/OM/xsat.txt\", {{-1.0, 1.0}, {1.0, 1.0}, {20.0, 1.0}}, {2}, Modelica.Blocks.Types.Smoothness.LinearSegments) \"External table object\";
|
|---|
| 497 | protected parameter Real asm.Tsat1.tableOnFileRead(fixed = false) \"= 1, if table was successfully read from file\";
|
|---|
| 498 | parameter Integer asm.Tsat2.n = 1 \"Number of inputs (= number of outputs)\";
|
|---|
| 499 | Real asm.Tsat2.u[1] \"Connector of Real input signals\";
|
|---|
| 500 | Real asm.Tsat2.y[1] \"Connector of Real output signals\";
|
|---|
| 501 | parameter Boolean asm.Tsat2.tableOnFile = asm.bXlsat \"= true, if table is defined on file or in function usertab\";
|
|---|
| 502 | parameter Real asm.Tsat2.table[1,1] = -1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 503 | parameter Real asm.Tsat2.table[1,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 504 | parameter Real asm.Tsat2.table[2,1] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 505 | parameter Real asm.Tsat2.table[2,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 506 | parameter Real asm.Tsat2.table[3,1] = 20.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 507 | parameter Real asm.Tsat2.table[3,2] = 1.0 \"Table matrix (grid = first column; e.g., table=[0,2])\";
|
|---|
| 508 | parameter String asm.Tsat2.tableName = \"x2\" \"Table name on file or in function usertab (see docu)\";
|
|---|
| 509 | parameter String asm.Tsat2.fileName = asm.XlFileName \"File where matrix is stored\";
|
|---|
| 510 | parameter Boolean asm.Tsat2.verboseRead = true \"= true, if info message that file is loading is to be printed\";
|
|---|
| 511 | parameter Integer asm.Tsat2.columns[1] = 2 \"Columns of table to be interpolated\";
|
|---|
| 512 | parameter enumeration(LinearSegments, ContinuousDerivative, ConstantSegments) asm.Tsat2.smoothness = Modelica.Blocks.Types.Smoothness.LinearSegments \"Smoothness of table interpolation\";
|
|---|
| 513 | protected Modelica.Blocks.Types.ExternalCombiTable1D asm.Tsat2.tableID = Modelica.Blocks.Types.ExternalCombiTable1D.constructor(\"x2\", \"/home/hans/Projekte/Swansea/ShaftStudy/OM/xsat.txt\", {{-1.0, 1.0}, {1.0, 1.0}, {20.0, 1.0}}, {2}, Modelica.Blocks.Types.Smoothness.LinearSegments) \"External table object\";
|
|---|
| 514 | protected parameter Real asm.Tsat2.tableOnFileRead(fixed = false) \"= 1, if table was successfully read from file\";
|
|---|
| 515 | parameter Real fixed.phi0(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") = 0.0 \"Fixed offset angle of housing\";
|
|---|
| 516 | Real fixed.flange.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 517 | Real fixed.flange.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 518 | Real Max.y = yMaxi \"Value of Real output\";
|
|---|
| 519 | Real clutch.phi_rel(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\", start = 0.0, nominal = if clutch.phi_nominal >= 1e-15 then clutch.phi_nominal else 1.0, stateSelect = StateSelect.prefer) \"Relative rotation angle (= flange_b.phi - flange_a.phi)\";
|
|---|
| 520 | Real clutch.w_rel(quantity = \"AngularVelocity\", unit = \"rad/s\", start = 0.0, stateSelect = StateSelect.prefer) \"Relative angular velocity (= der(phi_rel))\";
|
|---|
| 521 | Real clutch.a_rel(quantity = \"AngularAcceleration\", unit = \"rad/s2\", start = 0.0) \"Relative angular acceleration (= der(w_rel))\";
|
|---|
| 522 | Real clutch.tau(quantity = \"Torque\", unit = \"N.m\") \"Torque between flanges (= flange_b.tau)\";
|
|---|
| 523 | Real clutch.flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 524 | Real clutch.flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 525 | Real clutch.flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 526 | Real clutch.flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 527 | parameter Real clutch.phi_nominal(quantity = \"Angle\", unit = \"rad\", displayUnit = \"rad\", min = 0.0) = 0.0001 \"Nominal value of phi_rel (used for scaling)\";
|
|---|
| 528 | parameter enumeration(never, avoid, default, prefer, always) clutch.stateSelect = StateSelect.prefer \"Priority to use phi_rel and w_rel as states\";
|
|---|
| 529 | parameter Real clutch.w_small(quantity = \"AngularVelocity\", unit = \"rad/s\") = 10000000000.0 \"Relative angular velocity near to zero if jumps due to a reinit(..) of the velocity can occur (set to low value only if such impulses can occur)\";
|
|---|
| 530 | Real clutch.w_relfric(quantity = \"AngularVelocity\", unit = \"rad/s\") \"Relative angular velocity between frictional surfaces\";
|
|---|
| 531 | Real clutch.a_relfric(quantity = \"AngularAcceleration\", unit = \"rad/s2\") \"Relative angular acceleration between frictional surfaces\";
|
|---|
| 532 | Real clutch.tau0(quantity = \"Torque\", unit = \"N.m\") \"Friction torque for w=0 and forward sliding\";
|
|---|
| 533 | Real clutch.tau0_max(quantity = \"Torque\", unit = \"N.m\") \"Maximum friction torque for w=0 and locked\";
|
|---|
| 534 | Boolean clutch.free \"true, if frictional element is not active\";
|
|---|
| 535 | Real clutch.sa(unit = \"1\") \"Path parameter of friction characteristic tau = f(a_relfric)\";
|
|---|
| 536 | Boolean clutch.startForward(start = false, fixed = true) \"true, if w_rel=0 and start of forward sliding\";
|
|---|
| 537 | Boolean clutch.startBackward(start = false, fixed = true) \"true, if w_rel=0 and start of backward sliding\";
|
|---|
| 538 | Boolean clutch.locked(start = false, fixed = true) \"true, if w_rel=0 and not sliding\";
|
|---|
| 539 | constant Integer clutch.Unknown = 3 \"Value of mode is not known\";
|
|---|
| 540 | constant Integer clutch.Free = 2 \"Element is not active\";
|
|---|
| 541 | constant Integer clutch.Forward = 1 \"w_rel > 0 (forward sliding)\";
|
|---|
| 542 | constant Integer clutch.Stuck = 0 \"w_rel = 0 (forward sliding, locked or backward sliding)\";
|
|---|
| 543 | constant Integer clutch.Backward = -1 \"w_rel < 0 (backward sliding)\";
|
|---|
| 544 | Integer clutch.mode(min = -1, max = 3, start = 0, fixed = true);
|
|---|
| 545 | protected constant Real clutch.unitAngularAcceleration(quantity = \"AngularAcceleration\", unit = \"rad/s2\") = 1.0;
|
|---|
| 546 | protected constant Real clutch.unitTorque(quantity = \"Torque\", unit = \"N.m\") = 1.0;
|
|---|
| 547 | parameter Boolean clutch.useHeatPort = false \"=true, if heatPort is enabled\";
|
|---|
| 548 | Real clutch.lossPower(quantity = \"Power\", unit = \"W\") \"Loss power leaving component via heatPort (> 0, if heat is flowing out of component)\";
|
|---|
| 549 | parameter Real clutch.mue_pos[1,1] = 0.0 \"[w,mue] positive sliding friction coefficient (w_rel>=0)\";
|
|---|
| 550 | parameter Real clutch.mue_pos[1,2] = 0.5 \"[w,mue] positive sliding friction coefficient (w_rel>=0)\";
|
|---|
| 551 | parameter Real clutch.peak(min = 1.0) = 2.0 \"peak*mue_pos[1,2] = maximum value of mue for w_rel==0\";
|
|---|
| 552 | parameter Real clutch.cgeo(min = 0.0) = 1.0 \"Geometry constant containing friction distribution assumption\";
|
|---|
| 553 | parameter Real clutch.fn_max(quantity = \"Force\", unit = \"N\", min = 0.0, start = 1.0) = 2.0 \"Maximum normal force\";
|
|---|
| 554 | Real clutch.mue0 \"Friction coefficient for w=0 and forward sliding\";
|
|---|
| 555 | Real clutch.fn(quantity = \"Force\", unit = \"N\") \"Normal force (fn=fn_max*f_normalized)\";
|
|---|
| 556 | Real clutch.f_normalized \"Normalized force signal 0..1 (normal force = fn_max*f_normalized; clutch is engaged if > 0)\";
|
|---|
| 557 | Real InertiaG.flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 558 | Real InertiaG.flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 559 | Real InertiaG.flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 560 | Real InertiaG.flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 561 | parameter Real InertiaG.J(quantity = \"MomentOfInertia\", unit = \"kg.m2\", min = 0.0, start = 1.0) = 20.54 \"Moment of inertia\";
|
|---|
| 562 | parameter enumeration(never, avoid, default, prefer, always) InertiaG.stateSelect = StateSelect.default \"Priority to use phi and w as states\";
|
|---|
| 563 | Real InertiaG.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\", stateSelect = StateSelect.default) \"Absolute rotation angle of component\";
|
|---|
| 564 | Real InertiaG.w(quantity = \"AngularVelocity\", unit = \"rad/s\", stateSelect = StateSelect.default) \"Absolute angular velocity of component (= der(phi))\";
|
|---|
| 565 | Real InertiaG.a(quantity = \"AngularAcceleration\", unit = \"rad/s2\") \"Absolute angular acceleration of component (= der(w))\";
|
|---|
| 566 | Real Inertia.flange_a.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 567 | Real Inertia.flange_a.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 568 | Real Inertia.flange_b.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 569 | Real Inertia.flange_b.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 570 | parameter Real Inertia.J(quantity = \"MomentOfInertia\", unit = \"kg.m2\", min = 0.0, start = 1.0) = 0.5 \"Moment of inertia\";
|
|---|
| 571 | parameter enumeration(never, avoid, default, prefer, always) Inertia.stateSelect = StateSelect.default \"Priority to use phi and w as states\";
|
|---|
| 572 | Real Inertia.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\", stateSelect = StateSelect.default) \"Absolute rotation angle of component\";
|
|---|
| 573 | Real Inertia.w(quantity = \"AngularVelocity\", unit = \"rad/s\", stateSelect = StateSelect.default) \"Absolute angular velocity of component (= der(phi))\";
|
|---|
| 574 | Real Inertia.a(quantity = \"AngularAcceleration\", unit = \"rad/s2\") \"Absolute angular acceleration of component (= der(w))\";
|
|---|
| 575 | parameter Boolean Tconst.useSupport = false \"= true, if support flange enabled, otherwise implicitly grounded\";
|
|---|
| 576 | Real Tconst.flange.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 577 | Real Tconst.flange.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 578 | protected Real Tconst.phi_support(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute angle of support flange\";
|
|---|
| 579 | Real Tconst.tau(unit = \"N.m\") \"Accelerating torque acting at flange (= -flange.tau)\";
|
|---|
| 580 | Real Torque.y = load \"Value of Real output\";
|
|---|
| 581 | parameter Boolean torque1.useSupport = false \"= true, if support flange enabled, otherwise implicitly grounded\";
|
|---|
| 582 | Real torque1.flange.phi(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute rotation angle of flange\";
|
|---|
| 583 | Real torque1.flange.tau(quantity = \"Torque\", unit = \"N.m\") \"Cut torque in the flange\";
|
|---|
| 584 | protected Real torque1.phi_support(quantity = \"Angle\", unit = \"rad\", displayUnit = \"deg\") \"Absolute angle of support flange\";
|
|---|
| 585 | Real torque1.tau(unit = \"N.m\") \"Accelerating torque acting at flange (= -flange.tau)\";
|
|---|
| 586 | Real input1.y = dt \"Value of Real output\";
|
|---|
| 587 | parameter Real wk = 1.0 \"Geschw. Koordinatensystem\";
|
|---|
| 588 | parameter Real Omega = 1.0;
|
|---|
| 589 | parameter Real OMrated = 1.0;
|
|---|
| 590 | parameter Real Ubase = 8164.97;
|
|---|
| 591 | parameter Real Ibase = 2083.21;
|
|---|
| 592 | parameter Real Zbase = 3.91942;
|
|---|
| 593 | parameter Real Sbase = 17009300.0;
|
|---|
| 594 | parameter Real Tbase = 3399840.0;
|
|---|
| 595 | parameter Real Ebase = 283320.0;
|
|---|
| 596 | parameter Real Urated = 10000.0;
|
|---|
| 597 | parameter Real Irated = 1473.05;
|
|---|
| 598 | parameter Real Srated = 25514000.0;
|
|---|
| 599 | parameter Real Speedrpm = 71.66249999999999;
|
|---|
| 600 | parameter Real Speedrad = 7.50448;
|
|---|
| 601 | parameter Integer NoPolepairs = 8;
|
|---|
| 602 | parameter String ProjectHome = \"/home/hans/Projekte/Swansea/ShaftStudy/OM/\";
|
|---|
| 603 | parameter Real Tk = 0.0;
|
|---|
| 604 | Real Energy(start = 0.0);
|
|---|
| 605 | Real voltage;
|
|---|
| 606 | Real phi_relDEG;
|
|---|
| 607 | output Real dtshaft;
|
|---|
| 608 | constant Real rz31.c1 = 0.6666666666666666;
|
|---|
| 609 | constant Real rz31.c2 = 0.3333333333333333;
|
|---|
| 610 | constant Real rz31.c3 = 0.5773502691896258;
|
|---|
| 611 | Real rz31.TR.re \"Real part of complex number\";
|
|---|
| 612 | Real rz31.TR.im \"Imaginary part of complex number\";
|
|---|
| 613 | Real rz31.wt;
|
|---|
| 614 | Real rz31.u[1] \"Spannung\";
|
|---|
| 615 | Real rz31.u[2] \"Spannung\";
|
|---|
| 616 | Real rz31.i[1] \"Strom\";
|
|---|
| 617 | Real rz31.i[2] \"Strom\";
|
|---|
| 618 | Real rz31.dPin.v[1];
|
|---|
| 619 | Real rz31.dPin.v[2];
|
|---|
| 620 | Real rz31.dPin.v[3];
|
|---|
| 621 | Real rz31.dPin.i[1];
|
|---|
| 622 | Real rz31.dPin.i[2];
|
|---|
| 623 | Real rz31.dPin.i[3];
|
|---|
| 624 | Real rz31.Null.v(quantity = \"ElectricPotential\", unit = \"V\") \"Potential at the pin\";
|
|---|
| 625 | Real rz31.Null.i(quantity = \"ElectricCurrent\", unit = \"A\") \"Current flowing into the pin\";
|
|---|
| 626 | Real rz31.cPin.i.re \"Real part of complex number\";
|
|---|
| 627 | Real rz31.cPin.i.im \"Imaginary part of complex number\";
|
|---|
| 628 | Real rz31.cPin.v.re \"Real part of complex number\";
|
|---|
| 629 | Real rz31.cPin.v.im \"Imaginary part of complex number\";
|
|---|
| 630 | Real gnd.p.v(quantity = \"ElectricPotential\", unit = \"V\") \"Potential at the pin\";
|
|---|
| 631 | Real gnd.p.i(quantity = \"ElectricCurrent\", unit = \"A\") \"Current flowing into the pin\";
|
|---|
| 632 | parameter Real spg3var1.phi = 0.0 \"phase\";
|
|---|
| 633 | parameter Real spg3var1.w = 1.0 \"frequency\";
|
|---|
| 634 | constant Real spg3var1.c23 = 2.094395102393195;
|
|---|
| 635 | Real spg3var1.DreiPin.v[1];
|
|---|
| 636 | Real spg3var1.DreiPin.v[2];
|
|---|
| 637 | Real spg3var1.DreiPin.v[3];
|
|---|
| 638 | Real spg3var1.DreiPin.i[1];
|
|---|
| 639 | Real spg3var1.DreiPin.i[2];
|
|---|
| 640 | Real spg3var1.DreiPin.i[3];
|
|---|
| 641 | Real spg3var1.pin.v(quantity = \"ElectricPotential\", unit = \"V\") \"Potential at the pin\";
|
|---|
| 642 | Real spg3var1.pin.i(quantity = \"ElectricCurrent\", unit = \"A\") \"Current flowing into the pin\";
|
|---|
| 643 | Real spg3var1.u1;
|
|---|
| 644 | Real spg3var1.u2;
|
|---|
| 645 | Real spg3var1.u3;
|
|---|
| 646 | Real volts.y = voltage \"Value of Real output\";
|
|---|
| 647 | Real one.y = 1.0 \"Value of Real output\";
|
|---|
| 648 | initial equation
|
|---|
| 649 | der(asm.psi1.re) = 0.0;
|
|---|
| 650 | der(asm.psi1.im) = 0.0;
|
|---|
| 651 | der(asm.psi2.re) = 0.0;
|
|---|
| 652 | der(asm.psi2.im) = 0.0;
|
|---|
| 653 | der(InertiaG.w) = 0.0;
|
|---|
| 654 | der(Inertia.w) = 0.0;
|
|---|
| 655 | der(InertiaT.w) = 0.0;
|
|---|
| 656 | shaft.w_rel = 0.0;
|
|---|
| 657 | initial algorithm
|
|---|
| 658 | if asm.TsatM.tableOnFile then
|
|---|
| 659 | asm.TsatM.tableOnFileRead := Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.readTableData(asm.TsatM.tableID, false, asm.TsatM.verboseRead);
|
|---|
| 660 | else
|
|---|
| 661 | asm.TsatM.tableOnFileRead := 1.0;
|
|---|
| 662 | end if;
|
|---|
| 663 | initial algorithm
|
|---|
| 664 | if asm.Tsat1.tableOnFile then
|
|---|
| 665 | asm.Tsat1.tableOnFileRead := Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.readTableData(asm.Tsat1.tableID, false, asm.Tsat1.verboseRead);
|
|---|
| 666 | else
|
|---|
| 667 | asm.Tsat1.tableOnFileRead := 1.0;
|
|---|
| 668 | end if;
|
|---|
| 669 | initial algorithm
|
|---|
| 670 | if asm.Tsat2.tableOnFile then
|
|---|
| 671 | asm.Tsat2.tableOnFileRead := Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.readTableData(asm.Tsat2.tableID, false, asm.Tsat2.verboseRead);
|
|---|
| 672 | else
|
|---|
| 673 | asm.Tsat2.tableOnFileRead := 1.0;
|
|---|
| 674 | end if;
|
|---|
| 675 | equation
|
|---|
| 676 | meter.up.re = meter.Pin1.v.re;
|
|---|
| 677 | meter.up.im = meter.Pin1.v.im;
|
|---|
| 678 | meter.NULL.v.re = meter.Pin1.v.re;
|
|---|
| 679 | meter.NULL.v.im = meter.Pin1.v.im;
|
|---|
| 680 | meter.u.re = 0.0;
|
|---|
| 681 | meter.u.im = 0.0;
|
|---|
| 682 | meter.strom = Modelica.ComplexMath.'abs'(meter.i);
|
|---|
| 683 | meter.spannung = Modelica.ComplexMath.'abs'(meter.up);
|
|---|
| 684 | meter.s = 1.5 * meter.strom * meter.spannung;
|
|---|
| 685 | meter.sComplex = Complex.'*'.multiply(Complex.'*'.multiply(meter.up, Modelica.ComplexMath.conj(meter.i)), Complex.'constructor'.fromReal(1.5, 0.0));
|
|---|
| 686 | meter.p = Modelica.ComplexMath.real(meter.sComplex);
|
|---|
| 687 | meter.q = Modelica.ComplexMath.imag(meter.sComplex);
|
|---|
| 688 | meter.I = Complex.'*'.multiply(meter.i, Complex.'constructor'.fromReal(Ibase, 0.0));
|
|---|
| 689 | meter.Strom = meter.strom * Irated;
|
|---|
| 690 | meter.Spannung = meter.spannung * Urated;
|
|---|
| 691 | meter.P = meter.p * Sbase;
|
|---|
| 692 | meter.Q = meter.q * Sbase;
|
|---|
| 693 | meter.S = meter.s * Sbase;
|
|---|
| 694 | der(meter.i2t) = 1.5 * meter.strom ^ 2.0;
|
|---|
| 695 | der(meter.energy) = meter.P;
|
|---|
| 696 | meter.phiU = if noEvent(ElPower.Electric.Basics.abs(meter.up.re) < 0.0) then 1e-05 else Modelica.ComplexMath.arg(meter.up, 0.0);
|
|---|
| 697 | meter.i.re = meter.Pin1.i.re;
|
|---|
| 698 | meter.i.im = meter.Pin1.i.im;
|
|---|
| 699 | meter.u = Complex.'-'.subtract(meter.Pin1.v, meter.Pin2.v);
|
|---|
| 700 | Complex.'+'(meter.Pin1.i, meter.Pin2.i) = Complex(0.0, 0.0);
|
|---|
| 701 | InertiaT.phi = InertiaT.flange_a.phi;
|
|---|
| 702 | InertiaT.phi = InertiaT.flange_b.phi;
|
|---|
| 703 | InertiaT.w = der(InertiaT.phi);
|
|---|
| 704 | InertiaT.a = der(InertiaT.w);
|
|---|
| 705 | InertiaT.J * InertiaT.a = InertiaT.flange_a.tau + InertiaT.flange_b.tau;
|
|---|
| 706 | shaft.tau_c = shaft.c * (shaft.phi_rel - shaft.phi_rel0);
|
|---|
| 707 | shaft.tau_d = shaft.d * shaft.w_rel;
|
|---|
| 708 | shaft.tau = shaft.tau_c + shaft.tau_d;
|
|---|
| 709 | shaft.lossPower = shaft.tau_d * shaft.w_rel;
|
|---|
| 710 | shaft.phi_rel = shaft.flange_b.phi - shaft.flange_a.phi;
|
|---|
| 711 | shaft.w_rel = der(shaft.phi_rel);
|
|---|
| 712 | shaft.a_rel = der(shaft.w_rel);
|
|---|
| 713 | shaft.flange_b.tau = shaft.tau;
|
|---|
| 714 | shaft.flange_a.tau = -shaft.tau;
|
|---|
| 715 | assert(asm.TsatM.tableName <> \"NoName\", \"tableOnFile = true and no table name given\");
|
|---|
| 716 | asm.TsatM.y[1] = Modelica.Blocks.Tables.CombiTable1D$asm$TsatM.getTableValue(asm.TsatM.tableID, 1, asm.TsatM.u[1], asm.TsatM.tableOnFileRead);
|
|---|
| 717 | assert(asm.Tsat1.tableName <> \"NoName\", \"tableOnFile = true and no table name given\");
|
|---|
| 718 | asm.Tsat1.y[1] = Modelica.Blocks.Tables.CombiTable1D$asm$Tsat1.getTableValue(asm.Tsat1.tableID, 1, asm.Tsat1.u[1], asm.Tsat1.tableOnFileRead);
|
|---|
| 719 | assert(asm.Tsat2.tableName <> \"NoName\", \"tableOnFile = true and no table name given\");
|
|---|
| 720 | asm.Tsat2.y[1] = Modelica.Blocks.Tables.CombiTable1D$asm$Tsat2.getTableValue(asm.Tsat2.tableID, 1, asm.Tsat2.u[1], asm.Tsat2.tableOnFileRead);
|
|---|
| 721 | asm.i1.re = asm.Pin.i.re;
|
|---|
| 722 | asm.i1.im = asm.Pin.i.im;
|
|---|
| 723 | asm.u1.re = asm.Pin.v.re;
|
|---|
| 724 | asm.u1.im = asm.Pin.v.im;
|
|---|
| 725 | asm.psi1abs = Modelica.ComplexMath.'abs'(asm.psi1);
|
|---|
| 726 | asm.psi2abs = Modelica.ComplexMath.'abs'(asm.psi2);
|
|---|
| 727 | asm.psimabs = Modelica.ComplexMath.'abs'(asm.psim);
|
|---|
| 728 | asm.im = Complex.'+'(asm.i1, asm.i2);
|
|---|
| 729 | Complex.'*'.multiply(asm.psim, Complex.'constructor'.fromReal(asm.fdm, 0.0)) = Complex.'*'.multiply(Complex.'constructor'.fromReal(asm.xh, 0.0), asm.im);
|
|---|
| 730 | asm.psimabs = asm.TsatM.u[1];
|
|---|
| 731 | asm.fdm = asm.TsatM.y[1];
|
|---|
| 732 | asm.i1Abs = Modelica.ComplexMath.'abs'(asm.i1);
|
|---|
| 733 | asm.i1Abs = asm.Tsat1.u[1];
|
|---|
| 734 | asm.fd1 = asm.Tsat1.y[1];
|
|---|
| 735 | asm.i2Abs = Modelica.ComplexMath.'abs'(asm.i2);
|
|---|
| 736 | asm.i2Abs = asm.Tsat2.u[1];
|
|---|
| 737 | asm.fd2 = asm.Tsat2.y[1];
|
|---|
| 738 | asm.psi1 = Complex.'+'(Complex.'*'.multiply(Complex.'constructor'.fromReal(asm.fd1 * asm.x1s, 0.0), asm.i1), asm.psim);
|
|---|
| 739 | asm.psi2 = Complex.'+'(asm.psim, Complex.'*'.multiply(Complex.'constructor'.fromReal(asm.fd2 * asm.x2s, 0.0), asm.i2));
|
|---|
| 740 | asm.u1 = Complex.'+'(Complex.'+'(Complex.'*'.multiply(Complex.'constructor'.fromReal(asm.r1, 0.0), asm.i1), Complex.'/'(Complex(der(asm.psi1.re), der(asm.psi1.im)), Complex(OMrated, 0.0))), Complex.'*'.multiply(Complex.'*'.multiply(Complex.'constructor'.fromReal(wk, 0.0), Complex(0.0, 1.0)), asm.psi1));
|
|---|
| 741 | Complex(0.0, 0.0) = Complex.'+'(Complex.'+'(Complex.'*'.multiply(Complex.'constructor'.fromReal(asm.r2, 0.0), asm.i2), Complex.'/'(Complex(der(asm.psi2.re), der(asm.psi2.im)), Complex(OMrated, 0.0))), Complex.'*'.multiply(Complex.'*'.multiply(Complex.'constructor'.fromReal(wk - asm.w, 0.0), Complex(0.0, 1.0)), asm.psi2));
|
|---|
| 742 | asm.tau = asm.i1.re * asm.psi1.im - asm.i1.im * asm.psi1.re;
|
|---|
| 743 | asm.phi = asm.Flange_a.phi - asm.Flange_b.phi;
|
|---|
| 744 | asm.tau = asm.Flange_a.tau;
|
|---|
| 745 | asm.tau = -asm.Flange_b.tau;
|
|---|
| 746 | asm.w = der(asm.phi);
|
|---|
| 747 | asm.strom = Modelica.ComplexMath.'abs'(asm.Pin.i);
|
|---|
| 748 | asm.spannung = Modelica.ComplexMath.'abs'(asm.Pin.v);
|
|---|
| 749 | asm.leistung = Complex.'*'.multiply(Complex.'*'.multiply(Complex.'constructor'.fromReal(1.5, 0.0), asm.Pin.v), Modelica.ComplexMath.conj(asm.Pin.i));
|
|---|
| 750 | asm.leistungMech = 1.5 * asm.w * asm.tau;
|
|---|
| 751 | asm.deltaP = asm.leistung.re + asm.leistungMech;
|
|---|
| 752 | fixed.flange.phi = fixed.phi0;
|
|---|
| 753 | clutch.mue0 = Modelica.Math.tempInterpol1(0.0, {{clutch.mue_pos[1,1], clutch.mue_pos[1,2]}}, 2);
|
|---|
| 754 | clutch.w_relfric = clutch.w_rel;
|
|---|
| 755 | clutch.a_relfric = clutch.a_rel;
|
|---|
| 756 | clutch.fn = clutch.fn_max * clutch.f_normalized;
|
|---|
| 757 | clutch.free = clutch.fn <= 0.0;
|
|---|
| 758 | clutch.tau0 = clutch.mue0 * clutch.cgeo * clutch.fn;
|
|---|
| 759 | clutch.tau0_max = clutch.peak * clutch.tau0;
|
|---|
| 760 | clutch.tau = if clutch.locked then clutch.sa else if clutch.free then 0.0 else clutch.cgeo * clutch.fn * (if clutch.startForward then Modelica.Math.tempInterpol1(clutch.w_rel, {{clutch.mue_pos[1,1], clutch.mue_pos[1,2]}}, 2) else if clutch.startBackward then -Modelica.Math.tempInterpol1(-clutch.w_rel, {{clutch.mue_pos[1,1], clutch.mue_pos[1,2]}}, 2) else if pre(clutch.mode) == 1 then Modelica.Math.tempInterpol1(clutch.w_rel, {{clutch.mue_pos[1,1], clutch.mue_pos[1,2]}}, 2) else -Modelica.Math.tempInterpol1(-clutch.w_rel, {{clutch.mue_pos[1,1], clutch.mue_pos[1,2]}}, 2));
|
|---|
| 761 | clutch.lossPower = clutch.tau * clutch.w_relfric;
|
|---|
| 762 | clutch.phi_rel = clutch.flange_b.phi - clutch.flange_a.phi;
|
|---|
| 763 | clutch.w_rel = der(clutch.phi_rel);
|
|---|
| 764 | clutch.a_rel = der(clutch.w_rel);
|
|---|
| 765 | clutch.flange_b.tau = clutch.tau;
|
|---|
| 766 | clutch.flange_a.tau = -clutch.tau;
|
|---|
| 767 | clutch.startForward = pre(clutch.mode) == 0 and (clutch.sa > clutch.tau0_max or pre(clutch.startForward) and clutch.sa > clutch.tau0) or pre(clutch.mode) == -1 and clutch.w_relfric > clutch.w_small or initial() and clutch.w_relfric > 0.0;
|
|---|
| 768 | clutch.startBackward = pre(clutch.mode) == 0 and (clutch.sa < (-clutch.tau0_max) or pre(clutch.startBackward) and clutch.sa < (-clutch.tau0)) or pre(clutch.mode) == 1 and clutch.w_relfric < (-clutch.w_small) or initial() and clutch.w_relfric < 0.0;
|
|---|
| 769 | clutch.locked = not clutch.free and not (pre(clutch.mode) == 1 or clutch.startForward or pre(clutch.mode) == -1 or clutch.startBackward);
|
|---|
| 770 | clutch.a_relfric = if clutch.locked then 0.0 else if clutch.free then clutch.sa else if clutch.startForward then clutch.sa - clutch.tau0_max else if clutch.startBackward then clutch.sa + clutch.tau0_max else if pre(clutch.mode) == 1 then clutch.sa - clutch.tau0_max else clutch.sa + clutch.tau0_max;
|
|---|
| 771 | clutch.mode = if clutch.free then 2 else if (pre(clutch.mode) == 1 or pre(clutch.mode) == 2 or clutch.startForward) and clutch.w_relfric > 0.0 then 1 else if (pre(clutch.mode) == -1 or pre(clutch.mode) == 2 or clutch.startBackward) and clutch.w_relfric < 0.0 then -1 else 0;
|
|---|
| 772 | InertiaG.phi = InertiaG.flange_a.phi;
|
|---|
| 773 | InertiaG.phi = InertiaG.flange_b.phi;
|
|---|
| 774 | InertiaG.w = der(InertiaG.phi);
|
|---|
| 775 | InertiaG.a = der(InertiaG.w);
|
|---|
| 776 | InertiaG.J * InertiaG.a = InertiaG.flange_a.tau + InertiaG.flange_b.tau;
|
|---|
| 777 | Inertia.phi = Inertia.flange_a.phi;
|
|---|
| 778 | Inertia.phi = Inertia.flange_b.phi;
|
|---|
| 779 | Inertia.w = der(Inertia.phi);
|
|---|
| 780 | Inertia.a = der(Inertia.w);
|
|---|
| 781 | Inertia.J * Inertia.a = Inertia.flange_a.tau + Inertia.flange_b.tau;
|
|---|
| 782 | Tconst.flange.tau = -Tconst.tau;
|
|---|
| 783 | Tconst.phi_support = 0.0;
|
|---|
| 784 | torque1.flange.tau = -torque1.tau;
|
|---|
| 785 | torque1.phi_support = 0.0;
|
|---|
| 786 | rz31.u[1] = 0.6666666666666666 * rz31.dPin.v[1] + -0.3333333333333333 * rz31.dPin.v[2] + -0.3333333333333333 * rz31.dPin.v[3];
|
|---|
| 787 | rz31.u[2] = 0.5773502691896258 * rz31.dPin.v[2] + -0.5773502691896258 * rz31.dPin.v[3];
|
|---|
| 788 | -rz31.i[1] = 0.6666666666666666 * rz31.dPin.i[1] + -0.3333333333333333 * rz31.dPin.i[2] + -0.3333333333333333 * rz31.dPin.i[3];
|
|---|
| 789 | -rz31.i[2] = 0.5773502691896258 * rz31.dPin.i[2] + -0.5773502691896258 * rz31.dPin.i[3];
|
|---|
| 790 | rz31.wt = wk * time * OMrated;
|
|---|
| 791 | rz31.TR = Modelica.ComplexMath.exp(Complex(0.0, -rz31.wt));
|
|---|
| 792 | rz31.cPin.v = Complex.'*'.multiply(Complex(rz31.u[1], rz31.u[2]), rz31.TR);
|
|---|
| 793 | rz31.cPin.i = Complex.'*'.multiply(Complex(rz31.i[1], rz31.i[2]), rz31.TR);
|
|---|
| 794 | rz31.Null.i = (-rz31.dPin.i[3]) - rz31.dPin.i[1] - rz31.dPin.i[2];
|
|---|
| 795 | rz31.Null.v = rz31.dPin.v[1] + rz31.dPin.v[2] + rz31.dPin.v[3];
|
|---|
| 796 | gnd.p.v = 0.0;
|
|---|
| 797 | spg3var1.DreiPin.v[1] = spg3var1.pin.v + spg3var1.u1 * cos(spg3var1.w * OMrated * time - spg3var1.phi);
|
|---|
| 798 | spg3var1.DreiPin.v[2] = spg3var1.pin.v + spg3var1.u2 * cos(-2.094395102393195 + spg3var1.w * time * OMrated - spg3var1.phi);
|
|---|
| 799 | spg3var1.DreiPin.v[3] = spg3var1.pin.v + spg3var1.u3 * cos(2.094395102393195 + spg3var1.w * OMrated * time - spg3var1.phi);
|
|---|
| 800 | spg3var1.pin.i = spg3var1.DreiPin.i[1] + spg3var1.DreiPin.i[2] + spg3var1.DreiPin.i[3];
|
|---|
| 801 | phi_relDEG = Modelica.SIunits.Conversions.to_deg(clutch.phi_rel) / /*Real*/(NoPolepairs);
|
|---|
| 802 | voltage = if time > Tk then 0.0 else 1.0;
|
|---|
| 803 | der(Energy) = clutch.lossPower;
|
|---|
| 804 | dtshaft = shaft.tau;
|
|---|
| 805 | 6.283185307179586 * cycle = time;
|
|---|
| 806 | torque = (-asm.tau) * Tbase;
|
|---|
| 807 | torqueS = (-shaft.tau) * Tbase;
|
|---|
| 808 | meter.Pin1.i.re + asm.Pin.i.re = 0.0;
|
|---|
| 809 | meter.Pin1.i.im + asm.Pin.i.im = 0.0;
|
|---|
| 810 | rz31.cPin.i.re + meter.Pin2.i.re = 0.0;
|
|---|
| 811 | rz31.cPin.i.im + meter.Pin2.i.im = 0.0;
|
|---|
| 812 | meter.NULL.i.re = 0.0;
|
|---|
| 813 | meter.NULL.i.im = 0.0;
|
|---|
| 814 | InertiaT.flange_a.tau + shaft.flange_b.tau = 0.0;
|
|---|
| 815 | Tconst.flange.tau + InertiaT.flange_b.tau = 0.0;
|
|---|
| 816 | shaft.flange_a.tau + Inertia.flange_b.tau = 0.0;
|
|---|
| 817 | InertiaG.flange_a.tau + torque1.flange.tau + asm.Flange_a.tau = 0.0;
|
|---|
| 818 | fixed.flange.tau + asm.Flange_b.tau = 0.0;
|
|---|
| 819 | InertiaG.flange_b.tau + clutch.flange_a.tau = 0.0;
|
|---|
| 820 | clutch.flange_b.tau + Inertia.flange_a.tau = 0.0;
|
|---|
| 821 | rz31.dPin.i[1] + spg3var1.DreiPin.i[1] = 0.0;
|
|---|
| 822 | rz31.dPin.i[2] + spg3var1.DreiPin.i[2] = 0.0;
|
|---|
| 823 | rz31.dPin.i[3] + spg3var1.DreiPin.i[3] = 0.0;
|
|---|
| 824 | rz31.Null.i = 0.0;
|
|---|
| 825 | spg3var1.pin.i + gnd.p.i = 0.0;
|
|---|
| 826 | one.y = spg3var1.u1;
|
|---|
| 827 | spg3var1.u2 = spg3var1.u3;
|
|---|
| 828 | spg3var1.u2 = volts.y;
|
|---|
| 829 | rz31.dPin.v[1] = spg3var1.DreiPin.v[1];
|
|---|
| 830 | rz31.dPin.v[2] = spg3var1.DreiPin.v[2];
|
|---|
| 831 | rz31.dPin.v[3] = spg3var1.DreiPin.v[3];
|
|---|
| 832 | gnd.p.v = spg3var1.pin.v;
|
|---|
| 833 | meter.Pin2.v.re = rz31.cPin.v.re;
|
|---|
| 834 | meter.Pin2.v.im = rz31.cPin.v.im;
|
|---|
| 835 | input1.y = torque1.tau;
|
|---|
| 836 | InertiaG.flange_a.phi = asm.Flange_a.phi;
|
|---|
| 837 | InertiaG.flange_a.phi = torque1.flange.phi;
|
|---|
| 838 | Tconst.tau = Torque.y;
|
|---|
| 839 | InertiaT.flange_b.phi = Tconst.flange.phi;
|
|---|
| 840 | Inertia.flange_a.phi = clutch.flange_b.phi;
|
|---|
| 841 | Inertia.flange_b.phi = shaft.flange_a.phi;
|
|---|
| 842 | InertiaG.flange_b.phi = clutch.flange_a.phi;
|
|---|
| 843 | Max.y = clutch.f_normalized;
|
|---|
| 844 | asm.Flange_b.phi = fixed.flange.phi;
|
|---|
| 845 | asm.Pin.v.re = meter.Pin1.v.re;
|
|---|
| 846 | asm.Pin.v.im = meter.Pin1.v.im;
|
|---|
| 847 | InertiaT.flange_a.phi = shaft.flange_b.phi;
|
|---|
| 848 | algorithm
|
|---|
| 849 |
|
|---|
| 850 | algorithm
|
|---|
| 851 | end SwP3v04;
|
|---|
| 852 | "
|
|---|