| 1 | within ;
|
|---|
| 2 | package Example
|
|---|
| 3 | function conj "Conjugate of complex number"
|
|---|
| 4 | input Complex c1 "Complex number";
|
|---|
| 5 | output Complex c2 "= c1.re - j*c1.im";
|
|---|
| 6 | algorithm
|
|---|
| 7 | c2 := Complex(c1.re, -c1.im);
|
|---|
| 8 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 9 | <p>This function returns the Complex conjugate of the Complex input.</p>
|
|---|
| 10 | </html>"));
|
|---|
| 11 | end conj;
|
|---|
| 12 |
|
|---|
| 13 | function real "Real part of complex number"
|
|---|
| 14 | input Complex c "Complex number";
|
|---|
| 15 | output Real r "= c.re ";
|
|---|
| 16 | algorithm
|
|---|
| 17 | r := c.re;
|
|---|
| 18 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 19 | <p>This function returns the real part of the Complex input.</p>
|
|---|
| 20 | </html>"));
|
|---|
| 21 | end real;
|
|---|
| 22 |
|
|---|
| 23 | function imag "Imaginary part of complex number"
|
|---|
| 24 | input Complex c "Complex number";
|
|---|
| 25 | output Real r "= c.im ";
|
|---|
| 26 | algorithm
|
|---|
| 27 | r := c.im;
|
|---|
| 28 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 29 | <p>This function returns the imaginary part of the Complex input.</p>
|
|---|
| 30 | </html>"));
|
|---|
| 31 | end imag;
|
|---|
| 32 |
|
|---|
| 33 | function arg "Phase angle of complex number"
|
|---|
| 34 | input Complex c "Complex number";
|
|---|
| 35 | input Modelica.SIunits.Angle phi0 = 0
|
|---|
| 36 | "Phase angle phi shall be in the range: -pi < phi-phi0 < pi";
|
|---|
| 37 | output Modelica.SIunits.Angle phi "= phase angle of c";
|
|---|
| 38 | algorithm
|
|---|
| 39 | phi := Modelica.Math.atan3(
|
|---|
| 40 | c.im,
|
|---|
| 41 | c.re,
|
|---|
| 42 | phi0);
|
|---|
| 43 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 44 | <p>This function returns the Real argument of the Complex input, i.e., it's angle.</p>
|
|---|
| 45 | </html>"));
|
|---|
| 46 | end arg;
|
|---|
| 47 |
|
|---|
| 48 | function 'abs' "Absolute value of complex number"
|
|---|
| 49 | input Complex c "Complex number";
|
|---|
| 50 | output Real result "= abs(c)";
|
|---|
| 51 | algorithm
|
|---|
| 52 | result := (c.re ^ 2 + c.im ^ 2) ^ 0.5;
|
|---|
| 53 | //changed from sqrt
|
|---|
| 54 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 55 | <p>This function returns the Real absolute of the Complex input, i.e., it's length.</p>
|
|---|
| 56 | </html>"));
|
|---|
| 57 | end 'abs';
|
|---|
| 58 |
|
|---|
| 59 | function fromPolar "Complex from polar representation"
|
|---|
| 60 | input Real len "abs of complex";
|
|---|
| 61 | input Modelica.SIunits.Angle phi "arg of complex";
|
|---|
| 62 | output Complex c "= len*cos(phi) + j*len*sin(phi)";
|
|---|
| 63 | algorithm
|
|---|
| 64 | c := Complex(len*Modelica.Math.cos(phi), len*Modelica.Math.sin(phi));
|
|---|
| 65 | annotation(Inline = true, Documentation(info = "<html>
|
|---|
| 66 | <p>This function constructs a Complex number from it's length (absolute) and angle (argument).</p>
|
|---|
| 67 | </html>"));
|
|---|
| 68 | end fromPolar;
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 | model Test_complex
|
|---|
| 73 |
|
|---|
| 74 | Complex_bindinglost complex_bindinglost1 annotation (Placement(
|
|---|
| 75 | visible=true, transformation(
|
|---|
| 76 | origin={-40,0},
|
|---|
| 77 | extent={{-10,-10},{10,10}},
|
|---|
| 78 | rotation=0)));
|
|---|
| 79 | Complex_bindingOK complex_bindingok1 annotation (Placement(
|
|---|
| 80 | visible=true, transformation(
|
|---|
| 81 | origin={40,0},
|
|---|
| 82 | extent={{-10,-10},{10,10}},
|
|---|
| 83 | rotation=0)));
|
|---|
| 84 | annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})), Diagram(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})));
|
|---|
| 85 | end Test_complex;
|
|---|
| 86 |
|
|---|
| 87 |
|
|---|
| 88 |
|
|---|
| 89 | model Complex_bindinglost
|
|---|
| 90 | constant Real pi = Modelica.Constants.pi;
|
|---|
| 91 | parameter Real eterm = 0.999999 "terminal voltage";
|
|---|
| 92 | //1.0
|
|---|
| 93 | parameter Real anglev0 = 4.0463 "Power flow, node angle in degree";
|
|---|
| 94 | parameter Real pelec = 0.399989 * 100 "active power MVA";
|
|---|
| 95 | //80.0
|
|---|
| 96 | parameter Real qelec = 5.41649 "reactive power MVA";
|
|---|
| 97 | //50.0
|
|---|
| 98 | parameter Real wbase = 2 * pi * 50 "system base speed";
|
|---|
| 99 | parameter Real mbase = 100 "system base power rating MVA";
|
|---|
| 100 | parameter Real Ra = 0 "amature resistance";
|
|---|
| 101 | parameter Real Xpp = 1;
|
|---|
| 102 | parameter Real anglev_rad = anglev0 * pi / 180
|
|---|
| 103 | "initial value of bus anglev in rad";
|
|---|
| 104 | parameter Real p0 = pelec / mbase
|
|---|
| 105 | "initial value of bus active power in p.u.";
|
|---|
| 106 | parameter Real q0 = qelec / mbase
|
|---|
| 107 | "initial value of bus reactive power in p.u.";
|
|---|
| 108 | parameter Complex Zs(re = Ra, im = Xpp) "Equivation impedance";
|
|---|
| 109 | parameter Complex VT(re = eterm * cos(anglev_rad), im = eterm * sin(anglev_rad));
|
|---|
| 110 | parameter Complex S(re = p0, im = q0);
|
|---|
| 111 | parameter Complex It = conj(S / VT);
|
|---|
| 112 | //Initialize current and voltage components of rotor reference fram (dq axes).
|
|---|
| 113 | end Complex_bindinglost;
|
|---|
| 114 |
|
|---|
| 115 | model Complex_bindingOK
|
|---|
| 116 | constant Real pi = Modelica.Constants.pi;
|
|---|
| 117 | parameter Complex Zs(re = 1, im = 1) "Equivation impedance";
|
|---|
| 118 | parameter Complex VT(re = cos(pi), im = sin(pi));
|
|---|
| 119 | parameter Complex S(re = 1, im = 1);
|
|---|
| 120 | parameter Complex It = conj(S / VT);
|
|---|
| 121 | annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})), Diagram(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})));
|
|---|
| 122 | end Complex_bindingOK;
|
|---|
| 123 | annotation (uses(Complex(version="3.2.1"), Modelica(version="2.2.2")));
|
|---|
| 124 | end Example;
|
|---|