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;
|
---|