Ticket #5260: temp.mo

File temp.mo, 12.3 KB (added by J-Ph Tavella <jean-philippe.tavella@…>, 6 years ago)
Line 
1package temp
2 package Basic "TelSysPro Basic Components"
3 package Operators "low level operators"
4 model RealTransmission
5 // Parameters
6 parameter Integer samplingPeriod[nR] = zeros(nR) "sampling period (ms)";
7 parameter Integer nR "number of Reals to transmit";
8 parameter Real maxDelay = 1000 "maxDelay value required for OM";
9 // Connectors
10 Modelica.Blocks.Interfaces.RealOutput y[nR] annotation(
11 Placement(transformation(extent = {{100, -10}, {120, 10}})));
12 Modelica.Blocks.Interfaces.RealInput u[nR] annotation(
13 Placement(transformation(extent = {{-140, -20}, {-100, 20}})));
14 Interfaces.ToReceive u_UL annotation(
15 Placement(transformation(extent = {{-10, -120}, {10, -100}}), iconTransformation(extent = {{-10, -120}, {10, -100}})));
16 // Local variables
17 discrete Real ud1[nR](start=u) annotation(HideResult = true);
18 Real ud2[nR](start=u) annotation(HideResult = true);
19 //discrete Real ud1[nR] annotation(HideResult = true);
20 //Real ud2[nR] annotation(HideResult = true);
21
22 equation
23 if cardinality(u_UL) == 0 then
24 u_UL.latency = 20;
25 u_UL.isWorking = true;
26 end if;
27 for i in 1:nR loop
28 if samplingPeriod[i] == 0 then
29 when u_UL.isWorking == false then
30 ud1[i] = pre(u[i]);
31 end when;
32 ud2[i] = if u_UL.isWorking then u[i] else ud1[i];
33 else
34 when sample(0, samplingPeriod[i] / 1000) then
35 ud1[i] = u[i];
36 ud2[i] = if u_UL.isWorking then ud1[i] else pre(ud2[i]);
37 end when;
38 end if;
39
40 //y[i] = if u_UL.latency == 0 then ud2[i] else delay(ud2[i], u_UL.latency / 1000);
41 y[i] = if u_UL.latency == 0 then ud2[i] else delay(ud2[i], u_UL.latency / 1000, maxDelay);
42 end for;
43
44 annotation(
45 Icon(coordinateSystem(preserveAspectRatio = false)),
46 Diagram(coordinateSystem(preserveAspectRatio = false)));
47 end RealTransmission;
48
49
50
51
52
53
54
55
56
57
58
59
60
61 end Operators;
62
63 package Tests "unitary tests for basic Components"
64 model TestRealTransmission
65 //Basic.Operators.RealTransmission realTransmission(nR=6, samplingPeriod={10,10,10,10,10,10}) annotation (Placement(transformation(extent={{-4,-10},{34,8}})));
66 Basic.Operators.RealTransmission realTransmission(nR = 6, samplingPeriod = {10, 10, 10, 10, 10, 10}) annotation(
67 Placement(transformation(extent = {{-4, -10}, {34, 8}})));
68 Modelica.Blocks.Sources.Sine sine(freqHz = 2, phase = 0.78539816339745) annotation(
69 Placement(transformation(extent = {{-54, 2}, {-34, 22}})));
70 Modelica.Blocks.Sources.Constant const(k = 1.5) annotation(
71 Placement(transformation(extent = {{-88, 48}, {-68, 68}})));
72 Modelica.Blocks.Sources.Ramp ramp(duration = 4) annotation(
73 Placement(transformation(extent = {{-54, 32}, {-34, 52}})));
74 Modelica.Blocks.Sources.Exponentials exponentials(riseTime = 3, startTime = 1, offset = 0.5) annotation(
75 Placement(transformation(extent = {{-54, -30}, {-34, -10}})));
76 Modelica.Blocks.Sources.Pulse pulse(period = 1, offset = 0.2) annotation(
77 Placement(transformation(extent = {{-54, -60}, {-34, -40}})));
78 Modelica.Blocks.Sources.Trapezoid trapezoid(period = 1.5) annotation(
79 Placement(transformation(extent = {{-54, -92}, {-34, -72}})));
80 equation
81 connect(const.y, realTransmission.u[1]) annotation(
82 Line(points = {{-67, 58}, {-20, 58}, {-20, -2.5}, {-7.8, -2.5}}, color = {0, 0, 127}));
83 connect(ramp.y, realTransmission.u[2]) annotation(
84 Line(points = {{-33, 42}, {-20, 42}, {-20, -1.9}, {-7.8, -1.9}}, color = {0, 0, 127}));
85 connect(sine.y, realTransmission.u[3]) annotation(
86 Line(points = {{-33, 12}, {-20, 12}, {-20, -1.3}, {-7.8, -1.3}}, color = {0, 0, 127}));
87 connect(exponentials.y, realTransmission.u[4]) annotation(
88 Line(points = {{-33, -20}, {-20, -20}, {-20, -0.7}, {-7.8, -0.7}}, color = {0, 0, 127}));
89 connect(pulse.y, realTransmission.u[5]) annotation(
90 Line(points = {{-33, -50}, {-20, -50}, {-20, -0.1}, {-7.8, -0.1}}, color = {0, 0, 127}));
91 connect(trapezoid.y, realTransmission.u[6]) annotation(
92 Line(points = {{-33, -82}, {-20, -82}, {-20, 0.5}, {-7.8, 0.5}}, color = {0, 0, 127}));
93 annotation(
94 Icon(coordinateSystem(preserveAspectRatio = false)),
95 Diagram(coordinateSystem(preserveAspectRatio = false), graphics = {Text(extent = {{-60, 92}, {26, 64}}, lineColor = {0, 0, 0}, fontSize = 16, horizontalAlignment = TextAlignment.Left, textString = "Validate transmission of reals with respect to their initial value:
96- default latency is 20 ms (default value when no network is connected)
97- try no discretization (parameter samplingPeriod={0} in realTransmission)
98and then with a sampling period (e.g. parameter samplingPeriod={10})
99
100Recommended time interval is [0, 6]"), Text(extent = {{-14, -72}, {72, -100}}, lineColor = {0, 0, 0}, fontSize = 16, horizontalAlignment = TextAlignment.Left, textString = "Expected results:
101- no difference between const.y and realTransmission.y[1]
102- correct shifting between ramp.y and realTransmission.y[2]
103- correct shifting between sin.y and realTransmission.y[3]
104- correct shifting between exponentials.y and realTransmission.y[4]
105- correct shifting between pulse.y and realTransmission.y[5]
106- correct shifting between trapezoid.y and realTransmission.y[6]
107
108- with discretization, the output signals are piecewise constant
109
110
111
112
113
114
115
116
117
118
119
120
121 ")}));
122 end TestRealTransmission;
123 end Tests;
124 annotation(
125 Icon(graphics = {Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, fillPattern = FillPattern.HorizontalCylinder, extent = {{-100.0, -100.0}, {100.0, 100.0}}, radius = 25.0), Rectangle(lineColor = {128, 128, 128}, extent = {{-100.0, -100.0}, {100.0, 100.0}}, radius = 25.0), Rectangle(origin = {0.0, 35.1488}, fillColor = {255, 255, 255}, extent = {{-30.0, -20.1488}, {30.0, 20.1488}}), Rectangle(origin = {0.0, -34.8512}, fillColor = {255, 255, 255}, extent = {{-30.0, -20.1488}, {30.0, 20.1488}}), Line(origin = {-51.25, 0.0}, points = {{21.25, -35.0}, {-13.75, -35.0}, {-13.75, 35.0}, {6.25, 35.0}}), Polygon(origin = {-40.0, 35.0}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, points = {{10.0, 0.0}, {-5.0, 5.0}, {-5.0, -5.0}}), Line(origin = {51.25, 0.0}, points = {{-21.25, 35.0}, {13.75, 35.0}, {13.75, -35.0}, {-6.25, -35.0}}), Polygon(origin = {40.0, -35.0}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, points = {{-10.0, 0.0}, {5.0, 5.0}, {5.0, -5.0}})}),
126 Documentation(info = "<html>
127 <p><span style=\"font-family: MS Shell Dlg 2;\">This package contains basic TelSysPro components.</span></p>
128 </html>"),
129 Diagram(graphics = {Text(extent = {{116, 34}, {-114, 10}}, lineColor = {0, 0, 0}, fontSize = 17, textStyle = {TextStyle.Bold}, textString = "TelSysPro Basic Components")}));
130 end Basic;
131
132 package Interfaces "TelSysPro Interfaces"
133 connector ToReceive = input Types.TelCoVars "System variables as input" annotation(
134 Icon(coordinateSystem(preserveAspectRatio = false, extent = {{-100, -100}, {100, 100}}), graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, fillPattern = FillPattern.Forward)}),
135 Diagram(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, fillPattern = FillPattern.Forward)}));
136 connector ToSend = output Types.TelCoVars "System variables as output" annotation(
137 Icon(coordinateSystem(preserveAspectRatio = false, extent = {{-100, -100}, {100, 100}}), graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, fillPattern = FillPattern.Forward)}),
138 Diagram(graphics = {Rectangle(extent = {{-100, 100}, {100, -100}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, fillPattern = FillPattern.Forward)}));
139 annotation(
140 Icon(graphics = {Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25.0), Rectangle(lineColor = {128, 128, 128}, fillPattern = FillPattern.None, extent = {{-100, -100}, {100, 100}}, radius = 25.0), Polygon(origin = {20, 0}, lineColor = {64, 64, 64}, fillColor = {255, 255, 255}, fillPattern = FillPattern.Solid, points = {{-10.0, 70.0}, {10.0, 70.0}, {40.0, 20.0}, {80.0, 20.0}, {80.0, -20.0}, {40.0, -20.0}, {10.0, -70.0}, {-10.0, -70.0}}), Polygon(fillColor = {102, 102, 102}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, points = {{-100, 20}, {-60, 20}, {-30, 70}, {-10, 70}, {-10, -70}, {-30, -70}, {-60, -20}, {-100, -20}})}),
141 Documentation(info = "<html>
142 <p><span style=\"font-family: MS Shell Dlg 2;\">This package contains the input and output connectors required by TelSysPro.</span></p>
143 <p>Each connector is composed with two system variables:</p>
144<ul>
145<li>Boolean 'isWorking' as Operating Mode</li>
146<li>Integer 'latency' as Latency</li>
147</ul>
148</html>"),
149 Diagram(graphics = {Text(extent = {{116, 34}, {-114, 10}}, lineColor = {0, 0, 0}, fontSize = 18, textStyle = {TextStyle.Bold}, textString = "TelSysPro Interfaces")}));
150 end Interfaces;
151
152 package Types "TelSysPro Types"
153 record TelCoVars "System Variables to exchange"
154 Boolean isWorking "Current operationg mode";
155 Integer latency "Cuurent latency";
156 annotation(
157 Documentation(info = "<html>
158
159</html>"));
160 end TelCoVars;
161 annotation(
162 Icon(graphics = {Rectangle(lineColor = {200, 200, 200}, fillColor = {248, 248, 248}, fillPattern = FillPattern.HorizontalCylinder, extent = {{-100, -100}, {100, 100}}, radius = 25.0), Rectangle(lineColor = {128, 128, 128}, extent = {{-100, -100}, {100, 100}}, radius = 25, lineThickness = 0.5), Polygon(origin = {-12.167, -23}, fillColor = {0, 0, 0}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, points = {{12.167, 65}, {14.167, 93}, {36.167, 89}, {24.167, 20}, {4.167, -30}, {14.167, -30}, {24.167, -30}, {24.167, -40}, {-5.833, -50}, {-15.833, -30}, {4.167, 20}, {12.167, 65}}, smooth = Smooth.Bezier, lineColor = {0, 0, 0}), Polygon(origin = {2.7403, 1.6673}, fillColor = {0, 0, 0}, pattern = LinePattern.None, fillPattern = FillPattern.Solid, points = {{49.2597, 22.3327}, {31.2597, 24.3327}, {7.2597, 18.3327}, {-26.7403, 10.3327}, {-46.7403, 14.3327}, {-48.7403, 6.3327}, {-32.7403, 0.3327}, {-6.7403, 4.3327}, {33.2597, 14.3327}, {49.2597, 14.3327}, {49.2597, 22.3327}}, smooth = Smooth.Bezier, lineColor = {0, 0, 0})}),
163 Documentation(info = "<html>
164 <p><span style=\"font-family: MS Shell Dlg 2;\">This package defines the type to declare system varizbles.</span></p>
165 <p>This type is a record composed with two parts:</p>
166<ul>
167<li>a Boolean</li>
168<li>an Integer</li>
169</ul></html>"),
170 Diagram(graphics = {Text(extent = {{116, 34}, {-114, 10}}, lineColor = {0, 0, 0}, fontSize = 18, textStyle = {TextStyle.Bold}, textString = "TelSysPro Types")}));
171 end Types;
172 annotation(
173 uses(Modelica(version = "3.2.2"), ThermoSysPro(version = "3.3")),
174 Diagram(graphics = {Text(extent = {{116, 34}, {-114, 10}}, lineColor = {0, 0, 0}, fontSize = 18, textStyle = {TextStyle.Bold}, textString = "TelSysPro Library for Basic Modeling
175of Telecom Networks")}),
176 Icon(graphics = {Rectangle(lineColor = {128, 128, 128}, extent = {{-100.0, -100.0}, {100.0, 100.0}}, radius = 25, lineThickness = 0.5), Text(extent = {{-120, -26}, {126, 30}}, lineColor = {128, 128, 128}, lineThickness = 0.5, textString = "TSP", fontName = "Century Gothic", textStyle = {TextStyle.Bold, TextStyle.Italic})}),
177 Documentation(info = "<html>
178<p><b><span style=\"font-family: MS Shell Dlg 2;\">TelSysPro</span></b> is a Modelica library able to model telecommunication networks. This library is being developped and maintained by J.Ph. Tavella and A. Jardin at EDF R&amp;D Saclay Lab in the frame of the project SIMSE (2016-19). </p>
179<p><b><span style=\"font-family: MS Shell Dlg 2;\">Copyright &copy; 2017-18, EDF</span></b> </p>
180</html>"),
181 version = "2");
182end temp;