| 1 | package WhenPackage
|
|---|
| 2 | extends Modelica.Icons.Package;
|
|---|
| 3 |
|
|---|
| 4 | model WhenExample
|
|---|
| 5 | extends Modelica.Icons.Example;
|
|---|
| 6 | parameter String outputFile = "output.dat";
|
|---|
| 7 | parameter Modelica.SIunits.Voltage V = 10 "Voltage";
|
|---|
| 8 | parameter Modelica.SIunits.Resistance R = 1 "Resistance";
|
|---|
| 9 | parameter Modelica.SIunits.Inductance L = 0.5 "Inductance";
|
|---|
| 10 | parameter Modelica.SIunits.Time tStart = 1 "Start time";
|
|---|
| 11 | final parameter Modelica.SIunits.Time T = L / R "Time constant";
|
|---|
| 12 | Modelica.Electrical.Analog.Sources.ConstantVoltage constantvoltage1(V = V) annotation(Placement(visible = true, transformation(origin = {-80, 9.642860000000001}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
|---|
| 13 | Modelica.Electrical.Analog.Ideal.IdealClosingSwitch idealclosingswitchOn annotation(Placement(visible = true, transformation(origin = {-50.3571, 20}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
|
|---|
| 14 | Modelica.Electrical.Analog.Basic.Ground ground annotation(Placement(visible = true, transformation(origin = {-80, -30}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
|
|---|
| 15 | Modelica.Electrical.Analog.Basic.Inductor inductor1(L = L) annotation(Placement(visible = true, transformation(origin = {40, 10}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
|
|---|
| 16 | Modelica.Electrical.Analog.Basic.Resistor resistor1(R = R) annotation(Placement(visible = true, transformation(origin = {-10, 20}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
|
|---|
| 17 | Modelica.Blocks.Sources.BooleanStep booleanstep1(startTime = tStart) annotation(Placement(visible = true, transformation(origin = {-69.28570000000001, 50.7143}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
|
|---|
| 18 | initial equation
|
|---|
| 19 | inductor1.i = 0;
|
|---|
| 20 | equation
|
|---|
| 21 | connect(booleanstep1.y, idealclosingswitchOn.control) annotation(Line(points = {{-58.2857, 50.7143}, {-49.2857, 50.3571}, {-49.2857, 27}, {-50.3571, 27}}));
|
|---|
| 22 | connect(constantvoltage1.n, ground.p) annotation(Line(points = {{-80, -0.35714}, {-80, -19.2857}, {-80, -20}}));
|
|---|
| 23 | connect(inductor1.n, constantvoltage1.n) annotation(Line(points = {{40, 1.22125e-015}, {40, 0}, {-80, 0}, {-80, -0.35714}}));
|
|---|
| 24 | connect(resistor1.n, inductor1.p) annotation(Line(points = {{5.55112e-16, 20}, {39.6429, 20}, {40, 20}}));
|
|---|
| 25 | connect(idealclosingswitchOn.n, resistor1.p) annotation(Line(points = {{-40.3571, 20}, {-20, 20}}));
|
|---|
| 26 | connect(constantvoltage1.p, idealclosingswitchOn.p) annotation(Line(points = {{-80, 19.6429}, {-80, 20.3571}, {-60.3571, 20.3571}, {-60.3571, 20}}));
|
|---|
| 27 | when time >= tStart then
|
|---|
| 28 | writeRealParameters(outputFile, {"i0", "di0/dt"}, {0, inductor1.v / L}, append = false);
|
|---|
| 29 | end when;
|
|---|
| 30 | when time >= tStart + 1 * T then
|
|---|
| 31 | writeRealParameters(outputFile, {"i1"}, {resistor1.i}, append = true);
|
|---|
| 32 | end when;
|
|---|
| 33 | when time >= tStart + 2 * T then
|
|---|
| 34 | writeRealParameters(outputFile, {"i2"}, {resistor1.i}, append = true);
|
|---|
| 35 | end when;
|
|---|
| 36 | when time >= tStart + 5 * T then
|
|---|
| 37 | writeRealParameters(outputFile, {"i5"}, {resistor1.i}, append = true);
|
|---|
| 38 | end when;
|
|---|
| 39 | when terminal() then
|
|---|
| 40 | writeRealParameters(outputFile, {"vR", "vL"}, {V, 0}, append = true);
|
|---|
| 41 | end when;
|
|---|
| 42 | annotation(experiment(StopTime = 11), Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {5, 5})), Diagram(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})));
|
|---|
| 43 | end WhenExample;
|
|---|
| 44 |
|
|---|
| 45 | function writeRealParameters "Writing multiple real parameters to file"
|
|---|
| 46 | input String fileName "Name of file";
|
|---|
| 47 | input String name[:] "Name of parameter";
|
|---|
| 48 | input Real data[:] "Actual value of parameter";
|
|---|
| 49 | input Boolean append = false "Append data to file";
|
|---|
| 50 | algorithm
|
|---|
| 51 | // Check sizes of name and data
|
|---|
| 52 | if size(name, 1) <> size(data, 1) then
|
|---|
| 53 | assert(false, "writeReadParameters: Lengths of name and data have to be equal");
|
|---|
| 54 | end if;
|
|---|
| 55 | // Write data to file
|
|---|
| 56 | if not append then
|
|---|
| 57 | Modelica.Utilities.Files.removeFile(fileName);
|
|---|
| 58 | end if;
|
|---|
| 59 | for k in 1:size(name, 1) loop
|
|---|
| 60 | Modelica.Utilities.Streams.print(name[k] + " = " + String(data[k]), fileName);
|
|---|
| 61 | end for;
|
|---|
| 62 | end writeRealParameters;
|
|---|
| 63 | annotation(uses(Modelica(version = "3.2.1")));
|
|---|
| 64 | end WhenPackage;
|
|---|