|
| 1 | +within Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.Validation; |
| 2 | +block FanSpeed |
| 3 | + "Validation model for fan speed subsequence" |
| 4 | + |
| 5 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe( |
| 6 | + have_cooCoi=true, |
| 7 | + have_heaCoi=true) |
| 8 | + "Instance demonstrating variation of heating loop signal" |
| 9 | + annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); |
| 10 | + |
| 11 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe2( |
| 12 | + have_cooCoi=true, |
| 13 | + have_heaCoi=true) |
| 14 | + "Instance demonstrating variation of operating mode" |
| 15 | + annotation (Placement(transformation(extent={{80,120},{100,140}}))); |
| 16 | + |
| 17 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe1( |
| 18 | + have_cooCoi=true, |
| 19 | + have_heaCoi=true) |
| 20 | + "Instance demonstrating variation of cooling loop signal" |
| 21 | + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); |
| 22 | + |
| 23 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe3( |
| 24 | + have_cooCoi=true, |
| 25 | + have_heaCoi=false) |
| 26 | + "Instance demonstrating variation of cooling loop signal with no heating coil" |
| 27 | + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); |
| 28 | + |
| 29 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe4( |
| 30 | + have_cooCoi=false, |
| 31 | + have_heaCoi=true) |
| 32 | + "Instance demonstrating variation of heating loop signal with no cooling coil" |
| 33 | + annotation (Placement(transformation(extent={{-40,-140},{-20,-120}}))); |
| 34 | + |
| 35 | + Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed fanSpe5( |
| 36 | + have_cooCoi=false, |
| 37 | + have_heaCoi=false) |
| 38 | + "Instance demonstrating variation of operating mode with no heating and cooling coils" |
| 39 | + annotation (Placement(transformation(extent={{80,-140},{100,-120}}))); |
| 40 | + |
| 41 | + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( |
| 42 | + height=6, |
| 43 | + duration=70, |
| 44 | + offset=1) |
| 45 | + "Operating mode signal" |
| 46 | + annotation (Placement(transformation(extent={{20,160},{40,180}}))); |
| 47 | + |
| 48 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt |
| 49 | + "Real to Integer conversion" |
| 50 | + annotation (Placement(transformation(extent={{-70,160},{-50,180}}))); |
| 51 | + |
| 52 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( |
| 53 | + period=100) |
| 54 | + "Fan proven on signal" |
| 55 | + annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); |
| 56 | + |
| 57 | + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( |
| 58 | + freqHz=1/50) |
| 59 | + "Heating loop signal" |
| 60 | + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); |
| 61 | + |
| 62 | + Buildings.Controls.OBC.CDL.Reals.Abs abs |
| 63 | + "Convert negative loop signal to positive" |
| 64 | + annotation (Placement(transformation(extent={{-70,100},{-50,120}}))); |
| 65 | + |
| 66 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( |
| 67 | + k=0) |
| 68 | + "Cooling loop signal" |
| 69 | + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); |
| 70 | + |
| 71 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( |
| 72 | + k=1) |
| 73 | + "Operating mode signal" |
| 74 | + annotation (Placement(transformation(extent={{-100,160},{-80,180}}))); |
| 75 | + |
| 76 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 |
| 77 | + "Real to Integer conversion" |
| 78 | + annotation (Placement(transformation(extent={{50,160},{70,180}}))); |
| 79 | + |
| 80 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( |
| 81 | + period=100) |
| 82 | + "Fan proven on signal" |
| 83 | + annotation (Placement(transformation(extent={{20,130},{40,150}}))); |
| 84 | + |
| 85 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( |
| 86 | + k=0) |
| 87 | + "Cooling loop signal" |
| 88 | + annotation (Placement(transformation(extent={{20,70},{40,90}}))); |
| 89 | + |
| 90 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 |
| 91 | + "Real to Integer conversion" |
| 92 | + annotation (Placement(transformation(extent={{-70,30},{-50,50}}))); |
| 93 | + |
| 94 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( |
| 95 | + period=100) |
| 96 | + "Fan proven on signal" |
| 97 | + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); |
| 98 | + |
| 99 | + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin2( |
| 100 | + freqHz=1/50) |
| 101 | + "Cooling loop signal" |
| 102 | + annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); |
| 103 | + |
| 104 | + Buildings.Controls.OBC.CDL.Reals.Abs abs2 |
| 105 | + "Convert negative loop signal to positive" |
| 106 | + annotation (Placement(transformation(extent={{-70,-60},{-50,-40}}))); |
| 107 | + |
| 108 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( |
| 109 | + k=0) |
| 110 | + "Heating loop signal" |
| 111 | + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); |
| 112 | + |
| 113 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( |
| 114 | + k=1) |
| 115 | + "Operating mode signal" |
| 116 | + annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); |
| 117 | + |
| 118 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con5( |
| 119 | + k=0.75) |
| 120 | + "Heating loop signal" |
| 121 | + annotation (Placement(transformation(extent={{20,100},{40,120}}))); |
| 122 | + |
| 123 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 |
| 124 | + "Real to Integer conversion" |
| 125 | + annotation (Placement(transformation(extent={{50,30},{70,50}}))); |
| 126 | + |
| 127 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( |
| 128 | + period=100) |
| 129 | + "Fan proven on signal" |
| 130 | + annotation (Placement(transformation(extent={{20,0},{40,20}}))); |
| 131 | + |
| 132 | + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1( |
| 133 | + freqHz=1/50) |
| 134 | + "Cooling loop signal" |
| 135 | + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); |
| 136 | + |
| 137 | + Buildings.Controls.OBC.CDL.Reals.Abs abs1 |
| 138 | + "Convert negative loop signal to positive" |
| 139 | + annotation (Placement(transformation(extent={{50,-30},{70,-10}}))); |
| 140 | + |
| 141 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con7( |
| 142 | + k=1) |
| 143 | + "Operating mode signal" |
| 144 | + annotation (Placement(transformation(extent={{20,30},{40,50}}))); |
| 145 | + |
| 146 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 |
| 147 | + "Real to Integer conversion" |
| 148 | + annotation (Placement(transformation(extent={{-70,-100},{-50,-80}}))); |
| 149 | + |
| 150 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( |
| 151 | + period=100) |
| 152 | + "Fan proven on signal" |
| 153 | + annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); |
| 154 | + |
| 155 | + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin3( |
| 156 | + freqHz=1/50) |
| 157 | + "Heating loop signal" |
| 158 | + annotation (Placement(transformation(extent={{-100,-160},{-80,-140}}))); |
| 159 | + |
| 160 | + Buildings.Controls.OBC.CDL.Reals.Abs abs3 |
| 161 | + "Convert negative loop signal to positive" |
| 162 | + annotation (Placement(transformation(extent={{-70,-160},{-50,-140}}))); |
| 163 | + |
| 164 | + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con8( |
| 165 | + k=1) |
| 166 | + "Operating mode signal" |
| 167 | + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); |
| 168 | + |
| 169 | + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( |
| 170 | + height=6, |
| 171 | + duration=70, |
| 172 | + offset=1) |
| 173 | + "Operating mode signal" |
| 174 | + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); |
| 175 | + |
| 176 | + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt5 |
| 177 | + "Real to Integer conversion" |
| 178 | + annotation (Placement(transformation(extent={{50,-100},{70,-80}}))); |
| 179 | + |
| 180 | + Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( |
| 181 | + period=100) |
| 182 | + "Fan proven on signal" |
| 183 | + annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); |
| 184 | + |
| 185 | +equation |
| 186 | + connect(reaToInt.y, fanSpe.opeMod) annotation (Line(points={{-48,170},{-46,170}, |
| 187 | + {-46,136},{-42,136}}, color={255,127,0})); |
| 188 | + connect(booPul.y, fanSpe.u1FanPro) annotation (Line(points={{-78,140},{-50,140}, |
| 189 | + {-50,132},{-42,132}}, color={255,0,255})); |
| 190 | + connect(sin.y, abs.u) |
| 191 | + annotation (Line(points={{-78,110},{-72,110}}, color={0,0,127})); |
| 192 | + connect(abs.y, fanSpe.uHea) annotation (Line(points={{-48,110},{-46,110},{-46, |
| 193 | + 128},{-42,128}}, color={0,0,127})); |
| 194 | + connect(con.y, fanSpe.uCoo) annotation (Line(points={{-78,80},{-44,80},{-44,124}, |
| 195 | + {-42,124}},color={0,0,127})); |
| 196 | + connect(con1.y, reaToInt.u) |
| 197 | + annotation (Line(points={{-78,170},{-72,170}}, color={0,0,127})); |
| 198 | + connect(reaToInt1.y, fanSpe2.opeMod) annotation (Line(points={{72,170},{74,170}, |
| 199 | + {74,136},{78,136}}, color={255,127,0})); |
| 200 | + connect(booPul1.y, fanSpe2.u1FanPro) annotation (Line(points={{42,140},{70,140}, |
| 201 | + {70,132},{78,132}}, color={255,0,255})); |
| 202 | + connect(con2.y, fanSpe2.uCoo) annotation (Line(points={{42,80},{76,80},{76, |
| 203 | + 124},{78,124}}, color={0,0,127})); |
| 204 | + connect(ram.y, reaToInt1.u) |
| 205 | + annotation (Line(points={{42,170},{48,170}}, color={0,0,127})); |
| 206 | + connect(reaToInt2.y,fanSpe1. opeMod) annotation (Line(points={{-48,40},{-46,40}, |
| 207 | + {-46,6},{-42,6}}, color={255,127,0})); |
| 208 | + connect(booPul2.y,fanSpe1. u1FanPro) annotation (Line(points={{-78,10},{-50,10}, |
| 209 | + {-50,2},{-42,2}}, color={255,0,255})); |
| 210 | + connect(sin2.y, abs2.u) |
| 211 | + annotation (Line(points={{-78,-50},{-72,-50}}, color={0,0,127})); |
| 212 | + connect(con4.y, reaToInt2.u) |
| 213 | + annotation (Line(points={{-78,40},{-72,40}}, color={0,0,127})); |
| 214 | + connect(con3.y,fanSpe1. uHea) annotation (Line(points={{-78,-20},{-56,-20},{-56, |
| 215 | + -2},{-42,-2}}, color={0,0,127})); |
| 216 | + connect(abs2.y,fanSpe1. uCoo) annotation (Line(points={{-48,-50},{-46,-50},{-46, |
| 217 | + -6},{-42,-6}}, color={0,0,127})); |
| 218 | + connect(con5.y, fanSpe2.uHea) annotation (Line(points={{42,110},{60,110},{60, |
| 219 | + 128},{78,128}}, color={0,0,127})); |
| 220 | + connect(reaToInt3.y,fanSpe3. opeMod) annotation (Line(points={{72,40},{74,40}, |
| 221 | + {74,6},{78,6}}, color={255,127,0})); |
| 222 | + connect(booPul3.y,fanSpe3. u1FanPro) annotation (Line(points={{42,10},{70,10},{ |
| 223 | + 70,2},{78,2}}, color={255,0,255})); |
| 224 | + connect(sin1.y,abs1. u) |
| 225 | + annotation (Line(points={{42,-20},{48,-20}}, color={0,0,127})); |
| 226 | + connect(con7.y,reaToInt3. u) |
| 227 | + annotation (Line(points={{42,40},{48,40}}, color={0,0,127})); |
| 228 | + connect(abs1.y,fanSpe3. uCoo) annotation (Line(points={{72,-20},{74,-20},{74,-6}, |
| 229 | + {78,-6}}, color={0,0,127})); |
| 230 | + connect(reaToInt4.y, fanSpe4.opeMod) annotation (Line(points={{-48,-90},{-46,-90}, |
| 231 | + {-46,-124},{-42,-124}}, color={255,127,0})); |
| 232 | + connect(booPul4.y, fanSpe4.u1FanPro) annotation (Line(points={{-78,-120},{-50,-120}, |
| 233 | + {-50,-128},{-42,-128}}, color={255,0,255})); |
| 234 | + connect(sin3.y, abs3.u) |
| 235 | + annotation (Line(points={{-78,-150},{-72,-150}}, color={0,0,127})); |
| 236 | + connect(abs3.y, fanSpe4.uHea) annotation (Line(points={{-48,-150},{-46,-150}, |
| 237 | + {-46,-132},{-42,-132}}, color={0,0,127})); |
| 238 | + connect(con8.y, reaToInt4.u) |
| 239 | + annotation (Line(points={{-78,-90},{-72,-90}}, color={0,0,127})); |
| 240 | + connect(reaToInt5.y, fanSpe5.opeMod) annotation (Line(points={{72,-90},{74,-90}, |
| 241 | + {74,-124},{78,-124}}, color={255,127,0})); |
| 242 | + connect(booPul5.y, fanSpe5.u1FanPro) annotation (Line(points={{42,-120},{70,-120}, |
| 243 | + {70,-128},{78,-128}}, color={255,0,255})); |
| 244 | + connect(ram1.y, reaToInt5.u) |
| 245 | + annotation (Line(points={{42,-90},{48,-90}}, color={0,0,127})); |
| 246 | + |
| 247 | +annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, |
| 248 | + {100,100}}), graphics={ |
| 249 | + Ellipse(lineColor = {75,138,73}, |
| 250 | + fillColor={255,255,255}, |
| 251 | + fillPattern = FillPattern.Solid, |
| 252 | + extent={{-100,-100},{100,100}}), |
| 253 | + Polygon(lineColor = {0,0,255}, |
| 254 | + fillColor = {75,138,73}, |
| 255 | + pattern = LinePattern.None, |
| 256 | + fillPattern = FillPattern.Solid, |
| 257 | + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), Diagram( |
| 258 | + coordinateSystem(preserveAspectRatio=false, extent={{-120,-200},{120,200}})), |
| 259 | +experiment(StopTime=100, Tolerance=1e-06), |
| 260 | + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/ASHRAE/G36/FanCoilUnits/Subsequences/Validation/FanSpeed.mos" |
| 261 | + "Simulate and plot"), |
| 262 | +Documentation(info="<html> |
| 263 | +<p> |
| 264 | +This example validates |
| 265 | +<a href=\"modelica://Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed\"> |
| 266 | +Buildings.Controls.OBC.ASHRAE.G36.FanCoilUnits.Subsequences.FanSpeed</a>. |
| 267 | +Each of the six instances of the controller represents operation with different |
| 268 | +inputs for heating and cooling loop signals, as well as the operating mode |
| 269 | +and fan proven on signal, and different configuration |
| 270 | +parameters of fan coil unit with presence or absence of heating and cooling |
| 271 | +coils, as described by the comment for each instance. |
| 272 | +</p> |
| 273 | +</html>", revisions="<html> |
| 274 | +<ul> |
| 275 | +<li> |
| 276 | +March 18, 2022, by Karthik Devaprasad:<br/> |
| 277 | +First implementation. |
| 278 | +</li> |
| 279 | +</ul> |
| 280 | +</html>")); |
| 281 | +end FanSpeed; |
0 commit comments