From ce39f49768a22196765c43dc455af2dbd5c82065 Mon Sep 17 00:00:00 2001 From: Casper Fu <91219266+hcasperfu@users.noreply.github.com> Date: Fri, 18 Aug 2023 19:10:26 -0700 Subject: [PATCH 1/9] Issue2859 dual source TES (#2899) Added remote storage plant for district cooling systems. --------- Co-authored-by: David Blum Co-authored-by: Michael Wetter --- .../Controls/VariableSpeedPumpStage.mo | 10 +- .../Plants/Cooling/BaseClasses/IdealUser.mo | 194 ++++++ .../Cooling/BaseClasses/ParallelJunctions.mo | 152 +++++ .../Cooling/BaseClasses/ParallelPipes.mo | 87 +++ .../BaseClasses/ReversibleConnection.mo | 166 +++++ .../Plants/Cooling/BaseClasses/TankBranch.mo | 235 +++++++ .../BaseClasses/Validation/IdealUser.mo | 79 +++ .../Cooling/BaseClasses/Validation/package.mo | 7 + .../BaseClasses/Validation/package.order | 1 + .../DHC/Plants/Cooling/BaseClasses/package.mo | 7 + .../Plants/Cooling/BaseClasses/package.order | 6 + .../Plants/Cooling/Controls/FlowControl.mo | 415 +++++++++++++ .../DHC/Plants/Cooling/Controls/SelectMin.mo | 51 ++ .../DHC/Plants/Cooling/Controls/TankStatus.mo | 120 ++++ .../Cooling/Controls/Validation/TankStatus.mo | 47 ++ .../Cooling/Controls/Validation/package.order | 1 + .../DHC/Plants/Cooling/Controls/package.order | 3 + .../Examples/StoragePlantDualSource.mo | 437 +++++++++++++ .../DHC/Plants/Cooling/Examples/package.order | 1 + .../DHC/Plants/Cooling/StoragePlant.mo | 347 +++++++++++ .../DHC/Plants/Cooling/package.order | 2 + .../DHC/Plants/Cooling/ControlSignals.drawio | 586 ++++++++++++++++++ .../DHC/Plants/Cooling/ControlSignals.png | Bin 0 -> 104346 bytes .../DHC/Plants/Cooling/ControlSignals.svg | 3 + .../DHC/Plants/Cooling/SystemConcept.drawio | 428 +++++++++++++ .../DHC/Plants/Cooling/SystemConcept.png | Bin 0 -> 61626 bytes .../DHC/Plants/Cooling/SystemConcept.svg | 3 + ...oling_BaseClasses_Validation_IdealUser.txt | 17 + ...Cooling_Controls_Validation_TankStatus.txt | 14 + ...ooling_Examples_StoragePlantDualSource.txt | 30 + ...mples_BaseClasses_Validation_IdealUser.txt | 15 + ...id_Storage_Plant_Examples_SingleSource.txt | 18 + .../Resources/Scripts/BuildingsPy/conf.yml | 4 + .../BaseClasses/Validation/IdealUser.mos | 25 + .../Controls/Validation/TankStatus.mos | 22 + .../Examples/StoragePlantDualSource.mos | 60 ++ ...oling.BaseClasses.Validation.IdealUser.mos | 6 + ...Cooling.Controls.Validation.TankStatus.mos | 9 + ...ooling.Examples.StoragePlantDualSource.mos | 19 + Buildings/package.mo | 20 + 40 files changed, 3643 insertions(+), 4 deletions(-) create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo create mode 100644 Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.svg create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.svg create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos diff --git a/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo b/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo index 754b67d33ec..f18b7e4788b 100644 --- a/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo +++ b/Buildings/Applications/BaseClasses/Controls/VariableSpeedPumpStage.mo @@ -99,8 +99,10 @@ model VariableSpeedPumpStage "Staging control for variable speed pumps" final integerFalse=0, final integerTrue=2) annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); Buildings.Controls.OBC.CDL.Integers.Add addInt + "Outputs how many pumps are to be commanded on" annotation (Placement(transformation(extent={{60,-56},{80,-36}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Comparison from integer to real signal for number of pumps" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); Modelica.Blocks.Interfaces.BooleanInput on @@ -115,12 +117,12 @@ equation pattern=LinePattern.Dash)); connect(con1.outPort, oneOn.inPort[1]) annotation (Line( - points={{-50,38.5},{-50,26},{-50.5,26},{-50.5,21}}, + points={{-50,38.5},{-50,26},{-49.75,26},{-49.75,21}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con2.inPort, oneOn.outPort[1]) annotation (Line( - points={{-50,-26},{-50,-10},{-50.25,-10},{-50.25,-0.5}}, + points={{-50,-26},{-50,-10},{-49.875,-10},{-49.875,-0.5}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con2.outPort, twoOn.inPort[1]) @@ -140,12 +142,12 @@ equation pattern=LinePattern.Dash)); connect(con3.outPort, oneOn.inPort[2]) annotation (Line( - points={{-10,-38.5},{-10,26},{-49.5,26},{-49.5,21}}, + points={{-10,-38.5},{-10,26},{-50.25,26},{-50.25,21}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(con4.inPort, oneOn.outPort[2]) annotation (Line( - points={{-22,48},{-22,-10},{-49.75,-10},{-49.75,-0.5}}, + points={{-22,48},{-22,-10},{-50.125,-10},{-50.125,-0.5}}, color={0,0,0}, pattern=LinePattern.Dash)); connect(combiTable1Ds.y, y) diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo new file mode 100644 index 00000000000..96e1e39cfec --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/IdealUser.mo @@ -0,0 +1,194 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model IdealUser "Ideal user model" + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate"; + + parameter Modelica.Units.SI.Temperature T_CHWR_nominal + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa") + "Nominal pressure drop when valve is fully open"; + + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( + redeclare final package Medium = Medium, + final use_inputFilter=true, + final dpValve_nominal=dp_nominal/2, + final init=Modelica.Blocks.Types.Init.InitialState, + final dpFixed_nominal=dp_nominal/2, + final m_flow_nominal=m_flow_nominal, + y_start=0) "User control valve" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.Continuous.LimPID conPI( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.5, + Ti=20, + final reverseActing=true) "PI controller" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,80}))); + Modelica.Blocks.Interfaces.RealInput mPre_flow( + final quantity = "MassFlowRate", + final unit = "kg/s") + "Load in terms of flow rate prescription" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}))); + Modelica.Blocks.Interfaces.RealOutput yVal_actual( + final unit = "1") + "Consumer control valve actuator position" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,80}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,80}))); + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare final package Medium = Medium) + "Differential pressure sensor" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-72,20}))); + Modelica.Blocks.Interfaces.RealOutput dp( + final quantity="PressureDifference", + final unit="Pa", + displayUnit="Pa") + "Differential pressure from the sensor" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,20}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,40}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a( + p(start=Medium.p_default), + redeclare final package Medium = Medium, + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-110,50},{-90,70}}), + iconTransformation(extent={{-110,50},{-90,70}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + p(start=Medium.p_default), + redeclare final package Medium = Medium, + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-90,-70},{-110,-50}}), + iconTransformation(extent={{-90,-70},{-110,-50}}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare final package Medium = Medium) + "Mass flow rate sensor" + annotation (Placement(transformation(extent={{-20,-70},{-40,-50}}))); + Buildings.Fluid.Sources.PropertySource_T proSou( + redeclare final package Medium = Medium, + final use_T_in=true) "Ideal temperature source" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={10,-60}))); + Modelica.Blocks.Sources.Constant TRet(final k=T_CHWR_nominal) + "Constant CHW return temperature" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); +equation + connect(senRelPre.p_rel, dp) annotation (Line(points={{-63,20},{110,20}}, + color={0,0,127})); + connect(val.y_actual, yVal_actual) + annotation (Line(points={{15,67},{40,67},{40,80},{110,80}}, + color={0,0,127})); + connect(senRelPre.port_a, port_a) annotation (Line( + points={{-72,30},{-72,60},{-100,60}}, + color={0,127,255}, + pattern=LinePattern.Dash)); + connect(senRelPre.port_b, port_b) annotation (Line( + points={{-72,10},{-72,-60},{-100,-60}}, + color={0,127,255}, + pattern=LinePattern.Dash)); + connect(conPI.y, val.y) + annotation (Line(points={{-19,80},{10,80},{10,72}}, color={0,0,127})); + connect(senMasFlo.port_b, port_b) + annotation (Line(points={{-40,-60},{-100,-60}}, color={0,127,255})); + connect(senMasFlo.m_flow, conPI.u_m) + annotation (Line(points={{-30,-49},{-30,68}}, color={0,0,127})); + connect(port_a, val.port_a) + annotation (Line(points={{-100,60},{0,60}}, color={0,127,255})); + connect(conPI.u_s, mPre_flow) + annotation (Line(points={{-42,80},{-110,80}}, color={0,0,127})); + connect(senMasFlo.port_a, proSou.port_b) + annotation (Line(points={{-20,-60},{0,-60}}, color={0,127,255})); + connect(proSou.port_a, val.port_b) annotation (Line(points={{20,-60},{40,-60}, + {40,60},{20,60}}, color={0,127,255})); + connect(TRet.y, proSou.T_in) + annotation (Line(points={{1,-30},{14,-30},{14,-48}}, color={0,0,127})); + annotation ( + defaultComponentName = "ideUse", + Documentation(info=" +

+This is a simple ideal user model used by + +Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource. +The load of the user is described by a varying mass flow rate setpoint. +The valve is controlled to maintain the requested mass flow rate. +The model sets its leaving water temperature to the user-specified temperature +T_CHWR_nominal. +

+", revisions=" + +"), + Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,40},{40,-40}}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-34,34},{-4,6}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{6,34},{34,6}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{-34,-4},{-4,-34}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Rectangle( + extent={{6,-4},{34,-34}}, + pattern=LinePattern.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Text( + extent={{-151,-100},{149,-140}}, + textColor={0,0,255}, + textString="%name")})); +end IdealUser; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo new file mode 100644 index 00000000000..5d102252b58 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelJunctions.mo @@ -0,0 +1,152 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ParallelJunctions "A pair of junctions in parallel" + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Design mass flow rate (used to approximate dynamics" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Time tau=30 "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + parameter Modelica.Units.SI.Temperature T1_start=Medium.T_default + "Start temperature of the volume" + annotation(Dialog(tab = "Initialization")); + parameter Modelica.Units.SI.Temperature T2_start=Medium.T_default + "Start temperature of the volume" + annotation(Dialog(tab = "Initialization")); + + Modelica.Fluid.Interfaces.FluidPort_a port_a2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{90,-70},{110,-50}}), iconTransformation( + extent={{90,-70},{110,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{90,50},{110,70}}), iconTransformation( + extent={{90,50},{110,70}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-110,-70},{-90,-50}}), + iconTransformation(extent={{-110,-70},{-90,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_a1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-110,50},{-90,70}}), iconTransformation( + extent={{-110,50},{-90,70}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_c1( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{-70,90},{-50,110}}), iconTransformation( + extent={{-70,90},{-50,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_c2( + redeclare final package Medium = Medium, + p(final displayUnit="Pa")) "Fluid connector" annotation ( + Placement(transformation(extent={{50,90},{70,110}}), iconTransformation( + extent={{50,90},{70,110}}))); + Buildings.Fluid.FixedResistances.Junction jun1( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final tau=tau, + final T_start=T1_start, + final m_flow_nominal={-m_flow_nominal,-m_flow_nominal,m_flow_nominal}, + final dp_nominal={0,0,0}) + "Junction" + annotation (Placement(transformation(extent={{-70,70},{-50,50}}))); + Buildings.Fluid.FixedResistances.Junction jun2( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final tau=tau, + final T_start=T2_start, + final m_flow_nominal={m_flow_nominal,m_flow_nominal,-m_flow_nominal}, + final dp_nominal={0,0,0}) + "Junction" + annotation (Placement(transformation(extent={{50,-50},{70,-70}}))); +equation + connect(port_a1, jun1.port_1) + annotation (Line(points={{-100,60},{-70,60}}, color={0,127,255})); + connect(jun1.port_3,port_c1) + annotation (Line(points={{-60,70},{-60,100}}, color={0,127,255})); + connect(jun1.port_2, port_b1) + annotation (Line(points={{-50,60},{100,60}}, color={0,127,255})); + connect(port_b2, jun2.port_1) + annotation (Line(points={{-100,-60},{50,-60}}, color={0,127,255})); + connect(jun2.port_2, port_a2) + annotation (Line(points={{70,-60},{100,-60}}, color={0,127,255})); + connect(jun2.port_3,port_c2) + annotation (Line(points={{60,-50},{60,100}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-1.5,-100.5},{1.5,100.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-0.5,59.5}, + rotation=90), + Rectangle( + extent={{-1.5,-100.5},{1.5,100.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-0.5,-60.5}, + rotation=90), + Rectangle( + extent={{-19.5,-1.5},{19.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={-59.5,79.5}, + rotation=90), + Rectangle( + extent={{-17.5,-1.5},{17.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={60.5,81.5}, + rotation=90), + Rectangle( + extent={{-57.5,-1.5},{57.5,1.5}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}, + origin={60.5,-2.5}, + rotation=90), + Text( + extent={{-141,-99},{159,-139}}, + textColor={0,0,255}, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={0,127,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + defaultComponentName = "parJun", + Documentation(info=" +

+This model provides junction models in parallel on the distribution pipe lines. +This model is for breaking algebraic loops only and has no pressure drop. +

+", revisions=" + +")); +end ParallelJunctions; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo new file mode 100644 index 00000000000..845a11e557a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ParallelPipes.mo @@ -0,0 +1,87 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ParallelPipes "CHW supply and return pipes in parallel" + extends Buildings.Fluid.Interfaces.PartialFourPortInterface( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium, + final m1_flow_nominal = m_flow_nominal, + final m2_flow_nominal = m_flow_nominal); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa") + "Nominal pressure drop" + annotation(Dialog(group="Nominal condition")); + + Buildings.Fluid.FixedResistances.PressureDrop preDro1( + redeclare package Medium = Medium1, + final allowFlowReversal=true, + final dp_nominal=dp_nominal, + final m_flow_nominal=m1_flow_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + Buildings.Fluid.FixedResistances.PressureDrop preDro2( + redeclare package Medium = Medium2, + final allowFlowReversal=true, + final dp_nominal=dp_nominal, + final m_flow_nominal=m2_flow_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{10,-70},{-10,-50}}))); +equation + connect(preDro1.port_a, port_a1) + annotation (Line(points={{-10,60},{-100,60}}, color={0,127,255})); + connect(preDro1.port_b, port_b1) + annotation (Line(points={{10,60},{100,60}}, color={0,127,255})); + connect(preDro2.port_a, port_a2) + annotation (Line(points={{10,-60},{100,-60}}, color={0,127,255})); + connect(preDro2.port_b, port_b2) + annotation (Line(points={{-10,-60},{-100,-60}}, color={0,127,255})); + annotation (Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-28,72},{28,48}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,62},{100,58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,-58},{100,-62}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-30,-48},{26,-72}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), +defaultComponentName="parPip", +Documentation(info=" +

+This model contains two pipes in parallel that represent the supply and return +pipes of a district CHW network. +Only pressure drop is considered. This model does not consider heat loss. +

+", revisions=" + +")); +end ParallelPipes; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo new file mode 100644 index 00000000000..65fca950256 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/ReversibleConnection.mo @@ -0,0 +1,166 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model ReversibleConnection + "A connection that supports reversible flow with a pump and a valve" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final allowFlowReversal=true); + + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch"; + parameter Modelica.Units.SI.PressureDifference dpPum_nominal + "Nominal pressure difference for supply pump sizing"; + parameter Modelica.Units.SI.PressureDifference dpVal_nominal + "Nominal pressure difference for return valve sizing"; + parameter Modelica.Units.SI.ThermodynamicTemperature T_start + "Start temperature" + annotation(Dialog(tab = "Initialization")); + + Modelica.Blocks.Interfaces.RealOutput PEle( + final quantity="Power", + final unit="W") + "Estimated power consumption" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,50}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,60}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for pump" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,70}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,60}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pum( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final addPowerToMedium=false, + final dp_nominal=dpPum_nominal) "Supply pump" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + Buildings.Fluid.FixedResistances.CheckValve cheVal( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=0.1*dpPum_nominal, + final dpFixed_nominal=0) "Check valve" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Fluid.Actuators.Valves.TwoWayPressureIndependent val( + redeclare final package Medium = Medium, + final m_flow_nominal=mTan_flow_nominal, + final dpValve_nominal=dpVal_nominal, + y_start=0) + "Valve that throttles CHW from the supply line to the tank" + annotation (Placement(transformation(extent={{20,-40},{0,-20}}))); + Modelica.Blocks.Interfaces.RealInput yVal(final unit="1") + "Normalized flow signal for valve" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-70}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-60}))); + +protected + Buildings.Fluid.FixedResistances.Junction jun1( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=30, + T_start=T_start, + m_flow_nominal={-mTan_flow_nominal,m_flow_nominal,-m_flow_nominal}, + dp_nominal={0,0,0}) "Junction" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-70,0}))); + Buildings.Fluid.FixedResistances.Junction jun2( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=30, + T_start=T_start, + m_flow_nominal={-m_flow_nominal,-mTan_flow_nominal,m_flow_nominal}, + dp_nominal={0,0,0}) "Junction" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=270, + origin={70,0}))); + +equation + connect(pum.port_b, jun2.port_1) + annotation (Line(points={{20,50},{70,50},{70,10}}, color={0,127,255})); + connect(jun2.port_3, port_b) annotation (Line(points={{80,-1.77636e-15},{90,-1.77636e-15}, + {90,0},{100,0}}, color={0,127,255})); + connect(val.port_a, jun2.port_2) + annotation (Line(points={{20,-30},{70,-30},{70,-10}}, color={0,127,255})); + connect(jun1.port_3, port_a) annotation (Line(points={{-80,5.55112e-16},{-90,5.55112e-16}, + {-90,0},{-100,0}}, color={0,127,255})); + connect(jun1.port_1, val.port_b) + annotation (Line(points={{-70,-10},{-70,-30},{0,-30}}, color={0,127,255})); + connect(pum.y, yPum) + annotation (Line(points={{10,62},{10,70},{-110,70}}, color={0,0,127})); + connect(yVal, val.y) annotation (Line(points={{-110,-70},{-20,-70},{-20,-10},{ + 10,-10},{10,-18}}, color={0,0,127})); + connect(pum.P, PEle) annotation (Line(points={{21,59},{90,59},{90,50},{110,50}}, + color={0,0,127})); + connect(jun1.port_2, cheVal.port_a) + annotation (Line(points={{-70,10},{-70,50},{-40,50}}, color={0,127,255})); + connect(cheVal.port_b, pum.port_a) + annotation (Line(points={{-20,50},{0,50}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model implements a piping connection for reversible mass flow rate between the storage plant +and the district network. +

+", revisions=" + +"), defaultComponentName = "revCon", Icon(graphics={ Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle(extent={{-80,40},{80,-40}}, lineColor={28,108,200}), + Line(points={{-100,0},{-80,0}}, color={28,108,200}), + Ellipse( + extent={{20,60},{60,20}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,-40},{24,-30},{24,-50},{40,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,-40},{56,-30},{56,-50},{40,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{60,40},{40,60},{40,20},{60,40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{80,0},{100,0}}, color={28,108,200}), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={2,44}, + rotation=-90), + Line(points={{-14,50},{-54,50}}, color={0,127,255}), + Line(points={{4,-30},{-36,-30}}, color={0,127,255}), + Polygon( + points={{-2,6},{16,0},{16,12},{-2,6}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={-52,-36}, + rotation=360)})); +end ReversibleConnection; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo new file mode 100644 index 00000000000..ac3c611f23a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/TankBranch.mo @@ -0,0 +1,235 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +model TankBranch "Model of the tank branch of a storage plant" + + extends Buildings.Fluid.Interfaces.PartialFourPort( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal(min=0) + "Nominal mass flow rate" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal(min=0) + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWS_nominal(displayUnit="degC")= + 7+273.15 "Nominal temperature of CHW supply" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWR_nominal(displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return" + annotation(Dialog(group="Nominal values")); + + // Storage tank parameters + parameter Modelica.Units.SI.Volume VTan "Tank volume" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.Length hTan + "Height of tank (without insulation)" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.Length dIns "Thickness of insulation" + annotation(Dialog(group="Tank")); + parameter Modelica.Units.SI.ThermalConductivity kIns=0.04 + "Specific heat conductivity of insulation" + annotation(Dialog(group="Tank")); + parameter Integer nSeg(min=2) = 5 "Number of volume segments" + annotation(Dialog(group="Tank")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Formulation of energy balance" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + parameter Medium.AbsolutePressure p_start = Medium.p_default + "Start value of pressure" + annotation(Dialog(tab = "Initialization")); + parameter Medium.Temperature T_start=T_CHWR_nominal + "Start value of temperature" + annotation(Dialog(tab = "Initialization")); + parameter Modelica.Units.SI.Temperature TFlu_start[nSeg]=T_start*ones(nSeg) + "Initial temperature of the tank segments, with TFlu_start[1] being the top segment" + annotation (Dialog(tab="Initialization")); + parameter Modelica.Units.SI.Time tau=1 "Time constant for mixing" + annotation(Dialog(group="Tank")); + + Buildings.Fluid.Storage.Stratified tan( + redeclare final package Medium = Medium, + final allowFlowReversal=true, + final VTan=VTan, + final hTan=hTan, + final dIns=dIns, + final kIns=kIns, + final nSeg=nSeg, + final energyDynamics=energyDynamics, + final p_start=p_start, + final T_start=T_start, + final TFlu_start=TFlu_start, + final tau=tau, + final m_flow_nominal=mTan_flow_nominal, + show_T=true) "Tank" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Fluid.Sensors.MassFlowRate senFlo( + redeclare final package Medium = Medium, + final allowFlowReversal=true) "Flow rate sensor for the tank," + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-30}))); + Modelica.Blocks.Interfaces.RealOutput mTan_flow( + final quantity="MassFlowRate", + final unit="kg/s") "Mass flow rate of the tank" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,90}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,100}))); + Modelica.Blocks.Interfaces.RealOutput Ql_flow( + final quantity="HeatFlowRate", + final unit="W") + "Heat loss of tank (positive if heat flows from tank to ambient)" + annotation (Placement(transformation(extent={{100,0},{120,20}}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,0}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorTop + "Heat port tank top (outside insulation)" + annotation (Placement(transformation(extent={{-16,34},{-4,46}}), + iconTransformation(extent={{14,34},{26,46}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorSid + "Heat port tank side (outside insulation)" + annotation (Placement(transformation(extent={{4,-26},{16,-14}}), + iconTransformation(extent={{26,-6},{38,6}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorBot + "Heat port tank bottom (outside insulation). Leave unconnected for adiabatic condition" + annotation (Placement(transformation(extent={{-16,-46},{-4,-34}}), + iconTransformation(extent={{14,-46},{26,-34}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[tan.nSeg] heaPorVol + "Heat port that connects to the control volumes of the tank" + annotation (Placement(transformation(extent={{-26,-26},{-14,-14}}), + iconTransformation(extent={{-6,-6},{6,6}}))); + Modelica.Blocks.Interfaces.RealOutput TTan[2]( + each final quantity="Temperature", + each displayUnit="C") "Temperatures at the tank 1: top and 2: bottom" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,-90}), iconTransformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={110,-100}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemTop + "Temperature sensor for tank top" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemBot + "Temperature sensor for tank bottom" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +protected + Buildings.Fluid.FixedResistances.Junction junSup( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_CHWS_nominal, + tau=30, + m_flow_nominal={-mChi_flow_nominal,mTan_flow_nominal,m_flow_nominal}, + dp_nominal={0,0,0}) "Junction on the supply side" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Buildings.Fluid.FixedResistances.Junction junRet( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + T_start=T_CHWR_nominal, + tau=30, + m_flow_nominal={-m_flow_nominal,mChi_flow_nominal,mTan_flow_nominal}, + dp_nominal={0,0,0}) "Junction on the return side" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-50,-60}))); + +equation + connect(senFlo.m_flow, mTan_flow) annotation (Line(points={{-61,-30},{-66,-30}, + {-66,90},{110,90}}, color={0,0,127})); + connect(tan.Ql_flow, Ql_flow) + annotation (Line(points={{11,7.2},{11,10},{110,10}}, + color={0,0,127})); + connect(tan.heaPorTop, heaPorTop) annotation (Line(points={{2,7.4},{2,30},{-10, + 30},{-10,40}},color={191,0,0})); + connect(tan.heaPorSid, heaPorSid) annotation (Line(points={{5.6,0},{5.6,-4},{10, + -4},{10,-20}}, color={191,0,0})); + connect(tan.heaPorBot, heaPorBot) + annotation (Line(points={{2,-7.4},{2,-30},{-10,-30},{-10,-40}}, + color={191,0,0})); + connect(heaPorVol, tan.heaPorVol) annotation (Line(points={{-20,-20},{-20,-4}, + {0,-4},{0,0}}, color={191,0,0})); + connect(junRet.port_3, senFlo.port_a) + annotation (Line(points={{-50,-50},{-50,-40}}, color={0,127,255})); + connect(senFlo.port_b, tan.port_a) + annotation (Line(points={{-50,-20},{-50,0},{-10,0}}, color={0,127,255})); + connect(tan.port_b, junSup.port_3) + annotation (Line(points={{10,0},{50,0},{50,50}}, color={0,127,255})); + connect(tan.heaPorTop, senTemTop.port) + annotation (Line(points={{2,7.4},{2,30},{20,30}}, color={191,0,0})); + connect(tan.heaPorBot, senTemBot.port) + annotation (Line(points={{2,-7.4},{2,-30},{20,-30}}, color={191,0,0})); + connect(senTemTop.T, TTan[1]) annotation (Line(points={{41,30},{70,30},{70,-90}, + {110,-90},{110,-92.5}}, color={0,0,127})); + connect(senTemBot.T, TTan[2]) annotation (Line(points={{41,-30},{70,-30},{70,-87.5}, + {110,-87.5}}, color={0,0,127})); + connect(port_b2, junRet.port_2) + annotation (Line(points={{-100,-60},{-60,-60}}, color={0,127,255})); + connect(junRet.port_1, port_a2) + annotation (Line(points={{-40,-60},{100,-60}}, color={0,127,255})); + connect(junSup.port_2, port_b1) + annotation (Line(points={{60,60},{100,60}}, color={0,127,255})); + connect(junSup.port_1, port_a1) + annotation (Line(points={{40,60},{-100,60}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{-100,-60},{100,-60}}, color={28,108,200}), + Line(points={{-100,60},{100,60}}, color={28,108,200}), + Line(points={{-42,-60}}, color={28,108,200}), + Line(points={{-60,-58},{-60,50},{0,50},{0,-52},{60,-52},{60,60}}, color + ={28,108,200}), + Rectangle( + extent={{-28,40},{32,-40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{38,0},{80,0},{100,0}}, + color={127,0,0}, + pattern=LinePattern.Dot), + Line( + points={{26,-44},{52,-44},{52,0}}, + color={127,0,0}, + pattern=LinePattern.Dot), + Line( + points={{26,44},{52,44},{52,-2}}, + color={127,0,0}, + pattern=LinePattern.Dot)}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}})), + defaultComponentName = "tanBra", + Documentation(info=" +

+This model is part of a storage plant. This branch has a stratified tank. +This tank can potentially be charged remotely by a chiller from the district +CHW network, or by a chiller that is local to the energy transfer station that contains this tank. +

+", revisions=" + +")); +end TankBranch; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo new file mode 100644 index 00000000000..156d6b8207c --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mo @@ -0,0 +1,79 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation; +model IdealUser "Test model for the dummy user" + extends Modelica.Icons.Example; + + package Medium = Buildings.Media.Water "Medium model"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + "Nominal mass flow rate"; + parameter Modelica.Units.SI.PressureDifference dp_nominal=500000 + "Nominal pressure difference"; + parameter Modelica.Units.SI.AbsolutePressure p_Pressurisation=300000 + "Pressurisation point"; + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")=12+273.15 + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")=7+273.15 + "Nominal temperature of CHW supply"; + parameter Boolean allowFlowReversal=false + "Flow reversal setting"; + parameter Modelica.Units.SI.Power QCooLoa_flow_nominal=5*4200*0.9 + "Nominal cooling load of one consumer"; + + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + T_CHWR_nominal=T_CHWR_nominal, + final dp_nominal=dp_nominal) "Ideal user" annotation (Placement( + transformation(extent={{-10,-10},{10,10}}, rotation=0))); + Buildings.Fluid.Sources.Boundary_pT sin( + redeclare final package Medium = Medium, + final p=p_Pressurisation, + final T=T_CHWR_nominal, + nPorts=1) "Sink representing CHW return line" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,-30}))); + Buildings.Fluid.Sources.Boundary_pT sou( + redeclare final package Medium = Medium, + final p=p_Pressurisation+dp_nominal, + final T=T_CHWS_nominal, + nPorts=1) "Source representing CHW supply line" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={-70,30}))); + Modelica.Blocks.Sources.TimeTable mPre_flow(table=[0*3600,0; 0.5*3600,0; 0.5* + 3600,m_flow_nominal; 0.75*3600,m_flow_nominal; 0.75*3600,0; 1*3600,0]) + "Prescribed flow rate representing cooling load" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); +equation + connect(sou.ports[1],ideUse. port_a) annotation (Line(points={{-60,30},{-40, + 30},{-40,6},{-10,6}}, color={0,127,255})); + connect(ideUse.port_b, sin.ports[1]) + annotation (Line(points={{-10,-6},{-40,-6},{-40,-30},{-60,-30}}, + color={0,127,255})); + connect(mPre_flow.y, ideUse.mPre_flow) annotation (Line(points={{-59,70},{-20, + 70},{-20,8},{-11,8}}, color={0,0,127})); +annotation(__Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos" + "Simulate and plot"), +experiment(Tolerance=1e-06, StopTime=3600), Documentation(info=" +

+This is a simple test model for the ideal user. +

+", revisions=" + +")); +end IdealUser; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo new file mode 100644 index 00000000000..9da11f1ef99 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.mo @@ -0,0 +1,7 @@ +within Buildings.Experimental.DHC.Plants.Cooling.BaseClasses; +package Validation "Package containing validation models" + extends Modelica.Icons.ExamplesPackage; + annotation (Documentation(info=" +Package containing validation models for the base classes. +")); +end Validation; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order new file mode 100644 index 00000000000..52432234fee --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/package.order @@ -0,0 +1 @@ +IdealUser diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo new file mode 100644 index 00000000000..1b2cf6c94c0 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.mo @@ -0,0 +1,7 @@ +within Buildings.Experimental.DHC.Plants.Cooling; +package BaseClasses "Package containing base classes" + extends Modelica.Icons.BasesPackage; + annotation (Documentation(info=" +Package containing base classes. +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order new file mode 100644 index 00000000000..01f48590eca --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/BaseClasses/package.order @@ -0,0 +1,6 @@ +IdealUser +ParallelJunctions +ParallelPipes +ReversibleConnection +TankBranch +Validation diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo new file mode 100644 index 00000000000..2aadc504143 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo @@ -0,0 +1,415 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block FlowControl + "This block controls the flow at the primary and secondary pumps" + extends Modelica.Blocks.Icons.Block; + + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal + "Nominal mass flow rate of the chiller loop" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal + "Nominal mass flow rate of the tank branch" + annotation(Dialog(group="Nominal values")); + + parameter Boolean use_outFil=true + "= true, if output is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filter")); + + Modelica.Blocks.Interfaces.IntegerInput com + "Command: 1 = charge tank, 2 = no command, 3 = discharge tank" + annotation (Placement(transformation(extent={{-120,50},{-100,70}}), + iconTransformation(extent={{-120,30},{-100,50}}))); + Modelica.Blocks.Interfaces.BooleanInput chiEnaSta + "Chiller enable status, true if chiller is enabled" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}), + iconTransformation(extent={{-120,-10},{-100,10}}))); + Modelica.Blocks.Interfaces.BooleanInput hasLoa "Set to true if there is a load" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}), + iconTransformation(extent={{-120,-50},{-100,-30}}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for the secondary pump" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,130}),iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,80}))); + + Modelica.Blocks.Interfaces.RealOutput yVal "Valve normalized mass flow rate" + annotation (Placement(transformation(extent={{780,-80},{800,-60}}), + iconTransformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput mPriPum_flow(final unit="kg/s") + "Primary pump mass flow rate" + annotation (Placement(transformation(extent={{780,40},{800,60}}), + iconTransformation(extent={{100,70},{120,90}}))); + Modelica.Blocks.Interfaces.RealOutput ySecPum(final unit="1") + "Secondary pump normalized speed" annotation (Placement(transformation( + extent={{780,-20},{800,0}}), iconTransformation(extent={{100,30},{120, + 50}}))); + inner Modelica.StateGraph.StateGraphRoot stateGraphRoot "State graph root" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Modelica.StateGraph.InitialStep allOff(nOut=1, nIn=1) "Initial step, all off" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); + + Modelica.StateGraph.Transition traChaLoc(condition=com == 1 and (not tanSta[2]) + and chiEnaSta) + "Transition: Charge tank command AND tank not charged AND chiller enabled" + annotation (Placement(transformation(extent={{260,60},{280,80}}))); + Modelica.StateGraph.Step steChaLoc(nIn=1, nOut=1) "Step: Local charging" + annotation (Placement(transformation(extent={{300,60},{320,80}}))); + Modelica.StateGraph.Transition traRes1(condition=not traChaLoc.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,60},{360,80}}))); + Modelica.StateGraph.Transition traChaRem(condition=com == 1 and (not tanSta[2]) + and not chiEnaSta) + "Transition: Charge tank command AND tank not charged AND chiller not enabled" + annotation (Placement(transformation(extent={{260,20},{280,40}}))); + Modelica.StateGraph.Step steChaRem(nIn=1, nOut=1) "Step: Remote charging" + annotation (Placement(transformation(extent={{300,20},{320,40}}))); + Modelica.StateGraph.Transition traRes2(condition=not traChaRem.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,20},{360,40}}))); + Modelica.StateGraph.Transition traProChi(condition=chiEnaSta) + "Transition: Chiller enabled" + annotation (Placement(transformation(extent={{260,-160},{280,-140}}))); + Modelica.StateGraph.Step steProChi(nIn=2, nOut=2) + "Step: Chiller produces CHW" + annotation (Placement(transformation(extent={{300,-160},{320,-140}}))); + Modelica.StateGraph.Transition traRes4(condition=not traPro.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,-160},{360,-140}}))); + Modelica.StateGraph.Transition traProTan(condition=com == 3 and (not tanSta[1])) + "Transition: Tank commanded to discharge AND is not empty" + annotation (Placement(transformation(extent={{260,-80},{280,-60}}))); + Modelica.StateGraph.Step steProTan(nIn=2, nOut=2) "Step: Tank produces CHW" + annotation (Placement(transformation(extent={{300,-80},{320,-60}}))); + Modelica.StateGraph.Transition traRes3(condition=not traPro.condition) + "Transition: Reset to initial step" + annotation (Placement(transformation(extent={{340,-80},{360,-60}}))); + Modelica.Blocks.Sources.BooleanExpression expPriPumFlo( + y=steChaLoc.active or steProChi.active) + "Expression for local charging OR chiller output" + annotation (Placement(transformation(extent={{700,40},{720,60}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal swiPriPum(realTrue= + mChi_flow_nominal, realFalse=0) "Switch for primary pump flow" + annotation (Placement(transformation(extent={{740,40},{760,60}}))); + Modelica.Blocks.Sources.BooleanExpression expSecPum(y=stePumSecOn.active) + "Expression for tank output or chiller output" + annotation (Placement(transformation(extent={{700,-20},{720,0}}))); + Modelica.Blocks.Sources.BooleanExpression expVal(y=steChaRem.active) + "Boolean expression for remotely charging the tank" + annotation (Placement(transformation(extent={{700,-80},{720,-60}}))); + Modelica.StateGraph.Alternative alt(nBranches=3) + "Alternative: Tank charging or plant outputting CHW" + annotation (Placement(transformation(extent={{-8,-200},{646,100}}))); + + Buildings.Controls.OBC.CDL.Continuous.Switch swiSecPum + "Switch for secondary pump flow" + annotation (Placement(transformation(extent={{740,-20},{760,0}}))); + Modelica.Blocks.Sources.Constant zer(final k=0) "Constant zero" + annotation (Placement(transformation(extent={{700,-50},{720,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal swiVal(realTrue= + mTan_flow_nominal, realFalse=0) "Switch for valve flow" + annotation (Placement(transformation(extent={{740,-80},{760,-60}}))); + Modelica.Blocks.Interfaces.BooleanInput tanSta[2] + "Tank status - 1: is empty; 2: is charged; can be both false" annotation ( + Placement(transformation(extent={{-120,-130},{-100,-110}}), + iconTransformation(extent={{-120,-90},{-100,-70}}))); + Modelica.StateGraph.Step stePumSecOn(nOut=1, nIn=1) "Step: Secondary pump on" + annotation (Placement(transformation(extent={{300,-40},{320,-20}}))); + Modelica.StateGraph.Transition traPro(condition=hasLoa and (traProTan.condition + or traProChi.condition)) + "Transition: Has load and the plant can produce CHW via either the chiller or the tank" + annotation (Placement(transformation(extent={{80,-100},{100,-80}}))); + Modelica.StateGraph.Parallel parallel(nBranches=2) + "Parallel states of the components in the primary and secondary loops" + annotation (Placement(transformation(extent={{116,-174},{510,-6}}))); + Modelica.StateGraph.Transition traTanToChi(condition=(not traProTan.condition) + and traProChi.condition) + "Transition: Tank no longer available (empty or commanded off) AND chiller available" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={280,-110}))); + Modelica.StateGraph.Alternative altTanCha1(nBranches=2) + "Alternative: Tank charging locally or remotely" + annotation (Placement(transformation(extent={{222,-170},{398,-50}}))); + Modelica.StateGraph.Step steRou1(nIn=1, nOut=1) "A step for routing only" + annotation (Placement(transformation(extent={{180,-120},{200,-100}}))); + Modelica.StateGraph.Step steRou2(nIn=1, nOut=1) "A step for routing only" + annotation (Placement(transformation(extent={{420,-120},{440,-100}}))); + Modelica.StateGraph.Transition traRou(final condition=true) + "A routing transition, always true" + annotation (Placement(transformation(extent={{540,-100},{560,-80}}))); + Modelica.StateGraph.Transition traChiToTan(condition=traProTan.condition) + "Transition: Production priority handed to tank whenever possible" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={340,-110}))); + Modelica.Blocks.Interfaces.BooleanOutput isChaRem + "Is operated for remote charging" annotation (Placement(transformation( + extent={{780,-140},{800,-120}}), iconTransformation(extent={{100,-50}, + {120,-30}}))); + Modelica.Blocks.Sources.BooleanExpression booleanExpression(y=steChaRem.active) + annotation (Placement(transformation(extent={{700,-140},{720,-120}}))); +equation + connect(traChaLoc.outPort,steChaLoc. inPort[1]) + annotation (Line(points={{271.5,70},{299,70}}, color={0,0,0})); + connect(steChaLoc.outPort[1], traRes1.inPort) + annotation (Line(points={{320.5,70},{346,70}}, color={0,0,0})); + connect(traChaRem.outPort,steChaRem. inPort[1]) + annotation (Line(points={{271.5,30},{299,30}}, color={0,0,0})); + connect(steChaRem.outPort[1], traRes2.inPort) + annotation (Line(points={{320.5,30},{346,30}}, color={0,0,0})); + connect(traProChi.outPort,steProChi. inPort[1]) + annotation (Line(points={{271.5,-150},{286,-150},{286,-150.25},{299,-150.25}}, + color={0,0,0})); + connect(traProTan.outPort,steProTan. inPort[1]) + annotation (Line(points={{271.5,-70},{286,-70},{286,-70.25},{299,-70.25}}, + color={0,0,0})); + connect(expPriPumFlo.y, swiPriPum.u) + annotation (Line(points={{721,50},{738,50}}, color={255,0,255})); + connect(alt.inPort, allOff.outPort[1]) + annotation (Line(points={{-17.81,-50},{-39.5,-50}}, + color={0,0,0})); + connect(alt.outPort, allOff.inPort[1]) annotation (Line(points={{652.54,-50},{ + 652.54,114},{-80,114},{-80,-50},{-61,-50}}, + color={0,0,0})); + connect(mPriPum_flow, swiPriPum.y) + annotation (Line(points={{790,50},{762,50}}, color={0,0,127})); + connect(expSecPum.y, swiSecPum.u2) + annotation (Line(points={{721,-10},{738,-10}}, color={255,0,255})); + connect(swiSecPum.u1, yPum) annotation (Line(points={{738,-2},{730,-2},{730, + 20},{680,20},{680,130},{-110,130}}, color={0,0, + 127})); + connect(ySecPum, swiSecPum.y) + annotation (Line(points={{790,-10},{762,-10}}, color={0,0,127})); + connect(zer.y, swiSecPum.u3) + annotation (Line(points={{721,-40},{738,-40},{738,-18}}, color={0,0,127})); + connect(swiVal.u, expVal.y) + annotation (Line(points={{738,-70},{721,-70}}, color={255,0,255})); + connect(swiVal.y, yVal) + annotation (Line(points={{762,-70},{790,-70}}, color={0,0,127})); + connect(traPro.outPort, parallel.inPort) + annotation (Line(points={{91.5,-90},{110.09,-90}},color={0,0,0})); + connect(parallel.split[1], stePumSecOn.inPort[1]) annotation (Line(points={{160.325, + -111},{160.325,-70},{160,-70},{160,-30},{299,-30}}, + color={0,0,0})); + connect(stePumSecOn.outPort[1], parallel.join[1]) annotation (Line(points={{320.5, + -30},{466,-30},{466,-111},{465.675,-111}}, color={0,0,0})); + connect(traTanToChi.outPort, steProChi.inPort[2]) annotation (Line(points={{280, + -111.5},{280,-149.75},{299,-149.75}}, color={0,0,0})); + connect(traProTan.inPort, altTanCha1.split[1]) annotation (Line(points={{266,-70}, + {240,-70},{240,-98},{240.48,-98},{240.48,-125}}, + color={0,0,0})); + connect(traRes3.outPort, altTanCha1.join[1]) annotation (Line(points={{351.5,-70}, + {379.52,-70},{379.52,-125}}, color={0,0,0})); + connect(traProChi.inPort, altTanCha1.split[2]) annotation (Line(points={{266,-150}, + {240,-150},{240,-106},{240.48,-106},{240.48,-95}}, + color={0,0,0})); + connect(traRes4.outPort, altTanCha1.join[2]) annotation (Line(points={{351.5,-150}, + {379.52,-150},{379.52,-95}}, color={0,0, + 0})); + connect(steRou1.outPort[1], altTanCha1.inPort) + annotation (Line(points={{200.5,-110},{219.36,-110}}, color={0,0,0})); + connect(altTanCha1.outPort,steRou2. inPort[1]) + annotation (Line(points={{399.76,-110},{419,-110}}, color={0,0,0})); + connect(steRou1.inPort[1], parallel.split[2]) annotation (Line(points={{179,-110}, + {160,-110},{160,-70},{160.325,-70},{160.325,-69}}, color={0,0,0})); + connect(steRou2.outPort[1], parallel.join[2]) annotation (Line(points={{440.5, + -110},{465.675,-110},{465.675,-69}}, color={0,0,0})); + connect(parallel.outPort, traRou.inPort) + annotation (Line(points={{513.94,-90},{546,-90}}, color={0,0,0})); + connect(traChaLoc.inPort, alt.split[1]) annotation (Line(points={{266,70},{60, + 70},{60,-100},{60.67,-100}}, color={0,0,0})); + connect(traChaRem.inPort, alt.split[2]) annotation (Line(points={{266,30},{60.67, + 30},{60.67,-50}}, color={0,0,0})); + connect(traRes1.outPort, alt.join[1]) annotation (Line(points={{351.5,70},{578, + 70},{578,-100},{577.33,-100}}, color={0,0,0})); + connect(traRes2.outPort, alt.join[2]) annotation (Line(points={{351.5,30},{577.33, + 30},{577.33,-50}}, color={0,0,0})); + connect(traPro.inPort, alt.split[3]) annotation (Line(points={{86,-90},{60.67, + -90},{60.67,1.42109e-14}}, + color={0,0,0})); + connect(traRou.outPort, alt.join[3]) annotation (Line(points={{551.5,-90},{576, + -90},{576,1.42109e-14},{577.33,1.42109e-14}}, + color={0,0,0})); + connect(booleanExpression.y, isChaRem) + annotation (Line(points={{721,-130},{790,-130}}, color={255,0,255})); + connect(traChiToTan.outPort, steProTan.inPort[2]) annotation (Line(points={{ + 340,-108.5},{340,-90},{290,-90},{290,-69.75},{299,-69.75}}, color={0, + 0,0})); + connect(steProChi.outPort[1], traChiToTan.inPort) annotation (Line(points={{ + 320.5,-150.125},{320.5,-150},{340,-150},{340,-114}}, color={0,0,0})); + connect(steProChi.outPort[2], traRes4.inPort) annotation (Line(points={{320.5, + -149.875},{334,-149.875},{334,-150},{346,-150}}, color={0,0,0})); + connect(steProTan.outPort[1], traTanToChi.inPort) annotation (Line(points={{ + 320.5,-70.125},{320.5,-70},{330,-70},{330,-96},{280,-96},{280,-106}}, + color={0,0,0})); + connect(steProTan.outPort[2], traRes3.inPort) annotation (Line(points={{320.5, + -69.875},{334,-69.875},{334,-70},{346,-70}}, color={0,0,0})); + annotation (Diagram(coordinateSystem(extent={{-100,-220},{780,140}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ + Rectangle(extent={{-20,80},{20,40}}, lineColor={28,108,200}), + Line(points={{-40,-20},{-40,20},{40,20},{40,-20}}, color={28,108,200}), + Line(points={{0,40},{0,20}}, color={28,108,200}), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={34,-16}, + rotation=180), + Polygon( + points={{-6,2},{2.74617e-16,-16},{-12,-16},{-6,2}}, + lineColor={28,108,200}, + lineThickness=1, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + origin={-46,-16}, + rotation=180), + Rectangle( + extent={{-80,-38},{80,-42}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{20,-20},{60,-60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{58,-40},{40,-20},{40,-60},{58,-40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,-20},{-20,-60}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{-22,-40},{-40,-20},{-40,-60},{-22,-40}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,-42},{2,-80}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), +Documentation(info=" +

+This block implements a state graph to control the flows of the storage plant. +It receives two tank status Boolean signals indicating that the tank +is charged or empty. These two signals can be both false indicating an +in-between state. The block can receive one of the following commands: +

+
    +
  1. +Charge tank, +
  2. +
  3. +No command, and +
  4. +
  5. +Discharge tank. +
  6. +
+

+The command to tank may be disregarded. For example, if the +tank is receiving a discharge command but it is already empty, it will not +discharge which would let warm return water directly into the supply side. +

+

+The system transitions among the following states: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionTransition inTransition out
All Off
(Initial Step)
All off. This is the initial step.--
Local ChargingCharge the tank with the local chiller.\"Charge tank\" command
AND tank is not charged yet
AND chiller is enabled.
This transition takes priority
over the one below.1
The in-transition condition becomes false.
Remote ChargingCharge the tank with the remote chiller.Same as above except that
the chiller is not enabled.
The in-transition condition becomes false.
Secondary Pump OnTurn on the secondary pump.
This step is in parallel with the two below.2
The district has load AND
the additional conditions of
either step below become true.
Both steps below are no longer active (implicit).
Tank ProducingThe tank produces CHW to the district.
This step is in parallel with \"secondary pump on\".
The district has load AND
\"Discharge tank\" command AND
tank not empty.
This transition takes priority
over the one below.
To \"chiller producing\": The in-transition condition becomes false AND
The chiller is enabled.
This transition takes priority over the one below.
To initial step: No load OR the in-transition conditions
of \"tank producing\" and \"chiller producing\" are both false
(i.e. neither tank or chiller is available).
Chiller ProducingThe chiller produces CHW to the district.
This step is in parallel with \"secondary pump on\".
The district has load AND
the chiller is enabled.
To \"tank producing\": The condition for in-transition of
\"tank producing\" becomes true.
This transition takes priority over the one below.
To initial step: No load OR the in-transition conditions
of \"tank producing\" and \"chiller producing\" are both false.
+

+Notes: +

+
    +
  1. +Out-transitions from the same step have priorities. When the conditions of +more than one of them become true, the transition connected by a connector +with the lowest index in the array fires. +For example, even when the in-transition condition of \"chiller producing\" +becomes true, as long as the in-transition condition of \"tank producing\" +is also true, the latter fires because of priority. +
  2. +
  3. +Steps that are in parallel are and must be active at the same time. +When \"secondary pump on\" is active, either \"tank producing\" +or \"chiller producing\" is also active. +
  4. +
+", revisions=" + +")); +end FlowControl; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo new file mode 100644 index 00000000000..25f67a144d9 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/SelectMin.mo @@ -0,0 +1,51 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block SelectMin + "Block that includes or excludes storage plant pressure signal for min" + extends Modelica.Blocks.Icons.Block; + parameter Integer nin + "Number of input connections" + annotation (Dialog(connectorSizing=true),HideResult=true); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpUse[nin] + "Connector of Real input signals" annotation (Placement(transformation( + extent={{-120,60},{-100,40}}), iconTransformation(extent={{-140,80},{-100, + 40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpStoPla + "Connector of Real input signals" annotation (Placement(transformation( + extent={{-120,10},{-100,-10}}), iconTransformation(extent={{-140,20},{ + -100,-20}}))); + Modelica.Blocks.Interfaces.BooleanInput isChaRem + "The storage plant is in remote charging mode" annotation (Placement( + transformation(extent={{-120,-60},{-100,-40}}), iconTransformation( + extent={{-120,-70},{-100,-50}}))); + Modelica.Blocks.Interfaces.RealOutput y annotation (Placement(transformation( + extent={{100,-10},{120,10}}), iconTransformation(extent={{100,-10},{120, + 10}}))); +equation + y = if isChaRem then + min(min(dpUse),dpStoPla) + else + min(dpUse); +annotation(defaultComponentName="selMin", + Icon(graphics={Line( + points={{-80,60},{-60,40},{-20,80}}, + color={0,140,72}, + thickness=5), Text( + extent={{-78,2},{-20,-78}}, + textColor={28,108,200}, + textString="?")}), + Documentation(info=" +

+This block finds the minimum value from pressure head signals. +The signal from the storage plant is included +only when the plant is in remote charging mode. +

+", revisions=" + +")); +end SelectMin; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo new file mode 100644 index 00000000000..9a1521c2b8d --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo @@ -0,0 +1,120 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls; +block TankStatus "Returns the tank status from its temperature sensors" + + parameter Modelica.Units.SI.Temperature THig + "Higher threshold to consider the tank empty"; + parameter Modelica.Units.SI.Temperature TLow + "Lower threshold to consider the tank full"; + + parameter Modelica.Units.SI.TemperatureDifference dTHys(min=0.1) = 0.5 + "Deadband for hysteresis"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTan[2]( + each final quantity="Temperature", + each final unit="K", + each displayUnit="degC") "Temperatures at the tank 1: top; and 2: bottom" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,0}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,0}))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysCha( + final uLow=TLow, + final uHigh=TLow + dTHys) "Hysteresis, tank charged" + annotation (Placement(visible = true, transformation(origin = {0, 50}, extent = {{-40, -60}, {-20, -40}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysEmp( + final uHigh=THig, + final uLow=THig - dTHys) "Hysteresis, tank empty" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "Not block" + annotation (Placement(visible = true, transformation(origin = {0, 50}, extent = {{20, -60}, {40, -40}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y[2] + "Tank status - y[1]=true is empty; y[2] = true is charged; both false means partially charged" + annotation (Placement(transformation(extent={{100,-10},{120,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanTopChe( + final k(final unit="K", displayUnit="degC") = THig) "Set point for top temperatuer of tank" + annotation( + Placement(visible = true, transformation(origin = {-70, -30}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanBotChe( + final k(final unit="K", displayUnit="degC") = TLow) "Set point for bottom temperature of tank" + annotation( + Placement(visible = true, transformation(origin = {-70, -70}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Continuous.Greater gre + "Test for temperature set points" + annotation( + Placement(visible = true, transformation(origin = {-30, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); + Buildings.Controls.OBC.CDL.Utilities.Assert assMes( + message = "THig must be greater than TLow.") + "Assertion if temperature set points are not correct" + annotation( + Placement(visible = true, transformation(origin = {10, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); +equation + connect(hysCha.y, not1.u) + annotation (Line(points={{-18,0},{18,0}}, + color={255,0,255})); + connect(TTan[1],hysCha. u) annotation (Line(points={{-110,-2.5},{-52,-2.5},{-52, + 0},{-42,0}}, color={0,0,127})); + connect(TTan[2],hysEmp. u) annotation (Line(points={{-110,2.5},{-52,2.5},{-52, + 50},{-42,50}}, + color={0,0,127})); + connect(hysEmp.y, y[1]) annotation (Line(points={{-18,50},{60,50},{60,0},{110, + 0},{110,-2.5}}, color={255,0,255})); + connect(not1.y, y[2]) annotation (Line(points={{42,0},{60,0},{60,2.5},{110, + 2.5}}, color={255,0,255})); + connect(TTanTopChe.y, gre.u1) annotation( + Line(points = {{-58, -30}, {-50, -30}, {-50, -50}, {-42, -50}}, color = {0, 0, 127})); + connect(TTanBotChe.y, gre.u2) annotation( + Line(points = {{-58, -70}, {-52, -70}, {-52, -58}, {-42, -58}}, color = {0, 0, 127})); + connect(gre.y, assMes.u) annotation( + Line(points = {{-18, -50}, {-2, -50}}, color = {255, 0, 255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-42,72},{40,-72}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-30,-64},{28,-28}}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-30,-20},{28,16}}, + fillColor={28,108,200}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-24,54},{22,30}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None)}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + defaultComponentName="tanSta", + Documentation(info=" +

+This model outputs tank status signals using the temperatures +at the CHW tank top and the tank bottom as input. +The status has two separate boolean signals indicating whether the tank is +charged or empty (of cooling). The two output signals can be both false, +indicating an in-between state, but they can never both be true. +

+", +revisions=" + +")); +end TankStatus; \ No newline at end of file diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo new file mode 100644 index 00000000000..0b6d1af89ab --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo @@ -0,0 +1,47 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation; +model TankStatus "Validation model for tank status controller" + extends Modelica.Icons.Example; + Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus tanSta( + TLow=280.15, + THig=286.15, + dTHys=1) "Tank status" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanBot( + table=[0,273.15 + 11; 0.25,273.15 + 13.5; 0.5,273.15 + 12.5; 0.75,273.15 + 13.5; 1,273.15 + 11]) + "Temperature at tank bottom" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanTop( + table=[0,273.15 + 9; 0.25,273.15 + 6.5; + 0.5,273.15 + 7.5; 0.75,273.15 + 6.5; 1,273.15 + 9]) + "Temperature at tank top" + annotation (Placement(visible = true, transformation(origin = {0, 0}, extent = {{-60, 20}, {-40, 40}}, rotation = 0))); +equation + connect(TTanTop.y[1], tanSta.TTan[1]) annotation (Line(points={{-38,30},{-6,30},{ + -6,9.75},{-1,9.75}}, color={0,0,127})); + connect(TTanBot.y[1], tanSta.TTan[2]) annotation (Line(points={{-39,-10},{-6,-10}, + {-6,10.25},{-1,10.25}}, color={0,0,127})); + annotation(experiment(Tolerance=1e-6, StopTime=1), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos" + "Simulate and Plot"), + Documentation( + revisions=" + +", + info=" +

+This model validates + +Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus. +Note that the output signals turn true as soon as their respective temperature +input crosses the threshold, but there is a delay for it to turn back to +false due to the hysteresis. +

+")); +end TankStatus; \ No newline at end of file diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order index 2eb6ae6fd99..ee4df749a4e 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/package.order @@ -1,3 +1,4 @@ ChilledWaterBypass ChilledWaterPumpSpeed ChillerStage +TankStatus diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order index 25b544f937e..a72639ce742 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/package.order @@ -1,4 +1,7 @@ ChilledWaterBypass ChilledWaterPumpSpeed ChillerStage +FlowControl +SelectMin +TankStatus Validation diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo new file mode 100644 index 00000000000..7c11ce6196f --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo @@ -0,0 +1,437 @@ +within Buildings.Experimental.DHC.Plants.Cooling.Examples; +model StoragePlantDualSource + "Idealised district system model with two sources and three users" + extends Modelica.Icons.Example; + + package Medium = Buildings.Media.Water "Medium model for CHW"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + "Nominal mass flow rate, slightly larger than needed by one user load"; + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal=1 + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal=1 + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final displayUnit="Pa")= + 300000 + "Nominal pressure difference"; + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return"; + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")= + 7+273.15 + "Nominal temperature of CHW supply"; + +// First plant: chiller only + Buildings.Fluid.Sources.PropertySource_T chi1( + redeclare final package Medium = Medium, + final use_T_in=true) "Chiller 1 represented by an ideal temperature source" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-128,70}))); + Modelica.Blocks.Sources.Constant TSet1(k=T_CHWS_nominal) + "Constant CHW leaving temperature" + annotation (Placement(transformation(extent={{-178,56},{-158,76}}))); + Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumSup1( + redeclare final package Medium = Medium, + final addPowerToMedium=false, + final m_flow_nominal=m_flow_nominal, + final dp_nominal=dp_nominal) "CHW supply pump for chi1" + annotation (Placement(transformation(extent={{-110,82},{-90,102}}))); + Buildings.Controls.Continuous.LimPID conPI_pumChi1( + final controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=0.2, + Ti=10, + final reverseActing=true) "PI controller" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={-130,150}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.SelectMin selMin_dp(nin=3) + "Min of pressure heads with the signal from storage plant optionally used" + annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); + +// Second plant: chiller and tank + Buildings.Experimental.DHC.Plants.Cooling.StoragePlant stoPla(redeclare + final package Medium = Medium, + mTan_flow_nominal=mTan_flow_nominal, + mChi_flow_nominal=mChi_flow_nominal, + dpPum_nominal=dp_nominal, + dpVal_nominal=0.5*dp_nominal, + T_CHWS_nominal=T_CHWS_nominal, + T_CHWR_nominal=T_CHWR_nominal) "Storage plant" annotation ( + Placement(transformation(rotation=0, extent={{-98,-100},{-78,-80}}))); + Buildings.Fluid.Sources.Boundary_pT bou( + p(final displayUnit="Pa") = 101325 + dp_nominal, + redeclare final package Medium = Medium, + nPorts=1) "Pressure boundary" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-88,-130}))); + Buildings.Fluid.Sources.PropertySource_T chi2( + redeclare final package Medium = Medium, + final use_T_in=true) "Chiller represented by an ideal temperature source" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-128,-90}))); + Modelica.Blocks.Sources.Constant TSet2(final k=T_CHWS_nominal) + "Constant CHW leaving temperature" + annotation (Placement(transformation(extent={{-180,-104},{-160,-84}}))); + Modelica.Blocks.Math.Gain gaiStoPla(final k=1/stoPla.dpVal_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-222,110}))); + +// Users + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse1( + redeclare final package Medium = Medium, + final m_flow_nominal=0.6*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,150}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse2( + redeclare final package Medium = Medium, + final m_flow_nominal=0.65*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser ideUse3( + redeclare final package Medium = Medium, + final m_flow_nominal=0.65*m_flow_nominal, + dp_nominal=0.2*dp_nominal, + final T_CHWR_nominal=T_CHWR_nominal) "Ideal user" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-170}))); + Modelica.Blocks.Sources.Constant set_dpUse(final k=1) + "Normalized consumer differential pressure setpoint" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={-170,150}))); + Modelica.Blocks.Sources.TimeTable mLoa1_flow(table=[0,0; 1800,0; 1800,ideUse1.m_flow_nominal; + 7000,ideUse1.m_flow_nominal; 7000,0; 9000,0]) + "Cooling load of user 1 represented by flow rate" + annotation (Placement(transformation(extent={{80,180},{100,200}}))); + Modelica.Blocks.Sources.TimeTable mLoa2_flow(table=[0,0; 3500,0; 3500,ideUse2.m_flow_nominal; + 6500,ideUse2.m_flow_nominal; 6500,0; 9000,0]) + "Cooling load of user 2 represented by flow rate" + annotation (Placement(transformation(extent={{80,20},{100,40}}))); + Modelica.Blocks.Sources.TimeTable mLoa3_flow(table=[0,0; 4500,0; 4500,ideUse3.m_flow_nominal; + 6000,ideUse3.m_flow_nominal; 6000,0; 9000,0]) + "Cooling load of user 3 represented by flow rate" + annotation (Placement(transformation(extent={{80,-140},{100,-120}}))); + Modelica.Blocks.Math.Gain gaiUse1(final k=1/ideUse1.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,154}))); + Modelica.Blocks.Math.Gain gaiUse2(final k=1/ideUse2.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,-6}))); + Modelica.Blocks.Math.Gain gaiUse3(final k=1/ideUse3.dp_nominal) + "Gain to normalise dp measurement" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={202,-166}))); + +// District pipe network + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunPla1( + redeclare final package Medium = Medium, + T1_start=T_CHWS_nominal, + T2_start=T_CHWR_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={10,70}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunUse2( + redeclare final package Medium = Medium, + T1_start=T_CHWR_nominal, + T2_start=T_CHWS_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={10,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions + parJunPla2( + redeclare final package Medium = Medium, + T1_start=T_CHWS_nominal, + T2_start=T_CHWR_nominal, + m_flow_nominal = 2*m_flow_nominal) + "Parallel junctions for breaking algebraic loops" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={10,-90}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS1U1( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,110}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS1U2( + redeclare package Medium = Medium, + m_flow_nominal=2*m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,30}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS2U2( + redeclare package Medium = Medium, + m_flow_nominal=2*m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,-50}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes + parPipS2U3( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dp_nominal=0.15*dp_nominal) "Parallel pipes" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={10,-130}))); + + Modelica.Blocks.Routing.Multiplex muxDp(n=3) "Multiplexer block for routing" + annotation (Placement(transformation(extent={{238,140},{258,160}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMax mulMax_yVal_actual(nin=3) + "Position of the most open user control valve" + annotation (Placement(transformation(extent={{200,-220},{220,-200}}))); + Modelica.Blocks.Sources.IntegerTable com(table=[0,2; 200,1; 3000,2; 4000,3; + 6000,2; 7500,1]) + "Command: 1 = charge tank, 2 = no command, 3 = discharge from tank" + annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); + Modelica.Blocks.Sources.BooleanTable chiEnaSta(table={0,6000}, startValue= + false) "Chiller enable status, true if chiller is enabled" + annotation (Placement(transformation(extent={{-138,-60},{-118,-40}}))); + Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys_yVal_actual(uLow=0.05, + uHigh=0.5) "Hysteresis for user control valve position" + annotation (Placement(transformation(extent={{240,-220},{260,-200}}))); + +equation + connect(set_dpUse.y,conPI_pumChi1.u_s) + annotation (Line(points={{-159,150},{-142,150}}, + color={0,0,127})); + connect(mLoa1_flow.y, ideUse1.mPre_flow) annotation (Line(points={{101,190},{110, + 190},{110,158},{119,158}}, + color={0,0,127})); + connect(mLoa2_flow.y, ideUse2.mPre_flow) annotation (Line(points={{101,30},{110, + 30},{110,-2},{119,-2}}, + color={0,0,127})); + connect(mLoa3_flow.y, ideUse3.mPre_flow) annotation (Line(points={{101,-130},{ + 110,-130},{110,-162},{119,-162}}, + color={0,0,127})); + connect(ideUse1.dp, gaiUse1.u) annotation (Line(points={{141,154},{190,154}}, + color={0,0,127})); + connect(ideUse2.dp, gaiUse2.u) annotation (Line(points={{141,-6},{190,-6}}, + color={0,0,127})); + connect(ideUse3.dp, gaiUse3.u) annotation (Line(points={{141,-166},{190,-166}}, + color={0,0,127})); + connect(parJunUse2.port_c2, ideUse2.port_a) annotation (Line(points={{20,-4},{ + 120,-4}}, color={0,127,255})); + connect(ideUse2.port_b,parJunUse2.port_c1) annotation (Line(points={{120,-16}, + {20,-16}}, color={0,127,255})); + connect(parPipS1U1.port_b2, parJunPla1.port_a1) + annotation (Line(points={{4,100},{4,80}}, color={0,127,255})); + connect(parJunPla1.port_b2, parPipS1U1.port_a1) + annotation (Line(points={{16,80},{16,100}}, color={0,127,255})); + connect(parJunPla1.port_b1, parPipS1U2.port_a2) + annotation (Line(points={{4,60},{4,40}}, color={0,127,255})); + connect(parPipS1U2.port_b2, parJunUse2.port_a2) + annotation (Line(points={{4,20},{4,0}}, color={0,127,255})); + connect(parJunUse2.port_b1, parPipS1U2.port_a1) + annotation (Line(points={{16,0},{16,20}}, color={0,127,255})); + connect(parPipS1U2.port_b1, parJunPla1.port_a2) + annotation (Line(points={{16,40},{16,60}}, color={0,127,255})); + connect(parJunUse2.port_b2, parPipS2U2.port_a2) + annotation (Line(points={{4,-20},{4,-40}}, color={0,127,255})); + connect(parPipS2U2.port_b1, parJunUse2.port_a1) + annotation (Line(points={{16,-40},{16,-20}}, color={0,127,255})); + connect(parPipS2U2.port_a1, parJunPla2.port_b2) + annotation (Line(points={{16,-60},{16,-80}}, color={0,127,255})); + connect(parJunPla2.port_a1, parPipS2U2.port_b2) + annotation (Line(points={{4,-80},{4,-60}}, color={0,127,255})); + connect(parPipS2U3.port_a2, parJunPla2.port_b1) + annotation (Line(points={{4,-120},{4,-100}}, color={0,127,255})); + connect(parJunPla2.port_a2, parPipS2U3.port_b1) + annotation (Line(points={{16,-100},{16,-120}}, color={0,127,255})); + connect(gaiUse1.y, muxDp.u[1]) annotation (Line(points={{213,154},{220,154},{ + 220,147.667},{238,147.667}}, + color={0,0,127})); + connect(gaiUse2.y, muxDp.u[2]) annotation (Line(points={{213,-6},{220,-6},{220, + 150},{238,150}}, color={0,0,127})); + connect(gaiUse3.y, muxDp.u[3]) annotation (Line(points={{213,-166},{220,-166}, + {220,152.333},{238,152.333}}, color={0,0,127})); + connect(ideUse1.yVal_actual, mulMax_yVal_actual.u[1]) annotation (Line(points={{141,158}, + {160,158},{160,-210},{180,-210},{180,-210.667},{198,-210.667}}, + color={0,0,127})); + connect(ideUse2.yVal_actual, mulMax_yVal_actual.u[2]) annotation (Line(points + ={{141,-2},{160,-2},{160,-210},{198,-210}}, color={0,0,127})); + connect(ideUse3.yVal_actual, mulMax_yVal_actual.u[3]) annotation (Line(points={{141, + -162},{160,-162},{160,-210},{180,-210},{180,-209.333},{198,-209.333}}, + color={0,0,127})); + connect(com.y, stoPla.com) annotation (Line(points={{-119,-20},{-86,-20},{-86, + -79}}, color={255,127,0})); + connect(chiEnaSta.y, stoPla.chiEnaSta) annotation (Line(points={{-117,-50},{-90, + -50},{-90,-79}}, color={255,0,255})); + connect(hys_yVal_actual.y, stoPla.hasLoa) annotation (Line(points={{262,-210}, + {262,-228},{-186,-228},{-186,-68},{-94,-68},{-94,-79}}, + color={255,0,255})); + connect(pumSup1.port_b, parJunPla1.port_c1) annotation (Line(points={{-90,92}, + {-80,92},{-80,76},{1.77636e-15,76}}, + color={0,127,255})); + connect(conPI_pumChi1.y, pumSup1.y) + annotation (Line(points={{-119,150},{-100,150},{-100,104}}, + color={0,0,127})); + connect(conPI_pumChi1.y, stoPla.yPum) annotation (Line(points={{-119,150},{-70, + 150},{-70,-70},{-82,-70},{-82,-79}}, + color={0,0,127})); + connect(pumSup1.port_a, chi1.port_b) + annotation (Line(points={{-110,92},{-128,92},{-128,80}}, + color={0,127,255})); + connect(chi1.port_a, parJunPla1.port_c2) annotation (Line(points={{-128,60},{-128, + 54},{-80,54},{-80,64},{-1.77636e-15,64}}, + color={0,127,255})); + connect(TSet1.y, chi1.T_in) annotation (Line(points={{-157,66},{-140,66}}, + color={0,0,127})); + connect(TSet2.y, chi2.T_in) annotation (Line(points={{-159,-94},{-140,-94}}, + color={0,0,127})); + connect(stoPla.port_b1, parJunPla2.port_c1) + annotation (Line(points={{-78,-84},{1.77636e-15,-84}}, + color={0,127,255})); + connect(parJunPla2.port_c2, stoPla.port_a2) + annotation (Line(points={{-1.77636e-15,-96},{-78,-96}}, + color={0,127,255})); + connect(stoPla.port_b2, chi2.port_a) annotation (Line(points={{-98,-96},{-112, + -96},{-112,-106},{-128,-106},{-128,-100}}, + color={0,127,255})); + connect(chi2.port_b, stoPla.port_a1) annotation (Line(points={{-128,-80},{-128, + -74},{-112,-74},{-112,-84},{-98,-84}}, + color={0,127,255})); + connect(bou.ports[1], stoPla.port_a2) annotation (Line(points={{-78,-130},{6,-130}, + {6,-96},{-78,-96}}, color={0,127,255})); + connect(parPipS1U1.port_a2, ideUse1.port_a) + annotation (Line(points={{4,120},{4,156},{120,156}}, color={0,127,255})); + connect(ideUse1.port_b, parPipS1U1.port_b1) + annotation (Line(points={{120,144},{16,144},{16,120}},color={0,127,255})); + connect(parPipS2U3.port_b2, ideUse3.port_a) annotation (Line(points={{4,-140}, + {4,-164},{120,-164}}, color={0,127,255})); + connect(parPipS2U3.port_a1, ideUse3.port_b) annotation (Line(points={{16,-140}, + {16,-176},{120,-176}},color={0,127,255})); + connect(stoPla.dp, gaiStoPla.u) annotation (Line(points={{-76,-88},{-64,-88},{ + -64,0},{-240,0},{-240,110},{-234,110}}, + color={0,0,127})); + connect(selMin_dp.y, conPI_pumChi1.u_m) + annotation (Line(points={{-159,110},{-130,110},{-130,138}}, + color={0,0,127})); + connect(gaiStoPla.y, selMin_dp.dpStoPla) annotation (Line(points={{-211,110},{ + -182,110}}, color={0,0,127})); + connect(stoPla.isChaRem, selMin_dp.isChaRem) annotation (Line(points={{-77,-92}, + {-58,-92},{-58,46},{-184,46},{-184,104},{-181,104}}, + color={255,0,255})); + connect(muxDp.y, selMin_dp.dpUse[1:3]) annotation (Line(points={{259,150},{ + 270,150},{270,208},{-200,208},{-200,116},{-182,116},{-182,116.667}}, + color={0,0,127})); + connect(mulMax_yVal_actual.y, hys_yVal_actual.u) + annotation (Line(points={{222,-210},{238,-210}}, color={0,0,127})); + annotation (experiment(Tolerance=1e-06, StopTime=9000), + __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos" + "Simulate and plot"), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}})), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-300,-240},{300,220}})), + Documentation(info=" +

+The modelled system is described in the documentation of + +Buildings.Experimental.DHC.Plants.Cooling.StoragePlant. +

+

+The source blocks give the system the following operation schedule during +simulation: +

+ +

Implementation

+

+The chiller is implemented as an ideal temperature source using + +Buildings.Fluid.Sources.PropertySource_T. +Its outlet temperature is always at the prescribed value. +

+", revisions=" + +")); +end StoragePlantDualSource; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order b/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order index 88dc8cbedc7..e8ea19701cf 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/Examples/package.order @@ -1 +1,2 @@ ElectricChillerParallel +StoragePlantDualSource diff --git a/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo b/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo new file mode 100644 index 00000000000..ea0c897470b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Cooling/StoragePlant.mo @@ -0,0 +1,347 @@ +within Buildings.Experimental.DHC.Plants.Cooling; +model StoragePlant "Model of a storage plant with a chiller and a CHW tank" + + extends Buildings.Fluid.Interfaces.PartialFourPort( + redeclare final package Medium1 = Medium, + redeclare final package Medium2 = Medium); + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium package"; + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= + mTan_flow_nominal+mChi_flow_nominal + "Nominal mass flow rate" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) + "Nominal mass flow rate for CHW tank branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal(min=0) + "Nominal mass flow rate for CHW chiller branch" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dpPum_nominal + "Nominal pressure difference for secondary pump sizing" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.PressureDifference dpVal_nominal + "Nominal pressure difference for return valve sizing" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWS_nominal( + final displayUnit="degC")= + 7+273.15 "Nominal temperature of CHW supply" + annotation(Dialog(group="Nominal values")); + parameter Modelica.Units.SI.Temperature T_CHWR_nominal( + final displayUnit="degC")= + 12+273.15 + "Nominal temperature of CHW return" + annotation(Dialog(group="Nominal values")); + + Buildings.Fluid.Movers.Preconfigured.FlowControlled_m_flow pumPri( + redeclare final package Medium = Medium, + final addPowerToMedium=false, + final m_flow_nominal=mChi_flow_nominal, + final dp_nominal=chi2PreDro.dp_nominal) "Primary CHW pump" + annotation (Placement(transformation(extent={{-40,-14},{-20,6}}))); + Buildings.Fluid.FixedResistances.PressureDrop chi2PreDro( + redeclare final package Medium = Medium, + final m_flow_nominal=mChi_flow_nominal, + dp_nominal=0.1*dpPum_nominal) "Pressure drop of the chiller loop" + annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-30,-60}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.TankBranch tanBra( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal, + final mChi_flow_nominal=mChi_flow_nominal, + final T_CHWS_nominal=T_CHWS_nominal, + final T_CHWR_nominal=T_CHWR_nominal, + VTan=0.8, + hTan=3, + dIns=0.3) "Tank branch, tank can be charged remotely" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,-10}))); + Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ReversibleConnection + revCon(redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal, + final dpPum_nominal=dpPum_nominal, + final dpVal_nominal=dpVal_nominal, + final T_start=T_CHWS_nominal) + "Reversible connection" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl floCon( + final mChi_flow_nominal=mChi_flow_nominal, + final mTan_flow_nominal=mTan_flow_nominal) + "Control block for storage plant flows" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus tanSta( + TLow=T_CHWS_nominal + 0.5, + THig=T_CHWR_nominal - 0.5) "Tank status" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + Modelica.Blocks.Interfaces.BooleanInput chiEnaSta + "Chiller enable status, true if chiller is enabled" annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-60,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,110}))); + Modelica.Blocks.Interfaces.IntegerInput com + "Command: 1 = charge tank, 2 = no command, 3 = discharge from tank" + annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-40,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,110}))); + Modelica.Blocks.Interfaces.BooleanInput hasLoa + "Set to true if the district has a load" annotation (Placement( + transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-80,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-60,110}))); + Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") + "Normalized speed signal for the secondary pump" annotation ( + Placement(transformation(rotation=-90, + extent={{-10,-10},{10,10}}, + origin={-20,110}), + iconTransformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={60,110}))); + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare final package Medium = Medium) + "Relative pressure sensor" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90,origin={80,10}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput dp( + final quantity="PressureDifference", + final unit="Pa", + final displayUnit="Pa") + "Pressure drop accross the connection (measured)" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}), + iconTransformation(extent={{100,0},{140,40}}))); + Modelica.Blocks.Interfaces.BooleanOutput isChaRem + "Is operated for remote charging" annotation (Placement(transformation( + extent={{100,30},{120,50}}), iconTransformation(extent={{100,-30},{ + 120,-10}}))); +equation + connect(tanSta.y, floCon.tanSta) annotation (Line(points={{61,-70},{70,-70},{70, + -90},{-70,-90},{-70,42},{-61,42}}, color={255,0,255})); + connect(floCon.mPriPum_flow, pumPri.m_flow_in) + annotation (Line(points={{-39,58},{-30,58},{-30,8}}, color={0,0,127})); + connect(floCon.ySecPum,revCon. yPum) annotation (Line(points={{-39,54},{34,54}, + {34,36},{39,36}}, color={0,0,127})); + connect(floCon.yVal,revCon. yVal) annotation (Line(points={{-39,50},{30,50},{ + 30,24},{39,24}}, color={0,0,127})); + connect(tanBra.TTan,tanSta. TTan) annotation (Line(points={{21,-20},{30,-20},{ + 30,-70},{39,-70}}, color={0,0,127})); + connect(chiEnaSta, floCon.chiEnaSta) annotation (Line(points={{-60,110},{-60,80}, + {-76,80},{-76,50},{-61,50}}, + color={255,0,255})); + connect(com, floCon.com) annotation (Line(points={{-40,110},{-40,76},{-72,76}, + {-72,54},{-61,54}}, color={255,127,0})); + connect(hasLoa, floCon.hasLoa) annotation (Line(points={{-80,110},{-80,46},{-61, + 46}}, color={255, + 0,255})); + connect(yPum, floCon.yPum) annotation (Line(points={{-20,110},{-20,72},{-68,72}, + {-68,58},{-61,58}}, + color={0,0,127})); + connect(port_b2, chi2PreDro.port_b) annotation (Line(points={{-100,-60},{-40, + -60}}, color={0,127,255})); + connect(tanBra.port_a2, port_a2) annotation (Line(points={{20,-16},{80,-16},{80, + -60},{100,-60}}, color={0,127,255})); + connect(revCon.port_b, port_b1) annotation (Line(points={{60,30},{80,30},{80,60}, + {100,60}}, color={0,127,255})); + connect(port_a1, pumPri.port_a) annotation (Line(points={{-100,60},{-84,60},{ + -84,-4},{-40,-4}}, + color={0,127,255})); + connect(pumPri.port_b, tanBra.port_a1) annotation (Line(points={{-20,-4},{0, + -4}}, color={0,127,255})); + connect(tanBra.port_b2, chi2PreDro.port_a) annotation (Line(points={{0,-16},{ + -6,-16},{-6,-60},{-20,-60}}, + color={0,127,255})); + connect(tanBra.port_b1, revCon.port_a) annotation (Line(points={{20,-4},{34,-4}, + {34,30},{40,30}}, color={0,127,255})); + connect(port_b1, senRelPre.port_a) + annotation (Line(points={{100,60},{80,60},{80,20}}, color={0,127,255})); + connect(port_a2, senRelPre.port_b) annotation (Line(points={{100,-60},{80,-60}, + {80,-3.55271e-15}}, color={0,127,255})); + connect(senRelPre.p_rel, dp) annotation (Line(points={{89,10},{92,10},{92,-30}, + {110,-30}},color={0,0,127})); + connect(floCon.isChaRem, isChaRem) annotation (Line(points={{-39,46},{94,46}, + {94,40},{110,40}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(extent={{-100,-100},{100,100}})), Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-100,62},{100,58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-100,-58},{100,-62}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Ellipse( + extent={{20,80},{60,40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{60,60},{40,80},{40,40},{60,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-60,80},{-20,40}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{-20,60},{-40,80},{-40,40},{-20,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-2,58},{2,-58}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Rectangle( + extent={{-20,22},{20,-18}}, + lineColor={0,0,0}, + lineThickness=0.5, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-14,16},{14,16}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-14,-12},{14,-12}}, + color={0,0,0}, + thickness=0.5)}), + defaultComponentName="stoPla", + Documentation(info=" +

+This model encompasses the components of a chilled water storage plant. +It includes a flow-controlled primary pump, a stratefied +storage tank, a reversible connection with the district network, and related controls +to coordinate charging and discharging of the tank. +The chiller is intentionally excluded in this component so that it can be +otherwise chosen and configured. +The tank in this plant can be charged by its local chiller or by a remote +chiller on the same CHW district network. +

+

System Concept Example

+

+An example usage of this model within a district network is implemented in + +Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource. +Shown in the schematic below, it has two CHW plants and three users. +

+ +

+\"SystemConcept\" +

+

Control Signals

+

+The plants are controlled as follows: +

+ +

+\"ControlSignals\" +

+

Implementation

+

+The flow control of the storage plant is implemented as a state graph in + +Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl. +

+", revisions=" + +")); +end StoragePlant; diff --git a/Buildings/Experimental/DHC/Plants/Cooling/package.order b/Buildings/Experimental/DHC/Plants/Cooling/package.order index 0d2af631a4f..4c109382837 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/package.order +++ b/Buildings/Experimental/DHC/Plants/Cooling/package.order @@ -1,4 +1,6 @@ ElectricChillerParallel +StoragePlant Controls Subsystems Examples +BaseClasses diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio new file mode 100644 index 00000000000..21c1b64d440 --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.drawio @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/ControlSignals.png new file mode 100644 index 0000000000000000000000000000000000000000..41f065d4a230e33fbe979bcad4f3c8fc7e8ea011 GIT binary patch literal 104346 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� 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 z z2}a%2CqzHaKf4Y)q?|DdnZ6G>+yqKl!sGu&Yl%~f2XXl5pRpPMIkVh`y)xTmR>e+8 z;N|IFiHdx885xmPAuSWShQw}6{Tf?gxM(A8L?L0^gKERylI171DqQnqwn|GR>5<=3 z=s%McBYg8{8#IQiiq7A1p~X!uVd@?xqhlb~iRr5Tg-Pj{1ZgeXThJ65XamKEq&4r9 z`voG?Ql0+86 zi@`P+%`yM5v~^#)Z@=W)yl zS;VtWPW_wV@Qw0_|619c*7D4d$)$Ipej6=~f%*ScW{EcLV+f%`8HG8aZVdi%eD>et zRKC-SUAJwsa!*{D*qX_VTU**iS_)v@L`paaF@rsVk`}GdLWaeJT z@8!Ok&U6i`vHKEcTA3Ci(={vbQwj%i*9M^I#%_RgUDoAz&f+u2L_KFeuc*b3pWqv+ zrRgUaj81r0mmaFG|J%!uh;9>Fb>ETKIE_NL?wL4_5SnFd7IVusJVCD{PR>d-w?_`~ zQd`^mZ*F*=UYN2nM0VCt#0w?Xmjx6K9GuQ z*Kfth`N77d(i~`^|3a|#iPAH%K6_VH#75tY-};)ETsmL&$8w39gccNYgpx<5c1^DI zrv;D2C@~H#Z0%evs*+5tor1R$;Wrp-6(P zd-q?e-u}7*nOw~kt1t{xqPwv)9?J7c73P4qcuOE#T>x88$B?XJz$y1 z3PbKU+_&Cb8BKr*zdkz4EAI|vllD|EViKwH_)1Vl9A!JpxWbLZ65S<3->Vp1I&|Dk zx$2O=r|+QaSPJLt3Vf446s?lylzYt^A4Ja`btmno)+R4#jFEtWAsBw#fTu=pPgvez zm7CckL(90IR$eWScZJF7S*^8ob|gX;Oy2a8li!u`${Ftp+27EKW|eUmyQ;IT^LdRw zYkJ++KJAZ#aIS==w_^Ki*ndKzefwblfrkvFK?K&s7#H~gP?n+$QGVUtt;f^%^cdhQ z)@stPB;t(seQx1O1b0e*y2Xk`DV;(1GgooREgHqvU)NBYkG{Mq6^K)zPB~NO)*cH6 z;9Cx!(ivoag8;cW=Q;EkrF588?Yq>QsphMeu$KNxEazF=%a<-7g&*rfM6Z|#Gc34k zVkMxF)5Ed^;LtZ+zud-=7SH(q+u|^*{lHbCZ3}Hs8-~S{GpB&|QNjY{S4N+^Fx)1p zz?L+N*p5Di@PW~%+>uQ^@RV%d9i+2S;!6dLq>(r%d7IS`HSp|lo>)YC`vh&=zu+%3^IptG;0m8C#J)q`7g zF2`F}6W|F5V*j=al0QE_lVvBB9G2H3Rh%0{1YII}BM-IKjEV&Z{^*dBjygN&`r+g{;RV3v^_*nqD zC>OD_kXd&!PhvO7)qjZd>HYKF!CIBPAiS!qE0t?m{hJs2Px*u2Mw+dAKNYN6U^I%` z$dYQuZeN>4cSt3veWuvTPhIR-g*7V|W^V=6{mC$2y27e)w>e;a)W@LkyZ9@3OIeva zqHk$(CtQ+_QASdd?M-ej>b6bbkL7_(xAnEPb2^gV-O=*<20bVgJap}M@%NRS5Kp@! zxs|L1${Ly^BYGeDmLcEZHQFk#ZZoicS0-roy?=men1boW7sDUtAO%Z|AKo%qb%4}A zeE0WL>RF=!}^()?hDjg20|_O_4{Sp_@dkgE6UryjSS}VUdp<| zxlVD*p4>1qz5dUVytrG=fBy zAX2rfpuMtoKz>d`1o-luxX1}zNCxJC6}V3v!UfS%zh%rYe;xe5WJ;-E=$$A$&?wA% z*BC^Z$r%>`CT?)68*g>PSlH^C^xr+tB|+ow-(|s_HjAFl1-L&ugWfz=6ll%cUl##s z8bf}CzH}@1gC4^br=T->**G>9C{)4;-zOR&R0(UbK~H%_d{B#MQS`T}Qt{r?Zhi?O z45_N_e+iKWfhisfi~k7o{t*KqCQJUc<^*of6>4}iA{fuEP`8|Fpj0nEGNXdGr^O+9K5|R&Ecm? z_ly}?qmjcll?{TVaW*~9jdO{uj6^89c`E+xQ$Lfdp4h;WkFg8^HTZOtz!7{V-6_|$ zaE$~1b~+}KH0I=KWMA*D;yFqiFm9nhN);s4IXg``qIJHdYF7go>REB_>XY-UpBp2- z29BYSbc;z>NYlA-a6DyJ0MmAl05Xb9Wvl}E_t&fIt*&D@yG)oh&l(Y;FMe+;h5aV@ zvIx!Gr5=G?$|OALE)l{piZ+3nKwfZyW=+Dei!z==sY$~C%}&K-`gejGVgvL36tM@R z_ugtfv{_m!eP%KhlykMG4a&Df8;ckrHP?I4F*e+z&^?lCWSe*hI(wP45qQN>P|E6= zxKh#)1NDJdAJeI&anyu*@bC%)O&2$gC1xLR{XRXKqQ6PjfxN%eUgrO%8nVE0Z zQ^@8m0%vEiUXOz?>R9~co>Y${j0B|t1vif}8DDI2@~Tgdvgn^foV{2?JxOkiZCCfW zViF=`FX*cD+n4PsJsGc&?Rlb9K@-p6n3j+2_eaDUp>h& z2-=L-87qHA>cO^hiFHEDpiUIg2-zH#{7Pe@6+3b$dfk~vx2`$NG*@P9R00e^%s)Si zfa76ZuZW&gLfL*B>zFRY`t-!Uc&Xq$jnz+qOsq5tkaEkW3C}pZz>vHl=iffx?Gv4= zv~54X3DN1ew7gt;I(k+`N)nrnVBJDW3*f>{7Gi^FkNsj1skBw^`ql3z_IU`B%a4pY z9E{n%EVQ#sS>e^&>BmZ|mLR{t%-87|s7?R}lu4bNu`s1KFomxbqt}9Zd4p3C^LqyFwpviOWtZ zqxwnfB{qv2888CVsj;<#6j{q}#UKXO0Q2+Y!H@INa-?e!w0?$|?WggJbs>uG3xyBo zQVPQ_70A|Y93|f!?Bk3)%GZmMx3Lxz*T`D3?E4sFW$iPT-p9qoX)5^t^&V8CQMx1! zm6^qJgC(nBF;FDz%~fE4miEMttjjTsU`8e%;VfHoMt)3L!~gBVtJ+wXey(>?6yu>m z=;b7W=hQqGKj&Y=DHRn{l+K0Iq~LB~3YY&5qymD>Z;?21$c>6$mmvb^Szmys8Y&u> zS%zI|z`hIQw@B#z9J{2h!1M22l@uJ__Q_j#*p`mfPD=mxd&Z`mUAE<$4B6sO46~WF zeJJ+=Gd1$<16dQBc7DCET9RM1Z{_Q!USA`LRyYI4?dRtO6}Fr9hja+R;wQq-gAu3Q zDOw=6H*Yqrw+(d{ScQjug}rYH#bMLHMMBuh4lKX$PqLOV>!9rRnwpfg_4WFJ&&=p%TD-W!Yv6{6>E& zvA^{;Y-=GAu6*9G@M;P^nZa-sS3ehq3t`~bJ>u8JJNZld2J++51az>E^JQj(pK(51 zb9?mY5eqA8-$k|pXWX>@RXI8EsCB4xaYuQ?ZHp%_llKEMF;_^c=zm$hpQ1&r~Q(YQ2rX%h{*(zQ0+8eVMe*PKC1pCM;eG#Gw z`f2gJ18=3Yr_RnNtlP^PNtxyEfGR!XJ!>|GhG5(Gb7}B|a~e@ckU0mK(kphH$lFZL zJ=(?Uw1Z0J!5Mwjoi9<_@=mS{7? z4)y{8u*n-H!lR;(v7cgplL_sQ!L+cc5Ci=$as(;;SHF*=bpn59|-Xv@z9Ol#PDu$p_&b@OR22BkG z!O?Ji>5c$5Sd7%NH=#|FXXhD%iDaEOPASNd%d{_j{~WY6y8-Z# zPP6~2!$VUZr@4)fxM)a__?+Q+_r}L)E9&2XyxhD?(p7%s)U%i3yi{nwPt zj}O5zU*U03l7;#g9lh=oZC9iP7pncuPmJsdzm&lnB`d9_!pe`!LMQ<4=-tLtefxbA zlYpy;1O9+EEyLGSn~f_R-|rAq8rIC^lWY`TJEBw3)MIdqY-*hGr$&e?=l*rPXR9{M zHz5N{Wm~)iqvw*)mrMCQeCy(InSUoLcvcMdC^IaJJPA3bfhv;PMFMjy48We{ za?lbO6ikS$?DbQ<=zL{(+`f_sm z#1^p#u&r*LHMG)So>{hK!hEOcEtY@$z~IzMiTZ7iWVjEImmg?Ans-HSwE9qW_xdLI z=&L)b;te2dYJE2Knova;*J})ChjaUZ`S4&b=PBYB3v#6CCJ8|>6U3~>PU-kVRI`Kc zu|kDv$3S?bQ!eYOw@JzZMDp(w?>FS0@{%-256DmADmo+|q*DICcln>5kofJu zE=~VEh|B2_WYf41+fhK@=uD78pE-4Du;`f7kU^X0;LlE4iS2|C_TuiH00b)dkU7`O`j_?(Jz+P4N_cJ%|ry{8V{L}R@8=>+D8R+Ms zfCZA2Fo^5}TnNNU`OQi$37QW=vPuIv zi>fj@kLSMmjI%77R*33GZiziz zPgo>bL(dwMM8p{Bg+6A}*-cVUy@d4AAZRtTs|Qc6FqlSZ?52RkRr5A&Z{sESx{h;% zcLvxJ{_}Om^Up=PlL1!ZjCox<>~EkHvfT=ijh}Zp+Yk>SZETZbc;tEGTaG^yHU087 zBI0B!!Ul45>)C=wXLPJ=48zVi4MdpG8;&Rnh(vv<%{bbbA_;qOjR2|T{Z))ZIn^M1 z8~u3N`*|npkshpjpCtV2u8scr{|ME~h-kHGz? zq)>h=hAd2rbp1&ppDP_dPG_{j`hLecUj`zxKoAX^)qHZeIioBYA;U4THIYiakDF&8 zs60N?^U{t+s9yS!Z&#$P5~ZREA#r<$j#Dyy0jdq6IA5v|9=oLeaihn@Zx-mPaAy*q zIGb^=Al?ttZ>7un#WrZ}i*Z!!)5Q}#_=CzhghSNh6rAh1LrxlRk_Kf`GEy(hlR)3% zA+lF{Z=o6-vm z#){}7^|0{+^ueGHFsp0g`k5B$a$DsE!O!PzQKT&g?))~D!Tc6PyaQ?CxMCHPiVSfW zWlBc;s({Q-PZ%Z)Pq}tEerstQH^?uqTerSn#Y(+ER^G+HhXYs17I$xq{T*G7iLwO? z015X|g!eH+#xsMN5NG~3+l+xy_oQ=4U8#Rr84|O;*Qh+}JEMc*Yt7XE)7hgOL$&h^ z3U~KT5l>xw+M0C@ZdG+IjInm~f>*k_fn(woZF=#wh0j~bllc<>{!cpP(GM(9>|`w-lb^32fus8P z!}TOmH}xmjf}dgV2d?kLOy`Dw~jScjLFBy*O;-hNX7i*bv+a2Ou?!sTa#On(T zZnovNT@ z$G?YEq2J4G>G@Z(rn@TlkD(EqY~zjt9Glc9sE@v>ETN$lwd|G&F>{LE7)!)Gx8M*?|2}3G>P@2-~g3``Rz+4gVQE%$G%~+0Oip#ps*@pn^ zF?VDuKFj>HP&ua*?_GMLv>)#0$T|xDOrGqqRZ=q44t-kS>L5^A22>P0l-tL!6>+E1 zAHa|!vJOKj=e|W5^!cOy5H>!Bm%Q+dGV!%OC$89p8aAe0qPAT4nU}uXb;D3M*|L^TtnrbBkAOV z-DjQSMcGMt92edm}`4o@5(RY#H%5Y3we)Qg@xK76lS za@BGh*3#We7-{Yt`?*{Iq*}}yk4XTK09tf!rdgFuETK;m&i>$kjJmI{DVj0Fzgj zCsU6|D2R1Tg{|id)4D$B+9Z(bJXIF&S@^L2!uu2OQH^eJnQ7BP1^E6F@7W$b%zA-Z zwAE&zeW8IhD<>ePAcU90H{~=8q^F z(0K`spTUb$W?z1IS7ed_=o3$2O()R$Gc9t;)aX;47{4YY#m zcPT*1gF{0@gmH1N)_yk~gyKBM#U4Dio@rSc85x=TJu>2xX7_5UJ~UMie;5Q3KTA_{oE7Oiz^?v__^>-p?qErBRcQ zWi0!?vl>3T-<$)d*q@XU72S&b^XJcpxV+bgtHVXrW|cOD+42FZw{H^>Q(i$>2Tl;l z%=j~ul$MHzpP#OYwx13y9pXx*y=G5U)zk>vhw#c2-lQD2QbPB-7C#1oVCY8e_um-_ z9@hz^zFvHSrZ4TpGC)}Txi5Y_VUR>jwcpcL}~>Fnr52KjE$$OJ*MgwG~=(# zvq(O?du|`&vxi=$$5hsi*@VpRq2QX`ucpHw<_+H5HjkIyoCxGTt*Nf6^2R==Vr|Hn zND)@i0{$N_buH|GW7_ZjZP*NFINzVB>4&?sA$mOxZ1uMHDcol%t$c{QHyaUv=YD;C z(W!_hi7&%vty*OG{vQ|S*L7Ccv~aUTc4f0pLX*eoi*N{<|2_d)r4SGlS5SRk%^P)0 zj@_?r+i)C0UJ8F0knALbqaHqdh$N&@M36D?yI)pStO0LP%1#=~U>v9#c_XN5d7J&M z_!IL)hN^&;SJm2H8uDzZxVF#;l(HMoiN_Sd4YT1pT3GgQ_C;tv7kC=+T4&RN0lw&meU=y)(YzCgn_^$^^}mMRL;Zh?c;Z;Y>zdbG}CN`zU}S5rWHHoWsW z)pw16pGj@M>dr#K!p<{|iu4EC0m(sC%A}8V1kW(xn5fiM&|cBjc1{V|VxIk>OnBjU zsY?Q`x^WA6iO9=BdDWu`u6xt zu0nD?S6k{|*W-)q?CrVhJZd$8&oC?-8?tGf)+e=)9W?7h#U?ApF+C8*5sT^OJ>6=@ zE9=WGz3u}4Bn}qWqpAtcZh{R3h~!{%40X%Hg|o@fUwSyS~%6 zDU?(Y3MWBUMmzQb&LtWp+whzCk4nwleZ$v{oKLqShT6mNQFQSd*af=t3<(zpG%_Nr zeGY}qPTTIv$OK}u$C&@h<}|Vha&n65B9y>A3;MK+CR6I`!bPX4iyc?J(Ku9?{!P^S zj?05wzKy=y^ES}C^m-xs9HGk@E@J+F2m9H?+|6Q=&;EcG34ZSNb)!IBH~ie5yxkm7 za`WNy(U-+QK?;)32%B(Hu~?Zp3S>sUxN+Ns|2a%jE&I_hBI+HkwfVT4u}zEO8}+fWJ)3@ia;>X`#1J7#B5br5h1|Qdx`5k@ZZuk zAaAKek;>}o^L6Z3ZPcAS@hn4%`in=Ppf7oU`l4r%oYq?yK_1e6Tlx>Gu}3>7c^1h+~odOEn5<0y)qy*-T`f%YvrpU*7#G2^Zf+-hf#*z9 z>+ad%T-wzTO$Ki82;udfGty_AX&z>AnS0V>S(oc1?pujS8 z&t8wp^g8*8h$Ua(n(K!W$rMsTP^*+gPXV(pce?NOOn_*@e2K-?u&k_^SjxbCiTnsY z+=IJ1PxZ-_Iel`W63n9uuo_!K!=10}LDN1CJO}&v7RrV-oC({0XJ?sSZO5Gl>tngE zk3@9VDM5Pf6uAf!`kdktNe<-Kcl^(z3`|WodE^Bb49qH>3vi zssjNfrDdZxKkXf8M$b3#n{`FZHTVG;NQ_gxr-zNlzr*E6|D~tOl*woBU#(KF`+&yq z0^p0nmWK`Cdh$`4;Sco}mzq&(QhJp75gLGFAXj;#GYPx+NSRr}N{_zr;xOM=yxFOzOv(llS`V6$u%U>z4 z;wqs>cWed!2FLEZl;!UDOTc9$1SV}VZ2AVz*%kCxXWPz}Lc@;czm1iY!i#SrLbh9; zkB)61nej7FD^k0P{f`;=_dhbE)wuxTdtRiQt-bT(Jc%1}c*ZPC3z|~0OPB0Mh2OWZ z1s^-37ZM}7IY~C#+k0?Zfig;09$Fe%g?orp1&W9T3J`b+okeX}KulsY>_B@Q-wKr}=02MvcbZcBg%<;EKG@ zcTdkZtQzF!8_9lJP@^e8w1?ka)MdReZ2M}&M%#Lb80IP?ODhSin+g1uA&0Y5>VGWG zj}6{?+(-Z5jS$FzY&MbvFC_3sq72FFXUP@uiramnNIw*`vVB(l$To!P;jjjHskaNZ zF#OFs6@OC1O$v+O@mGj7*dz^pw>&fv>M0qqSCT(gy7qNXgSW)&k4~sXrr;F`1cvq@erPtPH}h?>@Qr+bE*%2H{&#ueb@9 zN;t!rlp6wnR=GNlZo?r4G9%hTp_OJSp@gF~lDgbPxrqgx!5!jNH_N&=?G>Y=qchFQ zEk{c7@;Zg192c*Q+0GfiO9h|KQ;%xe01L-W)Vc)u`n6;dIS@^_Hw(*A$%rjF$we|G8#OZqD@ae>A_wQJViY~T4jRm8C3`qS<;F%BI#CsTH6 znhzMS(hAbSdIQI7mek;7vE5p6+zNq;Fz0BoLdc!hx`$+(7Bz zHyo;H7w!3^4Ak&U5w2fvf|Z8kC8XKapolnb*s(kJwF zY)erK9%=b2)C!++_MCDP?4--Op-%1Ho6TG2t6uGAUCz5HOtnt%tiQE9?DGDfELxvP znKfIae0I>IDCnrY7&#&H>Vh!wo7M%TjLXepZ(&#&Uuolu&)-mirohJijW723fh+=( z4+KK(VcTCx*s0;C+XbSz%r%^`e^Hq-G=wD7rvVFH3GAt+Yn4RzZec}?QA34Uv|WCQ z9BrK>oHQ4}QW#JKXTnnM6&yM#Ba6bKJ37?um-<1Mn)0`L$CE4-EOc7(>CrZ8ZrI6c zfr1-o4)fB5J`VxCw)?pun~e(4Y3KQDU>Q>t6EOz~ltSh64m}w9k&wV^qC*eWGEF7C z`zMVp?0ULLPZ;cO0(j&oOg)3@={YDrg{HqqGiya*Gi%qrB2^s`UH+QZEt>nXnk z+&u+1Yc>FkCBNbgsTN96VzbE-b79(4U{)x3qpO# zOc#lTQfwjm;_u|&e#w+dOv9mg(_*Xb0zCaCX*~he`EDmbHC7+KYikir)bH=v&)Wn4 zQz!d9Krbvkf#{wWN^%cEk(J^|Z&l-XKHRRfizotZ4Zp$wm; zdE&Dl%DKB)GeL7_JzH(Kiq8e#tbB5Uo#0HrDl00w&T(5P#^4(SVlxm-EHzjTFz|x@ zOUJ*G=Xo|clHz?U$7mM~0gz!{Qh_2|vw|4r=a0xCOOVaMdS;^cZ_bIMIoUj6-t-VE zq%)*#Y^<3IIRR-%VLwz3W`u0X(SW%I6-3@F2+sK8ImuqKN*;Q-M7GR@i$EPGx@&SG zg8&*cMS5i;6IVVuV(=M%e=~iPFQN{1B@9VPv+i?cLetRj7ojG5!0#$h9=^TmjbT@F zOg=ML&%OM2t{wle(Qie$`GO(n$9UN3gIyEhA#w8?FeC@9&nr;Urka5i5vakHg-L{X z=f0X4lb;BuMh@5;F&j{)wwmLW@tL`Qj=2%B3M-i{fTuV=YhRbP%R|kZWL4o6A%VRE zM0aW46C<4wyXADZ?|W<>T>>bzPo5D| zO)9#LmdP;%_9YZFf%|Y-B)?o#pwGQzCu~XW9*{P=+(ZqOcJ%%3;=#cQj&u(f)oHNW8tz%EID(vRY(@%7x?mKy~7G=a%4A#(yJZyu`Jz3HF!u z!Pq+0^E&0TU`Q>mEMrH{`56RUz8spfSHr>bnG{(L0d0DbNbO3(D`lx?gpj9hx*k7Z z*3VRW?5Qs{#J7ZxCBG?E6v4L^%-3+ljaA*+4J{YhT~5 zfp;<3sGIV1X$3Tjvr-6FQc@@jRJ12AnM690xYeY~Eozq&0LHZY6!9Tcmsv>FKl(3NV3%tE%Sl=pohY->*(#*IM-d$Dgen29>W`6kNd z3IB#IRQ8Slp6wZG_Dm2`1R-7iu`@-0#p1!MoI#(u4Bi1L1g1^x#|3gpro_9FAxR!# zF#U@!F{XmI||&bh``_2rmPozjXt{A#_;c4kgZkt%JKAAq?WS6r0j88pPgUB;07cId@i|`zXYS* zhSl+17#_`~n?Na%UJIJwN-ws#5uRB~qA=p%)<|0+?H*z9IxbA%3Ya#tOldI1F^{1; zk#lZ0@8u1^j|PXt^GiK*g46#38(k?U?8H?!OV+0}?;7Xn@k*|)e7bpo4mg-Dn5@xM zr@1SEK!2$vm%6RCzsmN!v*$~Alt?%GZW{#Y?B4hQG{$8=q;XcsT|b0|>eE3sU3b#k z_~DRkHYRb-lB8k2+7s51)I$~sGT~WN*)XF@Wn^TenvRYR&BL+H zMw=UE%}fai>yO6Do4xG=0uE%riEvtytoHb=z~>q^cSi71_oEB;#&&=vIdQ7NXJO*( zJAXJB&NN*dv$dVk;Ln#De!YtptveDeyX|tVO7*MKlQ{5 zA{q4*P6NSv&axF%r-|zw7=o+=OJj2n0zsVU_91j{clXA%8#g#gu4zBcRSsndIao89 zEH)BwpBg1HQ2a%=l8YCa{Br*#IJL=unz-^pN@pF`-u?(2I--)2lHLK33KHR~N*8IE zBP;teMcS6a7tm8Hx{wuD14I!BbQyC)bsqQepuFv!{Nh$Wv*bH+w$sg7ZdvDktZ8F2 zn-+e4EYMA{cbVaZZY(H5Rh4(!fRV6|!_*D11Lg^ztWe6}_j8Ug&47Y*a~$xUJG>h4 z-c&4-*YH)H)KjivA;dIti?l~im7}^yM6DWVD_eH8&wyTa!ra_k7EA!7vN8&e4HeG) z@(%o-sn1z|yK<_nm@2vlxCuQDJ}P2776rA~@;aT*Fg*XkqmS2tVU9yVp#L>llYUjo z?_X@-LvF?2H#DS6J7sx17t+_cVHBGuw=H9D!6lrTA=m-+; zK9PF&6{mb~p!iHzzW#l|)cCv0g}v$F7;9bTmu%EO0atC6TgWjw%?+Vqq`E1~{s0fh zCZ-q2(eN-NXbk<&P%t(COf$KMT3cG4o*f^j@ZA1t#tHsfAFdf9~yIt1o29^!Y#iy;O;>QV3U4v{RRGRX7TT$`!v*yXlB7 z3EFh=efGBnyu{ZxaDId3r)@uW#~l;JS1U^^E8%LQybs)Y<$AAymFw1sYsHfTdEtc^A9@o-@gZX9OH7HV8~lQR!>1k zHE0dN5kHG>q`7q|Y_%+~$a>qUUgp1Nl#}V%LgpX`$k&QU zvJD{;&D+4#kem5++l;?3ceaK9^N6ra-hA_qprKWIKHO7few?rsHc`l#o!qWijXIsY z#%nBJ0i^Bq`aLyXiWR#HKDzK?cNab%7;)69Nt}(#>pw$3qq#7y2|T6h0MgmJK(Kz@ z=%d}y_PpU(rko!?F*V!YL)@7rK{}wGeN`o4fJ@16-!#?t?Ki^gY3FCl z&sh6#i)&&FCyT)~)Sl2@L8fp&=Gp;J=B^M;;ff8{M1r36cml0o?cU z`}ODT;O}9uiQ%W6uMK&ULv232e-Ei_KbO~6dea=K`S!9+Ff?B?(Z<@^dLW^(F8!X0 zKKX@X2R_W?Sg9?)&997VNU@23IrAav(JQ&YJ&5j3^P4ZE#7exM>>qrH( zNdMoWZ1LuVC{Tk1{7B-yV4jH=(in)vSteGZ8!oM6$@zINCSzI>g~6YmRR#=oJ>a1m z7#m(MUW`_hem=M6v+j2AQ3b_M)3{+unsOGpukPfD+C(i9xJke;t<;8T#W8kBI5LKIell4*}X0HX@Hr=s)kO!2bbZHsV9xPq)%zFo*7bY8fSKIeu zGqHtDh$(PPgj>@%zoW2wZWH%f>zod9UO0AdB}9@1nFwi!qzcK|((-G&{h#XP{5fEJ zITX4FKt6gUkzp*$L?EY)HCP)hpAwo2$A?BO3W2R-VoVpvZZF+{0RJDL-P-Y)o7H$0$RXP}A(9AE0rS3ruv0alY0WdJ z>M$rt)+d@U`113?SP-a_%R!x-o4j5PaLoS^5KBB0m7hKxp3!%m2=$=S>FI_wP<9c{Rr>>0VpV10hy$#CcW*2&INt><_14@eFQ(3XhdctE(y!KD zsf_tfxrebM&S?kpM`0Dy*M;`@oEd>OGg4H5e~;ntE|{#>0!2$fl%Qp>?WA*BBn@HE z+DM4;Sp=e+W6}HHV8-@8|95?O;r5bvrF`+6g~V9rL#nOcNt?fOX==o|E+V%^RS-^Pf!3YVm((>K{@y zpiNY>Sz6gv^7nV_9E*VH1Mt*rv(7=^;~4+Ww&MOVvOR8ZYlT28)P6)YJu8aDOfm8S zY~xKz!w|+qJx_K%Q<1LSnsQ-m<3pwzZN#WlfXUXUr%eg0GRt69hUgvn)UXy2gEyM* z*SX&U5H}S3i@4gmw9J!&S@}3qyYu@3MU?zMP+}3}D{YqPFQbB5Z!xtTz$upw4_5{h zJNz2C8BVRS!gjEc_Qa)NYsdRMO!`!KqSpJ+s4wfL+|hB>T0WQo!x3Se6goT-40KSN zFPX^nAL&QmL4^t4edER-i2#Zan221U0IWgk%*I~5U%EioWEG;vFsH#C_uxSHZB@pM z%%Uk8poqV~CV@q!lH?Vcz+<(Yzk&H*YiBx=(L zhHy*LJjpPTzgmk;Hcbhw&s-*ra4c&O@};`ZBc?eFGh3+6hxI7S?EFD-;WIFEa?p%s zf|v@1ppC$diigeJ91Mr&2V?7IW%m!o4q09l>P#P~{$yb5tF&yKzTPJfNuEk@8P#S` z72N(ImeW7U!`KX_Ba$2YJ=8l##fN98^E_JR_fps>D*3EC43l{kTc~q$QHVoJZ)s8? zyBIY4&q_>6ElrG#&3%c=xo}pm{4nFySLA&8u+x4hkuP7qSh>wrIJl-0^+L3}OG0!V&KSULl0vT=V?TRy1B|=rAwg448J*$JT!3pA>FP znLQoNySr%0VcqxAVI5Z+$OD zdIH9S4&y%EJG#g_)^Vw~ug|PMN2xh=YNKwkf*F_19x8OB^YKr)6?CjX4&tNh-?7R$ z1JIm5&3$G4ee}>G{NWej`0fggq$d{75X?1mam;<+&@sc==Xp;%w6vlh-x6IXbHie9pXLy-t~N+ z(E@g|oYM+W^LGMp!*F*o`mzmDYU~sqG6&^1dEAQ6QD_z-r66FsBpgF5D_wzYh-!V116XbWA{ zzu7;XG0_^djLUK19M7(7TWJoO#m)H5`fa|fbwQn*%u5Ja&_v9lo@3JbH=QS{Icvgu zuOojd5aJKR&$(AsYjO_@Jnk30M3)6y+0=SC*Hlln)PH?^ICATmSkf7gWW*}Jl$#L! zctALw#*KqYY9os-J@hqp1#{s(F#vqOChgRIg})+8xhDB+sV{=T0QQ`Q#3r2m z4u8b30g25MGPK`G5;rnn3~FL>Y(E+eMng(*OpPYq_I6Obv0x+=|J^@baMO=%f~Vai z$b2g4j3?5yX*U`{Hh4gk>H1ogYjE)sL67pNrCWKWP1x}gRAJ+@(bwkRG!wQi*#TmY zcb(j8$fCt9`@Y38R0EI`Dg~rKR1`VJt_r089`19OX#H$$a%j$?@3q}Wg|09@;A#B(Oo3eQ^f`sFmY^`aVQ#*hb z!7JH8R+n@3eZl!I`WO(#l|U1|Av+TtI2EAs5KtV-LdQIrS;FAK}!Or1_? z<(PGfmg2H(%0h2#B!hHKI2Gh%JM*40=@qG*-D>BwGQO2eH?#f<)t+cql`fmCopkHOnMGfmGm0zq0 z1J^aDJSo|<@`l##K%2Lyr=LnxExc0UfoA#Bi@Dz0>{Y~VkSGH29Cp%L1M7Ehq1r=< z1bMeRxpQjjdUg7_H6zt4-ug@SGR!r$Fj~FK-_^L%igx}aJa{5V0wd6SCHNYX|MBDU z$7Ej39Lv9}VHHl{15#t(Y|nQu$6pb5_@XpmbOubkvtJy($5E(O%@elfQcci&r6wP| zRGWO3|BB$1B0ZNDewh`GAViGW5T5KqIYKW5FHqSHNZmg>BB3ExJ|S(uhoPUdBH(9a z!FzgLe;_W|MDEQVZg6W|Y;9in-w!MqQWO;G+wp>JI&OCf?QX9Hne1QwTIuFiJ$ke= zl=Wrdl~7a!#z-+j;6!-Ysa@q6NoylF?pFQX?d8iLii@2%RSt8MLc)Oi*xvG-VH(^s)+(9_!tn}K$IHm09b|$`9q~%d>G`2bdsw-^d3>!47jP{R zyd`q4rP>};D=!HDqmCXii-@F}g>BgG}hzP$1RPDC~26--P%tb5kqSZ9>l?FrH$TAWoMmeS@rJ3+CExp8JwBJv_5g-Hmug;~B8`fd>D-sQT)- zsJHIxAtVGuKpN>#xgJTCG*0MVeS=2b;Q3*&G5oPmHD1s70 zVOUWPF9|XeIL|fEp|a&m5g!TZTJ<6Ui?LwNFjMQ%=vF!7F0u1R*LZu|s?c2lIb6PE zx#@jf##!*;GNiBX3Z1-UawJ<{t4k|f5*2)y@?x8l$@qFEGUx%&fbsk$!NAfA~6W@^ZC zV;a*!(4ughTW9g?Kr7wvgO*NC`l6Sf+KKP1fpXo=64WyeRPZ}Jx06Y`k{Jfyqu*&~ znX~j0(3HEC4vm1$d3gl>A}U?Ts{isVdZPXK?+MsloFUm;0OS$Iymn`7?UdRd_%UdE zz#JQcb*5Krp6<4hd066)5k@z}`A2DJ;Jbb!n#XCYC}1fVhytcdO<7P{s#(O1_g8`f zG?wl&=u=p*N&b-`ljVH5f#l9bfn5-asN4znL!YBv5`p~kEZHh;gZ$gY<7hUr2`l&M zm)xtiYn42GeSPAm^Fg!#a-Z%XCdyCxoRb)}3I5)8PxaY6UCJD0h?-iXSy&Sb?@W#A z6^OIP##A1%p@wrXI`862qU;OxiP=O4Buca+(;L;31~+&8|7aI|Z!~T+DcpB`w?a6v zi#gaAv&~|H>B{Bp@jZPrH)eiAnvHDjCzfhPcPuDkepLjABl)(#BOgi+>a%7+&Dw+Q zBNcNQO?LzL4uw}wz?=qx=K!)hgn;r=G#4XK_x|5FI`5E_(bolcOXXx|C4D5OQmK&T z1;=xDqkHi4WizPZ0j^>L!E+&Wq!5$u1FUuQJ2p}m7{6HxjoEt zcU`CX3C*t-e@fm1cY^{g)4drQ7{eW9*FMQ1_2Wc{$qV+`y4|jf7cpN<|BkrO;X7Gj zLBUSV>0)FdZ{x+AZuehv2?(oS(NjZ1fqLx)Jb20eI1L0>V_%grFC zQ)BrYh@cfoOU)Q~*&XA1H6HRU8-I`}=<`FZWSQW!z)V_2_28!2HI_uh0I@ z&fT5Vmw<5XPm%Gz{MH&qZ0y;^6m~T0P&rdd6q(%|^It81;?MdxW>h|+3JZs@34p_( z+%zxSW?E>S##F7xt}~!LmS~xB$&l7oge2=|`z}8#`*(XENg{2&a$e$_C_@+`=PCEA zRPe`tJ(ENF8Z|zS>P$u8A~x?`x)M(CN#|JneqAiqXRzgle=iiVhApA(b!&5~a#s#) z`C4wHI?tKoQGKX$qaQjB2!Zr_VBFg?wI>HazPSmshCasH+Q)#icF8|)PJeM$wJN+% zs&(@(O2MY!`^X!1yfcH!+1#`($g9pSux*VB*tE^a&#yk~`3#*-;MRlLcgL|w;F?Te zFr(O>unzaQe%Q2z=XQnqBiHVs`-?UC{4{Tsp5cO!tUR>u8+9yH&FtI#b8M*toPFM{%t2l)qAx zN1|U-)+DgYin+3LO$58JNmY+>O(;lgj>n)=yDp6&vp1UJFO9tgQ}nS;OO-#2Rs{VM zlPgkKnzCqN#u?5ZXo$i1oQOm60d_Hk>Da7&`8&BbR#R%bU~)l>&Z{-&vi95PE|;Pk}$LZt`Hn z%?g91>_3_Iu-3Iy)=xMw5Dt>XO-%+AmXr3s$c-VLn4Szx zpCl)-t8Ft*$^o{TeW;k6(qUG1mJZk?e{c)=-V9KPuCFoo2d~3{f^z?Ma^2D%A7Ui$ z?O0mm_-o>~hkarb&7U9i7iQUleF(NiqbcFU2{5pG^#wA+|1zIoHRPG2DZlX_LJh#bj2_yUGSioMsiIcT zU)(UEhFqpV^~ynH9DU0AW(3@x@Ku3Mx+VCU{<{NK)LBcs2bw=`KXt8o*U4GTds${T zBuA{&p~#)Cdrj3@ZYjCrF0;vqXD?3od)a^XD<)W#yDe!$6VP4rbaQ`3$Ysv~en7gH z;8zspDRDp}4Qwu7Ut(}fKbKh}EvN`|Ls*dl?4bD42O$bxeK;cBWvyQdtLf^E!8r|t z0Q24a@v8|*Z1cIi{bd`(&&{{-zEe7W95D*TItry> zoR{R`CWFh}2l-bv$qCuAjK(qzFM6Ags0p#(u#s1fZpCSXN5*Xg>zNdW!OC$98QK`r zlSEc3U>EFrJY$(CEZ_Pwy%?MFo0x^MzJ9-kFG0M^I|KX{^i_k;gOVNtOiypmcZU~Z ziLiEnxqLmq?Y_BNci2CB9fyik@w)tYw|ZZ8=It{=VKT0H#g%3^n6XD-dm;g3@k(QT zWCbrt!%fndPz{ylO0+b9?DLfW^S1aq^YwA}lt&T-e*M14I6&#C4_Sg-v=J;(~A3QkmW{P~NU3Xe`jsmhXe@-}M- zh;-Vyw6&>3-okp77)p!PPJVJfmksP@_z2-Q#BPl2T*A9j1`V%~bUKb92N68yX{w>l`6K`ln;Maq{RgDvg0k0ykb1xaxJ~Ian0`?&!_`Kx1iIYCrNziB zOFD4%54A8whvF>A2k5^rPbbC`vify!?lr@o?7H&Jdk@=~-0I;i;!IZR$PJf*(^==` zN~5VIZD%G3d(?#iwiUNtV59qPbOZBxaYXj^#n&Z|r%3HGMP??UEDb4%L^t!=;)fe9 z@<<8%^-`kvEmfiGt?hTcwWSo1C0u!lP9lGqA{m2}?oN9bc2s^t`rB3N8l?Hn`R(0} zBj}(d{Wi|LWeW5x4sFlHcX|kJp*_C=O=yD5+hv)x5RdteCDJ8%;y+zK^sLp`1r)Fw zSMK{y^(&SdO7hdWQmVtWF`2d`bJGx6a$77{VJWsta@su7)oeE*7Q?2>+sLOI@|HZk+$SHm(Z1+V*FGii#&=))tdE$y67*!L4L>Lod zwvrPc#xK{{m{9jUl3Za>z0)X8Kc>aiP?LO$X1H=fhUvMhUhJ1l514=a()-#l2YqTG zBwY5(_TtV&I66?K#1cyGwTndslCnsOt3J|P3 z)XY68OB&5*jtxgl!HvH5fCj1GU3pXk95+gd^auXISl#CUzLAc%N?QMoqo%X39`wyn zPN*MC0s<}7ebR^TIYXu<>Nn& zbYPh9DOVjHTLZ!L^Gn|IZa)cgf2s3Hj`;C0TfoLs5 zW`C@JRz2u%W`prigfUUoyC#%~h^eWYNXMY|6YRQM9r_fZ!opqLQ=?i9Nj-w-8RybQ zhuXM`G4QWk-9#L5ogRT7*)W}Q;sJcAz4bO8)Zgppnc!xjYlP?YF{%RVp0V8lSE>ouzRchX>asODB22WIDWSd&lETw44dI6tld- zEldkN4Wcb+`C^dwAu?;b1=hElp>$6gN*#PLo4%#p+4kvaaV8=*%EsM*v!!2x(K7*h6dQDMo5}jYQ?t2vN&YFmQmsXD z5JlazLVs(bOIzUmOYhg8GIw7bb)SV5&E=TIpn*Hxt=!Z%zgj?5olj8#ZMstn{u_Xk zJoH^u3z*LN6y2BhWnz)~G$Qm@c`x1q0Cgf{Z}_#CEZn3%O-jJ!!qXJKrhT*9PcYm? zbc#@7;7f=q9d5cHRVBJiE0nOgLtFbL3w^Fx^d9|uLe0aOm*gTxf7GFKvvc(UX5!I% zpBh`^9PUm`dJL_x%T~q*@Q#@R%I}#1l52zLWyZFCU}VA2s6Hm1YT^yX=P|ScKyekO zk@c9zYa=@mc=FIvL(T}RFW&c{;g~*O zdN2iW{iNezmw&?+w=Eic_A6|O98zcUio;)9y?OguX?>A3i?Z=7;8ujYfv?=#1Yr&% zIHw2mc2^2QB05N@U;OnYK!%cbNW?@gBq`P6LRn$?3$0_79B&olu#g<82we9d#$WYO zio~K8o~u8Xw9dl_92KhJq<8c3-8e z-*@zcBZMF)AB6g?4Srhxru_%$jY*Grs(`{fM;VY49UMW@5BBHJO0SK)+ z*q@FN`199DOEr;hYBZ0Nm!w%8LpX2oV|XxsGmV*mh5JmT_HSm)%^l;U4f8qp@gqnl zRz@14J~{|kQ<~^g@H*2y81EVP#t+C!a?@?Qo0|=%s01CUczRmu3yS;w#UNu6(HHHs zSF+lJJdUM!Mh>QN+h?cX91 zFK|RoxlIA{mCr*r)H$};6=H~o~G zpMzyHx--D-0B!&GbDQlyqr5pR^Dp%wy}0~Ecd%9`*5n~c_!93e$YI8^5XWzJE?AzZ zlU*6}qxIihSf2kJRsS9oJ4#h`{efEnHxlo1sh6KN@_zT}Ni<92$|o}cDWgA9*$gV^ zi>KIp+S+o7yzTFpJ(J99%Sc!hoZw4cw~SJTwFMqxO<0Leb7+-Wl^A&zmXUl~zi5V) zsz!itKZ`a0x|2jqBMBt;AW4i|ib($*@q-dWk3W+ZJ%e~Ag=;$XnV>FraDp;GX?zhq^AW)>oIr4>C{Y=g+5eyBav*Pg%`##G={b zsbEe_mPb2LbKX!9&)xHg6CQbFkbA|KGuIoK@7RMtdZ3OC(_t=9*Q(18pV44qg%4to z@c8_#mpffRuJQxxF4QQf%jNdkZ>Nl;4$!~H3f2$=o)da?8MG^PoNrdgQuWV4-!Kc| z87Ryl6>cl(&~>Q*Axz3a5q?Se%|R;XPjW&ur$RzET+WeZZQqu_>^Ubf(KslfB=g=O zQ{(Raz$cS&*Kwf=bbC$YX+8KtLzs*B!Rf~kK0hoByTT99r+Y%h(bn)dG6Nccc*0C2 z{1)c(MGdLQ{}fxjkQqK<=?NX>P9>c00y`EkKvSWj=^pR@vsZU#|J|#)TY`$`TaaFy zQVlCYnhpUVuRHA{238hu1&peYM}l=ADfy94AO6AdIiWqFnSib2Wl_uU5wK)0l=44C zfB8~cT0`?%t84`3#D!jnS0a2_b=$@3#GQeA{nao_a@%Oa3eF1sdiBNcPQMaDM@hni zIgj?6ACg3g2<&M=Bj!UhtQXQK$+NlQf}3GtVp%14mpA6mqPrRZEFbXq536?hU0FlJ zhxKwn9Ogn@wNC|b##pEgKI5SIAb{8>*8fJwZFi+1f6@T?hc1ILQ5G0aL+$(Jz7!9j zJ_Bfu>;^@7H9D+;xsZ!gS_N_<=F_O9dF3g0r4zn050dGe2o{XG9dYr8H0@-}T)QL# zai^7RDEY8WufD#F#R1uYC@Wi4qFdIEkA=6*{e5@)7I*VV6|Q`D!{RC;r_vCGX1LnD zaPH^i)_0+rb2sLhwNHZm9eP@H_N$(|-TTlUgXVw5BkO_$jXYAxsbI$Z{qNw==0ZRf zV&DG4ON40{D*Jp_7eE73dpz|Cy`-p#;}pIhd4$xMHPb&xK5C*LTQgLSjBSPXB);aw z@(v>!c063mn)2SoH}v5*fA9FhFvw8(!#pe5e_zcL10ZEoW+U_Oq*wNON2RAg#^Y7JB7q$jalow1BhuW%L@`ORf+ zTjKp;{ZEkQ`!`5i*9hYU6M+F>1vDT4wEkA|u>0Q}l%*j)x*{p9CMo3i7W7WJJY*M= zQK#RW-O}aPK2bSOWOjX?|K}UL{*t1h*Q6++4(AY^5>Di!%t+yMWQ}P{LS}C{X1AY) z6G5b}GXKCc?|6-Cn2Ga_SH9^V-1uO^iehrpmfJ$s&Pp#Wyh41m%DDwGon!u_DF%(8 z`m9Qnh!9#ibF3BkZCLsXBp6z|onM3^P(rHh6Jrc2ci{(06wmm{hO_0G7-RS_PV!1pZKE_kDnWypkACiBo6*tU|!jS;j?_LrtA5?C)y9o(E=M?=*`rkgnT@4%LCi z1$H9wYI+pz4%RUqXyUK>%2T5!7zRt?f&dOp^V^jq;1BW;HfB^7iwnLqb(AExnjA-{%kTR&X*>Cb$LT)(WqJ;@fNYmU4fH=(Kpm zog;yH>MMx<1Y0s0`jp){1w>Sc{`>i8PlICBIU#saZx^tUGuESsR%V|$l~2KkK?pTN zG_^yrIMfp!93M~0B)4r}NCccHI+;rHY6dpoO1SueQ~>+rR~em`U5snpx~?}U0bC9( zwZ8kkzWV+b-$>DF1_{8tV`p4{cJpIEo!?_e1G0~&z>Lgjfo$)7)-)z#Dl zbsykjVj>FzfBraW38=QQ?e}K*>S&UQ8ows8PghwK(UxQj>;#;z8%F9jk*B^kxoE1e zQo}PWIR64GUm}UY?*r;-Po%xW64DndfJl3vgQQLWRq2NJZnsqcit*$t zo?2Ar%KfXo;D+m5TRpyuv21&6^G%6~5^>aO!?8=TO_yK)^W+GecTG(5hvy*k;-`k3 zVnXS2kRF(F=WrA*s&vLWyr^x1AK%rMqz<2#>1OSC82zJj07N#2YhutsYxA2dIW7Pi zmK3nYvZbyvBZkEHj5zZG5OwqMHy#D$Rdwt}0JUBI;W5PHeU`E>rgv(Bemi9M)7olmfo87E%oV~M8_YdUZBA@pG#gY3V3Rq$k z#x}n_TwU;JMBPpET&U~O@e&UzEn}MUh63kdd7+(T)#{9v8UeQk0-!GN|2|U1I9IX zJY099>mhX}dgJhKa?*Rm>TfFm)3{_;q_~l;(FvOm2~O5z$B=TwwoWoZXHe{b4d)1 z_8Z~B)1QcM!;8iu8A(6(+&KGrxJe^M&yZ1J11{qQDt9;HPgwSwn@UOhts&rMlAAU6 z-zuue@%G^UsK9UCC$i7xi&Wf;_cV~sJO-~ERcsG0x!MY5aVGji+|4aFPf-~0yliKz zfA%i(ln&0h5#c;PWGZJ15sz@`Qh4MCfc^sWsrRcXWx6ND#ADIi+xFmb!qZ?lgW@#b zyFxc!g@Nj2Q=lTJlJwmBRqYEjS5+so-p-(wdZ~jJ>e?--z7L9}h^OE)nkb;qF)OJ@ zwq$*jjsRFsm}O!u{7TR2>k53zH077?iDz|Q8mSDpigl{AA;rpTSH7;iU(U;QK9eCIK+>C@p@Zlt zncwdN0GDSf`|**-+1ZfWl-o{e?ze}I0uS#pY_nLsDgsGY96z0zk?PC5ol#Azu64uELh2)sNvIZ zlv9DA|8yIwPc|R24_cE~zEnw9W)~3Z+vP8~c~0_zxJr)PUxjtq!IrRa(E#F;?a3Ul ztL^-XnF%-^qJHN&@-5D~@_Ep`6~Sdm0ogFwUoYBI5gvrM@ek!7eknBJ z%RFq`xd%C#+akV58pLS|Nh9VV+oM~PT83?;OPZ*D_Xq?+I66I*awR}7 zdbiI?g3sxVH-r!K6bk}(AtQX7bnq#CYi-TPdx2f>pp>PU4EDkJ^fTE9dLN_4!h-#K zjio*mB;CtQB%u&Pd8F^8Bx@hx1abJc2!TFrO!2GBlg8^LUy_j3t#jmdEzJLX_9M`N zT~lC=jc9k>>@eaR+=NY0olC_i)h8S%+`F!~Z%KS`bSq2%74W!I_T_!Q#4t9}6KE$s zwjaI!-#2s>oMMKOufvfQrJR_V;3%C&zfTs;QvVdGSX#juis?D+yxc2E2*q?ggcN=) zknVo8fED&VY@}NnUq-p;$$?VwnZ*Hh08p+skXWl)V+DLq4vtqyTdu@~)KqORR8Pm` zy(#g>o0t12UOpfOxu9#Jf{0TzVmdL%M#TNXZjq z827h~4^8qa_+KWrrEu(Ch#5w4=)(Ma1v&!?q+R#(i&jnqrkiHKOMg6y{#??n$~>o;Aoab@Ua21*aMwQZ)9}}FJCstpe37Zb8R)c9xV*x z*%Py(3cr^@xJ%v+kyx!z}w@%~bfd=0JorfHa?q?Z`+d-hYd?C<)-V$o#K!qZ3k#PNs@MOr$;%l1k^tvvG^BWRaP7J_U-5ve@zw4yaNQ!g@TBqq>v#|G5vOXp+t~3rYTp!9S$nB%qG;Aj=dw7)gfOfrR2x*?a zBg;C&&AQBbskOm0vG(}tVXI)iOm93&i>U(jam}l>8jhAAi|gIL?0P#0P22IJOC%PR zG__htqrsdvfzW14RqcICgYK#Ann0J;p*9OJ}VMN z%iJx*E=VmDA6eG) zUxMxd(JayP9>#VHR;=%juGIgihn3thFCDR!+&EMx9y|_o;$VxXDs^I71sv3GBYsEX zo)+E>*lX&phC+ZcIfwm*{{+~yO=%01I%M0nyahRniO@M87dKUJbD+>TGx5Vt08WDx zv<^RGX?^;J3U&E(P4B0-oJOs#S^{--Jr^wT#kd$M@9h}BdE@J@r^u;u#IXNYTT0eN zNwid2z53I!Lno0Tt!0=a-8`LIVB@eM^vS5w zoBOp-D(^HfQLTTi%dOqtYYw_ZaBDF#hR^-68z56jYdI{UMp>EqrXh3j9$s}21lrA~ zybnG}2!P%@b!rxKlkl_^|Ivecqd#%%LASJVvj67sS2g5DdAe6nEHlcdb#T^4oR8E` zI*&i}9rV$y{f=%0Z>e8% zpR!2@oGNdiO#9NKsiGHv!<8fdw4Q3CS9P{kQbGp|)^szZVCl1`0a&-3g0ilTI69tU z`UEVsj)UT}sB_R=(sLo?bVJ=g0+YLvLZ8Qi#Z9_cmkFTK7Lav&d z_805c`V&jU!e;gzB+oB)!wNExVaE{xN?U?Ocg6q@O|aaLcG0uEYRNycvtDeKfmGoaAIwX{k-$=i+7VZmRuw1 z6X<2ZzfP}kLP2URo#8}(9~S>;;Q>@i(lED#Woz(rD91{7`=!?f6UFs+V9XXfpH z@47Vfs3!ddJbUL6~EwwrchA%L`)c-DGZ9p!>O^~(doP0ad#!zqrr(d14StFW7qRq@JBUeZ4 zC3cCZ$U-J?5G)~<(qbvMtlsgygL(SAO}lCdYZCOY0Nlfc#vNH~%8sR$py1CIsBO2I zO6ot{uH&@f;`hMz zfUFd#r|esCv1>5U3&hK0$&o-&q)PuibUW4;r~P0dfn!cm(U|R96y>KaN6i6?5V=|{ zxaor4hGts2gnzDgKU7js4W?dsmsB^Q9OHR?nDnJ9li5MFOzuW+t}Bw-x`)r0LfVA? zwy2?%OtyV%B_=oF=}O%c`%-2KQIMa~`dLoEl1s6Vvh3XHXu$W;v;F3GPzJ$R--a9W z;Xe8>!`-5ath4XwRiw0}zS0KYIjAzZ$mjg_76PD>IshMH2A?&_>t-Q4h==I8%z335 zMs;3LZBiUu|tjD{iYv#vXHqfh}=x z?x{wO`-(zTqn(O`P}i+wLs!drZ?WC8-b!6Xw_TXTW1vQENmX^cuHYu?(TC=R)+<%z z#6{>#?UJ&#L3V^vLdcfFo}46aR;I>`aho>EtVzPq@Qi&=qqAA#cOI&ge-4zz2~Kd{ z92^Ri-k7TZY;n`7W#w+@Q|z@uGpM%M`-XH*_h(SE7rgk z>s)#y68$;*HcUNGeT=i9Lkb8n#DT|Rnd`=jv6TpO|Am&2;uH{~&eU}+!g=*2C#(jK zuf<@e3t>yq66?vo{eXsOPwI9iJ=ODHWKQQDYjK02JM4ryYmKs{})ULc3MYlIonbYZSVON`lO|L&z#Q7#9P?*g5Vt7d(C|pfg zU7I9obq%q6{8@8&5#FCzn8^PWI#kb1PTPw6MB3c_B{(;h=fRvv#2*5vh^Uzz$;ETc zpq2Y#^d$Voy*)EE-^POR7i*9c@B<0NvN@@7Ea2iJ6&_g*-L*V>L#WKUyixPe@CkNe zct*doxfq}bQhgEPiw)6mhZWk^8wHGu`w0~G=d<1i$tOB!36fNrj|2?8GjWfR9+qmf zC9}Qeq@Cfin!wcMPZ2Z8(S$jf%9jUZSc=n<6nqg?2X&5nQbMSmn!-_D{ZSepW6hvl z`FXhch$qZpUGQ9z+q}`5S|>{bt%ZG|#2&wMqmM6$_3GG9{eVDnc(=ew#?EcQ-a*J? zCyV7ADfPyF)1$<}YYtIZU*;3VgPC?&)UKOA-|a6toW>oD5W2zu*+7t&lncT!1vU6w z-IralEV}GQ-rxaRwpCnP699UTaS8T-TK$h}X<41}sO&q`amr2(6d~N7OpE}f7$C@Fy4AX?iwXQ}H~hV#^@hnAtPILC}`+PmU<@7gn#(;UuY(QTKH z2qEOECs51nF;NUFYa3Qd{^}RB%yD?o?i>t7>oB2W@kY}m^`^rPt+k9vo2LpqIYfvX zqCi5og1PurBFZT<0?5x~j!hP&oMN63Zj2HchXx=@0zcvp_W23nyF``7_%=8i^*xy( z-YZMGrOa-c|EQpV@glKtIBFI)JvTE@H#c)-bv^@oHP!n?7eDv7%Vf+vF~=T`SxaQ5=jQSu4hv;*P^^jsohTwjZe-k$iBR zr6H*QgrLc9W>BUV&`NCOqq7q8e-nFRp{r`z7k*J9ds-0}2iwUO3n6krgI3exHv4KL zlrJfeHa2psUlD(mlafUd;~>1$>y;afRk26`OnL|sf$J#sOzBr`QHrMAJwTtiJ~uu6 ztUq4q1hBKNb7v#neko!QA1-&$Chln;3&pVh#%R3C;(MUAbOHLm>iM;uZa>yQxpWQ-B+mHicgU*0enq?St{_n_pt;#UxyCFvc&m{OzzaozjMPNh%CPA;#%%@?kY+ zcYt0w39X5c-FrP_iOZ%WgU7Y(Pp0Bum>_93pT#bL<$VO$KeOqesknp{AQEF+@%g;_h+gS zC?x5^t1fq@*yD@!XX!{%=gK*DjDO;J=P&M0zB+QSZ|lF7HGF=z$1yT$_D||?GAdH< zI&~;qkUH$Htu0|$t%KvgGyDH1uL+l=?yqXzgymP}zIRYW%mj|av z1iA-2_8Rm01d2)--Kek~xq?&S*cc&u{d}qpk(pJth9016+<$9Zzwz3=`SFhR)2t3M z{-9599xAe+Sl!j7&%PIy_jA`Bo#bd)F}24uBi4baiyQi-SL@jj!^fUqAJYB0r48SB zGG8%&ETnqpiJb5}`u#+}=hP{2-9rJnQKIk_4S3{g{NbnP)NLvGR4B{Jl6+G@Xx|Bz z)%fE%nWDt}dlPo3fU_3+jQKygN=H(uj<7u~-|J*$lDNj|kapNR#HYDC80rXJoT$k8 zU{3@3y`yd8XG%t+e>QLuLMkzSESU~8okwap3&yK>-PHf|#WFzJ#eFdBN}Mmvfm{R9 zNn*Kaq&L(hZQ-i4NEtEz#nZr1B|Xf6Yh`)etnDC(bA7Xw@#-t&qISExfzuu2*lo|f zusFqRFVP}m z@b7h*3rKGYuKk24xk1QR1R0B8I>>CwNlrLg-^M8{;r{e7O;mLnf@YF;Eh^w7)N20` zP3DlVkTw28m(NEOh?1w^$m0Cwh#Yo>{3;JXe92=5AeZ>vgPgMa_=U#4 z#^*tUTGYg?39G$_s0-6Yg>P-Uwjp+#Q3+Al9z#=NRcfR=WnU`Oey5xn(( zwY~u_{Onz`G5lKJ$f&T50Y;PC_a0(Ocl-Tb`wedenT+RLGHlMu`8qYn*f{{k1{Z9J zsVCBqBFni6B-S=X;~!3x6g=8hiVx;|_*v%zjrt9}x_jp7Zz6lE9y*y6Du`InB=Q+Y za|qTC_hL=+$2J>~hQFi`)oN#BKD}Sjs=eQ-@MzXCK41y*44f^-hV$1kFF|dxCV8W| zlSYoS=g=U9&iO;&>)g!&s{Jju4B~88OcOG-iQ;`D;nu^kAfGvyjCV&dDi@m!lzf{! z{}b`JEFCWtDBC&HT?+f=R`UVc8V%T-U#t0)IU-~$srXKy^y{4vM6S-0BDb1@ zX;7w-#BYiTc1&U*1wDnJ_0+Su`deh-{AG_%b{t7#_j!1#24GIuSjlv_Qmt*zEU^7oAJ#ZS%IU3P4&)I zB#l&M7zn@uY-^4_f^whBG6MOY%-H5@+aXXo;;eqs8GSc0{UR8D`zDtuQxLo;%tD#9 zMboRn{e!~Z3vF@$zUaET{4J;S8|dtE%)7aJREGo_?}Dt|*FrXKXF8jdmmD{Iek1gg z*n}#=oLJZ;8hFah=99SoOyxF_Z^aYJ-m=9axHek-5vvn6J3ASlJNRr-zx^xnqN|D*qmm2gA}a(X_0D z36(vGkz)*;{7CLaTn|ex!Mw4-D2yYXYD*kugwO9%ODC#QNWrTRkLL$+IZv`_IL7?I zLBaW1xzyEM4aa{fMV3K(Ti&%pIN}kG`oj%Y{$$dMam|q6^zh`H_rcV;xz#Aa6_^ul zY{vB8X%>+3UJUPeY=1xSWQqlq|HJ36G+7Qtobhm29Hck#E(!uD+Z#g0OS9nrcYJ%) z8MS|B4h%7UQ|Qkhs??`ljmiNNoWKo1Cz?g*nTT33ng*86^&-bem-+b}L2=JL6R{p! zFW|^~!}pZndNA-JD=THz%n15|B!!`d|FAI-HSEEx>>DC7?DI{oQ#j?PhGQeazde9O>6Xvp))2Hsaa4b<2{{ zer(zvKno)3wHNXhlV1Zz)pG6q8 znbl-*-dlR`@=srvgzbTOGFH{QX8+q5Wcq%$=Ix$&gdUlvr{Nqu4cMO;fY-L7tC@mA zrqsi3Y3Ho$@W(!N5yAogBO^$oD<5~WL%~kpqFX0uU5hWy-P5P_bc`);(UgQv6$a34 z0ge2jd8ISvxnVn~~* z^90V>r>t%0%cIND+92_&51Ev)c+yZu92e{lYV7;pEfz2#^>k1CR+apsNt#y*^7aKc zq{$w^8h`ckgX~QRX=p+yA%!E`$@0B11?J=9nuUXvBncp`qZd`F?MwgYxLeP0_#o;C zn@)wUrSSn!8v9#pSf>&y3m|!bMec6LkqNjTg7JaWBnX(Ebf2lY8b)>QzjFw}Bnv;H z5}F#_l7uysKk3a!>@x*KNg4W+zLhSG?JD2tsHhNUS41ifeswGcXspro{?8hkD`kt) zzF36So%-kP3(VqU&ZQ*TMXv=`HZBQ!TF${urhzRZ9-X??w`H?i`_Nt*Fv4LQp<43> zMAY23W$7DmPnXBWE9#9RXe* ztw64;PZ8%6IWI0))kjsBidbXzYNius7O&qnQ!M?;IZNKWzh5P}(H9BjcgJ7oZqQij zhJWi>cag^-5X)ggNed7vt2_>1SoL9sexb(Z#JSc9&5azbAXSmC1!mmaZ~DA4jPirr z!gdPdgsTDh-ic$G1G=6wl$G>=cK2i(qLN*!zB^lm-2_laO$A&TnWd4PqJB5v`^oD3 z7f_GQ@SA|d{(FQmziHx_ZUr9P5QYsbxt3HROF#~%-uX5PqtyLr_oW>~bm`#-+K*QR zY=k`EkWPcDQB>PtjBk2VvgP&U6$72B45%x9qz-tSE4js6^P692Mg$W-;AMh>UL_Wk z24o2Xu_k^H?XY#sJkCy^hy~uE9_gRKTfT-E4^h6|s<0(q1n+%vgb87jGFD`Z3BH%wv~djC&CG+a3aG9#5&jAim|Y&Cr3KKi3? zoN_-#Wq*CinCV-kGHq$y%vdi$vEbr7TxLkP(O zMNu?791fDps3QSp50~31ViQn_k-=}1h57g?!eUEg5ifp$b@o?N zI=|k`CdbX&hwZKLcma*YmICw35-asyIvJyc>~jmV62-{U2^zo?B}9mX>a?U6JwOx;7%+nOMMI*#~CX@WNAjrgwvu3wclCWx7<~bY9pY8kwps>_nU%WZ894JE#5WNpAxkG5S_)sq2 z)Lv%a9_YoyatTRbjF)>o*CM78^Plth?%-NpbXp0W?{2utPELS4z1H4O+-xAp6Mkbp zy5(IMoN1apA$I4nK)f*C^80|lm7Ku~<}#g9CIuFcn__&+g>F7-0_6r70=2L*J*aM` z@p&0nUqkkjkq;)f*Cnw7z0jd@QET_WwixwlW4XGazcVN=(xTQ86`v3&A$0dn;I$0{ zw$!lbAhm_EX_>fNs}cfZL2XAQq?@=$qV_}{OcmG+!jN>AZo#vexj+TbrDflHZq+*vryB(WEa!Y(2I>oCoHw+@P zqwv%yEyO-ALMEJXb|_GF&Rbm?%YfF0BT!SZG=SB6*Qb68) zGHM4ZpNJ;b^h5s@rt3$}<95bEC74kYt0Zv*T`}kwD$cy&qqi_6uuQd zw?PtBl=UtXVLIH#+dQVl5lLf_I=TDkJnzY+#I#8oZGR=<2UYg{Ku%uL=68@;j6Jf> z*f}qZ8d`~Hx}N?_jd}%a0m#Q#Pb;eVJ3TFc&3mo1c=pz}ekV@FEO4odvv_p_qoz6r z%>!=&{gXhC*Vhnk>^;VS$YI~JVTN0E@#r6ic-`980EV08WvB_|iH*Hjuo%_nG!Oa> z1t*#+FGY_EJL1{{W&h*rS@SuGe1C=}LP#G7>CB|>vNq$;VWjwP>xyX9X(q0O0(1)s z1{ZvG3_GR>BN!En1jX_b8Yd)XP{l4Gp z>%A3r8kupXNLfGn2|UHCy^3aQM9mv3OOsBjOVle2pkCpiqrgC-L_BZ$)}w&JS=m*c z_i*nwX;zF;SE)?bEHzvxMQ(!_`10<&pX+`v3ERtqtz%iKwOFE1B-<{{5IOT1v>0~o(aLp7oQcvA zzU6{pfTybkQLm=z%GV#qXtSxOr@7n;s_TCEzZ2T&v07a8H|%U(dOIYPm{0_2R`uye zuRs4Q>aohM1??HNRDN=IQaD+oEz8Z6?R3jTA7kA|-yb18%3@1TLU^)C$1ky%K)$*j zQ@36>$ObHY$P-DmpSIrgvfxdcovX zl}owZnNv?3>@;G+EItPdd4Ozvo7%FWc*_J&CB0>ewBUuD7f$PKVnv*mUGaSd+^?B-?4XTqc$vadhAYLYQ%ju$}inEfuJ~D zf$2-thg?qUK1Gd_!v1((f0WIDXj1K|W)XJYpVuojK#B0%X%|S0+1RnV*XKdiFEtc; z3N?H8oS6Xm^^o~In6?bh%my7D)2|-ia~ilL2OI2w+%vrr7%$_q@RT!Gg|bQ$=4^Sr z?3KFR3$3l&>~XZc9L>Vj)wK%Bugrhfz+tXnh6`*8O6dl3lQdZL@=JqmyFq_OOn-gr z_7q?iCscryjbM%8?r{W$sFeJWs$*yX`Q#* zQV0_CEO(qp((7z}tcPHjRQZ%x+=}*6bZ!T1VB#P-p&lLL2j!ejt{FF;a@&;wxal$4 zwtWxdR=*sWoiqaS8(P#!L)`(qp7ejW-}%xgI_L7;eU`0`l17+2q%=~}qBH2hM*r{d|>O?(~s)ddPD zhez*u+2A?NxpzvdwzxvEX=Gs6fZsexo%i)imtYS%q;JM(y;iWIFGS0f{V`^;fxPkq z!fOIW)BkAR$N^)USeyGtto-e3dzF_}75GzKEz9>u27o?`bNlUQ!Vv44vmTE3B%?+h zXfhMPP(x{L<^mJ${fq(jN zD4I92JU7aEsn$G}yXkgk*|l|R_a*3n$`ulo>Wopwf4nA}W0hFBNDCwkKVHhiZC=v6 z12HHrZHtU$QAcOlfJKiFZfTvnerN4Y*f)%#okd$8sC#u8UF;oH1w#~f9Hx{L@Bm1N z1xUr~r}YSU@|~pPvi1{uyc(r!DeBUrH^Avr;OWWxfnRfA$rSvE5B|l+(#_$WTuB zn}1%_oyBG-m^GojFswewA*>$mEgp%?IkdkvOqJR9+I@dKn}qjCroR#*+R}#Z99!I& z<+g%|dtqX^pNeGR?!{nGaF*rE8pPv}-UvU&$tH2xJS@FnCa9_xQWJc$Jx49AZU=?+ z=_oL%Mk;CW+kyfJdzOYdq(8k#b>0cQvD0O!(o%2^^zi&fwlo!~1ddx0S$Y3vm}!Tx z;l2u`ajgg{@05H8&Tpywsud zNtx)r?-ryOX+m?!Irns=gznyXp~n}~LBJWKCboZHbavN3*Xz*&XICLm!l}rzuzt1> z_ZgmFDmRgxVX*FjY5(X6i8RhyES&w+M=I|--_V;t4%2sCVc9}-YQS7|{Zvvg@GhPPCfaG(635Ob^0rW**A)6PdwcQf__%z0|8 z1YunRQ*88iTa*6BK%&%=ygwg;(hs;C>8CuH-Cv|K3bvhmGne#rbZLvnwY$;(5@^;R zBkMi+Bs)e8b!=Zy-3xfkIb?XUoBV5H_SB zm!S%zE!Zxs{srByDpdD<&ks^>nbI=GcwUI0b~{Z2F1G=P`^_=>uyGV%`YVQnB~V2T ze3105np30QOA#eApF{HJv3f)Rw(A`qwd`C6O-m&UoZ(qI)^H(6fp!F6guOc&9=p=a4;iC!$5GTK7PfPd}0581qi+PuVtt=Ml%Z`JP$({ z)iHG`NBhB3ulR^8sCFpIi)%%s?@p%no$*83iwEmt8KeH%H+-2Fv+*0yOA{$Bpd*H? z^)1=LrLiAWxz{?Z-NC2m-MJJ=q~Se2Npw0XW|)4?HxMAjrF*X-rbW|jU9x^j@Tnxj z=91d&zb6}0xOh!%<1?I220`Z8CfOkYDY1T;neTF(r%r+i9(S)epDd#}H)P5gTHI>X zcEzONGaEpT^a}{bkGFn!^;8m&`=72=kF`JKZjz04ciLA`tyF7D_4m2@yv%IZVx`U2 z-Z6Vyw0%otZUPN0B2RnXOw+K({o?~%PJTPu(!rZP#=0!CmR#*c(?OV!shwDsf9WH2 z?!~?TCu`jra`J8P^CPtoJiUWNXRDfuUT^#--GQ6ve>-npw&e_>sqOUrAr5+Vq^pB? z9Su^RNm#@OysK1OM7Qkfv#h=$;?0l0u$(3 zkp+CJeLs}4pi?#qgyeC^MK%vg)z-iO9ixZ4PHCi-rOg`3L&@!Fu@1O+Gk3Fp9 zY0}MK*CF-CvXM-~*jx+&Ox%=W@`;llUTsx0{rfR1)sIX7MnyOF^}^sj=}+-c;Wz=K zobEy-8~KCcLJuy}s%BYyr546<^H*3;&h@V*GnPf~Q3&dglOU^taRJjcM)mWo7B%!-tp7pI~QVkB+_^IaVH1d5huHY0cxA*H5}aVowa;0bLEj4=@GWAmaDM z*@dQR$f??-$>o-570`&$SBEZyz}bz(CEL*$Cqzuk6cOZBZRZgdv7{Tgz7Ki z{Y@C(3ebD|h84`d>5$Etz5OYq`@S*S@x^URH?RP0@`Qx*Q%%T;AG%2k*#WB^J3+1?7qg}TOkI(IW4lF4(Q!dcoT_a(Af!Hhj^e5CD z1ZgVQK4RrmpdB@ z(GeCxM|)BMr+dXar~Rk#-~*j%nFSLZqtYf&9qqyw16mM|R%fjAvK_EoZ_nP7o|PMX z#Q9|;j3@Bbnd`L7P6mRd6DS@b9<~;QUqs#Q3PV6jyP1q`$d zW>f1(Po=e+Y{${7w^^{vsLfAsXrMkSQ^~UKe$CRy74Z+8^0}E)Z7<}vN*J(~neeZp z(f6oinPI-ImA11n)+xj7E37nZc(Vf4LoC-;xXx_TA@_U0t@P@@ms$|#Q|jI(eYN_P zS-oSvfL2W%Khs6qooaG*JVy8qTs(gG4Ah{cS*AhL2HnR0anM-e>pCi7JaN zNFm#Yl1Q+my#ZzA-Lkw6WRAaq{nEV8hJr_H5e8 z=_**`h6H;N%gYM5P}}9K?k&4aSpCrW4<7nm8|zHOQkGrMPk)%<3zc&VOJidp*8QnL zW*zyK8A3zwlw>_O{=}xb^Ve#u{J~WWv?j>114*)C*4!m$^$ro)XkkxBE&gO|z7%N3n} zFFTQ!wQ!n-{=@|f!TYi~VdIo{g}3@MTn&KC96*ciU&brmoVG!MY25w zq%14*sqKdMh-8>?9F-%E<#totz?k`H7G;>P9eAkl|z2qdabMdjozwIbJ--kHZ+ta%w;c==u9soXTJAy@k}Y&cjFAkRL2O|4a6|oOL3ml=t%ji{ zGPjGqPOEaF$`JyGBYfWAJ=dO#SJUxuzpKIfnkp)6T=gfW8z^ClZEXQ&Okf%#30_X) zKHNqeci8$p{nVMBXucdgH%&?~A~?vE{nhC}34pQb>;|8xy|wWmBGGT;Ta8gQn%LJk zc)D>g5enrV=zDFi3&u*)!%~iJm6#R#x6NiQ2@>NqBnzyzQJ(k^pUe2Aim;HGpi{Cr>L{?}qApsEt)_ZG zHM`Hqc-3Urtb4(Pk8kBk*f>@L7Y_c1INpRAyhntpS!b%^>c;6XvFq`IKBqZrXyglD z1o_w6Cv%ITRyijlCFO41r2X@iPrX^ig(D%f0jDkyiGC`pP_G|5;Gw4-Lq7Y(H2<85 z8xDmV=6PXvwDP}-5zV*n%zejxJgdPF@P(Doxm;ZR4c>?Q$H?0ARa+bUbGFhjo8`M3 z9AGHGGrzg|aj0T!C2q5923_v*-L0-Hy9-gq_;e~o^c>Vf$=Ql7tLQ$WGL81Bj1GxMzf#fPf zA!VmJmvLgb4n`_+B<~|Lp)`Ih%a3BRa$UTZJTpb$^O#OWUiw{ltq8*8pXu-DalQ19 z0XYum%g}<*&?8T~!M9Nxc7qCqMZSKup{vWW#(i(k;3Ed)gRJ=imD+n+=@H1wo!r6Y3Hvl!@!%P!z5Cs+H*EdGHwCI(e*y%D?LybKt+E&DpJ!`d4z!H zz{_o?9tY;UTv{yCLrPCtDDA%XnT>Z;V?#cfin&sWaspvr62%7KX-c)tCM@YuCOUBN+O0Tk>p4 z(i6A1%Ha`!h05hHLf{4I92F(D6P2eKU?a9TKbaFlM!1-%h=D-?k6tGI0_#a37?X&y z<|=6!$qJ2o9p^xyo%>#QB%bmbFwhd&8^*Qw-xSeKZhkCk`3ra6y*5t(rtt2OaHA#8 z(UB;plOeQ_&P}-0w{TJ$AL(uXXgbyNCNsh7dtbKSdyXF>Lxv}?thOBZL7H?)DqSxf z;XT8+lk&>xna{K`vL0E2QV@#%0)`cD*KUnwy~8w{SvRzXHxX9!gZW z?hJ-7qrN*bJ*yTW`mIeLM^FF979Qa^i5F{x$gJdeD#9hLcZOwF<|{XPXZ> z41PC*9x+m_8NZzOcaP2#sG>biKty>m%ldTjzl#=?sfoh`J_*A8t3-u=4&^MJ3*72o zVo^OX1rsD+3ZHF%;c}m9(FJBSWkQqGlkp^ESsq!F^pb^GQ&=b=8ZNcxrICGRo-yh; zErF-h^}`E%&y$N)LPLgA|McI}rYBY-^KGeTv8EMZi}4t>lGeiAhkeqnfB)zh6RdLL zQe3i=dehbe^)vH>71kMA4u8=^hkGaFF??=M+C18;3O=UyBQ5G!3?dXqvFH@C`%p(V zz;z?-lANqX%Ss&WuVt%5nL5oZJkDp24kxM)Q{6fXr1C=HwHH*y;R;PZ0-ljz6=kTa zV2;EDzu{^_NPD@`UYhCI_V|~^tH4gsjLH956*IvkV(A(Qa)gkHc#}wvNpt;;0($&)wr)+Ojpf*!kNK_NIPu6%*wF=Z;h%>1} zWjGj#Wjaf9aBR~H)MG~q9HmARY}%D#q%Kot!XWmV*FRA4(cp}Q0T;>rConrv_1xNE zhJ$LA2hK~$Y32!~T3!EutlCc?Er`8X!67)=0R_Sntje1w2d}<(f_jvjX}sPO@3{D1 zI<-WMd|?GUCdc%9K$(Huv#U%u`R*#$tm*N}-~W-7EMZ|MvQTKml=3maa|U)JTLrki z)Z^t^GH_2tdTY=Vsk{HK`_K2Tl$DjCnm~hlp|%zKT0v1jMTCoFY9{Ee#lXi}V_6In z{KG%`irzolf;flwe|qpa`r>L8_Svz^$A_p>siEBpOC{e1!9<7*@MeU}9fvXN?WYoD z7t&oLMylL@{urK!*!#U^vHb26|7waS+H43+TR zCEZlXY|0mj@+^^s7cu@#AKn$I}6dX53>k#B`9=-MxqMto$yl_x(W#$yOwH5j3q0jm1UVDV9tJNJ&E z9@zu}+t&G4kNI&wI%<+`DS)jjo0Bm$URd;=KCZ31ZdJ>(J|%UlfpZS2EBWsrmK?B( zp;*9b>{ad!!*I*Uz~@#%jVtq@p0-P2@7IT0)RN*%&Tz>Oy^Xhb@w z(xz-93}JHGA@Hen^=MM7sA}rwgSqc-nQi+Qku=+5)b(=;KVO=R2Twl{vkL+1>AY30|n(C&(kwK?nXq^$6=}58X0;&iCSTn2g8^nh2ub>>W5mx<@i3oVHw%6v- z!3{5*0u1*gU~L@zDC*bfQ>k#!dlQP9w;l%dtf8pQZ4<^}c9@fQEWSkql+P~)7$K#6&YQkZ+LGpTh!Vn`|uoQ8KD$4m>2|WjDMC~oZ^<2f~_25-i@dYfC73OLT$r~n|<>#>!Cin3u!7HvuX(Mj= zXT;s{#s^YR>zWdu$e@YKp*@HxC0X9)Y%nN1ErwO$4Ssk74TP@XZ?Inrjf}iL)hWDc733u`}1{ES&M&2R?#)OX8CFj$_(1{y?5!#FuU6x zw{XwPi%&k3fS<}|olIE_`ttIk2biwsht7+gsurD-cloM5Bc}JeJx9QT91J~KMKJLPPlhsb->(DYn9K5; z0L#*9FL;)pzq`^`vvnn~_2ChdR7u-W=)2+?u+?iD)TD>v^I$1?Vs;mUcnm`u;9GXvo162`>arwRXt$e!l~YS@ z%H|+7Z4T{|`)NU*9*D#b4CTge+9E`GnqrXmD)5v*d)*5>EaJ(!!QA&}`I2wf=Om62 zB7VgP%y0G?+V_o(DTj7t$Pi)-4N+^^*FA?SIt}E1zI-L^^40B$G~s>>DQtY=M^+Ag z-X|46O7_9!_6$)C;sz6fqA22B3i>j+;j6UNDoos{k&Iqp-Yc) z?l2HpxGv3ip|NiN{-cUr|00p{WNuBpy=e>RBA0mJ2~1kPcZpX4T}odvT;y920N&~g z9pj=OF~6@|T1t+zF;Hctm3voW@Y+_dLZItO@qwKeY@?+o##{mdY6bg52!f@zkij&U z&<#(F?r;lv*cG+x`Zev}YVWanX;E9F_DD89#XvkBh>#l|>_0|>P9(2$W>B%Ao;gzK zxQDlEVWy>9BWA2;&5n&BO2W0osNJOn*!zF9eUBfi1oK?>$~7g4A}&L3UCF20WDJrl zcyVxh`V)U>Nf7aQGG=?+nrn~kFMhx7QfviT^nOJIsCd5z)_KDlcV;u$fK-1a%wkWt z)&l2eCs0?n6V$DREVvl4{?a;5*mwXBE%0Whb)A!!eK}x`wU8_XRraA4S!-IQA85wj z7~4EPP}0mVxwQ8py&eA^C(el4@<|WbpPe1F|10E+Ox-_D6%?GV)Ns>Y6O)ewpWY9; zMxz)~jci1NU%evp_vCP zp^}A)0BD|2{++w@*1y*=ymHO-2-4;7(&Pa?tXZ`^9-)KGpZPxgc5hY=yRTNkU?L;~ z<>t>+q=8?zGT*x$E878h1=xWTHd@KC1@X?m%d-iAzjVN2#wcGxyQm;i6eHNZS{`H& z!Au)ulusvl6u`(PqIwzX2Ugn&c%aq=4cp}Fuvp8<$n zyo_V-NU^?0LstPJQ>w!x@x)WfOfB!op(kSwjCT{o4jCda$0nenbQ=>A5V}`z&)iR= z!oHNQHu-tgD$TfYOVgH|I}+X8Q0qC`_nPOvy#9(}&V!9CzWFjOA%GO0a;H1cDJMCB zSq>w!jdcX6ehl`JECw+NgjK9=Fn-VbR5t}#1^YO2u6 z(i8I`J4%OwY6ZwoUO$2Vgf4#LGC^10)n7uwV!{y3%0!;7hYna)7TwbaR8BY>rFA`5w*u9>JS4|sIMqSM592aqa0`XH zg*o?jb_SU!=JoY?Y>2;hzq;ln86Ximx(oG7d7-PKLxyf=7q|{?|LP?WfK0VX1ub&n z%WWn2f^+@5WN;s!fW~9(iJj;Eqh7|6V#=f{|L?wB-^(NFv2Ka}duxGwz?$j;y}&Bb6W5l--wtm_ zu1vR$k4Alu`eGYYsv74(Bv_QEn3p6J=qEi_G6pG>o4V@GhmuwYVuop{ze1_8-h6^n zi)ubAZA|_+zC4s=1x#P$M+ArGsv;Wuah2pRz=e*_0KezsN}-}6RO$*!)5iO#r8=m- z8uiWfRH8dx_}-6{l5Oohym>U5^pGpj`;c+_fVoMxBd?#g-!m>H-)q{d1bgXlp%c~s z;)=-&7qy)r@8ti04` zWT@CehoH}6vj@zWE_VFjjbv(`WS=a>f5?J02y#_fJ^i5knU&S%FEv}j=Dg`#mD#Pw ziuGI{&JC5vihCWt(i}wU@9Wn|Ulmc?pA-rsKrV`j@Tqbx2N4#8wwqrW;Ai2gb$zRO zOEyPb9e3>DOd?{`5SmcB&y-D6rYuSXNdra9U|n|h%JU}M9~Ii?=uDC+2#B{Ei+6uQOi#2~wR4@3{GtsBvJjkvr>w94_v|9OJ8OR0Y8z zV)@Ik=#^S%18N%6%}k3<4d??}vh!zEZQ-re4AlwD?GI(ZAnDrtCye}hMHa1K@a6qm23T0X@tW|&;=}KX|;THc4T}-bs5vWvNG^5 z$R1?pdBrqijI}t7q(pfPO)r-H0Z1WH{YMkx#mKl*s>2b+$Z)-)7(mHYwh6y2w-dE~ z_xeSd{5|M(-yiVjU#c{$^X=$y;qS$8=xwgFa!!m}b;Z(atSS>Rt2)^!`v%3g{dRnP z;w*N#M%wyQyrN6b1O>6ZG*C)h8u@$W=W}>mo`z_+DQ?CSz!|YO{sU(iP}wxxw}Mii z*C3i+NOH~3Qe_$BT1+-UBNbqSe4j6N?-gH3onDJe-SmY~E-g4llYZM@=+`{B*B?~5 znP|E`gvQJeuH?f2V*x~cAL*kS9FcRq%uN14sZOC=r63BtpV?n-5>48*?Bh7#scTq( zr)-q_j<{;e=2VrRm^q{m64;)LuxpbHZH5FC(n){{wt6c47yJz3d@^p8iwd^@7Evsy zKHq|{vUucs2#z_?M3X+7X4+_1>|<Ng>i^rc*%mlq>xRQ+@)c1uw4sS@$R)N`nXY%aEZO`B+>Yn*M#?4 zrg)I7iKn!8pXS|k3_Y!_V1rvil5KHajwo!Re{!C*DBt;o^pm=V6#^8Gn2bZ~cM{O* zH;X!O+RNY-5si7eqL$6@i@MMutT}EtJfq<@E(Q6Vg)*kXFWP}%u4o=ZNCaf&nS6+# zNSmt0wt8OSXz5P=dxw0gd96ljNOoefC zsSKkPC}+KoXNWC?!9dD8ALaP{+(O#rA+!upBP$f3e$TlB4h+s8NHcS;d!7fcD!AZ^ zba`x|WP~de4KG275d%LD=CoVyJUH`p)Fgyu1a*w<=4cK7XbjwN+dj$vO&;-s0%4Rk zbc8Z@c_;#vr>d0)G=Sy>$wLm`+}8jjKm(u)+Xz>jO`@7w$QP%Q2(Mc=vk0aXtVkE$ zWJ?6*s;zKY>5T`IZ#lpeoA@@Bt#GzebEV_~#{^1P@b92ZpN8I8B!X9Z2y21U<<}l`D6kHR@6y2gs&w_8^-CYTQ*JxA`OjBe%6-fv8cMvFr~e%0}kdo=Qe9YZ(ue ztud4eW2bG*@%^gQfE{gAdJONYGu`-%& zv&+|lQ%$VS#WiY9f~rxptM^?5L*EKGv3dC}ND5WN7yciBw~yLj&BIey8~)$*$?4d~ zsxxS-rjiZ=4v90r-*kV#59}|_*Ac)YNzvml#i1+)iq5;+@ZRK zz`6YYpt(eciloXXcU5hp3{CJ*{mKNr|3qaRwFbD;!kdVayd_~9i)Xr?ai1QlW7;C< z+9G9N@Z7rs837%o4ytE^LJkA$S$4OV4ywzl3D2WVX(k7bZ zAvz4_+Leg)QY6f!p4?m3;Pht6Ncc!&>rHn+0k`0&D*j%53C}V&hqjh*t52P^(|}l? z(67%QsINQ_m#K=fv|Ki(x>)_tBXozCcAo*45nuTIfsZn+49M(z>pyV+59|!U?jQ8b zgrxU{t_N?T^3Pi+c*MPDIR1lY_uC5U4+k%*JW$YdI05+ke&}Hg^#LH|=&96%BmLSS zEYzylFK3|saf?H6|7vAYfHZP@V9r1fp0z3bS62L-Ba9e3ID}O_NzRV2XN%I1 + +
P1
P1
Reversible connection
Reversible connection
PI
PI
Min of
user pressure heads
Min of...
y
y
Command for tank:
- Charge
- No Command
- Discharge
Command for tank:...
Command for chiller
- Enable
- Disable
Command for chiller...
Max of
user valve position
Max of...
Tank status
Tank status
chi
ṁchi
y
y
Control Signals
Control Signals
val
ṁval
Chiller 1
Chille...
Chiller 2
Chille...
Ppri
Ppri
Psec
Psec
If plant 2 is producing CHW,
Psec uses the same y signal with P1;
Otherwise, y = 0.
If plant 2 is producing CHW,...
Check valve
Check valve
Flow Control
Flow Co...
Switch
Switch
Implemented as
ideal component
Implemented as...
Tank
Tank
Supply
Supply
Return
Return
Δp
Δp
Δp
Δp
Δp
Δp
To user
To user
To user
To user
To user
To user
Δp
Δp
The pressure head signal from the storage plant is only used when it is in remote charging mode.
The pressure...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio new file mode 100644 index 00000000000..36952c44e4a --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.drawio @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png b/Buildings/Resources/Images/Experimental/DHC/Plants/Cooling/SystemConcept.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6433637722cb73121cc80150ae99bd3f9e3f09 GIT binary patch literal 61626 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 j + +
System Concept
System Concept
discharge
discharge
Chiller 2
Chiller 2
Tank
Tank
charge
charge
Chiller 1
Chiller 1
User 1
User 1
Supply
Supply
Return
Return
User 2
User 2
User 3
User 3
P1
P1
Plant 1: chiller only
Plant 1: chiller only
Plant 2: chiller + storage tank
Plant 2: chiller + storage tank
Reversible connection
Reversible connection
Psec
Psec
Ppri
Ppri
Implemented as an ideal component with
a prescribed outlet temperature
Implemented as an ideal component with...
Check valve
Check valve
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt new file mode 100644 index 00000000000..28ee3f83e1d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_BaseClasses_Validation_IdealUser.txt @@ -0,0 +1,17 @@ +last-generated=2023-04-29 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "0", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +ideUse.yVal_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.709109902381897e-01, 9.223337769508362e-01, 9.889528155326843e-01, 9.985849857330322e-01, 9.997462630271912e-01, 9.999254941940308e-01, 9.999862909317017e-01, 9.999980330467224e-01, 9.99999463558197e-01, 9.999995231628418e-01, 9.999997615814209e-01, 9.999999403953552e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.595453381538391e-01, 3.418028950691223e-01, 2.484315037727356e-01, 1.845314353704453e-01, 1.341767460107803e-01, 9.249084442853928e-02, 5.690332874655724e-02, 2.583528868854046e-02, 5.550052039325237e-03, 9.339367388747633e-04, 5.348158883862197e-04, 4.273340164218098e-04, 3.285217098891735e-04, 2.587400667835027e-04, 2.109650813508779e-04, 1.76261950400658e-04, 1.499654026702046e-04, 1.294650719501078e-04, 1.12931702460628e-04, 9.922994649969041e-05, 8.766644896240905e-05, 7.782740431139246e-05, 6.937987927813083e-05, 6.203436350915581e-05, 5.557800977840088e-05] +mPre_flow.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ideUse.senMasFlo.m_flow=[1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 1.406250021318556e-06, 2.594601511955261e-01, 8.397526741027832e-01, 9.781666398048401e-01, 9.972283840179443e-01, 9.995035529136658e-01, 9.998542070388794e-01, 9.999731183052063e-01, 9.999961853027344e-01, 9.99998927116394e-01, 9.999991059303284e-01, 9.999995827674866e-01, 9.999998211860657e-01, 9.999998807907104e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000011920929e+00, 1.00000011920929e+00, 1.00000011920929e+00, 1e+00, 1e+00, 1e+00, 2.485327124595642e-01, 1.073994040489197e-01, 7.464776188135147e-02, 5.816887691617012e-02, 4.778144136071205e-02, 4.059804603457451e-02, 3.532535210251808e-02, 3.128470480442047e-02, 1.584611088037491e-02, 5.811447626911104e-04, 2.048502065008506e-04, 1.362958137178794e-04, 8.554958185413852e-05, 5.679949754267e-05, 4.049954804941081e-05, 3.03837896353798e-05, 2.36848572967574e-05, 1.904043710965198e-05, 1.566361606819555e-05, 1.311470714426832e-05, 1.11395784188062e-05, 9.585862244421151e-06, 8.344948582816869e-06, 7.335804184549488e-06, 6.50249876343878e-06] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt new file mode 100644 index 00000000000..50ae8cbfbaf --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Controls_Validation_TankStatus.txt @@ -0,0 +1,14 @@ +last-generated=2023-08-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +tanSta.TTan[1]=[2.821499938964844e+02, 2.820499877907348e+02, 2.819500122025565e+02, 2.818500060968036e+02, 2.817499999910642e+02, 2.816499939039422e+02, 2.815499877795651e+02, 2.814500122100098e+02, 2.813500060856168e+02, 2.812500000357431e+02, 2.811499939114e+02, 2.810499877870116e+02, 2.80950012180183e+02, 2.808500060557855e+02, 2.807500000059572e+02, 2.806499939561471e+02, 2.805499877572257e+02, 2.804500122249028e+02, 2.803500061750017e+02, 2.802499999761713e+02, 2.801499939263157e+02, 2.800499877274398e+02, 2.799500121950987e+02, 2.798500061452159e+02, 2.797499999463854e+02, 2.796499938964844e+02, 2.796900024795322e+02, 2.797300109432728e+02, 2.797699890089061e+02, 2.79809997591954e+02, 2.798500060558582e+02, 2.798900146388696e+02, 2.799299927043757e+02, 2.7997000116828e+02, 2.800100097513278e+02, 2.800499878168884e+02, 2.800899962807017e+02, 2.801300048637495e+02, 2.801700134467973e+02, 2.80209991512267e+02, 2.802499999761713e+02, 2.802900085592191e+02, 2.803299866248889e+02, 2.80369995088593e+02, 2.804100036716409e+02, 2.804500122546887e+02, 2.804899902010148e+02, 2.805299987840626e+02, 2.805700073671104e+02, 2.806099853134365e+02, 2.806499938964844e+02, 2.806099853134371e+02, 2.80570007247968e+02, 2.805299986649208e+02, 2.804899903201571e+02, 2.80450012254688e+02, 2.80410003671641e+02, 2.803699950885935e+02, 2.803299865055462e+02, 2.802900084400771e+02, 2.802500000953135e+02, 2.802099915122662e+02, 2.80170013446797e+02, 2.801300048637498e+02, 2.800899962807026e+02, 2.800499876976553e+02, 2.800100098704698e+02, 2.799700012874225e+02, 2.799299927043753e+02, 2.798900146388695e+02, 2.798500060558589e+02, 2.798099974728117e+02, 2.797699891284846e+02, 2.797300110625789e+02, 2.796900024795316e+02, 2.796499938964844e+02, 2.797500000953135e+02, 2.798500062941425e+02, 2.799500124929716e+02, 2.800499875785135e+02, 2.801499937773426e+02, 2.80249999976171e+02, 2.803500061750007e+02, 2.804500123738297e+02, 2.805499880554809e+02, 2.806499936582008e+02, 2.807499998570299e+02, 2.808500060557861e+02, 2.80950012254688e+02, 2.810499879361572e+02, 2.811499941351317e+02, 2.812499997378881e+02, 2.813500059364625e+02, 2.81450012135437e+02, 2.815499878168342e+02, 2.81649994015808e+02, 2.817500002144552e+02, 2.818500058171388e+02, 2.819500120161134e+02, 2.820499876976553e+02, 2.821499938964844e+02] +tanSta.TTan[2]=[2.841499938964844e+02, 2.842500000022339e+02, 2.843500061079835e+02, 2.844500122137331e+02, 2.845499878019182e+02, 2.846499938890379e+02, 2.847500000134037e+02, 2.848500061005325e+02, 2.849500122249028e+02, 2.850499877572257e+02, 2.851499938815915e+02, 2.852500000059572e+02, 2.853500061303229e+02, 2.854500122546887e+02, 2.855499877870116e+02, 2.856499938369126e+02, 2.857500000357431e+02, 2.858500060856168e+02, 2.85950012135436e+02, 2.860499878168338e+02, 2.861499938666985e+02, 2.86250000065529e+02, 2.8635000611543e+02, 2.864500121652673e+02, 2.865499878466652e+02, 2.866499938964844e+02, 2.866099853134365e+02, 2.865700073671104e+02, 2.865299987840626e+02, 2.864899902010148e+02, 2.864500122546887e+02, 2.864100036716409e+02, 2.86369995088593e+02, 2.863299866248889e+02, 2.862900085592191e+02, 2.862499999761713e+02, 2.86209991512267e+02, 2.861700134467973e+02, 2.861300048637495e+02, 2.860899962807017e+02, 2.860499878168884e+02, 2.860100097513278e+02, 2.8597000116828e+02, 2.859299927043757e+02, 2.858900146388696e+02, 2.858500060558582e+02, 2.85809997591954e+02, 2.857699890089061e+02, 2.857300109432728e+02, 2.856900024795322e+02, 2.856499938964844e+02, 2.856900024795316e+02, 2.857300110625789e+02, 2.857699891284846e+02, 2.858099974728117e+02, 2.858500060558589e+02, 2.858900146388695e+02, 2.859299927043753e+02, 2.859700012874225e+02, 2.860100098704698e+02, 2.860499876976553e+02, 2.860899962807026e+02, 2.861300048637498e+02, 2.86170013446797e+02, 2.862099915122662e+02, 2.862500000953135e+02, 2.862900084400771e+02, 2.863299865055462e+02, 2.863699950885935e+02, 2.86410003671641e+02, 2.86450012254688e+02, 2.864899903201571e+02, 2.865299986649208e+02, 2.86570007247968e+02, 2.866099853134371e+02, 2.866499938964844e+02, 2.865499876976553e+02, 2.864500120161134e+02, 2.863500058171388e+02, 2.862500002144552e+02, 2.86149994015808e+02, 2.860499878168342e+02, 2.85950012135437e+02, 2.858500059364625e+02, 2.857499997378881e+02, 2.856499941351317e+02, 2.855499879361572e+02, 2.85450012254688e+02, 2.853500060557861e+02, 2.852499998570299e+02, 2.851499936582008e+02, 2.850499880554809e+02, 2.849500123738297e+02, 2.848500061750007e+02, 2.84749999976171e+02, 2.846499937773426e+02, 2.845499875785135e+02, 2.844500124929716e+02, 2.843500062941425e+02, 2.842500000953135e+02, 2.841499938964844e+02] +tanSta.THig=[2.861499938964844e+02, 2.861499938964844e+02] +tanSta.TLow=[2.801499938964844e+02, 2.801499938964844e+02] +tanSta.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +tanSta.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt new file mode 100644 index 00000000000..b2df3f00db3 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Cooling_Examples_StoragePlantDualSource.txt @@ -0,0 +1,30 @@ +last-generated=2023-08-11 +statistics-initialization= +{ + "nonlinear": "4, 0, 0, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "5, 1", + "number of continuous time states": "36", + "numerical Jacobians": "0" +} +time=[0e+00, 9e+03] +pumSup1.m_flow=[1.251948894997101e-15, 4.36188792809844e-03, 4.386177752166986e-03, 4.38630860298872e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 4.386309534311295e-03, 3.800089657306671e-01, 4.489592313766479e-01, 4.499262869358063e-01, 4.499348402023315e-01, 4.499349594116211e-01, 4.499349892139435e-01, 4.499349892139435e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.499350190162659e-01, 4.595985114574432e-01, 6.60559356212616e-01, 6.584604978561401e-01, 6.591629385948181e-01, 6.591498255729675e-01, 6.591503024101257e-01, 6.591507196426392e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 6.591508388519287e-01, 7.451934218406677e-01, 7.68254816532135e-01, 7.674015164375305e-01, 7.67163097858429e-01, 7.671414017677307e-01, 7.671383023262024e-01, 7.67137885093689e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 7.671378254890442e-01, 1.590657353401184e+00, 1.330097436904907e+00, 1.303154468536377e+00, 1.288426280021667e+00, 1.281209945678711e+00, 1.260521411895752e+00, 7.029785513877869e-01, 6.587290167808533e-01, 6.423019766807556e-01, 6.335538029670715e-01, 6.096128821372986e-01, 4.530153870582581e-01, 7.905996590852737e-02, 4.825764149427414e-02, 3.567066788673393e-02, 2.875611186027527e-02, 2.436433359980583e-02, 9.086788296699524e-01, 9.974852204322815e-01, 9.988704919815063e-01, 9.988836646080017e-01, 9.988803267478943e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 9.9888014793396e-01, 7.193219065666199e-01, 1.424694620072842e-02, 4.443939309567213e-03] +stoPla.revCon.m_flow=[-1.251948471480628e-15, -4.356848541647196e-03, -4.381109029054642e-03, -4.381240345537663e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, -4.38124081119895e-03, 8.396399021148682e-02, 1.491357684135437e-01, 1.50062307715416e-01, 1.500702351331711e-01, 1.500703543424606e-01, 1.500703543424606e-01, 1.50070384144783e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.500703990459442e-01, 1.677525639533997e-01, 5.973073840141296e-01, 5.894901752471924e-01, 5.908799171447754e-01, 5.908508896827698e-01, 5.908516645431519e-01, 5.908519625663757e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 1.063051819801331e+00, 1.134200930595398e+00, 1.133249759674072e+00, 1.132898807525635e+00, 1.132867455482483e+00, 1.13286280632019e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, -4.866096191108227e-03, -5.854859948158264e-03, -5.88260544463992e-03, -5.924627650529146e-03, -5.93998609110713e-03, -6.020710803568363e-03, -6.739288102835417e-03, -6.66219973936677e-03, -6.680774502456188e-03, -6.681025493890047e-03, -6.705125328153372e-03, -6.369280628859997e-03, -4.459924530237913e-03, -4.415147006511688e-03, -4.403089638799429e-03, -4.397067241370678e-03, -4.393402952700853e-03, -9.005817174911499e-01, -9.973908662796021e-01, -9.988396167755127e-01, -9.988653659820557e-01, -9.988656640052795e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -7.193144559860229e-01, -1.424183044582605e-02, -4.438870586454868e-03] +stoPla.pumPri.m_flow=[0e+00, -7.655137285662842e-25, -5.562328056903466e-24, 9.999949932098389e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.404836312867701e-06, -8.566903630935485e-08, -5.760281585054372e-09, 1.332990162694614e-09, 9.998356103897095e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4.278268534108065e-05, -1.734497523386835e-08, 1.707441132925425e-10, -1.202411521045166e-11, 2.378950985856831e-12, -6.524704957095243e-14, 1.647896808618953e-19, -5.531267494952948e-22, 1.780610776813116e-22, -4.872776393501403e-22, -2.091037388001681e-22, 1.268337505389848e-22, -2.495585126872053e-21, 1.925133305629034e-20, -2.782137777842754e-21, 7.456368811956731e-23, 9.999979138374329e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3.696833970025182e-03, 7.78049402683223e-10, 1.118538161398672e-11, 6.607734514716898e-14, 1.244646204677513e-13, 1.080051341397622e-20, -6.679751698516519e-25, 1.8746875737661e-26, 1.407539861282563e-26, -2.35375972001891e-26, -2.0706267559274e-25, 3.461840277959799e-26, 4.373672642131672e-25, 1.670195413758975e-26, -2.43541737780537e-27, 6.614289000743127e-27, 2.078340529059259e-27, 1.006630296842251e-24, 1.947853075252315e-22, -1.665514203692942e-22, 1.928398528395666e-21, 2.564062191438876e-21, 8.589318853349389e-23, 3.553316031396213e-23, -1.951239087138577e-23, 4.060974292974078e-24, -7.548916080091088e-24, 2.493852800945962e-24, -5.39516172576944e-25, -3.909332411654107e-26, -9.069614562309241e-26, -9.57704543335067e-21, -1.399234520679952e-22, -5.66206680256196e-20] +stoPla.tanBra.mTan_flow=[-1.251948471480628e-15, -4.356848541647196e-03, -4.381109029054642e-03, -1.004376173019409e+00, -1.00438117980957e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -1.00438129901886e+00, -4.387645982205868e-03, -4.381155129522085e-03, -4.381235223263502e-03, -4.381242208182812e-03, -9.158716201782227e-01, -8.508642315864563e-01, -8.499376773834229e-01, -8.499297499656677e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499295711517334e-01, -8.499295711517334e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.499296307563782e-01, -8.322474360466003e-01, -4.026926159858704e-01, -4.105098247528076e-01, -4.091200828552246e-01, -4.091490805149078e-01, -4.091483652591705e-01, 5.90809166431427e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 5.908520817756653e-01, 1.063051819801331e+00, 1.134200930595398e+00, 1.133249759674072e+00, 1.132898807525635e+00, 1.132867455482483e+00, 1.13286280632019e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.132862210273743e+00, 1.32864236831665e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, 1.328621655702591e-01, -8.562929928302765e-03, -5.854860879480839e-03, -5.88260544463992e-03, -5.924627650529146e-03, -5.93998609110713e-03, -6.020710803568363e-03, -6.739288102835417e-03, -6.66219973936677e-03, -6.680774502456188e-03, -6.681025493890047e-03, -6.705125328153372e-03, -6.369280628859997e-03, -4.459924530237913e-03, -4.415147006511688e-03, -4.403089638799429e-03, -4.397067241370678e-03, -4.393402952700853e-03, -9.005817174911499e-01, -9.973908662796021e-01, -9.988396167755127e-01, -9.988653659820557e-01, -9.988656640052795e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -9.988656044006348e-01, -7.193144559860229e-01, -1.424183044582605e-02, -4.438870586454868e-03] +stoPla.revCon.pum.m_flow=[-7.669491331325522e-20, -2.796448534354568e-04, -2.812386082950979e-04, -2.812471939250827e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, -2.812472521327436e-04, 8.906047791242599e-02, 1.554799377918243e-01, 1.564358323812485e-01, 1.564440578222275e-01, 1.56444177031517e-01, 1.564441919326782e-01, 1.564442068338394e-01, 1.564442366361618e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.564442217350006e-01, 1.741160601377487e-01, 6.03976309299469e-01, 5.962510108947754e-01, 5.976431965827942e-01, 5.976141691207886e-01, 5.976149439811707e-01, 5.976152420043945e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 5.976153612136841e-01, 1.069544196128845e+00, 1.140810370445251e+00, 1.13988471031189e+00, 1.139533758163452e+00, 1.1395024061203e+00, 1.139497756958008e+00, 1.13949728012085e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, 1.13949716091156e+00, -3.130906843580306e-04, -3.780505794566125e-04, -3.798731777351349e-04, -3.826336178462952e-04, -3.836425021290779e-04, -3.889453073497862e-04, -4.361482860986143e-04, -4.310844233259559e-04, -4.32304572314024e-04, -4.323210450820625e-04, -4.339041479397565e-04, -4.118427459616214e-04, -2.864160924218595e-04, -2.834745973814279e-04, -2.826825075317174e-04, -2.822869282681495e-04, -2.820461813826114e-04, -5.96010941080749e-04, -7.001044577918947e-04, -7.030200795270503e-04, -7.030804408714175e-04, -7.030811393633485e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -7.030810229480267e-04, -3.634325694292784e-04, -2.836755884345621e-04, -2.812723105307668e-04] +stoPla.revCon.val.m_flow=[1.251871709119783e-15, 4.077203571796417e-03, 4.099870566278696e-03, 4.099993035197258e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 4.099993500858545e-03, 5.096489563584328e-03, 6.34417962282896e-03, 6.373522337526083e-03, 6.373824086040258e-03, 6.373826414346695e-03, 6.373827811330557e-03, 6.373827811330557e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.373828276991844e-03, 6.36349618434906e-03, 6.668939720839262e-03, 6.760831922292709e-03, 6.76325149834156e-03, 6.763278972357512e-03, 6.763281300663948e-03, 6.763295270502567e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.763296667486429e-03, 6.492289714515209e-03, 6.609420757740736e-03, 6.634950172156096e-03, 6.634971126914024e-03, 6.634998135268688e-03, 6.634990219026804e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 6.634992547333241e-03, 4.55300509929657e-03, 5.476809106767178e-03, 5.502732470631599e-03, 5.541994236409664e-03, 5.556343588978052e-03, 5.631765350699425e-03, 6.303139962255955e-03, 6.231115665286779e-03, 6.248469930142164e-03, 6.248704623430967e-03, 6.271220743656158e-03, 5.957437679171562e-03, 4.173508379608393e-03, 4.131672438234091e-03, 4.120406694710255e-03, 4.114780575037003e-03, 4.111356567591429e-03, 8.99985671043396e-01, 9.966908097267151e-01, 9.98136579990387e-01, 9.981622695922852e-01, 9.98162567615509e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 9.981625080108643e-01, 7.189509868621826e-01, 1.395815424621105e-02, 4.157598130404949e-03] +ideUse1.yVal_actual=[0e+00, 4.225701525366099e-16, 3.248267334758213e-18, 2.12277809635835e-20, 1.187043937603218e-22, 7.125864964978258e-24, -3.136313497413405e-25, 4.38600500327048e-27, 5.382060148210718e-27, 7.610204009104029e-22, 2.013213217853978e-21, 2.102508536279749e-21, -8.14542035963299e-21, 4.081129105345405e-22, -8.875944836829761e-22, 5.533854201415604e-23, 2.185539769003537e-23, -2.268197087969138e-23, -2.831629161540048e-26, -1.196320736128484e-26, -1.192742897552197e-24, 9.083338975906372e-01, 9.993342757225037e-01, 9.999970197677612e-01, 9.999998211860657e-01, 1e+00, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999999403953552e-01, 1e+00, 9.998401999473572e-01, 9.999956488609314e-01, 9.999973773956299e-01, 9.999991655349731e-01, 9.999998807907104e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.993391036987305e-01, 9.953336119651794e-01, 9.945324659347534e-01, 9.944605827331543e-01, 9.944503903388977e-01, 9.944490790367126e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.944489002227783e-01, 9.975914359092712e-01, 9.906269311904907e-01, 9.992164373397827e-01, 9.994162917137146e-01, 9.997254014015198e-01, 9.990863800048828e-01, 9.756444096565247e-01, 9.989365935325623e-01, 9.995733499526978e-01, 9.997709393501282e-01, 9.992998838424683e-01, 8.508997559547424e-01, 3.787515163421631e-01, 2.427490651607513e-01, 1.562414169311516e-01, 9.237556904554367e-02, 4.158150777220726e-02, 2.772929146885872e-03, 1.471120485803112e-04, 5.013482223148458e-05, 1.523511036793934e-05, 6.769570290998672e-07, 6.590424206365242e-09, -1.610775748894788e-11, 8.592419831199294e-11, -7.301870046105829e-12, 3.461150420089321e-12, 1.579410295040815e-13, -8.477918210124044e-14, 6.83267258418975e-14, -1.726615676605689e-14, 7.618812332865939e-15, 7.858076852910854e-17, 4.472415645588195e-19] +ideUse2.yVal_actual=[0e+00, 4.576128320068064e-16, 3.524225333658713e-18, 2.305016325061438e-20, -2.442706909492649e-22, -1.177138798128871e-21, -1.948471668419753e-22, 4.245879613066054e-22, 9.70434218844308e-22, 1.63959516259906e-21, 6.183114090419577e-21, -8.527780760766184e-22, -3.941001155287228e-22, 1.850555476073335e-22, -1.962884851355733e-21, 3.341025862518804e-22, 1.338701247563381e-22, 4.88541321945101e-24, 9.901265933109044e-27, 8.187338351065671e-25, -2.066939225625944e-24, 1.134760533968125e-20, -2.460669905917611e-20, -3.343737272113357e-21, -4.662120302657504e-23, 7.138317765455896e-22, 1.710929115333133e-22, 8.2481287267308e-20, 1.007149910685273e-19, 8.044404158499219e-21, -2.370425308881642e-20, -1.461914424421326e-20, 6.743694149208694e-21, 1.182822635614297e-20, -3.947313557141934e-22, 3.912370805572988e-23, -1.861344758228479e-23, -2.069187331294404e-25, -1.246234127696995e-22, 5.194651335477829e-02, 9.179385304450989e-01, 9.059048891067505e-01, 9.070526957511902e-01, 9.070228934288025e-01, 9.070227146148682e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.070220589637756e-01, 9.102416634559631e-01, 9.078453779220581e-01, 9.056963324546814e-01, 9.056738615036011e-01, 9.056681394577026e-01, 9.056686162948608e-01, 9.056682586669922e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.05668318271637e-01, 9.538668394088745e-01, 9.307358860969543e-01, 9.324745535850525e-01, 9.302374720573425e-01, 9.298267960548401e-01, 9.281343817710876e-01, 4.057694375514984e-01, 2.169910073280334e-01, 1.146358475089073e-01, 4.258608818054199e-02, 1.526029082015157e-03, 2.200460294261575e-04, 1.260622520931065e-04, 8.423053805017844e-05, 5.899481038795764e-05, 4.201261617708951e-05, 2.974243579956237e-05, 1.678318039921578e-05, 1.811347488001047e-06, 2.356344097620422e-08, 3.374529822242067e-10, 4.814118288037905e-12, 6.514342017205355e-14, 1.16113171645839e-15, -1.164604789770149e-16, 5.681805027697731e-17, -2.999767182701105e-17, 4.822474965303033e-18, -1.119741367118386e-18, 6.044529914647191e-20, 1.103207164046793e-19, -1.565959528313718e-20, 6.006683796488637e-22, -9.874772116028097e-23] +ideUse3.yVal_actual=[0e+00, 4.574473958842958e-16, 3.522951475515382e-18, 2.304150531916385e-20, 1.28752954458125e-22, 7.573564827935623e-24, -3.268718623455061e-25, 4.773036803406577e-27, 1.280203151149512e-26, -1.710497731924013e-27, 7.775052852311644e-28, -9.521214449389209e-29, 4.612950388830189e-29, -5.264373773490912e-30, 2.685206572024026e-30, -2.896991486570448e-31, -1.314784083725234e-31, 7.492399718258339e-24, 1.196377050320058e-26, 1.056613361961766e-25, -3.110164730557591e-25, 2.068127024534988e-21, 5.023970105684786e-22, 2.143343914727628e-22, 8.931597553743553e-24, 1.449824422967265e-23, 2.233865867684807e-21, 1.040129698642995e-20, 3.185790405710212e-21, -4.128929847907347e-23, 1.217485890609079e-22, 7.509304534140682e-23, -3.463950712609156e-23, -6.083266791820727e-23, 9.092111026433398e-25, -2.282146199811799e-24, 4.601649992474084e-25, 9.608667402363884e-24, 1.41125559336138e-23, 1.063190629781857e-21, 8.76299146626052e-21, 1.052715162805697e-21, -3.599976055845656e-21, 4.274754052752687e-20, -1.227717479658668e-21, 5.209618800962199e-23, 1.91067411403736e-25, 8.667093478299079e-25, -1.430226021802522e-24, 2.686931240664236e-24, -2.279048934682675e-24, 9.123831391334534e-01, 9.990750551223755e-01, 9.999788403511047e-01, 9.999955296516418e-01, 9.999999403953552e-01, 9.999998211860657e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 7.875791788101196e-01, 3.42457503080368e-01, 1.97095885872842e-01, 1.066487282514572e-01, 4.046548530459404e-02, 1.517230411991477e-03, 2.144882746506482e-04, 1.04484184703324e-04, 5.865292041562498e-05, 3.437770646996796e-05, 1.926576260302681e-05, 8.897208317648619e-06, 2.954971250801464e-06, 5.90483004714315e-08, -4.052316537883625e-10, 3.796160955027439e-11, -1.537513714434946e-12, 7.766343449421009e-15, 6.309525924784622e-17, 7.927758444314744e-19, -2.108144366593492e-19, 5.283417041568212e-21, 1.596294751594547e-23, 2.196467859123564e-23, 3.65789942367807e-23, -2.340232394845938e-23, 9.645720987943021e-24, -4.480621473280879e-25, -8.02375226514999e-25, -5.637235133019633e-24, 3.486128590326359e-24, 9.444770347479365e-23, -3.857810976557368e-23, 6.111416504362634e-23] +ideUse1.dp=[0e+00, 5.970229296875e+04, 6.0042546875e+04, 6.00443828125e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 6.0044390625e+04, 5.469014453125e+04, 5.977419921875e+04, 5.999734375e+04, 5.99999765625e+04, 5.9999984375e+04, 6.000000390625e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.986296875e+04, 5.89915390625e+04, 6.001069921875e+04, 5.99995078125e+04, 6.000006640625e+04, 5.99999296875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.915859375e+04, 6.06188828125e+04, 6.12488671875e+04, 6.1323640625e+04, 6.1330640625e+04, 6.133151171875e+04, 6.133165625e+04, 6.1331671875e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 6.133167578125e+04, 5.99641015625e+04, 6.134151953125e+04, 6.009478125e+04, 6.01090234375e+04, 6.00526015625e+04, 6.0345890625e+04, 6.295864453125e+04, 6.0028890625e+04, 6.00856328125e+04, 6.00421015625e+04, 6.02199765625e+04, 6.99788515625e+04, 6.030060546875e+04, 6.005736328125e+04, 6.00275234375e+04, 6.001659375e+04, 6.001105859375e+04, 1.6357046875e+05, 1.94130140625e+05, 1.94883015625e+05, 1.9489834375e+05, 1.948985625e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.9489853125e+05, 1.00817375e+05, 6.066244921875e+04, 6.005032421875e+04] +ideUse2.dp=[0e+00, 5.968023046875e+04, 6.002036328125e+04, 6.002219921875e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 6.002220703125e+04, 7.45058046875e+04, 9.28154921875e+04, 9.32492265625e+04, 9.32536953125e+04, 9.3253734375e+04, 9.325375e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.32537578125e+04, 9.29722890625e+04, 9.05068203125e+04, 9.20939296875e+04, 9.20933203125e+04, 9.20945e+04, 9.20945234375e+04, 9.209471875e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.2094734375e+04, 9.02549765625e+04, 9.23014375e+04, 9.2746671875e+04, 9.2754734375e+04, 9.27558984375e+04, 9.27558671875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 9.2755921875e+04, 6.982359375e+04, 8.1108453125e+04, 8.130774218749999e+04, 8.18259609375e+04, 8.20032890625e+04, 8.30190390625e+04, 9.30817421875e+04, 9.20007109375e+04, 9.22610546875e+04, 9.2264546875e+04, 9.260240625e+04, 8.78939453125e+04, 6.1125328125e+04, 6.04975625e+04, 6.032851953125e+04, 6.024408984375e+04, 6.019271484375e+04, 1.454034375e+05, 1.71747828125e+05, 1.72435e+05, 1.72449046875e+05, 1.72449203125e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 1.72449171875e+05, 8.9175453125e+04, 6.059026953125e+04, 6.002784765625e+04] +ideUse3.dp=[0e+00, 5.96581484375e+04, 5.999815625e+04, 5.99999921875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 7.49474296875e+04, 9.366278125e+04, 9.4102921875e+04, 9.41074453125e+04, 9.4107484375e+04, 9.41075e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.41075078125e+04, 9.395253125e+04, 9.85341796875e+04, 9.99125625e+04, 9.9948859375e+04, 9.9949265625e+04, 9.99493046875e+04, 9.9949515625e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 9.994953125e+04, 6.7303796875e+04, 5.984922265625e+04, 6.000153515625e+04, 6.00002109375e+04, 6.00000546875e+04, 5.99999921875e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 6e+04, 5.556265234375e+04, 7.9718734375e+04, 8.055338281249999e+04, 8.1293640625e+04, 8.15874765625e+04, 8.29526796875e+04, 9.304640625e+04, 9.1966578125e+04, 9.222703125e+04, 9.22306015625e+04, 9.2568375e+04, 8.7861640625e+04, 6.110271484375e+04, 6.047518359375e+04, 6.030619921875e+04, 6.022180078125e+04, 6.017044140625e+04, 1.271546796875e+05, 1.4936484375e+05, 1.49986953125e+05, 1.49999828125e+05, 1.49999984375e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 1.49999953125e+05, 7.75335546875e+04, 6.05180625e+04, 6.000534765625e+04] +stoPla.tanBra.heaPorTop.T=[2.851499938964844e+02, 2.851499938964844e+02, 2.851499938964844e+02, 2.851497192382812e+02, 2.851348266601562e+02, 2.850517883300781e+02, 2.848451843261719e+02, 2.844984741210938e+02, 2.840349426269531e+02, 2.83501953125e+02, 2.829503784179688e+02, 2.824227600097656e+02, 2.81947265625e+02, 2.815391235351562e+02, 2.81201904296875e+02, 2.80932373046875e+02, 2.807225646972656e+02, 2.806358337402344e+02, 2.806351318359375e+02, 2.806344299316406e+02, 2.806336975097656e+02, 2.805754699707031e+02, 2.804679565429688e+02, 2.803869018554688e+02, 2.803251647949219e+02, 2.802786254882812e+02, 2.80243896484375e+02, 2.802180786132812e+02, 2.801991577148438e+02, 2.801854553222656e+02, 2.801752624511719e+02, 2.801678771972656e+02, 2.801626586914062e+02, 2.801590270996094e+02, 2.801563720703125e+02, 2.801544799804688e+02, 2.801531372070312e+02, 2.801521911621094e+02, 2.801515197753906e+02, 2.801510620117188e+02, 2.801507873535156e+02, 2.801506652832031e+02, 2.801505737304688e+02, 2.801504821777344e+02, 2.80150390625e+02, 2.806386108398438e+02, 2.817638549804688e+02, 2.826837463378906e+02, 2.833726196289062e+02, 2.838743286132812e+02, 2.842354431152344e+02, 2.845621948242188e+02, 2.848371887207031e+02, 2.849850769042969e+02, 2.850630798339844e+02, 2.851040954589844e+02, 2.851257934570312e+02, 2.851372375488281e+02, 2.851432495117188e+02, 2.851464233398438e+02, 2.851481018066406e+02, 2.851484375e+02, 2.851485595703125e+02, 2.851486511230469e+02, 2.851487426757812e+02, 2.851488342285156e+02, 2.8514892578125e+02, 2.851487426757812e+02, 2.85148681640625e+02, 2.851486511230469e+02, 2.851486206054688e+02, 2.851485900878906e+02, 2.851485595703125e+02, 2.851484985351562e+02, 2.851484680175781e+02, 2.851484375e+02, 2.851483764648438e+02, 2.851483459472656e+02, 2.851482849121094e+02, 2.851482543945312e+02, 2.851482238769531e+02, 2.85148193359375e+02, 2.851481628417969e+02, 2.851481323242188e+02, 2.851453247070312e+02, 2.851226196289062e+02, 2.850417785644531e+02, 2.848554077148438e+02, 2.845430603027344e+02, 2.841187438964844e+02, 2.836195678710938e+02, 2.830903930664062e+02, 2.825717468261719e+02, 2.820937194824219e+02, 2.816739807128906e+02, 2.81320556640625e+02, 2.810322570800781e+02, 2.808040771484375e+02, 2.806311645507812e+02, 2.80599365234375e+02, 2.805984497070312e+02] +stoPla.tanBra.heaPorBot.T=[2.851499938964844e+02, 2.851404418945312e+02, 2.851281127929688e+02, 2.835596313476562e+02, 2.820942993164062e+02, 2.812534790039062e+02, 2.807756042480469e+02, 2.805050659179688e+02, 2.803514404296875e+02, 2.802642211914062e+02, 2.802149963378906e+02, 2.801869506835938e+02, 2.801711120605469e+02, 2.80162109375e+02, 2.801570434570312e+02, 2.801541442871094e+02, 2.801524963378906e+02, 2.801519775390625e+02, 2.801520080566406e+02, 2.801520080566406e+02, 2.801520080566406e+02, 2.801522216796875e+02, 2.801516418457031e+02, 2.801510620117188e+02, 2.801506652832031e+02, 2.801504211425781e+02, 2.801502380371094e+02, 2.80150146484375e+02, 2.801500854492188e+02, 2.801500549316406e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801500244140625e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801499938964844e+02, 2.801505126953125e+02, 2.801559143066406e+02, 2.801762084960938e+02, 2.802247314453125e+02, 2.803127136230469e+02, 2.805022277832031e+02, 2.809158325195312e+02, 2.814676208496094e+02, 2.820817260742188e+02, 2.826908569335938e+02, 2.832454223632812e+02, 2.837185974121094e+02, 2.841022338867188e+02, 2.844004516601562e+02, 2.846244812011719e+02, 2.846815795898438e+02, 2.847015380859375e+02, 2.847207336425781e+02, 2.847392272949219e+02, 2.847569885253906e+02, 2.847740783691406e+02, 2.846775207519531e+02, 2.846641845703125e+02, 2.846508483886719e+02, 2.846374206542969e+02, 2.846239929199219e+02, 2.846105346679688e+02, 2.845953369140625e+02, 2.845805053710938e+02, 2.845656127929688e+02, 2.8455078125e+02, 2.845359802246094e+02, 2.845212707519531e+02, 2.845105895996094e+02, 2.845008850097656e+02, 2.844913024902344e+02, 2.844817199707031e+02, 2.844721984863281e+02, 2.837879028320312e+02, 2.824308471679688e+02, 2.815528259277344e+02, 2.809906311035156e+02, 2.806426696777344e+02, 2.804347229003906e+02, 2.803133239746094e+02, 2.80243408203125e+02, 2.802033386230469e+02, 2.801805114746094e+02, 2.801675720214844e+02, 2.801601257324219e+02, 2.801559143066406e+02, 2.801535034179688e+02, 2.801521606445312e+02, 2.801519470214844e+02, 2.801519470214844e+02] +stoPla.tanSta.y[1]=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +stoPla.tanSta.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt new file mode 100644 index 00000000000..6c2cb37fb8f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_BaseClasses_Validation_IdealUser.txt @@ -0,0 +1,15 @@ +last-generated=2022-03-14 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +ideUsr.yVal_actual=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2.372759878635403e-01, 3.455205296631902e-04, 3.444691537879407e-04, 3.38253885274753e-04, 3.321156546007842e-04, 3.260757948737592e-04, 3.201467043254524e-04, 3.143229987472296e-04, 3.086034848820418e-04, 3.029869694728404e-04, 2.97472404781729e-04, 2.92060780338943e-04, 2.86752445390448e-04, 2.81542626908049e-04, 2.764197124633938e-04, 2.713825961109251e-04, 2.664401254151016e-04, 2.615947742015123e-04, 2.568438067100942e-04, 2.521721762605011e-04, 2.475813671480864e-04, 2.430696767987683e-04, 2.386392297921702e-04, 2.342864027014002e-04, 2.300100459251553e-04, 2.258091699331999e-04, 2.216824941569939e-04, 2.176290436182171e-04, 2.136479306500405e-04, 2.09738194826059e-04, 2.05898453714326e-04, 2.021282853092998e-04, 1.984270056709647e-04, 1.947939890669659e-04, 1.912260340759531e-04, 1.877176546258852e-04, 1.842694910010323e-04, 1.808793604141101e-04, 1.775449200067669e-04, 1.742706663208082e-04, 1.710602518869564e-04, 1.679099950706586e-04, 1.648203178774565e-04, 1.617918896954507e-04, 8.601984977722168e-01, 8.841497898101807e-01, 8.862190246582031e-01, 8.866633772850037e-01, 8.869857788085938e-01, 8.873108625411987e-01, 8.876166939735413e-01, 8.87906014919281e-01, 8.881837725639343e-01, 8.884551525115967e-01, 8.887191414833069e-01, 8.889741897583008e-01, 8.8922119140625e-01, 8.894597291946411e-01, 8.896902799606323e-01, 8.899130821228027e-01, 8.901284337043762e-01, 8.903366923332214e-01, 8.905380964279175e-01, 8.907328248023987e-01, 8.909211158752441e-01, 8.911030888557434e-01, 8.912789821624756e-01, 8.914490342140198e-01, 8.916133642196655e-01, 2.971347793936729e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt new file mode 100644 index 00000000000..78d63c98d16 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Fluid_Storage_Plant_Examples_SingleSource.txt @@ -0,0 +1,18 @@ +last-generated=2022-03-16 +statistics-initialization= +{ + "nonlinear": "2, 0, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "1, 1, 1", + "number of continuous time states": "18", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +chiBra.m_flow=[0e+00, 4.999552965164185e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01] +tanBra.mTan_flow=[0e+00, -4.999551773071289e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, 2.893969118595123e-01, 3.502776324748993e-01, 3.745020627975464e-01, 3.929356336593628e-01, 4.070073962211609e-01, 4.177742600440979e-01, 4.260265231132507e-01, 4.31829422712326e-01, 4.110587537288666e-01, 4.04619425535202e-01, 4.037974178791046e-01, 4.040806889533997e-01, 4.045733511447906e-01, 4.05122309923172e-01, 4.056960344314575e-01, 4.062855541706085e-01, 4.068860113620758e-01, 4.074938297271729e-01, 4.081068336963654e-01, 4.087235927581787e-01, 4.093431234359741e-01, 4.099647402763367e-01, 4.105879962444305e-01, 4.112125039100647e-01, 4.118382036685944e-01, 4.1246497631073e-01, 4.130928516387939e-01, 4.137217998504639e-01, 4.143518507480621e-01, 4.149830341339111e-01, 4.156154692173004e-01, 4.162492156028748e-01, 4.168843924999237e-01, -2.810051441192627e-01, -4.999998211860657e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998509883881e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01, -4.999998807907104e-01] +tanBra.pum.m_flow=[0e+00, 1.074193249905875e-07, 1.138746412721048e-07, 1.187569793614784e-07, 1.22431416116342e-07, 1.251885208830572e-07, 1.272531306995006e-07, 1.28796955323196e-07, 1.299502088158988e-07, 1.30811088183691e-07, 1.314534330276729e-07, 1.319324240967035e-07, 1.322895428756965e-07, 1.325555700759651e-07, 1.327538541318063e-07, 1.329015901774255e-07, 1.330116958797589e-07, 1.330937067223203e-07, 1.331548276084504e-07, 1.332003449761032e-07, 1.33234237864599e-07, 1.332594905534279e-07, 1.332782773033614e-07, 1.332922892061106e-07, 1.33302748395181e-07, 1.333105359435649e-07, 1.333163339722887e-07, 1.333206682829768e-07, 1.333238941469972e-07, 1.333262957814441e-07, 1.333280863491382e-07, 1.333294221694814e-07, 1.333304027184568e-07, 1.333311274720472e-07, 7.893968820571899e-01, 8.502776026725769e-01, 8.745020627975464e-01, 8.929356336593628e-01, 9.070073962211609e-01, 9.177742600440979e-01, 9.260265231132507e-01, 9.318294525146484e-01, 9.110587239265442e-01, 9.046193957328796e-01, 9.037973880767822e-01, 9.040806889533997e-01, 9.045733213424683e-01, 9.051223397254944e-01, 9.056960344314575e-01, 9.062855839729309e-01, 9.068859815597534e-01, 9.074938297271729e-01, 9.08106803894043e-01, 9.087235927581787e-01, 9.093431234359741e-01, 9.099647402763367e-01, 9.105879664421082e-01, 9.112125039100647e-01, 9.11838173866272e-01, 9.1246497631073e-01, 9.130928516387939e-01, 9.137217998504639e-01, 9.143518209457397e-01, 9.149830341339111e-01, 9.15615439414978e-01, 9.162492156028748e-01, 9.168843626976013e-01, 2.189948409795761e-01, 1.645938851879691e-07, 1.559465232503499e-07, 1.500948343391428e-07, 1.457721339193085e-07, 1.425725457693261e-07, 1.402011520212909e-07, 1.384413650384886e-07, 1.371335400790485e-07, 1.361614749839646e-07, 1.354385688046023e-07, 1.349009863815809e-07, 1.345005529174159e-07, 1.342024944506193e-07, 1.339805777433867e-07, 1.338153907681772e-07, 1.336923389771982e-07, 1.336007642294135e-07, 1.335325094942164e-07, 1.334817198994642e-07, 1.334438479716482e-07, 1.33415667846748e-07, 1.333946499926242e-07, 1.333790180524375e-07, 1.333673367298616e-07, 1.333586681084853e-07, 1.333522021695899e-07, 1.33347356268132e-07, 1.33343760921889e-07, 1.333410892812026e-07, 1.333390997615425e-07, 1.333376218326521e-07, 1.33336527596839e-07, 1.333357033672655e-07] +usr.yVal_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.211111068725586e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.946646094322205e-01, 9.245695471763611e-01, 9.071856737136841e-01, 9.031168222427368e-01, 9.018986821174622e-01, 9.015378952026367e-01, 9.016034603118896e-01, 9.019418358802795e-01, 9.024717807769775e-01, 9.031393527984619e-01, 9.039061665534973e-01, 9.047455191612244e-01, 9.056385159492493e-01, 9.065719246864319e-01, 9.075362086296082e-01, 9.08524751663208e-01, 9.095327258110046e-01, 9.105567336082458e-01, 9.115946888923645e-01, 9.126449227333069e-01, 9.137066006660461e-01, 9.147792458534241e-01, 9.158623814582825e-01, 9.169560670852661e-01, 9.180601239204407e-01, 9.191747307777405e-01, 2.95667439699173e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/Scripts/BuildingsPy/conf.yml b/Buildings/Resources/Scripts/BuildingsPy/conf.yml index 282db9a2ac9..64ac3368396 100644 --- a/Buildings/Resources/Scripts/BuildingsPy/conf.yml +++ b/Buildings/Resources/Scripts/BuildingsPy/conf.yml @@ -132,6 +132,10 @@ openmodelica: comment: simulation terminated by an assertion at initialization simulate: false +- model_name: Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource + openmodelica: + comment: 'Could not evaluate structural parameter (or constant): mChi_flow_nominal' + translate: false - model_name: Buildings.Experimental.DHC.Plants.Steam.BaseClasses.Examples.ControlVolumeEvaporation openmodelica: comment: simulation terminated by an assertion at initialization diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos new file mode 100644 index 00000000000..48650223020 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/BaseClasses/Validation/IdealUser.mos @@ -0,0 +1,25 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser", + stopTime=3600, + tolerance=1e-06, + method="dassl", + resultFile="IdealUser"); +// Plot commands +createPlot(id=1, + position={75, 75, 843, 498}, + y={"ideUse.yVal_actual"}, + range={0.0, 3600.0, -0.5, 1.5}, + grid=true, + subPlot=101, + colors={{28,108,200}}, + timeUnit="s", + displayUnits={"1"}); +createPlot(id=1, + position={75, 75, 843, 498}, + y={"mPre_flow.y", "ideUse.senMasFlo.m_flow"}, + range={0.0, 3600.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos new file mode 100644 index 00000000000..7341fe817fe --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mos @@ -0,0 +1,22 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus", + stopTime=1, method="Dassl", tolerance=1e-06, resultFile="TankStatus"); +// Plot commands +removePlots(false); +createPlot(id=1, + position={49, 24, 661, 503}, + y={"tanSta.TTan[1]", "tanSta.TTan[2]", "tanSta.THig", "tanSta.TLow"}, + range={0.0, 10.0, 6.0, 14.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="s", + displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=1, + position={49, 24, 661, 503}, + y={"tanSta.y[1]", "tanSta.y[2]"}, + range={0.0, 10.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {28,108,200}}, + timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos new file mode 100644 index 00000000000..8642a3ada31 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mos @@ -0,0 +1,60 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource", + stopTime=9000, + tolerance=1e-06, + method="radau", + resultFile="StoragePlantDualSource"); +// Plot commands +createPlot(id=1, + position={27, 28, 733, 459}, + y={"pumSup1.m_flow", "stoPla.revCon.m_flow", "stoPla.pumPri.m_flow", "stoPla.tanBra.mTan_flow"}, + range={0.0, 9000.0, -2.0, 2.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s", "kg/s", "kg/s"}); +createPlot(id=1, + position={27, 28, 733, 459}, + y={"stoPla.revCon.pum.m_flow", "stoPla.revCon.val.m_flow"}, + range={0.0, 9000.0, -0.5, 2.0}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"kg/s", "kg/s"}); +createPlot(id=2, + position={210, 39, 739, 483}, + y={"ideUse1.yVal_actual", "ideUse2.yVal_actual", "ideUse3.yVal_actual"}, + range={0.0, 9000.0, -0.5, 1.5}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="s", + displayUnits={"1", "1", "1"}); +createPlot(id=2, + position={210, 39, 739, 483}, + y={"ideUse1.dp", "ideUse2.dp", "ideUse3.dp"}, + range={0.0, 9000.0, -50000.0, 200000.0}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="s", + displayUnits={"Pa", "Pa", "Pa"}); +createPlot(id=3, + position={322, 75, 727, 418}, + y={"stoPla.tanBra.heaPorTop.T", "stoPla.tanBra.heaPorBot.T"}, + range={0.0, 9000.0, 6.0, 14.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"degC", "degC"}); +createPlot(id=3, + position={322, 75, 727, 418}, + y={"stoPla.tanSta.y[1]", "stoPla.tanSta.y[2]"}, + range={0.0, 9000.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {28,108,200}}, + timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos new file mode 100644 index 00000000000..47207224d50 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser.mos @@ -0,0 +1,6 @@ +compareVars := + { + "ideUse.yVal_actual", + "mPre_flow.y", + "ideUse.senMasFlo.m_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos new file mode 100644 index 00000000000..79dfb59b667 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus.mos @@ -0,0 +1,9 @@ +compareVars := + { + "tanSta.TTan[1]", + "tanSta.TTan[2]", + "tanSta.THig", + "tanSta.TLow", + "tanSta.y[1]", + "tanSta.y[2]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos new file mode 100644 index 00000000000..4a45ef01979 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource.mos @@ -0,0 +1,19 @@ +compareVars := + { + "pumSup1.m_flow", + "stoPla.revCon.m_flow", + "stoPla.pumPri.m_flow", + "stoPla.tanBra.mTan_flow", + "stoPla.revCon.pum.m_flow", + "stoPla.revCon.val.m_flow", + "ideUse1.yVal_actual", + "ideUse2.yVal_actual", + "ideUse3.yVal_actual", + "ideUse1.dp", + "ideUse2.dp", + "ideUse3.dp", + "stoPla.tanBra.heaPorTop.T", + "stoPla.tanBra.heaPorBot.T", + "stoPla.tanSta.y[1]", + "stoPla.tanSta.y[2]" + }; diff --git a/Buildings/package.mo b/Buildings/package.mo index 9549c03423c..0e96a30e692 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -307,6 +307,26 @@ to existing libraries:
issue 3103. +Buildings.Experimental.DHC.Plants.Cooling + + +Buildings.Experimental.DHC.Plants.Cooling.StoragePlant
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.FlowControl
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.SelectMin
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.TankStatus
+ Buildings.Experimental.DHC.Plants.Cooling.Controls.Validation.TankStatus
+ Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.IdealUser
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelJunctions
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ParallelPipes
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.ReversibleConnection
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.TankBranch
+ Buildings.Experimental.DHC.Plants.Cooling.BaseClasses.Validation.IdealUser + + Added models for a district CHW system with two plants, + where one of them has a storage tank that can be charged remotely by the other plant.
+ This is for + issue 2859. Buildings.Fluid.Movers From b153ffc957c5cebbd35089f522de8d211a0ce074 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Sat, 19 Aug 2023 07:42:14 -0700 Subject: [PATCH 2/9] Add Buildings.Templates to OpenModelica tests (#3474) * Add Buildings.Templates to OpenModelica tests This adds the directory to the tests, and excludes models that don't translate with OpenModelica * Added file to exclude list --- .travis.yml | 1 + .../Resources/Scripts/BuildingsPy/conf.yml | 64 +++++++++++++++++-- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7dd4087c74e..4a5f310ebf0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -98,6 +98,7 @@ env: - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Utilities\"" - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Utilities\"" - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Templates\"" + - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Templates\"" - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Templates\"" before_install: diff --git a/Buildings/Resources/Scripts/BuildingsPy/conf.yml b/Buildings/Resources/Scripts/BuildingsPy/conf.yml index 64ac3368396..c0521ce6874 100644 --- a/Buildings/Resources/Scripts/BuildingsPy/conf.yml +++ b/Buildings/Resources/Scripts/BuildingsPy/conf.yml @@ -142,7 +142,7 @@ simulate: false - model_name: Buildings.Experimental.DHC.Plants.Steam.Examples.SingleBoiler optimica: - comment: 'Fails initialization, works if Buildings.Experimental.DHC.Plants.Steam.SingleBoiler.allowFlowReversal=true, but then OpenModelica fails' + comment: Fails initialization, works if Buildings.Experimental.DHC.Plants.Steam.SingleBoiler.allowFlowReversal=true, but then OpenModelica fails simulate: false - model_name: Buildings.Fluid.Examples.FlowSystem.Basic openmodelica: @@ -274,17 +274,67 @@ optimica: comment: See https://github.com/lbl-srg/modelica-buildings/issues/2235 translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZBase + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilElectricHeating + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorMultiStage + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorVariable + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilWaterHeating3WVReheat + openmodelica: + comment: Time out after 300 s. + translate: false - model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow optimica: - comment: > - Array size mismatch in modification of the attribute quantity for the variable TZon. - This is a bug in OCT tracked under Modelon#2023022839000276. + comment: 'Array size mismatch in modification of the attribute quantity for the variable TZon. This is a bug in OCT tracked under Modelon#2023022839000276.' + translate: false + openmodelica: + comment: Translation failed. translate: false - model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure optimica: - comment: > - Array size mismatch in modification of the attribute quantity for the variable TZon. - This is a bug in OCT tracked under Modelon#2023022839000276. + comment: 'Array size mismatch in modification of the attribute quantity for the variable TZon. This is a bug in OCT tracked under Modelon#2023022839000276.' + translate: false + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZDedicatedDampersPressure + openmodelica: + comment: Time out after 300 s. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZFanRelief + openmodelica: + comment: Time out after 300 s. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZFanSupplyBlowThrough + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.Components.Validation.Fans + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly + openmodelica: + comment: Time out after 300 s. + translate: false +- model_name: Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnlyControlG36 + openmodelica: + comment: Translation failed. + translate: false +- model_name: Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheatControlG36 + openmodelica: + comment: Time out after 300 s. translate: false - model_name: Buildings.ThermalZones.Detailed.Examples.FFD.ForcedConvection optimica: From e2bc12fa48370c60033346abe476c7423b4940e9 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Tue, 22 Aug 2023 15:11:07 -0700 Subject: [PATCH 3/9] Changed call to loadResources (#3478) This is needed for Dymola 2024x beta1 on Linux --- .../Examples/Cooling/ElectricChillersDirectETS.mo | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo b/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo index 2625656efdc..0ad960aeef3 100644 --- a/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo +++ b/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo @@ -46,15 +46,15 @@ model ElectricChillersDirectETS "Example model for district cooling system with "Nominal mass flow rate in each connection line"; // Buildings parameter String filNam[nLoa]={ - "modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos", - "modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos", - "modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos"} + Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos"), + Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos"), + Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos")} "Library path of the file with thermal loads as time series" annotation (Dialog(group="Buildings")); final parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal[nLoa]( each max=-Modelica.Constants.eps)={Buildings.Experimental.DHC.Loads.BaseClasses.getPeakLoad( string="#Peak space cooling load", - filNam=Modelica.Utilities.Files.loadResource(filNam[i])) for i in 1:nLoa} + filNam=filNam[i]) for i in 1:nLoa} "Space cooling design load (<=0)"; final parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal[nLoa]( each final min=0, @@ -206,6 +206,10 @@ This configuration is illustrated in the schematic below. ", revisions="
  • +August 22, 2023, by Michael Wetter:
    +Changed call to loadResources. This is needed for Dymola 2024x beta1 on Linux. +
  • +
  • January 2, 2023, by Kathryn Hinkelman:
    Revised chilled water pump controls to be constant speed and running 1-and-1 with the chillers.
    Changed building-side ets from direct uncontrolled to controlled.
    From 675801b669cda42e40ce7ebec5412fc12fdebffc Mon Sep 17 00:00:00 2001 From: Antoine Gautier Date: Wed, 23 Aug 2023 18:09:35 +0200 Subject: [PATCH 4/9] Add all-electric plant model to DHC package (#3263) * Add heat recovery option to PartialElectric --- .travis.yml | 22 +- .../BaseClasses/PartialDirect.mo | 269 + .../BaseClasses/PartialETS.mo | 30 +- .../BaseClasses/PartialIndirect.mo | 272 + .../BaseClasses/StratifiedTank.mo | 7 +- .../BaseClasses/package.order | 2 + .../Combined/Controls/PIDWithEnable.mo | 4 +- .../EnergyTransferStations/Cooling/Direct.mo | 229 +- .../Cooling/Examples/Direct.mo | 2 - .../Cooling/Examples/Indirect.mo | 3 +- .../Cooling/Indirect.mo | 269 +- .../EnergyTransferStations/Cooling/package.mo | 4 +- .../EnergyTransferStations/Heating/Direct.mo | 51 + .../Heating/Examples/Direct.mo | 146 + .../Heating/Examples/Indirect.mo | 153 + .../Heating/Examples/package.mo | 12 + .../Heating/Examples/package.order | 2 + .../Heating/Indirect.mo | 51 + .../EnergyTransferStations/Heating/package.mo | 11 + .../Heating/package.order | 3 + .../DHC/EnergyTransferStations/package.order | 1 + .../DHC/Loads/BaseClasses/PartialBuilding.mo | 16 +- .../PartialBuildingWithPartialETS.mo | 8 +- .../BaseClasses/PartialBuildingWithETS.mo | 10 +- .../BaseClasses/PartialBuildingWithETS.mo | 81 + .../DHC/Loads/Heating/BaseClasses/package.mo | 12 + .../Loads/Heating/BaseClasses/package.order | 1 + .../Heating/BuildingTimeSeriesWithETS.mo | 80 + .../Examples/BuildingTimeSeriesWithETS.mo | 71 + .../DHC/Loads/Heating/Examples/package.mo | 11 + .../DHC/Loads/Heating/Examples/package.order | 1 + .../Experimental/DHC/Loads/Heating/package.mo | 11 + .../DHC/Loads/Heating/package.order | 3 + .../Experimental/DHC/Loads/package.order | 1 + .../DHC/Plants/BaseClasses/PartialPlant.mo | 65 +- .../Plants/Combined/AllElectricCWStorage.mo | 1642 +++ .../Controls/BaseClasses/CoolingTowerLoop.mo | 532 + .../BaseClasses/DirectHeatRecovery.mo | 272 + .../Controls/BaseClasses/IntegerArrayHold.mo | 65 + .../Controls/BaseClasses/ModeCondenserLoop.mo | 453 + .../BaseClasses/ModeHeatRecoveryChiller.mo | 91 + .../Controls/BaseClasses/PartialController.mo | 657 + .../Controls/BaseClasses/StageIndex.mo | 246 + .../Controls/BaseClasses/StagingPlant.mo | 712 + .../Controls/BaseClasses/StagingPump.mo | 266 + .../Controls/BaseClasses/TankCycle.mo | 250 + .../BaseClasses/Validation/StageIndex.mo | 43 + .../BaseClasses/Validation/StagingPlant.mo | 137 + .../BaseClasses/Validation/StagingPump.mo | 73 + .../BaseClasses/Validation/package.mo | 10 + .../BaseClasses/Validation/package.order | 3 + .../BaseClasses/ValveCondenserEvaporator.mo | 1559 +++ .../Combined/Controls/BaseClasses/package.mo | 13 + .../Controls/BaseClasses/package.order | 12 + .../Plants/Combined/Controls/Controller.mo | 547 + .../Controls/ModeCondenserLoop/package.mo | 14 + .../Controls/ModeCondenserLoop/package.order | 3 + .../DHC/Plants/Combined/Controls/package.mo | 10 + .../Plants/Combined/Controls/package.order | 3 + .../Combined/Examples/AllElectricCWStorage.mo | 282 + .../DHC/Plants/Combined/Examples/package.mo | 4 + .../Plants/Combined/Examples/package.order | 1 + .../BaseClasses/MultipleCommands.mo | 104 + .../Subsystems/BaseClasses/MultipleValves.mo | 177 + .../BaseClasses/PartialMultiplePumps.mo | 264 + .../BaseClasses/PassThroughFluid.mo | 28 + .../Subsystems/BaseClasses/package.mo | 11 + .../Subsystems/BaseClasses/package.order | 4 + .../Combined/Subsystems/ChillerGroup.mo | 545 + .../Subsystems/ChillerHeatRecoveryGroup.mo | 779 ++ .../Combined/Subsystems/CoolingTowerGroup.mo | 262 + .../Combined/Subsystems/HeatPumpGroup.mo | 371 + .../Combined/Subsystems/MultiplePumpsDp.mo | 69 + .../Combined/Subsystems/MultiplePumpsFlow.mo | 77 + .../Combined/Subsystems/MultiplePumpsSpeed.mo | 67 + .../BaseClasses/PartialMultiplePumps.mo | 204 + .../Validation/BaseClasses/package.mo | 11 + .../Validation/BaseClasses/package.order | 1 + .../Subsystems/Validation/ChillerGroup.mo | 125 + .../Validation/ChillerHeatRecoveryGroup.mo | 476 + .../Validation/CoolingTowerGroup.mo | 143 + .../Subsystems/Validation/HeatPumpGroup.mo | 142 + .../Subsystems/Validation/MultiplePumpsDp.mo | 58 + .../Validation/MultiplePumpsFlow.mo | 67 + .../Validation/MultiplePumpsSpeed.mo | 53 + .../Validation/ValveOpeningFlowBalancing.mo | 94 + .../Combined/Subsystems/Validation/package.mo | 10 + .../Subsystems/Validation/package.order | 9 + .../DHC/Plants/Combined/Subsystems/package.mo | 11 + .../Plants/Combined/Subsystems/package.order | 9 + .../Validation/AllElectricCWStorage.mo | 237 + .../DHC/Plants/Combined/Validation/package.mo | 10 + .../Plants/Combined/Validation/package.order | 1 + .../DHC/Plants/Combined/package.mo | 11 + .../DHC/Plants/Combined/package.order | 5 + .../Plants/Cooling/ElectricChillerParallel.mo | 46 +- .../DHC/Plants/Heating/SewageHeatRecovery.mo | 32 +- .../Experimental/DHC/Plants/package.order | 1 + .../Plants/Combined/AllElectricCWStorage.png | Bin 0 -> 242030 bytes .../Plants/Combined/AllElectricCWStorage.svg | 10988 ++++++++++++++++ ...ansferStations_Heating_Examples_Direct.txt | 24 + ...sferStations_Heating_Examples_Indirect.txt | 29 + ...ing_Examples_BuildingTimeSeriesWithETS.txt | 20 + ...rols_BaseClasses_Validation_StageIndex.txt | 12 + ...ls_BaseClasses_Validation_StagingPlant.txt | 25 + ...ols_BaseClasses_Validation_StagingPump.txt | 14 + ...Combined_Examples_AllElectricCWStorage.txt | 30 + ...ned_Subsystems_Validation_ChillerGroup.txt | 22 + ...ms_Validation_ChillerHeatRecoveryGroup.txt | 48 + ...ubsystems_Validation_CoolingTowerGroup.txt | 25 + ...ed_Subsystems_Validation_HeatPumpGroup.txt | 26 + ..._Subsystems_Validation_MultiplePumpsDp.txt | 23 + ...ubsystems_Validation_MultiplePumpsFlow.txt | 23 + ...bsystems_Validation_MultiplePumpsSpeed.txt | 23 + ...s_Validation_ValveOpeningFlowBalancing.txt | 10 + ...mbined_Validation_AllElectricCWStorage.txt | 95 + .../Resources/Scripts/BuildingsPy/conf.yml | 16 + .../Heating/Examples/Direct.mos | 39 + .../Heating/Examples/Indirect.mos | 54 + .../Examples/BuildingTimeSeriesWithETS.mos | 4 + .../BaseClasses/Validation/StageIndex.mos | 25 + .../BaseClasses/Validation/StagingPlant.mos | 52 + .../BaseClasses/Validation/StagingPump.mos | 34 + .../Examples/AllElectricCWStorage.mos | 11 + .../Subsystems/Validation/ChillerGroup.mos | 42 + .../Validation/ChillerHeatRecoveryGroup.mos | 96 + .../Validation/CoolingTowerGroup.mos | 42 + .../Subsystems/Validation/HeatPumpGroup.mos | 42 + .../Subsystems/Validation/MultiplePumpsDp.mos | 43 + .../Validation/MultiplePumpsFlow.mos | 43 + .../Validation/MultiplePumpsSpeed.mos | 43 + .../Validation/ValveOpeningFlowBalancing.mos | 18 + .../Validation/AllElectricCWStorage.mos | 240 + ...ansferStations.Heating.Examples.Direct.mos | 13 + ...sferStations.Heating.Examples.Indirect.mos | 17 + ...ing.Examples.BuildingTimeSeriesWithETS.mos | 9 + ...rols.BaseClasses.Validation.StageIndex.mos | 7 + ...ls.BaseClasses.Validation.StagingPlant.mos | 19 + ...ols.BaseClasses.Validation.StagingPump.mos | 9 + ...Combined.Examples.AllElectricCWStorage.mos | 19 + ...ned.Subsystems.Validation.ChillerGroup.mos | 16 + ...ms.Validation.ChillerHeatRecoveryGroup.mos | 41 + ...ubsystems.Validation.CoolingTowerGroup.mos | 14 + ...ed.Subsystems.Validation.HeatPumpGroup.mos | 15 + ....Subsystems.Validation.MultiplePumpsDp.mos | 12 + ...ubsystems.Validation.MultiplePumpsFlow.mos | 12 + ...bsystems.Validation.MultiplePumpsSpeed.mos | 12 + ...s.Validation.ValveOpeningFlowBalancing.mos | 5 + ...mbined.Validation.AllElectricCWStorage.mos | 94 + Buildings/Resources/Scripts/travis/Makefile | 6 +- Buildings/package.mo | 15 + 151 files changed, 26347 insertions(+), 597 deletions(-) create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Direct.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.order create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/Indirect.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.mo create mode 100644 Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.order create mode 100644 Buildings/Experimental/DHC/Loads/Heating/BaseClasses/PartialBuildingWithETS.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.order create mode 100644 Buildings/Experimental/DHC/Loads/Heating/BuildingTimeSeriesWithETS.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/Examples/package.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/Examples/package.order create mode 100644 Buildings/Experimental/DHC/Loads/Heating/package.mo create mode 100644 Buildings/Experimental/DHC/Loads/Heating/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/AllElectricCWStorage.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/IntegerArrayHold.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeHeatRecoveryChiller.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/PartialController.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StageIndex.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Controls/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Examples/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Examples/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleValves.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PassThroughFluid.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsDp.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsSpeed.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Validation/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/Validation/package.order create mode 100644 Buildings/Experimental/DHC/Plants/Combined/package.mo create mode 100644 Buildings/Experimental/DHC/Plants/Combined/package.order create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.png create mode 100644 Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.svg create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Direct.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Indirect.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Loads_Heating_Examples_BuildingTimeSeriesWithETS.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StageIndex.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPlant.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPump.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Examples_AllElectricCWStorage.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerGroup.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerHeatRecoveryGroup.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_CoolingTowerGroup.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_HeatPumpGroup.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsDp.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsFlow.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsSpeed.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ValveOpeningFlowBalancing.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Validation_AllElectricCWStorage.txt create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Direct.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Indirect.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Loads.Heating.Examples.BuildingTimeSeriesWithETS.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StageIndex.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPump.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerGroup.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerHeatRecoveryGroup.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.CoolingTowerGroup.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.HeatPumpGroup.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsDp.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsFlow.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsSpeed.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ValveOpeningFlowBalancing.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage.mos diff --git a/.travis.yml b/.travis.yml index 4a5f310ebf0..3150d87b376 100644 --- a/.travis.yml +++ b/.travis.yml @@ -64,9 +64,18 @@ env: - TEST_ARG="make test-dymola PACKAGE=\"Buildings.ThermalZones.{ISO13790,ReducedOrder}\"" - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.ThermalZones.{ISO13790,ReducedOrder}\"" - TEST_ARG="make test-optimica PACKAGE=\"Buildings.ThermalZones.{ISO13790,ReducedOrder}\"" - - TEST_ARG="make test-dymola PACKAGE=\"Buildings.{Applications,Experimental}\"" - - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.{Applications,Experimental}\"" - - TEST_ARG="make test-optimica PACKAGE=\"Buildings.{Applications,Experimental}\"" + - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Applications\"" + - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Applications\"" + - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Applications\"" + - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Experimental.DHC.{EnergyTransferStations,Loads,Networks,Plants}\"" + - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Experimental.DHC.{EnergyTransferStations,Loads,Networks,Plants}\"" + - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Experimental.DHC.{EnergyTransferStations,Loads,Networks,Plants}\"" + - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Experimental.DHC.Examples.Combined\"" + - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Experimental.DHC.Examples.Combined\" SINGLEPROC=\"true\"" + - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Experimental.DHC.Examples.Combined\"" + - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Experimental.DHC.Examples.{Cooling,Steam}\"" + - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Experimental.DHC.Examples.{Cooling,Steam}\"" + - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Experimental.DHC.Examples.{Cooling,Steam}\"" - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Fluid.{Actuators,BaseClasses,Boilers,Chillers,CHPs,Delays}\"" - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Fluid.{Actuators,BaseClasses,Boilers,Chillers,CHPs,Delays}\"" - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Fluid.{Actuators,BaseClasses,Boilers,Chillers,CHPs,Delays}\"" @@ -153,10 +162,15 @@ install: export ENERGYPLUS_23_1_0=${ENERGYPLUS_23_1_0}; pip3 install pandas==1.3.5; fi; - - if [[ "$TEST_ARG" == *EnergyPlus_9_6_0* ]] || [[ "$TEST_ARG" == *Buildings.{Applications,Experimental}* ]] || [[ "$TEST_ARG" == *spawn* ]]; then + - if [[ "$TEST_ARG" == *EnergyPlus_9_6_0* ]] || [[ "$TEST_ARG" == *Buildings.Experimental.DHC.{EnergyTransferStations,Loads,Networks,Plants}* ]] || [[ "$TEST_ARG" == *spawn* ]]; then echo "Installing Spawn binaries"; Buildings/Resources/src/ThermalZones/install.py --binaries-for-os-only; fi; + - if [[ "$TEST_ARG" == *SINGLEPROC* ]]; then + export NPROC=1; + else + export NPROC=10; + fi; # Execute tests script: diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo new file mode 100644 index 00000000000..70684183167 --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo @@ -0,0 +1,269 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses; +model PartialDirect + "Partial direct ETS model for district energy systems with in-building pumping and deltaT control" + extends + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialETS( + final have_weaBus=false, + final have_hotWat=false, + final have_eleHea=false, + final nFue=0, + final have_eleCoo=false, + final have_pum=false, + final have_fan=false); + // Mass flow rate + parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal( + final min=0) + "Nominal mass flow rate of building side" + annotation(Dialog(group="Nominal condition")); + // Pressure drops + parameter Modelica.Units.SI.PressureDifference dpConVal_nominal( + final min=0, + displayUnit="Pa")=50 + "Nominal pressure drop in the control valve" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpCheVal_nominal( + final min=0, + displayUnit="Pa")=6000 + "Nominal pressure drop in the check valve" + annotation(Dialog(group="Nominal condition")); + // Controller parameters + parameter Modelica.Blocks.Types.SimpleController controllerType=Modelica.Blocks.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="PID controller")); + parameter Real k( + final min=0, + final unit="1")=0.1 + "Gain of controller" + annotation (Dialog(group="PID controller")); + parameter Modelica.Units.SI.Time Ti( + final min=Modelica.Constants.small)=60 + "Time constant of integrator block" + annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td( + final min=0)=0.1 + "Time constant of derivative block" + annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real yMax=1 + "Upper limit of output" + annotation (Dialog(group="PID controller")); + parameter Real yMin=0 + "Lower limit of output" + annotation (Dialog(group="PID controller")); + // Advanced parameters + parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation (Dialog(tab="Advanced")); + parameter Real bandwidth=0.2 + "Bandwidth around reference signal for on/off controller" + annotation (Dialog(tab="Advanced")); + + Modelica.Blocks.Interfaces.RealInput TSetDisRet( + final unit="K", + displayUnit="degC") + "Setpoint for the district return temperature (min for cooling, max for heating)" + annotation (Placement(transformation(extent={{-338,-20},{-298,20}}))); + Modelica.Blocks.Interfaces.RealOutput Q_flow( + final quantity="HeatFlowRate", + final unit="W", + displayUnit="kW") + "Measured heating demand at the ETS" + annotation (Placement( + transformation(extent={{300,-140},{340,-100}}),iconTransformation( + extent={{300,-140},{340,-100}}))); + Modelica.Blocks.Interfaces.RealOutput Q( + final quantity="Energy", + final unit="J", + displayUnit="kWh") + "Measured energy consumption at the ETS" + annotation (Placement(transformation( + extent={{300,-180},{340,-140}}), iconTransformation(extent={{300,-130}, + {340,-90}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTDisSup( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mBui_flow_nominal) + "District supply temperature sensor" + annotation (Placement(transformation(extent={{-180,-290},{-160,-270}}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare final package Medium=MediumSer) + "District supply mass flow rate sensor" + annotation (Placement(transformation(extent={{-120,-290},{-100,-270}}))); + Buildings.Fluid.FixedResistances.Junction jun( + redeclare final package Medium=MediumSer, + final energyDynamics=energyDynamics, + final m_flow_nominal=mBui_flow_nominal*{1,-1,1}, + final dp_nominal={0,0,0}) + "Bypass junction" + annotation (Placement(transformation(extent={{-60,-270},{-40,-290}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTDisRet( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mBui_flow_nominal) + "District return temperature sensor" + annotation (Placement(transformation(extent={{30,190},{50,210}}))); + Buildings.Fluid.FixedResistances.Junction spl( + redeclare final package Medium=MediumSer, + final energyDynamics=energyDynamics, + final m_flow_nominal=mBui_flow_nominal*{1,-1,-1}, + final dp_nominal={0,0,0}) + "Bypass junction, splitter" + annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage conVal( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mBui_flow_nominal, + final dpValve_nominal=dpConVal_nominal, + use_inputFilter=true, + riseTime(displayUnit="s") = 60) + "Control valve" + annotation (Placement(transformation(extent={{-10,190},{10,210}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiRet( + redeclare final package Medium = MediumSer, + final m_flow_nominal=mBui_flow_nominal) + "Building return temperature sensor" + annotation (Placement(transformation(extent={{-220,190},{-200,210}}))); + Fluid.FixedResistances.CheckValve cheVal( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mBui_flow_nominal, + final dpValve_nominal=dpCheVal_nominal) + "Check valve (backflow preventer)" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={-50,-10}))); + Modelica.Blocks.Math.Add dTDis( + final k1=-1) + "Temperature difference on the district side" + annotation (Placement(transformation(extent={{80,-114},{100,-94}}))); + Modelica.Blocks.Math.Product pro + "Product" + annotation (Placement(transformation(extent={{120,-120},{140,-100}}))); + Modelica.Blocks.Math.Gain cp( + final k=cp_default) + "Specific heat multiplier to calculate heat flow rate" + annotation (Placement(transformation(extent={{180,-120},{200,-100}}))); + Modelica.Blocks.Continuous.Integrator int( + final k=1) + "Integration" + annotation (Placement(transformation(extent={{260,-170},{280,-150}}))); + Controls.OBC.CDL.Continuous.PID con( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin) + "District return temperature controller" + annotation (Placement(transformation(extent={{-220,240},{-200,260}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiSup( + redeclare final package Medium = MediumSer, + final m_flow_nominal=mBui_flow_nominal) + "Building supply temperature sensor" + annotation (Placement(transformation(extent={{230,190},{250,210}}))); +protected + final parameter MediumSer.ThermodynamicState sta_default=MediumSer.setState_pTX( + T=MediumSer.T_default, + p=MediumSer.p_default, + X=MediumSer.X_default) + "Medium state at default properties"; + final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default=MediumSer.specificHeatCapacityCp( + sta_default) + "Specific heat capacity of the fluid"; +equation + connect(senTDisSup.port_b, senMasFlo.port_a) + annotation (Line(points={{-160,-280},{-120,-280}}, color={0,127,255})); + connect(senMasFlo.port_b, jun.port_1) + annotation (Line(points={{-100,-280},{-60,-280}}, color={0,127,255})); + connect(senTBuiRet.port_b, spl.port_1) + annotation (Line(points={{-200,200},{-60,200}}, color={0,127,255})); + connect(spl.port_2, conVal.port_a) + annotation (Line(points={{-40,200},{-10,200}}, color={0,127,255})); + connect(senMasFlo.m_flow, pro.u2) + annotation (Line(points={{-110,-269},{-110,-192}, + {90,-192},{90,-116},{118,-116}}, color={0,0,127})); + connect(pro.y, cp.u) + annotation (Line(points={{141,-110},{178,-110}}, color={0,0,127})); + connect(cp.y, Q_flow) + annotation (Line(points={{201,-110},{248,-110},{248,-120},{320,-120}}, + color={0,0,127})); + connect(cp.y, int.u) + annotation (Line(points={{201,-110},{248,-110},{248,-160},{258,-160}}, + color={0,0,127})); + connect(int.y, Q) + annotation (Line(points={{281,-160},{320,-160}}, color={0,0,127})); + connect(dTDis.y, pro.u1) + annotation (Line(points={{101,-104},{118,-104}},color={0,0,127})); + connect(conVal.port_b, senTDisRet.port_a) + annotation (Line(points={{10,200},{30,200}}, color={0,127,255})); + connect(senTDisRet.T,dTDis. u1) + annotation (Line(points={{40,211},{40,226},{60,226},{60,-98},{78,-98}}, + color={0,0,127})); + connect(senTDisSup.T,dTDis. u2) + annotation (Line(points={{-170,-269},{-172,-269},{-172,-184},{60,-184},{60,-110}, + {78,-110}}, color={0,0,127})); + connect(TSetDisRet, con.u_s) + annotation (Line(points={{-318,0},{-272,0},{-272,250},{-222,250}}, + color={0,0,127})); + connect(senTBuiRet.T, con.u_m) + annotation (Line(points={{-210,211},{-210,238}},color={0,0,127})); + connect(jun.port_2, senTBuiSup.port_a) + annotation (Line(points={{-40,-280},{220,-280},{220,200},{230,200}}, color={0,127,255})); + connect(spl.port_3, cheVal.port_a) + annotation (Line(points={{-50,190},{-50,0}}, color={0,127,255})); + connect(cheVal.port_b, jun.port_3) + annotation (Line(points={{-50,-20},{-50,-270}}, color={0,127,255})); + connect(con.y, conVal.y) + annotation (Line(points={{-198,250},{0,250},{0,212}}, + color={0,0,127})); + annotation ( + defaultComponentName="etsCoo", + Documentation(info=" +

    +Direct cooling energy transfer station (ETS) model with in-building pumping and +deltaT control. The design is based on a typical district cooling ETS described +in ASHRAE's District Cooling Guide. +As shown in the figure below, the district and building piping are hydronically +coupled. The control valve ensures that the return temperature to the district +cooling network is at or above the minimum specified value. This configuration +naturally results in a fluctuating building supply tempearture. +

    +

    +\"DC +

    +

    +Reference +

    +

    American Society of Heating, Refrigeration and Air-Conditioning Engineers. (2019). +Chapter 5: End User Interface. In District Cooling Guide, Second Edition and +Owner's Guide for Buildings Served by District Cooling. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +Changed to partial base class for direct so can extend to heating and cooling ETS. +
    • +
    • +January 11, 2023, by Michael Wetter:
      +Changed controls to use CDL. Changed PID to PI as default for controller. +
    • +
    • +January 2, 2023, by Kathryn Hinkelman:
      +Set pressure drops at junctions to 0 and removed parameter dp_nominal +
    • +
    • +December 28, 2022, by Kathryn Hinkelman:
      +Simplified the control implementation for the district return stream. Improved default control parameters. +
    • +
    • +December 23, 2022, by Kathryn Hinkelman:
      +Removed extraneous m*_flow_nominal parameters because +mBui_flow_nominal can be used across all components. +This is for #2912. +
    • +
    • +November 11, 2022, by Michael Wetter:
      +Changed check valve to use version of Buildings library, and hence no outer system is needed. +
    • +
    • March 20, 2022, by Chengnan Shi:
      Update with base class partial model and standard PI control.
    • +
    • Novermber 13, 2019, by Kathryn Hinkelman:
      First implementation.
    • +
    +")); +end PartialDirect; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialETS.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialETS.mo index 8c59a5f857c..547b3984f36 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialETS.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialETS.mo @@ -327,7 +327,7 @@ First implementation. extent={{20,-288},{300,-272}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={255,0,0}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, visible=typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling), @@ -372,17 +372,17 @@ First implementation. extent={{58,-248},{300,-232}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={0,0,255}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5), Rectangle( - extent={{-45,-9},{45,9}}, + extent={{-45,-8},{45,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={0,0,255}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5, - origin={67,-187}, + origin={66,-187}, rotation=90), Rectangle( extent={{-45,-8},{45,8}}, @@ -394,14 +394,14 @@ First implementation. origin={-66,-187}, rotation=90), Rectangle( - extent={{-66,-8},{66,8}}, + extent={{-65,-8},{65,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={255,0,0}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, visible=typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling, - origin={28,-208}, + origin={28,-207}, rotation=90), Rectangle( extent={{-302,-288},{-22,-272}}, @@ -441,9 +441,9 @@ First implementation. rotation=0), Rectangle( extent={{-130,-8},{130,8}}, - lineColor={0,0,255}, + lineColor={255,0,0}, pattern=LinePattern.None, - fillColor={0,0,255}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=have_heaWat, origin={-170,260}, @@ -452,7 +452,7 @@ First implementation. extent={{-102,-8},{102,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, origin={-198,160}, rotation=0, @@ -461,7 +461,7 @@ First implementation. extent={{-6,-8},{6,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, origin={-104,146}, rotation=90, @@ -470,7 +470,7 @@ First implementation. extent={{-130,-8},{130,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, origin={170,260}, rotation=0, @@ -479,7 +479,7 @@ First implementation. extent={{-56,-9},{56,9}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, origin={49,196}, rotation=90, @@ -488,7 +488,7 @@ First implementation. extent={{-56,-9},{56,9}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={0,0,255}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, origin={-49,196}, rotation=90, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo new file mode 100644 index 00000000000..e9237d14e70 --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo @@ -0,0 +1,272 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses; +model PartialIndirect + "Partial indirect energy transfer station for district energy systems" + extends + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialETS( + final have_weaBus=false, + final have_hotWat=false, + final have_eleHea=false, + final nFue=0, + final have_eleCoo=false, + final have_pum=false, + final have_fan=false); + // mass flow rates + parameter Modelica.Units.SI.MassFlowRate mDis_flow_nominal( + final min=0) + "Nominal mass flow rate of district side" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal( + final min=0) + "Nominal mass flow rate of building side" + annotation(Dialog(group="Nominal condition")); + // Primary supply control valve + parameter Modelica.Units.SI.PressureDifference dpConVal_nominal( + final min=0, + displayUnit="Pa")=6000 + "Nominal pressure drop of fully open control valve" + annotation(Dialog(group="Nominal condition")); + // Heat exchanger + parameter Modelica.Units.SI.PressureDifference dp1_nominal( + final min=0, + displayUnit="Pa") + "Nominal pressure difference on primary side" + annotation (Dialog(group="Heat exchanger")); + parameter Modelica.Units.SI.PressureDifference dp2_nominal( + final min=0, + displayUnit="Pa") + "Nominal pressure difference on secondary side" + annotation (Dialog(group="Heat exchanger")); + parameter Boolean use_Q_flow_nominal=true + "Set to true to specify Q_flow_nominal and temeratures, or to false to specify effectiveness" + annotation (Dialog(group="Heat exchanger")); + parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal + "Nominal heat transfer (positive for heat transfer from district to building)" + annotation (Dialog(group="Heat exchanger")); + parameter Modelica.Units.SI.Temperature T_a1_nominal( + final min=273.15, + final max=373.15) + "Nominal temperature at port a1 (district supply)" + annotation (Dialog(group="Heat exchanger")); + parameter Modelica.Units.SI.Temperature T_a2_nominal( + final min=273.15, + final max=373.15) + "Nominal temperature at port a2 (building return)" + annotation (Dialog(group="Heat exchanger")); + parameter Modelica.Units.SI.Efficiency eta( + final min=0, + final max=1)=0.8 + "Constant effectiveness" + annotation (Dialog(group="Heat exchanger")); + //Controller parameters + parameter Modelica.Blocks.Types.SimpleController controllerType=Modelica.Blocks.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="PID controller")); + parameter Real k( + final min=0, + final unit="1")=1 + "Gain of controller" + annotation (Dialog(group="PID controller")); + parameter Modelica.Units.SI.Time Ti( + final min=Modelica.Constants.small)=120 + "Time constant of integrator block" + annotation (Dialog(group="PID controller",enable= + controllerType == Modelica.Blocks.Types.SimpleController.PI or + controllerType == Modelica.Blocks.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td( + final min=0)=0.1 + "Time constant of derivative block" + annotation (Dialog(group="PID controller",enable= + controllerType == Modelica.Blocks.Types.SimpleController.PD or + controllerType == Modelica.Blocks.Types.SimpleController.PID)); + parameter Real yMax=1 + "Upper limit of output" + annotation (Dialog(group="PID controller")); + parameter Real yMin=0.01 + "Lower limit of output" + annotation (Dialog(group="PID controller")); + Modelica.Blocks.Interfaces.RealInput TSetBuiSup + "Setpoint temperature for building supply" + annotation (Placement(transformation(extent={{-340,-20},{-300,20}}))); + Modelica.Blocks.Interfaces.RealOutput Q_flow( + final quantity="HeatFlowRate", + final unit="W", + displayUnit="kW") + "Measured heating demand at the ETS" + annotation (Placement( + transformation(extent={{300,-140},{340,-100}}),iconTransformation(extent={{300, + -140},{340,-100}}))); + Modelica.Blocks.Interfaces.RealOutput Q( + final quantity="Energy", + final unit="J", + displayUnit="kWh") + "Measured energy consumption at the ETS" + annotation (Placement(transformation(extent={{300,-180},{340,-140}}), + iconTransformation(extent={{300,-130},{340,-90}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTDisSup( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mDis_flow_nominal) + "District supply temperature sensor" + annotation (Placement(transformation(extent={{-220,-290},{-200,-270}}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare final package Medium=MediumSer) + "District supply mass flow rate sensor" + annotation (Placement(transformation(extent={{-160,-290},{-140,-270}}))); + Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage conVal( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mDis_flow_nominal, + final dpValve_nominal=dpConVal_nominal, + riseTime(displayUnit="s") = 10, + y_start=0) + "Control valve" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + Buildings.Fluid.HeatExchangers.PlateHeatExchangerEffectivenessNTU hex( + redeclare package Medium1 = MediumSer, + redeclare package Medium2 = MediumBui, + final m1_flow_nominal=mDis_flow_nominal, + final m2_flow_nominal=mBui_flow_nominal, + final dp1_nominal=dp1_nominal, + final dp2_nominal=dp2_nominal, + final configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, + final Q_flow_nominal=Q_flow_nominal, + final T_a1_nominal=T_a1_nominal, + final T_a2_nominal=T_a2_nominal) + "Heat exchanger" + annotation (Placement(transformation(extent={{0,-200},{20,-220}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTDisRet( + redeclare final package Medium=MediumSer, + final m_flow_nominal=mDis_flow_nominal) + "District return temperature sensor" + annotation (Placement(transformation(extent={{180,-290},{200,-270}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiRet( + redeclare final package Medium=MediumBui, + final m_flow_nominal=mBui_flow_nominal) + "Building return temperature sensor" + annotation (Placement(transformation(extent={{-218,190},{-198,210}}))); + Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiSup( + redeclare final package Medium=MediumBui, + final m_flow_nominal=mBui_flow_nominal) + "Building supply temperature sensor" + annotation (Placement(transformation(extent={{-16,-214},{-36,-194}}))); + Controls.OBC.CDL.Continuous.PID con( + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin) + "Building supply temperature controller" + annotation (Placement(transformation(extent={{-130,-230},{-110,-210}}))); + + Modelica.Blocks.Math.Add dTDis( + final k1=-1) + "Temperature difference on the district side" + annotation (Placement(transformation(extent={{20,-124},{40,-104}}))); + Modelica.Blocks.Math.Product pro + "product" + annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); + Modelica.Blocks.Math.Gain cp( + final k=cp_default) + "Specific heat multiplier to calculate heat flow rate" + annotation (Placement(transformation(extent={{180,-130},{200,-110}}))); + Modelica.Blocks.Continuous.Integrator int( + final k=1) + "Integration" + annotation (Placement(transformation(extent={{240,-170},{260,-150}}))); +protected + final parameter MediumSer.ThermodynamicState sta_default=MediumSer.setState_pTX( + T=MediumSer.T_default, + p=MediumSer.p_default, + X=MediumSer.X_default) + "Medium state at default properties"; + final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default=MediumSer.specificHeatCapacityCp( + sta_default) + "Specific heat capacity of the fluid"; +equation + connect(senTDisSup.port_b, senMasFlo.port_a) + annotation (Line(points={{-200,-280},{-160,-280}}, color={0,127,255})); + connect(senMasFlo.port_b, conVal.port_a) + annotation (Line(points={{-140,-280},{-100,-280}}, color={0,127,255})); + connect(conVal.port_b, hex.port_a1) + annotation (Line(points={{-80,-280},{-10,-280},{-10,-216},{0,-216}}, + color={0,127,255})); + connect(hex.port_b1, senTDisRet.port_a) + annotation (Line(points={{20,-216},{60, + -216},{60,-280},{180,-280}}, color={0,127,255})); + connect(senTBuiRet.port_b, hex.port_a2) + annotation (Line(points={{-198,200},{60, + 200},{60,-204},{20,-204}}, color={0,127,255})); + connect(hex.port_b2, senTBuiSup.port_a) + annotation (Line(points={{0,-204},{-16,-204}}, color={0,127,255})); + connect(senTBuiSup.T, con.u_m) + annotation (Line(points={{-26,-193},{-26,-180},{-140,-180},{-140,-240},{-120, + -240},{-120,-232}}, + color={0,0,127})); + connect(TSetBuiSup, con.u_s) + annotation (Line(points={{-320,0},{-240,0},{-240,-220},{-132,-220}}, + color={0,0,127})); + connect(con.y, conVal.y) + annotation (Line(points={{-108,-220},{-90,-220},{-90,-268}}, + color={0,0,127})); + connect(senTDisSup.T,dTDis. u2) + annotation (Line(points={{-210,-269},{-210,-120},{18,-120}}, + color={0,0,127})); + connect(senTBuiRet.T,dTDis. u1) + annotation (Line(points={{-208,211},{-208,240},{0,240},{0,-108},{18,-108}}, + color={0,0,127})); + connect(senMasFlo.m_flow, pro.u2) + annotation (Line(points={{-150,-269},{-150,-140},{100,-140},{100,-126},{118, + -126}}, color={0,0,127})); + connect(dTDis.y, pro.u1) + annotation (Line(points={{41,-114},{118,-114}}, + color={0,0,127})); + connect(pro.y, cp.u) + annotation (Line(points={{141,-120},{178,-120}}, color={0,0,127})); + connect(cp.y, Q_flow) + annotation (Line(points={{201,-120},{320,-120}}, color={0,0,127})); + connect(cp.y, int.u) + annotation (Line(points={{201,-120},{228,-120},{228,-160},{238,-160}}, + color={0,0,127})); + connect(int.y, Q) + annotation (Line(points={{261,-160},{320,-160}}, + color={0,0,127})); + annotation ( + defaultComponentName="etsCoo", + Documentation(info=" +

    +Indirect cooling energy transfer station (ETS) model that controls the +building chilled water supply temperature by modulating a primary control valve +on the district supply side. The design is based on a typical district cooling +ETS described in ASHRAE's District Cooling Guide. +As shown in the figure below, the building pumping design (constant/variable) +is specified on the building side and not within the ETS. +

    +

    +\"DHC.ETS.Indirect\"/ +

    +

    Reference

    +

    +American Society of Heating, Refrigeration and Air-Conditioning Engineers. (2019). +Chapter 5: End User Interface. In District Cooling Guide, Second Edition and +Owner's Guide for Buildings Served by District Cooling. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +Changed to partial base class for indirect so can extend to heating and cooling ETS. +
    • +
    • +January 11, 2023, by Michael Wetter:
      +Changed controls to use CDL. Changed PID to PI as default for controller. +
    • +
    • +March 21, 2022, by Chengnan Shi:
      +Update with base class partial model. +
    • +
    • Novermber 13, 2019, by Kathryn Hinkelman:
      +First implementation. +
    • +
    +")); +end PartialIndirect; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/StratifiedTank.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/StratifiedTank.mo index c623547dd78..dcf81623762 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/StratifiedTank.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/StratifiedTank.mo @@ -3,9 +3,10 @@ model StratifiedTank "Stratified buffer tank model" replaceable package Medium=Modelica.Media.Interfaces.PartialMedium "Medium model" - annotation (choices(choice(redeclare package Medium=Buildings.Media.Water "Water"),choice(redeclare - package Medium= - Buildings.Media.Antifreeze.PropyleneGlycolWater ( property_T=293.15,X_a=0.40) "Propylene glycol water, 40% mass fraction"))); + annotation (choices( + choice(redeclare package Medium=Buildings.Media.Water "Water"), + choice(redeclare package Medium = Buildings.Media.Antifreeze.PropyleneGlycolWater (property_T=293.15,X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); final parameter Boolean allowFlowReversal=true "= true to allow flow reversal, false restricts to design direction (port_a -> port_b)" annotation (Dialog(tab="Assumptions"),Evaluate=true); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/package.order b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/package.order index e969937926f..76ab3dba26b 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/package.order +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/package.order @@ -1,7 +1,9 @@ CollectorDistributor Connection2PipeLossless Junction +PartialDirect PartialETS +PartialIndirect Pump_m_flow StratifiedTank computeCoordinates diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo index 8b4542eaac7..c5f7e6727f5 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo @@ -26,6 +26,8 @@ block PIDWithEnable "Set to true for reverse acting, or false for direct acting control action"; parameter Real y_reset=yMin "Value to which the controller output is reset if the boolean trigger has a rising edge"; + parameter Real y_neutral=y_reset + "Value to which the controller output is reset when the controller is disabled"; Buildings.Controls.OBC.CDL.Interfaces.RealInput u_s "Connector of setpoint input signal" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}),iconTransformation(extent={{-140,-20},{-100,20}}))); @@ -54,7 +56,7 @@ block PIDWithEnable Buildings.Controls.OBC.CDL.Continuous.Switch swi1 annotation (Placement(transformation(extent={{72,-10},{92,10}}))); Buildings.Controls.OBC.CDL.Continuous.Sources.Constant valDis( - final k=0) + final k=y_neutral) "Value when disabled" annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); equation diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Direct.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Direct.mo index 17236ca7275..d5336be9430 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Direct.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Direct.mo @@ -2,229 +2,22 @@ within Buildings.Experimental.DHC.EnergyTransferStations.Cooling; model Direct "Direct cooling ETS model for district energy systems with in-building pumping and deltaT control" extends - Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialETS( - final typ=DHC.Types.DistrictSystemType.Cooling, - final have_weaBus=false, - final have_chiWat=true, - final have_heaWat=false, - final have_hotWat=false, - final have_eleHea=false, - final nFue=0, - final have_eleCoo=false, - final have_pum=false, - final have_fan=false, - nPorts_aChiWat=1, - nPorts_bChiWat=1); - // Mass flow rate - parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal( - final min=0, - final start=0.5) - "Nominal mass flow rate of building cooling side" - annotation(Dialog(group="Nominal condition")); - // Pressure drops - parameter Modelica.Units.SI.PressureDifference dpConVal_nominal( - final min=0, - displayUnit="Pa")=50 - "Nominal pressure drop in the control valve" - annotation(Dialog(group="Nominal condition")); - parameter Modelica.Units.SI.PressureDifference dpCheVal_nominal( - final min=0, - displayUnit="Pa")=6000 - "Nominal pressure drop in the check valve" - annotation(Dialog(group="Nominal condition")); - // Controller parameters - parameter Modelica.Blocks.Types.SimpleController controllerType=Modelica.Blocks.Types.SimpleController.PI - "Type of controller" - annotation (Dialog(group="PID controller")); - parameter Real k( - final min=0, - final unit="1")=0.1 - "Gain of controller" - annotation (Dialog(group="PID controller")); - parameter Modelica.Units.SI.Time Ti( - final min=Modelica.Constants.small)=60 - "Time constant of integrator block" - annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); - parameter Modelica.Units.SI.Time Td( - final min=0)=0.1 - "Time constant of derivative block" - annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); - parameter Real yMax( - final start=1)=1 - "Upper limit of output" - annotation (Dialog(group="PID controller")); - parameter Real yMin=0 - "Lower limit of output" - annotation (Dialog(group="PID controller")); - // Advanced parameters - parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial - "Type of energy balance: dynamic (3 initialization options) or steady state" - annotation (Dialog(tab="Advanced")); - parameter Real bandwidth=0.2 - "Bandwidth around reference signal for on/off controller" - annotation (Dialog(tab="Advanced")); - - Modelica.Blocks.Interfaces.RealInput TSetDisRet - "Setpoint for the minimum district return temperature" - annotation (Placement(transformation(extent={{-338,-20},{-298,20}}))); - Modelica.Blocks.Interfaces.RealOutput Q_flow( - final quantity="HeatFlowRate", - final unit="W", - displayUnit="kW") - "Measured heating demand at the ETS" - annotation (Placement( - transformation(extent={{300,-140},{340,-100}}),iconTransformation( - extent={{300,-140},{340,-100}}))); - Modelica.Blocks.Interfaces.RealOutput Q( - final quantity="Energy", - final unit="J", - displayUnit="kWh") - "Measured energy consumption at the ETS" - annotation (Placement(transformation( - extent={{300,-180},{340,-140}}), iconTransformation(extent={{300,-130}, - {340,-90}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTDisSup( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mBui_flow_nominal) - "District supply temperature sensor" - annotation (Placement(transformation(extent={{-180,-290},{-160,-270}}))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo( - redeclare final package Medium=MediumSer) - "District supply mass flow rate sensor" - annotation (Placement(transformation(extent={{-120,-290},{-100,-270}}))); - Buildings.Fluid.FixedResistances.Junction jun( - redeclare final package Medium=MediumSer, - final energyDynamics=energyDynamics, - final m_flow_nominal=mBui_flow_nominal*{1,-1,1}, - final dp_nominal={0,0,0}) - "Bypass junction" - annotation (Placement(transformation(extent={{-60,-270},{-40,-290}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTDisRet( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mBui_flow_nominal) - "District return temperature sensor" - annotation (Placement(transformation(extent={{30,190},{50,210}}))); - Buildings.Fluid.FixedResistances.Junction spl( - redeclare final package Medium=MediumSer, - final energyDynamics=energyDynamics, - final m_flow_nominal=mBui_flow_nominal*{1,-1,-1}, - final dp_nominal={0,0,0}) - "Bypass junction, splitter" - annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage conVal( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mBui_flow_nominal, - final dpValve_nominal=dpConVal_nominal, - use_inputFilter=true, - riseTime(displayUnit="s") = 60) - "Control valve" - annotation (Placement(transformation(extent={{-10,190},{10,210}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiRet( - redeclare final package Medium = MediumSer, - final m_flow_nominal=mBui_flow_nominal) - "Building return temperature sensor" - annotation (Placement(transformation(extent={{-220,190},{-200,210}}))); - Fluid.FixedResistances.CheckValve cheVal( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mBui_flow_nominal, - final dpValve_nominal=dpCheVal_nominal) - "Check valve (backflow preventer)" - annotation (Placement(transformation(extent={{10,-10},{-10,10}}, - rotation=90, - origin={-50,-10}))); - Modelica.Blocks.Math.Add dTDis( - final k1=-1) - "Temperature difference on the district side" - annotation (Placement(transformation(extent={{80,-114},{100,-94}}))); - Modelica.Blocks.Math.Product pro - "Product" - annotation (Placement(transformation(extent={{120,-120},{140,-100}}))); - Modelica.Blocks.Math.Gain cp( - final k=cp_default) - "Specific heat multiplier to calculate heat flow rate" - annotation (Placement(transformation(extent={{180,-120},{200,-100}}))); - Modelica.Blocks.Continuous.Integrator int( - final k=1) - "Integration" - annotation (Placement(transformation(extent={{260,-170},{280,-150}}))); - Controls.OBC.CDL.Continuous.PID con( - final controllerType=controllerType, - final k=k, - final Ti=Ti, - final Td=Td, - final yMax=yMax, - final yMin=yMin, - reverseActing=false) - "District return temperature controller" - annotation (Placement(transformation(extent={{-220,240},{-200,260}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiSup( - redeclare final package Medium = MediumSer, - final m_flow_nominal=mBui_flow_nominal) - "Building supply temperature sensor" - annotation (Placement(transformation(extent={{230,190},{250,210}}))); -protected - final parameter MediumSer.ThermodynamicState sta_default=MediumSer.setState_pTX( - T=MediumSer.T_default, - p=MediumSer.p_default, - X=MediumSer.X_default) - "Medium state at default properties"; - final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default=MediumSer.specificHeatCapacityCp( - sta_default) - "Specific heat capacity of the fluid"; + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialDirect( + final typ=DHC.Types.DistrictSystemType.Cooling, + final have_chiWat=true, + final have_heaWat=false, + con(reverseActing=false), + nPorts_aChiWat=1, + nPorts_bChiWat=1); equation connect(port_aSerCoo, senTDisSup.port_a) annotation (Line(points={{-300,-280},{-180,-280}}, color={0,127,255})); - connect(senTDisSup.port_b, senMasFlo.port_a) - annotation (Line(points={{-160,-280},{-120,-280}}, color={0,127,255})); - connect(senMasFlo.port_b, jun.port_1) - annotation (Line(points={{-100,-280},{-60,-280}}, color={0,127,255})); connect(ports_aChiWat[1], senTBuiRet.port_a) annotation (Line(points={{-300,200},{-220,200}}, color={0,127,255})); - connect(senTBuiRet.port_b, spl.port_1) - annotation (Line(points={{-200,200},{-60,200}}, color={0,127,255})); - connect(spl.port_2, conVal.port_a) - annotation (Line(points={{-40,200},{-10,200}}, color={0,127,255})); - connect(senMasFlo.m_flow, pro.u2) - annotation (Line(points={{-110,-269},{-110,-192}, - {90,-192},{90,-116},{118,-116}}, color={0,0,127})); - connect(pro.y, cp.u) - annotation (Line(points={{141,-110},{178,-110}}, color={0,0,127})); - connect(cp.y, Q_flow) - annotation (Line(points={{201,-110},{248,-110},{248,-120},{320,-120}}, - color={0,0,127})); - connect(cp.y, int.u) - annotation (Line(points={{201,-110},{248,-110},{248,-160},{258,-160}}, - color={0,0,127})); - connect(int.y, Q) - annotation (Line(points={{281,-160},{320,-160}}, color={0,0,127})); - connect(dTDis.y, pro.u1) - annotation (Line(points={{101,-104},{118,-104}},color={0,0,127})); - connect(conVal.port_b, senTDisRet.port_a) - annotation (Line(points={{10,200},{30,200}}, color={0,127,255})); - connect(senTDisRet.port_b, port_bSerCoo) - annotation (Line(points={{50,200},{162,200},{162,-240},{262,-240},{262,-280},{300,-280}}, color={0,127,255})); - connect(senTDisRet.T,dTDis. u1) - annotation (Line(points={{40,211},{40,226},{60,226},{60,-98},{78,-98}}, - color={0,0,127})); - connect(senTDisSup.T,dTDis. u2) - annotation (Line(points={{-170,-269},{-172,-269},{-172,-184},{60,-184},{60,-110}, - {78,-110}}, color={0,0,127})); - connect(TSetDisRet, con.u_s) - annotation (Line(points={{-318,0},{-272,0},{-272,250},{-222,250}}, - color={0,0,127})); - connect(senTBuiRet.T, con.u_m) - annotation (Line(points={{-210,211},{-210,238}},color={0,0,127})); - connect(jun.port_2, senTBuiSup.port_a) - annotation (Line(points={{-40,-280},{220,-280},{220,200},{230,200}}, color={0,127,255})); + connect(senTDisRet.port_b, port_bSerCoo) annotation (Line(points={{50,200},{160, + 200},{160,-240},{260,-240},{260,-280},{300,-280}}, color={0,127,255})); connect(senTBuiSup.port_b, ports_bChiWat[1]) annotation (Line(points={{250,200},{300,200}}, color={0,127,255})); - connect(spl.port_3, cheVal.port_a) - annotation (Line(points={{-50,190},{-50,0}}, color={0,127,255})); - connect(cheVal.port_b, jun.port_3) - annotation (Line(points={{-50,-20},{-50,-270}}, color={0,127,255})); - connect(con.y, conVal.y) - annotation (Line(points={{-198,250},{0,250},{0,212}}, - color={0,0,127})); annotation ( defaultComponentName="etsCoo", Documentation(info=" @@ -256,6 +49,10 @@ Removed assignment of check valve allowFlowReversal=false.
    This is for #3389.
  • +April 7, 2023, by David Blum:
    +Change to extend from Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialDirect. +
  • +
  • January 11, 2023, by Michael Wetter:
    Changed controls to use CDL. Changed PID to PI as default for controller.
  • diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Direct.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Direct.mo index 3a7e1e58b4e..4ae9169763a 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Direct.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Direct.mo @@ -157,8 +157,6 @@ This is for November 15, 2022, by Kathryn Hinkelman:
    Corrected pressure balance across bypass leg and system. -
-
  • March 20, 2022, by Chengnan Shi:
    First implementation.
")); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Indirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Indirect.mo index 4e9025305bf..31101466b89 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Indirect.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Examples/Indirect.mo @@ -33,8 +33,7 @@ model Indirect "Example model for indirect cooling energy transfer station yMin=0.01, controllerType=Modelica.Blocks.Types.SimpleController.PI, nPorts_bChiWat=1, - nPorts_aChiWat=1) - "Direct cooling energy transfer station" + nPorts_aChiWat=1) "Direct cooling energy transfer station" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); Buildings.Fluid.Sources.Boundary_pT souDis( redeclare package Medium = Medium, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Indirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Indirect.mo index 74c30d355f7..1e002622f8f 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Indirect.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/Indirect.mo @@ -2,258 +2,25 @@ within Buildings.Experimental.DHC.EnergyTransferStations.Cooling; model Indirect "Indirect cooling energy transfer station for district energy systems" extends - Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialETS( - QChiWat_flow_nominal=-Q_flow_nominal, - final typ=DHC.Types.DistrictSystemType.Cooling, - final have_weaBus=false, - final have_chiWat=true, - final have_heaWat=false, - final have_hotWat=false, - final have_eleHea=false, - final nFue=0, - final have_eleCoo=false, - final have_pum=false, - final have_fan=false, - nPorts_aChiWat=1, - nPorts_bChiWat=1); - // mass flow rates - parameter Modelica.Units.SI.MassFlowRate mDis_flow_nominal( - final min=0, - final start=0.5) - "Nominal mass flow rate of district cooling side" - annotation(Dialog(group="Nominal condition")); - parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal( - final min=0, - final start=0.5) - "Nominal mass flow rate of building cooling side" - annotation(Dialog(group="Nominal condition")); - // Primary supply control valve - parameter Modelica.Units.SI.PressureDifference dpConVal_nominal( - final min=0, - displayUnit="Pa")=6000 - "Nominal pressure drop of fully open control valve" - annotation(Dialog(group="Nominal condition")); - // Heat exchanger - parameter Modelica.Units.SI.PressureDifference dp1_nominal( - final min=0, - final start=500, - displayUnit="Pa") - "Nominal pressure difference on primary side" - annotation (Dialog(group="Heat exchanger")); - parameter Modelica.Units.SI.PressureDifference dp2_nominal( - final min=0, - final start=500, - displayUnit="Pa") - "Nominal pressure difference on secondary side" - annotation (Dialog(group="Heat exchanger")); - parameter Boolean use_Q_flow_nominal=true - "Set to true to specify Q_flow_nominal and temeratures, or to false to specify effectiveness" - annotation (Dialog(group="Heat exchanger")); - parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal( - final max=0, - final start=-100000) - "Nominal heat transfer" - annotation (Dialog(group="Heat exchanger")); - parameter Modelica.Units.SI.Temperature T_a1_nominal( - final min=273.15, - final max=373.15, - final start=278.15) - "Nominal temperature at port a1" - annotation (Dialog(group="Heat exchanger")); - parameter Modelica.Units.SI.Temperature T_a2_nominal( - final min=273.15, - final max=373.15, - final start=280.15) - "Nominal temperature at port a2" - annotation (Dialog(group="Heat exchanger")); - parameter Modelica.Units.SI.Efficiency eta( - final min=0, - final max=1)=0.8 - "Constant effectiveness" - annotation (Dialog(group="Heat exchanger")); - //Controller parameters - parameter Modelica.Blocks.Types.SimpleController controllerType=Modelica.Blocks.Types.SimpleController.PI - "Type of controller" - annotation (Dialog(group="PID controller")); - parameter Real k( - final min=0, - final unit="1")=1 - "Gain of controller" - annotation (Dialog(group="PID controller")); - parameter Modelica.Units.SI.Time Ti( - final min=Modelica.Constants.small)=120 - "Time constant of integrator block" - annotation (Dialog(group="PID controller",enable= - controllerType == Modelica.Blocks.Types.SimpleController.PI or - controllerType == Modelica.Blocks.Types.SimpleController.PID)); - parameter Modelica.Units.SI.Time Td( - final min=0)=0.1 - "Time constant of derivative block" - annotation (Dialog(group="PID controller",enable= - controllerType == Modelica.Blocks.Types.SimpleController.PD or - controllerType == Modelica.Blocks.Types.SimpleController.PID)); - parameter Real yMax( - final start=1)=1 - "Upper limit of output" - annotation (Dialog(group="PID controller")); - parameter Real yMin=0.01 - "Lower limit of output" - annotation (Dialog(group="PID controller")); - Modelica.Blocks.Interfaces.RealInput TSetBuiSup - "Setpoint temperature for building supply" - annotation (Placement(transformation(extent={{-340,-20},{-300,20}}))); - Modelica.Blocks.Interfaces.RealOutput Q_flow( - final quantity="HeatFlowRate", - final unit="W", - displayUnit="kW") - "Measured heating demand at the ETS" - annotation (Placement( - transformation(extent={{300,-140},{340,-100}}),iconTransformation(extent={{300, - -140},{340,-100}}))); - Modelica.Blocks.Interfaces.RealOutput Q( - final quantity="Energy", - final unit="J", - displayUnit="kWh") - "Measured energy consumption at the ETS" - annotation (Placement(transformation(extent={{300,-180},{340,-140}}), - iconTransformation(extent={{300,-130},{340,-90}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTDisSup( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mDis_flow_nominal) - "District supply temperature sensor" - annotation (Placement(transformation(extent={{-220,-290},{-200,-270}}))); - Buildings.Fluid.Sensors.MassFlowRate senMasFlo( - redeclare final package Medium=MediumSer) - "District supply mass flow rate sensor" - annotation (Placement(transformation(extent={{-160,-290},{-140,-270}}))); - Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage conVal( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mDis_flow_nominal, - final dpValve_nominal=dpConVal_nominal, - riseTime(displayUnit="s") = 10, - y_start=0) - "Control valve" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - Buildings.Fluid.HeatExchangers.PlateHeatExchangerEffectivenessNTU hex( - redeclare package Medium1 = MediumSer, - redeclare package Medium2 = MediumBui, - final m1_flow_nominal=mDis_flow_nominal, - final m2_flow_nominal=mBui_flow_nominal, - final dp1_nominal=dp1_nominal, - final dp2_nominal=dp2_nominal, - final configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, - final Q_flow_nominal=Q_flow_nominal, - final T_a1_nominal=T_a1_nominal, - final T_a2_nominal=T_a2_nominal) - "Heat exchanger" - annotation (Placement(transformation(extent={{0,-200},{20,-220}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTDisRet( - redeclare final package Medium=MediumSer, - final m_flow_nominal=mDis_flow_nominal) - "District return temperature sensor" - annotation (Placement(transformation(extent={{180,-270},{200,-290}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiRet( - redeclare final package Medium=MediumBui, - final m_flow_nominal=mBui_flow_nominal) - "Building return temperature sensor" - annotation (Placement(transformation(extent={{-218,190},{-198,210}}))); - Buildings.Fluid.Sensors.TemperatureTwoPort senTBuiSup( - redeclare final package Medium=MediumBui, - final m_flow_nominal=mBui_flow_nominal) - "Building supply temperature sensor" - annotation (Placement(transformation(extent={{-16,-214},{-36,-194}}))); - Controls.OBC.CDL.Continuous.PID con( - final controllerType=controllerType, - final k=k, - final Ti=Ti, - final Td=Td, - final yMax=yMax, - final yMin=yMin, - reverseActing=false) - "Building supply temperature controller" - annotation (Placement(transformation(extent={{-130,-230},{-110,-210}}))); - - Modelica.Blocks.Math.Add dTDis( - final k1=-1) - "Temperature difference on the district side" - annotation (Placement(transformation(extent={{20,-124},{40,-104}}))); - Modelica.Blocks.Math.Product pro - "product" - annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); - Modelica.Blocks.Math.Gain cp( - final k=cp_default) - "Specific heat multiplier to calculate heat flow rate" - annotation (Placement(transformation(extent={{180,-130},{200,-110}}))); - Modelica.Blocks.Continuous.Integrator int( - final k=1) - "Integration" - annotation (Placement(transformation(extent={{240,-170},{260,-150}}))); -protected - final parameter MediumSer.ThermodynamicState sta_default=MediumSer.setState_pTX( - T=MediumSer.T_default, - p=MediumSer.p_default, - X=MediumSer.X_default) - "Medium state at default properties"; - final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default=MediumSer.specificHeatCapacityCp( - sta_default) - "Specific heat capacity of the fluid"; + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialIndirect( + QChiWat_flow_nominal=-Q_flow_nominal, + final typ=DHC.Types.DistrictSystemType.Cooling, + final have_chiWat=true, + final have_heaWat=false, + Q_flow_nominal(max=0), + nPorts_aChiWat=1, + nPorts_bChiWat=1, + con(reverseActing=false)); equation - connect(ports_aChiWat[1], senTBuiRet.port_a) - annotation (Line(points={{-300,200},{-218,200}}, color={0,127,255})); - connect(port_aSerCoo, senTDisSup.port_a) - annotation (Line(points={{-300,-280},{-220,-280}}, color={0,127,255})); - connect(senTDisSup.port_b, senMasFlo.port_a) - annotation (Line(points={{-200,-280},{-160,-280}}, color={0,127,255})); - connect(senMasFlo.port_b, conVal.port_a) - annotation (Line(points={{-140,-280},{-100,-280}}, color={0,127,255})); - connect(conVal.port_b, hex.port_a1) - annotation (Line(points={{-80,-280},{-10,-280},{-10,-216},{0,-216}}, - color={0,127,255})); - connect(hex.port_b1, senTDisRet.port_a) - annotation (Line(points={{20,-216},{60, - -216},{60,-280},{180,-280}}, color={0,127,255})); + connect(senTBuiRet.port_a, ports_aChiWat[1]) + annotation (Line(points={{-218,200},{-300,200}}, color={0,127,255})); + connect(senTBuiSup.port_b, ports_bChiWat[1]) annotation (Line(points={{-36, + -204},{-80,-204},{-80,160},{180,160},{180,200},{300,200}}, color={0, + 127,255})); connect(senTDisRet.port_b, port_bSerCoo) annotation (Line(points={{200,-280},{300,-280}}, color={0,127,255})); - connect(senTBuiRet.port_b, hex.port_a2) - annotation (Line(points={{-198,200},{60, - 200},{60,-204},{20,-204}}, color={0,127,255})); - connect(hex.port_b2, senTBuiSup.port_a) - annotation (Line(points={{0,-204},{-16,-204}}, color={0,127,255})); - connect(senTBuiSup.port_b, ports_bChiWat[1]) - annotation (Line(points={{-36,-204},{-60,-204},{-60,180},{280,180},{280,200}, - {300,200}}, color={0,127,255})); - connect(senTBuiSup.T, con.u_m) - annotation (Line(points={{-26,-193},{-26,-180},{-140,-180},{-140,-240},{-120, - -240},{-120,-232}}, - color={0,0,127})); - connect(TSetBuiSup, con.u_s) - annotation (Line(points={{-320,0},{-240,0},{-240,-220},{-132,-220}}, - color={0,0,127})); - connect(con.y, conVal.y) - annotation (Line(points={{-108,-220},{-90,-220},{-90,-268}}, - color={0,0,127})); - connect(senTDisSup.T,dTDis. u2) - annotation (Line(points={{-210,-269},{-210,-120},{18,-120}}, - color={0,0,127})); - connect(senTBuiRet.T,dTDis. u1) - annotation (Line(points={{-208,211},{-208,240},{0,240},{0,-108},{18,-108}}, - color={0,0,127})); - connect(senMasFlo.m_flow, pro.u2) - annotation (Line(points={{-150,-269},{-150,-140},{100,-140},{100,-126},{118, - -126}}, color={0,0,127})); - connect(dTDis.y, pro.u1) - annotation (Line(points={{41,-114},{118,-114}}, - color={0,0,127})); - connect(pro.y, cp.u) - annotation (Line(points={{141,-120},{178,-120}}, color={0,0,127})); - connect(cp.y, Q_flow) - annotation (Line(points={{201,-120},{320,-120}}, color={0,0,127})); - connect(cp.y, int.u) - annotation (Line(points={{201,-120},{228,-120},{228,-160},{238,-160}}, - color={0,0,127})); - connect(int.y, Q) - annotation (Line(points={{261,-160},{320,-160}}, - color={0,0,127})); + connect(port_aSerCoo, senTDisSup.port_a) + annotation (Line(points={{-300,-280},{-220,-280}}, color={0,127,255})); annotation ( defaultComponentName="etsCoo", Documentation(info=" @@ -278,6 +45,10 @@ Chapter 5: End User Interface. In District Cooling Guide, Second Edition revisions="
  • +May 30, 2023, by David Blum:
    +Change to extend from Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialDirect. +
  • +
  • March 16, 2023, by David Blum:
    Fixed building supply temperature controller parameter reverseActing by changing from true to false.
    diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/package.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/package.mo index fe94b4b0cbf..9818b123d9a 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/package.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Cooling/package.mo @@ -1,11 +1,11 @@ within Buildings.Experimental.DHC.EnergyTransferStations; -package Cooling "This package contains models for energy transfer stations used in district cooling system." +package Cooling "This package contains models for energy transfer stations used in district cooling systems" extends Modelica.Icons.VariantsPackage; annotation (Documentation(info="

    This package contains models for energy transfer stations used -in district cooling system. +in district cooling systems.

    ")); end Cooling; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Direct.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Direct.mo new file mode 100644 index 00000000000..702a80719de --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Direct.mo @@ -0,0 +1,51 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.Heating; +model Direct "Direct cooling ETS model for district energy systems with in-building + pumping and deltaT control" + extends + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialDirect( + final typ=DHC.Types.DistrictSystemType.HeatingGeneration2to4, + final have_chiWat=false, + final have_heaWat=true, + nPorts_aHeaWat=1, + nPorts_bHeaWat=1); +equation + connect(senTDisRet.port_b, port_bSerHea) annotation (Line(points={{50,200},{160, + 200},{160,-240},{300,-240}}, color={0,127,255})); + connect(port_aSerHea, senTDisSup.port_a) annotation (Line(points={{-300,-240}, + {-220,-240},{-220,-280},{-180,-280}}, color={0,127,255})); + connect(ports_aHeaWat[1], senTBuiRet.port_a) annotation (Line(points={{-300,260}, + {-240,260},{-240,200},{-220,200}}, color={0,127,255})); + connect(senTBuiSup.port_b, ports_bHeaWat[1]) annotation (Line(points={{250,200}, + {260,200},{260,260},{300,260}}, color={0,127,255})); + annotation ( + defaultComponentName="etsCoo", + Documentation(info=" +

    +Direct cooling energy transfer station (ETS) model with in-building pumping and +deltaT control. The design is based on a typical district cooling ETS described +in ASHRAE's District Cooling Guide. +As shown in the figure below, the district and building piping are hydronically +coupled. The control valve ensures that the return temperature to the district +cooling network is at or above the minimum specified value. This configuration +naturally results in a fluctuating building supply tempearture. +

    +

    +\"DC +

    +

    +Reference +

    +

    American Society of Heating, Refrigeration and Air-Conditioning Engineers. (2019). +Chapter 5: End User Interface. In District Cooling Guide, Second Edition and +Owner's Guide for Buildings Served by District Cooling. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +First implementation. +
    • +
    +")); +end Direct; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mo new file mode 100644 index 00000000000..1f588711f0a --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mo @@ -0,0 +1,146 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples; +model Direct "Example model for direct heating energy transfer station + with in-building pumping and controlled district return temperature" + extends Modelica.Icons.Example; + package Medium=Buildings.Media.Water + "Water medium"; + parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal=18000 + "Nominal heating load" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal=Q_flow_nominal/(cp*(50-40)) + "Nominal mass flow rate of building heating supply" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.SpecificHeatCapacity cp=Medium.specificHeatCapacityCp( + Medium.setState_pTX( + Medium.p_default, + Medium.T_default, + Medium.X_default)) + "Default specific heat capacity of medium"; + Buildings.Experimental.DHC.EnergyTransferStations.Heating.Direct heaETS( + mBui_flow_nominal=mBui_flow_nominal, + QHeaWat_flow_nominal=Q_flow_nominal, + dpConVal_nominal=50, + dpCheVal_nominal=6000, + nPorts_bHeaWat=1, + nPorts_aHeaWat=1) "Energy transfer station" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + Modelica.Blocks.Sources.Constant TSetDisRet_max(k=273.15 + 40) + "Maximum setpoint temperature for district return" + annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); + Buildings.Fluid.Sources.Boundary_pT sinDis( + redeclare package Medium = Medium, + p=340000, + nPorts=1) + "District-side sink" + annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); + Buildings.Fluid.Sources.Boundary_pT souDis( + redeclare package Medium = Medium, + p=350000, + use_T_in=true, + T=280.15, + nPorts=1) + "District-side source" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Modelica.Blocks.Sources.RealExpression TDisSupNoi(y=(273.15 + 50) + 2*sin( + time*4*3.14/86400)) + "Sinusoidal noise signal for district supply temperature" + annotation (Placement(transformation(extent={{-120,-76},{-100,-56}}))); + Buildings.Fluid.Movers.FlowControlled_m_flow pum( + redeclare replaceable package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mBui_flow_nominal, + addPowerToMedium=false, + nominalValuesDefineDefaultPressureCurve=true, + constantMassFlowRate=mBui_flow_nominal) + "Building primary pump" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + Buildings.Fluid.HeatExchangers.HeaterCooler_u loa( + redeclare package Medium = Medium, + allowFlowReversal=false, + m_flow_nominal=mBui_flow_nominal, + show_T=true, + from_dp=false, + dp_nominal=100, + linearizeFlowResistance=true, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + Q_flow_nominal=-1) + "Aggregate building heating load" + annotation (Placement(transformation(extent={{20,40},{0,60}}))); + Modelica.Blocks.Sources.Ramp ram( + height=1, + duration(displayUnit="h") = 3600, + startTime(displayUnit="h")) + "Ramp load from zero" + annotation (Placement(transformation(extent={{-120,80},{-100,100}}))); + Modelica.Blocks.Sources.CombiTimeTable QHea( + table=[0,100E3; 6,80E3; 6,50E3; 12,20E3; 18,150E3; 24,100E3], + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + timeScale=3600) "Heating demand" + annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); + Modelica.Blocks.Math.Product pro + "Multiplier to ramp load from zero" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + Modelica.Blocks.Math.Gain gai(k=1/(cp*(50 - 40))) + "Multiplier gain for calculating m_flow" + annotation (Placement(transformation(extent={{0,80},{20,100}}))); +equation + connect(TSetDisRet_max.y,heaETS. TSetDisRet) + annotation (Line(points={{-99,-10},{-0.6,-10}}, color={0,0,127})); + connect(TDisSupNoi.y, souDis.T_in) + annotation (Line(points={{-99,-66},{-62,-66}}, color={0,0,127})); + connect(pum.port_b, loa.port_a) + annotation (Line(points={{60,30},{80,30},{80,50},{20,50}}, + color={0,127,255})); + connect(ram.y, pro.u1) + annotation (Line(points={{-99,90},{-92,90},{-92,76},{-82,76}}, + color={0,0,127})); + connect(QHea.y[1], pro.u2) + annotation (Line(points={{-99,50},{-92,50},{-92,64},{-82,64}}, + color={0,0,127})); + connect(pro.y, loa.u) + annotation (Line(points={{-59,70},{32,70},{32,56},{22,56}}, + color={0,0,127})); + connect(pro.y, gai.u) + annotation (Line(points={{-59,70},{-40,70},{-40,90},{-2,90}}, + color={0,0,127})); + connect(gai.y, pum.m_flow_in) + annotation (Line(points={{21,90},{50,90},{50,42}}, color={0,0,127})); + connect(heaETS.ports_bHeaWat[1], pum.port_a) annotation (Line(points={{20,-1.33333}, + {34,-1.33333},{34,30},{40,30}}, color={0,127,255})); + connect(heaETS.ports_aHeaWat[1], loa.port_b) annotation (Line(points={{0,-1.33333}, + {-26,-1.33333},{-26,0},{-40,0},{-40,50},{0,50}}, color={0,127,255})); + connect(heaETS.port_aSerHea, souDis.ports[1]) annotation (Line(points={{0,-18}, + {-20,-18},{-20,-70},{-40,-70}}, color={0,127,255})); + connect(sinDis.ports[1], heaETS.port_bSerHea) annotation (Line(points={{60,-70}, + {40,-70},{40,-18},{20,-18}}, color={0,127,255})); + annotation ( + Icon( + coordinateSystem( + preserveAspectRatio=false)), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-160,-120},{160,120}})), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mos" "Simulate and plot"), + experiment( + StartTime=0, + StopTime=86400, + Tolerance=1e-06), + Documentation(info=" +

    This model provides an example for the direct heating energy transfer station +model, which contains in-building pumping and controls the district return +temperature. The building's primary variable speed pump is modulated depending +on the total heating load and prescribed deltaT. Variation in the district +supply temperature is modeled as a sinusoidal signal to test the response of system. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +First implementation. +
    • +
    +")); +end Direct; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mo new file mode 100644 index 00000000000..86baa8fbe1e --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mo @@ -0,0 +1,153 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples; +model Indirect "Example model for indirect heating energy transfer station + with a closed chilled water loop on the building side" + extends Modelica.Icons.Example; + package Medium=Buildings.Media.Water + "Water medium"; + parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal = 19000 + "Heating design flow rate"; + parameter Modelica.Units.SI.TemperatureDifference dT_nominal = 50-40 + "Design temperature difference"; + parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal=QHea_flow_nominal/dT_nominal/cp + "Nominal mass flow rate of building heating supply" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.SpecificHeatCapacity cp=Medium.specificHeatCapacityCp( + Medium.setState_pTX( + Medium.p_default, + Medium.T_default, + Medium.X_default)) + "Default specific heat capacity of medium"; + Buildings.Experimental.DHC.EnergyTransferStations.Heating.Indirect heaETS( + QHeaWat_flow_nominal=QHea_flow_nominal, + mDis_flow_nominal=mBui_flow_nominal, + mBui_flow_nominal=mBui_flow_nominal, + dpConVal_nominal=9000, + dp1_nominal=9000, + dp2_nominal=9000, + Q_flow_nominal=QHea_flow_nominal, + T_a1_nominal=328.15, + T_a2_nominal=313.15, + k=0.1, + Ti=40, + yMax=1, + yMin=0.01, + controllerType=Modelica.Blocks.Types.SimpleController.PI, + nPorts_aHeaWat=1, + nPorts_bHeaWat=1) + "Direct heating energy transfer station" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + Buildings.Fluid.Sources.Boundary_pT souDis( + redeclare package Medium = Medium, + p(displayUnit="Pa") = 300000 + 2*9000, + use_T_in=false, + T=328.15, + nPorts=1) + "District (primary) source" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + Buildings.Fluid.Sources.Boundary_pT sinDis( + redeclare package Medium = Medium, + T=314.15, + nPorts=1) + "District (primary) sink" + annotation (Placement(transformation(extent={{100,-80},{80,-60}}))); + Modelica.Blocks.Sources.Constant TSetHWS(k=273.15 + 50) + "Setpoint temperature for building heating water supply" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + Buildings.Fluid.HeatExchangers.HeaterCooler_u loa( + redeclare package Medium = Medium, + allowFlowReversal=false, + m_flow_nominal=mBui_flow_nominal, + show_T=true, + from_dp=false, + dp_nominal=6000, + linearizeFlowResistance=true, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial, + Q_flow_nominal=-1) "Aggregate building heating load" + annotation (Placement(transformation(extent={{40,40},{20,60}}))); + Buildings.Fluid.Movers.FlowControlled_m_flow pumBui( + redeclare replaceable package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + m_flow_nominal=mBui_flow_nominal, + nominalValuesDefineDefaultPressureCurve=true, + dp_nominal=6000+9000) + "Building-side (secondary) pump" + annotation (Placement(transformation(extent={{80,40},{60,60}}))); + Modelica.Blocks.Sources.CombiTimeTable QHea( + table=[0,10E3; 6,8E3; 6,5E3; 12,2E3; 18,15E3; 24,10E3], + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + timeScale=3600) "Heating demand" + annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); + Modelica.Blocks.Math.Product pro + "Multiplier to ramp load from zero" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + Modelica.Blocks.Sources.Ramp ram( + height=1, + duration(displayUnit="h")=18000, + startTime(displayUnit="h")=3600) "Ramp load from zero" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Modelica.Blocks.Math.Gain gai(k=1/(cp*dT_nominal)) + "Multiplier gain for calculating m_flow" + annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); + Buildings.Fluid.Sources.Boundary_pT souBui( + redeclare package Medium = Medium, + nPorts=1) + "Building (secondary) source" + annotation (Placement(transformation(extent={{128,64},{108,84}}))); +equation + connect(pumBui.port_b, loa.port_a) + annotation (Line(points={{60,50},{40,50}}, color={0,127,255})); + connect(QHea.y[1], gai.u) + annotation (Line(points={{-79,110},{-42,110}}, color={0,0,127})); + connect(gai.y, pumBui.m_flow_in) + annotation (Line(points={{-19,110},{70,110},{70,62}}, color={0,0,127})); + connect(ram.y, pro.u2) annotation (Line(points={{-79,70},{-60,70},{-60,64},{-42, + 64}}, color={0,0,127})); + connect(QHea.y[1], pro.u1) annotation (Line(points={{-79,110},{-60,110},{-60,76}, + {-42,76}}, color={0,0,127})); + connect(pro.y, loa.u) annotation (Line(points={{-19,70},{50,70},{50,56},{42,56}}, + color={0,0,127})); + connect(pumBui.port_a, souBui.ports[1]) annotation (Line(points={{80,50},{94,50}, + {94,74},{108,74}}, color={0,127,255})); + connect(TSetHWS.y, heaETS.TSetBuiSup) + annotation (Line(points={{-59,-30},{19.3333,-30}}, color={0,0,127})); + connect(souDis.ports[1], heaETS.port_aSerHea) annotation (Line(points={{-20,-70}, + {14,-70},{14,-38},{20,-38}}, color={0,127,255})); + connect(sinDis.ports[1], heaETS.port_bSerHea) annotation (Line(points={{80,-70}, + {60,-70},{60,-38},{40,-38}}, color={0,127,255})); + connect(loa.port_b, heaETS.ports_aHeaWat[1]) annotation (Line(points={{20,50}, + {-20,50},{-20,-21.3333},{20,-21.3333}}, color={0,127,255})); + connect(heaETS.ports_bHeaWat[1], pumBui.port_a) annotation (Line(points={{40, + -21.3333},{62,-21.3333},{62,-22},{100,-22},{100,50},{80,50}}, + color={0,127,255})); + annotation ( + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}})), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-140,-140},{140,140}})), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mos" "Simulate and plot"), + experiment( + StartTime=0, + StopTime=86400, + Tolerance=1e-06), + Documentation(info=" +

    +This model provides an example for the indirect heating energy transfer station model. +The heating load ramps up from zero and is modulated according to the QHea table specification. +The mass flow rate of heating water in the building side is varied based on the building load/demand. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +First implementation. +
    • +
    +")); +end Indirect; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.mo new file mode 100644 index 00000000000..9e01f669c1e --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.mo @@ -0,0 +1,12 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.Heating; +package Examples + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(revisions=" +", info=" +

    This package contains advanced examples illustrating the use of the models in + +Buildings.Experimental.DHC.EnergyTransferStations.Cooling. +

    +")); +end Examples; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.order b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.order new file mode 100644 index 00000000000..ae94ae21beb --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Examples/package.order @@ -0,0 +1,2 @@ +Direct +Indirect diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Indirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Indirect.mo new file mode 100644 index 00000000000..b24eb2de323 --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/Indirect.mo @@ -0,0 +1,51 @@ +within Buildings.Experimental.DHC.EnergyTransferStations.Heating; +model Indirect + "Indirect cooling energy transfer station for district energy systems" + extends + Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialIndirect( + QHeaWat_flow_nominal=Q_flow_nominal, + final typ=DHC.Types.DistrictSystemType.HeatingGeneration2to4, + final have_chiWat=false, + final have_heaWat=true, + Q_flow_nominal(min=0), + nPorts_aHeaWat=1, + nPorts_bHeaWat=1); +equation + connect(ports_aHeaWat[1], senTBuiRet.port_a) annotation (Line(points={{-300,260}, + {-240,260},{-240,200},{-218,200}}, color={0,127,255})); + connect(port_aSerHea, senTDisSup.port_a) annotation (Line(points={{-300,-240}, + {-260,-240},{-260,-280},{-220,-280}}, color={0,127,255})); + connect(senTBuiSup.port_b, ports_bHeaWat[1]) annotation (Line(points={{-36,-204}, + {-60,-204},{-60,180},{220,180},{220,260},{300,260}}, color={0,127,255})); + connect(senTDisRet.port_b, port_bSerHea) annotation (Line(points={{200,-280}, + {242,-280},{242,-240},{300,-240}}, color={0,127,255})); + annotation ( + defaultComponentName="etsCoo", + Documentation(info=" +

    +Indirect cooling energy transfer station (ETS) model that controls the +building chilled water supply temperature by modulating a primary control valve +on the district supply side. The design is based on a typical district cooling +ETS described in ASHRAE's District Cooling Guide. +As shown in the figure below, the building pumping design (constant/variable) +is specified on the building side and not within the ETS. +

    +

    +\"DHC.ETS.Indirect\"/ +

    +

    Reference

    +

    +American Society of Heating, Refrigeration and Air-Conditioning Engineers. (2019). +Chapter 5: End User Interface. In District Cooling Guide, Second Edition and +Owner's Guide for Buildings Served by District Cooling. +

    +", + revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +First implementation. +
    • +
    +")); +end Indirect; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.mo new file mode 100644 index 00000000000..b5de803b7fe --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.EnergyTransferStations; +package Heating "This package contains models for energy transfer stations used in district heating systems" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

    +This package contains models for energy transfer stations used +in district heating systems. +

    +")); +end Heating; diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.order b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.order new file mode 100644 index 00000000000..7c97f97e7c0 --- /dev/null +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Heating/package.order @@ -0,0 +1,3 @@ +Direct +Indirect +Examples diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/package.order b/Buildings/Experimental/DHC/EnergyTransferStations/package.order index 98a75a07843..19bec0b3406 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/package.order +++ b/Buildings/Experimental/DHC/EnergyTransferStations/package.order @@ -1,4 +1,5 @@ Combined Cooling +Heating Types BaseClasses diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo index 6534ff00778..34636628d7f 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo @@ -287,13 +287,7 @@ First implementation. fillColor={255,255,255}, fillPattern=FillPattern.Solid), Rectangle( - extent={{20,-188},{300,-172}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={255,0,0}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-300,-172},{-20,-188}}, + extent={{-300,-172},{300,-188}}, lineColor={0,0,255}, pattern=LinePattern.None, fillColor={0,0,255}, @@ -308,13 +302,7 @@ First implementation. textColor={0,0,255}, textString="%name"), Rectangle( - extent={{20,-52},{300,-68}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,255}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-300,-68},{-20,-52}}, + extent={{-300,-68},{300,-52}}, lineColor={0,0,255}, pattern=LinePattern.None, fillColor={255,0,0}, diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo index b45cef433ca..5d4183c81fd 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo @@ -514,14 +514,14 @@ equation extent={{40,-34},{100,-46}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={0,0,255}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5), Rectangle( extent={{-100,-34},{-40,-46}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=typ <> TypDisSys.Cooling and typ <> TypDisSys.CombinedGeneration5), Rectangle( @@ -538,7 +538,7 @@ equation extent={{-14,-6},{14,6}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, origin={28,-60}, rotation=90, @@ -548,7 +548,7 @@ equation extent={{22,-86},{100,-74}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={0,0,255}, fillPattern=FillPattern.Solid, visible=typ == TypDisSys.CombinedGeneration1 or typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling)}), diff --git a/Buildings/Experimental/DHC/Loads/Cooling/BaseClasses/PartialBuildingWithETS.mo b/Buildings/Experimental/DHC/Loads/Cooling/BaseClasses/PartialBuildingWithETS.mo index e2836af7e81..6f7823b6b4d 100644 --- a/Buildings/Experimental/DHC/Loads/Cooling/BaseClasses/PartialBuildingWithETS.mo +++ b/Buildings/Experimental/DHC/Loads/Cooling/BaseClasses/PartialBuildingWithETS.mo @@ -50,7 +50,9 @@ model PartialBuildingWithETS parameter Real yMin=0 "Lower limit of output" annotation (Dialog(group="PID controller")); - Modelica.Blocks.Interfaces.RealInput TSetDisRet + Modelica.Blocks.Interfaces.RealInput TSetDisRet( + final unit="K", + displayUnit="degC") "Setpoint for the minimum district return temperature" annotation (Placement(transformation(extent={{-340,20},{-300,-20}}), iconTransformation(extent={{-120,60},{-100,80}}))); @@ -59,16 +61,16 @@ equation {-64,-56},{-31.8,-56}}, color={0,0,127})); annotation (Documentation(info="

    -This model is composed of a direct controlled energy transfer station model for cooling +This model is composed of a direct controlled energy transfer station model for cooling Buildings.Experimental.DHC.EnergyTransferStations.Cooling.Direct -connected to a repleacable building load model. +connected to a repleacable building load model.

    ", revisions="
    • December 23, 2022, by Kathryn Hinkelman:
      -Revised ETS from direct uncontrolled to direct controlled. +Revised ETS from direct uncontrolled to direct controlled. This is for #2912.
    diff --git a/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/PartialBuildingWithETS.mo b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/PartialBuildingWithETS.mo new file mode 100644 index 00000000000..517da0ebffc --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/PartialBuildingWithETS.mo @@ -0,0 +1,81 @@ +within Buildings.Experimental.DHC.Loads.Heating.BaseClasses; +model PartialBuildingWithETS + "Partial model with ETS model for heating and partial building model" + extends + Buildings.Experimental.DHC.Loads.BaseClasses.PartialBuildingWithPartialETS( + nPorts_heaWat=1, + redeclare Buildings.Experimental.DHC.EnergyTransferStations.Heating.Direct ets( + final mBui_flow_nominal=mBui_flow_nominal, + final controllerType=controllerType, + final k=k, + final Ti=Ti, + final Td=Td, + final yMax=yMax, + final yMin=yMin)); + + parameter Modelica.Units.SI.MassFlowRate mBui_flow_nominal( + final min=0, + final start=0.5) + "Nominal mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpSup( + final min=0, + displayUnit="Pa")=5000 + "Pressure drop in the ETS supply side"; + parameter Modelica.Units.SI.PressureDifference dpRet( + final min=0, + displayUnit="Pa")=5000 + "Pressure drop in the ETS return side"; + // Controller parameters + parameter Modelica.Blocks.Types.SimpleController controllerType=Modelica.Blocks.Types.SimpleController.PI + "Type of controller" + annotation (Dialog(group="PID controller")); + parameter Real k( + final min=0, + final unit="1")=0.1 + "Gain of controller" + annotation (Dialog(group="PID controller")); + parameter Modelica.Units.SI.Time Ti( + final min=Modelica.Constants.small)=60 + "Time constant of integrator block" + annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PI or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Modelica.Units.SI.Time Td( + final min=0)=0.1 + "Time constant of derivative block" + annotation (Dialog(group="PID controller",enable=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID)); + parameter Real yMax( + final start=1)=1 + "Upper limit of output" + annotation (Dialog(group="PID controller")); + parameter Real yMin=0 + "Lower limit of output" + annotation (Dialog(group="PID controller")); + Modelica.Blocks.Interfaces.RealInput TSetDisRet( + final unit="K", + displayUnit="degC") + "Setpoint for the maximum district return temperature" + annotation (Placement(transformation(extent={{-340,20},{-300,-20}}), + iconTransformation(extent={{-120,60},{-100,80}}))); +equation + connect(TSetDisRet, ets.TSetDisRet) annotation (Line(points={{-320,0},{-64,0}, + {-64,-56},{-31.8,-56}}, color={0,0,127})); + annotation (Documentation(info=" +

    +This model is composed of a direct controlled energy transfer station model for cooling + +Buildings.Experimental.DHC.EnergyTransferStations.Cooling.Direct +connected to a repleacable building load model. +

    +", revisions=" +
      +
    • +December 23, 2022, by Kathryn Hinkelman:
      +Revised ETS from direct uncontrolled to direct controlled. +This is for #2912. +
    • +
    +
      +
    • March 20, 2022, by Chengnan Shi:
      First implementation.
    • +
    +")); +end PartialBuildingWithETS; diff --git a/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.mo b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.mo new file mode 100644 index 00000000000..f98fecd077e --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.mo @@ -0,0 +1,12 @@ +within Buildings.Experimental.DHC.Loads.Heating; +package BaseClasses "Package with base classes that are used by multiple models" + extends Modelica.Icons.BasesPackage; + +annotation (Documentation(info=" +

    +This package contains base classes that are used to construct the classes in + +Buildings.Experimental.DHC.Loads.Cooling. +

    +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.order b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.order new file mode 100644 index 00000000000..62be362ef8b --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/BaseClasses/package.order @@ -0,0 +1 @@ +PartialBuildingWithETS diff --git a/Buildings/Experimental/DHC/Loads/Heating/BuildingTimeSeriesWithETS.mo b/Buildings/Experimental/DHC/Loads/Heating/BuildingTimeSeriesWithETS.mo new file mode 100644 index 00000000000..b02e79c96d9 --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/BuildingTimeSeriesWithETS.mo @@ -0,0 +1,80 @@ +within Buildings.Experimental.DHC.Loads.Heating; +model BuildingTimeSeriesWithETS + "Model of a building with loads provided as time series, connected to an ETS for heating" + extends BaseClasses.PartialBuildingWithETS( + redeclare Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.BuildingTimeSeries bui( + final have_heaWat=true, + final have_chiWat=false, + final have_hotWat=false, + final filNam=filNam, + T_aHeaWat_nominal=THeaWatSup_nominal, + T_bHeaWat_nominal=THeaWatRet_nominal), + mBui_flow_nominal=QHea_flow_nominal/(cp*dT_nominal), + ets( + QHeaWat_flow_nominal=QHea_flow_nominal)); + + final parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal= + bui.facMul * bui.QHea_flow_nominal + "Space heating design load (>=0)"; + parameter Modelica.Units.SI.TemperatureDifference dT_nominal(min=0)=10 + "Water temperature drop/increase accross load and source-side HX (always positive)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature THeaWatSup_nominal=50 + 273.15 + "Heating water supply temperature" + annotation (Dialog(group="Nominal conditions")); + final parameter Modelica.Units.SI.Temperature THeaWatRet_nominal= + THeaWatSup_nominal - dT_nominal + "Heating water return temperature" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState + "Type of energy balance" + annotation (Evaluate=true,Dialog(tab="Dynamics",group="Conservation equations")); + parameter Boolean use_inputFilter=false + "= true, if pump speed is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Pump")); + parameter String filNam + "Library path of the file with thermal loads as time series"; +protected + parameter Modelica.Units.SI.SpecificHeatCapacity cp=MediumSer.specificHeatCapacityCp( + MediumSer.setState_pTX( + MediumSer.p_default, + MediumSer.T_default, + MediumSer.X_default)) + "Default specific heat capacity of medium"; + annotation ( + defaultComponentName="loa", + Documentation(info=" +

    +This model is composed of a direct controlled energy transfer station model for heating + +Buildings.Experimental.DHC.EnergyTransferStations.Heating.Direct +connected to a simplified building model +Buildings.Experimental.DHC.Loads.Heating.BaseClasses.BuildingTimeSeries +where the space heating loads are provided as time series. +

    +", revisions=" +
      +
    • +January 12, 2023, by Michael Wetter:
      +Removed unused parameter riseTime. +
    • +
    • +January 2, 2023, by Kathryn Hinkelman:
      +Propagated energy dynamics and a filter for the (variable) secondary pumps. +
    • +
    • +December 23, 2022, by Kathryn Hinkelman:
      +Revised ETS from direct uncontrolled to direct controlled. +This is for #2912. +
    • +
    • +December 21, 2022 by Kathryn Hinkelman:
      +Removed in-building pumping because of coupling with the direct/uncontrolled ETS.
      +This is for #2912. +
    • +
    +
      +
    • March 20, 2022 by Chengnan Shi:
      First implementation.
    • +
    +")); +end BuildingTimeSeriesWithETS; diff --git a/Buildings/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mo b/Buildings/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mo new file mode 100644 index 00000000000..04224c7b43e --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mo @@ -0,0 +1,71 @@ +within Buildings.Experimental.DHC.Loads.Heating.Examples; +model BuildingTimeSeriesWithETS + "Example model of a building with loads provided as time series and + connected to an ETS for cooling" + extends Modelica.Icons.Example; + package Medium=Buildings.Media.Water + "Medium model"; + Buildings.Experimental.DHC.Loads.Heating.BuildingTimeSeriesWithETS buiWitETS(filNam="modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos") + "Building Time Series load coupled with ETS" + annotation (Placement(transformation(extent={{40,-20},{60,0}}))); + Buildings.Fluid.Sources.Boundary_pT supHeaWat( + redeclare package Medium = Medium, + p(displayUnit="bar") = 350000, + use_T_in=true, + nPorts=1) "Heating water supply" + annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-50,10}))); + Buildings.Fluid.Sources.Boundary_pT sinHeaWat( + redeclare package Medium = Medium, + p(displayUnit="bar") = 340000, + nPorts=1) "Sink for heating water" + annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-50,-50}))); + Buildings.Fluid.Sensors.MassFlowRate senMasFlo(redeclare package Medium = Medium) + "Mass flow rate sensor" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + Modelica.Blocks.Sources.Constant TDisRetSet(k=273.15 + 45) + "Setpoint for district return temperature" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + Modelica.Blocks.Sources.Constant TDisSup(k( + unit="K", + displayUnit="degC") = 323.15) + "District supply temperature" + annotation (Placement(transformation(extent={{-90,4},{-70,24}}))); +equation + connect(supHeaWat.ports[1], senMasFlo.port_a) + annotation (Line(points={{-40,10},{-20,10}}, color={0,127,255})); + connect(TDisSup.y,supHeaWat. T_in) + annotation (Line(points={{-69,14},{-62,14}}, color={0,0,127})); + connect(TDisRetSet.y, buiWitETS.TSetDisRet) annotation (Line(points={{21,50}, + {30,50},{30,-3},{39,-3}}, color={0,0,127})); + connect(senMasFlo.port_b, buiWitETS.port_aSerHea) annotation (Line(points={{0, + 10},{20,10},{20,-14},{40,-14}}, color={0,127,255})); + connect(buiWitETS.port_bSerHea, sinHeaWat.ports[1]) annotation (Line(points={{ + 60,-14},{80,-14},{80,-50},{-40,-50}}, color={0,127,255})); + annotation ( + Icon( + coordinateSystem( + preserveAspectRatio=false)), + Diagram( + coordinateSystem( + preserveAspectRatio=false)), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mos" "Simulate and plot"), + experiment( + StartTime=2592000, + StopTime=3628800, + Tolerance=1e-06), + Documentation(info=" +

    +This model provides an example for a building with loads provided +as time series and connected to a direct ETS for heating with the +return heating water temperature controlled below a maximum threshold. +

    +", revisions=" +
      +
    • +March 20, 2022, by Chengnan Shi:
      +First implementation. +
    • +
    +")); +end BuildingTimeSeriesWithETS; diff --git a/Buildings/Experimental/DHC/Loads/Heating/Examples/package.mo b/Buildings/Experimental/DHC/Loads/Heating/Examples/package.mo new file mode 100644 index 00000000000..dd2da885b56 --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/Examples/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Loads.Heating; +package Examples + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" +

    This package contains an example illustrating the use of the model in + +Buildings.Experimental.DHC.Loads.Cooling. +

    +")); +end Examples; diff --git a/Buildings/Experimental/DHC/Loads/Heating/Examples/package.order b/Buildings/Experimental/DHC/Loads/Heating/Examples/package.order new file mode 100644 index 00000000000..d36587bb820 --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/Examples/package.order @@ -0,0 +1 @@ +BuildingTimeSeriesWithETS diff --git a/Buildings/Experimental/DHC/Loads/Heating/package.mo b/Buildings/Experimental/DHC/Loads/Heating/package.mo new file mode 100644 index 00000000000..2bdee781289 --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Loads; +package Heating "This package contains models for loads used in district heating systems." + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

    +This package contains models of building loads that are used to +build example models of district cooling systems. +

    +")); +end Heating; diff --git a/Buildings/Experimental/DHC/Loads/Heating/package.order b/Buildings/Experimental/DHC/Loads/Heating/package.order new file mode 100644 index 00000000000..8432812c187 --- /dev/null +++ b/Buildings/Experimental/DHC/Loads/Heating/package.order @@ -0,0 +1,3 @@ +BuildingTimeSeriesWithETS +Examples +BaseClasses diff --git a/Buildings/Experimental/DHC/Loads/package.order b/Buildings/Experimental/DHC/Loads/package.order index 63f773314af..c80a38599ec 100644 --- a/Buildings/Experimental/DHC/Loads/package.order +++ b/Buildings/Experimental/DHC/Loads/package.order @@ -1,4 +1,5 @@ Combined Cooling +Heating Steam BaseClasses diff --git a/Buildings/Experimental/DHC/Plants/BaseClasses/PartialPlant.mo b/Buildings/Experimental/DHC/Plants/BaseClasses/PartialPlant.mo index 007143cd4df..711e1ea9202 100644 --- a/Buildings/Experimental/DHC/Plants/BaseClasses/PartialPlant.mo +++ b/Buildings/Experimental/DHC/Plants/BaseClasses/PartialPlant.mo @@ -4,7 +4,7 @@ partial model PartialPlant replaceable package Medium=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Service side medium"; - replaceable package MediumHea_b=Buildings.Media.Steam + replaceable package MediumHea_b=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Service side medium at heating supply" annotation(Dialog(enable= @@ -48,7 +48,7 @@ partial model PartialPlant if have_serAmb "Fluid connector for ambient water service supply line" annotation ( - Placement(transformation(extent={{-310,30},{-290,50}}), + Placement(transformation(extent={{-390,30},{-370,50}}), iconTransformation(extent={{-310,30},{-290,50}}))); Modelica.Fluid.Interfaces.FluidPort_b port_bSerAmb( redeclare package Medium = Medium, @@ -57,7 +57,7 @@ partial model PartialPlant if have_serAmb "Fluid connector for ambient water service return line" annotation ( - Placement(transformation(extent={{290,30},{310,50}}), + Placement(transformation(extent={{370,30},{390,50}}), iconTransformation(extent={{290,30},{310,50}}))); Modelica.Fluid.Interfaces.FluidPort_a port_aSerHea( redeclare package Medium = Medium, @@ -65,23 +65,24 @@ partial model PartialPlant h_outflow(start=Medium.h_default, nominal=Medium.h_default)) if have_hea "Fluid connector for heating service supply line" annotation (Placement( - transformation(extent={{-310,-10},{-290,10}}), - iconTransformation(extent={{-310,-10},{-290,10}}))); + transformation(extent={{-390,-10},{-370,10}}), iconTransformation( + extent={{-310,-10},{-290,10}}))); Modelica.Fluid.Interfaces.FluidPort_b port_bSerHea( redeclare package Medium = MediumHea_b, m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), h_outflow(start=MediumHea_b.h_default, nominal=MediumHea_b.h_default)) if have_hea "Fluid connector for heating service return line" annotation (Placement( - transformation(extent={{290,-10},{310,10}}), - iconTransformation(extent={{290,-10},{310,10}}))); + transformation(extent={{370,-10},{390,10}}), iconTransformation( + extent={{290,-10},{310,10}}))); Modelica.Fluid.Interfaces.FluidPort_a port_aSerCoo( redeclare package Medium = Medium, m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), h_outflow(start=Medium.h_default, nominal=Medium.h_default)) if have_coo "Fluid connector for cooling service supply line" - annotation (Placement(transformation(extent={{-310,-50},{-290,-30}}))); + annotation (Placement(transformation(extent={{-390,-50},{-370,-30}}), + iconTransformation(extent={{-310,-50},{-290,-30}}))); Modelica.Fluid.Interfaces.FluidPort_b port_bSerCoo( redeclare package Medium = Medium, m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), @@ -89,37 +90,37 @@ partial model PartialPlant if have_coo "Fluid connector for cooling service return line" annotation (Placement( - transformation(extent={{290,-50},{310,-30}}), - iconTransformation(extent={{290,-50},{310,-30}}))); + transformation(extent={{370,-50},{390,-30}}), iconTransformation( + extent={{290,-50},{310,-30}}))); Buildings.BoundaryConditions.WeatherData.Bus weaBus if have_weaBus "Weather data bus" - annotation (Placement(transformation(extent={{-16,250},{18,282}}), - iconTransformation(extent={{-16,250},{18,282}}))); + annotation (Placement(transformation(extent={{-20,360},{20,400}}), + iconTransformation(extent={{-10,290},{10,310}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput PHea( final unit="W") if have_eleHea "Power drawn by heating system" - annotation (Placement(transformation(extent={{300,260},{340,300}}), + annotation (Placement(transformation(extent={{380,260},{420,300}}), iconTransformation(extent={{300,240},{380,320}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput PCoo( final unit="W") if have_eleCoo "Power drawn by cooling system" - annotation (Placement(transformation(extent={{300,220},{340,260}}), + annotation (Placement(transformation(extent={{380,220},{420,260}}), iconTransformation(extent={{300,200},{380,280}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput PFan( final unit="W") if have_fan "Power drawn by fan motors" - annotation (Placement(transformation(extent={{300,180},{340,220}}), + annotation (Placement(transformation(extent={{380,180},{420,220}}), iconTransformation(extent={{300,160},{380,240}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput PPum( final unit="W") if have_pum "Power drawn by pump motors" - annotation (Placement(transformation(extent={{300,140},{340,180}}), + annotation (Placement(transformation(extent={{380,140},{420,180}}), iconTransformation(extent={{300,120},{380,200}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput QFue_flow( final unit="W") if have_fue "Fuel energy input rate" annotation ( - Placement(transformation(extent={{300,100},{340,140}}), + Placement(transformation(extent={{380,100},{420,140}}), iconTransformation(extent={{300,80},{380,160}}))); protected final parameter Boolean have_hea=typ <> Buildings.Experimental.DHC.Types.DistrictSystemType.Cooling and @@ -190,14 +191,7 @@ First implementation. color={0,0,255}, pattern=LinePattern.None), Rectangle( - extent={{-300,-8},{-140,8}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,255}, - fillPattern=FillPattern.Solid, - visible=have_hea), - Rectangle( - extent={{140,-48},{300,-32}}, + extent={{-300,-48},{300,-32}}, lineColor={0,0,255}, pattern=LinePattern.None, fillColor={0,0,255}, @@ -218,26 +212,19 @@ First implementation. fillPattern=FillPattern.Solid, visible=have_serAmb), Rectangle( - extent={{-140,140},{140,-142}}, - lineColor={27,0,55}, - fillColor={170,213,255}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{140,-8},{300,8}}, + extent={{-300,-8},{300,8}}, lineColor={0,0,255}, pattern=LinePattern.None, - fillColor={238,46,47}, + fillColor={255,0,0}, fillPattern=FillPattern.Solid, visible=have_hea), Rectangle( - extent={{-300,-48},{-140,-32}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={238,46,47}, - fillPattern=FillPattern.Solid, - visible=have_coo)}), + extent={{-140,140},{140,-142}}, + lineColor={27,0,55}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid)}), Diagram( coordinateSystem( preserveAspectRatio=false, - extent={{-300,-300},{300,300}}))); + extent={{-380,-380},{380,380}}))); end PartialPlant; diff --git a/Buildings/Experimental/DHC/Plants/Combined/AllElectricCWStorage.mo b/Buildings/Experimental/DHC/Plants/Combined/AllElectricCWStorage.mo new file mode 100644 index 00000000000..7dfe1eae346 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/AllElectricCWStorage.mo @@ -0,0 +1,1642 @@ +within Buildings.Experimental.DHC.Plants.Combined; +model AllElectricCWStorage + "All-electric CHW and HW plant with CW storage" + extends BaseClasses.PartialPlant( + final typ=Buildings.Experimental.DHC.Types.DistrictSystemType.CombinedGeneration2to4, + final have_weaBus=true, + final have_fan=true, + final have_pum=true, + final have_eleHea=true, + final have_eleCoo=true); + + replaceable package MediumAir=Buildings.Media.Air + "Air medium"; + replaceable package MediumConWatCoo=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium model for cooling tower circuit" + annotation (choices( + choice(redeclare package Medium=Buildings.Media.Water "Water"), + choice(redeclare package Medium = + Buildings.Media.Antifreeze.PropyleneGlycolWater ( + property_T=293.15,X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); + + // CHW loop and cooling-only chillers + parameter Integer nChi(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Integer nPumChiWat(final min=1, start=1)=max(nChi, nChiHea) + "Number of CHW pumps operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + final parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal( + final min=0)=datChi.mEva_flow_nominal + "Design chiller CHW mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_min( + final min=0)=0.6 * mChiWatChi_flow_nominal + "Chiller CHW minimum mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + final parameter Modelica.Units.SI.MassFlowRate mConWatChi_flow_nominal( + final min=0)=datChi.mCon_flow_nominal + "Design chiller CW mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpChiWatSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) CHW differential pressure setpoint" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpEvaChi_nominal( + final min=0, + displayUnit="Pa")=5E4 + "Design evaporator pressure drop (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpConChi_nominal( + final min=0, + displayUnit="Pa")=5E4 + "Design condenser pressure drop (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpPumChiWat_nominal( + final min=0, + displayUnit="Pa")=1.1 * (dpChiWatSet_max + max( + dpEvaChi_nominal + chi.valEva.dpValve_nominal, + dpEvaChiHea_nominal + max(chiHea.valEva.dpValve_nominal) + sum(chiHea.valEvaSwi.dpValve_nominal))) + "Design head of CHW pump(each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic datChi + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "Chiller parameters (each unit)" + annotation ( + Dialog(group="CHW loop and cooling-only chillers"), + Placement(transformation(extent={{80,340},{100,360}}))); + + final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + max(chi.TChiWatSup_nominal, chiHea.TChiWatSup_nominal) + "Design (minimum) CHW supply temperature" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= + TChiWatSup_nominal - QChiWat_flow_nominal / mChiWat_flow_nominal / cp_default + "Design (maximum) CHW return temperature" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + // Plant capacity computed with HRCs in direct heat recovery mode, see + // Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StagingPlant. + final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= + chi.QChiWat_flow_nominal + chiHea.QChiWat_flow_nominal + "Design plant cooling heat flow rate (all units)"; + final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0)= + nChi * mChiWatChi_flow_nominal + nChiHea * mChiWatChiHea_flow_nominal + "Design CHW mass flow rate (all units)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_min=10 + "Minimum chiller lift at minimum load" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_nominal= + TTanSet[1, 2] + 5 - TChiWatSup_nominal + "Design chiller lift" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + + // HW loop and heat recovery chillers + parameter Integer nChiHea(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Integer nPumHeaWat(final min=1, start=1) = nChiHea + "Number of HW pumps operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + final parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_nominal= + datChiHea.mEva_flow_nominal + "Design HRC CHW mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_min( + final min=0)=0.6 * mChiWatChiHea_flow_nominal + "HRC CHW minimum mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mHeaWatChiHea_flow_min( + final min=0)=0.6 * mConWatChiHea_flow_nominal + "HRC HW minimum mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + final parameter Modelica.Units.SI.MassFlowRate mConWatChiHea_flow_nominal= + datChiHea.mCon_flow_nominal + "Design HRC CW mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpHeaWatSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) HW differential pressure setpoint" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpEvaChiHea_nominal( + final min=0, + displayUnit="Pa")=5E4 + "Design evaporator pressure drop (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpConChiHea_nominal( + final min=0, + displayUnit="Pa")=5E4 + "Design condenser pressure drop (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + + parameter Modelica.Units.SI.PressureDifference dpPumHeaWat_nominal( + final min=0, + displayUnit="Pa")=1.1 * (dpHeaWatSet_max + + dpConChiHea_nominal + max(chiHea.valCon.dpValve_nominal) + + sum(chiHea.valConSwi.dpValve_nominal)) + "Design head of HW pump(each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic datChiHea + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "HRC parameters (each unit)" + annotation ( + Dialog(group="HW loop and heat recovery chillers"), + Placement(transformation(extent={{120,340},{140,360}}))); + + final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal= + chiHea.THeaWatSup_nominal + "Design (maximum) HW supply temperature" + annotation (Dialog(group="HW loop and heat recovery chillers")); + final parameter Modelica.Units.SI.Temperature THeaWatRet_nominal= + THeaWatSup_nominal - QHeaWat_flow_nominal / mHeaWat_flow_nominal / cp_default + "Design (minimum) HW return temperature" + annotation (Dialog(group="HW loop and heat recovery chillers")); + + // TCasHeaEnt_nominal computed in second cycle of TES tank. + final parameter Modelica.Units.SI.Temperature TCasHeaEnt_nominal= + TTanSet[2, 2] + "Design evaporator entering temperature in cascading heating mode" + annotation(Evaluate=true); + // TCasCooEnt_nominal computed in Heat Rejection mode. + final parameter Modelica.Units.SI.Temperature TCasCooEnt_nominal= + TConWatCooSup_nominal + dTHexCoo_nominal + "Design condenser entering temperature in cascading cooling mode" + annotation(Evaluate=true); + final parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal= + chiHea.QHeaWat_flow_nominal + "Design heating heat flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal= + chiHea.mConWat_flow_nominal + "Design HW mass flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + + // CW loop, TES tank and heat pumps + parameter Integer nHeaPum(final min=1, start=1) + "Number of heat pumps operating at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + parameter Integer nPumConWatCon(final min=1, start=1)=max(nChi, nChiHea) + "Number of CW pumps serving condenser barrels at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + parameter Integer nPumConWatEva(final min=1, start=1)=nChiHea + "Number of CW pumps serving evaporator barrels at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + parameter Modelica.Units.SI.PressureDifference dpConWatConSet_max( + final min=0, + displayUnit="Pa")=max( + dpConChi_nominal + chi.valCon.dpValve_nominal, + dpConChiHea_nominal + max(chiHea.valCon.dpValve_nominal) + sum(chiHea.valConSwi.dpValve_nominal)) + "Design (maximum) CW condenser loop differential pressure setpoint" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.PressureDifference dpConWatEvaSet_max( + final min=0, + displayUnit="Pa")= + dpEvaChiHea_nominal + max(chiHea.valEva.dpValve_nominal) + sum(chiHea.valEvaSwi.dpValve_nominal) + "Design (maximum) CW evaporator loop differential pressure setpoint" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.PressureDifference dpPumConWatCon_nominal( + final min=0, + displayUnit="Pa")=1.1 * (dpConWatConSet_max + max(dpHexCoo_nominal, dpTan_nominal)) + "Design head of CW pump serving condenser barrels (each unit)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.PressureDifference dpPumConWatEva_nominal( + final min=0, + displayUnit="Pa")=1.1 * (dpConWatEvaSet_max + dpTan_nominal) + "Design head of CW pump serving evaporator barrels (each unit)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + final parameter Modelica.Units.SI.MassFlowRate mConWatCon_flow_nominal( + final min=0)=chi.mConWat_flow_nominal + chiHea.mConWat_flow_nominal + "Design total CW mass flow rate through condenser barrels (all units)"; + final parameter Modelica.Units.SI.MassFlowRate mConWatEva_flow_nominal( + final min=0)=chiHea.mChiWat_flow_nominal + "Design total CW mass flow rate through evaporator barrels (all units)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.Volume VTan= + -chiHea.QEvaCasHea_flow_nominal * 3 * 3600 / (max(TTanSet) - min(TTanSet)) / + cp_default / rho_default + "Tank volume" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.Length hTan = (16 * VTan / Modelica.Constants.pi)^(1/3) + "Height of tank (without insulation)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + // Default considering 1 m high thermmocline and 1 m high section below and above diffusers. + // Thermocline only useless during last tank cycle, hence the scale factor. + parameter Real fraUslTan(final unit="1", final min=0, final max=1, start=0.1) = + ((max(TTanSet[2]) - min(TTanSet)) / (max(TTanSet) - min(TTanSet)) * 1 + 1) / hTan + "Useless fraction of TES" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.Length dInsTan + "Thickness of insulation" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.ThermalConductivity kInsTan=0.04 + "Specific heat conductivity of insulation" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Integer nSegTan(min=2) = 10 + "Number of volume segments" + annotation(Dialog(group="CW loop, TES tank and heat pumps", tab="Advanced")); + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] = { + {15 + 273.15, 25 + 273.15}, + {TChiWatSup_nominal, 15 + 273.15}} + "Tank temperature setpoints: 2 cycles with 2 setpoints" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + // Default TES tank pressure drop without PSV, otherwise ~ 20E3 + parameter Modelica.Units.SI.PressureDifference dpTan_nominal=1E3 + "Design pressure drop through TES tank" + annotation (Dialog(group="CW loop, TES tank and heat pumps")); + replaceable parameter Fluid.HeatPumps.Data.EquationFitReversible.Generic datHeaPum + "Heat pump parameters (each unit)" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Placement(transformation(extent={{160,340},{180,360}}))); + + // Cooling tower loop + parameter Integer nCoo(final min=1, start=1) + "Number of cooling tower cells operating at design conditions" + annotation (Dialog(group="Cooling tower loop"), + Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mConWatCoo_flow_nominal( + final min=0)=mConWatCon_flow_nominal + "Design CT CW mass flow rate (all units)" + annotation(Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.PressureDifference dpConWatCooFri_nominal( + displayUnit="Pa", + start=1E4, + final min=0) + "Design CW flow-friction losses through tower and piping only (without elevation head or valve)" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.MassFlowRate mAirCooUni_flow_nominal( + final min=0, + start=mConWatCoo_flow_nominal / nCoo / 1.45) + "Design CT air mass flow rate (each unit)" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.Temperature TWetBulCooEnt_nominal( + final min=273.15) + "Design CT entering air wetbulb temperature" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.Temperature TConWatCooRet_nominal( + final min=273.15)=TConWatCooSup_nominal + + abs(QHexCoo_flow_nominal) / mConWatCoo_flow_nominal / cpConWatCoo_default + "Design CT CW return temperature (tower entering)" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.Temperature TConWatCooSup_nominal( + final min=273.15)=TWetBulCooEnt_nominal + 3 + "Design CT CW supply temperature (tower leaving)" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.Power PFanCoo_nominal( + final min=0, + start=340 * mConWatCoo_flow_nominal / nCoo) + "CT fan power (each unit)" + annotation (Dialog(group="Cooling tower loop")); + + parameter Integer nPumConWatCoo(final min=1, start=1)=nCoo + "Number of CW pumps serving cooling towers at design conditions" + annotation (Dialog(group="Cooling tower loop"), + Evaluate=true); + parameter Modelica.Units.SI.PressureDifference dpPumConWatCoo_nominal= + 1.1 * (dpHexCoo_nominal + dpConWatCooFri_nominal) + "Design head of CW pump serving cooling towers (each unit)" + annotation (Dialog(group="Cooling tower loop")); + + parameter Modelica.Units.SI.TemperatureDifference dTHexCoo_nominal=2 + "Design heat exchanger approach" + annotation (Dialog(group="Cooling tower loop")); + parameter Modelica.Units.SI.PressureDifference dpHexCoo_nominal=3E4 + "Design pressure drop through heat exchanger (same on both sides)" + annotation (Dialog(group="Cooling tower loop")); + + // HX sized with all HRCs in cascading cooling mode. + parameter Modelica.Units.SI.HeatFlowRate QHexCoo_flow_nominal= + -(chi.QConWat_flow_nominal + chiHea.QConCasCoo_flow_nominal) + "Design cooling heat flow rate of heat exchanger (<0)" + annotation (Dialog(group="Cooling tower loop")); + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "= true, if control signal is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered signal for actuators and movers")); + + // Outside connectors + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Coo + "Cooling enable signal" + annotation (Placement(transformation(extent={{-420,260},{-380,300}}), + iconTransformation(extent={{-380,240},{-300,320}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Hea + "Heating enable signal" + annotation (Placement(transformation(extent={{-420,240},{-380,280}}), + iconTransformation(extent={{-380,200},{-300,280}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", + displayUnit="degC") + "CHW supply temperature setpoint" + annotation (Placement(transformation(extent={{-420,200},{-380,240}}), + iconTransformation(extent={{-380,160},{-300,240}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet( + final unit="Pa", + final min=0) + "CHW differential pressure setpoint (for local dp sensor)" + annotation (Placement(transformation(extent={{-420,140},{-380,180}}), + iconTransformation(extent={{-380,80},{-300,160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSupSet( + final unit="K", + displayUnit="degC") + "HW supply temperature setpoint" + annotation (Placement(transformation(extent={{-420,180},{-380,220}}), + iconTransformation(extent={{-380,120},{-300,200}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHeaWatSet( + final unit="Pa", + final min=0) + "HW differential pressure setpoint (for local dp sensor)" + annotation (Placement(transformation(extent={{-420,120},{-380,160}}), + iconTransformation(extent={{-380,40},{-300,120}}))); + + // Components - CHW loop and cooling-only chillers + Subsystems.ChillerGroup chi( + redeclare final package Medium1=Medium, + redeclare final package Medium2=Medium, + final dat=datChi, + final nUni=nChi, + final dpEva_nominal=dpEvaChi_nominal, + final dpCon_nominal=dpConChi_nominal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal1=allowFlowReversal, + final allowFlowReversal2=allowFlowReversal) + "Cooling-only chillers" + annotation (Placement(transformation(extent={{50,76},{70,96}}))); + Subsystems.MultiplePumpsSpeed pumChiWat( + redeclare final package Medium=Medium, + final nPum=nPumChiWat, + final have_var=true, + final have_valve=true, + final mPum_flow_nominal=mChiWat_flow_nominal / nPumChiWat, + final dpPum_nominal=dpPumChiWat_nominal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "Primary CHW pumps" + annotation (Placement(transformation(extent={{170,190},{190,210}}))); + Fluid.FixedResistances.Junction junChiWatSup( + redeclare final package Medium = Medium, + final m_flow_nominal=mChiWat_flow_nominal * {1, -1, -1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + "Fluid junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={240,200}))); + Fluid.FixedResistances.Junction junChiWatRet( + redeclare final package Medium = Medium, + final m_flow_nominal=mChiWat_flow_nominal * {1, -1, 1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal + then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) + "Fluid junction" + annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={240,80}))); + Fluid.FixedResistances.Junction junChiWatChiHeaRet( + redeclare final package Medium = Medium, + final m_flow_nominal=mChiWat_flow_nominal * {1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={120,80}))); + Fluid.FixedResistances.Junction junChiWatChiHeaSup( + redeclare final package Medium = Medium, + final m_flow_nominal=mChiWat_flow_nominal*{1,-1,1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={140,200}))); + // PICV model sized at design flow (instead of minimum flow) for convenience. + Fluid.Actuators.Valves.TwoWayLinear valChiWatMinByp( + redeclare final package Medium=Medium, + final m_flow_nominal=max(mChiWatChi_flow_min, mChiWatChiHea_flow_min), + from_dp=true, + linearized=true, + dpValve_nominal=1E3, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "CHW minimum flow bypass valve" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,140}))); + Fluid.Sensors.RelativePressure dpChiWat( + redeclare final package Medium=Medium) + "CHW differential pressure (local sensor hardwired to plant controller)" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={300,140}))); + Fluid.Sensors.TemperatureTwoPort TChiWatPriRet( + redeclare final package Medium=Medium, + final m_flow_nominal=mChiWat_flow_nominal, + final allowFlowReversal=allowFlowReversal) "Primary CHW return temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={220,80}))); + Fluid.Sensors.MassFlowRate mChiWatPri_flow( + redeclare final package Medium =Medium, + final allowFlowReversal=allowFlowReversal) "Primary CHW mass flow rate" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={180,80}))); + Fluid.Sensors.TemperatureTwoPort TChiWatSup( + redeclare final package Medium = Medium, + final m_flow_nominal=mChiWat_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "CHW supply temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={210,200}))); + + // Components - HW loop and heat recovery chillers + Subsystems.ChillerHeatRecoveryGroup chiHea( + redeclare final package Medium = Medium, + final dat=datChiHea, + final nUni=nChiHea, + final TCasCooEnt_nominal=TCasCooEnt_nominal, + final TCasHeaEnt_nominal=TCasHeaEnt_nominal, + final dpEva_nominal=dpEvaChiHea_nominal, + final dpCon_nominal=dpConChiHea_nominal, + final allowFlowReversal=allowFlowReversal, + final use_inputFilter=use_inputFilter, + final energyDynamics=energyDynamics) + "Heat recovery chillers" + annotation (Placement(transformation(extent={{50,-158},{70,-138}}))); + + Subsystems.MultiplePumpsSpeed pumHeaWat( + redeclare final package Medium=Medium, + final nPum=nPumHeaWat, + final have_var=true, + final have_valve=true, + final mPum_flow_nominal=mHeaWat_flow_nominal/nPumHeaWat, + final dpPum_nominal=dpPumHeaWat_nominal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "Primary HW pumps" + annotation (Placement(transformation(extent={{170,-150},{190,-130}}))); + Fluid.FixedResistances.Junction junHeaWatSup( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal * {1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={240,-140}))); + Fluid.FixedResistances.Junction junHeaWatRet( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal * {1,-1,1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={240,-260}))); + // PICV model sized at design flow (instead of minimum flow) for convenience. + Fluid.Actuators.Valves.TwoWayLinear valHeaWatMinByp( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWatChiHea_flow_min, + from_dp=true, + linearized=true, + dpValve_nominal=1E3, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) "HW minimum flow bypass valve" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={240,-200}))); + Fluid.Sensors.RelativePressure dpHeaWat( + redeclare final package Medium =Medium) + "HW differential pressure (local sensor hardwired to plant controller)" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={300,-200}))); + Fluid.Sensors.TemperatureTwoPort THeaWatPriRet( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Primary HW return temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={200,-260}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup( + redeclare final package Medium = Medium, + final m_flow_nominal=mHeaWat_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "HW supply temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={210,-140}))); + Fluid.Sensors.MassFlowRate mHeaWatPri_flow( + redeclare final package Medium =Medium, + final allowFlowReversal=allowFlowReversal) + "Primary HW mass flow rate" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={180,-260}))); + + // Components - CW loop and heat pumps + Subsystems.MultiplePumpsSpeed pumConWatCon( + redeclare final package Medium = Medium, + final nPum=nPumConWatCon, + final have_var=true, + final have_valve=true, + final mPum_flow_nominal=mConWatCon_flow_nominal / nPumConWatCon, + final dpPum_nominal=dpPumConWatCon_nominal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "CW pumps serving condenser barrels" + annotation (Placement(transformation(extent={{-90,-350},{-70,-330}}))); + Subsystems.MultiplePumpsSpeed pumConWatEva( + redeclare final package Medium = Medium, + final nPum=nPumConWatEva, + final have_var=true, + final have_valve=true, + final mPum_flow_nominal=mConWatEva_flow_nominal / nPumConWatEva, + final dpPum_nominal=dpPumConWatEva_nominal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "CW pumps serving evaporator barrels" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Fluid.FixedResistances.Junction junConWatEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={20,-340}))); + Fluid.Storage.Stratified tan( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final VTan=VTan, + final hTan=hTan, + final dIns=dInsTan, + final kIns=kInsTan, + final nSeg=nSegTan) + "TES tank" + annotation (Placement(transformation(extent={{-130,-190},{-110,-170}}))); + Fluid.Sources.Boundary_pT bouConWat( + redeclare final package Medium = Medium, + final p=hTan * rho_default * Modelica.Constants.g_n, + final nPorts=1) + "CW pressure boundary condition prescribed by tank operating level" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-110,-210}))); + Fluid.FixedResistances.Junction junConWatTanEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=Modelica.Fluid.Types.PortFlowDirection.Bidirectional) + "Fluid junction" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-160,-40}))); + Fluid.FixedResistances.Junction junConWatLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={80,40}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TTan[nSegTan]( + T(each displayUnit="degC")) + "TES tank temperature sensor gateway" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-120,-140}))); + HeatTransfer.Sources.PrescribedTemperature out "Outdoor temperature" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-100,-140}))); + Fluid.FixedResistances.Junction junConWatHeaPumEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + "Fluid junction" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={-80,40}))); + Fluid.FixedResistances.Junction junConWatHeaPumLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) + "Fluid junction" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={-120,40}))); + Subsystems.HeatPumpGroup heaPum( + redeclare final package Medium = Medium, + redeclare final package MediumAir = MediumAir, + final nUni=nHeaPum, + final dat=datHeaPum, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "Heat pumps" + annotation (Placement(transformation(extent={{-90,150},{-110,170}}))); + Fluid.FixedResistances.Junction junConWatTanLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal*{1,-1,1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-120,-280}))); + Fluid.HeatExchangers.PlateHeatExchangerEffectivenessNTU hexCoo( + redeclare final package Medium1=MediumConWatCoo, + redeclare final package Medium2=Medium, + final m1_flow_nominal=mConWatCoo_flow_nominal, + final m2_flow_nominal=mConWatCon_flow_nominal, + final dp1_nominal=0, + final dp2_nominal=0, + final Q_flow_nominal=QHexCoo_flow_nominal, + final T_a1_nominal=TConWatCooSup_nominal, + final T_a2_nominal=TConWatCooRet_nominal + dTHexCoo_nominal, + final allowFlowReversal1=allowFlowReversal, + final allowFlowReversal2=allowFlowReversal, + final configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow) + "Heat exchanger with cooling tower circuit" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-206,-170}))); + Subsystems.CoolingTowerGroup coo( + redeclare final package Medium=Medium, + final nUni=nCoo, + final mConWatUni_flow_nominal=mConWatCoo_flow_nominal / nCoo, + final dpConWatFriUni_nominal=dpConWatCooFri_nominal + dpHexCoo_nominal, + final mAirUni_flow_nominal=mAirCooUni_flow_nominal, + final TWetBulEnt_nominal=TWetBulCooEnt_nominal, + final TConWatRet_nominal=TConWatCooRet_nominal, + final TConWatSup_nominal=TConWatCooSup_nominal, + final PFanUni_nominal=PFanCoo_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) + "Cooling towers" + annotation (Placement(transformation(extent={{-250,-90},{-270,-70}}))); + Fluid.Actuators.Valves.ThreeWayLinear valBypTan( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final energyDynamics=energyDynamics, + dpValve_nominal=1E3, + dpFixed_nominal={dpTan_nominal,dpHexCoo_nominal}) + "TES tank bypass valve" + annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-160,-100}))); + Fluid.Sources.Boundary_pT bouConWatCoo( + redeclare final package Medium = Medium, + final p=130000, + nPorts=1) + "CW pressure boundary condition prescribed by CT elevation head" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-300,-250}))); + Subsystems.MultiplePumpsSpeed pumConWatCoo( + redeclare final package Medium = Medium, + final nPum=nPumConWatCoo, + final have_var=true, + have_valve=false, + final mPum_flow_nominal=mConWatCoo_flow_nominal / nPumConWatCoo, + final dpPum_nominal=dpPumConWatCoo_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal) "Cooling tower pumps" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-250,-220}))); + Fluid.Sensors.TemperatureTwoPort TConWatEvaEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatEva_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "HRC evaporator entering CW temperature" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, rotation=-90, + origin={80,-60}))); + + // Controls + Buildings.Experimental.DHC.Plants.Combined.Controls.Controller ctl( + final nChi=nChi, + final nPumChiWat=nPumChiWat, + final QHeaPum_flow_nominal=datHeaPum.hea.Q_flow*nHeaPum, + final dTLifChi_min=dTLifChi_min, + final dTLifChi_nominal=dTLifChi_nominal, + final nChiHea=nChiHea, + final nPumHeaWat=nPumHeaWat, + final nHeaPum=nHeaPum, + final nPumConWatCon=nPumConWatCon, + final nPumConWatEva=nPumConWatEva, + final TTanSet=TTanSet, + final nCoo=nCoo, + final nPumConWatCoo=nPumConWatCoo, + final THeaWatSup_nominal=THeaWatSup_nominal, + final TChiWatSup_nominal=TChiWatSup_nominal, + final mChiWat_flow_nominal=mChiWat_flow_nominal, + final mHeaWat_flow_nominal=mHeaWat_flow_nominal, + final mConWatCon_flow_nominal=mConWatCon_flow_nominal, + final mConWatEva_flow_nominal=mConWatEva_flow_nominal, + final mChiWatChi_flow_nominal=mChiWatChi_flow_nominal, + final mChiWatChi_flow_min=mChiWatChi_flow_min, + final mConWatChi_flow_nominal=mConWatChi_flow_nominal, + final mChiWatChiHea_flow_nominal=mChiWatChiHea_flow_nominal, + final mChiWatChiHea_flow_min=mChiWatChiHea_flow_min, + final mConWatChiHea_flow_nominal=mConWatChiHea_flow_nominal, + final mHeaWatChiHea_flow_min=mHeaWatChiHea_flow_min, + final dpChiWatSet_max=dpChiWatSet_max, + final dpHeaWatSet_max=dpHeaWatSet_max, + final dpConWatConSet_max=dpConWatConSet_max, + final dpConWatEvaSet_max=dpConWatEvaSet_max, + final dpEvaChi_nominal=dpEvaChi_nominal, + final dpValEvaChi_nominal=chi.valEva.dpValve_nominal, + final dpEvaChiHea_nominal=dpEvaChiHea_nominal, + final dpValEvaChiHea_nominal=max(chiHea.valEva.dpValve_nominal), + final QChiWatChi_flow_nominal=chi.QChiWat_flow_nominal, + final QChiWatCasCoo_flow_nominal=chiHea.QChiWatCasCoo_flow_nominal, + final QChiWatCasCoo_flow_nominal_approx=chiHea.QChiWat_flow_nominal, + final QHeaWat_flow_nominal=QHeaWat_flow_nominal, + final cp_default=cp_default, + final fraUslTan=fraUslTan, + final dTHexCoo_nominal=dTHexCoo_nominal, + final nTTan=nSegTan) + "Controller" + annotation (Placement(transformation(extent={{-342,246},{-298,322}}))); + + // Miscellaneous + Modelica.Blocks.Sources.RealExpression sumPHea( + final y=heaPum.P + sum({ + if ctl.y1CooChiHea[i] or ctl.y1HeaCooChiHea[i] then 0 else chiHea.chi[i].P + for i in 1:nChiHea})) + "Sum up power drawn from all subsystems" + annotation (Placement(transformation(extent={{340,270},{360,290}}))); + Modelica.Blocks.Sources.RealExpression sumPCoo( + final y=chi.P + sum({ + if ctl.y1CooChiHea[i] or ctl.y1HeaCooChiHea[i] then chiHea.chi[i].P else 0 + for i in 1:nChiHea})) + "Sum up power drawn from all subsystems" + annotation (Placement(transformation(extent={{340,230},{360,250}}))); + Modelica.Blocks.Sources.RealExpression sumPFan(y=coo.P) + "Sum up power drawn from all subsystems" + annotation (Placement(transformation(extent={{340,190},{360,210}}))); + Modelica.Blocks.Sources.RealExpression sumPPum( + final y=pumChiWat.P + pumHeaWat.P + pumConWatCon.P + pumConWatEva.P + pumConWatCoo.P + heaPum.PPum) + "Sum up power drawn from all subsystems" + annotation (Placement(transformation(extent={{340,150},{360,170}}))); + + Fluid.Sensors.RelativePressure dpConWatEva(redeclare final package Medium = + Medium) "CW evaporator loop differential pressure " annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={0,-70}))); + Fluid.Sensors.RelativePressure dpConWatCon(redeclare final package Medium = + Medium) "CW condenser loop differential pressure " annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-20,-310}))); + Fluid.Sensors.MassFlowRate mConWatEva_flow(redeclare final package Medium = + Medium, final allowFlowReversal=allowFlowReversal) + "CW evaporator loop mass flow rate" annotation (Placement(transformation( + extent={{40,-50},{60,-30}}, + rotation=0))); + Fluid.Sensors.MassFlowRate mConWatCon_flow(redeclare final package Medium = + Medium, final allowFlowReversal=allowFlowReversal) + "CW condenser loop mass flow rate" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-120,-320}))); + Fluid.Sensors.MassFlowRate mConWatOutTan_flow(redeclare final package Medium = + Medium, final allowFlowReversal=allowFlowReversal) + "Mass flow rate out of lower port of TES tank (>0 when charging)" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-80,-240}))); + Fluid.Sensors.TemperatureTwoPort TConWatConChiLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Chiller and HRC leaving CW temperature" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-50,40}))); + Fluid.Sensors.TemperatureTwoPort TConWatConChiEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Chiller and HRC entering CW temperature" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,-340}))); + Fluid.Sensors.TemperatureTwoPort TConWatCooSup( + redeclare final package Medium = MediumConWatCoo, + final m_flow_nominal=mConWatCoo_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Cooling tower loop CW supply temperature" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=-90, + origin={-212,-204}))); + Fluid.Sensors.TemperatureTwoPort TConWatCooRet( + redeclare final package Medium = MediumConWatCoo, + final m_flow_nominal=mConWatCoo_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Cooling tower loop CW return temperature" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=-90, + origin={-212,-136}))); + Fluid.Sensors.TemperatureTwoPort TConWatHexCooEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) "HX entering CW temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-200,-140}))); + Fluid.Sensors.TemperatureTwoPort TConWatHexCooLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) "HX leaving CW temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-200,-200}))); + Fluid.Actuators.Valves.ThreeWayLinear valConWatEvaMix( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatEva_flow_nominal, + final energyDynamics=energyDynamics, + dpValve_nominal=1E3, + final dpFixed_nominal=fill(0, 2)) "HRC evaporator CW mixing valve" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-120,-40}))); + Fluid.FixedResistances.Junction junConWatEvaLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatEva_flow_nominal*{1,-1,-1}, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + "Fluid junction" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=0, + origin={0,-146}))); + Fluid.Sensors.TemperatureTwoPort TConWatConRet( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) + "Condenser loop CW return temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-160,20}))); + Fluid.Sensors.TemperatureTwoPort TConWatHeaPumEnt( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) "HP entering CW temperature" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-80,90}))); + Fluid.Sensors.TemperatureTwoPort TConWatHeaPumLvg( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + final allowFlowReversal=allowFlowReversal) "HP leaving CW temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-120,90}))); +protected + final parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( + T=Medium.T_default, + p=Medium.p_default, + X=Medium.X_default) + "Medium state at default properties"; + final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= + Medium.specificHeatCapacityCp(sta_default) + "Specific heat capacity of the fluid"; + final parameter Modelica.Units.SI.Density rho_default= + Medium.density(sta_default) + "Density of the fluid"; + final parameter MediumConWatCoo.ThermodynamicState staConWatCoo_default= + MediumConWatCoo.setState_pTX( + T=MediumConWatCoo.T_default, + p=MediumConWatCoo.p_default, + X=MediumConWatCoo.X_default) + "Medium state at default properties"; + final parameter Modelica.Units.SI.SpecificHeatCapacity cpConWatCoo_default= + MediumConWatCoo.specificHeatCapacityCp(staConWatCoo_default) + "Specific heat capacity of the fluid"; +public + Fluid.Sensors.MassFlowRate mConWatHexCoo_flow(redeclare final package Medium = + Medium, final allowFlowReversal=allowFlowReversal) + "CW mass flow rate through secondary (plant) side of HX" annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-200,-240}))); + Fluid.Actuators.Valves.TwoWayLinear valConWatByp( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatCon_flow_nominal, + from_dp=true, + linearized=true, + dpValve_nominal=1E3, + final use_inputFilter=use_inputFilter, + final allowFlowReversal=allowFlowReversal) + "CW chiller bypass valve" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,-120}))); +equation + connect(junChiWatSup.port_2, port_bSerCoo) + annotation (Line(points={{250,200},{320,200},{320,-40},{380,-40}}, + color={0,127,255})); + connect(junChiWatSup.port_3, valChiWatMinByp.port_a) + annotation (Line(points={{240,190},{240,150}}, color={0,127,255})); + connect(valChiWatMinByp.port_b, junChiWatRet.port_3) + annotation (Line(points={{240,130},{240,90}}, color={0,127,255})); + connect(junChiWatSup.port_2, dpChiWat.port_a) annotation (Line(points={{250,200}, + {300,200},{300,150}}, color={0,127,255})); + connect(TChiWatPriRet.port_a, junChiWatRet.port_2) + annotation (Line(points={{230,80},{230,80}}, color={0,127,255})); + connect(port_aSerCoo, junChiWatRet.port_1) annotation (Line(points={{-380,-40}, + {-340,-40},{-340,8},{300,8},{300,80},{250,80}}, + color={0,127,255})); + connect(dpChiWat.port_b, junChiWatRet.port_1) + annotation (Line(points={{300,130},{300,80},{250,80}}, color={0,127,255})); + connect(junHeaWatSup.port_3, valHeaWatMinByp.port_a) + annotation (Line(points={{240,-150},{240,-190}},color={0,127,255})); + connect(valHeaWatMinByp.port_b, junHeaWatRet.port_3) + annotation (Line(points={{240,-210},{240,-250}}, color={0,127,255})); + connect(THeaWatPriRet.port_a, junHeaWatRet.port_2) + annotation (Line(points={{210,-260},{230,-260}}, color={0,127,255})); + connect(dpHeaWat.port_b, junHeaWatRet.port_1) annotation (Line(points={{300, + -210},{300,-260},{250,-260}}, + color={0,127,255})); + connect(junHeaWatSup.port_2, port_bSerHea) annotation (Line(points={{250,-140}, + {340,-140},{340,0},{380,0}},color={0,127,255})); + connect(ctl.y1Chi, chi.y1) annotation (Line(points={{-296,313},{28,313},{28, + 95},{48,95}}, color={255,0,255})); + connect(ctl.yValConChi, chi.yValCon) annotation (Line(points={{-296,309},{30, + 309},{30,100},{54,100},{54,98}}, color={0,0,127})); + connect(TChiWatSupSet, chi.TSet) annotation (Line(points={{-400,220},{40,220}, + {40,77},{48,77}}, color={0,0,127})); + connect(ctl.y1PumChiWat, pumChiWat.y1) annotation (Line(points={{-296,307},{ + 166,307},{166,208},{168,208}}, + color={255,0,255})); + connect(ctl.y1PumHeaWat, pumHeaWat.y1) annotation (Line(points={{-296,282},{ + 160,282},{160,-132},{168,-132}}, + color={255,0,255})); + connect(ctl.yValChiWatMinByp, valChiWatMinByp.y) annotation (Line(points={{-296, + 303},{40,303},{40,180},{260,180},{260,140},{252,140}}, + color={0,0,127})); + connect(ctl.yValHeaWatMinByp, valHeaWatMinByp.y) annotation (Line(points={{-296, + 278},{264,278},{264,-200},{252,-200}}, color={0,0,127})); + connect(THeaWatPriRet.port_b, mHeaWatPri_flow.port_a) + annotation (Line(points={{190,-260},{190,-260}}, color={0,127,255})); + connect(TChiWatPriRet.port_b, mChiWatPri_flow.port_a) + annotation (Line(points={{210,80},{190,80}}, color={0,127,255})); + connect(ctl.y1PumConWatEva, pumConWatEva.y1) annotation (Line(points={{-296, + 271},{38,271},{38,-26},{-82,-26},{-82,-32}}, + color={255,0,255})); + connect(ctl.yPumConWatEva, pumConWatEva.y) annotation (Line(points={{-296,269}, + {34,269},{34,-24},{-84,-24},{-84,-36},{-82,-36}}, + color={0,0,127})); + connect(sumPHea.y, PHea) + annotation (Line(points={{361,280},{400,280}}, color={0,0,127})); + connect(sumPCoo.y, PCoo) annotation (Line(points={{361,240},{400,240}}, + color={0,0,127})); + connect(sumPFan.y, PFan) + annotation (Line(points={{361,200},{400,200}}, color={0,0,127})); + connect(sumPPum.y, PPum) annotation (Line(points={{361,160},{400,160}}, + color={0,0,127})); + connect(junHeaWatSup.port_2, dpHeaWat.port_a) annotation (Line(points={{250, + -140},{300,-140},{300,-190}}, + color={0,127,255})); + connect(pumChiWat.port_b, TChiWatSup.port_a) + annotation (Line(points={{190,200},{200,200}}, color={0,127,255})); + connect(TChiWatSup.port_b, junChiWatSup.port_1) + annotation (Line(points={{220,200},{230,200}}, color={0,127,255})); + connect(tan.heaPorVol, TTan.port) + annotation (Line(points={{-120,-180},{-120,-150}},color={191,0,0})); + connect(out.port, tan.heaPorTop) annotation (Line(points={{-100,-150},{-100, + -160},{-118,-160},{-118,-172.6}}, + color={191,0,0})); + connect(out.port, tan.heaPorSid) annotation (Line(points={{-100,-150},{-100, + -160},{-114.4,-160},{-114.4,-180}}, + color={191,0,0})); + connect(out.port, tan.heaPorBot) annotation (Line(points={{-100,-150},{-100, + -187.4},{-118,-187.4}}, color={191,0,0})); + connect(pumHeaWat.port_b, THeaWatSup.port_a) + annotation (Line(points={{190,-140},{200,-140}}, + color={0,127,255})); + connect(THeaWatSup.port_b, junHeaWatSup.port_1) + annotation (Line(points={{220,-140},{230,-140}}, + color={0,127,255})); + connect(junConWatHeaPumEnt.port_2, junConWatHeaPumLvg.port_1) + annotation (Line(points={{-90,40},{-110,40}}, color={0,127,255})); + connect(weaBus.TDryBul, out.T) annotation (Line( + points={{0,380},{0,120},{-100,120},{-100,-128}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(weaBus, heaPum.weaBus) annotation (Line( + points={{0,380},{0,180},{-100,180},{-100,170}}, + color={255,204,51}, + thickness=0.5)); + connect(ctl.y1HeaPum, heaPum.y1) annotation (Line(points={{-296,266},{-42,266}, + {-42,166},{-88,166}}, color={255,0,255})); + connect(ctl.THeaPumSet, heaPum.TSet) annotation (Line(points={{-296,264},{-44, + 264},{-44,154},{-88,154}}, color={0,0,127})); + connect(bouConWat.ports[1], tan.port_b) + annotation (Line(points={{-110,-200},{-110,-180}}, color={0,127,255})); + connect(ctl.yPumChiWat, pumChiWat.y) annotation (Line(points={{-296,305},{162, + 305},{162,204},{168,204}}, color={0,0,127})); + connect(ctl.yPumHeaWat, pumHeaWat.y) annotation (Line(points={{-296,280},{158, + 280},{158,-136},{168,-136}}, color={0,0,127})); + connect(mChiWatPri_flow.port_b,junChiWatChiHeaRet. port_1) + annotation (Line(points={{170,80},{130,80}}, color={0,127,255})); + connect(junChiWatChiHeaRet.port_2, chi.port_a2) + annotation (Line(points={{110,80},{70,80}}, color={0,127,255})); + connect(port_aSerHea, junHeaWatRet.port_1) annotation (Line(points={{-380,0}, + {310,0},{310,-260},{250,-260}}, color={0,127,255})); + connect(junConWatTanEnt.port_2, valBypTan.port_2) + annotation (Line(points={{-160,-50},{-160,-90}}, color={0,127,255})); + connect(valBypTan.port_1, tan.port_a) annotation (Line(points={{-160,-110},{ + -160,-180},{-130,-180}}, + color={0,127,255})); + connect(ctl.yValBypTan, valBypTan.y) annotation (Line(points={{-296,252},{ + -180,252},{-180,-86},{-146,-86},{-146,-100},{-148,-100}}, + color={0,0,127})); + connect(bouConWatCoo.ports[1], pumConWatCoo.port_a) + annotation (Line(points={{-300,-240},{-300,-220},{-260,-220}}, + color={0,127,255})); + connect(coo.port_b, pumConWatCoo.port_a) annotation (Line(points={{-270,-80}, + {-300,-80},{-300,-220},{-260,-220}}, + color={0,127,255})); + connect(weaBus, coo.weaBus) annotation (Line( + points={{0,380},{0,120},{-260,120},{-260,-70}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(ctl.yCoo, coo.y) annotation (Line(points={{-296,255},{-222,255},{-222, + -86},{-248,-86}}, color={0,0,127})); + connect(ctl.y1PumConWatCoo, pumConWatCoo.y1) annotation (Line(points={{-296, + 261},{-278,261},{-278,-212},{-262,-212}}, + color={255,0,255})); + connect(chi.port_b1, junConWatLvg.port_3) + annotation (Line(points={{70,92},{80,92},{80,50}}, color={0,127,255})); + connect(chiHea.port_b1, pumHeaWat.port_a) + annotation (Line(points={{70,-140},{170,-140}}, + color={0,127,255})); + connect(mHeaWatPri_flow.port_b, chiHea.port_a1) annotation (Line(points={{170, + -260},{44,-260},{44,-140},{50,-140}},color={0,127,255})); + connect(junChiWatChiHeaRet.port_3, chiHea.port_a4) annotation (Line(points={{120,70}, + {120,-156},{70,-156}}, color={0,127,255})); + connect(junConWatEnt.port_2, chiHea.port_a3) annotation (Line(points={{30,-340}, + {40,-340},{40,-151.2},{50,-151.2}},color={0,127,255})); + connect(chiHea.port_b3, junConWatLvg.port_1) annotation (Line(points={{70, + -151.1},{100,-151.1},{100,40},{90,40}}, + color={0,127,255})); + connect(ctl.yValEvaChiHea, chiHea.yValEva) annotation (Line(points={{-296,292}, + {32,292},{32,-162},{52,-162},{52,-160}}, color={0,0,127})); + connect(ctl.y1CooChiHea, chiHea.y1Coo) annotation (Line(points={{-296,298},{ + 36,298},{36,-146},{48,-146},{48,-148}}, color={255,0,255})); + connect(ctl.y1ChiHea, chiHea.y1) annotation (Line(points={{-296,300},{38,300}, + {38,-142},{48,-142}}, color={255,0,255})); + connect(ctl.yValConChiHea, chiHea.yValCon) annotation (Line(points={{-296,290}, + {32,290},{32,-122},{52,-122},{52,-136}}, color={0,0,127})); + connect(ctl.TChiHeaSet, chiHea.TSet) annotation (Line(points={{-296,294},{30, + 294},{30,-154},{48,-154}}, color={0,0,127})); + connect(ctl.yValEvaChi, chi.yValEva) annotation (Line(points={{-296,311},{32, + 311},{32,72},{54.2,72},{54.2,74}}, color={0,0,127})); + connect(junChiWatChiHeaSup.port_2, pumChiWat.port_a) + annotation (Line(points={{150,200},{170,200}},color={0,127,255})); + connect(chi.port_b2, junChiWatChiHeaSup.port_1) annotation (Line(points={{50,80}, + {44,80},{44,200},{130,200}}, color={0,127,255})); + connect(chiHea.port_b4, junChiWatChiHeaSup.port_3) annotation (Line(points={{50, + -156.5},{50,-156},{48,-156},{48,-170},{140,-170},{140,190}}, + color={0,127,255})); + connect(TConWatEvaEnt.port_b, chiHea.port_a2) annotation (Line(points={{80,-70}, + {80,-145},{70,-145}}, color={0,127,255})); + connect(TChiWatSupSet, ctl.TChiWatSupSet) annotation (Line(points={{-400,220}, + {-356,220},{-356,316},{-344,316}}, color={0,0,127})); + connect(dpChiWatSet, ctl.dpChiWatSet) annotation (Line(points={{-400,160},{ + -360,160},{-360,312},{-344,312}}, color={0,0,127})); + connect(THeaWatSupSet, ctl.THeaWatSupSet) annotation (Line(points={{-400,200}, + {-360,200},{-360,314},{-344,314}}, color={0,0,127})); + connect(dpHeaWatSet, ctl.dpHeaWatSet) annotation (Line(points={{-400,140},{ + -356,140},{-356,310},{-344,310}}, color={0,0,127})); + connect(u1Coo, ctl.u1Coo) annotation (Line(points={{-400,280},{-372,280},{ + -372,320},{-344,320}}, color={255,0,255})); + connect(u1Hea, ctl.u1Hea) annotation (Line(points={{-400,260},{-362,260},{ + -362,318},{-344,318}}, color={255,0,255})); + connect(mChiWatPri_flow.m_flow, ctl.mChiWatPri_flow) annotation (Line(points={{180,91}, + {180,132},{-354,132},{-354,266},{-344,266}}, color={0,0,127})); + connect(dpChiWat.p_rel, ctl.dpChiWat) annotation (Line(points={{291,140},{280, + 140},{280,124},{-372,124},{-372,254},{-344,254}}, color={0,0,127})); + connect(mHeaWatPri_flow.m_flow, ctl.mHeaWatPri_flow) annotation (Line(points={{180, + -271},{180,-294},{-366,-294},{-366,264},{-344,264}}, color={0, + 0,127})); + connect(dpHeaWat.p_rel, ctl.dpHeaWat) annotation (Line(points={{291,-200},{ + 280,-200},{280,62},{-366,62},{-366,252},{-344,252}}, color={0,0,127})); + connect(pumConWatEva.port_b, dpConWatEva.port_a) annotation (Line(points={{-60,-40}, + {1.77636e-15,-40},{1.77636e-15,-60}}, + color={0,127,255})); + connect(pumConWatEva.port_b, mConWatEva_flow.port_a) + annotation (Line(points={{-60,-40},{40,-40}}, color={0,127,255})); + connect(mConWatEva_flow.port_b, TConWatEvaEnt.port_a) + annotation (Line(points={{60,-40},{80,-40},{80,-50}}, color={0,127,255})); + connect(junConWatTanLvg.port_2, mConWatCon_flow.port_a) + annotation (Line(points={{-120,-290},{-120,-310}}, color={0,127,255})); + connect(mConWatCon_flow.port_b, pumConWatCon.port_a) annotation (Line(points={{-120, + -330},{-120,-340},{-90,-340}}, color={0,127,255})); + connect(mConWatCon_flow.m_flow, ctl.mConWatCon_flow) annotation (Line(points={{-131, + -320},{-360,-320},{-360,262},{-344,262}}, color={0,0,127})); + connect(mConWatEva_flow.m_flow, ctl.mConWatEva_flow) annotation (Line(points={{50,-29}, + {50,66},{-364,66},{-364,260},{-344,260}}, color={0,0,127})); + connect(dpConWatEva.p_rel, ctl.dpConWatEva) annotation (Line(points={{9,-70}, + {22,-70},{22,64},{-352,64},{-352,248},{-344,248}}, color={0, + 0,127})); + connect(dpConWatCon.p_rel, ctl.dpConWatCon) annotation (Line(points={{-29, + -310},{-368,-310},{-368,250},{-344,250}}, + color={0,0,127})); + connect(TChiWatPriRet.T, ctl.TChiWatPriRet) annotation (Line(points={{220,91}, + {220,130},{-348,130},{-348,306},{-344,306}}, color={0,0,127})); + connect(THeaWatPriRet.T, ctl.THeaWatPriRet) annotation (Line(points={{200, + -249},{200,64},{-368,64},{-368,290},{-344,290}}, + color={0,0,127})); + connect(TTan.T, ctl.TTan) annotation (Line(points={{-120,-129},{-120,-120},{ + -374,-120},{-374,288},{-344,288}}, color={0,0,127})); + connect(tan.port_b, mConWatOutTan_flow.port_a) annotation (Line(points={{-110, + -180},{-80,-180},{-80,-230}}, color={0,127,255})); + connect(mConWatHexCoo_flow.m_flow, ctl.mConWatHexCoo_flow) annotation (Line( + points={{-211,-240},{-230,-240},{-230,-202},{-358,-202},{-358,258},{ + -344,258}}, + color={0,0,127})); + connect(mConWatOutTan_flow.m_flow, ctl.mConWatOutTan_flow) annotation (Line( + points={{-91,-240},{-100,-240},{-100,-298},{-362,-298},{-362,-74},{ + -349.818,-74},{-349.818,256},{-344,256}}, color={0,0,127})); + connect(junConWatEnt.port_3, chi.port_a1) annotation (Line(points={{20,-330}, + {20,92},{50,92}}, color={0,127,255})); + connect(chi.mCon_flow, ctl.mConChi_flow) annotation (Line(points={{68,98},{68, + 124},{-344,124},{-344,272}}, color={0,0,127})); + connect(chi.mEva_flow, ctl.mEvaChi_flow) annotation (Line(points={{68,74},{68, + 68},{-346,68},{-346,274},{-344,274}}, color={0,0,127})); + connect(chiHea.mCon_flow, ctl.mConChiHea_flow) annotation (Line(points={{69,-136}, + {69,54},{-366,54},{-366,268},{-344,268}}, color={0, + 0,127})); + connect(chiHea.mEva_flow, ctl.mEvaChiHea_flow) annotation (Line(points={{68,-160}, + {68,-168},{24,-168},{24,52},{-352,52},{-352,270},{-344,270}}, + color={0,0,127})); + connect(ctl.yValConSwiChiHea, chiHea.yValConSwi) annotation (Line(points={{-296, + 286},{28,286},{28,-120},{54,-120},{54,-136}}, color={0,0,127})); + connect(ctl.yValEvaSwiHea, chiHea.yValEvaSwi) annotation (Line(points={{-296, + 288},{30,288},{30,-164},{54,-164},{54,-160}}, + color={0,0,127})); + connect(TChiWatSup.T, ctl.TChiWatSup) annotation (Line(points={{210,211},{210, + 218},{-346,218},{-346,308},{-344,308}}, color={0,0,127})); + connect(chiHea.TEvaLvg, ctl.TEvaLvgChiHea) annotation (Line(points={{66,-160}, + {66,-166},{26,-166},{26,52},{-372,52},{-372,296},{-344,296}}, + color={0,0,127})); + connect(junConWatLvg.port_2, TConWatConChiLvg.port_a) + annotation (Line(points={{70,40},{-40,40}}, color={0,127,255})); + connect(TConWatConChiLvg.port_b, junConWatHeaPumEnt.port_1) + annotation (Line(points={{-60,40},{-70,40}}, color={0,127,255})); + connect(THeaWatSup.T, ctl.THeaWatSup) annotation (Line(points={{210,-129},{ + 210,128},{-346,128},{-346,292},{-344,292}}, color={0,0,127})); + connect(TConWatConChiEnt.port_b, junConWatEnt.port_1) + annotation (Line(points={{10,-340},{10,-340}}, color={0,127,255})); + connect(pumConWatCoo.port_b, TConWatCooSup.port_a) annotation (Line(points={{-240, + -220},{-212,-220},{-212,-214}}, color={0,127,255})); + connect(TConWatCooSup.port_b, hexCoo.port_a1) + annotation (Line(points={{-212,-194},{-212,-180}}, color={0,127,255})); + connect(hexCoo.port_b1, TConWatCooRet.port_a) + annotation (Line(points={{-212,-160},{-212,-146}},color={0,127,255})); + connect(TConWatCooRet.port_b, coo.port_a) annotation (Line(points={{-212,-126}, + {-212,-80},{-250,-80}}, + color={0,127,255})); + connect(valBypTan.port_3, TConWatHexCooEnt.port_a) annotation (Line(points={{-170, + -100},{-200,-100},{-200,-130}}, color={0,127,255})); + connect(TConWatHexCooEnt.port_b, hexCoo.port_a2) + annotation (Line(points={{-200,-150},{-200,-160}}, color={0,127,255})); + connect(hexCoo.port_b2, TConWatHexCooLvg.port_a) + annotation (Line(points={{-200,-180},{-200,-190}}, color={0,127,255})); + connect(TConWatHexCooLvg.port_b, mConWatHexCoo_flow.port_a) annotation (Line( + points={{-200,-210},{-200,-230}}, color={0,127,255})); + connect(TConWatConChiLvg.T, ctl.TConWatConChiLvg) annotation (Line(points={{-50,51}, + {-50,62},{-352,62},{-352,284},{-344,284}}, color={0,0, + 127})); + connect(TConWatConChiEnt.T, ctl.TConWatConChiEnt) annotation (Line(points={{0,-329}, + {0,-292},{-364,-292},{-364,286},{-344,286}}, + color={0,0,127})); + connect(TConWatCooSup.T, ctl.TConWatCooSup) annotation (Line(points={{-223, + -204},{-356,-204},{-356,282},{-344,282}}, color={0,0,127})); + connect(TConWatCooRet.T, ctl.TConWatCooRet) annotation (Line(points={{-223, + -136},{-350,-136},{-350,280},{-344,280}}, + color={0,0,127})); + connect(TConWatHexCooEnt.T, ctl.TConWatHexCooEnt) annotation (Line(points={{-211, + -140},{-350,-140},{-350,278},{-344,278}}, color={0,0,127})); + connect(TConWatHexCooLvg.T, ctl.TConWatHexCooLvg) annotation (Line(points={{-211, + -200},{-354,-200},{-354,276},{-344,276}}, color={0,0,127})); + connect(ctl.yPumConWatCoo, pumConWatCoo.y) annotation (Line(points={{-296,259}, + {-280,259},{-280,-216},{-262,-216}}, + color={0,0,127})); + connect(chiHea.TConLvg, ctl.TConLvgChiHea) annotation (Line(points={{67,-136}, + {67,58},{-370,58},{-370,298},{-344,298}}, + color={0,0,127})); + connect(chiHea.TConEnt, ctl.TConEntChiHea) annotation (Line(points={{65,-136}, + {65,56},{-362,56},{-362,300},{-344,300}}, color={ + 0,0,127})); + connect(junConWatTanEnt.port_3, valConWatEvaMix.port_1) + annotation (Line(points={{-150,-40},{-130,-40}}, + color={0,127,255})); + connect(valConWatEvaMix.port_2, pumConWatEva.port_a) + annotation (Line(points={{-110,-40},{-80,-40}}, + color={0,127,255})); + connect(junConWatEvaLvg.port_3, valConWatEvaMix.port_3) annotation (Line( + points={{0,-136},{0,-100},{-120,-100},{-120,-50}}, color={0,127,255})); + connect(junConWatEvaLvg.port_3, dpConWatEva.port_b) + annotation (Line(points={{0,-136},{0,-80},{-1.77636e-15,-80}}, + color={0,127,255})); + connect(chiHea.port_b2, junConWatEvaLvg.port_1) annotation (Line(points={{50,-145}, + {50,-146},{10,-146}}, color={0,127,255})); + connect(junConWatEvaLvg.port_2, junConWatTanLvg.port_3) annotation (Line( + points={{-10,-146},{-30,-146},{-30,-280},{-110,-280}}, + color={0,127,255})); + connect(TConWatEvaEnt.T, ctl.TConWatEvaEnt) annotation (Line(points={{69,-60}, + {64,-60},{64,60},{-358,60},{-358,302},{-344,302}}, color={0, + 0,127})); + connect(ctl.yValConWatEvaMix, valConWatEvaMix.y) annotation (Line(points={{-296, + 284},{26,284},{26,-20},{-120,-20},{-120,-28}}, color={0,0, + 127})); + connect(junConWatHeaPumLvg.port_2, TConWatConRet.port_a) + annotation (Line(points={{-130,40},{-160,40},{-160,30}}, + color={0,127,255})); + connect(TConWatConRet.port_b, junConWatTanEnt.port_1) + annotation (Line(points={{-160,10},{-160,-30}},color={0,127,255})); + connect(TConWatConRet.T, ctl.TConWatConRet) annotation (Line(points={{-171,20}, + {-178,20},{-178,54},{-362,54},{-362,194},{-354,194},{-354,304},{-344, + 304}}, + color={0,0,127})); + connect(chi.TConLvg, ctl.TConLvgChi) annotation (Line(points={{66,98},{66,134}, + {-348,134},{-348,294},{-344,294}}, color={0,0,127})); + connect(junConWatHeaPumEnt.port_3, TConWatHeaPumEnt.port_a) + annotation (Line(points={{-80,50},{-80,80}}, color={0,127,255})); + connect(TConWatHeaPumEnt.port_b, heaPum.port_a) annotation (Line(points={{-80,100}, + {-80,160},{-90,160}}, color={0,127,255})); + connect(heaPum.port_b, TConWatHeaPumLvg.port_a) annotation (Line(points={{-110, + 160},{-120,160},{-120,100}},color={0,127,255})); + connect(TConWatHeaPumLvg.port_b, junConWatHeaPumLvg.port_3) + annotation (Line(points={{-120,80},{-120,50}}, color={0,127,255})); + connect(ctl.y1Coo, coo.y1) annotation (Line(points={{-296,257},{-220,257},{ + -220,-74},{-248,-74}}, + color={255,0,255})); + connect(mConWatHexCoo_flow.port_b, junConWatTanLvg.port_1) annotation (Line( + points={{-200,-250},{-200,-260},{-120,-260},{-120,-270}}, + color={0,127, + 255})); + connect(mConWatOutTan_flow.port_b, junConWatTanLvg.port_1) + annotation (Line(points={{-80,-250},{-80,-260},{-120,-260},{-120,-270}}, + color={0,127,255})); + connect(ctl.yPumConWatCon, pumConWatCon.y) annotation (Line(points={{-296,273}, + {-276,273},{-276,-336},{-92,-336}}, color={0,0,127})); + connect(ctl.y1PumConWatCon, pumConWatCon.y1) annotation (Line(points={{-296, + 275},{-284,275},{-284,254},{-274,254},{-274,-332},{-92,-332}}, color= + {255,0,255})); + connect(pumConWatCon.port_b, valConWatByp.port_b) annotation (Line(points={{ + -70,-340},{-40,-340},{-40,-130}}, color={0,127,255})); + connect(ctl.yValConWatByp, valConWatByp.y) annotation (Line(points={{-296,248}, + {28,248},{28,-120},{-28,-120}}, color={0,0,127})); + connect(pumConWatCon.port_b, TConWatConChiEnt.port_a) + annotation (Line(points={{-70,-340},{-10,-340}}, color={0,127,255})); + connect(pumConWatCon.port_b, dpConWatCon.port_a) annotation (Line(points={{ + -70,-340},{-20,-340},{-20,-320}}, color={0,127,255})); + connect(valConWatByp.port_a, TConWatConChiLvg.port_a) + annotation (Line(points={{-40,-110},{-40,40}}, color={0,127,255})); + connect(dpConWatCon.port_b, TConWatConChiLvg.port_a) annotation (Line(points= + {{-20,-300},{-20,40},{-40,40}}, color={0,127,255})); +annotation ( + defaultComponentName="pla", Documentation(info=" +

    +This model represents a combined heating and cooling plant where chilled +water is produced by cooling-only chillers and heat recovery chillers, +hot water is produced by heat recovery chillers, and a thermal energy storage +tank is integrated in the condenser water circuit to maximize heat recovery +(\"Tank Charge/Discharge\" operating mode). +Cooling towers allow rejecting excess heat from the condenser loop +(\"Heat Rejection\" operating mode). +Air-source heat pumps allow injecting heat into the condenser loop +(\"Charge Assist\" operating mode). +

    +

    +This model has been developed based on the publication by B. Gill (2021) +and further discussions with Taylor Engineers. +

    +

    Abbreviations and naming conventions

    +

    +The following abbreviations are used in the documentation of this +model and of its components.
    +

    + + + + + + + + + + + + + + + + +
    AbbreviationDescription
    AIAnalog input (integer or real)
    AOAnalog output (integer or real)
    CHWChilled water
    CTCooling tower
    CWCondenser water
    CWCCondenser water circuit serving chiller and HRC condenser barrel
    CWECondenser water circuit serving HRC evaporator barrel
    DIDigital input (Boolean)
    DODigital output (Boolean)
    HPHeat pump
    HRHeat recovery
    HRCHeat recovery chiller
    HWHot water
    VFDVariable frequency drive
    +

    +To clearly distinguish cooling-only chillers from heat recovery chillers, +the term \"chiller\" is used systematically to refer to cooling-only chillers +whereas the abbreviation \"HRC\" is used systematically to refer to heat recovery chillers. +

    +

    +Each HRC can operate under the following modes. +In cascading heating mode, the condenser barrel is connected to the +HW loop and the evaporator barrel is connected to the CW loop (CWE circuit). +The onboard controller controls the HRC to track a HW +supply temperature setpoint at condenser outlet. +In cascading cooling mode, the condenser barrel is connected to the CW +loop (CWC circuit) and the evaporator barrel is connected to the CHW +loop. The onboard controller controls the HRC to track a CHW +supply temperature setpoint at evaporator outlet. +In direct heat recovery mode, the condenser barrel is connected to the HW +loop and the evaporator barrel is connected to the CHW +loop. The onboard controller controls the HRC to track a HW +supply temperature setpoint at condenser outlet while the plant supervisory +controller maintains the CHW supply temperature at setpoint by +modulating the evaporator flow rate or the condenser entering temperature. +

    +

    System schematic

    +

    +The schematic below represents a configuration of the system with two chillers +and three HRCs. +The equipment tags correspond to the component names in the plant model. +The control points used by each control function are represented at the intersection +of the gray area that describes the function and the four bus lines corresponding +to the different control point categories (AI, DI, AO, DO). +For the sake of clarity, control logic that is duplicated between multiple +units (for instance the chiller isolation valve control) is only illustrated for +one unit. +The detailed description of each control function is available in the documentation +of + +Buildings.Experimental.DHC.Plants.Combined.Controls.Controller. +For an overview of the different operating modes and the design principles of such +a system, the user may refer to the article by B. Gill (2021). +

    +

    +\"System +

    +

    Control points

    +
    Cooling and heating Enable signals
    +

    +The cooling and heating Enable signals u1Coo and u1Hea +shall be computed outside of the plant model, for instance based on a time schedule. +

    +
    CHW and HW supply temperature and differential pressure setpoint
    +

    +Those setpoints are provided as control inputs. +Ideally, a reset logic based on consumer valve requests should be implemented to adapt +those setpoints to the demand. +

    +

    Details

    +
    Sizing considerations
    +

    +Sizing the TES tank and the heat pumps is a joint optimization problem +under the constraint that on a design heating day, heating loads can be +met using both the recovered heat and the heat added to the tank by +the heat pumps. +As stated by B. Gill (2021), increasing the tank +capacity generally improves plant efficiency by providing more opportunity +for heat recovery. Tank capacity should therefore be maximized under the limit +corresponding to the amount of heat that can be recovered over the day. +

    +

    +The model is configured by default with a tank that is sized to store +the heat needed to operate the HRCs during h at peak heating +load with a ΔT covering the two temperature cycles specified +with the parameter TTanSet (heels and thermocline neglected). +This default can be overwritten. +

    +
    TES tank
    +

    +The tank is assumed to be integrated without pressure separation, i.e., +the operating level of the tank sets the system pressure and no pressure +sustaining valve or discharge pump is included. +The operating level is approximated as equal to the tank height. +A default height to diameter ratio of 2 is also taken into +account +(designers tend to favor a height to diameter ratio above 1.5 +in order to minimize the volume of the thermocline which is +considered useless). +No high limit is considered for the tank mass flow rate. +

    +
    CHW and HW minimum flow bypass valve
    +

    +As per standard practice, the bypass valve is sized for the highest +chiller minimum flow. +The bypass valve model is configured with +a pressure drop varying linearly with the flow rate, as opposed +to a quadratic dependency usually considered for a turbulent flow +regime. +This is because the whole plant model contains large nonlinear systems +of equations, and this configuration limits the risk of solver failure +while reducing the time to solution. +This has no significant impact on the operating point of the circulation pumps +due to the control loop that modulates the valve opening to generate +enough pressure differential at the chiller boundaries to allow for +minimum flow circulation. +So whatever the modeling assumptions for the bypass valve, the +control loop ensures that the valve creates the adequate pressure drop +and bypass flow, which will simply be reached at a different valve opening +with the above simplification. +

    +
    Cooling tower circuit
    +

    +The design heat flow rate used to size the cooling towers and the intermediary +heat exchanger corresponds to the heat flow rate rejected by all HRCs operating in +cascading cooling mode and all chillers operating at design conditions. +The cooling towers are sized with a default approach of K to the +design wetbulb temperature. +The intermediary heat exchanger is sized with a default approach of K. +

    +
    Chiller and HRC performance data
    +

    +The chiller performance data should cover the CW temperature levels +reached when the plant is operating in Heat Rejection mode. +The parameter TCasConEnt_nominal (set with a final assignment) +provides the maximum CW supply (condenser entering) temperature in this +operating mode. +The HRC performance data should cover the HRC lift envelope, +that is when the HRC is operating in direct heat recovery mode, +producing CHW and HW at their setpoint value at full load. +

    +

    References

    +

    + +Brandon Gill, P.E., Taylor Engineers, Alameda, CA, USA.
    +
    +Solving the large building all-electric heating problem.
    +ASHRAE Journal, October 2021. +

    + +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end AllElectricCWStorage; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo new file mode 100644 index 00000000000..176e1231fd7 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo @@ -0,0 +1,532 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block CoolingTowerLoop "Cooling tower loop control" + + parameter Modelica.Units.SI.MassFlowRate mConWatHexCoo_flow_nominal + "Design total CW mass flow rate through condenser barrels (all units)"; + parameter Integer nCoo(final min=1, start=1) + "Number of cooling tower cells operating at design conditions" + annotation (Evaluate=true); + parameter Integer nPumConWatCoo(final min=1, start=1) + "Number of CW pumps serving cooling towers at design conditions" + annotation (Evaluate=true); + parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal + "Design plant cooling heat flow rate (all units)"; + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_min + "Minimum chiller lift at minimum load"; + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_nominal + "Design chiller lift"; + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] + "Tank temperature setpoints: 2 cycles with 2 setpoints"; + parameter Modelica.Units.SI.TemperatureDifference dTHexCoo_nominal + "Design heat exchanger approach"; + parameter Real yPumConWatCoo_min[nPumConWatCoo](each final unit="1")= + {0.2/i for i in 1:nPumConWatCoo} + "Tower pump speed needed to maintain minimum tower flow (each pump stage)"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput mode( + final min=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.tankCharge, + final max=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Condenser loop operating mode" + annotation (Placement(transformation(extent={{-220,240},{-180,280}}), + iconTransformation(extent={{-140,140},{-100,180}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput idxCycTan( + final min=1, + final max=2) + "Index of active tank cycle" + annotation (Placement(transformation(extent={{-220,200},{-180,240}}), + iconTransformation(extent={{-140,120},{-100,160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatCooSup(final unit="K", + displayUnit="degC") "Cooling tower loop CW supply temperature" + annotation (Placement(transformation(extent={{-220,-200},{-180,-160}}), + iconTransformation(extent={{-140,2},{-100,42}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatHexCoo_flow( + final unit="kg/s") + "CW mass flow rate through secondary side of HX" + annotation ( + Placement(transformation(extent={{-220,-20},{-180,20}}), + iconTransformation(extent={{-140,-140},{-100,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput QCooReq_flow( + final unit="W") + "Plant required cooling capacity (>0)" annotation ( + Placement(transformation(extent={{-220,140},{-180,180}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConChiEnt(final unit= + "K", displayUnit="degC") "Chiller and HRC entering CW temperature" + annotation (Placement(transformation(extent={{-220,40},{-180,80}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConChiLvg(final unit= + "K", displayUnit="degC") "Chiller and HRC leaving CW temperature" + annotation (Placement(transformation(extent={{-220,20},{-180,60}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet(final unit="K", + displayUnit="degC") "CHW supply temperature setpoint" annotation ( + Placement(transformation(extent={{-220,80},{-180,120}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatCooRet(final unit="K", + displayUnit="degC") "Cooling tower loop CW return temperature" + annotation (Placement(transformation(extent={{-220,-220},{-180,-180}}), + iconTransformation(extent={{-140,-18},{-100,22}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValBypTan(final unit="1") + "TES tank bypass valve commanded position" annotation (Placement( + transformation(extent={{-220,-100},{-180,-60}}), iconTransformation( + extent={{-140,-180},{-100,-140}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatHexCooEnt(final unit= + "K", displayUnit="degC") "HX entering CW temperature" annotation ( + Placement(transformation(extent={{-220,-260},{-180,-220}}), + iconTransformation(extent={{-140,-38},{-100,2}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatHexCooLvg(final unit= + "K", displayUnit="degC") "HX leaving CW temperature" annotation ( + Placement(transformation(extent={{-220,-280},{-180,-240}}), + iconTransformation(extent={{-140,-58},{-100,-18}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatCoo[ + nPumConWatCoo] "Cooling tower pump Start command" annotation (Placement( + transformation(extent={{180,40},{220,80}}), iconTransformation(extent + ={{100,100},{140,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCoo + "Cooling tower fan speed command" annotation (Placement(transformation( + extent={{180,-80},{220,-40}}), iconTransformation(extent={{100,-140}, + {140,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumConWatCoo + "Cooling tower pump speed command" annotation (Placement(transformation( + extent={{180,-240},{220,-200}}), iconTransformation(extent={{100,40},{ + 140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Coo[nCoo] + "Cooling tower Start command" annotation (Placement(transformation(extent={{180, + -140},{220,-100}}), iconTransformation(extent={{100,-80},{140, + -40}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTemCon "Compute CW deltaT" + annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); + Buildings.Controls.OBC.CDL.Continuous.MovingAverage mea(delta=5*60) + "Moving mean" + annotation (Placement(transformation(extent={{-130,30},{-110,50}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTem1 "Compute deltaT" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + Buildings.Controls.OBC.CDL.Continuous.Add lifPlu "Add target lift" + annotation (Placement(transformation(extent={{-130,90},{-110,110}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter subApp(final p=- + dTHexCoo_nominal) "Substract HX approach" + annotation (Placement(transformation(extent={{-70,60},{-50,80}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch TSupSetUnb(y(unit="K", + displayUnit="degC")) + "Compute tower supply temperature setpoint, unbounded" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-20,260}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant modRej( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Heat rejection mode index" + annotation (Placement(transformation(extent={{-150,230},{-130,250}}))); + Buildings.Controls.OBC.CDL.Integers.Equal isModRej "Heat rejection mode" + annotation (Placement(transformation(extent={{-110,250},{-90,270}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setOth[2](final k= + TTanSet[:, 1] .- dTHexCoo_nominal) + "Target setpoint in any mode other than heat rejection" + annotation (Placement(transformation(extent={{-110,190},{-90,210}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor extSet(final nin=2) + "Extract setpoint value based on current mode" + annotation (Placement(transformation(extent={{-70,230},{-50,250}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratDes(final k=abs(1 + /QChiWat_flow_nominal)) "Ratio to design capacity" + annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); + Buildings.Controls.OBC.CDL.Continuous.Line lif "Compute target chiller lift" + annotation (Placement(transformation(extent={{-110,130},{-90,150}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xLif[2](k={0.1,1}) + "x-value for lift reset" + annotation (Placement(transformation(extent={{-160,180},{-140,200}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yLif[2](final k={ + dTLifChi_min,dTLifChi_nominal}) "y-value for lift reset" + annotation (Placement(transformation(extent={{-160,120},{-140,140}}))); + StagingPump staPum( + nPum=nPumConWatCoo, + have_flowCriterion=false, + yDow=0.4, + yUp=0.8) + "Stage pumps" + annotation (Placement(transformation(extent={{100,50},{120,70}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpFlo(t=0.025* + mConWatHexCoo_flow_nominal, h=0.025*mConWatHexCoo_flow_nominal/2) + "Flow criterion to enable lead pump" + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timFlo(t=60) + "Timer for flow exceeding triggering limit" + annotation (Placement(transformation(extent={{-130,-10},{-110,10}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timFlo1(t=5*60) + "Timer for flow exceeding triggering limit" + annotation (Placement(transformation(extent={{-130,-50},{-110,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmpOpe(t=0.99, h=0.005) + "Valve opening criterion to enable lead pump" + annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOpe(t=60) + "Timer for valve opening exceeding triggering limit" + annotation (Placement(transformation(extent={{-130,-90},{-110,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOpe1(t=60) + "Timer for valve opening exceeding triggering limit" + annotation (Placement(transformation(extent={{-130,-130},{-110,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 + "Valve opening criterion to disable lead pump" + annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Or dis "Disable condition" + annotation (Placement(transformation(extent={{-90,-80},{-70,-60}}))); + Buildings.Controls.OBC.CDL.Logical.And ena "Enable condition" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Buildings.Controls.OBC.CDL.Logical.Latch enaLea "Enable lead pump" + annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTem2 "Compute deltaT" + annotation (Placement(transformation(extent={{-160,-250},{-140,-230}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTem3 "Compute deltaT" + annotation (Placement(transformation(extent={{-160,-210},{-140,-190}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(final p=-1) + "Add offset" + annotation (Placement(transformation(extent={{-130,-250},{-110,-230}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter addApp(final p= + dTHexCoo_nominal) "Add HX approach" + annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlPum1( + k=0.01, + Ti=60, + final reverseActing=false) "Pump control loop #1" + annotation (Placement(transformation(extent={{-10,-210},{10,-190}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlPum2( + k=0.01, + Ti=60, + final reverseActing=false) + "Pump control loop #1" + annotation (Placement(transformation(extent={{-10,-250},{10,-230}}))); + Buildings.Controls.OBC.CDL.Continuous.Min minCtlPum "Minimum loop output" + annotation (Placement(transformation(extent={{30,-230},{50,-210}}))); + Buildings.Controls.OBC.CDL.Continuous.Line pum "Pump speed command" + annotation (Placement(transformation(extent={{120,-230},{140,-210}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xPum[2](k={0,1}) + "x-value for pump speed reset" + annotation (Placement(transformation(extent={{90,-210},{110,-190}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + "Constant" + annotation (Placement(transformation(extent={{90,-260},{110,-240}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yPumMin[nPumConWatCoo]( + final k=yPumConWatCoo_min) "Minimum pump speed" + annotation (Placement(transformation(extent={{30,-260},{50,-240}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor extYPumMin(final nin= + nPumConWatCoo) + "Extract minimum pump speed value based on current pump stage" + annotation (Placement(transformation(extent={{60,-260},{80,-240}}))); + Modelica.Blocks.Sources.IntegerExpression nPumBou(y=max(1, staPum.nPumEna)) + "Number of pumps commanded on, bounded by 1" + annotation (Placement(transformation(extent={{30,-284},{50,-264}}))); + Buildings.Controls.OBC.CDL.Continuous.Line fanMax "Compute maximum fan speed" + annotation (Placement(transformation(extent={{70,150},{90,170}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFan[2](k={0,0.5}) + "x-value for maximum fan speed reset" + annotation (Placement(transformation(extent={{30,180},{50,200}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFan[2](final k={0.7,1.0}) + "y-value for maximum fan speed reset" + annotation (Placement(transformation(extent={{30,120},{50,140}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlFan( + k=0.05, + Ti=60, + final reverseActing=false) "Fan control loop" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1 + "Left limit of signal to avoid direct feedback" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-60,-150}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setMax(k=25 + 273.15) + "Maximum setpoint" + annotation (Placement(transformation(extent={{-70,190},{-50,210}}))); + Buildings.Controls.OBC.CDL.Continuous.Min TSupSet( + y(unit="K", displayUnit="degC")) + "Compute tower supply temperature setpoint" + annotation (Placement(transformation(extent={{-30,190},{-10,210}}))); + Buildings.Controls.OBC.CDL.Continuous.Line fan "Compute fan speed" + annotation (Placement(transformation(extent={{150,-70},{170,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFan1 + [2](k={0,1}) + "x-value for fan speed reset" + annotation (Placement(transformation(extent={{110,-50},{130,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFan1(final k=0) + "y-value for fan speed reset" + annotation (Placement(transformation(extent={{110,-90},{130,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not not2 + "Flow criterion to disable lead pump" + annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep(final nout= + nCoo) "Replicate" + annotation (Placement(transformation(extent={{110,-130},{130,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not notDis "Not disabled" + annotation (Placement(transformation(extent={{-90,-40},{-70,-20}}))); + Buildings.Controls.OBC.CDL.Logical.And enaAndNotDis + "Reset enable condition when disable is true to trigger latch block when (enable, disable) becomes (true, false) again" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); +equation + connect(QCooReq_flow, ratDes.u) + annotation (Line(points={{-200,160},{-162,160}}, + color={0,0,127})); + connect(ratDes.y, lif.u) + annotation (Line(points={{-138,160},{-126,160},{-126,140},{-112,140}}, + color={0,0,127})); + connect(xLif[1].y, lif.x1) annotation (Line(points={{-138,190},{-120,190},{ + -120,148},{-112,148}}, + color={0,0,127})); + connect(xLif[2].y, lif.x2) annotation (Line(points={{-138,190},{-120,190},{ + -120,136},{-112,136}}, + color={0,0,127})); + connect(yLif[1].y, lif.f1) annotation (Line(points={{-138,130},{-116,130},{ + -116,144},{-112,144}}, + color={0,0,127})); + connect(yLif[2].y, lif.f2) annotation (Line(points={{-138,130},{-116,130},{ + -116,132},{-112,132}}, + color={0,0,127})); + connect(TConWatConChiLvg, delTemCon.u1) annotation (Line(points={{-200,40},{-170, + 40},{-170,46},{-162,46}}, color={0,0,127})); + connect(TConWatConChiEnt, delTemCon.u2) annotation (Line(points={{-200,60},{-174, + 60},{-174,34},{-162,34}}, color={0,0,127})); + connect(delTemCon.y, mea.u) + annotation (Line(points={{-138,40},{-132,40}}, color={0,0,127})); + connect(lif.y, lifPlu.u1) annotation (Line(points={{-88,140},{-80,140},{-80, + 116},{-140,116},{-140,106},{-132,106}}, + color={0,0,127})); + connect(TChiWatSupSet, lifPlu.u2) annotation (Line(points={{-200,100},{-140, + 100},{-140,94},{-132,94}}, + color={0,0,127})); + connect(lifPlu.y, delTem1.u1) annotation (Line(points={{-108,100},{-104,100}, + {-104,76},{-102,76}}, + color={0,0,127})); + connect(mea.y, delTem1.u2) annotation (Line(points={{-108,40},{-104,40},{-104, + 64},{-102,64}}, color={0,0,127})); + connect(delTem1.y,subApp. u) + annotation (Line(points={{-78,70},{-72,70}}, color={0,0,127})); + connect(mode, isModRej.u1) + annotation (Line(points={{-200,260},{-112,260}}, color={255,127,0})); + connect(modRej.y, isModRej.u2) annotation (Line(points={{-128,240},{-120,240}, + {-120,252},{-112,252}}, color={255,127,0})); + connect(isModRej.y, TSupSetUnb.u2) + annotation (Line(points={{-88,260},{-32,260}}, color={255,0,255})); + connect(subApp.y, TSupSetUnb.u1) annotation (Line(points={{-48,70},{-40,70},{-40, + 268},{-32,268}}, color={0,0,127})); + connect(setOth.y,extSet. u) annotation (Line(points={{-88,200},{-80,200},{-80, + 240},{-72,240}}, color={0,0,127})); + connect(extSet.y, TSupSetUnb.u3) annotation (Line(points={{-48,240},{-36,240}, + {-36,252},{-32,252}}, color={0,0,127})); + connect(mConWatHexCoo_flow, cmpFlo.u) annotation (Line(points={{-200,0},{-162, + 0}}, color={0,0,127})); + connect(cmpFlo.y, timFlo.u) + annotation (Line(points={{-138,0},{-132,0}}, color={255,0,255})); + connect(yValBypTan, cmpOpe.u) + annotation (Line(points={{-200,-80},{-162,-80}}, color={0,0,127})); + connect(not1.y, timOpe1.u) + annotation (Line(points={{-138,-120},{-132,-120}}, color={255,0,255})); + connect(cmpOpe.y, timOpe.u) + annotation (Line(points={{-138,-80},{-132,-80}}, color={255,0,255})); + connect(cmpOpe.y, not1.u) annotation (Line(points={{-138,-80},{-134,-80},{-134, + -100},{-170,-100},{-170,-120},{-162,-120}}, color={255,0,255})); + connect(timFlo.passed, ena.u1) annotation (Line(points={{-108,-8},{-104,-8},{ + -104,0},{-92,0}}, color={255,0,255})); + connect(timOpe.passed, ena.u2) annotation (Line(points={{-108,-88},{-100,-88}, + {-100,-8},{-92,-8}}, color={255,0,255})); + connect(timFlo1.passed, dis.u1) annotation (Line(points={{-108,-48},{-104,-48}, + {-104,-70},{-92,-70}}, color={255,0,255})); + connect(timOpe1.passed, dis.u2) annotation (Line(points={{-108,-128},{-96, + -128},{-96,-78},{-92,-78}}, color={255,0,255})); + connect(dis.y,enaLea. clr) annotation (Line(points={{-68,-70},{-40,-70},{-40, + -46},{-32,-46}}, color={255,0,255})); + connect(enaLea.y, staPum.y1Ena) annotation (Line(points={{-8,-40},{20,-40},{ + 20,66},{98,66}}, color={255,0,255})); + connect(TConWatCooRet, delTem3.u1) annotation (Line(points={{-200,-200},{-166, + -200},{-166,-194},{-162,-194}}, color={0,0,127})); + connect(TConWatCooSup, delTem3.u2) annotation (Line(points={{-200,-180},{-170, + -180},{-170,-206},{-162,-206}}, color={0,0,127})); + connect(TConWatHexCooEnt, delTem2.u1) annotation (Line(points={{-200,-240},{ + -166,-240},{-166,-234},{-162,-234}}, + color={0,0,127})); + connect(delTem2.y, addOff.u) + annotation (Line(points={{-138,-240},{-132,-240}}, color={0,0,127})); + connect(addApp.y, ctlPum1.u_s) + annotation (Line(points={{-18,-200},{-12,-200}}, color={0,0,127})); + connect(delTem3.y, ctlPum2.u_m) annotation (Line(points={{-138,-200},{-90, + -200},{-90,-260},{0,-260},{0,-252}}, + color={0,0,127})); + connect(addOff.y, ctlPum2.u_s) + annotation (Line(points={{-108,-240},{-12,-240}}, color={0,0,127})); + connect(ctlPum1.y, minCtlPum.u1) annotation (Line(points={{12,-200},{20,-200}, + {20,-214},{28,-214}}, color={0,0,127})); + connect(ctlPum2.y, minCtlPum.u2) annotation (Line(points={{12,-240},{20,-240}, + {20,-226},{28,-226}}, color={0,0,127})); + connect(xPum[1].y, pum.x1) annotation (Line(points={{112,-200},{114,-200},{114, + -212},{118,-212}}, + color={0,0,127})); + connect(xPum[2].y, pum.x2) annotation (Line(points={{112,-200},{114,-200},{114, + -224},{118,-224}}, + color={0,0,127})); + connect(pum.y, yPumConWatCoo) annotation (Line(points={{142,-220},{200,-220}}, + color={0,0,127})); + connect(one.y, pum.f2) annotation (Line(points={{112,-250},{114,-250},{114,-228}, + {118,-228}},color={0,0,127})); + connect(minCtlPum.y, pum.u) + annotation (Line(points={{52,-220},{118,-220}},color={0,0,127})); + connect(idxCycTan,extSet. index) annotation (Line(points={{-200,220},{-60,220}, + {-60,228}}, color={255,127,0})); + connect(yPumMin.y, extYPumMin.u) + annotation (Line(points={{52,-250},{58,-250}}, color={0,0,127})); + connect(nPumBou.y, extYPumMin.index) annotation (Line(points={{51,-274},{70,-274}, + {70,-262}}, color={255,127,0})); + connect(extYPumMin.y, pum.f1) annotation (Line(points={{82,-250},{84,-250},{84, + -216},{118,-216}},color={0,0,127})); + connect(xFan[1].y, fanMax.x1) annotation (Line(points={{52,190},{60,190},{60,168}, + {68,168}}, color={0,0,127})); + connect(xFan[2].y, fanMax.x2) annotation (Line(points={{52,190},{60,190},{60,156}, + {68,156}}, color={0,0,127})); + connect(yFan[1].y, fanMax.f1) annotation (Line(points={{52,130},{64,130},{64,164}, + {68,164}}, color={0,0,127})); + connect(yFan[2].y, fanMax.f2) annotation (Line(points={{52,130},{64,130},{64,152}, + {68,152}}, color={0,0,127})); + connect(ratDes.y, fanMax.u) + annotation (Line(points={{-138,160},{68,160}}, color={0,0,127})); + connect(enaLea.y, pre1.u) annotation (Line(points={{-8,-40},{20,-40},{20,-80}, + {-60,-80},{-60,-138}}, color={255,0,255})); + connect(TConWatCooSup, ctlFan.u_m) annotation (Line(points={{-200,-180},{90,-180}, + {90,-72}}, color={0,0,127})); + connect(pum.y, staPum.y) annotation (Line(points={{142,-220},{176,-220},{176,40}, + {94,40},{94,54},{98,54}}, color={0,0,127})); + connect(pre1.y, ctlPum1.uEna) annotation (Line(points={{-60,-162},{-60,-216}, + {-4,-216},{-4,-212}},color={255,0,255})); + connect(pre1.y, ctlPum2.uEna) annotation (Line(points={{-60,-162},{-60,-256}, + {-4,-256},{-4,-252}},color={255,0,255})); + connect(staPum.y1, y1PumConWatCoo) + annotation (Line(points={{122,66},{170,66},{170,60},{200,60}}, + color={255,0,255})); + connect(setMax.y, TSupSet.u2) annotation (Line(points={{-48,200},{-44,200},{-44, + 194},{-32,194}}, color={0,0,127})); + connect(TSupSetUnb.y, TSupSet.u1) annotation (Line(points={{-8,260},{0,260},{0, + 220},{-34,220},{-34,206},{-32,206}}, color={0,0,127})); + connect(TSupSet.y, ctlFan.u_s) annotation (Line(points={{-8,200},{0,200},{0,-60}, + {78,-60}}, color={0,0,127})); + connect(TSupSet.y, addApp.u) annotation (Line(points={{-8,200},{0,200},{0, + -100},{-80,-100},{-80,-200},{-42,-200}}, color={0,0,127})); + connect(TConWatHexCooLvg, delTem2.u2) annotation (Line(points={{-200,-260},{ + -170,-260},{-170,-246},{-162,-246}}, color={0,0,127})); + connect(TConWatHexCooLvg, ctlPum1.u_m) annotation (Line(points={{-200,-260},{ + -170,-260},{-170,-220},{0,-220},{0,-212}}, color={0,0,127})); + connect(xFan1[1].y, fan.x1) annotation (Line(points={{132,-40},{144,-40},{144, + -52},{148,-52}}, color={0,0,127})); + connect(xFan1[2].y, fan.x2) annotation (Line(points={{132,-40},{144,-40},{144, + -64},{148,-64}}, color={0,0,127})); + connect(yFan1.y, fan.f1) annotation (Line(points={{132,-80},{146,-80},{146,-56}, + {148,-56}}, color={0,0,127})); + connect(ctlFan.y, fan.u) + annotation (Line(points={{102,-60},{148,-60}}, color={0,0,127})); + connect(fan.y, yCoo) + annotation (Line(points={{172,-60},{200,-60}}, color={0,0,127})); + connect(fanMax.y, fan.f2) annotation (Line(points={{92,160},{140,160},{140,-68}, + {148,-68}}, color={0,0,127})); + connect(enaLea.y, ctlFan.uEna) annotation (Line(points={{-8,-40},{20,-40},{20, + -80},{86,-80},{86,-72}}, color={255,0,255})); + connect(cmpFlo.y, not2.u) annotation (Line(points={{-138,0},{-134,0},{-134, + -20},{-166,-20},{-166,-40},{-162,-40}}, color={255,0,255})); + connect(not2.y, timFlo1.u) + annotation (Line(points={{-138,-40},{-132,-40}}, color={255,0,255})); + connect(rep.y, y1Coo) + annotation (Line(points={{132,-120},{200,-120}}, color={255,0,255})); + connect(enaLea.y, rep.u) annotation (Line(points={{-8,-40},{20,-40},{20,-120}, + {108,-120}}, color={255,0,255})); + connect(ena.y, enaAndNotDis.u1) + annotation (Line(points={{-68,0},{-62,0}}, color={255,0,255})); + connect(notDis.y, enaAndNotDis.u2) annotation (Line(points={{-68,-30},{-66, + -30},{-66,-8},{-62,-8}}, color={255,0,255})); + connect(enaAndNotDis.y, enaLea.u) annotation (Line(points={{-38,0},{-36,0},{ + -36,-40},{-32,-40}}, color={255,0,255})); + connect(dis.y, notDis.u) annotation (Line(points={{-68,-70},{-64,-70},{-64, + -48},{-96,-48},{-96,-30},{-92,-30}}, color={255,0,255})); + annotation (Icon(coordinateSystem(extent={{-100,-180},{100,180}}), + graphics={ + Rectangle( + extent={{-100,-180},{100,180}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,190},{150,230}}, + textString="%name")}), Diagram(coordinateSystem(extent={{-180,-280},{ + 180,280}})), + Documentation(info=" +

    +This block implements the control logic for the CT pumps and +CT fans. +

    +

    CT supply temperature setpoint

    +

    +When Heat Rejection mode is enabled, the setpoint is equal to +min(25 °C, TChiWatSupSet + dTLif - dTConWat - dTHexCoo_nominal), where +TChiWatSupSet is the CHW supply temperature setpoint, +dTLif is the target chiller lift (see below), +dTConWat is the chiller condenser Delta-T averaged over +a 5-minute moving window, and +dTHexCoo_nominal is the design heat exchanger approach. +The target chiller lift is reset from the minimum chiller lift +to the design chiller lift when the plant required cooling capacity +varies from 10 % to 100 % of the design value. +

    +

    +In any other mode the setpoint is equal to the minimum setpoint value +of the active tank cycle minus the design heat exchanger approach. +

    +

    CT pumps

    +

    +The lead pump is enabled whenever the TES tank bypass valve commanded +position is lower than 1 for min and the +CW mass flow rate through the secondary side of the cooling heat exchanger +is higher than 2.5 % of design condition for min. +The lead pump is disabled whenever the TES tank bypass valve commanded +position is equal to 1 for min or the +CW mass flow rate through the secondary side of the cooling heat exchanger +is lower than 2.5 % of design condition for min. +

    +

    +The lag pump is enabled whenever the pump speed command (common to all pumps) +is higher than 80 % for min. +The lag pump is disabled whenever the pump speed command +is lower than 80 % for min or the lead pump +is disabled. +

    +

    +The pump speed command is the lower of that output by two loops, each loop +being enabled whenever any pump is proven on. +The first loop maintains the heat exchanger leaving CW +temperature on plant side at setpoint. +The setpoint is equal to the CT supply temperature setpoint plus +the design HX approach. +The second loop maintains the Delta-T across the primary side (CT loop) +of the HX at a setpoint equal to the Delta-T across the secondary +side (plant side) of the HX minus K. +(This loop keeps the primary and secondary HX flow rates close to each other +and prevents pump speed runaway when target CT supply temperature setpoint +cannot be met.) +The output of each loop is mapped to the minimum pump speed at 80 % +to 100 % at 100 %. +The minimum pump speed is provided as a parameter for each pump stage since +different speeds are required for each stage to maintain minimum tower flow. +

    +

    CT fans

    +

    +When any of the CT pumps is commanded On, a control loop maintains the +tower water supply temperature at setpoint by resetting the tower fan speed +from 0 % to a maximum value varying between 70 % +and 100 % when the plant required cooling capacity +varies from 0 % to 50 % of the design value. +Otherwise, the loop is disabled and its output set to 0 %. +

    +

    +Note that the fan cycling On and Off is implicitly modeled +in the cooling tower component which uses a low limit of the control signal +to switch to a free convection regime at zero fan power. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end CoolingTowerLoop; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo new file mode 100644 index 00000000000..9685fe6194a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo @@ -0,0 +1,272 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block DirectHeatRecovery + "Block controlling HRC in direct heat recovery mode" + + parameter Integer nChi(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Integer nChiHea(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal + "Chiller CHW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_min + "Chiller CHW minimum mass flow rate (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_nominal + "HRC CHW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_min + "HRC CHW minimum mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + + parameter Real k(min=0)=0.01 + "Gain of controller" + annotation (Dialog(group="Control parameters")); + parameter Modelica.Units.SI.Time Ti=60 + "Time constant of integrator block" + annotation (Dialog(group="Control parameters")); + parameter Real y_reset=0.5 + "Value to which the controller output is reset if the boolean trigger has a rising edge" + annotation (Dialog(group="Control parameters")); + parameter Real y_neutral=0.5 + "Value to which the controller output is reset when the controller is disabled" + annotation (Dialog(group="Control parameters")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet(final unit="K", + displayUnit="degC") "CHW supply temperature setpoint" + annotation (Placement(transformation( + extent={{-180,-20},{-140,20}}), iconTransformation(extent={{-140,-20}, + {-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEvaLvg[nChiHea](each final unit="K", + each displayUnit="degC") "Evaporator barrel leaving temperature (each HRC)" + annotation (Placement(transformation(extent={{-180,-60},{-140,-20}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1HeaCoo[nChiHea] + "Direct HR command" annotation (Placement(transformation(extent={{-180,20},{ + -140,60}}), iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nChiHea] + "On/Off command" annotation (Placement(transformation(extent={{-180,60},{-140, + 100}}), iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEvaChiSet_flow( + final unit="kg/s") "Chiller evaporator flow setpoint" + annotation (Placement(transformation( + extent={{140,60},{180,100}}), iconTransformation(extent={{100,40},{140, + 80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConEntChiHeaSet( + final unit="K", displayUnit="degC") + "HRC condenser entering temperature setpoint" annotation (Placement( + transformation(extent={{140,-100},{180,-60}}), iconTransformation( + extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatPriRet(final unit="K", + displayUnit="degC") "Primary HW return temperature" annotation (Placement( + transformation(extent={{-180,-100},{-140,-60}}), iconTransformation( + extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Logical.And heaCooAndOn[nChiHea] + "Return true if direct HR AND On" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,60}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep( + final nout=nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctl[nChiHea]( + each final k=k, + each final Ti=Ti, + each final reverseActing=false, + each final y_reset=y_reset, + each final y_neutral=y_neutral) + "CHW supply temperature control" + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Line chiFloRes[nChiHea] + "Chiller evaporator flow reset" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMin min(nin=nChiHea) + "Minimum evaporator flow setpoint" + annotation (Placement(transformation(extent={{90,70},{110,90}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo[nChiHea,2]( + final k=fill({0,0.33}, nChiHea)) + "x-value for flow reset" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo[nChiHea,2]( + final k=fill(1.2 .* {mChiWatChi_flow_min,mChiWatChi_flow_nominal}, nChiHea)) + "y-value for flow reset" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Line chiHeaFloRes[nChiHea] + "HRC evaporator flow reset" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMin min1(nin=nChiHea) + "Minimum evaporator flow setpoint" + annotation (Placement(transformation(extent={{90,-10},{110,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo1 + [nChiHea, 2](final k= + fill({0.33,0.67}, nChiHea)) + "x-value for flow reset" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo1 + [nChiHea, 2](final k= + fill(1.2 .* {mChiWatChiHea_flow_nominal,mChiWatChiHea_flow_min}, nChiHea)) + "y-value for flow reset" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEvaChiHeaSet_flow(final + unit="kg/s") "HRC evaporator flow setpoint" annotation (Placement( + transformation(extent={{140,-20},{180,20}}), iconTransformation(extent={{100,-20}, + {140,20}}))); + Buildings.Controls.OBC.CDL.Continuous.Line chiHeaConTemRes[nChiHea] + "HRC condenser entering temperature reset" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo2 + [nChiHea, 2](final k= + fill({0.67,1.0}, nChiHea)) + "x-value for flow reset" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + + Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(final p=0.5) + "Add offset" + annotation (Placement(transformation(extent={{-90,-90},{-70,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff1(final p=-15) + "Add offset" + annotation (Placement(transformation(extent={{-90,-130},{-70,-110}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep1(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep2(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor extIndRea(final nin=nChiHea) + "Keep reset value from HRC in direct HR with higher index" + annotation (Placement(transformation(extent={{90,-90},{110,-70}}))); + Modelica.Blocks.Sources.IntegerExpression idxHig(final y=max({if heaCooAndOn[ + i].y then i else 1 for i in 1:nChiHea})) + "Highest index of HRC in direct HR (defaulted to 1 if all false)" + annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); + Buildings.Controls.OBC.CDL.Continuous.MovingAverage mea(delta=5*60) + "Moving average" + annotation (Placement(transformation(extent={{-130,-90},{-110,-70}}))); +equation + connect(TChiWatSupSet, rep.u) annotation (Line(points={{-160,0},{-122,0}}, + color={0,0,127})); + connect(y1, heaCooAndOn.u1) annotation (Line(points={{-160,80},{-130,80},{ + -130,60},{-122,60}}, + color={255,0,255})); + connect(y1HeaCoo, heaCooAndOn.u2) annotation (Line(points={{-160,40},{-130,40}, + {-130,52},{-122,52}}, color={255,0,255})); + connect(rep.y, ctl.u_s) + annotation (Line(points={{-98,0},{-72,0}}, color={0,0,127})); + connect(TEvaLvg, ctl.u_m) annotation (Line(points={{-160,-40},{-60,-40},{-60,-12}}, + color={0,0,127})); + connect(heaCooAndOn.y, ctl.uEna) annotation (Line(points={{-98,60},{-80,60},{ + -80,-20},{-64,-20},{-64,-12}}, + color={255,0,255})); + connect(chiFloRes.y, min.u) + annotation (Line(points={{62,80},{88,80}}, color={0,0,127})); + connect(yFlo[:, 2].y, chiFloRes.f2) annotation (Line(points={{22,60},{34,60},{ + 34,72},{38,72}}, + color={0,0,127})); + connect(yFlo[:, 1].y, chiFloRes.f1) annotation (Line(points={{22,60},{34,60},{ + 34,84},{38,84}}, + color={0,0,127})); + connect(ctl.y, chiFloRes.u) annotation (Line(points={{-48,0},{-20,0},{-20,80}, + {38,80}}, color={0,0,127})); + connect(xFlo[:, 1].y, chiFloRes.x1) annotation (Line(points={{22,100},{32,100}, + {32,88},{38,88}}, color={0,0,127})); + connect(xFlo[:, 2].y, chiFloRes.x2) annotation (Line(points={{22,100},{32,100}, + {32,76},{38,76}}, color={0,0,127})); + connect(min.y, mEvaChiSet_flow) annotation (Line(points={{112,80},{160,80}}, + color={0,0,127})); + connect(chiHeaFloRes.y, min1.u) + annotation (Line(points={{62,0},{88,0}}, color={0,0,127})); + connect(yFlo1[:, 2].y, chiHeaFloRes.f2) annotation (Line(points={{22,-20},{34, + -20},{34,-8},{38,-8}}, + color={0,0,127})); + connect(yFlo1[:, 1].y, chiHeaFloRes.f1) annotation (Line(points={{22,-20},{34, + -20},{34,4},{38,4}}, + color={0,0,127})); + connect(ctl.y, chiHeaFloRes.u) + annotation (Line(points={{-48,0},{38,0}}, color={0,0,127})); + connect(xFlo1[:, 1].y, chiHeaFloRes.x1) + annotation (Line(points={{22,20},{32,20},{32,8},{38,8}},color={0,0,127})); + connect(xFlo1[:, 2].y, chiHeaFloRes.x2) annotation (Line(points={{22,20},{32,20}, + {32,-4},{38,-4}}, color={0,0,127})); + connect(min1.y, mEvaChiHeaSet_flow) annotation (Line(points={{112,0},{160,0}}, + color={0,0,127})); + connect(ctl.y, chiHeaConTemRes.u) annotation (Line(points={{-48,0},{-20,0},{-20, + -80},{38,-80}}, color={0,0,127})); + connect(xFlo2[:, 1].y, chiHeaConTemRes.x1) annotation (Line(points={{22,-60},{ + 32,-60},{32,-72},{38,-72}}, + color={0,0,127})); + connect(xFlo2[:, 2].y, chiHeaConTemRes.x2) annotation (Line(points={{22,-60},{ + 32,-60},{32,-84},{38,-84}}, + color={0,0,127})); + connect(addOff.y, rep1.u) + annotation (Line(points={{-68,-80},{-62,-80}}, color={0,0,127})); + connect(addOff1.y, rep2.u) + annotation (Line(points={{-68,-120},{-62,-120}}, color={0,0,127})); + connect(rep2.y, chiHeaConTemRes.f2) annotation (Line(points={{-38,-120},{0, + -120},{0,-88},{38,-88}}, + color={0,0,127})); + connect(rep1.y, chiHeaConTemRes.f1) annotation (Line(points={{-38,-80},{-30, + -80},{-30,-76},{38,-76}}, + color={0,0,127})); + connect(extIndRea.y, TConEntChiHeaSet) + annotation (Line(points={{112,-80},{160,-80}}, color={0,0,127})); + connect(chiHeaConTemRes.y, extIndRea.u) + annotation (Line(points={{62,-80},{88,-80}}, color={0,0,127})); + connect(idxHig.y, extIndRea.index) annotation (Line(points={{81,-120},{100,-120}, + {100,-92}}, color={255,127,0})); + connect(addOff.u, mea.y) + annotation (Line(points={{-92,-80},{-108,-80}}, color={0,0,127})); + connect(THeaWatPriRet, mea.u) annotation (Line(points={{-160,-80},{-144,-80},{ + -144,-80},{-132,-80}}, color={0,0,127})); + connect(mea.y, addOff1.u) annotation (Line(points={{-108,-80},{-100,-80},{ + -100,-120},{-92,-120}}, + color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

    +In direct heat recovery mode, the HRC is internally controlled in heating mode +and tracks a HW supply temperature setpoint. +The CHW supply temperature setpoint is maintained by means of supervisory controls +that act on the evaporator flow rate and condenser entering water temperature as +described below. +

    +

    +A direct acting control loop runs for each HRC operating in direct heat recovery +mode. +Each loop is enabled with a bias of 50 % whenever the HRC +is commanded On and in direct heat recovery mode. +The loop is disabled with output set to 50 % otherwise. +The loop output is mapped as follows. +From 0 % to 33 % the evaporator flow setpoint of +cooling-only chillers is reset from 1.2 times its minimum value +to 1.2 times its design value. +From 33 % to 67 % the evaporator flow setpoint of +the HRC is reset from 1.2 times its minimum value +to 1.2 times its design value. +From 67 % to 100 % the HRC condenser entering +temperature setpoint is reset from THeaWatRet + 0.5 °C +to THeaWatRet - 15 °C. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end DirectHeatRecovery; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/IntegerArrayHold.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/IntegerArrayHold.mo new file mode 100644 index 00000000000..bc4b5bbb914 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/IntegerArrayHold.mo @@ -0,0 +1,65 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block IntegerArrayHold + "Block that holds the value of an integer array for a given time" + parameter Integer nin=0 + "Array dimension" + annotation (Dialog(connectorSizing=true),HideResult=true); + final parameter Integer nout=nin + "Output array dimension"; + parameter Real holdDuration( + final quantity="Time", + final unit="s")=1 + "Hold duration"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Connector of Real input signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout] + "Connector of Integer output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); +protected + Real time_change; +initial algorithm + y := u; + time_change := time; +algorithm + when Modelica.Math.BooleanVectors.anyTrue({ + u[i] <> pre(y[i]) for i in 1:nin}) and time - time_change > holdDuration then + y := u; + time_change := time; + end when; + + annotation ( + defaultComponentName="hol", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

    +This blocks updates the value of the output array to +match the value of the input array only if the time +since the last update exceeds holdDuration. +Otherwise, the value of the output array is kept equal +to its value at the time of the last update. +At initial time, the value of the output array is set +to the value of the input array, and this is considered +as the first update time. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end IntegerArrayHold; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo new file mode 100644 index 00000000000..07425bba1bf --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo @@ -0,0 +1,453 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block ModeCondenserLoop + "Block that determines the condenser loop mode" + + parameter Modelica.Units.SI.MassFlowRate mConWatHexCoo_flow_nominal + "Design total CW mass flow rate through condenser barrels (all units)"; + parameter Modelica.Units.SI.HeatFlowRate QHeaPum_flow_nominal + "Design heat flow from heat pumps (all units)"; + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] + "Tank temperature setpoints: 2 cycles with 2 setpoints" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Real fraUslTan(unit="1") + "Useless fraction of TES" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Integer nTTan=2 + "Number of tank temperature points" + annotation (Dialog(connectorSizing=true),HideResult=true); + parameter Real ratFraChaTanLim[5](each final unit="1/h")= + {-0.3, -0.2, -0.15, -0.10, -0.08} + "Rate of change of tank charge fraction (over 10, 30, 120, 240, and 360') that triggers Charge Assist (<0)"; + parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + "Specific heat capacity of the fluid"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatOutTan_flow( + final unit="kg/s") + "Mass flow rate out of lower port of TES tank (>0 when charging)" + annotation (Placement(transformation(extent={{-240,40},{-200,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTan[nTTan]( + each final unit="K", + each displayUnit="degC") + "TES tank temperature" + annotation (Placement( + transformation(extent={{-240,0},{-200,40}}), iconTransformation( + extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput mode( + final min=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.tankCharge, + final max=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Condenser loop operating mode" + annotation (Placement(transformation(extent={{200,-20},{240,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Real fraChaTanIns(final unit="1")= + (sum(TTan .- min(TTanSet)) / (max(TTanSet) - min(TTanSet)) / nTTan - fraUslTan) / + (1 - fraUslTan) + "Tank charge fraction (instantaneous value)"; + Real ratFraChaTan[5](each final unit="1/h")= + {(fraChaTan.y - delay(fraChaTan.y, x)) / x * 3600 for x in + {10, 30, 120, 240, 360} .* 60} + "Rate of change of tank charge fraction (over 10, 30, 120, 240, and 360')"; + Real nHouToWarUp(final unit="h") = noEvent( + if mod(time, 24 * 3600) > 4 * 3600 + then 4 + 24 - mod(time, 24 * 3600) / 3600 + else 4 - mod(time, 24 * 3600) / 3600) + "Number of hours between next warmup period (set at 4 AM by default)"; + + Modelica.Blocks.Sources.RealExpression ratFraChaTanVal[5](final y=ratFraChaTan) + "Rate of change of tank charge fraction" + annotation (Placement(transformation(extent={{-150,-50},{-130,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr[5]( + final t=ratFraChaTanLim, each h=1E-4) + "Compare rate of change to threshold" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim[5](each t=5*60) + "Condition is true for given time" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyEnaTru(nin=6) + "Any of the enable conditions is true" + annotation (Placement(transformation(extent={{10,-98},{30,-78}}))); + Modelica.Blocks.Sources.RealExpression varCriWarUp(y=1 - fraChaTan.y) + "Compute variable used to evaluate warmup criterion" + annotation (Placement(transformation(extent={{-150,-90},{-130,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.Greater criWarUp(h=1e-3) + "Enable criterion based on time to warmup" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Logical.And criWarUpAndChaLow + "Both enable criteria met" + annotation (Placement(transformation(extent={{-70,-90},{-50,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold criChaLow(t=0.97, h=1e-3) + "Low charge fraction criterion" + annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not enaFal[6] + "True if enabling condition is false" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd noEnaTruAndRatCon(nin=7) + "None of the enable conditions is true AND HR rate condition true" + annotation (Placement(transformation(extent={{10,-10},{30,10}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim2(t=15*60) + "None of the enabling conditions is true for given time" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criFlo(t=1E-3* + mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) + "Disable criterion based on flow rate" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criTem(t=max(TTanSet) + - 2, h=1e-3) + "Disable criterion based on temperature" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Buildings.Controls.OBC.CDL.Logical.And criFloAndTem + "Flow criterion and temperature criterion both true" + annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timCriFlo(t=5*60) + "Criterion true for given time" + annotation (Placement(transformation(extent={{-70,50},{-50,70}}))); + Buildings.Controls.OBC.CDL.Logical.Or disCha + "Any of the disabling conditions is true" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + Buildings.Controls.OBC.CDL.Logical.Latch enaCha "Enable charge assist mode" + annotation (Placement(transformation(extent={{70,-70},{90,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timNotCha(t=5*60) + annotation (Placement(transformation(extent={{10,150},{30,170}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timCriTem(t=5*60) + "Criterion true for given time" + annotation (Placement(transformation(extent={{-70,20},{-50,40}}))); + Buildings.Controls.OBC.CDL.Logical.Not criFraChaHig + "High charge fraction criterion" + annotation (Placement(transformation(extent={{-70,-130},{-50,-110}}))); + Buildings.Controls.OBC.CDL.Logical.And3 allEnaTru "All enable criteria true" + annotation (Placement(transformation(extent={{40,130},{60,150}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timCriFraChaHig(t=5*60) + annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Or criTemOrCriChaHig + "Temperature criterion or high charge fraction criterion true" + annotation (Placement(transformation(extent={{10,110},{30,130}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatHexCoo_flow(final unit="kg/s") + "CW mass flow rate through secondary (plant) side of HX" + annotation (Placement(transformation(extent={{-240,100},{-200,140}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold criFlo1(t=-1E-3* + mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timCriFlo1(t=60) + "Criterion true for given time" + annotation (Placement(transformation(extent={{-70,110},{-50,130}}))); + Buildings.Controls.OBC.CDL.Logical.Latch enaRej "Enable heat rejection mode" + annotation (Placement(transformation(extent={{80,90},{100,110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant modTan( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.tankCharge) + "Tank Charge/Discharge mode" + annotation (Placement(transformation(extent={{110,50},{130,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant modRej( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Heat rejection mode" + annotation (Placement(transformation(extent={{108,130},{128,150}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant modCha( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.chargeAssist) + "Charge assist mode" + annotation (Placement(transformation(extent={{110,-50},{130,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi + annotation (Placement(transformation(extent={{170,-10},{190,10}}))); + Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 + annotation (Placement(transformation(extent={{110,90},{130,110}}))); + Modelica.Blocks.Sources.RealExpression varCriWarUp1( + final y=0.08*abs(nHouToWarUp - 2)) + "Compute variable used to evaluate warmup criterion" + annotation (Placement(transformation(extent={{-180,-98},{-160,-78}}))); + Buildings.Controls.OBC.CDL.Logical.Not isChaDis "Charge assist mode disabled" + annotation (Placement(transformation(extent={{-20,150},{0,170}}))); + Buildings.Controls.OBC.CDL.Logical.And enaAndNotDis + "Reset enable condition when disable is true to trigger latch block when (enable, disable) becomes (true, false) again" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Not notDis "Not disabled" + annotation (Placement(transformation(extent={{10,-70},{30,-50}}))); + Buildings.Controls.OBC.CDL.Logical.And enaAndNotDis1 + "Reset enable condition when disable is true to trigger latch block when (enable, disable) becomes (true, false) again" + annotation (Placement(transformation(extent={{50,100},{70,120}}))); + Buildings.Controls.OBC.CDL.Logical.Not notDis1 "Not disabled" + annotation (Placement(transformation(extent={{10,84},{30,104}}))); + Buildings.Controls.OBC.CDL.Continuous.MovingAverage fraChaTan(delta=5*60) + "Moving mean of tank charge fraction used for control logic" + annotation (Placement(transformation(extent={{-150,-130},{-130,-110}}))); + Modelica.Blocks.Sources.RealExpression fraChaTanVal(y=fraChaTanIns) + "Instantaneous tank charge fraction" + annotation (Placement(transformation(extent={{-180,-130},{-160,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim1(t=5*60) + "Condition is true for given time" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatCon_flow(final unit="kg/s") + "CW condenser loop mass flow rate" annotation (Placement( + transformation(extent={{-240,-180},{-200,-140}}), + iconTransformation(extent={{-140, + -60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConChiLvg(final unit="K", + displayUnit="degC") "Chiller and HRC leaving CW temperature" + annotation (Placement(transformation(extent={{-240,-200},{-200,-160}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConRet(final unit="K", + displayUnit="degC") "CWC return temperature" + annotation (Placement(transformation(extent={{-240,-220},{-200,-180}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTem "Compute Delta-T" + annotation (Placement(transformation(extent={{-170,-200},{-150,-180}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply floOutHeaPum + "Compute HP heat flow rate output " + annotation (Placement(transformation(extent={{-130,-190},{-110,-170}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter floCap(final k= + cp_default) + "Compute capacity flow rate" + annotation (Placement(transformation(extent={{-188,-170},{-168,-150}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract delTem1 "Compute Delta-T" + annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter floCap1(final k= + cp_default) + "Compute capacity flow rate" + annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply floChaTan + "Compute tank charge rate" + annotation (Placement(transformation(extent={{-150,-10},{-130,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract ratHeaRec + "Compute heat recovery rate" + annotation (Placement(transformation(extent={{-90,-190},{-70,-170}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criRatHeaRec(final t= + 1E-4*(mConWatHexCoo_flow_nominal*(TTanSet[1, 2] - TTanSet[1, 1])*4184 + - QHeaPum_flow_nominal), final h=1E-4*(mConWatHexCoo_flow_nominal*( + TTanSet[1, 2] - TTanSet[1, 1])*4184 - QHeaPum_flow_nominal)/2) + "Disable criterion based on heat recovery rate" + annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); +equation + connect(ratFraChaTanVal.y, lesThr.u) + annotation (Line(points={{-129,-40},{-102,-40}}, + color={0,0,127})); + connect(criWarUp.y, criWarUpAndChaLow.u1) + annotation (Line(points={{-78,-80},{-72,-80}}, color={255,0,255})); + connect(criChaLow.y, criWarUpAndChaLow.u2) annotation (Line(points={{-78,-120}, + {-74,-120},{-74,-88},{-72,-88}}, color={255,0,255})); + connect(noEnaTruAndRatCon.y, tim2.u) + annotation (Line(points={{32,0},{38,0}}, color={255,0,255})); + connect(disCha.y, enaCha.clr) annotation (Line(points={{62,-30},{64,-30},{64,-44}, + {60,-44},{60,-66},{68,-66}}, color={255,0,255})); + connect(criTem.y, timCriTem.u) + annotation (Line(points={{-78,30},{-72,30}}, color={255,0,255})); + connect(criFlo.y, timCriFlo.u) + annotation (Line(points={{-78,60},{-72,60}}, color={255,0,255})); + connect(timCriFlo.passed, criFloAndTem.u1) annotation (Line(points={{-48,52},{ + -40,52},{-40,40},{-32,40}}, color={255,0,255})); + connect(timCriTem.passed, criFloAndTem.u2) annotation (Line(points={{-48,22}, + {-36,22},{-36,32},{-32,32}},color={255,0,255})); + connect(criChaLow.y, criFraChaHig.u) + annotation (Line(points={{-78,-120},{-72,-120}}, color={255,0,255})); + connect(criFloAndTem.y, disCha.u1) annotation (Line(points={{-8,40},{4,40},{4, + -30},{38,-30}}, color={255,0,255})); + connect(timNotCha.passed, allEnaTru.u1) annotation (Line(points={{32,152},{36, + 152},{36,148},{38,148}}, color={255,0,255})); + connect(criFraChaHig.y, timCriFraChaHig.u) + annotation (Line(points={{-48,-120},{-42,-120}}, color={255,0,255})); + connect(timCriFlo.passed, allEnaTru.u2) annotation (Line(points={{-48,52},{-40, + 52},{-40,140},{38,140}}, color={255,0,255})); + connect(criTemOrCriChaHig.y, allEnaTru.u3) annotation (Line(points={{32,120},{ + 36,120},{36,132},{38,132}}, color={255,0,255})); + connect(timCriTem.passed, criTemOrCriChaHig.u1) annotation (Line(points={{-48,22}, + {-36,22},{-36,120},{8,120}}, color={255,0,255})); + connect(timCriFraChaHig.passed, criTemOrCriChaHig.u2) annotation (Line(points={{-18, + -128},{0,-128},{0,112},{8,112}}, color={255,0,255})); + connect(criFlo1.y, timCriFlo1.u) + annotation (Line(points={{-78,120},{-72,120}}, color={255,0,255})); + connect(timCriFlo1.passed,enaRej. clr) annotation (Line(points={{-48,112},{-44, + 112},{-44,80},{76,80},{76,94},{78,94}}, color={255,0,255})); + connect(enaRej.y, intSwi1.u2) annotation (Line(points={{102,100},{108,100}}, + color={255,0,255})); + connect(modRej.y, intSwi1.u1) annotation (Line(points={{130,140},{140,140},{140, + 120},{104,120},{104,108},{108,108}}, + color={255,127,0})); + connect(modTan.y, intSwi1.u3) annotation (Line(points={{132,60},{140,60},{140, + 80},{104,80},{104,92},{108,92}}, + color={255,127,0})); + connect(intSwi.y, mode) + annotation (Line(points={{192,0},{220,0}}, color={255,127,0})); + connect(enaCha.y, intSwi.u2) annotation (Line(points={{92,-60},{100,-60},{100, + 0},{168,0}}, + color={255,0,255})); + connect(modCha.y, intSwi.u1) annotation (Line(points={{132,-40},{140,-40},{140, + 8},{168,8}}, color={255,127,0})); + connect(intSwi1.y, intSwi.u3) annotation (Line(points={{132,100},{144,100},{144, + -8},{168,-8}}, color={255,127,0})); + connect(varCriWarUp1.y, criWarUp.u2) annotation (Line(points={{-159,-88},{-102, + -88}}, color={0,0,127})); + connect(varCriWarUp.y, criWarUp.u1) + annotation (Line(points={{-129,-80},{-102,-80}}, color={0,0,127})); + connect(TTan[nTTan], criTem.u) annotation (Line(points={{-220,20},{-120,20},{ + -120,30},{-102,30}}, + color={0,0,127})); + connect(isChaDis.y, timNotCha.u) + annotation (Line(points={{2,160},{8,160}}, color={255,0,255})); + connect(enaCha.y, isChaDis.u) annotation (Line(points={{92,-60},{100,-60},{100, + 60},{-32,60},{-32,160},{-22,160}}, color={255,0,255})); + connect(mConWatHexCoo_flow, criFlo1.u) + annotation (Line(points={{-220,120},{-102,120}}, color={0,0,127})); + connect(mConWatOutTan_flow, criFlo.u) + annotation (Line(points={{-220,60},{-102,60}}, color={0,0,127})); + connect(disCha.y, notDis.u) annotation (Line(points={{62,-30},{64,-30},{64,-44}, + {4,-44},{4,-60},{8,-60}}, color={255,0,255})); + connect(notDis.y, enaAndNotDis.u1) annotation (Line(points={{32,-60},{36,-60}, + {36,-80},{38,-80}}, color={255,0,255})); + connect(enaAndNotDis.y, enaCha.u) annotation (Line(points={{62,-80},{64,-80},{ + 64,-60},{68,-60}}, color={255,0,255})); + connect(enaAndNotDis1.y, enaRej.u) annotation (Line(points={{72,110},{76,110}, + {76,100},{78,100}}, color={255,0,255})); + connect(allEnaTru.y, enaAndNotDis1.u1) annotation (Line(points={{62,140},{64,140}, + {64,126},{44,126},{44,110},{48,110}}, color={255,0,255})); + connect(notDis1.y, enaAndNotDis1.u2) annotation (Line(points={{32,94},{44,94}, + {44,102},{48,102}}, color={255,0,255})); + connect(timCriFlo1.passed, notDis1.u) annotation (Line(points={{-48,112},{-44, + 112},{-44,94},{8,94}}, color={255,0,255})); + connect(fraChaTanVal.y, fraChaTan.u) + annotation (Line(points={{-159,-120},{-152,-120}}, color={0,0,127})); + connect(fraChaTan.y, criChaLow.u) annotation (Line(points={{-128,-120},{-102,-120}}, + color={0,0,127})); + connect(lesThr.y, tim.u) + annotation (Line(points={{-78,-40},{-42,-40}}, color={255,0,255})); + connect(criWarUpAndChaLow.y, tim1.u) + annotation (Line(points={{-48,-80},{-42,-80}}, color={255,0,255})); + connect(enaAndNotDis.u2, anyEnaTru.y) + annotation (Line(points={{38,-88},{32,-88}}, color={255,0,255})); + connect(tim.passed, anyEnaTru.u[1:5]) annotation (Line(points={{-18,-48},{-6,-48}, + {-6,-86.25},{8,-86.25}}, + color={255,0,255})); + connect(tim1.passed, anyEnaTru.u[6]) + annotation (Line(points={{-18,-88},{8,-88},{8,-85.0833}}, + color={255,0,255})); + connect(lesThr.y, enaFal[1:5].u) annotation (Line(points={{-78,-40},{-60,-40}, + {-60,0},{-42,0}}, color={255,0,255})); + connect(criWarUpAndChaLow.y, enaFal[6].u) annotation (Line(points={{-48,-80},{ + -46,-80},{-46,0},{-42,0}}, color={255,0,255})); + connect(enaFal.y, noEnaTruAndRatCon.u[1:6]) + annotation (Line(points={{-18,0},{8,0},{8,2}}, + color={255,0,255})); + connect(TConWatConRet, delTem.u1) annotation (Line(points={{-220,-200},{-180,-200}, + {-180,-184},{-172,-184}}, color={0,0,127})); + connect(TConWatConChiLvg, delTem.u2) annotation (Line(points={{-220,-180},{-190, + -180},{-190,-196},{-172,-196}}, color={0,0,127})); + connect(mConWatCon_flow, floCap.u) + annotation (Line(points={{-220,-160},{-190,-160}}, color={0,0,127})); + connect(floCap.y, floOutHeaPum.u1) annotation (Line(points={{-166,-160},{-140, + -160},{-140,-174},{-132,-174}}, color={0,0,127})); + connect(delTem.y, floOutHeaPum.u2) annotation (Line(points={{-148,-190},{-140, + -190},{-140,-186},{-132,-186}}, color={0,0,127})); + connect(mConWatOutTan_flow, floCap1.u) annotation (Line(points={{-220,60},{-194, + 60},{-194,40},{-182,40}}, color={0,0,127})); + connect(floCap1.y,floChaTan. u1) annotation (Line(points={{-158,40},{-156,40}, + {-156,6},{-152,6}}, color={0,0,127})); + connect(delTem1.y,floChaTan. u2) annotation (Line(points={{-158,0},{-154,0},{-154, + -6},{-152,-6}}, color={0,0,127})); + connect(TTan[1], delTem1.u1) annotation (Line(points={{-220,15},{-220,16},{-218, + 16},{-218,20},{-188,20},{-188,6},{-182,6}}, color={0,0,127})); + connect(TTan[nTTan], delTem1.u2) annotation (Line(points={{-220,20},{-208,20}, + {-208,20},{-192,20},{-192,-6},{-182,-6}}, + color={0,0,127})); + connect(floOutHeaPum.y, ratHeaRec.u2) annotation (Line(points={{-108,-180},{-100, + -180},{-100,-186},{-92,-186}}, color={0,0,127})); + connect(floChaTan.y, ratHeaRec.u1) annotation (Line(points={{-128,0},{-120,0}, + {-120,-160},{-100,-160},{-100,-174},{-92,-174}}, color={0,0,127})); + connect(criRatHeaRec.y, noEnaTruAndRatCon.u[7]) annotation (Line(points={{-38, + -180},{-12,-180},{-12,3},{8,3}}, color={255,0,255})); + connect(tim2.passed, disCha.u2) annotation (Line(points={{62,-8},{64,-8},{64,-14}, + {34,-14},{34,-38},{38,-38}}, color={255,0,255})); + connect(ratHeaRec.y, criRatHeaRec.u) + annotation (Line(points={{-68,-180},{-62,-180}}, color={0,0,127})); + annotation ( + defaultComponentName="modConLoo", + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram(coordinateSystem(extent={{-200,-220},{200, + 220}})), + Documentation(info=" +

    Tank charge fraction and rate of change

    +

    +The tank charge fraction fraChaTan (-) is computed as the +5-minute moving average of the following expression: +(∑i (TTani - min(TTanSet)) / +(max(TTanSet) - min(TTanSet)) / nTTan - fraUslTan) / +(1 - fraUslTan), where +TTani is the measurement from the i-th temperature sensor +along the vertical axis of the tank, +TTanSet are the tank temperature setpoints (two values for each +tank cycle), +nTTan is the number of temperature sensors along the vertical axis of the tank, +fraUslTan is the useless fraction of the tank which is computed as follows: +fraUslTan = ((max(TTanSet[2]) - min(TTanSet)) / (max(TTanSet) - min(TTanSet)) * hThe + hHee) / hTan, +where hThe is the height of the thermocline (m by default) +which is considered useless only during the second tank cycle, +hHee is the upper and lower heel heights above and below the diffusers +(m by default), hTan is the tank height (used as an +approximation for the normal operating level of the tank at minimum +temperature). +

    +

    +The rate of change of the tank charge fraction ratFraChaTan (h-1) is computed +over several time periods (10, 30, 120, 240 +and 360 min) as: +ratFraChaTan(Δt) = (fraChaTan(t) - fraChaTan(t - Δt)) / Δt * 3600, +where Δt is the time period in seconds. +

    +

    Operating modes

    +

    +Three operating modes are defined within + +Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop. +

    +
    Charge Assist
    +

    +The mode is enabled whenever any of the following conditions +is true for min. +Any of the rates of change exceeds the values specified with the parameter +ratFraChaTanLim. +The tank charge fraction is lower than 97 % and +1 - fraChaTan > 0.08 * abs(nHouToWarUp - 2), where +fraChaTan is the tank charge fraction and +nHouToWarUp is the number +of hours between the present time and the start time of morning warmup (4 AM by default). +The 2-hour offset forces Charge Assist mode two hours before morning warmup +if the tank is not fully charged. +

    +

    +The mode is disabled whenever none of the Enable conditions is true for +15 min, +or the flow rate out of the lower port of the tank is positive for min +and the temperature at the bottom of the tank is higher than the maximum tank +temperature setpoint minus K for min. +

    +
    Heat Rejection
    +

    +The mode is enabled whenever all of the following conditions are true. +The Charge Assist mode is disabled for min. +The flow rate out of the lower port of the tank is positive for min. +The tank charge fraction is higher than 97 % for min +or the temperature at the bottom of the tank is higher than the maximum tank +temperature setpoint minus K for min. +

    +

    +The mode is disabled whenever there is reverse flow through the cooling +heat exchanger for min. +

    +
    Tank Charge/Discharge
    +

    +The mode is enabled whenever neither Charge Assist nor Heat Rejection mode is enabled. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ModeCondenserLoop; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeHeatRecoveryChiller.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeHeatRecoveryChiller.mo new file mode 100644 index 00000000000..d6857bdee4b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeHeatRecoveryChiller.mo @@ -0,0 +1,91 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block ModeHeatRecoveryChiller + "Block that computes the cascading cooling and direct HR switchover signals" + + parameter Integer nChiHea + "Number of HRC" + annotation(Evaluate=true); + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nCasCoo + "Number of units required to be operating in cascading cooling mode" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput nHeaCoo + "Number of HRC required to be operating in direct HR mode" + annotation ( + Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Coo[nChiHea] + "Command signal for cascading cooling mode" + annotation (Placement(transformation(extent={{100,40},{140,80}}), + iconTransformation(extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1HeaCoo[nChiHea] + "Command signal for direct HR mode" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), + iconTransformation(extent={{100,-80},{140,-40}}))); +protected + Integer lasTruIdx; + Integer counter; +algorithm + y1Coo := fill(false, nChiHea); + y1HeaCoo := fill(false, nChiHea); + lasTruIdx := 0; + counter := 1; + for i in 1:nChiHea loop + if counter > nHeaCoo then + break; + end if; + if i > nCasCoo then + y1HeaCoo[nChiHea - i + 1] := true; + counter := counter + 1; + end if; + end for; + for i in 1:nChiHea loop + if y1HeaCoo[i] then + lasTruIdx := i; + end if; + end for; + counter := 1; + for i in 1:nChiHea loop + if counter > nCasCoo then + break; + end if; + y1Coo[nChiHea - i + 1] := true; + counter := counter + 1; + end for; + + annotation ( + defaultComponentName="idxHeaCoo", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

    +This block computes the command signals to the HRCs to initiate +the switchover into either cascading cooling mode (with the evaporator +indexed to the CHW loop and the condenser indexed to the CW loop) +or direct heat recovery mode (with the evaporator +indexed to the CHW loop and the condenser indexed to the HW loop). +Switching a HRC to cascading cooling mode is done starting from the unit nearest +to the CW interconnection, that is the unit with the highest index. +Switching a HRC to direct heat recovery mode is done starting from the unit nearest +to the CW interconnection and that is not operating in cascading cooling, +that is the unit with the highest index below the lowest index of HRCs operating +in cascading cooling mode. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ModeHeatRecoveryChiller; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/PartialController.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/PartialController.mo new file mode 100644 index 00000000000..61a4a4c4965 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/PartialController.mo @@ -0,0 +1,657 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block PartialController "Interface class for plant controller" + + parameter Integer nChi(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Integer nPumChiWat(final min=1, start=1) + "Number of CHW pumps operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Modelica.Units.SI.Temperature TChiWatSup_nominal + "Design (minimum) CHW supply temperature" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + + parameter Integer nChiHea(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Integer nPumHeaWat(final min=1, start=1) + "Number of HW pumps operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Modelica.Units.SI.Temperature THeaWatSup_nominal + "Design (maximum) HW supply temperature" + annotation (Dialog(group="HW loop and heat recovery chillers")); + + parameter Integer nHeaPum(final min=1, start=1) + "Number of heat pumps operating at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + parameter Integer nPumConWatCon(final min=1, start=1) + "Number of CW pumps serving condenser barrels at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + parameter Integer nPumConWatEva(final min=1, start=1) + "Number of CW pumps serving evaporator barrels at design conditions" + annotation (Dialog(group="CW loop, TES tank and heat pumps"), + Evaluate=true); + + parameter Integer nCoo(final min=1, start=1) + "Number of cooling tower cells operating at design conditions" + annotation (Dialog(group="Cooling tower loop"), + Evaluate=true); + parameter Integer nPumConWatCoo(final min=1, start=1) + "Number of CW pumps serving cooling towers at design conditions" + annotation (Dialog(group="Cooling tower loop"), + Evaluate=true); + + parameter Modelica.Units.SI.HeatFlowRate QChiWatChi_flow_nominal + "Cooling design heat flow rate of cooling-only chillers (all units)" + annotation (Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.HeatFlowRate QHeaPum_flow_nominal + "Heating design heat flow rate of heat pumps (all units)" + annotation (Dialog(group="CW loop, TES tank and heat pumps")); + parameter Real PLRStaTra(final unit="1", final min=0, final max=1) = 0.85 + "Part load ratio triggering stage transition"; + parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal + "Cooling design heat flow rate of HRC in cascading cooling mode (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal_approx + "Cooling design heat flow rate of HRC in cascading cooling mode (all units), approximate for scaling" + annotation (Dialog(group="HW loop and heat recovery chillers")); + final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= + QChiWatChi_flow_nominal+QChiWatCasCoo_flow_nominal + "Plant cooling design heat flow rate (all units)"; + parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal + "Heating design heat flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + "Specific heat capacity of the fluid"; + + parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0) + "CHW design mass flow rate (all units)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpChiWatSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) CHW differential pressure setpoint" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal + "HW design mass flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpHeaWatSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) HW differential pressure setpoint" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mConWatCon_flow_nominal( + final min=0) + "Design total CW mass flow rate through condenser barrels (all units)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.MassFlowRate mConWatEva_flow_nominal( + final min=0) + "Design total CW mass flow rate through evaporator barrels (all units)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal + "Chiller CHW design mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_min + "Chiller CHW minimum mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mConWatChi_flow_nominal + "Chiller CW design mass flow rate (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_nominal + "HRC CHW design mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_min + "HRC CHW minimum mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mConWatChiHea_flow_nominal + "HRC CW design mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mHeaWatChiHea_flow_min + "Chiller HW minimum mass flow rate (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + + parameter Modelica.Units.SI.PressureDifference dpEvaChi_nominal( + final min=0, + displayUnit="Pa") + "Chiller evaporator design pressure drop (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpValEvaChi_nominal( + final min=0, + displayUnit="Pa") + "Chiller evaporator isolation valve design pressure drop (each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpEvaChiHea_nominal( + final min=0, + displayUnit="Pa") + "Design chiller evaporator pressure drop (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpValEvaChiHea_nominal( + final min=0, + displayUnit="Pa") + "HRC evaporator isolation valve design pressure drop (each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + + parameter Modelica.Units.SI.PressureDifference dpConWatConSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) CW condenser loop differential pressure setpoint" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Modelica.Units.SI.PressureDifference dpConWatEvaSet_max( + final min=0, + displayUnit="Pa") + "Design (maximum) CW evaporator loop differential pressure setpoint" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] + "Tank temperature setpoints: 2 cycles with 2 setpoints" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Real fraUslTan(final unit="1", final min=0, final max=1) + "Useless fraction of TES" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Integer nTTan(final min=0)=0 + "Number of tank temperature points" + annotation (Dialog(group="CW loop, TES tank and heat pumps", connectorSizing=true),HideResult=true); + parameter Real ratFraChaTanLim[5](each final unit="1/h")= + {-0.3, -0.2, -0.15, -0.10, -0.08} + "Rate of change of tank charge fraction (over 10, 30, 120, 240, and 360') that triggers Charge Assist (<0)" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_min + "Minimum chiller lift at minimum load" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.TemperatureDifference dTLifChi_nominal + "Design chiller lift" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + + parameter Modelica.Units.SI.TemperatureDifference dTHexCoo_nominal + "Design heat exchanger approach" + annotation (Dialog(group="Cooling tower loop")); + + parameter Modelica.Units.SI.Time riseTimePum=30 + "Pump rise time of the filter (time to reach 99.6 % of the speed)" + annotation ( + Dialog( + tab="Dynamics", + group="Filtered speed")); + parameter Modelica.Units.SI.Time riseTimeVal=120 + "Pump rise time of the filter (time to reach 99.6 % of the opening)" + annotation ( + Dialog( + tab="Dynamics", + group="Filtered opening")); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Coo + "Cooling enable signal" + annotation (Placement(transformation(extent={{-300,420},{-260,460}}), + iconTransformation(extent={{-260,340},{-220,380}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Hea + "Heating enable signal" + annotation (Placement(transformation(extent={{-300,380},{-260,420}}), + iconTransformation(extent={{-260,320},{-220,360}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet(final unit="K", + displayUnit="degC") "CHW supply temperature setpoint" + annotation (Placement(transformation(extent={{-300,340},{-260,380}}), + iconTransformation(extent={{-260,300},{-220,340}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSupSet(final unit="K", + displayUnit="degC") + "HW supply temperature setpoint" + annotation (Placement(transformation(extent={{-300,320},{-260,360}}), + iconTransformation(extent={{-260,280},{-220,320}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaChi[nChi] + "Cooling-only chiller evaporator isolation valve commanded position" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,320}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,270}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConChi[nChi]( + each final unit="1") + "Cooling-only chiller condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,300}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,250}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Chi[nChi] + "Cooling-only chiller On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,340}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,290}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumChiWat[nPumChiWat] + "CHW pump Start command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,260}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,230}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumChiWat( + final unit="1") + "CHW pump speed signal" + annotation (Placement( + transformation(extent={{260,220},{300,260}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,210}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaChiHea[nChiHea]( + each final unit="1") "HRC evaporator isolation valve commanded position" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,80}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,80}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1ChiHea[nChiHea] + "HRC On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,160}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1CooChiHea[nChiHea] + "HRC cooling mode switchover command: true for cooling, false for heating" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,140}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,140}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConChiHea[nChiHea]( + each final unit="1") "HRC condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,60}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,60}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumHeaWat[nPumHeaWat] + "HW pump Start command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-20}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumHeaWat( + final unit="1") + "HW pump speed signal" + annotation (Placement( + transformation(extent={{260,-60},{300,-20}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-40}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValChiWatMinByp( + final unit="1") + "CHW minimum flow bypass valve control signal" + annotation (Placement( + transformation(extent={{260,180},{300,220}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,190}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValHeaWatMinByp( + final unit="1") "HW minimum flow bypass valve control signal" + annotation (Placement( + transformation(extent={{260,-100},{300,-60}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-60}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatCon[nPumConWatCon] + "CW pump serving condenser barrels Start command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-120}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-90}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumConWatCon( + final unit="1") + "CW pump serving condenser barrels Speed command" + annotation (Placement( + transformation(extent={{260,-160},{300,-120}},rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-110}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatEva[nPumConWatEva] + "CW pump serving evaporator barrels Start command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-130}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumConWatEva( + final unit="1") + "CW pump serving evaporator barrels Speed command" + annotation (Placement( + transformation(extent={{260,-200},{300,-160}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-150}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1HeaPum[nHeaPum] + "Heat pump On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-220}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-180}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput THeaPumSet( + final unit="K", displayUnit="degC") "Heat pump supply temperature setpoint" + annotation (Placement( + transformation(extent={{260,-260},{300,-220}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-200}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValBypTan( + final unit="1") "TES tank bypass valve commanded position" + annotation (Placement( + transformation(extent={{260,-300},{300,-260}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-320}))); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Coo[nCoo] + "Cooling tower Start command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-360}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-270}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCoo( + final unit="1") "Cooling tower fan speed command" + annotation (Placement(transformation( + extent={{260,-400},{300,-360}}, rotation=0), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-290}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatCoo[ + nPumConWatCoo] "Cooling tower pump Start command" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,-320}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-230}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TChiHeaSet[nChiHea]( + each final unit="K", each displayUnit="degC") + "HRC supply temperature setpoint" + annotation (Placement(transformation(extent={{260,80},{300,120}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,100}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1HeaCooChiHea[nChiHea] + "HRC direct heat recovery switchover command: true for direct HR, false for cascading" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,120}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet(final unit="Pa", + final min=0) "CHW differential pressure setpoint (for local dp sensor)" + annotation (Placement(transformation(extent={{-300,300},{-260,340}}), + iconTransformation(extent={{-260,260},{-220,300}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHeaWatSet(final unit="Pa", + final min=0) + "HW differential pressure setpoint (for local dp sensor)" + annotation (Placement(transformation(extent={{-300,280},{-260,320}}), + iconTransformation(extent={{-260,240},{-220,280}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat(final unit="Pa") + "CHW differential pressure (from local dp sensor)" + annotation (Placement(transformation(extent={{-300,-360},{-260,-320}}), + iconTransformation(extent={{-260,-320},{-220,-280}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHeaWat(final unit="Pa") + "HW differential pressure (from local dp sensor)" + annotation (Placement(transformation(extent={{-300,-380},{-260,-340}}), + iconTransformation(extent={{-260,-340},{-220,-300}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mChiWatPri_flow(final unit= + "kg/s") "Primary CHW mass flow rate" + annotation (Placement( + transformation(extent={{-300,-200},{-260,-160}}), + iconTransformation( + extent={{-260,-200},{-220,-160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mHeaWatPri_flow(final unit= + "kg/s") "Primary HW mass flow rate" annotation (Placement( + transformation(extent={{-300,-220},{-260,-180}}), + iconTransformation(extent={{-260, + -220},{-220,-180}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpConWatCon(final unit="Pa") + "CW condenser loop differential pressure" annotation (Placement( + transformation(extent={{-300,-400},{-260,-360}}), iconTransformation( + extent={{-260,-360},{-220,-320}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpConWatEva(final unit="Pa") + "CW evaporator loop differential pressure" annotation (Placement( + transformation(extent={{-300,-420},{-260,-380}}), iconTransformation( + extent={{-260,-380},{-220,-340}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatCon_flow(final unit= + "kg/s") "CW condenser loop mass flow rate" annotation (Placement( + transformation(extent={{-300,-260},{-260,-220}}), + iconTransformation(extent={{-260, + -240},{-220,-200}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatEva_flow(final unit= + "kg/s") "CW evaporator loop mass flow rate" annotation (Placement( + transformation(extent={{-300,-280},{-260,-240}}), + iconTransformation(extent={{-260, + -260},{-220,-220}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup(final unit="K", + displayUnit="degC") "CHW supply temperature " annotation ( + Placement(transformation(extent={{-300,240},{-260,280}}), + iconTransformation(extent={{-260,220},{-220,260}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatPriRet(final unit="K", + displayUnit="degC") "Primary CHW return temperature " annotation ( + Placement(transformation(extent={{-300,220},{-260,260}}), + iconTransformation(extent={{-260,200},{-220,240}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatPriRet(final unit="K", + displayUnit="degC") "Primary HW return temperature " annotation ( + Placement(transformation(extent={{-300,60},{-260,100}}), + iconTransformation(extent={{-260,40},{-220,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTan[nTTan]( + each final unit="K", + each displayUnit="degC") + "TES tank temperature" annotation (Placement( + transformation(extent={{-300,40},{-260,80}}), iconTransformation( + extent={{-260,20},{-220,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatHexCoo_flow(final unit + ="kg/s") "CW mass flow rate through secondary (plant) side of HX" + annotation (Placement(transformation(extent={{-300,-300},{-260,-260}}), + iconTransformation(extent={{-260,-280},{-220,-240}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatOutTan_flow(final unit + ="kg/s") + "Mass flow rate out of lower port of TES tank (>0 when charging)" + annotation (Placement(transformation(extent={{-300,-320},{-260,-280}}), + iconTransformation(extent={{-260,-300},{-220,-260}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChi_flow[nChi]( + each final unit="kg/s") + "Chiller evaporator barrel mass flow rate" annotation (Placement( + transformation(extent={{-300,-120},{-260,-80}}), + iconTransformation( + extent={{-260,-120},{-220,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConChi_flow[nChi]( + each final unit="kg/s") + "Chiller condenser barrel mass flow rate" annotation (Placement( + transformation(extent={{-300,-140},{-260,-100}}), + iconTransformation(extent={{-260, + -140},{-220,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChiHea_flow[nChiHea]( + each final unit="kg/s") + "HRC evaporator barrel mass flow rate" annotation ( + Placement(transformation(extent={{-300,-160},{-260,-120}}), + iconTransformation(extent={{-260,-160},{-220,-120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConChiHea_flow[nChiHea]( + each final unit="kg/s") + "HRC condenser barrel mass flow rate" annotation ( + Placement(transformation(extent={{-300,-180},{-260,-140}}), + iconTransformation(extent={{-260,-180},{-220,-140}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaSwiHea[nChiHea]( + each final unit="1") + "HRC evaporator switchover valve commanded position" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,40}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,40}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConSwiChiHea[nChiHea]( + each final unit="1") + "HRC condenser switchover valve commanded position" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,20}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEvaLvgChiHea[nChiHea]( + each final unit="K", each displayUnit="degC") + "HRC evaporator barrel leaving temperature" + annotation (Placement(transformation(extent={{-300,120},{-260,160}}), + iconTransformation(extent={{-260,100},{-220,140}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSup( + final unit="K", + displayUnit="degC") "HW supply temperature " annotation (Placement( + transformation(extent={{-300,80},{-260,120}}),iconTransformation(extent={{-260,60}, + {-220,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yPumConWatCoo + "Cooling tower pump speed command" annotation (Placement(transformation( + extent={{260,-360},{300,-320}}), iconTransformation(extent={{220,-270}, + {260,-230}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConChiEnt(final unit= + "K", displayUnit="degC") "Chiller and HRC entering CW temperature" + annotation (Placement(transformation(extent={{-300,20},{-260,60}}), + iconTransformation(extent={{-260,0},{-220,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConChiLvg(final unit= + "K", displayUnit="degC") "Chiller and HRC leaving CW temperature" + annotation (Placement(transformation(extent={{-300,0},{-260,40}}), + iconTransformation(extent={{-260,-20},{-220,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatCooSup(final unit="K", + displayUnit="degC") "Cooling tower loop CW supply temperature" + annotation (Placement(transformation(extent={{-300,-20},{-260,20}}), + iconTransformation(extent={{-260,-40},{-220,0}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatCooRet(final unit="K", + displayUnit="degC") "Cooling tower loop CW return temperature" + annotation (Placement(transformation(extent={{-300,-40},{-260,0}}), + iconTransformation(extent={{-260,-60},{-220,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatHexCooEnt(final unit="K", + displayUnit="degC") "HX entering CW temperature" annotation ( + Placement(transformation(extent={{-300,-60},{-260,-20}}), + iconTransformation(extent={{-260,-80},{-220,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatHexCooLvg(final unit="K", + displayUnit="degC") "HX leaving CW temperature" annotation ( + Placement(transformation(extent={{-300,-80},{-260,-40}}), + iconTransformation(extent={{-260,-100},{-220,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConEntChiHea[nChiHea](each final + unit="K", each displayUnit="degC") + "HRC condenser barrel entering temperature" annotation (Placement( + transformation(extent={{-300,160},{-260,200}}), iconTransformation( + extent={{-260,140},{-220,180}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConLvgChiHea[nChiHea](each final + unit="K", each displayUnit="degC") + "HRC condenser barrel leaving temperature" annotation (Placement( + transformation(extent={{-300,140},{-260,180}}), iconTransformation( + extent={{-260,120},{-220,160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatEvaEnt(final unit="K", + displayUnit="degC") "HRC evaporator entering CW temperature " annotation ( + Placement(transformation(extent={{-300,180},{-260,220}}), + iconTransformation(extent={{-260,160},{-220,200}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConWatEvaMix + "HRC evaporator CW mixing valve commanded position" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={280,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,0}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConRet(final unit + ="K", displayUnit="degC") "Condenser loop CW return temperature" + annotation (Placement(transformation(extent={{-300,200},{-260,240}}), + iconTransformation(extent={{-260,180},{-220,220}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConLvgChi[nChi](each final + unit="K", each displayUnit="degC") + "Chiller condenser barrel leaving temperature" annotation (Placement( + transformation(extent={{-300,100},{-260,140}}), iconTransformation( + extent={{-260,80},{-220,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConWatByp(final unit="1") + "CW chiller bypass valve control signal" annotation (Placement( + transformation(extent={{260,-440},{300,-400}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={240,-360}))); + annotation (Diagram(coordinateSystem(extent={{-260,-460},{260,460}})), Icon( + coordinateSystem(extent={{-220,-380},{220,380}}), + graphics={ Text( + extent={{-150,430},{150,390}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-220,-380},{220,380}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

    +This block serves as an interface class for the plant controller. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end PartialController; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StageIndex.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StageIndex.mo new file mode 100644 index 00000000000..64cde74e3dc --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StageIndex.mo @@ -0,0 +1,246 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block StageIndex + "Block that computes the stage index out of staging signals" + + parameter Integer nSta(start=1) + "Number of stages" + annotation(Evaluate=true); + parameter Modelica.Units.SI.Time tSta=0 + "Minimum runtime of each stage" + annotation(Evaluate=true); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Enable signal" + annotation (Placement( + transformation(extent={{-220,40},{-180,80}}),iconTransformation(extent={{-140,40}, + {-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Up + "Staging up signal" + annotation (Placement( + transformation(extent={{-220,-100},{-180,-60}}),iconTransformation(extent={{-140, + -20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Dow + "Staging down signal" + annotation (Placement( + transformation(extent={{-220,-140},{-180,-100}}), + iconTransformation(extent={{-140, + -78},{-100,-38}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput idxSta + "Stage index" + annotation (Placement(transformation(extent={{180,-20},{220,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput preIdxSta + "Left limit (in discrete-time) of stage index" + annotation (Placement( + transformation(extent={{180,-60},{220,-20}}), iconTransformation(extent={{100,-80}, + {140,-40}}))); + + Modelica.StateGraph.InitialStepWithSignal sta0( + final nOut=1, + final nIn=nSta+1) + "Stage 0: no unit" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + Modelica.StateGraph.StepWithSignal sta[nSta]( + each final nIn=2, each final nOut=3) + "Stage i" + annotation (Placement(transformation(extent={{-10,30},{10,50}}))); + Modelica.StateGraph.TransitionWithSignal enaLea( + final enableTimer=false) "Transition enabling lead unit" + annotation (Placement(transformation(extent={{-42,30},{-22,50}}))); + inner Modelica.StateGraph.StateGraphRoot stateGraphRoot "State graph root" + annotation (Placement(transformation(extent={{-10,128},{10,148}}))); + Modelica.StateGraph.TransitionWithSignal enaLag[nSta]( + each final enableTimer=false) + "Transition enabling lag unit" + annotation (Placement(transformation(extent={{90,30},{110,50}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim[nSta](each final t=tSta) + "Timer for minimum runtime" + annotation (Placement(transformation(extent={{10,-50},{30,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Timer tim0(final t=tSta) + "Timer for minimum runtime" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 "Timer for minimum runtime" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + Buildings.Controls.OBC.CDL.Logical.And andUp[nSta] + "Runtime criterion met AND staging up order" + annotation (Placement(transformation(extent={{50,-90},{70,-70}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep( + final nout=nSta) + "Replicate" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Logical.And andDow[nSta] + "Runtime criterion met AND staging down order" + annotation (Placement(transformation(extent={{50,-130},{70,-110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep1( + final nout=nSta) "Replicate" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Modelica.StateGraph.TransitionWithSignal disLag[nSta]( + each final enableTimer=false) + "Transition disabling lag unit" + annotation (Placement(transformation(extent={{110,10},{130,30}}))); + Modelica.StateGraph.TransitionWithSignal disAll[nSta]( + each final enableTimer=false) + "Transition disabling all units" + annotation (Placement(transformation(extent={{70,50},{90,70}}))); + Buildings.Controls.OBC.CDL.Logical.And andNotEna[nSta] + "Runtime criterion met AND enable signal false" + annotation (Placement(transformation(extent={{50,-50},{70,-30}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep2( + final nout=nSta) + "Replicate" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Not not1 "True if enable signal false" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + Modelica.Blocks.Sources.IntegerExpression calIdxSta(final y= + Modelica.Math.BooleanVectors.firstTrueIndex(sta.active)) + "Compute stage index" + annotation (Placement(transformation(extent={{140,-10},{160,10}}))); + Buildings.Controls.OBC.CDL.Logical.Edge edg + "Transition to stage 1 at enable time" + annotation (Placement(transformation(extent={{-130,70},{-110,90}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Transition to stage 1 at enable time or staging up order" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Modelica.Blocks.Sources.IntegerExpression calPre(final y=pre(idxSta)) + "Compute left limit of stage index" + annotation (Placement(transformation(extent={{140,-50},{160,-30}}))); + + Buildings.Controls.OBC.CDL.Logical.And upAndEna "Stage up only if enabled" + annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); + Buildings.Controls.OBC.CDL.Logical.And dowOrDis "Stage down if disabled" + annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); +initial equation + preIdxSta=0; +equation + for i in 1:(nSta - 1) loop + connect(enaLag[i].outPort, sta[i+1].inPort[1]) annotation (Line(points={{101.5, + 40},{110,40},{110,80},{-20,80},{-20,39.75},{-11,39.75}}, + color={0,0,0})); + connect(disLag[i+1].outPort, sta[i].inPort[2]) annotation (Line(points={{121.5, + 20},{130,20},{130,80},{-20,80},{-20,40.25},{-11,40.25}}, color={0,0,0})); + end for; + connect(enaLag[nSta].outPort, sta[nSta].inPort[2]) + annotation (Line(points={{101.5,40},{110,40},{110,80},{-20,80},{-20,40.25},{ + -11,40.25}}, color={0,0,0})); + connect(disAll.outPort, sta0.inPort[1:nSta]) + annotation (Line(points={{81.5,60},{90,60},{90,100},{-140,100},{-140,40},{ + -121,40}}, color={0,0,0})); + connect(sta0.outPort[1], enaLea.inPort) + annotation (Line(points={{-99.5,40},{-36,40}}, color={0,0,0})); + connect(enaLea.outPort, sta[1].inPort[1]) + annotation (Line(points={{-30.5,40},{-24,40},{-24,39.75},{-11,39.75}},color={0,0,0})); + + connect(disLag[1].outPort, sta0.inPort[nSta+1]) annotation (Line(points={{121.5, + 20},{130,20},{130,100},{-140,100},{-140,40},{-121,40}}, + color={0,0,0})); + connect(sta.outPort[1], disAll.inPort) annotation (Line(points={{10.5,39.8333}, + {20,39.8333},{20,60},{76,60}}, + color={0,0,0})); + connect(sta.outPort[2], enaLag.inPort) annotation (Line(points={{10.5,40},{96, + 40}}, color={0,0,0})); + connect(sta.outPort[3], disLag.inPort) annotation (Line(points={{10.5,40.1667}, + {20,40.1667},{20,20},{116,20}}, + color={0,0,0})); + + connect(sta.active, tim.u) + annotation (Line(points={{0,29},{0,-40},{8,-40}}, color={255,0,255})); + connect(sta0.active, tim0.u) annotation (Line(points={{-110,29},{-110,10},{ + -102,10}}, + color={255,0,255})); + connect(tim0.passed, and2.u2) + annotation (Line(points={{-78,2},{-62,2}}, color={255,0,255})); + connect(and2.y, enaLea.condition) + annotation (Line(points={{-38,10},{-32,10},{-32,28}}, color={255,0,255})); + connect(rep.y, andUp.u2) annotation (Line(points={{-38,-80},{34,-80},{34,-88}, + {48,-88}}, color={255,0,255})); + connect(andUp.y, enaLag.condition) + annotation (Line(points={{72,-80},{100,-80},{100,28}}, color={255,0,255})); + connect(tim.passed, andDow.u1) annotation (Line(points={{32,-48},{40,-48},{40, + -120},{48,-120}}, color={255,0,255})); + connect(rep1.y, andDow.u2) annotation (Line(points={{-38,-120},{36,-120},{36,-128}, + {48,-128}}, color={255,0,255})); + connect(tim.passed, andUp.u1) annotation (Line(points={{32,-48},{40,-48},{40,-80}, + {48,-80}}, color={255,0,255})); + connect(andDow.y, disLag.condition) annotation (Line(points={{72,-120},{120,-120}, + {120,8}}, color={255,0,255})); + connect(u1, not1.u) annotation (Line(points={{-200,60},{-170,60},{-170,-40},{ + -102,-40}}, + color={255,0,255})); + connect(not1.y, rep2.u) + annotation (Line(points={{-78,-40},{-62,-40}}, color={255,0,255})); + connect(rep2.y, andNotEna.u1) annotation (Line(points={{-38,-40},{-20,-40},{-20, + -20},{40,-20},{40,-40},{48,-40}}, color={255,0,255})); + connect(tim.passed, andNotEna.u2) + annotation (Line(points={{32,-48},{48,-48}}, color={255,0,255})); + connect(andNotEna.y, disAll.condition) + annotation (Line(points={{72,-40},{80,-40},{80,48}}, color={255,0,255})); + + connect(calIdxSta.y, idxSta) + annotation (Line(points={{161,0},{200,0}},color={255,127,0})); + connect(u1, edg.u) annotation (Line(points={{-200,60},{-170,60},{-170,80},{ + -132,80}}, + color={255,0,255})); + connect(edg.y, or2.u1) + annotation (Line(points={{-108,80},{-102,80}}, + color={255,0,255})); + connect(or2.y, and2.u1) annotation (Line(points={{-78,80},{-70,80},{-70,10},{ + -62,10}}, color={255,0,255})); + connect(calPre.y, preIdxSta) + annotation (Line(points={{161,-40},{200,-40}}, color={255,127,0})); + connect(u1, upAndEna.u2) annotation (Line(points={{-200,60},{-170,60},{-170, + -88},{-162,-88}}, color={255,0,255})); + connect(u1Up, upAndEna.u1) + annotation (Line(points={{-200,-80},{-162,-80}}, color={255,0,255})); + connect(upAndEna.y, rep.u) + annotation (Line(points={{-138,-80},{-62,-80}}, color={255,0,255})); + connect(dowOrDis.y, rep1.u) + annotation (Line(points={{-138,-120},{-62,-120}}, color={255,0,255})); + connect(u1Dow, dowOrDis.u1) + annotation (Line(points={{-200,-120},{-162,-120}}, color={255,0,255})); + connect(u1, dowOrDis.u2) annotation (Line(points={{-200,60},{-170,60},{-170, + -128},{-162,-128}}, color={255,0,255})); + connect(upAndEna.y, or2.u2) annotation (Line(points={{-138,-80},{-130,-80},{ + -130,60},{-106,60},{-106,72},{-102,72}}, + color={255,0,255})); + annotation ( + defaultComponentName="sta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-180,-180},{180,180}})), + Documentation(info=" +

    +This block is used to compute the stage index of the plant or +of multiple lead/lag units such as pump groups. +

    +

    +At initial time, stage #0 is active. +The transition to stage #1 is triggered when stage #0 has been active +for the minimum runtime and when either the Enable signal u1 +has a rising edge or when the stage up signal u1Up is true. +

    +

    +From stage #i, the transition to stage #i+1 (resp. i-1) is triggered +when stage #i has been active for the minimum runtime and when the +stage up signal u1Up (resp. stage down signal u1Dow) +is true. +From stage #i, the transition to stage #0 is triggered +when stage #i has been active for the minimum runtime and the Enable signal +u1 is false. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end StageIndex; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo new file mode 100644 index 00000000000..377c8958d66 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo @@ -0,0 +1,712 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block StagingPlant + "Block that computes plant stage and command signals for chillers and HRC" + + parameter Integer nChi(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Modelica.Units.SI.HeatFlowRate QChiWatChi_flow_nominal + "Cooling design heat flow rate of cooling-only chillers (all units)" + annotation (Dialog(group="CHW loop and cooling-only chillers")); + parameter Integer nChiHea(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Real PLRStaTra(unit="1")=0.85 + "Part load ratio triggering stage transition"; + parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal + "Cooling design heat flow rate of HRC in cascading cooling mode (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal_approx + "Cooling design heat flow rate of HRC in cascading cooling mode (all units), approximate for scaling" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal + "Heating design heat flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq + "Specific heat capacity of the fluid"; + + Buildings.Controls.OBC.CDL.Interfaces.RealInput mChiWatPri_flow( + final unit="kg/s") + "Primary CHW mass flow rate" + annotation (Placement(transformation(extent={{-280,80},{-240,120}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( + final unit="K", displayUnit="degC") "CHW supply temperature setpoint" + annotation (Placement(transformation( + extent={{-280,60},{-240,100}}), iconTransformation(extent={{-140,60}, + {-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatPriRet(final unit="K", + displayUnit="degC") "Primary CHW return temperature" annotation ( + Placement(transformation(extent={{-280,20},{-240,60}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mHeaWatPri_flow(final unit="kg/s") + "Primary HW mass flow rate" annotation (Placement(transformation(extent={{-280, + -100},{-240,-60}}),iconTransformation(extent={{-140,-60},{-100,-20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSupSet( + final unit="K", displayUnit="degC") + "HW supply temperature setpoint" annotation (Placement(transformation( + extent={{-280,-140},{-240,-100}}), + iconTransformation(extent={{-140,-80},{ + -100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatPriRet(final unit="K", + displayUnit="degC") "Primary HW return temperature" annotation (Placement( + transformation(extent={{-280,-180},{-240,-140}}), iconTransformation( + extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup(final unit="K", + displayUnit="degC") "CHW supply temperature" annotation (Placement( + transformation(extent={{-280,180},{-240,220}}), iconTransformation( + extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat(final unit="Pa") + "CHW loop differential pressure" + annotation ( + Placement(transformation(extent={{-280,240},{-240,280}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet(final unit="Pa") + "CHW loop differential pressure setpoint" + annotation ( + Placement(transformation(extent={{-280,260},{-240,300}}), + iconTransformation(extent={{-140,0},{-100,40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSup(final unit="K", + displayUnit="degC") "HW supply temperature" annotation (Placement( + transformation(extent={{-280,-240},{-240,-200}}), iconTransformation( + extent={{-140,-100},{-100,-60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHeaWat(final unit="Pa") + "HW loop differential pressure" annotation (Placement(transformation(extent + ={{-280,-300},{-240,-260}}), iconTransformation(extent={{-140,-160},{ + -100,-120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput dpHeaWatSet(final unit="Pa") + "HW loop differential pressure setpoint" annotation (Placement( + transformation(extent={{-280,-280},{-240,-240}}), iconTransformation( + extent={{-140,-140},{-100,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput QCooReq_flow(final unit="W") + "Plant required cooling capacity (>0)" annotation ( + Placement(transformation(extent={{240,160},{280,200}}), + iconTransformation(extent={{100,120},{140,160}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Coo + "Cooling enable signal" + annotation (Placement(transformation(extent={{-280,140},{-240,180}}), + iconTransformation(extent={{-140,122},{-100,162}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Hea + "Heating enable signal" + annotation (Placement(transformation(extent={{-280,120},{-240,160}}), + iconTransformation(extent={{-140,102},{-100,142}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Chi[nChi] + "Chiller On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,120}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,80}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1CooChiHea[nChiHea] + "HRC cooling mode switchover command: true for cooling, false for heating" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,40}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-80}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1ChiHea[nChiHea] + "HRC On/Off command" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-100}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-20}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1HeaCooChiHea[nChiHea] + "HRC cooling mode switchover command: true for cooling, false for heating" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-40}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-140}))); + + Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve(delta=300) + "Moving average" + annotation (Placement(transformation(extent={{-150,110},{-130,130}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply loaChiWat + "Compute total chiller load (>0)" + annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract dTChiWatPos + "Compute deltaT (>0)" + annotation (Placement(transformation(extent={{-210,70},{-190,90}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply loaHeaWat + "Compute total chiller load" + annotation (Placement(transformation(extent={{-180,-130},{-160,-110}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract dTHeaWat "Compute deltaT" + annotation (Placement(transformation(extent={{-220,-150},{-200,-130}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep(final nout= + nChi) "Replicate" + annotation (Placement(transformation(extent={{180,110},{200,130}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold cmdChi[nChi](final + t={i for i in 1:nChi}) + "Compute chiller On/Off command from number of units to be commanded On" + annotation (Placement(transformation(extent={{210,110},{230,130}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter timCp(final k= + cp_default) "Scale" + annotation (Placement(transformation(extent={{-210,130},{-190,150}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter timCp1(final k= + cp_default) "Scale" + annotation (Placement(transformation(extent={{-220,-90},{-200,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve1(delta=300) + "Moving average" + annotation (Placement(transformation(extent={{-150,-130},{-130,-110}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep5(final nout= + nChiHea) + "Replicate" + annotation (Placement(transformation(extent={{180,-110},{200,-90}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold cmdChiHea[nChiHea]( + final t={i for i in 1:nChiHea}) + "Compute chiller On/Off command from number of units to be commanded On" + annotation (Placement(transformation(extent={{210,-110},{230,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Subtract numChiHeaCoo + "Number of HRC required in direct HR mode" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,-20}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant numChiHea(final k= + nChiHea) "Number of HRC" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + + Buildings.Controls.OBC.CDL.Integers.Add nChiHeaAndCooUnb + "Number of HRC required to meet heating and cooling load - Unbounded" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,0}))); + Buildings.Controls.OBC.CDL.Integers.Subtract numChiCasCoo + "Number of HRC required in cascading cooling" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + ModeHeatRecoveryChiller modHeaCoo(final nChiHea=nChiHea) + "Compute the cascading cooling and direct HR switchover signals" + annotation (Placement(transformation(extent={{180,-10},{200,10}}))); + + Buildings.Controls.OBC.CDL.Integers.Min nChiHeaHeaAndCoo + "Number of HRC required to meet heating and cooling load - Bounded by number of HRC" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,-40}))); + + Buildings.Controls.OBC.CDL.Continuous.Subtract errTChiWatSup + "Compute tracking error" + annotation (Placement(transformation(extent={{-200,200},{-180,220}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract errDpChiWat + "Compute tracking error" + annotation (Placement(transformation(extent={{-200,250},{-180,270}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmpErrLim(t=-1, h=1E-4) + "Check tracking error limit" + annotation (Placement(transformation(extent={{-170,200},{-150,220}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpErrLim1(t=1.5E4, h=1E-1) + "Check tracking error limit" + annotation (Placement(transformation(extent={{-170,250},{-150,270}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim(t=15*60) + "Timer for error exceeding error limit" + annotation (Placement(transformation(extent={{-110,200},{-90,220}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim1(t=15*60) + "Timer for error exceeding error limit" + annotation (Placement(transformation(extent={{-110,250},{-90,270}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 "Failsafe condition to stage up" + annotation (Placement(transformation(extent={{-70,220},{-50,240}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Apply failsafe condition only in stage >= 1" + annotation (Placement(transformation(extent={{-140,250},{-120,270}}))); + Buildings.Controls.OBC.CDL.Logical.And and3 + "Apply failsafe condition only in stage >= 1" + annotation (Placement(transformation(extent={{-140,200},{-120,220}}))); + StageIndex staCoo(final nSta=nChi + nChiHea, tSta=15*60) + "Compute cooling stage" + annotation (Placement(transformation(extent={{50,144},{70,164}}))); + Modelica.Blocks.Sources.RealExpression capCoo(final y=abs(PLRStaTra*(min(nChi, + staCoo.preIdxSta)/nChi*QChiWatChi_flow_nominal + max(0, staCoo.preIdxSta + - nChi)/nChiHea*QChiWatCasCoo_flow_nominal))) + "Total capacity at current stage (>0) times stage-up PLR limit " + annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Greater cmpOPLRLimUp(h=-1E-4*( + QChiWatChi_flow_nominal + QChiWatCasCoo_flow_nominal_approx)/2) + "Check OPLR limit" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim(t=15*60) + "Timer for OPLR exceeding limit" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + Buildings.Controls.OBC.CDL.Logical.Or or1 + "Failsafe condition or efficiency condition to stage up" + annotation (Placement(transformation(extent={{0,130},{20,150}}))); + Buildings.Controls.OBC.CDL.Integers.Min numOpeChi + "Number of operating chillers" + annotation (Placement(transformation(extent={{90,110},{110,130}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant numChi(final k=nChi) + "Number of chillers" + annotation (Placement(transformation(extent={{50,90},{70,110}}))); + Buildings.Controls.OBC.CDL.Integers.Subtract numOpeCooChiHea + "Number of HRC required for cooling" + annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); + Modelica.Blocks.Sources.RealExpression capHea(final y=PLRStaTra*staHea.preIdxSta + /nChiHea*QHeaWat_flow_nominal) + "Total capacity at current stage times stage-up PLR limit " + annotation (Placement(transformation(extent={{-120,-150},{-100,-130}}))); + Buildings.Controls.OBC.CDL.Continuous.Greater cmpOPLRLimUp1(h=1E-1) + "Check OPLR limit" + annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim1(t=15*60) + "Timer for OPLR exceeding limit" + annotation (Placement(transformation(extent={{-50,-130},{-30,-110}}))); + StageIndex staHea(final nSta=nChiHea, tSta=15*60) "Compute heating stage" + annotation (Placement(transformation(extent={{50,-130},{70,-110}}))); + Modelica.Blocks.Sources.RealExpression capHeaLow(final y=PLRStaTra*max(0, + staHea.preIdxSta - 1)/nChiHea*QHeaWat_flow_nominal) + "Total capacity at next lower stage times stage-down PLR limit " + annotation (Placement(transformation(extent={{-120,-178},{-100,-158}}))); + Buildings.Controls.OBC.CDL.Continuous.Less cmpOPLRLimDow(h=1E-1) + "Check OPLR limit" + annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim2(t=15*60) + "Timer for OPLR exceeding limit" + annotation (Placement(transformation(extent={{-50,-170},{-30,-150}}))); + Modelica.Blocks.Sources.RealExpression capCooLow(final y=abs(PLRStaTra*(min( + nChi, max(0, staCoo.preIdxSta - 1))/nChi*QChiWatChi_flow_nominal + max( + 0, staCoo.preIdxSta - 1 - nChi)/nChiHea*QChiWatCasCoo_flow_nominal))) + "Total capacity at next lower stage (>0) times stage-down PLR limit " + annotation (Placement(transformation(extent={{-120,62},{-100,82}}))); + Buildings.Controls.OBC.CDL.Continuous.Less cmpOPLRLimDow1(h=-1E-4*( + QChiWatChi_flow_nominal + QChiWatCasCoo_flow_nominal_approx)/2) + "Check OPLR limit" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim3(t=15*60) + "Timer for OPLR exceeding limit" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Controls.OBC.CDL.Logical.Not notFail + "Failsafe conditions are not true" + annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); + Buildings.Controls.OBC.CDL.Logical.And dowAndNotFail + "No stage up failsafe condition and efficiency condition to stage down" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract errTChiWatSup1 + "Compute tracking error" + annotation (Placement(transformation(extent={{-200,-230},{-180,-210}}))); + Buildings.Controls.OBC.CDL.Continuous.Subtract errDpHeaWat + "Compute tracking error" + annotation (Placement(transformation(extent={{-200,-290},{-180,-270}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold + cmpErrLim2(t=+1, h=1E-4) + "Check tracking error limit" + annotation (Placement(transformation(extent={{-170,-230},{-150,-210}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpErrLim3(t=1.5E4, h=1E-1) + "Check tracking error limit" + annotation (Placement(transformation(extent={{-170,-290},{-150,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim2(t=15*60) + "Timer for error exceeding error limit" + annotation (Placement(transformation(extent={{-110,-230},{-90,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim3(t=15*60) + "Timer for error exceeding error limit" + annotation (Placement(transformation(extent={{-110,-290},{-90,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Or or3 "Failsafe condition to stage up" + annotation (Placement(transformation(extent={{-70,-270},{-50,-250}}))); + Buildings.Controls.OBC.CDL.Logical.And and1 + "Apply failsafe condition only in stage >= 1" + annotation (Placement(transformation(extent={{-140,-290},{-120,-270}}))); + Buildings.Controls.OBC.CDL.Logical.And and4 + "Apply failsafe condition only in stage >= 1" + annotation (Placement(transformation(extent={{-140,-230},{-120,-210}}))); + Buildings.Controls.OBC.CDL.Logical.Not notFail1 + "Failsafe conditions are not true" + annotation (Placement(transformation(extent={{-30,-230},{-10,-210}}))); + + Buildings.Controls.OBC.CDL.Logical.Or or4 + "Failsafe condition or efficiency condition to stage up" + annotation (Placement(transformation(extent={{10,-130},{30,-110}}))); + Buildings.Controls.OBC.CDL.Logical.And dowAndNotFail1 + "No stage up failsafe condition and efficiency condition to stage down" + annotation (Placement(transformation(extent={{10,-170},{30,-150}}))); + IntegerArrayHold hol(holdDuration=15*60, nin=4) + "Minimum plant stage runtime (needed because cooling and heating stage runtimes are handled separately)" + annotation (Placement(transformation(extent={{130,-10},{150,10}}))); + +equation + connect(dTChiWatPos.y, loaChiWat.u2) annotation (Line(points={{-188,80},{-186, + 80},{-186,114},{-182,114}}, + color={0,0,127})); + connect(dTHeaWat.y, loaHeaWat.u2) annotation (Line(points={{-198,-140},{-186, + -140},{-186,-126},{-182,-126}}, + color={0,0,127})); + connect(THeaWatSupSet, dTHeaWat.u1) annotation (Line(points={{-260,-120},{ + -230,-120},{-230,-134},{-222,-134}}, color={0,0,127})); + connect(THeaWatPriRet, dTHeaWat.u2) annotation (Line(points={{-260,-160},{ + -226,-160},{-226,-146},{-222,-146}}, + color={0,0,127})); + connect(rep.y, cmdChi.u) + annotation (Line(points={{202,120},{208,120}}, + color={255,127,0})); + connect(mChiWatPri_flow, timCp.u) + annotation (Line(points={{-260,100},{-220,100},{-220,140},{-212,140}}, + color={0,0,127})); + connect(timCp.y, loaChiWat.u1) annotation (Line(points={{-188,140},{-186,140}, + {-186,126},{-182,126}}, color={0,0,127})); + connect(mHeaWatPri_flow, timCp1.u) + annotation (Line(points={{-260,-80},{-222,-80}}, color={0,0,127})); + connect(timCp1.y, loaHeaWat.u1) annotation (Line(points={{-198,-80},{-186,-80}, + {-186,-114},{-182,-114}}, + color={0,0,127})); + connect(loaChiWat.y, movAve.u) + annotation (Line(points={{-158,120},{-152,120}}, color={0,0,127})); + connect(loaHeaWat.y, movAve1.u) + annotation (Line(points={{-158,-120},{-152,-120}}, + color={0,0,127})); + connect(rep5.y, cmdChiHea.u) + annotation (Line(points={{202,-100},{208,-100}}, + color={255,127,0})); + connect(cmdChiHea.y, y1ChiHea) + annotation (Line(points={{232,-100},{260,-100}}, color={255,0,255})); + connect(modHeaCoo.y1HeaCoo, y1HeaCooChiHea) annotation (Line(points={{202,-6}, + {220,-6},{220,-40},{260,-40}}, color={255,0,255})); + connect(numChiHea.y, nChiHeaHeaAndCoo.u2) + annotation (Line(points={{-58,-40},{-50,-40},{-50,-46},{-42,-46}}, + color={255,127,0})); + connect(nChiHeaAndCooUnb.y, nChiHeaHeaAndCoo.u1) annotation (Line(points={{-58,0}, + {-50,0},{-50,-34},{-42,-34}}, color={255,127,0})); + connect(nChiHeaAndCooUnb.y, numChiHeaCoo.u1) + annotation (Line(points={{-58,0},{-20,0},{-20,-14},{-2,-14}}, + color={255,127,0})); + connect(nChiHeaHeaAndCoo.y, numChiHeaCoo.u2) annotation (Line(points={{-18,-40}, + {-10,-40},{-10,-26},{-2,-26}}, + color={255,127,0})); + connect(modHeaCoo.y1Coo, y1CooChiHea) annotation (Line(points={{202,6},{220,6}, + {220,40},{260,40}}, color={255,0,255})); + connect(numChiHeaCoo.y, numChiCasCoo.u2) annotation (Line(points={{22,-20},{ + 30,-20},{30,14},{38,14}}, color={255,127,0})); + connect(TChiWatSupSet, errTChiWatSup.u1) annotation (Line(points={{-260,80},{ + -230,80},{-230,180},{-204,180},{-204,216},{-202,216}}, + color={0,0,127})); + connect(dpChiWatSet, errDpChiWat.u1) annotation (Line(points={{-260,280},{ + -206,280},{-206,266},{-202,266}}, + color={0,0,127})); + connect(errTChiWatSup.y, cmpErrLim.u) + annotation (Line(points={{-178,210},{-172,210}}, color={0,0,127})); + connect(errDpChiWat.y, cmpErrLim1.u) + annotation (Line(points={{-178,260},{-172,260}}, color={0,0,127})); + connect(timErrExcLim1.passed, or2.u1) annotation (Line(points={{-88,252},{-80, + 252},{-80,230},{-72,230}}, color={255,0,255})); + connect(timErrExcLim.passed, or2.u2) annotation (Line(points={{-88,202},{-80, + 202},{-80,222},{-72,222}}, color={255,0,255})); + connect(cmpErrLim1.y, and2.u1) + annotation (Line(points={{-148,260},{-142,260}}, color={255,0,255})); + connect(and2.y, timErrExcLim1.u) + annotation (Line(points={{-118,260},{-112,260}}, color={255,0,255})); + connect(cmpErrLim.y, and3.u1) annotation (Line(points={{-148,210},{-142,210}}, + color={255,0,255})); + connect(and3.y, timErrExcLim.u) + annotation (Line(points={{-118,210},{-112,210}}, color={255,0,255})); + connect(u1Coo, and3.u2) annotation (Line(points={{-260,160},{-146,160},{-146, + 202},{-142,202}}, color={255,0,255})); + connect(u1Coo, and2.u2) annotation (Line(points={{-260,160},{-146,160},{-146, + 252},{-142,252}}, color={255,0,255})); + connect(cmdChi.y, y1Chi) + annotation (Line(points={{232,120},{260,120}}, + color={255,0,255})); + connect(u1Coo, staCoo.u1) + annotation (Line(points={{-260,160},{48,160}}, color={255,0,255})); + connect(cmpOPLRLimUp.y, timOPLRExcLim.u) + annotation (Line(points={{-58,120},{-42,120}}, + color={255,0,255})); + connect(or2.y, or1.u1) annotation (Line(points={{-48,230},{-6,230},{-6,140},{ + -2,140}}, color={255,0,255})); + connect(or1.y, staCoo.u1Up) annotation (Line(points={{22,140},{24,140},{24, + 154},{48,154}}, color={255,0,255})); + connect(timOPLRExcLim.passed, or1.u2) annotation (Line(points={{-18,112},{-14, + 112},{-14,132},{-2,132}}, + color={255,0,255})); + connect(numChi.y, numOpeChi.u2) annotation (Line(points={{72,100},{84,100},{ + 84,114},{88,114}}, + color={255,127,0})); + connect(staCoo.idxSta, numOpeChi.u1) annotation (Line(points={{72,154},{80, + 154},{80,126},{88,126}}, + color={255,127,0})); + connect(staCoo.idxSta, numOpeCooChiHea.u1) annotation (Line(points={{72,154}, + {80,154},{80,60},{-132,60},{-132,26},{-122,26}}, color={255,127,0})); + connect(numOpeChi.y, numOpeCooChiHea.u2) annotation (Line(points={{112,120},{ + 120,120},{120,54},{-126,54},{-126,14},{-122,14}}, color={255,127,0})); + connect(numOpeCooChiHea.y, nChiHeaAndCooUnb.u1) annotation (Line(points={{-98,20}, + {-90,20},{-90,6},{-82,6}}, color={255,127,0})); + connect(cmpOPLRLimUp1.y, timOPLRExcLim1.u) + annotation (Line(points={{-58,-120},{-52,-120}}, color={255,0,255})); + connect(u1Hea, staHea.u1) annotation (Line(points={{-260,140},{-234,140},{ + -234,-100},{40,-100},{40,-114},{48,-114}}, color={255,0,255})); + connect(cmpOPLRLimDow.y, timOPLRExcLim2.u) + annotation (Line(points={{-58,-160},{-52,-160}}, color={255,0,255})); + connect(cmpOPLRLimDow1.y, timOPLRExcLim3.u) + annotation (Line(points={{-58,80},{-42,80}}, color={255,0,255})); + connect(or2.y, notFail.u) annotation (Line(points={{-48,230},{-46,230},{-46, + 200},{-42,200}}, color={255,0,255})); + connect(dowAndNotFail.y, staCoo.u1Dow) annotation (Line(points={{22,100},{26, + 100},{26,148.2},{48,148.2}},color={255,0,255})); + connect(timOPLRExcLim3.passed, dowAndNotFail.u2) annotation (Line(points={{-18,72}, + {-10,72},{-10,92},{-2,92}}, color={255,0,255})); + connect(notFail.y, dowAndNotFail.u1) annotation (Line(points={{-18,200},{-10, + 200},{-10,100},{-2,100}}, + color={255,0,255})); + connect(staHea.idxSta, nChiHeaAndCooUnb.u2) annotation (Line(points={{72,-120}, + {80,-120},{80,-80},{-100,-80},{-100,-6},{-82,-6}}, color={255,127,0})); + connect(numOpeCooChiHea.y, numChiCasCoo.u1) annotation (Line(points={{-98,20}, + {30,20},{30,26},{38,26}}, color={255,127,0})); + connect(movAve.y, cmpOPLRLimUp.u1) + annotation (Line(points={{-128,120},{-82,120}}, + color={0,0,127})); + connect(capCoo.y, cmpOPLRLimUp.u2) annotation (Line(points={{-99,100},{-94, + 100},{-94,112},{-82,112}}, + color={0,0,127})); + connect(movAve.y, cmpOPLRLimDow1.u1) annotation (Line(points={{-128,120},{-90, + 120},{-90,80},{-82,80}},color={0,0,127})); + connect(capCooLow.y, cmpOPLRLimDow1.u2) + annotation (Line(points={{-99,72},{-82,72}}, color={0,0,127})); + connect(capHea.y, cmpOPLRLimUp1.u2) annotation (Line(points={{-99,-140},{-94, + -140},{-94,-128},{-82,-128}}, color={0,0,127})); + connect(movAve1.y, cmpOPLRLimUp1.u1) + annotation (Line(points={{-128,-120},{-82,-120}}, color={0,0,127})); + connect(capHeaLow.y, cmpOPLRLimDow.u2) annotation (Line(points={{-99,-168},{ + -82,-168}}, color={0,0,127})); + connect(movAve1.y, cmpOPLRLimDow.u1) annotation (Line(points={{-128,-120},{ + -90,-120},{-90,-160},{-82,-160}}, color={0,0,127})); + connect(TChiWatSupSet, dTChiWatPos.u2) annotation (Line(points={{-260,80},{ + -230,80},{-230,74},{-212,74}}, color={0,0,127})); + connect(TChiWatPriRet, dTChiWatPos.u1) annotation (Line(points={{-260,40},{ + -220,40},{-220,86},{-212,86}},color={0,0,127})); + connect(dpHeaWatSet, errDpHeaWat.u1) annotation (Line(points={{-260,-260},{ + -206,-260},{-206,-274},{-202,-274}}, color={0,0,127})); + connect(errTChiWatSup1.y, cmpErrLim2.u) + annotation (Line(points={{-178,-220},{-172,-220}}, color={0,0,127})); + connect(errDpHeaWat.y, cmpErrLim3.u) + annotation (Line(points={{-178,-280},{-172,-280}}, color={0,0,127})); + connect(cmpErrLim3.y,and1. u1) + annotation (Line(points={{-148,-280},{-142,-280}}, + color={255,0,255})); + connect(and1.y,timErrExcLim3. u) + annotation (Line(points={{-118,-280},{-112,-280}}, + color={255,0,255})); + connect(cmpErrLim2.y, and4.u1) + annotation (Line(points={{-148,-220},{-142,-220}}, color={255,0,255})); + connect(and4.y, timErrExcLim2.u) + annotation (Line(points={{-118,-220},{-112,-220}}, color={255,0,255})); + connect(or3.y, notFail1.u) annotation (Line(points={{-48,-260},{-40,-260},{ + -40,-220},{-32,-220}}, color={255,0,255})); + connect(THeaWatSupSet, errTChiWatSup1.u1) annotation (Line(points={{-260,-120}, + {-230,-120},{-230,-200},{-206,-200},{-206,-214},{-202,-214}}, color={ + 0,0,127})); + connect(timErrExcLim2.passed, or3.u1) annotation (Line(points={{-88,-228},{ + -80,-228},{-80,-260},{-72,-260}}, color={255,0,255})); + connect(timErrExcLim3.passed, or3.u2) annotation (Line(points={{-88,-288},{ + -80,-288},{-80,-268},{-72,-268}}, color={255,0,255})); + connect(u1Hea, and4.u2) annotation (Line(points={{-260,140},{-234,140},{-234, + -240},{-144,-240},{-144,-228},{-142,-228}}, color={255,0,255})); + connect(u1Hea, and1.u2) annotation (Line(points={{-260,140},{-234,140},{-234, + -240},{-144,-240},{-144,-288},{-142,-288}}, color={255,0,255})); + connect(timOPLRExcLim1.passed, or4.u1) annotation (Line(points={{-28,-128},{ + -20,-128},{-20,-120},{8,-120}}, color={255,0,255})); + connect(or3.y, or4.u2) annotation (Line(points={{-48,-260},{0,-260},{0,-128}, + {8,-128}}, color={255,0,255})); + connect(timOPLRExcLim2.passed, dowAndNotFail1.u1) annotation (Line(points={{ + -28,-168},{-20,-168},{-20,-160},{8,-160}}, color={255,0,255})); + connect(notFail1.y, dowAndNotFail1.u2) annotation (Line(points={{-8,-220},{4, + -220},{4,-168},{8,-168}}, color={255,0,255})); + connect(dowAndNotFail1.y, staHea.u1Dow) annotation (Line(points={{32,-160},{ + 40,-160},{40,-125.8},{48,-125.8}}, color={255,0,255})); + connect(or4.y, staHea.u1Up) + annotation (Line(points={{32,-120},{48,-120}}, color={255,0,255})); + connect(numOpeChi.y, hol.u[1]) annotation (Line(points={{112,120},{120,120},{ + 120,-0.75},{128,-0.75}}, color={255,127,0})); + connect(numChiCasCoo.y, hol.u[2]) annotation (Line(points={{62,20},{116,20},{ + 116,-0.25},{128,-0.25}}, color={255,127,0})); + connect(numChiHeaCoo.y, hol.u[3]) annotation (Line(points={{22,-20},{116,-20}, + {116,0.25},{128,0.25}}, + color={255,127,0})); + connect(nChiHeaHeaAndCoo.y, hol.u[4]) annotation (Line(points={{-18,-40},{120, + -40},{120,-2},{128,-2},{128,0.75}}, + color={255,127,0})); + connect(hol.y[1], rep.u) annotation (Line(points={{152,0},{160,0},{160,120},{ + 178,120}}, color={255,127,0})); + connect(hol.y[2], modHeaCoo.nCasCoo) annotation (Line(points={{152,0},{160,0}, + {160,6},{178,6}}, color={255,127,0})); + connect(hol.y[3], modHeaCoo.nHeaCoo) annotation (Line(points={{152,0},{160,0}, + {160,-6},{178,-6}}, + color={255,127,0})); + connect(hol.y[4], rep5.u) annotation (Line(points={{152,0},{160,0},{160,-100}, + {178,-100}},color={255,127,0})); + connect(movAve.y, QCooReq_flow) annotation (Line(points={{-128,120},{-100,120}, + {-100,180},{260,180}}, color={0,0,127})); + connect(dpChiWat, errDpChiWat.u2) annotation (Line(points={{-260,260},{-220, + 260},{-220,254},{-202,254}}, color={0,0,127})); + connect(TChiWatSup, errTChiWatSup.u2) annotation (Line(points={{-260,200},{ + -220,200},{-220,204},{-202,204}}, color={0,0,127})); + connect(THeaWatSup, errTChiWatSup1.u2) annotation (Line(points={{-260,-220},{ + -220,-220},{-220,-226},{-202,-226}}, color={0,0,127})); + connect(dpHeaWat, errDpHeaWat.u2) annotation (Line(points={{-260,-280},{-220, + -280},{-220,-286},{-202,-286}}, color={0,0,127})); + annotation ( + defaultComponentName="staPla", + Documentation(info=" +

    +This block implements the staging logic for the chillers and HRCs. +The units are staged in part based on an efficiency condition +using the operative part load ratio. +The units are also staged based on failsafe conditions using the CHW and HW +supply temperature and differential pressure. +

    +

    +For the sake of simplicity, equipment rotation (i.e. the possibility at a given +stage that either one unit or another unit can be operating) is not taken into account. +

    +

    Plant stages

    +

    +At cooling (resp. heating) stage #i, a number i +of units are operating in cooling (resp. heating) mode. +The cooling (resp. heating) stage #0 (no unit operating in +that given mode) is active whenever the plant is disabled based on the cooling +and heating Enable condition (see below) or when the plant is enabled +and has been staged down due to the efficiency or failsafe conditions. +The plant stage is given by the couple (cooling stage, heating stage). +The minimum runtime of each plant stage is set to 15 min. +

    +
    Direct heat recovery mode
    +

    +All HRCs are allowed to operate in direct heat recovery mode, that is when +their condenser is indexed to the HW loop and their evaporator is indexed to the +CHW loop. +Switching a HRC to operate in direct heat recovery mode is done on +a load requirement basis. This means that HRCs are first switched over +to cascading heating or cascading cooling mode. Only when all HRCs are operating +and when a new stage up event is initiated, an additional HRC is then switched +to operate in direct heat recovery mode. +As described in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.ModeHeatRecoveryChiller +the HRC with the highest index that is not operating operating in cascading +cooling mode is the next to be switched into direct heat recovery mode. +

    +

    +For example, considering a plant with two chillers and three HRCs, the table below shows +the plant stages derived from this logic. +In this table, the chiller with index #i is denoted CHI#i, +the HRC with index #i is denoted HRC#i, +the units enumerated before (resp. after) the semicolon sign (:) operate +in cooling (resp. heating) mode, the units marked with a star (*) operate +in direct heat recovery mode. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Heating stage ↓ Cooling stage →012345
    0N/A:
    N/A
    CHI1:
    N/A
    CHI1 & CHI2:
    N/A
    CHI1 & CHI2 & HRC3:
    N/A
    CHI1 & CHI2 & HRC3 & HRC2:
    N/A
    CHI1 & CHI2 & HRC3 & HRC2 & HRC1:
    N/A
    1N/A:
    HRC1
    CHI1:
    HRC1
    CHI1 & CHI2:
    HRC1
    CHI1 & CHI2 & HRC3:
    HRC1
    CHI1 & CHI2 & HRC3 & HRC2:
    HRC1
    CHI1 & CHI2 & HRC3 & HRC2:
    HRC1*
    2N/A:
    HRC1 & HRC2
    CHI1:
    HRC1 & HRC2
    CHI1 & CHI2:
    HRC1 & HRC2
    CHI1 & CHI2 & HRC3:
    HRC1 & HRC2
    CHI1 & CHI2 & HRC3:
    HRC1 & HRC2*
    CHI1 & CHI2 & HRC3:
    HRC1* & HRC2*
    3N/A:
    HRC1 & HRC2 & HRC3
    CHI1:
    HRC1 & HRC2 & HRC3
    CHI1 & CHI2:
    HRC1 & HRC2 & HRC3
    CHI1 & CHI2:
    HRC1 & HRC2 & HRC3*
    CHI1 & CHI2:
    HRC1 & HRC2* & HRC3*
    CHI1 & CHI2:
    HRC1* & HRC2* & HRC3*
    +

    Cooling and heating Enable condition

    +

    +The cooling and heating Enable signals u1Coo and u1Hea +shall be computed outside of the plant model, +at least based on a time schedule and ideally in conjunction +with a signal representative of the demand such as the requests yielded by +the consumer control valves. +Based on those signals, the cooling (resp. heating) stage #1 is +activated whenever the cooling (resp. heating) Enable signal switches +to true and when cooling (resp. heating) has been disabled +for at least 15 min. +

    +

    Operative part load ratio

    +

    +The efficiency condition is based on the operative part load ratio +which is computed as the ratio of the required capacity +relative to design capacity of a given stage, which is the sum of the design capacity +of each unit active in a given stage. +The required capacity is calculated based on the primary mass flow rate and the +temperature difference between supply and primary return, and averaged over a +5-minute moving window. +

    Cooling and heating staging

    +

    +A stage up event is initiated if any of the following conditions is true. +

    +
      +
    • +Efficiency condition: the operative part load ratio of the current stage +exceeds the value of the parameter PLRStaTra for 15 min. +
    • +
    • +Failsafe conditions: the CHW (resp. HW) supply temperature is K +higher (resp. lower) than setpoint for 15 min, or +the CHW (resp. HW) differential pressure is 1.5E4 Pa lower than +setpoint for 15 min. +
    • +
    +

    +A stage down event is initiated if both of the following conditions are true. +

    +
      +
    • +Efficiency condition: the operative part load ratio of the next lower stage +falls below the value of the parameter PLRStaTra for 15 min. +
    • +
    • +Failsafe conditions: the failsafe stage up conditions are not true. +
    • +
    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +"), + Diagram(coordinateSystem(extent={{-240,-320},{240,320}})), + Icon(coordinateSystem(extent={{-100,-160},{100,160}}), graphics={ + Text( + textColor={0,0,255}, + extent={{-150,170},{150,210}}, + textString="%name"), + Rectangle( + extent={{-100,-160},{100,160}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)})); +end StagingPlant; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo new file mode 100644 index 00000000000..32f55d9d736 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo @@ -0,0 +1,266 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block StagingPump "Pump staging" + + parameter Boolean have_flowCriterion=true + "Set to true for flow criterion in conjunction with speed criterion" + annotation(Evaluate=true); + parameter Integer nPum( + final min=1, + start=1) + "Number of pumps" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + "Loop design mass flow rate (all pumps)" + annotation(Dialog(group="Nominal condition", enable=have_flowCriterion)); + parameter Real yDow=0.30 + "Low speed limit for staging down"; + parameter Real yUp=0.99 + "High speed limit for staging up"; + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1Ena + "Lead pump Enable signal (e.g. based on isolation valve opening command)" + annotation (Placement(transformation(extent={{-240,140},{-200,180}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput m_flow(final unit="kg/s") + if have_flowCriterion + "Mass flow rate as measured by the loop flow meter" + annotation (Placement( + transformation(extent={{-240,60},{-200,100}}),iconTransformation(extent={{-140, + -20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput y(final unit="1") + "Commanded speed" + annotation (Placement(transformation(extent={{-240,-20},{-200,20}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1[nPum] + "Start signal (VFD Run or motor starter contact)" + annotation (Placement( + transformation(extent={{200,-20},{240,20}}), iconTransformation(extent={{100,40}, + {140,80}}))); + + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmp(final t=yUp, h=1e-3) + "Compare" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timSpe(t=5*60) + "True delay" + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratFlo( + final k=1/m_flow_nominal) if have_flowCriterion + "Ratio of current flow rate to design value" + annotation (Placement(transformation(extent={{-148,70},{-128,90}}))); + Buildings.Controls.OBC.CDL.Continuous.Greater cmp2(h=1e-3) + if have_flowCriterion + "Compare" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(p=-0.03) + if have_flowCriterion + "Add offset" + annotation (Placement(transformation(extent={{-80,130},{-100,150}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timFlo(t=10*60) + if have_flowCriterion + "Check if true for a given time" + annotation (Placement(transformation(extent={{-72,90},{-52,110}}))); + Buildings.Controls.OBC.CDL.Logical.Or up + "Check if flow or speed criterion passed for staging up" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Less cmp3(h=1e-3) + if have_flowCriterion + "Compare" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timFlo1(t=10*60) + if have_flowCriterion + "Check if true for a given time" + annotation (Placement(transformation(extent={{-72,50},{-52,70}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmp4(final t=yDow, h=1e-3) + "Compare" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timSpe1(t=5*60) "True delay" + annotation (Placement(transformation(extent={{-70,-50},{-50,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Or dow + "Check if flow or speed criterion passed for staging down" + annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratOpeDsg( + final k=1/nPum) + "Ratio of number of operating pumps to number of operating pumps at design conditions" + annotation (Placement(transformation(extent={{-40,130},{-60,150}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold cvtBoo[nPum]( + final t={i for i in 1:nPum}) + "Compute pump Start command from number of pumps to be commanded On" + annotation (Placement(transformation(extent={{160,-10},{180,10}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep( + final nout=nPum) "Replicate" + annotation (Placement(transformation(extent={{120,-10},{140,10}}))); + StageIndex staLag(final nSta=max(1, nPum - 1), tSta=30) + if nPum>1 + "Stage lag pumps (minimum runtime allowing for pump start time)" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + Buildings.Controls.OBC.CDL.Conversions.IntegerToReal cvtInt "Convert" + annotation (Placement(transformation(extent={{50,130},{30,150}}))); + Buildings.Controls.OBC.CDL.Continuous.AddParameter addOffLowSta( + final p=-1/nPum) if have_flowCriterion + "Add offset for lower stage" + annotation (Placement(transformation(extent={{-150,30},{-130,50}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger leaEna + "Return 1 if lead pump enabled" + annotation (Placement(transformation(extent={{30,30},{50,50}}))); + Buildings.Controls.OBC.CDL.Integers.Add num "Number of pumps enabled" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Controls.OBC.CDL.Integers.Add numPre "Number of pumps enabled" + annotation (Placement(transformation(extent={{80,50},{100,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant zer(final k=0) + if nPum==1 + "Constant" + annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant fal(final k=false) + if not have_flowCriterion + "Constant" + annotation (Placement(transformation(extent={{-70,-90},{-50,-70}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput nPumEna + "Number of pumps that are enabled" annotation (Placement(transformation( + extent={{200,-80},{240,-40}}), iconTransformation(extent={{100,-80},{ + 140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Any + "Return true if any pump enabled (left limit to avoid direct feedback)" + annotation (Placement(transformation(extent={{200,-140},{240,-100}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold anyEna(final t=1) + "Return true if any pump is enabled" + annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Pre pre1 + "Left limit of signal avoiding direct feedback" + annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); +equation + connect(y, cmp.u) + annotation (Line(points={{-220,0},{-102,0}}, color={0,0,127})); + connect(cmp.y, timSpe.u) + annotation (Line(points={{-78,0},{-72,0}}, color={255,0,255})); + connect(ratFlo.y, cmp2.u1) + annotation (Line(points={{-126,80},{-120,80},{-120,100},{-102,100}}, + color={0,0,127})); + connect(addOff.y, cmp2.u2) annotation (Line(points={{-102,140},{-110,140},{ + -110,92},{-102,92}}, color={0,0,127})); + connect(timFlo.passed, up.u1) annotation (Line(points={{-50,92},{-36,92},{-36, + 0},{-32,0}}, color={255,0,255})); + connect(ratFlo.y, cmp3.u1) annotation (Line(points={{-126,80},{-120,80},{-120, + 60},{-102,60}}, color={0,0,127})); + connect(y, cmp4.u) annotation (Line(points={{-220,0},{-160,0},{-160,-40},{-102, + -40}}, color={0,0,127})); + connect(cmp4.y, timSpe1.u) + annotation (Line(points={{-78,-40},{-72,-40}}, color={255,0,255})); + connect(timFlo1.passed,dow. u1) annotation (Line(points={{-50,52},{-40,52},{ + -40,-40},{-32,-40}}, color={255,0,255})); + connect(addOff.u, ratOpeDsg.y) + annotation (Line(points={{-78,140},{-62,140}}, color={0,0,127})); + connect(rep.y, cvtBoo.u) + annotation (Line(points={{142,0},{158,0}}, color={255,127,0})); + connect(cmp2.y, timFlo.u) + annotation (Line(points={{-78,100},{-74,100}}, + color={255,0,255})); + connect(cmp3.y, timFlo1.u) + annotation (Line(points={{-78,60},{-74,60}}, color={255,0,255})); + connect(timSpe.passed, up.u2) annotation (Line(points={{-48,-8},{-32,-8}}, + color={255,0,255})); + connect(timSpe1.passed,dow. u2) annotation (Line(points={{-48,-48},{-40,-48}, + {-40,-48},{-32,-48}},color={255,0,255})); + connect(y1Ena, staLag.u1) annotation (Line(points={{-220,160},{0,160},{0,6},{ + 28,6}}, + color={255,0,255})); + connect(cvtInt.y, ratOpeDsg.u) + annotation (Line(points={{28,140},{-38,140}}, color={0,0,127})); + connect(cvtBoo.y, y1) + annotation (Line(points={{182,0},{220,0}}, color={255,0,255})); + connect(addOff.y, addOffLowSta.u) annotation (Line(points={{-102,140},{-160, + 140},{-160,40},{-152,40}}, color={0,0,127})); + connect(addOffLowSta.y, cmp3.u2) annotation (Line(points={{-128,40},{-116,40}, + {-116,52},{-102,52}}, color={0,0,127})); + connect(y1Ena, leaEna.u) annotation (Line(points={{-220,160},{0,160},{0,40},{ + 28,40}}, + color={255,0,255})); + connect(dow.y, staLag.u1Dow) annotation (Line(points={{-8,-40},{0,-40},{0, + -5.8},{28,-5.8}}, + color={255,0,255})); + connect(num.y, rep.u) + annotation (Line(points={{102,0},{118,0}}, + color={255,127,0})); + connect(staLag.idxSta, num.u2) annotation (Line(points={{52,0},{60,0},{60,-6}, + {78,-6}}, color={255,127,0})); + connect(leaEna.y, num.u1) annotation (Line(points={{52,40},{60,40},{60,6},{78, + 6}}, color={255,127,0})); + connect(numPre.y, cvtInt.u) annotation (Line(points={{102,60},{120,60},{120, + 140},{52,140}}, + color={255,127,0})); + connect(leaEna.y, numPre.u1) annotation (Line(points={{52,40},{60,40},{60,66}, + {78,66}}, color={255,127,0})); + connect(staLag.preIdxSta, numPre.u2) annotation (Line(points={{52,-6},{56,-6}, + {56,54},{78,54}}, color={255,127,0})); + connect(zer.y, num.u2) annotation (Line(points={{52,-40},{68,-40},{68,-6},{78, + -6}}, color={255,127,0})); + connect(zer.y, numPre.u2) annotation (Line(points={{52,-40},{68,-40},{68,54}, + {78,54}},color={255,127,0})); + connect(up.y, staLag.u1Up) + annotation (Line(points={{-8,0},{28,0}}, color={255,0,255})); + connect(fal.y, dow.u1) annotation (Line(points={{-48,-80},{-36,-80},{-36,-40}, + {-32,-40}}, color={255,0,255})); + connect(fal.y, up.u1) annotation (Line(points={{-48,-80},{-36,-80},{-36,0},{-32, + 0}}, color={255,0,255})); + connect(num.y, nPumEna) annotation (Line(points={{102,0},{110,0},{110,-60},{ + 220,-60}}, color={255,127,0})); + connect(anyEna.y, pre1.u) + annotation (Line(points={{142,-120},{158,-120}}, color={255,0,255})); + connect(pre1.y, y1Any) + annotation (Line(points={{182,-120},{220,-120}}, color={255,0,255})); + connect(num.y, anyEna.u) annotation (Line(points={{102,0},{110,0},{110,-120}, + {118,-120}}, color={255,127,0})); + connect(m_flow, ratFlo.u) + annotation (Line(points={{-220,80},{-150,80}}, color={0,0,127})); + annotation ( + defaultComponentName="staPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-200},{200, + 200}})), + Documentation(info=" +

    +This block implements the logic for staging the lag pump of +a multiple-pump group. +

    +The first staging criterion is optional and is based on ratFlo, +the ratio of current flow rate to design flow rate. +The lag pump is enabled whenever any of the following is true. +

    +
      +
    • The pump speed command is higher than yUp for 5 min. +
    • +
    • Optionally if have_flowCriterion is set to true, the ratio ratFlo +is higher than n / nPum - 0.03 for 10 min, where n is the number +of operating pumps and nPum is the number of pumps operating at design conditions. +
    • +
    +

    +The lag pump is disabled whenever any of the following is true. +

    +
      +
    • The lead pump is disabled. +
    • +
    • The pump speed command is lower than yDow for 5 min. +
    • +
    • Optionally if have_flowCriterion is set to true, the ratio ratFlo +is higher than (n - 1) / nPum - 0.03 for 10 min. +
    • +
    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end StagingPump; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo new file mode 100644 index 00000000000..22f5b1dea22 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo @@ -0,0 +1,250 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block TankCycle "Block that determines the tank cycle flag" + + parameter Modelica.Units.SI.MassFlowRate mConWatHexCoo_flow_nominal + "Design total CW mass flow rate through condenser barrels (all units)"; + + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] + "Tank temperature setpoints: 2 cycles with 2 setpoints" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Integer nTTan=0 + "Number of tank temperature points" + annotation (Dialog(connectorSizing=true),HideResult=true); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConWatOutTan_flow( + final unit="kg/s") + "Mass flow rate out of lower port of TES tank (>0 when charging)" + annotation (Placement(transformation(extent={{-200,100},{-160,140}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TTan[nTTan]( + each final unit="K", + each displayUnit="degC") + "TES tank temperature" + annotation (Placement( + transformation(extent={{-200,-60},{-160,-20}}), iconTransformation( + extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput idxCycTan( + final min=1, final max=2) + "Index of active tank cycle" + annotation (Placement(transformation(extent={{160,-20},{200,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criTem1[nTTan]( + each t=sum(TTanSet[2])/2, each h=1E-4) + "Temperature criterion for first tank cycle" + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd allCriTem1(final nin=nTTan) + "All temperature criteria met" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criFlo1(final t=1E-3* + mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) + "Flow criterion for first tank cycle" + annotation (Placement(transformation(extent={{-150,110},{-130,130}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold criTem2[nTTan](each t=sum(TTanSet[1])/2, each h=1E-4) + "Temperature criterion for first tank cycle" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd allCriTem2(final nin=nTTan) + "All temperature criteria met" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt(final + integerTrue=1, final integerFalse=2) "Convert" + annotation (Placement(transformation(extent={{-70,110},{-50,130}}))); + Buildings.Controls.OBC.CDL.Logical.Or or2 + "Neither of temperature criterion is true" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,10}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt3(final + integerTrue=2, final integerFalse=0) "Convert" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-30,10}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4(final + integerTrue=1, final integerFalse=0) "Convert" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-60,10}))); + Buildings.Controls.OBC.CDL.Integers.Max maxInt1 "Set cycle index as maximum" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-40,90}))); + Buildings.Controls.OBC.CDL.Logical.And allCri2 "All criteria met" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + Buildings.Controls.OBC.CDL.Logical.And allCri1 "All criteria met" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Switch idxIni "Index at initial time" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={110,120}))); + Buildings.Controls.OBC.CDL.Logical.Timer timAllCri1(t=5*60) + "All criteria met for given time" + annotation (Placement(transformation(extent={{10,-50},{30,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Timer timAllCri2(t=5*60) + "All criteria met for given time" + annotation (Placement(transformation(extent={{10,-90},{30,-70}}))); + Buildings.Controls.OBC.CDL.Integers.Switch + intSwi "Switch index" + annotation (Placement(transformation(extent={{110,-10},{130,10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant idx1(final k=1) "Index" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.CDL.Integers.Switch + intSwi1 "Switch index" + annotation (Placement(transformation(extent={{70,-110},{90,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant idx2(final k=2) "Index" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Modelica.Blocks.Sources.IntegerExpression preIdxCycTan(y=pre(idxCycTan)) + "Previous index value" + annotation (Placement(transformation(extent={{38,-130},{60,-110}}))); + Buildings.Controls.OBC.CDL.Logical.Not criFlo2 + "Flow criterion for second tank cycle" + annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); + IntegerArrayHold hol(holdDuration=30*60, nin=1) "Hold for minimum runtime" + annotation (Placement(transformation(extent={{136,-10},{156,10}}))); +initial equation + pre(idxCycTan)=idxIni.y; +equation + connect(criTem1.y, allCriTem1.u) + annotation (Line(points={{-118,-40},{-62,-40}},color={255,0,255})); + connect(TTan, criTem2.u) annotation (Line(points={{-180,-40},{-152,-40},{-152, + -80},{-142,-80}}, + color={0,0,127})); + connect(TTan, criTem1.u) + annotation (Line(points={{-180,-40},{-142,-40}},color={0,0,127})); + connect(criTem2.y, allCriTem2.u) + annotation (Line(points={{-118,-80},{-62,-80}}, color={255,0,255})); + connect(allCriTem2.y, booToInt3.u) annotation (Line(points={{-38,-80},{-30, + -80},{-30,-2}}, + color={255,0,255})); + connect(allCriTem1.y, booToInt4.u) annotation (Line(points={{-38,-40},{-34, + -40},{-34,-20},{-60,-20},{-60,-2}}, + color={255,0,255})); + connect(allCriTem1.y, allCri1.u1) + annotation (Line(points={{-38,-40},{-22,-40}}, color={255,0,255})); + connect(allCriTem2.y, allCri2.u1) + annotation (Line(points={{-38,-80},{-22,-80}}, color={255,0,255})); + connect(maxInt1.u2, booToInt3.y) annotation (Line(points={{-34,78},{-34,30},{-30, + 30},{-30,22}}, color={255,127,0})); + connect(booToInt4.y, maxInt1.u1) annotation (Line(points={{-60,22},{-60,30},{-46, + 30},{-46,78}}, color={255,127,0})); + connect(allCriTem1.y, or2.u1) annotation (Line(points={{-38,-40},{-34,-40},{ + -34,-20},{0,-20},{0,-2}}, color={255,0,255})); + connect(allCriTem2.y, or2.u2) annotation (Line(points={{-38,-80},{-30,-80},{ + -30,-24},{8,-24},{8,-2}}, color={255,0,255})); + connect(or2.y, idxIni.u2) annotation (Line(points={{0,22},{0,120},{98,120}}, + color={255,0,255})); + connect(maxInt1.y, idxIni.u1) + annotation (Line(points={{-40,102},{-40,128},{98,128}}, + color={255,127,0})); + connect(criFlo1.y, booToInt.u) + annotation (Line(points={{-128,120},{-72,120}}, + color={255,0,255})); + connect(booToInt.y, idxIni.u3) annotation (Line(points={{-48,120},{-20,120},{-20, + 112},{98,112}},color={255,127,0})); + connect(mConWatOutTan_flow, criFlo1.u) + annotation (Line(points={{-180,120},{-152,120}}, + color={0,0,127})); + connect(allCri1.y, timAllCri1.u) + annotation (Line(points={{2,-40},{8,-40}}, color={255,0,255})); + connect(allCri2.y, timAllCri2.u) + annotation (Line(points={{2,-80},{8,-80}}, color={255,0,255})); + connect(timAllCri1.passed, intSwi.u2) annotation (Line(points={{32,-48},{80, + -48},{80,0},{108,0}}, color={255,0,255})); + connect(idx1.y, intSwi.u1) annotation (Line(points={{62,20},{100,20},{100,8}, + {108,8}}, color={255,127,0})); + connect(timAllCri2.passed, intSwi1.u2) annotation (Line(points={{32,-88},{36, + -88},{36,-100},{68,-100}}, color={255,0,255})); + connect(idx2.y, intSwi1.u1) annotation (Line(points={{62,-80},{66,-80},{66, + -92},{68,-92}}, color={255,127,0})); + connect(intSwi1.y, intSwi.u3) annotation (Line(points={{92,-100},{100,-100},{ + 100,-8},{108,-8}}, color={255,127,0})); + connect(preIdxCycTan.y, intSwi1.u3) annotation (Line(points={{61.1,-120},{66, + -120},{66,-108},{68,-108}}, color={255,127,0})); + connect(criFlo1.y, criFlo2.u) annotation (Line(points={{-128,120},{-120,120}, + {-120,100},{-150,100},{-150,80},{-142,80}}, + color={255,0,255})); + connect(hol.y[1], idxCycTan) + annotation (Line(points={{158,0},{180,0}}, color={255,127,0})); + connect(criFlo1.y, allCri1.u2) annotation (Line(points={{-128,120},{-100,120}, + {-100,-54},{-26,-54},{-26,-48},{-22,-48}}, color={255,0,255})); + connect(criFlo2.y, allCri2.u2) annotation (Line(points={{-118,80},{-106,80},{ + -106,-60},{-26,-60},{-26,-88},{-22,-88}}, color={255,0,255})); + connect(intSwi.y, hol.u[1]) + annotation (Line(points={{132,0},{134,0}}, color={255,127,0})); + annotation ( + defaultComponentName="cycTan", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-160,-160},{160,160}})), + Documentation(info=" +

    +The tank operating conditions should match the operating limits and selection +conditions of the chillers and HRCs. +The highest temperature (at the top of the tank) should be limited by the +maximum evaporator entering temperature per manufacturer’s recommendations. +The lowest temperature (at the bottom of the tank) should be limited by the +design CHW supply temperature. +This gives the tank maximum ΔT and the actual storage capacity. +However, this value is likely above the maximum ΔT that chillers +and HRCs can achieve across the condenser or evaporator barrel (typically +11 K). Therefore, in order to fully leverage the TES capacity, +two temperature cycles are needed. +

    +

    +The first tank cycle (higher temperature setpoint) is activated whenever +all of the following conditions are true. +

    +
      +
    • +All tank temperature sensors measure a value higher than the mean setpoint value +of the second tank cycle for min. +
    • +
    • +The flow rate out of the lower port of the tank is positive (tank is charging) +for min. +
    • +
    +

    +The second tank cycle (lower temperature setpoint) is activated +whenever both of the following conditions are true. +

    +
      +
    • +All tank temperature sensors measure a value lower than the mean setpoint value +of the first tank cycle for min. +
    • +
    • +The flow rate out of the lower port of the tank is negative (tank is discharging) +for min. +
    • +
    +

    +At initial time the tank cycle flag is set based on the tank temperature condition +only from the above two clauses without a time delay. +If neither condition is true, the tank cycle flag is set based on the flow condition +only in the above two clauses without a time delay. +

    +

    +The minimum runtime of each tank cycle is fixed at 30 min. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end TankCycle; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mo new file mode 100644 index 00000000000..3e8c76315f7 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mo @@ -0,0 +1,43 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation; +model StageIndex + extends Modelica.Icons.Example; + + Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StageIndex + sta(nSta=3, tSta=60) "Staging" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTab( + table=[0,0,0,0; 1,1,0,0; 2,1,1,1; 3,0,1,1; 4,1,0,0; 5,1,0,1; 6,1,1,0; 7,1,0, + 1], + timeScale=100, + period=1000) "Source signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); +equation + connect(booTimTab.y[1], sta.u1) annotation (Line(points={{-38,0},{-20,0},{-20, + 6},{-12,6}}, color={255,0,255})); + connect(booTimTab.y[2], sta.u1Up) + annotation (Line(points={{-38,0},{-12,0}}, color={255,0,255})); + connect(booTimTab.y[3], sta.u1Dow) annotation (Line(points={{-38,0},{-20,0},{-20, + -5.8},{-12,-5.8}}, color={255,0,255})); + +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Documentation(info=" +

    +This is a validation model for the block + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StageIndex. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end StageIndex; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo new file mode 100644 index 00000000000..34f299cac48 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo @@ -0,0 +1,137 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation; +model StagingPlant "Validation of plant staging block" + extends Modelica.Icons.Example; + + parameter Integer nChi(final min=1, start=1)=2 + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Modelica.Units.SI.HeatFlowRate QChiWatChi_flow_nominal=-4.4E6 + "Cooling design heat flow rate of cooling-only chillers (all units)" + annotation (Dialog(group="CHW loop and cooling-only chillers")); + parameter Integer nChiHea(final min=1, start=1)=3 + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Real PLRStaTra(final unit="1", final min=0, final max=1) = 0.85 + "Part load ratio triggering stage transition"; + parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal=-6E6 + "Cooling design heat flow rate of HRC in cascading cooling mode (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal=6.4E6 + "Heating design heat flow rate (all units)" + annotation (Dialog(group="HW loop and heat recovery chillers")); + final parameter Modelica.Units.SI.HeatFlowRate mChiWat_flow_nominal= + abs(QChiWatChi_flow_nominal+QChiWatCasCoo_flow_nominal) / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq / + 5 + "CHW design mass flow rate" + annotation (Dialog(group="CHW loop and cooling-only chillers")); + final parameter Modelica.Units.SI.HeatFlowRate mHeaWat_flow_nominal= + QHeaWat_flow_nominal / + Buildings.Utilities.Psychrometrics.Constants.cpWatLiq / + 10 + "HW design mass flow rate" + annotation (Dialog(group="HW loop and heat recovery chillers")); + + BaseClasses.StagingPlant + staChi( + final nChi=nChi, + final nChiHea=nChiHea, + final QChiWatChi_flow_nominal=QChiWatChi_flow_nominal, + final QChiWatCasCoo_flow_nominal=QChiWatCasCoo_flow_nominal, + QChiWatCasCoo_flow_nominal_approx=QChiWatCasCoo_flow_nominal, + final QHeaWat_flow_nominal=QHeaWat_flow_nominal) "Chiller staging block" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ratFlo(table=[0,0,0; 1, + 0,0; 4,0.3,0.1; 5,1,0.1; 10,0.1,0.1; 13,1,0.3; 16,0.3,1;20,0.1,0.1; 24,0.1,0.3; 25, + 0.1,1; 30,0,0], + timeScale=1000) "Source signal" + annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); + Modelica.Blocks.Sources.BooleanExpression u1(y=time > 0) + "Enable signal" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(k=7 + 273.15) + "Source signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatPriRet(k=12 + 273.15) + "Source signal" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(k=60 + 273.15) + "Source signal" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatPriRet(k=50 + 273.15) + "Source signal" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter sca(final k= + mChiWat_flow_nominal) "Scale signal" + annotation (Placement(transformation(extent={{12,30},{32,50}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter sca1(final k= + mHeaWat_flow_nominal) "Scale signal" + annotation (Placement(transformation(extent={{12,-10},{32,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpSet(k=20E4) + "Source signal" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); +equation + connect(u1.y, staChi.u1Coo) annotation (Line(points={{-79,80},{60,80},{60, + 8.875},{78,8.875}}, + color={255,0,255})); + connect(u1.y, staChi.u1Hea) annotation (Line(points={{-79,80},{60,80},{60, + 7.625},{78,7.625}}, + color={255,0,255})); + connect(TChiWatSupSet.y, staChi.TChiWatSupSet) annotation (Line(points={{-38,-20}, + {40,-20},{40,5},{78,5}}, + color={0,0,127})); + connect(THeaWatPriRet.y, staChi.THeaWatPriRet) annotation (Line(points={{-78,-80}, + {50,-80},{50,-6.25},{78,-6.25}}, + color={0,0,127})); + connect(THeaWatSupSet.y, staChi.THeaWatSupSet) annotation (Line(points={{-38,-60}, + {48,-60},{48,-3.75},{78,-3.75}}, + color={0,0,127})); + connect(TChiWatPriRet.y, staChi.TChiWatPriRet) annotation (Line(points={{-78,-40}, + {42,-40},{42,2.5},{78,2.5}}, + color={0,0,127})); + connect(sca.y, staChi.mChiWatPri_flow) + annotation (Line(points={{34,40},{40,40},{40,6.25},{78,6.25}}, + color={0,0,127})); + connect(sca1.y, staChi.mHeaWatPri_flow) annotation (Line(points={{34,0},{38,0}, + {38,-2.5},{78,-2.5}}, color={0,0,127})); + connect(TChiWatSupSet.y, staChi.TChiWatSup) annotation (Line(points={{-38,-20}, + {40,-20},{40,3.75},{78,3.75}}, color={0,0,127})); + connect(dpSet.y, staChi.dpChiWat) annotation (Line(points={{-38,-100},{46, + -100},{46,0},{78,0}}, color={0,0,127})); + connect(dpSet.y, staChi.dpChiWatSet) annotation (Line(points={{-38,-100},{46, + -100},{46,1.25},{78,1.25}}, color={0,0,127})); + connect(dpSet.y, staChi.dpHeaWatSet) annotation (Line(points={{-38,-100},{ + 45.8824,-100},{45.8824,-7.5},{78,-7.5}}, color={0,0,127})); + connect(dpSet.y, staChi.dpHeaWat) annotation (Line(points={{-38,-100},{ + 45.8824,-100},{45.8824,-8.75},{78,-8.75}}, color={0,0,127})); + connect(THeaWatSupSet.y, staChi.THeaWatSup) annotation (Line(points={{-38,-60}, + {47.8431,-60},{47.8431,-5},{78,-5}}, color={0,0,127})); + connect(ratFlo.y[1], sca.u) annotation (Line(points={{-78,20},{0,20},{0,40},{ + 10,40}}, color={0,0,127})); + connect(ratFlo.y[2], sca1.u) + annotation (Line(points={{-78,20},{0,20},{0,0},{10,0}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mos" + "Simulate and plot"), + experiment( + StopTime=30000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}})), + Documentation(info=" +

    +This is a validation model for the plant staging logic implemented in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StagingPlant. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end StagingPlant; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo new file mode 100644 index 00000000000..e8237bfecae --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo @@ -0,0 +1,73 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation; +model StagingPump "Validation of pump staging block" + extends Modelica.Icons.Example; + + parameter Integer nPum( + final min=1, + start=1)=3 + "Number of pumps" + annotation(Evaluate=true); + parameter Integer nChi( + final min=1, + start=1)=1 + "Number of chillers served by the pumps" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 + annotation(Dialog(group="Nominal condition")); + + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable floSpe( + table=[ + 0,0,0; + 1,0,0; + 4,(nPum - 1)/nPum*m_flow_nominal,1; + 5,m_flow_nominal,0.9; + 10,0,0.1], + timeScale=500) + "Source signal" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StagingPump + staDet( + final nPum=nPum, + final m_flow_nominal=m_flow_nominal) + "Pump staging block - Detailed version" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yVal(k=1) + "Source signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe(t=0.1, + h=5E-2) "Check if valve open" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); +equation + connect(floSpe.y[1],staDet. m_flow) annotation (Line(points={{-58,40},{30,40}, + {30,0},{38,0}}, color={0,0,127})); + connect(floSpe.y[2],staDet. y) + annotation (Line(points={{-58,40},{30,40},{30,-6},{38,-6}}, + color={0,0,127})); + connect(yVal.y, isOpe.u) + annotation (Line(points={{-58,0},{-42,0}}, color={0,0,127})); + connect(isOpe.y,staDet.y1Ena) + annotation (Line(points={{-18,0},{0,0},{0,6},{38,6}}, color={255,0,255})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mos" + "Simulate and plot"), + experiment( + StopTime=5000, + Tolerance=1e-06), + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

    +This is a validation model for the pump staging logic implemented in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StagingPump. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end StagingPump; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.mo new file mode 100644 index 00000000000..2d425a0bd74 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.mo @@ -0,0 +1,10 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

    +This package contains validation models. +

    +")); +end Validation; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.order b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.order new file mode 100644 index 00000000000..b6730a66fd6 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/package.order @@ -0,0 +1,3 @@ +StageIndex +StagingPlant +StagingPump diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo new file mode 100644 index 00000000000..b6ab7a2c2a1 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo @@ -0,0 +1,1559 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses; +block ValveCondenserEvaporator + "Controller for chiller and HRC condenser and evaporator valves" + + parameter Integer nChi(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="CHW loop and cooling-only chillers"), + Evaluate=true); + parameter Integer nChiHea(final min=1, start=1) + "Number of units operating at design conditions" + annotation (Dialog(group="HW loop and heat recovery chillers"), + Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_nominal + "Chiller CHW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChi_flow_min + "Chiller CHW minimum mass flow rate (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mConWatChi_flow_nominal + "Chiller CW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpEvaChi_nominal(displayUnit="Pa") + "Chiller evaporator design pressure drop (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.PressureDifference dpValEvaChi_nominal( + displayUnit="Pa") + "Chiller evaporator isolation valve design pressure drop (value will be used for each unit)" + annotation(Dialog(group="CHW loop and cooling-only chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_nominal + "HRC CHW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mChiWatChiHea_flow_min + "HRC CHW minimum mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mConWatChiHea_flow_nominal + "HRC CW design mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.MassFlowRate mHeaWatChiHea_flow_min + "Chiller HW minimum mass flow rate (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpEvaChiHea_nominal( + displayUnit="Pa") + "Design chiller evaporator pressure drop (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.PressureDifference dpValEvaChiHea_nominal( + displayUnit="Pa") + "HRC evaporator isolation valve design pressure drop (value will be used for each unit)" + annotation(Dialog(group="HW loop and heat recovery chillers")); + parameter Modelica.Units.SI.Temperature TTanSet[2, 2] + "Tank temperature setpoints: 2 cycles with 2 setpoints" + annotation(Dialog(group="CW loop, TES tank and heat pumps")); + parameter Real k(min=0)=0.01 + "Gain of controller" + annotation (Dialog(group="Control parameters")); + parameter Modelica.Units.SI.Time Ti=60 + "Time constant of integrator block" + annotation (Dialog(group="Control parameters")); + parameter Real yMin=0.1 + "Lower limit of valve opening when control loop enabled" + annotation (Dialog(group="Control parameters")); + parameter Real y_reset=1 + "Value to which the controller output is reset if the boolean trigger has a rising edge" + annotation (Dialog(group="Control parameters")); + parameter Real y_neutral=0 + "Value to which the controller output is reset when the controller is disabled" + annotation (Dialog(group="Control parameters")); + parameter Real yBalEvaChi = if dpEvaChiHea_nominal + dpValEvaChiHea_nominal - dpEvaChi_nominal <= 0 + then 1 else (dpValEvaChi_nominal / (dpEvaChiHea_nominal + dpValEvaChiHea_nominal - dpEvaChi_nominal))^0.5 + "Chiller evaporator isolation valve opening for flow balancing with HRC"; + parameter Real yBalEvaChiHea = if dpEvaChi_nominal + dpValEvaChi_nominal - dpEvaChiHea_nominal <= 0 + then 1 else (dpValEvaChiHea_nominal / (dpEvaChi_nominal + dpValEvaChi_nominal - dpEvaChiHea_nominal))^0.5 + "HRC evaporator isolation valve opening for flow balancing with chiller"; + + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput idxCycTan(final min=1, + final max=2) + "Index of active tank cycle" + annotation (Placement(transformation(extent={{-280,80},{-240,120}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.IntegerInput mode(final min=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.tankCharge, + final max=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Condenser loop operating mode" + annotation (Placement(transformation(extent={{-280,160},{-240,200}}), + iconTransformation(extent={{-140,80},{-100,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Chi[nChi] + "Cooling-only chiller On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,360}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,180}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1ChiHea[nChiHea] + "HRC On/Off command" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-60}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,160}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooChiHea[nChiHea] + "HRC cooling mode switchover command: true for cooling, false for heating" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-80}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,140}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HeaCooChiHea[nChiHea] + "HRC direct heat recovery switchover command: true for direct HR, false for cascading" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-100}), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TEvaLvgChiHea[nChiHea](each final + unit="K", each displayUnit="degC") + "HRC evaporator barrel leaving temperature" + annotation (Placement( + transformation(extent={{-280,20},{-240,60}}), iconTransformation( + extent={{-140,-160},{-100,-120}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChiSet_flow(final + unit="kg/s") "Chiller evaporator flow setpoint" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,400}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,60}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChiHeaSet_flow(final + unit="kg/s") "HRC evaporator flow setpoint" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,40}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChi_flow[nChi]( + each final unit="kg/s") + "Chiller evaporator mass flow rate" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,300}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConChi_flow[nChi]( + each final unit="kg/s") + "Chiller condenser mass flow rate" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,280}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,0}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mEvaChiHea_flow[nChiHea]( + each final unit="kg/s") + "HRC evaporator mass flow rate" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-20}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,-20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatEvaEnt(final unit="K", + displayUnit="degC") "HRC evaporator entering CW temperature " annotation ( + Placement(transformation(extent={{-280,-500},{-240,-460}}), + iconTransformation(extent={{-140,-200},{-100,-160}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput mConChiHea_flow[nChiHea]( + each final unit="kg/s") + "HRC condenser mass flow rate" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-140}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-120,-40}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConEntChiHeaSet(final unit="K", + displayUnit="degC") "HRC condenser entering temperature setpoint" + annotation (Placement( + transformation(extent={{-280,-420},{-240,-380}}), iconTransformation( + extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConEntChiHea[nChiHea](each final + unit="K", each displayUnit="degC") "HRC condenser entering temperature" + annotation (Placement(transformation(extent={{-280,-460},{-240,-420}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConLvgChiHea[nChiHea](each final + unit="K", each displayUnit="degC") + "HRC condenser barrel leaving temperature" annotation (Placement( + transformation(extent={{-280,200},{-240,240}}), iconTransformation( + extent={{-140,-120},{-100,-80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConLvgChi[nChi](each final + unit="K", each displayUnit="degC") + "Chiller condenser barrel leaving temperature" annotation (Placement( + transformation(extent={{-280,220},{-240,260}}), iconTransformation( + extent={{-140,-140},{-100,-100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatConRet(final unit= + "K", displayUnit="degC") "CWC return temperature" + annotation (Placement(transformation(extent={{-280,120},{-240,160}}), + iconTransformation(extent={{-140,-180},{-100,-140}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumChiWat + "Enable signal for lead CHW pump" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,340}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,180}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumHeaWat + "Enable signal for lead HW pump" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-340}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,160}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatCon + "Enable signal for lead CW pump serving evaporator loop" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,300}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,140}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1PumConWatEva + "Enable signal for lead CW pump serving evaporator loop" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-300}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaChi[nChi] + "Cooling-only chiller evaporator isolation valve commanded position" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-20}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConChi[nChi](each final + unit="1") + "Cooling-only chiller condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-40}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,0}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaChiHea[nChiHea](each final + unit="1") "HRC evaporator isolation valve commanded position" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-80}),iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-20}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConChiHea[nChiHea](each final + unit="1") "HRC condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-100}), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-40}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValEvaSwiChiHea[nChiHea]( + each final unit="1") "HRC evaporator switchover valve commanded position" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-200}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-60}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConSwiChiHea[nChiHea]( + each final unit="1") "HRC condenser switchover valve commanded position" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-240}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-80}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConWatEvaMix + "HRC evaporator CW mixing valve commanded position" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={260,-440}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-100}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValChiWatMinByp(final unit= + "1") "CHW minimum flow bypass valve control signal" annotation ( + Placement(transformation(extent={{240,440},{280,480}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValHeaWatMinByp(final unit= + "1") "HW minimum flow bypass valve control signal" annotation ( + Placement(transformation(extent={{240,400},{280,440}}), + iconTransformation(extent={{100,40},{140,80}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valEvaChi[nChi]( + each k=k, + each Ti=Ti, + each final yMin=yMin, + each final yMax=1, + each final reverseActing=true, + each final y_reset=y_reset, + each final y_neutral=y_neutral) + "Chiller evaporator isolation valve control when HRC in direct HR" + annotation (Placement(transformation(extent={{-110,390},{-90,410}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valConChi[nChi]( + each k=k, + each Ti=Ti, + each final yMin=yMin, + each final yMax=1, + each final reverseActing=true, + each final y_reset=y_reset, + each final y_neutral=y_neutral) "Chiller condenser isolation valve control" + annotation (Placement(transformation(extent={{70,350},{90,370}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valEvaChiHea[nChiHea]( + each k=4*k, + each Ti=Ti/3, + each final yMin=yMin, + each final yMax=1, + each final reverseActing=true, + each final y_reset=y_reset, + each final y_neutral=y_neutral) "HRC evaporator isolation valve control" + annotation (Placement(transformation(extent={{-130,-10},{-110,10}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valConChiHea[nChiHea]( + each k=k, + each Ti=Ti, + each final yMin=yMin, + each final yMax=1, + each final reverseActing=true, + each final y_reset=y_reset, + each final y_neutral=y_neutral) + "HRC condenser isolation valve control" + annotation (Placement(transformation(extent={{50,-50},{70,-30}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yValConSwi[nChiHea] + "HRC condenser switchover valve commanded position" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-240}))); + Buildings.Controls.OBC.CDL.Logical.Not hea[nChiHea] "Return true if heating" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-190,-240}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nChiHea]( + each final integerTrue=1, + each final integerFalse=0) "Convert" + annotation (Placement(transformation(extent={{-80,-250},{-60,-230}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum numHeaAndOn(nin=nChiHea) + "Number of HRC connected to HW loop and On" + annotation (Placement(transformation(extent={{-50,-250},{-30,-230}}))); + Buildings.Controls.OBC.CDL.Integers.Less intLes[nChiHea] + "Return true if switchover valve to be open for heating operation" + annotation (Placement(transformation(extent={{30,-250},{50,-230}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep( + final nout=nChiHea) + "Replicate" + annotation (Placement(transformation(extent={{-24,-250},{-4,-230}}))); + Buildings.Controls.OBC.CDL.Logical.Or heaOrCooCon[nChiHea] + "Return true if switchover valve to be open for heating or cooling operation" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={80,-240}))); + Buildings.Controls.OBC.CDL.Logical.And heaAndOn[nChiHea] + "Return true if heating AND On" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-240}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant idx[nChiHea](final k={i + for i in 1:nChiHea}) "HRC index" + annotation (Placement(transformation(extent={{-24,-290},{-4,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Or cooOrDir[nChiHea] + "Return true if cooling OR direct HR" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-190,-200}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yValEvaSwi[nChiHea] + "HRC evaporator switchover valve commanded position" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,-200}))); + Buildings.Controls.OBC.CDL.Logical.Not heaAndCas[nChiHea] + "Return true if cascading heating" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-154,-200}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nChiHea] + "Convert" + annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum numHeaAndCasAndOn(nin=nChiHea) + "Number of HRC in cascading heating AND On" + annotation (Placement(transformation(extent={{-52,-210},{-32,-190}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep1(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-24,-210},{-4,-190}}))); + Buildings.Controls.OBC.CDL.Integers.Less intLes1[nChiHea] + "Return true if switchover valve to be open for heating operation" + annotation (Placement(transformation(extent={{30,-210},{50,-190}}))); + Buildings.Controls.OBC.CDL.Logical.Or heaOrCooEva[nChiHea] + "Return true if switchover valve to be open for heating or cooling operation" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-200}))); + Buildings.Controls.OBC.CDL.Logical.And cooOrDirAndOn[nChiHea] + "Return true if (cooling OR direct HR) AND On" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-160}))); + Buildings.Controls.OBC.CDL.Logical.And heaAndCasAndOn[nChiHea] + "Return true if cascading heating AND On" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-110,-200}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe[nChiHea](each t=0.1, + each h=5E-2) "Check if valve open" + annotation (Placement(transformation(extent={{190,-90},{170,-70}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe1[nChiHea](each t= + 0.1, each h=5E-2) "Check if valve open" + annotation (Placement(transformation(extent={{190,-130},{170,-110}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe2[nChi](each t=0.1, + each h=5E-2) "Check if valve open" + annotation (Placement(transformation(extent={{190,-30},{170,-10}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe3[nChi](each t=0.1, + each h=5E-2) "Check if valve open" + annotation (Placement(transformation(extent={{150,-50},{130,-30}}))); + Buildings.Controls.OBC.CDL.Logical.And cooOrDirAndOnAndOpe[nChiHea] + "Return true if HRC (cooling OR direct HR) AND On AND isolation valve open" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={130,380}))); + Buildings.Controls.OBC.CDL.Logical.And onAndOpe[nChi] + "Return true if On AND isolation valve open" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,340}))); + Buildings.Controls.OBC.CDL.Logical.And onAndOpe1[nChi] + "Return true if On AND isolation valve open" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,300}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr enaPumChiWat(nin=nChi+nChiHea) + "Enable signal for lead CHW pump" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,340}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr enaPumConWatCon(nin=nChi+nChiHea+1) + "Enable signal for lead CW pump serving condenser loop" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,300}))); + Buildings.Controls.OBC.CDL.Logical.And cooAndOpe[nChiHea] + "Return true if cooling (necessarily cascading) AND isolation valve open" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,270}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr enaPumHeaWat(nin=nChiHea) + "Enable signal for lead HW pump" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={220,-340}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr enaPumConWatEva(nin=nChiHea) + "Enable signal for lead CW pump serving evaporator loop" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,-300}))); + Buildings.Controls.OBC.CDL.Logical.And heaAndOnAndOpe[nChiHea] + "Return true if heating AND On AND isolation valve open" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,-340}))); + Buildings.Controls.OBC.CDL.Logical.And heaAndCasAndOnAndOpe[nChiHea] + "Return true if cascading heating AND On AND isolation valve open" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,-300}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep2(final nout=nChi) + "Replicate" + annotation (Placement(transformation(extent={{-220,390},{-200,410}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep3(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-210,-10},{-190,10}}))); + Buildings.Controls.OBC.CDL.Logical.And dirHeaCooAndOn[nChiHea] + "Return true if direct HR AND On" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-170,-380}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyDirHeaCooAndOn(nin=nChiHea) + "Return true if any HRC in direct HR AND On" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-130,-380}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valConSwi( + u_s(unit="K", displayUnit="degC"), + u_m(unit="K", displayUnit="degC"), + k=k, + Ti=Ti, + final yMin=0, + final yMax=1, + final reverseActing=false, + final y_reset=0, + final y_neutral=0) + "Condenser switchover valve control" + annotation (Placement(transformation(extent={{-80,-410},{-60,-390}}))); + Modelica.Blocks.Sources.IntegerExpression idxHig(final y=max({if + dirHeaCooAndOn[i].y then i else 1 for i in 1:nChiHea})) + "Highest index of HRC in direct HR (defaulted to 1 if all false)" + annotation (Placement(transformation(extent={{-220,-470},{-200,-450}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep4(final nout= + nChiHea) "Replicate" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,-400}))); + Buildings.Controls.OBC.CDL.Integers.Equal equIdx[nChiHea] + "Return true if index equals highest index of HRC in direct HR" + annotation (Placement(transformation(extent={{20,-378},{40,-358}}))); + Modelica.Blocks.Sources.IntegerExpression idxChiHea[nChiHea](final y={i for i in + 1:nChiHea}) "HRC index" + annotation (Placement(transformation(extent={{-50,-386},{-30,-366}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch selCtl[nChiHea] + "Select control signal" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={70,-400}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer[nChiHea](each final + k=0) "Constant" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={30,-420}))); + Buildings.Controls.OBC.CDL.Continuous.Max max1[nChiHea] + "Take into account entering CW temperature control in direct HR mode" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={180,-240}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor extT(final nin=nChiHea) + "Extract value at given index" + annotation (Placement(transformation(extent={{-180,-450},{-160,-430}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep5(final nout= + nChiHea) "Replicate" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-70,-360}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlTConWatEvaLvg[nChiHea]( + u_s(each final unit="K", each displayUnit="degC"), + u_m(each final unit="K", each displayUnit="degC"), + each final k=k/2, + each Ti=Ti, + each final yMin=0, + each final yMax=1, + each final reverseActing=true, + each final y_reset=0.75, + each final y_neutral=0.75) "HRC evaporator leaving temperature control" + annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor TConWatEvaLvgSet(final nin=2) + "Extract value at given index" + annotation (Placement(transformation(extent={{-170,50},{-150,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaLvgSetCst[2]( + final k=TTanSet[:, 1]) + "HRC evaporator leaving CW temperature setpoint" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-200,60}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep6(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Line valConWatEvaMix[nChiHea] + "Mixing valve opening reset: 1 means no bypass flow" + annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xVal[nChiHea,2](final + k=fill({0,0.5}, nChiHea)) "x-value for mixing valve opening reset" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yVal[nChiHea,2](final k= + fill({0,1}, nChiHea)) + "y-value for mixing valve opening reset: 1 means no bypass flow" + annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); + Buildings.Controls.OBC.CDL.Continuous.Line floEva[nChiHea] + "HRC evaporator flow reset when On AND cascading heating" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo[nChiHea,2](final + k=fill({0.5,1}, nChiHea)) "x-value for evaporator flow reset" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo[nChiHea,2](final + k=fill({mChiWatChiHea_flow_min,mChiWatChiHea_flow_nominal}, nChiHea)) + "y-value for evaporator flow reset" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch selFloSet[nChiHea] + "Select HRC evaporator flow setpoint based on operating mode" + annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlTConWatEvaEnt( + u_s(final unit="K", displayUnit="degC"), + u_m(final unit="K", displayUnit="degC"), + k=k, + Ti=Ti, + final yMin=0, + final yMax=1, + final reverseActing=true, + final y_reset=1, + final y_neutral=1) + "HRC evaporator entering temperature control: 1 means no bypass flow" + annotation (Placement(transformation(extent={{-10,-470},{10,-450}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyHeaAndCasAndOn(nin=nChiHea) + "Return true if ANY HRC cascading heating AND On" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-50,-500}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaEntSet(final k= + max(TTanSet)) "HRC evaporator entering CW temperature setpoint" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-50,-460}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin(nin=nChiHea+1) + "Combine outputs from evaporator entering and leaving temperature control" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={210,-440}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatConRetSetCst[2](final + k=TTanSet[:, 2]) "CW condenser loop return temperature setpoint" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-200,100}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor TConWatConRetSet(final nin=2) + "Extract value at given index" + annotation (Placement(transformation(extent={{-170,90},{-150,110}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlTConWatConRet( + u_s(final unit="K", displayUnit="degC"), + u_m(final unit="K", displayUnit="degC"), + k=k, + Ti=Ti, + final yMin=0, + final yMax=1, + final reverseActing=false, + final y_reset=0.2, + final y_neutral=0.0) + "Condenser loop CW return temperature control" + annotation (Placement(transformation(extent={{-90,170},{-70,190}}))); + Buildings.Controls.OBC.CDL.Integers.Equal isChaAss + "Check if charge assist mode is active" + annotation (Placement(transformation(extent={{-170,150},{-150,170}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chaAss(final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.chargeAssist) + "Charge assist mode index" + annotation (Placement(transformation(extent={{-210,150},{-190,170}}))); + Buildings.Controls.OBC.CDL.Continuous.Line floCon[nChi + nChiHea] + "Condenser flow reset (normalized output)" + annotation (Placement(transformation(extent={{130,190},{150,210}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFloCon[nChi + nChiHea, + 2](final k=fill({0,1}, nChi + nChiHea)) "x-value for flow reset" + annotation (Placement(transformation(extent={{60,210},{80,230}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFloCon[nChi + nChiHea, + 2](final k=fill({0.1,1}, nChi + nChiHea)) + "y-value for condenser flow reset" + annotation (Placement(transformation(extent={{60,170},{80,190}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaFloConChi[nChi]( + each final k=mConWatChi_flow_nominal) "Scale flow reset signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={50,360}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaFloConChiHea[nChiHea]( + each final k=mConWatChiHea_flow_nominal) "Scale flow reset signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={30,-40}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctlTConLvgChi[nChi + + nChiHea]( + u_s(each final unit="K", each displayUnit="degC"), + u_m(each final unit="K", each displayUnit="degC"), + each k=k, + each Ti=Ti, + each final yMin=0, + each final yMax=1, + each final reverseActing=false, + each final y_reset=0.5, + each final y_neutral=0) "Condenser leaving temperature control" + annotation (Placement(transformation(extent={{-70,250},{-50,270}}))); + + Buildings.Controls.OBC.CDL.Integers.Sources.Constant tanCha(final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.tankCharge) + "Tank charge/discharge mode index" + annotation (Placement(transformation(extent={{-210,190},{-190,210}}))); + Buildings.Controls.OBC.CDL.Integers.Equal isTanCha + "Check if tank charge/discharge mode is active" + annotation (Placement(transformation(extent={{-170,190},{-150,210}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator + rep9(final nout=nChi + + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep10(final nout=nChi + + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-100,250},{-80,270}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep11(final nout=nChi + + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-50,170},{-30,190}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one[nChi + nChiHea]( + each final k=1) "Constant" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-40,220}))); + Buildings.Controls.OBC.CDL.Continuous.Switch swiFloSet[nChi + nChiHea] + "Switch condenser flow setpoint based on condenser loop operating mode" + annotation (Placement(transformation(extent={{30,190},{50,210}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator + rep12(final nout=nChi + + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-10,190},{10,210}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch swiFloSet1[nChi + nChiHea] + "Switch condenser flow setpoint based on condenser loop operating mode" + annotation (Placement(transformation(extent={{-10,230},{10,250}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valChiWatMinByp[nChi + + nChiHea]( + each k=0.01, + each Ti=Ti, + each final yMin=0, + each final yMax=1, + each final reverseActing=true, + each final y_reset=0, + each final y_neutral=0) "CHW minimum flow bypass valve control" + annotation (Placement(transformation(extent={{144,450},{164,470}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable valHeaWatMinByp[nChiHea]( + each k=0.01, + each Ti=Ti, + each final yMin=0, + each final yMax=1, + each final reverseActing=true, + each final y_reset=0, + each final y_neutral=0) "HW minimum flow bypass valve control" + annotation (Placement(transformation(extent={{170,410},{190,430}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floChiWatMin[nChi + + nChiHea](final k=1.1*cat( + 1, + fill(mChiWatChi_flow_min, nChi), + fill(mChiWatChiHea_flow_min, nChiHea))) "Minimum flow setpoint" + annotation (Placement(transformation(extent={{100,450},{120,470}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floHeaWatMin[nChiHea](final k= + 1.1*fill(mHeaWatChiHea_flow_min, nChiHea)) "Minimum flow setpoint" + annotation (Placement(transformation(extent={{100,410},{120,430}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMax max2(nin=nChi + nChiHea) + "Maximum control signal" + annotation (Placement(transformation(extent={{200,450},{220,470}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiMax max3(nin=nChiHea) + "Maximum control signal" + annotation (Placement(transformation(extent={{200,410},{220,430}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator + rep7(final nout=nChi) + "Replicate" + annotation (Placement(transformation(extent={{-150,370},{-130,390}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch swi[nChi] + "Condition to enable evaporator flow control loop" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,500}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1[nChi](final k= + fill(0, nChi)) "Constant" + annotation (Placement(transformation(extent={{-70,490},{-50,510}}))); + Buildings.Controls.OBC.CDL.Logical.Not noHeaAndCooAndOn + "Return true if NO HRC in direct HR AND On" + annotation (Placement(transformation(extent={{-220,430},{-200,450}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyCooAndOn(nin=nChiHea) + "Return true if ANY HRC in cascading cooling AND On" + annotation (Placement(transformation(extent={{-220,470},{-200,490}}))); + Buildings.Controls.OBC.CDL.Logical.And and2 + "Condition to switch to fixed valve opening (balancing)" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-170,460}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator + rep8(final nout=nChi) + "Replicate" + annotation (Placement(transformation(extent={{-150,450},{-130,470}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch swi1[nChi] + "Condition to enable evaporator flow control loop" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-60,470}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yBalChi[nChi](final k= + fill(yBalEvaChi, nChi)) "Constant" + annotation (Placement(transformation(extent={{-150,490},{-130,510}}))); + Buildings.Controls.OBC.CDL.Logical.Not fulOpe[nChi] + "Condition to switch to fixed full opening" + annotation (Placement(transformation(extent={{-110,430},{-90,450}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch swi2[nChi] + "Condition to enable evaporator flow control loop" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-60,440}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one1[nChi](final k= + fill(1, nChi)) "Constant" + annotation (Placement(transformation(extent={{-110,490},{-90,510}}))); + Buildings.Controls.OBC.CDL.Logical.And cooAndOn[nChiHea] + "Return true if HRC in cascading cooling AND On" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-170,-60}))); + Buildings.Controls.OBC.CDL.Continuous.Switch selValPos[nChiHea] + "Select HRC evaporator isolation valve command signal" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yBalChiHea[nChiHea]( + final k=fill(yBalEvaChiHea, nChiHea)) "Constant" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr anyCooOrDirAndOn(nin=nChiHea) + "Return true if any HRC in (cooling OR direct HR) AND On" annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={-170,420}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep13(final nout=nChi) + "Replicate" + annotation (Placement(transformation(extent={{-150,410},{-130,430}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChiHea] + "Convert" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + Buildings.Controls.OBC.CDL.Continuous.Max max4[nChiHea] "Convert" + annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConWatByp(final unit="1") + "CW chiller bypass valve control signal" annotation (Placement( + transformation(extent={{240,80},{280,120}}, rotation=0), + iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={120,-140}))); + Buildings.Controls.OBC.CDL.Logical.Not isCloConChi[nChi] + "Check if valve closed" + annotation (Placement(transformation(extent={{80,10},{60,30}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd allCloAndChaAndEna(nin=nChi+2) + "Check if all valves closed AND Charge Assist mode is active" + annotation (Placement(transformation(extent={{40,10},{20,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch enaCtlValConWatByp + "Enable CW bypass valve control" + annotation (Placement(transformation(extent={{170,90},{190,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer2(final k=0) + "Constant" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={140,80}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe4(t=0.1, h=5E-2) + "Check if valve open" + annotation (Placement(transformation(extent={{190,130},{170,150}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooOrHea + "Plant Enable signal: either cooling or heating is enabled" annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-260,-40}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-78,220}))); +equation + connect(u1Chi, valConChi.uEna) annotation (Line(points={{-260,360},{-220,360}, + {-220,340},{76,340},{76,348}},color={255,0,255})); + connect(valConChi.y, yValConChi) annotation (Line(points={{92,360},{226,360}, + {226,-40},{260,-40}}, + color={0,0,127})); + connect(rep.y,intLes. u2) annotation (Line(points={{-2,-240},{10,-240},{10,-248}, + {28,-248}}, color={255,127,0})); + connect(intLes.y, heaOrCooCon.u2) annotation (Line(points={{52,-240},{56,-240}, + {56,-248},{68,-248}}, color={255,0,255})); + connect(heaOrCooCon.y, yValConSwi.u) + annotation (Line(points={{92,-240},{118,-240}},color={255,0,255})); + connect(numHeaAndOn.y, rep.u) + annotation (Line(points={{-28,-240},{-26,-240}}, color={255,127,0})); + connect(u1CooChiHea, hea.u) annotation (Line(points={{-260,-80},{-220,-80},{ + -220,-240},{-202,-240}}, + color={255,0,255})); + connect(u1ChiHea, heaAndOn.u1) annotation (Line(points={{-260,-60},{-216,-60}, + {-216,-220},{-130,-220},{-130,-240},{-122,-240}}, + color={255,0,255})); + connect(hea.y, heaAndOn.u2) annotation (Line(points={{-178,-240},{-134,-240}, + {-134,-248},{-122,-248}},color={255,0,255})); + connect(heaAndOn.y, booToInt.u) + annotation (Line(points={{-98,-240},{-82,-240}}, color={255,0,255})); + connect(idx.y, intLes.u1) annotation (Line(points={{-2,-280},{20,-280},{20,-240}, + {28,-240}}, color={255,127,0})); + connect(cooOrDir.y,heaAndCas. u) annotation (Line(points={{-178,-200},{-166, + -200}}, color={255,0,255})); + connect(booToInt1.y, numHeaAndCasAndOn.u) + annotation (Line(points={{-58,-200},{-54,-200}}, color={255,127,0})); + connect(numHeaAndCasAndOn.y, rep1.u) + annotation (Line(points={{-30,-200},{-26,-200}}, color={255,127,0})); + connect(rep1.y,intLes1. u2) annotation (Line(points={{-2,-200},{10,-200},{10,-208}, + {28,-208}}, color={255,127,0})); + connect(intLes1.y, heaOrCooEva.u2) annotation (Line(points={{52,-200},{80, + -200},{80,-208},{118,-208}},color={255,0,255})); + connect(heaOrCooEva.y, yValEvaSwi.u) + annotation (Line(points={{142,-200},{168,-200}}, + color={255,0,255})); + connect(u1CooChiHea, cooOrDir.u1) annotation (Line(points={{-260,-80},{-220,-80}, + {-220,-200},{-202,-200}}, color={255,0,255})); + connect(u1HeaCooChiHea, cooOrDir.u2) annotation (Line(points={{-260,-100},{-224, + -100},{-224,-208},{-202,-208}},color={255,0,255})); + connect(cooOrDir.y, cooOrDirAndOn.u2) annotation (Line(points={{-178,-200},{-170, + -200},{-170,-168},{-122,-168}}, color={255,0,255})); + connect(u1ChiHea, cooOrDirAndOn.u1) annotation (Line(points={{-260,-60},{-216, + -60},{-216,-160},{-122,-160}}, color={255,0,255})); + connect(heaAndCas.y, heaAndCasAndOn.u2) annotation (Line(points={{-142,-200}, + {-134,-200},{-134,-208},{-122,-208}},color={255,0,255})); + connect(u1ChiHea, heaAndCasAndOn.u1) annotation (Line(points={{-260,-60},{ + -216,-60},{-216,-180},{-130,-180},{-130,-200},{-122,-200}}, + color={255,0,255})); + connect(heaAndCasAndOn.y, booToInt1.u) + annotation (Line(points={{-98,-200},{-82,-200}}, color={255,0,255})); + connect(booToInt.y, numHeaAndOn.u) + annotation (Line(points={{-58,-240},{-52,-240}}, color={255,127,0})); + connect(idx.y, intLes1.u1) annotation (Line(points={{-2,-280},{20,-280},{20,-200}, + {28,-200}}, color={255,127,0})); + connect(cooOrDirAndOn.y, heaOrCooEva.u1) + annotation (Line(points={{-98,-160},{100,-160},{100,-200},{118,-200}}, + color={255,0,255})); + connect(yValEvaChi, isOpe2.u) annotation (Line(points={{260,-20},{192,-20}}, + color={0,0,127})); + connect(yValConChi, isOpe3.u) annotation (Line(points={{260,-40},{152,-40}}, + color={0,0,127})); + connect(yValEvaChiHea, isOpe.u) annotation (Line(points={{260,-80},{192,-80}}, + color={0,0,127})); + connect(yValConChiHea, isOpe1.u) annotation (Line(points={{260,-100},{220, + -100},{220,-120},{192,-120}}, + color={0,0,127})); + connect(isOpe.y, cooOrDirAndOnAndOpe.u1) annotation (Line(points={{168,-80},{ + 108,-80},{108,380},{118,380}}, + color={255,0,255})); + connect(cooOrDirAndOn.y, cooOrDirAndOnAndOpe.u2) annotation (Line(points={{-98, + -160},{100,-160},{100,388},{118,388}}, color={255,0,255})); + connect(isOpe2.y, onAndOpe.u2) annotation (Line(points={{168,-20},{116,-20},{ + 116,332},{118,332}}, + color={255,0,255})); + connect(u1Chi, onAndOpe.u1) annotation (Line(points={{-260,360},{-220,360},{ + -220,340},{118,340}}, color={255,0,255})); + connect(isOpe3.y, onAndOpe1.u2) annotation (Line(points={{128,-40},{112,-40}, + {112,292},{118,292}}, + color={255,0,255})); + connect(u1Chi, onAndOpe1.u1) annotation (Line(points={{-260,360},{-220,360},{-220, + 340},{92,340},{92,300},{118,300}}, color={255,0,255})); + connect(onAndOpe[1:nChi].y, enaPumChiWat.u[1:nChi]) + annotation (Line(points={{142,340},{168,340}}, color={255,0,255})); + connect(cooOrDirAndOnAndOpe[1:nChiHea].y, enaPumChiWat.u[nChi+1:nChi+nChiHea]) annotation (Line(points={{142,380}, + {160,380},{160,340},{168,340}}, color={255,0,255})); + connect(onAndOpe1[1:nChi].y, enaPumConWatCon.u[1:nChi]) + annotation (Line(points={{142,300},{168,300}}, + color={255,0,255})); + connect(u1CooChiHea, cooAndOpe.u1) annotation (Line(points={{-260,-80},{88,-80}, + {88,270},{118,270}}, color={255,0,255})); + connect(isOpe1.y, cooAndOpe.u2) annotation (Line(points={{168,-120},{92,-120}, + {92,262},{118,262}}, color={255,0,255})); + connect(cooAndOpe[1:nChiHea].y, enaPumConWatCon.u[nChi+1:nChi+nChiHea]) annotation (Line(points={{142,270}, + {160,270},{160,300},{168,300}}, + color={255,0,255})); + connect(heaAndOn.y, heaAndOnAndOpe.u1) annotation (Line(points={{-98,-240},{ + -84,-240},{-84,-340},{168,-340}}, color={255,0,255})); + connect(isOpe1.y, heaAndOnAndOpe.u2) annotation (Line(points={{168,-120},{160, + -120},{160,-348},{168,-348}}, color={255,0,255})); + connect(heaAndOnAndOpe.y, enaPumHeaWat.u) + annotation (Line(points={{192,-340},{208,-340}}, color={255,0,255})); + connect(heaAndCasAndOn.y, heaAndCasAndOnAndOpe.u1) annotation (Line(points={{-98, + -200},{-90,-200},{-90,-300},{118,-300}},color={255,0,255})); + connect(isOpe.y, heaAndCasAndOnAndOpe.u2) annotation (Line(points={{168,-80}, + {108,-80},{108,-308},{118,-308}}, + color={255,0,255})); + connect(heaAndCasAndOnAndOpe.y, enaPumConWatEva.u) + annotation (Line(points={{142,-300},{168,-300}}, + color={255,0,255})); + connect(enaPumChiWat.y, y1PumChiWat) + annotation (Line(points={{192,340},{260,340}}, color={255,0,255})); + connect(enaPumConWatCon.y, y1PumConWatCon) + annotation (Line(points={{192,300},{260,300}}, + color={255,0,255})); + connect(enaPumHeaWat.y, y1PumHeaWat) annotation (Line(points={{232,-340},{260, + -340}}, color={255,0,255})); + connect(rep3.u, mEvaChiHeaSet_flow) + annotation (Line(points={{-212,0},{-260,0}}, color={0,0,127})); + connect(yValEvaSwi.y, yValEvaSwiChiHea) annotation (Line(points={{192,-200},{ + 260,-200}}, color={0,0,127})); + connect(enaPumConWatEva.y, y1PumConWatEva) + annotation (Line(points={{192,-300},{260,-300}}, color={255,0,255})); + connect(u1ChiHea, dirHeaCooAndOn.u1) annotation (Line(points={{-260,-60},{ + -216,-60},{-216,-380},{-182,-380}}, + color={255,0,255})); + connect(u1HeaCooChiHea, dirHeaCooAndOn.u2) annotation (Line(points={{-260, + -100},{-224,-100},{-224,-388},{-182,-388}}, + color={255,0,255})); + connect(dirHeaCooAndOn.y, anyDirHeaCooAndOn.u) + annotation (Line(points={{-158,-380},{-142,-380}}, color={255,0,255})); + connect(TConEntChiHeaSet, valConSwi.u_s) + annotation (Line(points={{-260,-400},{-82,-400}}, color={0,0,127})); + connect(anyDirHeaCooAndOn.y, valConSwi.uEna) annotation (Line(points={{-118, + -380},{-100,-380},{-100,-420},{-74,-420},{-74,-412}}, color={255,0, + 255})); + connect(valConSwi.y, rep4.u) + annotation (Line(points={{-58,-400},{-42,-400}}, color={0,0,127})); + connect(equIdx.y, selCtl.u2) annotation (Line(points={{42,-368},{50,-368},{50, + -400},{58,-400}}, color={255,0,255})); + connect(rep4.y, selCtl.u1) annotation (Line(points={{-18,-400},{40,-400},{40,-392}, + {58,-392}}, color={0,0,127})); + connect(zer.y, selCtl.u3) annotation (Line(points={{42,-420},{50,-420},{50,-408}, + {58,-408}}, color={0,0,127})); + connect(yValConSwi.y, max1.u1) annotation (Line(points={{142,-240},{150,-240}, + {150,-234},{168,-234}}, color={0,0,127})); + connect(max1.y, yValConSwiChiHea) annotation (Line(points={{192,-240},{260, + -240}}, color={0,0,127})); + connect(selCtl.y, max1.u2) annotation (Line(points={{82,-400},{150,-400},{150, + -246},{168,-246}}, color={0,0,127})); + connect(TConEntChiHea, extT.u) + annotation (Line(points={{-260,-440},{-182,-440}}, color={0,0,127})); + connect(idxHig.y, extT.index) annotation (Line(points={{-199,-460},{-170,-460}, + {-170,-452}}, color={255,127,0})); + connect(extT.y, valConSwi.u_m) annotation (Line(points={{-158,-440},{-70,-440}, + {-70,-412}}, color={0,0,127})); + connect(idxHig.y, rep5.u) + annotation (Line(points={{-199,-460},{-110,-460},{-110,-360},{-82,-360}}, + color={255,127,0})); + connect(idxChiHea.y, equIdx.u2) + annotation (Line(points={{-29,-376},{18,-376}}, color={255,127,0})); + connect(rep5.y, equIdx.u1) annotation (Line(points={{-58,-360},{-20,-360},{-20, + -368},{18,-368}}, color={255,127,0})); + connect(heaAndCasAndOn.y, ctlTConWatEvaLvg.uEna) annotation (Line(points={{-98, + -200},{-90,-200},{-90,20},{-104,20},{-104,48}}, color={255,0,255})); + connect(TEvaLvgChiHea, ctlTConWatEvaLvg.u_m) annotation (Line(points={{-260,40}, + {-100,40},{-100,48}}, color={0,0,127})); + connect(TConWatEvaLvgSetCst.y, TConWatEvaLvgSet.u) + annotation (Line(points={{-188,60},{-172,60}}, color={0,0,127})); + connect(idxCycTan, TConWatEvaLvgSet.index) annotation (Line(points={{-260,100}, + {-230,100},{-230,44},{-160,44},{-160,48}}, color={255,127,0})); + connect(rep6.y, ctlTConWatEvaLvg.u_s) + annotation (Line(points={{-118,60},{-112,60}}, color={0,0,127})); + connect(TConWatEvaLvgSet.y, rep6.u) + annotation (Line(points={{-148,60},{-142,60}}, color={0,0,127})); + connect(yVal[:, 2].y, valConWatEvaMix.f2) annotation (Line(points={{-58,90},{-46, + 90},{-46,92},{-42,92}}, color={0,0,127})); + connect(yVal[:, 1].y, valConWatEvaMix.f1) annotation (Line(points={{-58,90},{-46, + 90},{-46,104},{-42,104}}, color={0,0,127})); + connect(xVal[:, 1].y, valConWatEvaMix.x1) annotation (Line(points={{-58,120},{ + -48,120},{-48,108},{-42,108}}, color={0,0,127})); + connect(xVal[:, 2].y, valConWatEvaMix.x2) annotation (Line(points={{-58,120},{ + -48,120},{-48,96},{-42,96}}, color={0,0,127})); + connect(yFlo[:, 2].y, floEva.f2) annotation (Line(points={{-58,10},{-46,10},{-46, + 12},{-42,12}}, color={0,0,127})); + connect(yFlo[:, 1].y, floEva.f1) annotation (Line(points={{-58,10},{-46,10},{-46, + 24},{-42,24}}, color={0,0,127})); + connect(xFlo[:, 1].y, floEva.x1) annotation (Line(points={{-58,40},{-48,40},{-48, + 28},{-42,28}}, color={0,0,127})); + connect(xFlo[:, 2].y, floEva.x2) annotation (Line(points={{-58,40},{-48,40},{-48, + 16},{-42,16}}, color={0,0,127})); + connect(heaAndCasAndOn.y, selFloSet.u2) annotation (Line(points={{-98,-200},{-90, + -200},{-90,-24},{-168,-24},{-168,0},{-162,0}}, color={255,0,255})); + connect(rep3.y, selFloSet.u3) annotation (Line(points={{-188,0},{-180,0},{-180, + -8},{-162,-8}}, color={0,0,127})); + connect(ctlTConWatEvaLvg.y, valConWatEvaMix.u) annotation (Line(points={{-88, + 60},{-44,60},{-44,100},{-42,100}}, color={0,0,127})); + connect(ctlTConWatEvaLvg.y, floEva.u) annotation (Line(points={{-88,60},{-44,60}, + {-44,20},{-42,20}}, color={0,0,127})); + connect(selFloSet.y, valEvaChiHea.u_s) + annotation (Line(points={{-138,0},{-132,0}}, color={0,0,127})); + connect(floEva.y, selFloSet.u1) annotation (Line(points={{-18,20},{-10,20},{-10, + -16},{-174,-16},{-174,8},{-162,8}}, color={0,0,127})); + connect(TConWatEvaEnt, ctlTConWatEvaEnt.u_m) annotation (Line(points={{-260, + -480},{0,-480},{0,-472}}, + color={0,0,127})); + connect(anyHeaAndCasAndOn.y, ctlTConWatEvaEnt.uEna) annotation (Line(points={{-38, + -500},{-4,-500},{-4,-472}}, color={255,0,255})); + connect(heaAndCasAndOn.y, anyHeaAndCasAndOn.u) annotation (Line(points={{-98, + -200},{-90,-200},{-90,-500},{-62,-500}}, + color={255,0,255})); + connect(TConWatEvaEntSet.y, ctlTConWatEvaEnt.u_s) + annotation (Line(points={{-38,-460},{-12,-460}}, color={0,0,127})); + connect(ctlTConWatEvaEnt.y, mulMin.u[nChiHea+1]) + annotation (Line(points={{12,-460},{180,-460},{180,-440},{198,-440}}, + color={0,0,127})); + connect(valConWatEvaMix.y, mulMin.u[1:nChiHea]) annotation (Line(points={{-18,100}, + {0,100},{0,-440},{198,-440}}, color={0,0,127})); + connect(mulMin.y, yValConWatEvaMix) + annotation (Line(points={{222,-440},{260,-440}}, color={0,0,127})); + connect(TConWatConRetSetCst.y, TConWatConRetSet.u) annotation (Line(points={{-188, + 100},{-172,100}}, color={0,0,127})); + connect(idxCycTan, TConWatConRetSet.index) annotation (Line(points={{-260,100}, + {-230,100},{-230,80},{-160,80},{-160,88}}, color={255,127,0})); + connect(mode, isChaAss.u1) annotation (Line(points={{-260,180},{-180,180},{-180, + 160},{-172,160}}, color={255,127,0})); + connect(chaAss.y, isChaAss.u2) annotation (Line(points={{-188,160},{-184,160}, + {-184,152},{-172,152}}, color={255,127,0})); + connect(isChaAss.y, ctlTConWatConRet.uEna) annotation (Line(points={{-148,160}, + {-84,160},{-84,168}}, color={255,0,255})); + connect(TConWatConRetSet.y, ctlTConWatConRet.u_s) annotation (Line(points={{-148, + 100},{-110,100},{-110,180},{-92,180}}, color={0,0,127})); + connect(TConWatConRet, ctlTConWatConRet.u_m) annotation (Line(points={{-260,140}, + {-80,140},{-80,168}}, color={0,0,127})); + connect(xFloCon[:, 1].y, floCon.x1) annotation (Line(points={{82,220},{124,220}, + {124,208},{128,208}}, + color={0,0,127})); + connect(xFloCon[:, 2].y, floCon.x2) annotation (Line(points={{82,220},{124,220}, + {124,196},{128,196}}, + color={0,0,127})); + connect(mode, isTanCha.u2) annotation (Line(points={{-260,180},{-180,180},{-180, + 192},{-172,192}}, color={255,127,0})); + connect(tanCha.y, isTanCha.u1) + annotation (Line(points={{-188,200},{-172,200}}, color={255,127,0})); + connect(TConLvgChi, ctlTConLvgChi[1:nChi].u_m) annotation (Line(points={{-260, + 240},{-60,240},{-60,248}}, color={0,0,127})); + connect(TConLvgChiHea, ctlTConLvgChi[nChi + 1:nChi + nChiHea].u_m) + annotation (Line(points={{-260,220},{-60,220},{-60,248}}, color={0,0,127})); + connect(isTanCha.y, rep9.u) + annotation (Line(points={{-148,200},{-142,200}}, color={255,0,255})); + connect(rep9.y, ctlTConLvgChi.uEna) annotation (Line(points={{-118,200},{-64,200}, + {-64,248}}, color={255,0,255})); + connect(rep10.y, ctlTConLvgChi.u_s) + annotation (Line(points={{-78,260},{-72,260}}, color={0,0,127})); + connect(ctlTConWatConRet.y, rep11.u) + annotation (Line(points={{-68,180},{-52,180}}, color={0,0,127})); + connect(TConWatConRetSet.y, rep10.u) annotation (Line(points={{-148,100},{-110, + 100},{-110,260},{-102,260}}, color={0,0,127})); + connect(rep12.y, swiFloSet.u2) annotation (Line(points={{12,200},{28,200}}, + color={255,0,255})); + connect(isChaAss.y, rep12.u) + annotation (Line(points={{-148,160},{-20,160},{-20,200},{-12,200}}, + color={255,0,255})); + connect(rep11.y, swiFloSet.u1) annotation (Line(points={{-28,180},{16,180},{16, + 208},{28,208}}, + color={0,0,127})); + connect(rep9.y, swiFloSet1.u2) annotation (Line(points={{-118,200},{-56,200}, + {-56,240},{-12,240}},color={255,0,255})); + connect(ctlTConLvgChi.y, swiFloSet1.u1) annotation (Line(points={{-48,260},{ + -20,260},{-20,248},{-12,248}}, + color={0,0,127})); + connect(one.y, swiFloSet1.u3) annotation (Line(points={{-28,220},{-20,220},{-20, + 232},{-12,232}}, color={0,0,127})); + connect(swiFloSet1.y, swiFloSet.u3) annotation (Line(points={{12,240},{20,240}, + {20,192},{28,192}}, color={0,0,127})); + connect(swiFloSet.y, floCon.u) + annotation (Line(points={{52,200},{128,200}}, color={0,0,127})); + connect(yFloCon[:, 1].y, floCon.f1) annotation (Line(points={{82,180},{120,180}, + {120,204},{128,204}}, color={0,0,127})); + connect(yFloCon[:, 2].y, floCon.f2) annotation (Line(points={{82,180},{120,180}, + {120,192},{128,192}}, color={0,0,127})); + connect(scaFloConChi.y, valConChi.u_s) + annotation (Line(points={{62,360},{68,360}}, color={0,0,127})); + connect(scaFloConChiHea.y, valConChiHea.u_s) + annotation (Line(points={{42,-40},{48,-40}}, color={0,0,127})); + connect(floCon[nChi + 1:nChi + nChiHea].y, scaFloConChiHea.u) annotation ( + Line(points={{152,200},{160,200},{160,150},{4,150},{4,-40},{18,-40}}, + color={0,0,127})); + connect(floCon[1:nChi].y, scaFloConChi.u) annotation (Line(points={{152,200},{ + 160,200},{160,240},{32,240},{32,360},{38,360}}, color={0,0,127})); + connect(onAndOpe.y, valChiWatMinByp[1:nChi].uEna) annotation (Line(points={{142,340}, + {150,340},{150,448}}, color={255,0,255})); + connect(cooOrDirAndOnAndOpe.y, valChiWatMinByp[nChi + 1:nChi + nChiHea].uEna) + annotation (Line(points={{142,380},{160,380},{160,430},{150,430},{150,448}}, + color={255,0,255})); + connect(heaAndOnAndOpe.y, valHeaWatMinByp.uEna) annotation (Line(points={{192, + -340},{200,-340},{200,390},{176,390},{176,408}}, + color={255,0,255})); + connect(floChiWatMin.y, valChiWatMinByp.u_s) annotation (Line(points={{122,460}, + {142,460}}, color={0,0,127})); + connect(floHeaWatMin.y, valHeaWatMinByp.u_s) + annotation (Line(points={{122,420},{168,420}}, color={0,0,127})); + connect(max2.y, yValChiWatMinByp) + annotation (Line(points={{222,460},{260,460}}, color={0,0,127})); + connect(valChiWatMinByp.y, max2.u) + annotation (Line(points={{166,460},{198,460}}, color={0,0,127})); + connect(max3.y, yValHeaWatMinByp) annotation (Line(points={{222,420},{234,420}, + {234,420},{260,420}}, color={0,0,127})); + connect(valHeaWatMinByp.y, max3.u) + annotation (Line(points={{192,420},{198,420}},color={0,0,127})); + connect(mEvaChiHea_flow, valEvaChiHea.u_m) annotation (Line(points={{-260,-20}, + {-120,-20},{-120,-12}}, color={0,0,127})); + connect(mEvaChiHea_flow, valChiWatMinByp[nChi + 1:nChi + nChiHea].u_m) + annotation (Line(points={{-260,-20},{96,-20},{96,436},{154,436},{154,448}}, + color={0,0,127})); + connect(mConChi_flow, valConChi.u_m) + annotation (Line(points={{-260,280},{80,280},{80,348}}, color={0,0,127})); + connect(mEvaChi_flow, valEvaChi.u_m) annotation (Line(points={{-260,300},{ + -100,300},{-100,388}}, + color={0,0,127})); + connect(mEvaChi_flow, valChiWatMinByp[1:nChi].u_m) annotation (Line(points={{-260, + 300},{0,300},{0,440},{154,440},{154,448}}, + color={0,0,127})); + connect(mConChiHea_flow, valConChiHea.u_m) annotation (Line(points={{-260,-140}, + {60,-140},{60,-52}}, color={0,0,127})); + connect(mConChiHea_flow, valHeaWatMinByp.u_m) + annotation (Line(points={{-260,-140},{104,-140},{104,400},{180,400},{180, + 408}}, color={0,0,127})); + connect(mEvaChiSet_flow, rep2.u) + annotation (Line(points={{-260,400},{-222,400}}, color={0,0,127})); + connect(rep2.y, valEvaChi.u_s) + annotation (Line(points={{-198,400},{-112,400}}, color={0,0,127})); + connect(anyDirHeaCooAndOn.y, rep7.u) annotation (Line(points={{-118,-380},{ + -100,-380},{-100,-340},{-234,-340},{-234,380},{-152,380}}, + color={255,0,255})); + connect(zer1.y, swi.u3) annotation (Line(points={{-48,500},{-30,500},{-30,492}, + {-12,492}}, color={0,0,127})); + connect(u1Chi, swi.u2) annotation (Line(points={{-260,360},{-20,360},{-20,500}, + {-12,500}}, color={255,0,255})); + connect(anyDirHeaCooAndOn.y, noHeaAndCooAndOn.u) annotation (Line(points={{-118, + -380},{-100,-380},{-100,-340},{-234,-340},{-234,440},{-222,440}}, + color={255,0,255})); + connect(anyCooAndOn.y, and2.u1) annotation (Line(points={{-198,480},{-190,480}, + {-190,460},{-182,460}}, color={255,0,255})); + connect(noHeaAndCooAndOn.y, and2.u2) annotation (Line(points={{-198,440},{ + -190,440},{-190,452},{-182,452}}, + color={255,0,255})); + connect(and2.y, rep8.u) + annotation (Line(points={{-158,460},{-152,460}}, color={255,0,255})); + connect(yBalChi.y, swi1.u1) annotation (Line(points={{-128,500},{-120,500},{-120, + 478},{-72,478}}, color={0,0,127})); + connect(rep8.y, swi1.u2) annotation (Line(points={{-128,460},{-100,460},{-100, + 470},{-72,470}}, color={255,0,255})); + connect(fulOpe.y, swi2.u2) + annotation (Line(points={{-88,440},{-72,440}}, color={255,0,255})); + connect(valEvaChi.y, swi2.u3) annotation (Line(points={{-88,400},{-80,400},{ + -80,432},{-72,432}}, + color={0,0,127})); + connect(rep7.y, valEvaChi.uEna) annotation (Line(points={{-128,380},{-104,380}, + {-104,388}}, color={255,0,255})); + connect(one1.y, swi2.u1) annotation (Line(points={{-88,500},{-80,500},{-80,448}, + {-72,448}}, color={0,0,127})); + connect(swi2.y, swi1.u3) annotation (Line(points={{-48,440},{-44,440},{-44,456}, + {-76,456},{-76,462},{-72,462}}, color={0,0,127})); + connect(swi1.y, swi.u1) annotation (Line(points={{-48,470},{-40,470},{-40,508}, + {-12,508}}, color={0,0,127})); + connect(swi.y, yValEvaChi) annotation (Line(points={{12,500},{230,500},{230,-20}, + {260,-20}}, color={0,0,127})); + connect(heaAndOn.y, valEvaChiHea.uEna) annotation (Line(points={{-98,-240},{-94, + -240},{-94,-28},{-124,-28},{-124,-12}}, color={255,0,255})); + connect(u1ChiHea, cooAndOn.u1) + annotation (Line(points={{-260,-60},{-182,-60}}, color={255,0,255})); + connect(u1CooChiHea, cooAndOn.u2) annotation (Line(points={{-260,-80},{-200, + -80},{-200,-68},{-182,-68}}, color={255,0,255})); + connect(cooAndOn.y, selValPos.u2) annotation (Line(points={{-158,-60},{-120,-60}, + {-120,-76},{-46,-76},{-46,-60},{-42,-60}}, + color={255,0,255})); + connect(yBalChiHea.y, selValPos.u1) annotation (Line(points={{-58,-60},{-50,-60}, + {-50,-52},{-42,-52}}, color={0,0,127})); + connect(valEvaChiHea.y, selValPos.u3) annotation (Line(points={{-108,0},{-100, + 0},{-100,-10},{-54,-10},{-54,-68},{-42,-68}}, color={0,0,127})); + connect(selValPos.y, yValEvaChiHea) annotation (Line(points={{-18,-60},{220,-60}, + {220,-80},{260,-80}}, color={0,0,127})); + connect(anyCooOrDirAndOn.y, rep13.u) + annotation (Line(points={{-158,420},{-152,420}}, color={255,0,255})); + connect(rep13.y, fulOpe.u) annotation (Line(points={{-128,420},{-120,420},{ + -120,440},{-112,440}}, color={255,0,255})); + connect(cooOrDirAndOn.y, anyCooOrDirAndOn.u) annotation (Line(points={{-98, + -160},{-80,-160},{-80,-120},{-238,-120},{-238,420},{-182,420}}, color= + {255,0,255})); + connect(cooAndOn.y, anyCooAndOn.u) annotation (Line(points={{-158,-60},{-140,-60}, + {-140,-46},{-236,-46},{-236,480},{-222,480}}, color={255,0,255})); + connect(cooAndOn.y, heaOrCooCon.u1) annotation (Line(points={{-158,-60},{-140, + -60},{-140,-260},{60,-260},{60,-240},{68,-240}}, + color={255,0,255})); + connect(cooAndOn.y, valConChiHea.uEna) annotation (Line(points={{-158,-60},{-140, + -60},{-140,-116},{56,-116},{56,-52}}, color={255,0,255})); + connect(heaAndOn.y, booToRea.u) annotation (Line(points={{-98,-240},{-94,-240}, + {-94,-100},{18,-100}}, color={255,0,255})); + connect(max4.y, yValConChiHea) + annotation (Line(points={{142,-100},{260,-100}}, color={0,0,127})); + connect(booToRea.y, max4.u2) annotation (Line(points={{42,-100},{80,-100},{80, + -106},{118,-106}}, color={0,0,127})); + connect(valConChiHea.y, max4.u1) annotation (Line(points={{72,-40},{80,-40},{80, + -94},{118,-94}}, color={0,0,127})); + connect(isOpe3.y, isCloConChi.u) annotation (Line(points={{128,-40},{112,-40}, + {112,20},{82,20}}, color={255,0,255})); + connect(isCloConChi.y, allCloAndChaAndEna.u[1:nChi]) + annotation (Line(points={{58,20},{42,20}}, color={255,0,255})); + connect(enaCtlValConWatByp.y, yValConWatByp) + annotation (Line(points={{192,100},{260,100}}, color={0,0,127})); + connect(allCloAndChaAndEna.y, enaCtlValConWatByp.u2) annotation (Line(points={ + {18,20},{12,20},{12,100},{168,100}}, color={255,0,255})); + connect(ctlTConWatConRet.y, enaCtlValConWatByp.u1) annotation (Line(points={{-68, + 180},{-60,180},{-60,140},{160,140},{160,108},{168,108}}, color={0,0,127})); + connect(isChaAss.y, allCloAndChaAndEna.u[nChi + 1]) annotation (Line(points={{ + -148,160},{50,160},{50,20},{42,20}}, color={255,0,255})); + connect(zer2.y, enaCtlValConWatByp.u3) annotation (Line(points={{152,80},{160, + 80},{160,92},{168,92}}, color={0,0,127})); + connect(yValConWatByp, isOpe4.u) annotation (Line(points={{260,100},{220,100}, + {220,140},{192,140}}, color={0,0,127})); + connect(isOpe4.y, enaPumConWatCon.u[nChi+nChiHea+1]) annotation (Line(points={{168,140},{164, + 140},{164,300},{168,300}}, color={255,0,255})); + connect(u1CooOrHea, allCloAndChaAndEna.u[nChi+2]) annotation (Line(points={{-260,-40}, + {-4,-40},{-4,0},{50,0},{50,20},{42,20}}, color={255,0,255})); + annotation ( + defaultComponentName="valCmd", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-200},{100,200}}), + graphics={ + Rectangle( + extent={{-100,-202},{100,200}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,210},{150,250}}, + textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-240,-520},{240,520}})), + Documentation(info=" +

    +This block implements the control logic for the chiller isolation valves, +the HRC isolation and switchover valves, the CHW and HW minimum flow +bypass valves, the HRC evaporator CW mixing valve, and the +CW chiller bypass valve. +It also computes the lead pump Enable signal for the CHW, HW, CWC and CWE +pump groups. +

    +

    Chiller evaporator isolation valve

    +

    +When a chiller is enabled, the valve position is controlled as follows. +

    +
      +
    • +If no HRC is concurrently operating and connected to the CHW loop, +the valve is commanded to a fully open position, +
    • +
    • +If any HRC is concurrently operating in cascading cooling mode, +but no HRC is in direct heat recovery mode, the valve is +commanded to a fixed position ensuring flow balancing proportionally to +design flow. +
    • +
    • +If any HRC is concurrently operating in direct heat recovery mode, the valve +is modulated with a control loop tracking an evaporator flow setpoint +which is reset as described hereunder. +The loop output is mapped to a valve position of 10 % (resp. 100 %) +at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 100 %. +
    • +
    +

    Otherwise, the valve is commanded to a closed position.

    +
    Chiller evaporator flow setpoint
    +

    +The setpoint is computed based on the logic implemented in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.DirectHeatRecovery. +

    +

    Chiller condenser isolation valve

    +

    +When a chiller is enabled, the condenser isolation valve is modulated with a +control loop tracking a condenser flow setpoint which is reset as described hereunder. +The loop output is mapped to a valve position of 10 % (resp. 100 %) +at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 100 %. +

    +

    Otherwise, the valve is commanded to a closed position.

    +
    Chiller condenser flow setpoint
    +

    +The condenser flow setpoint varies based on the condenser loop mode and +on the tank cycle index. +

    +
      +
    • +When the condenser loop mode is Charge Assist, a control loop +maintains the condenser loop return temperature at a target setpoint +equal to the highest temperature setpoint of the active tank cycle. +The loop output is mapped to a flow setpoint of 10 % (resp. 100 %) +of design flow at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 20 %. +
    • +
    • +When the condenser loop mode is Tank Charge/Discharge, a control loop +maintains the chiller condenser leaving temperature at target setpoint equal +to the highest temperature setpoint of the active tank cycle. +The loop output is mapped to a flow setpoint of 5 % (resp. 100 %) +of design flow at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 50 %. +
    • +
    • +When the condenser loop mode is Heat Rejection, the condenser flow setpoint +is set at design value. +
    • +
    +

    HRC evaporator isolation valve

    +

    +When a HRC is enabled, the valve position is controlled as follows. +

    +
      +
    • +If the HRC is operating in cascading cooling mode, the valve is commanded +to a fixed position ensuring flow balancing proportionally to +design flow. +
    • +
    • +If the HRC is operating either in cascading heating mode or in direct +heat recovery mode, the valve is modulated with a control loop tracking +an evaporator flow setpoint which is reset as described hereunder. +The loop output is mapped to a valve position of 10 % (resp. 100 %) +at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 100 %. +
    • +
    +

    Otherwise, the valve is commanded to a closed position.

    +
    HRC evaporator flow setpoint
    +

    In direct heat recovery mode, the setpoint is reset based on the logic implemented in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.DirectHeatRecovery.

    +

    In cascading heating mode, the setpoint is reset with a control loop +that maintains the evaporator leaving temperature at target setpoint +equal to the lowest temperature setpoint of the active tank cycle. +The loop output is mapped as follows. +From 0 % to 50 %, the HRC evaporator +CW mixing valve commanded position is reset from 0 % (full bypass flow) +to 100 % (no bypass flow). +From 50 % to 100 %, the +evaporator flow setpoint is reset from minimum to design value. +The loop is biased to launch from 75 %. +When disabled, the loop output is set to 75 % to +ensure that the HRC evaporator CW mixing valve is fully open +(no bypass flow). +

    +

    HRC condenser isolation valve

    +

    +When a HRC is enabled, the valve position is controlled as follows. +

    +
      +
    • +If the HRC condenser is indexed to the HW loop (cascading heating or +direct heat recovery mode), the valve is commanded to a fully open +position. +
    • +
    • +If the HRC condenser is indexed to the CW loop (cascading cooling mode), +the valve is modulated with a control loop tracking a condenser flow setpoint +which is reset based +on the same logic as for the chiller condenser flow setpoint (see above). +The loop output is mapped to a valve position of 10 % (resp. 100 %) +at 0 % (resp. 100 %) output signal. +The loop is biased to launch from 100 %. +
    • +
    +

    Otherwise, the valve is commanded to a closed position.

    +

    HRC condenser and evaporator switchover valve

    +

    +Each valve is commanded to a fully open or fully closed position depending +on the valve index and the current operating mode of the HRC (cascading cooling, +cascading heating or direct heat recovery). +In addition, the condenser switchover valve indexed to the HRC which is nearest to the +interconnection with the condenser loop (highest index) and which is operating +in direct heat recovery mode is modulated with a control loop tracking +the condenser entering temperature. +The condenser entering temperature setpoint is reset based on the logic implemented in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.DirectHeatRecovery. +This allows false loading the HRC that is controlled to meet the HW supply +temperature setpoint in direct heat recovery mode, and thus meeting +the CHW supply temperature setpoint simultaneously. +

    +

    HRC evaporator CW mixing valve

    +

    +The valve is modulated based on two control loops: +the HRC evaporator leaving temperature control loop (see the section +HRC evaporator flow setpoint) and another control loop that maintains +the HRC evaporator entering water temperature below the highest tank temperature +setpoint. +This latter control loop is enabled when any HRC is operating in cascading +heating mode. +When the loop is enabled, the loop output is mapped to a valve position +of 100 % (resp. 0 %) at 0 % (resp. 100 %) +output signal. +When the loop is disabled, the loop output is set to 100 % (no bypass flow). +The valve control signal is the minimum (maximum bypass flow) of the resulting +signals of those two control loops. +

    +

    CHW and HW minimum flow bypass valve

    +

    +Each chiller and HRC has its own CHW (resp. HW) minimum flow control loop. +The loop is enabled whenever the unit's evaporator (resp. condenser) is indexed +to the CHW (resp. HW) loop and its evaporator (resp. condenser) isolation valve +is commanded open (with a threshold of 10 %). +When enabled, each loop tracks a flow setpoint equal to 1.1 times the +minimum CHW (resp. HW) flow rate. +When disabled, each loop output is set to 0 %. +The valve control signal is the maximum (maximum bypass flow) of the resulting +signals of all control loops. +

    +

    CW chiller bypass valve

    +

    +The valve control is enabled when the plant is enabled either in cooling or +heating mode, the Charge Assist mode is active and +all chiller condenser isolation valves are closed (based on their +commanded position). +

    +

    +When the valve control is enabled the valve position is modulated +by the same control loop used to maintain the condenser loop return +temperature at a target setpoint equal to the highest temperature +setpoint of the active tank cycle (see the section \"Chiller condenser flow setpoint\"). +

    +

    Otherwise, the valve is commanded to a closed position.

    +

    CHW, HW, CWC, CWE lead pump

    +

    +The lead pump of each loop is enabled whenever any chiller or HRC is indexed +to the loop and the corresponding evaporator or condenser isolation valve is +commanded open (with a threshold of 10 %). +In addition, the CWC lead pump may also be enabled if the CW chiller +bypass valve is commanded open. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ValveCondenserEvaporator; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.mo new file mode 100644 index 00000000000..1c0fe6e412f --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.mo @@ -0,0 +1,13 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls; +package BaseClasses "Package with base classes" + extends Modelica.Icons.BasesPackage; + annotation (Documentation(info=" +

    +This package contains base classes that are used to construct +the main plant controller. +Those include an interface class for the controller as well +as blocks that implement the sequence of operation for each +component of the plant. +

    +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.order b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.order new file mode 100644 index 00000000000..7c282222bb3 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/package.order @@ -0,0 +1,12 @@ +CoolingTowerLoop +DirectHeatRecovery +IntegerArrayHold +ModeCondenserLoop +ModeHeatRecoveryChiller +PartialController +StageIndex +StagingPlant +StagingPump +TankCycle +ValveCondenserEvaporator +Validation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo new file mode 100644 index 00000000000..2913fa12c58 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo @@ -0,0 +1,547 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls; +block Controller "Plant controller" + extends BaseClasses.PartialController; + + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator repHeaPum( + final nout=nHeaPum) "Replicate signal" + annotation (Placement(transformation(extent={{220,-230},{240,-210}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cvtValBypTan + "Convert DO to AO" + annotation (Placement(transformation(extent={{-40,-290},{-20,-270}}))); + Buildings.Controls.OBC.CDL.Continuous.Switch TChiHeaSupSet[nChiHea] + "Switch supply temperature setpoint" + annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); + BaseClasses.StagingPump staPumChiWat( + final nPum=nPumChiWat, + final m_flow_nominal=mChiWat_flow_nominal) + "CHW pump staging" + annotation (Placement(transformation(extent={{120,230},{140,250}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable pumChiWat( + k=0.1, + Ti=60, + r=dpChiWatSet_max, + y_reset=1, + y_neutral=0) + "Pump speed controller" + annotation (Placement(transformation(extent={{190,230},{210,250}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable pumHeaWat( + k=0.1, + Ti=60, + r=dpHeaWatSet_max, + y_reset=1, + y_neutral=0) + "Pump speed controller" + annotation (Placement(transformation(extent={{190,-50},{210,-30}}))); + BaseClasses.StagingPump staPumHeaWat( + final nPum=nPumHeaWat, + final m_flow_nominal=mHeaWat_flow_nominal) + "HW pump staging" + annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); + BaseClasses.StagingPump staPumConWatCon( + final nPum=nPumConWatCon, + final m_flow_nominal=mConWatCon_flow_nominal) + "CW pump staging" + annotation (Placement(transformation(extent={{120,-130},{140,-110}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable pumConWatCon( + k=0.1, + Ti=60, + final r=dpConWatConSet_max, + y_reset=1, + y_neutral=0) + "Pump speed controller" + annotation (Placement(transformation(extent={{190,-130},{210,-110}}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable pumConWatEva( + k=0.1, + Ti=60, + final r=dpConWatEvaSet_max, + y_reset=1, + y_neutral=0) + "Pump speed controller" + annotation (Placement(transformation(extent={{190,-190},{210,-170}}))); + BaseClasses.StagingPump staPumConWatEva( + final nPum=nPumConWatEva, + final m_flow_nominal=mConWatEva_flow_nominal) + "CW pump staging" + annotation (Placement(transformation(extent={{120,-190},{140,-170}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpConNom(final k= + dpConWatConSet_max) "Constant" + annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpEvaNom(final k= + dpConWatEvaSet_max) "Constant" + annotation (Placement(transformation(extent={{160,-190},{180,-170}}))); + BaseClasses.StagingPlant staPla( + final nChi=nChi, + final QChiWatChi_flow_nominal=QChiWatChi_flow_nominal, + final nChiHea=nChiHea, + final QChiWatCasCoo_flow_nominal=QChiWatCasCoo_flow_nominal, + final QChiWatCasCoo_flow_nominal_approx=QChiWatCasCoo_flow_nominal_approx, + final QHeaWat_flow_nominal=QHeaWat_flow_nominal, + final cp_default=cp_default) "Plant staging" + annotation (Placement(transformation(extent={{-210,140},{-190,172}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator repTSet(nout=nChiHea) + "Replicate signal" + annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator repTSet1(nout=nChiHea) + "Replicate signal" + annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); + BaseClasses.ModeCondenserLoop modConLoo( + final mConWatHexCoo_flow_nominal=mConWatCon_flow_nominal, + final QHeaPum_flow_nominal=QHeaPum_flow_nominal, + final TTanSet=TTanSet, + final fraUslTan=fraUslTan, + final ratFraChaTanLim=ratFraChaTanLim, + final cp_default=cp_default, + nTTan=nTTan) "Condenser loop operating mode" + annotation (Placement(transformation(extent={{-170,-170},{-150,-150}}))); + BaseClasses.TankCycle cycTan( + mConWatHexCoo_flow_nominal=mConWatCon_flow_nominal, + final TTanSet=TTanSet, nTTan=nTTan) + "Determine tank cycle" + annotation (Placement(transformation(extent={{-170,-110},{-150,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Equal isModChaAss + "Return true if charge assist mode is active" + annotation (Placement(transformation(extent={{-120,-190},{-100,-170}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant chaAss( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.chargeAssist) + "Charge assist mode index" + annotation (Placement(transformation(extent={{-170,-198},{-150,-178}}))); + Buildings.Controls.OBC.CDL.Logical.And assAndPum + "Charge assist mode and any CW pump On" + annotation (Placement(transformation(extent={{186,-210},{206,-230}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaPumSetVal[2]( + final k={max(TTanSet[i]) + 3 for i in 1:2}) + "HP supply temperature setpoint for each tank cycle" + annotation (Placement(transformation(extent={{-170,-230},{-150,-210}}))); + Buildings.Controls.OBC.CDL.Routing.RealExtractor extIndRea(final nin=2) + "Extract active setpoint" + annotation (Placement(transformation(extent={{-120,-230},{-100,-210}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant heaRej( + final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.heatRejection) + "Heat rejection mode index" + annotation (Placement(transformation(extent={{-170,-290},{-150,-270}}))); + Buildings.Controls.OBC.CDL.Integers.Equal isModHeaRej + "Return true if heat rejection mode is active" + annotation (Placement(transformation(extent={{-120,-290},{-100,-270}}))); + Buildings.Controls.OBC.CDL.Logical.Not isModNotHeaRej + "Return true if heat rejection mode is NOT active" + annotation (Placement(transformation(extent={{-80,-290},{-60,-270}}))); + BaseClasses.ValveCondenserEvaporator valConEva( + final nChi=nChi, + final nChiHea=nChiHea, + final mChiWatChi_flow_nominal=mChiWatChi_flow_nominal, + final mChiWatChi_flow_min=mChiWatChi_flow_min, + final mConWatChi_flow_nominal=mConWatChi_flow_nominal, + final dpEvaChi_nominal=dpEvaChi_nominal, + final dpValEvaChi_nominal=dpValEvaChi_nominal, + final mChiWatChiHea_flow_nominal=mChiWatChiHea_flow_nominal, + final mChiWatChiHea_flow_min=mChiWatChiHea_flow_min, + final mConWatChiHea_flow_nominal=mConWatChiHea_flow_nominal, + final mHeaWatChiHea_flow_min=mHeaWatChiHea_flow_min, + final dpEvaChiHea_nominal=dpEvaChiHea_nominal, + final dpValEvaChiHea_nominal=dpValEvaChiHea_nominal, + final TTanSet=TTanSet) + "Controller for chiller and HRC condenser and evaporator valves" + annotation (Placement(transformation(extent={{-60,20},{-40,60}}))); + Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.DirectHeatRecovery dirHeaCoo( + final nChi=nChi, + final nChiHea=nChiHea, + final mChiWatChi_flow_nominal=mChiWatChi_flow_nominal, + final mChiWatChi_flow_min=mChiWatChi_flow_min, + final mChiWatChiHea_flow_nominal=mChiWatChiHea_flow_nominal, + final mChiWatChiHea_flow_min=mChiWatChiHea_flow_min) + "Control logic for HRC in direct HR mode" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + BaseClasses.CoolingTowerLoop coo( + final mConWatHexCoo_flow_nominal=mConWatCon_flow_nominal, + final nCoo=nCoo, + final nPumConWatCoo=nPumConWatCoo, + final QChiWat_flow_nominal=QChiWat_flow_nominal, + final dTLifChi_min=dTLifChi_min, + final dTLifChi_nominal=dTLifChi_nominal, + final TTanSet=TTanSet, + final dTHexCoo_nominal=dTHexCoo_nominal) "Cooling tower loop" + annotation (Placement(transformation(extent={{40,-364},{60,-328}}))); + Buildings.Controls.OBC.CDL.Logical.Or u1CooOrHea + "Plant Enable signal: either cooling or heating is enabled" + annotation (Placement(transformation(extent={{-160,430},{-140,450}}))); +equation + connect(repHeaPum.y, y1HeaPum) + annotation (Line(points={{242,-220},{280,-220}},color={255,0,255})); + connect(cvtValBypTan.y, yValBypTan) annotation (Line(points={{-18,-280},{280,-280}}, + color={0,0,127})); + connect(staPumChiWat.y1, y1PumChiWat) annotation (Line(points={{142,246},{180, + 246},{180,260},{280,260}}, + color={255,0,255})); + connect(pumChiWat.y, yPumChiWat) + annotation (Line(points={{212,240},{280,240}}, color={0,0,127})); + connect(dpChiWatSet, pumChiWat.u_s) annotation (Line(points={{-280,320},{-10, + 320},{-10,260},{176,260},{176,240},{188,240}}, + color={0,0,127})); + connect(staPumHeaWat.y1, y1PumHeaWat) + annotation (Line(points={{142,-34},{180,-34},{180,-20},{280,-20}}, + color={255,0,255})); + connect(pumHeaWat.y, yPumHeaWat) + annotation (Line(points={{212,-40},{280,-40}}, color={0,0,127})); + connect(dpHeaWatSet, pumHeaWat.u_s) annotation (Line(points={{-280,300},{4, + 300},{4,-20},{160,-20},{160,-40},{188,-40}}, + color={0,0,127})); + connect(pumConWatEva.y, yPumConWatEva) + annotation (Line(points={{212,-180},{280,-180}}, color={0,0,127})); + connect(pumConWatCon.y, yPumConWatCon) annotation (Line(points={{212,-120},{220, + -120},{220,-140},{280,-140}}, color={0,0,127})); + connect(staPumConWatCon.y1, y1PumConWatCon) annotation (Line(points={{142,-114}, + {150,-114},{150,-100},{240,-100},{240,-120},{280,-120}}, + color={255,0,255})); + connect(staPumConWatEva.y1, y1PumConWatEva) + annotation (Line(points={{142,-174},{150,-174},{150,-160},{280,-160}}, + color={255,0,255})); + connect(dpHeaWat, pumHeaWat.u_m) annotation (Line(points={{-280,-360},{-234,-360}, + {-234,-64},{200,-64},{200,-52}}, color={0,0,127})); + connect(mHeaWatPri_flow, staPumHeaWat.m_flow) annotation (Line(points={{-280, + -200},{-242,-200},{-242,-40},{118,-40}}, + color={0,0,127})); + connect(dpChiWat, pumChiWat.u_m) annotation (Line(points={{-280,-340},{-226, + -340},{-226,208},{200,208},{200,228}}, + color={0,0,127})); + connect(mConWatEva_flow, staPumConWatEva.m_flow) annotation (Line(points={{-280, + -260},{-252,-260},{-252,-140},{60,-140},{60,-180},{118,-180}}, + color={0,0,127})); + connect(mConWatCon_flow, staPumConWatCon.m_flow) annotation (Line(points={{-280, + -240},{-244,-240},{-244,-120},{118,-120}}, + color={0,0,127})); + connect(mChiWatPri_flow, staPumChiWat.m_flow) annotation (Line(points={{-280,-180}, + {-238,-180},{-238,240},{118,240}}, color={0,0,127})); + connect(dpConNom.y, pumConWatCon.u_s) annotation (Line(points={{182,-120},{188, + -120}}, color={0,0,127})); + connect(dpEvaNom.y, pumConWatEva.u_s) + annotation (Line(points={{182,-180},{188,-180}}, color={0,0,127})); + connect(mHeaWatPri_flow, staPla.mHeaWatPri_flow) annotation (Line(points={{-280, + -200},{-236,-200},{-236,152},{-212,152}}, color={0,0,127})); + connect(THeaWatSupSet, staPla.THeaWatSupSet) annotation (Line(points={{-280, + 340},{-250,340},{-250,150},{-212,150}}, color={0,0,127})); + connect(mChiWatPri_flow, staPla.mChiWatPri_flow) annotation (Line(points={{-280, + -180},{-238,-180},{-238,166},{-212,166}},color={0,0,127})); + connect(u1Coo, staPla.u1Coo) annotation (Line(points={{-280,440},{-236,440},{ + -236,170.2},{-212,170.2}}, color={255,0,255})); + connect(u1Hea, staPla.u1Hea) annotation (Line(points={{-280,400},{-240,400},{ + -240,168.2},{-212,168.2}}, color={255,0,255})); + connect(TChiWatSupSet, staPla.TChiWatSupSet) annotation (Line(points={{-280, + 360},{-242,360},{-242,164},{-212,164}}, color={0,0,127})); + connect(TChiWatPriRet, staPla.TChiWatPriRet) annotation (Line(points={{-280, + 240},{-242,240},{-242,160},{-212,160}}, + color={0,0,127})); + connect(THeaWatPriRet, staPla.THeaWatPriRet) annotation (Line(points={{-280,80}, + {-242,80},{-242,146},{-212,146}}, color={0,0,127})); + connect(repTSet1.y, TChiHeaSupSet.u3) annotation (Line(points={{-118,80},{ + -106,80},{-106,92},{-102,92}}, color={0,0,127})); + connect(repTSet.y, TChiHeaSupSet.u1) annotation (Line(points={{-118,120},{ + -106,120},{-106,108},{-102,108}}, color={0,0,127})); + connect(staPla.y1CooChiHea, TChiHeaSupSet.u2) annotation (Line(points={{-188,148}, + {-110,148},{-110,100},{-102,100}}, color={255,0,255})); + connect(TChiHeaSupSet.y, TChiHeaSet) + annotation (Line(points={{-78,100},{280,100}}, color={0,0,127})); + connect(TChiWatSupSet, repTSet.u) annotation (Line(points={{-280,360},{-254, + 360},{-254,120},{-142,120}}, color={0,0,127})); + connect(THeaWatSupSet, repTSet1.u) annotation (Line(points={{-280,340},{-250, + 340},{-250,80},{-142,80}}, color={0,0,127})); + connect(mConWatHexCoo_flow, modConLoo.mConWatHexCoo_flow) annotation (Line( + points={{-280,-280},{-248,-280},{-248,-152},{-172,-152}}, + color={0,0,127})); + connect(mConWatOutTan_flow, modConLoo.mConWatOutTan_flow) annotation (Line( + points={{-280,-300},{-234,-300},{-234,-156},{-172,-156}}, + color={0,0,127})); + connect(TTan, modConLoo.TTan) annotation (Line(points={{-280,60},{-180,60},{ + -180,-160},{-172,-160}}, + color={0,0,127})); + connect(TTan, cycTan.TTan) annotation (Line(points={{-280,60},{-180,60},{-180, + -106},{-172,-106}}, + color={0,0,127})); + connect(mConWatOutTan_flow, cycTan.mConWatOutTan_flow) annotation (Line( + points={{-280,-300},{-226,-300},{-226,-94},{-172,-94}}, + color={0,0,127})); + connect(chaAss.y, isModChaAss.u2) annotation (Line(points={{-148,-188},{-122, + -188}}, color={255,127,0})); + connect(modConLoo.mode, isModChaAss.u1) annotation (Line(points={{-148,-160}, + {-144,-160},{-144,-180},{-122,-180}}, + color={255,127,0})); + connect(assAndPum.y, repHeaPum.u) + annotation (Line(points={{208,-220},{218,-220}}, color={255,0,255})); + connect(isModChaAss.y, assAndPum.u1) + annotation (Line(points={{-98,-180},{-80,-180},{-80,-220},{184,-220}}, + color={255,0,255})); + connect(THeaPumSetVal.y, extIndRea.u) + annotation (Line(points={{-148,-220},{-122,-220}}, color={0,0,127})); + connect(extIndRea.y, THeaPumSet) annotation (Line(points={{-98,-220},{-80, + -220},{-80,-240},{280,-240}}, color={0,0,127})); + connect(cycTan.idxCycTan, extIndRea.index) annotation (Line(points={{-148, + -100},{-140,-100},{-140,-240},{-110,-240},{-110,-232}}, + color={255,127,0})); + connect(heaRej.y, isModHeaRej.u1) + annotation (Line(points={{-148,-280},{-122,-280}}, color={255,127,0})); + connect(modConLoo.mode, isModHeaRej.u2) annotation (Line(points={{-148,-160},{ + -144,-160},{-144,-288},{-122,-288}},color={255,127,0})); + connect(isModNotHeaRej.y, cvtValBypTan.u) + annotation (Line(points={{-58,-280},{-42,-280}}, color={255,0,255})); + connect(isModHeaRej.y, isModNotHeaRej.u) + annotation (Line(points={{-98,-280},{-82,-280}}, color={255,0,255})); + connect(mEvaChi_flow,valConEva. mEvaChi_flow) annotation (Line(points={{-280, + -100},{-212,-100},{-212,42},{-62,42}}, color={0,0,127})); + connect(mConChi_flow,valConEva. mConChi_flow) annotation (Line(points={{-280, + -120},{-256,-120},{-256,40},{-62,40}}, color={0,0,127})); + connect(mEvaChiHea_flow,valConEva. mEvaChiHea_flow) annotation (Line(points={{-280, + -140},{-254,-140},{-254,38},{-62,38}}, color={0,0,127})); + connect(mConChiHea_flow,valConEva. mConChiHea_flow) annotation (Line(points={{-280, + -160},{-252,-160},{-252,36},{-62,36}}, color={0,0,127})); + connect(staPla.y1Chi,valConEva. u1Chi) annotation (Line(points={{-188,164},{ + -164,164},{-164,58},{-62,58}}, + color={255,0,255})); + connect(staPla.y1ChiHea,valConEva. u1ChiHea) annotation (Line(points={{-188, + 154},{-166,154},{-166,56},{-62,56}}, color={255,0,255})); + connect(staPla.y1CooChiHea,valConEva. u1CooChiHea) annotation (Line(points={{-188, + 148},{-168,148},{-168,54},{-62,54}}, color={255,0,255})); + connect(staPla.y1HeaCooChiHea,valConEva. u1HeaCooChiHea) annotation (Line( + points={{-188,142},{-170,142},{-170,52},{-62,52}}, color={255,0,255})); + connect(valConEva.yValEvaChi, yValEvaChi) annotation (Line(points={{-38,42},{ + 0,42},{0,320},{280,320}}, color={0,0,127})); + connect(valConEva.yValConChi, yValConChi) annotation (Line(points={{-38,40},{ + 2,40},{2,300},{280,300}}, color={0,0,127})); + connect(valConEva.yValConSwiChiHea, yValConSwiChiHea) + annotation (Line(points={{-38,32},{260,32},{260,20},{280,20}}, + color={0,0,127})); + connect(valConEva.yValEvaSwiChiHea, yValEvaSwiHea) annotation (Line(points={{-38,34}, + {240,34},{240,40},{280,40}}, color={0,0,127})); + connect(valConEva.yValConChiHea, yValConChiHea) annotation (Line(points={{-38,36}, + {238,36},{238,60},{280,60}}, color={0,0,127})); + connect(valConEva.yValEvaChiHea, yValEvaChiHea) annotation (Line(points={{-38,38}, + {236,38},{236,80},{280,80}}, color={0,0,127})); + connect(dpConWatEva, pumConWatEva.u_m) annotation (Line(points={{-280,-400},{-240, + -400},{-240,-204},{200,-204},{200,-192}}, color={0,0,127})); + connect(dpConWatCon, pumConWatCon.u_m) annotation (Line(points={{-280,-380},{-242, + -380},{-242,-144},{200,-144},{200,-132}}, color={0,0,127})); + connect(cycTan.idxCycTan,valConEva. idxCycTan) annotation (Line(points={{-148, + -100},{-140,-100},{-140,48},{-62,48}}, color={255,127,0})); + connect(modConLoo.mode,valConEva. mode) annotation (Line(points={{-148,-160}, + {-144,-160},{-144,50},{-62,50}}, color={255,127,0})); + connect(TChiWatSup, staPla.TChiWatSup) annotation (Line(points={{-280,260},{ + -246,260},{-246,162},{-212,162}}, color={0,0,127})); + connect(dpChiWatSet, staPla.dpChiWatSet) annotation (Line(points={{-280,320}, + {-246,320},{-246,158},{-212,158}}, color={0,0,127})); + connect(dpChiWat, staPla.dpChiWat) annotation (Line(points={{-280,-340},{-238, + -340},{-238,156},{-212,156}}, color={0,0,127})); + connect(valConEva.y1PumChiWat, staPumChiWat.y1Ena) annotation (Line(points={{-38,58}, + {-4,58},{-4,246},{118,246}}, color={255,0,255})); + connect(pumChiWat.y, staPumChiWat.y) annotation (Line(points={{212,240},{220,240}, + {220,220},{110,220},{110,234},{118,234}}, color={0,0,127})); + connect(pumHeaWat.y, staPumHeaWat.y) annotation (Line(points={{212,-40},{220, + -40},{220,-60},{110,-60},{110,-46},{118,-46}}, + color={0,0,127})); + connect(valConEva.y1PumHeaWat, staPumHeaWat.y1Ena) annotation (Line(points={{-38,56}, + {74,56},{74,-34},{118,-34}}, color={255,0,255})); + connect(pumConWatCon.y, staPumConWatCon.y) annotation (Line(points={{212,-120}, + {220,-120},{220,-140},{114,-140},{114,-126},{118,-126}}, + color={0,0,127})); + connect(pumConWatEva.y, staPumConWatEva.y) annotation (Line(points={{212,-180}, + {220,-180},{220,-200},{114,-200},{114,-186},{118,-186}}, + color={0,0,127})); + connect(valConEva.y1PumConWatEva, staPumConWatEva.y1Ena) annotation (Line( + points={{-38,52},{-4,52},{-4,-174},{118,-174}},color={255,0,255})); + connect(valConEva.y1PumConWatCon, staPumConWatCon.y1Ena) annotation (Line( + points={{-38,54},{-2,54},{-2,-114},{118,-114}}, + color={255,0,255})); + connect(staPla.y1Chi, y1Chi) annotation (Line(points={{-188,164},{-6,164},{-6, + 340},{280,340}}, color={255,0,255})); + connect(staPla.y1ChiHea, y1ChiHea) annotation (Line(points={{-188,154},{6,154}, + {6,160},{280,160}}, color={255,0,255})); + connect(staPla.y1CooChiHea, y1CooChiHea) annotation (Line(points={{-188,148},{ + 6,148},{6,140},{280,140}}, color={255,0,255})); + connect(staPla.y1HeaCooChiHea, y1HeaCooChiHea) annotation (Line(points={{-188, + 142},{4,142},{4,120},{280,120}}, color={255,0,255})); + connect(staPla.y1ChiHea, dirHeaCoo.y1) annotation (Line(points={{-188,154},{ + -166,154},{-166,8},{-122,8}}, color={255,0,255})); + connect(staPla.y1HeaCooChiHea, dirHeaCoo.y1HeaCoo) annotation (Line(points={{-188, + 142},{-170,142},{-170,4},{-126,4},{-126,4},{-122,4}}, color={255, + 0,255})); + connect(TChiWatSupSet, dirHeaCoo.TChiWatSupSet) annotation (Line(points={{-280, + 360},{-254,360},{-254,0},{-122,0}}, color={0,0,127})); + connect(TEvaLvgChiHea, dirHeaCoo.TEvaLvg) annotation (Line(points={{-280,140}, + {-232,140},{-232,-4},{-122,-4}}, color={0,0,127})); + connect(THeaWatPriRet, dirHeaCoo.THeaWatPriRet) annotation (Line(points={{-280,80}, + {-242,80},{-242,-8},{-122,-8}}, color={0,0,127})); + connect(dirHeaCoo.mEvaChiSet_flow,valConEva. mEvaChiSet_flow) annotation ( + Line(points={{-98,6},{-92,6},{-92,46},{-62,46}}, color={0,0,127})); + connect(dirHeaCoo.mEvaChiHeaSet_flow,valConEva. mEvaChiHeaSet_flow) + annotation (Line(points={{-98,0},{-88,0},{-88,44},{-62,44}}, color={0,0, + 127})); + connect(dpHeaWatSet, staPla.dpHeaWatSet) annotation (Line(points={{-280,300}, + {-240,300},{-240,144},{-212,144}},color={0,0,127})); + connect(dpHeaWat, staPla.dpHeaWat) annotation (Line(points={{-280,-360},{-234, + -360},{-234,142},{-212,142}}, color={0,0,127})); + connect(THeaWatSup, staPla.THeaWatSup) annotation (Line(points={{-280,100},{-230, + 100},{-230,148},{-212,148}},color={0,0,127})); + connect(coo.y1PumConWatCoo, y1PumConWatCoo) annotation (Line(points={{62,-334}, + {240,-334},{240,-320},{280,-320}}, color={255,0,255})); + connect(coo.yPumConWatCoo, yPumConWatCoo) annotation (Line(points={{62,-340}, + {280,-340}}, color={0,0,127})); + connect(coo.y1Coo, y1Coo) annotation (Line(points={{62,-352},{240,-352},{240, + -360},{280,-360}}, + color={255,0,255})); + connect(coo.yCoo, yCoo) annotation (Line(points={{62,-358},{236,-358},{236, + -380},{280,-380}}, + color={0,0,127})); + connect(cycTan.idxCycTan, coo.idxCycTan) annotation (Line(points={{-148,-100}, + {0,-100},{0,-332},{38,-332}}, color={255,127,0})); + connect(modConLoo.mode, coo.mode) annotation (Line(points={{-148,-160},{2, + -160},{2,-330},{38,-330}}, + color={255,127,0})); + connect(TChiWatSupSet, coo.TChiWatSupSet) annotation (Line(points={{-280,360}, + {-2,360},{-2,-336},{38,-336}}, color={0,0,127})); + connect(TConWatConChiEnt, coo.TConWatConChiEnt) annotation (Line(points={{-280,40}, + {-252,40},{-252,-338},{38,-338}}, color={0,0,127})); + connect(TConWatConChiLvg, coo.TConWatConChiLvg) annotation (Line(points={{-280,20}, + {-248,20},{-248,-340},{38,-340}}, color={0,0,127})); + connect(TConWatCooSup, coo.TConWatCooSup) annotation (Line(points={{-280,0},{ + -250,0},{-250,-343.8},{38,-343.8}}, + color={0,0,127})); + connect(TConWatCooRet, coo.TConWatCooRet) annotation (Line(points={{-280,-20}, + {-244,-20},{-244,-345.8},{38,-345.8}}, color={0, + 0,127})); + connect(TConWatHexCooEnt, coo.TConWatHexCooEnt) annotation (Line(points={{-280, + -40},{-248,-40},{-248,-347.8},{38,-347.8}}, color={0,0,127})); + connect(TConWatHexCooLvg, coo.TConWatHexCooLvg) annotation (Line(points={{-280, + -60},{-236,-60},{-236,-349.8},{38,-349.8}}, color={0,0,127})); + connect(staPla.QCooReq_flow, coo.QCooReq_flow) annotation (Line(points={{-188, + 170},{-8,170},{-8,-354},{38,-354}}, color={0,0,127})); + connect(mConWatHexCoo_flow, coo.mConWatHexCoo_flow) annotation (Line(points={{-280, + -280},{-232,-280},{-232,-358},{38,-358}}, color={0,0,127})); + connect(cvtValBypTan.y, coo.yValBypTan) annotation (Line(points={{-18,-280},{ + -6,-280},{-6,-362},{38,-362}}, + color={0,0,127})); + connect(dirHeaCoo.TConEntChiHeaSet,valConEva. TConEntChiHeaSet) annotation ( + Line(points={{-98,-6},{-84,-6},{-84,34},{-62,34}}, color={0,0, + 127})); + connect(TConEntChiHea,valConEva. TConEntChiHea) annotation (Line(points={{-280, + 180},{-220,180},{-220,32},{-62,32}}, color={0,0,127})); + connect(staPumConWatCon.y1Any, pumConWatCon.uEna) annotation (Line(points={{142, + -120},{154,-120},{154,-136},{196,-136},{196,-132}}, color={255,0,255})); + connect(staPumConWatEva.y1Any, pumConWatEva.uEna) annotation (Line(points={{142, + -180},{150,-180},{150,-198},{196,-198},{196,-192}}, color={255,0,255})); + connect(staPumConWatCon.y1Any, assAndPum.u2) annotation (Line(points={{142,-120}, + {154,-120},{154,-212},{184,-212}}, color={255,0,255})); + connect(staPumHeaWat.y1Any, pumHeaWat.uEna) annotation (Line(points={{142,-40}, + {152,-40},{152,-56},{196,-56},{196,-52}}, color={255,0,255})); + connect(staPumChiWat.y1Any, pumChiWat.uEna) annotation (Line(points={{142,240}, + {170,240},{170,224},{196,224},{196,228}}, color={255,0,255})); + connect(valConEva.yValConWatEvaMix, yValConWatEvaMix) annotation (Line(points={{-38,30}, + {240,30},{240,0},{280,0}}, color={0,0,127})); + connect(TEvaLvgChiHea, valConEva.TEvaLvgChiHea) annotation (Line(points={{-280, + 140},{-244,140},{-244,26},{-62,26}}, color={0,0,127})); + connect(TConWatEvaEnt, valConEva.TConWatEvaEnt) annotation (Line(points={{-280, + 200},{-256,200},{-256,22},{-62,22}}, color={0,0,127})); + connect(TConLvgChiHea, valConEva.TConLvgChiHea) annotation (Line(points={{-280, + 160},{-250,160},{-250,30},{-62,30}}, color={0,0,127})); + connect(TConLvgChi, valConEva.TConLvgChi) annotation (Line(points={{-280,120}, + {-258,120},{-258,28},{-62,28}}, color={0,0,127})); + connect(TConWatConRet, valConEva.TConWatConRet) annotation (Line(points={{-280, + 220},{-242,220},{-242,24},{-62,24}}, color={0,0,127})); + connect(valConEva.yValChiWatMinByp, yValChiWatMinByp) annotation (Line(points={{-38,48}, + {6,48},{6,200},{280,200}}, color={0,0,127})); + connect(valConEva.yValHeaWatMinByp, yValHeaWatMinByp) annotation (Line(points={{-38,46}, + {6,46},{6,-80},{280,-80}}, color={0,0,127})); + connect(valConEva.yValConWatByp, yValConWatByp) annotation (Line(points={{-38,26}, + {4,26},{4,-420},{280,-420}}, color={0,0,127})); + connect(mConWatCon_flow, modConLoo.mConWatCon_flow) annotation (Line(points={ + {-280,-240},{-232,-240},{-232,-164},{-172,-164}}, color={0,0,127})); + connect(TConWatConChiLvg, modConLoo.TConWatConChiLvg) annotation (Line(points + ={{-280,20},{-246,20},{-246,-166},{-172,-166}}, color={0,0,127})); + connect(TConWatConRet, modConLoo.TConWatConRet) annotation (Line(points={{ + -280,220},{-232,220},{-232,-168},{-172,-168}}, color={0,0,127})); + connect(u1Coo, u1CooOrHea.u1) + annotation (Line(points={{-280,440},{-162,440}}, color={255,0,255})); + connect(u1Hea, u1CooOrHea.u2) annotation (Line(points={{-280,400},{-180,400}, + {-180,432},{-162,432}}, color={255,0,255})); + connect(u1CooOrHea.y, valConEva.u1CooOrHea) annotation (Line(points={{-138, + 440},{-57.8,440},{-57.8,62}}, color={255,0,255})); +annotation ( + defaultComponentName="ctl", Documentation(info=" +

    +This block implements the following control functions. +

    + +

    Heat pumps

    +

    +Heat pumps are enabled whenever Charge Assist mode is active and any +CWC pump is enabled. Heat pumps are disabled otherwise. +

    +

    +The supply temperature setpoint is K plus the highest +setpoint of the active tank cycle. +Note that no limitation of the setpoint value per HP manufacturer specification +is taken into account. +

    +

    CHW, HW, CWE and CWC pumps

    +

    +The lead pump is enabled based on the logic described in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.ValveCondenserEvaporator. +

    +

    +Pumps are staged based on the logic described in + +Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.StagingPump. +

    +

    +When any pump is enabled, the pump speed is modulated by a PI controller tracking +a differential pressure setpoint at the boundaries of the circuit served by the pump. +The control loop is biased to launch from 100 % (maximum speed). +All pumps within the same group receive the same speed command signal. +

    +

    +The differential pressure setpoint for the CHW and HW loops is provided as a control input. +Ideally, a reset logic based on consumer valve requests should be implemented to adapt +those setpoints to the demand. +For the sake of simplicity, the differential pressure setpoint for the CWC and CWE loops +is a fixed parameter (design pressure drop). +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end Controller; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.mo new file mode 100644 index 00000000000..632a3377b0e --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.mo @@ -0,0 +1,14 @@ +within Buildings.Experimental.DHC.Plants.Combined.Controls; +package ModeCondenserLoop "Condenser loop operating modes" + + constant Integer tankCharge = 1 "Tank Charge/Discharge"; + constant Integer chargeAssist = 2 "Charge Assist"; + constant Integer heatRejection = 3 "Heat Rejection"; + + annotation (Documentation(info=" +

    +This package contains constant definitions representing +the operating modes of the condenser water loop. +

    +")); +end ModeCondenserLoop; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.order b/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.order new file mode 100644 index 00000000000..26de5adc998 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/ModeCondenserLoop/package.order @@ -0,0 +1,3 @@ +tankCharge +chargeAssist +heatRejection diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/package.mo new file mode 100644 index 00000000000..75996e511f3 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/package.mo @@ -0,0 +1,10 @@ +within Buildings.Experimental.DHC.Plants.Combined; +package Controls "Package of control blocks for combined plants" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

    +This package contains control blocks for combined heating and cooling plants. +

    +")); +end Controls; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/package.order b/Buildings/Experimental/DHC/Plants/Combined/Controls/package.order new file mode 100644 index 00000000000..c0dbd6796be --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/package.order @@ -0,0 +1,3 @@ +Controller +ModeCondenserLoop +BaseClasses diff --git a/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo b/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo new file mode 100644 index 00000000000..a956a3e72a0 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo @@ -0,0 +1,282 @@ +within Buildings.Experimental.DHC.Plants.Combined.Examples; +model AllElectricCWStorage + "Validation of all-electric plant model with buildings loads" + extends Modelica.Icons.Example; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Main medium (common to CHW, HW and CW)"; + replaceable package MediumConWatCoo=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium in cooler circuit"; + + parameter String filNam[2]={"modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos", + "modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos"} + "Path to file with timeseries loads"; + parameter Modelica.Units.SI.Temperature TSetDisSupHea = 273.15+60 "District heating supply temperature set point"; + parameter Modelica.Units.SI.Temperature TSetDisSupCoo = 273.15+6 "District cooling supply temperature set point"; + + replaceable parameter + Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_1403kW_7_09COP_VSD datChi( + EIRFunT={0.0101739374, 0.0607200115, 0.0003348647, 0.003162578, 0.0002388594, -0.0014121289}, + capFunT={0.0387084662, 0.2305017927, 0.0004779504, 0.0178244359, -8.48808e-05, -0.0032406711}, + EIRFunPLR={0.4304252832, -0.0144718912, 5.12039e-05, -0.7562386674, 0.5661683373, + 0.0406987748, 3.0278e-06, -0.3413411197, -0.000469572, 0.0055009208}, + QEva_flow_nominal=sum(loaCoo.QCoo_flow_nominal)/pla.nChi, + COP_nominal=2.5, + mEva_flow_nominal=-datChi.QEva_flow_nominal/5/4186, + mCon_flow_nominal=-datChi.QEva_flow_nominal * (1 + 1/datChi.COP_nominal) / 10 / 4186, + TEvaLvg_nominal=TSetDisSupCoo, + TEvaLvgMin=277.15, + TEvaLvgMax=308.15, + TConLvg_nominal=TSetDisSupHea, + TConLvgMin=296.15, + TConLvgMax=336.15) + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "Chiller parameters (each unit)" + annotation ( + Dialog(group="CHW loop and cooling-only chillers"), + Placement(transformation(extent={{140,200},{160,220}}))); + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic datChiHea= + datChi + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "Chiller parameters (each unit)" + annotation ( + Dialog(group="HW loop and heat recovery chillers"), + Placement(transformation(extent={{170,200},{190,220}}))); + replaceable parameter Fluid.HeatPumps.Data.EquationFitReversible.Generic datHeaPum( + dpHeaLoa_nominal=50000, + dpHeaSou_nominal=100, + hea( + mLoa_flow=datHeaPum.hea.Q_flow/10/4186, + mSou_flow=1E-4*datHeaPum.hea.Q_flow, + Q_flow=sum(loaHea.QHea_flow_nominal)/pla.nHeaPum, + P=datHeaPum.hea.Q_flow/2.2, + coeQ={-5.64420084,1.95212447,9.96663913,0.23316322,-5.64420084}, + coeP={-3.96682255,6.8419453,1.99606939,0.01393387,-3.96682255}, + TRefLoa=298.15, + TRefSou=253.15), + coo( + mLoa_flow=0, + mSou_flow=0, + Q_flow=-1, + P=0, + coeQ=fill(0, 5), + coeP=fill(0, 5), + TRefLoa=273.15, + TRefSou=273.15)) + "Heat pump parameters (each unit)" + annotation (Placement(transformation(extent={{200,200},{220,220}}))); + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Buildings.Experimental.DHC.Plants.Combined.AllElectricCWStorage pla( + redeclare final package Medium = Medium, + redeclare package MediumHea_b = Medium, + redeclare final package MediumConWatCoo = MediumConWatCoo, + allowFlowReversal=true, + dpConWatCooFri_nominal=1E4, + mAirCooUni_flow_nominal=pla.mConWatCoo_flow_nominal/pla.nCoo/1.45, + TWetBulCooEnt_nominal=297.05, + PFanCoo_nominal=340*pla.mConWatCoo_flow_nominal/pla.nCoo, + chi(show_T=true), + chiHea(show_T=true), + heaPum(show_T=true), + final datChi=datChi, + final datChiHea=datChiHea, + final datHeaPum=datHeaPum, + nChi=2, + dpChiWatSet_max=sum(disCoo.dpDis_nominal), + nChiHea=2, + dpHeaWatSet_max=sum(disCoo.dpDis_nominal), + nHeaPum=2, + dInsTan=0.05, + nCoo=3, + final energyDynamics=energyDynamics) + "CHW and HW plant" + annotation (Placement(transformation(extent={{-30,-30},{30,30}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for setpoint" + annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for setpoint" + annotation (Placement(transformation(extent={{-190,-10},{-170,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpHeaWatSet_max( + k=pla.dpHeaWatSet_max, + y(final unit="Pa")) "Source signal for setpoint" + annotation (Placement(transformation(extent={{-190,-70},{-170,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpChiWatSet_max( + k=pla.dpChiWatSet_max, + y(final unit="Pa")) "Source signal for setpoint" + annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Outdoor conditions" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-210,120}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet[2](each k=pla.TChiWatRet_nominal) + "Source signal for CHW return temperature" + annotation (Placement(transformation(extent={{-190,-110},{-170,-90}}))); + Loads.Heating.BuildingTimeSeriesWithETS loaHea[2]( + each THeaWatSup_nominal=pla.THeaWatSup_nominal, + filNam=filNam) "Building heating load" + annotation (Placement(transformation(extent={{10,100},{-10,120}}))); + // dpCheVal_nominal to avoid too hot water in building waterr supply due to problem of temperature drop in Dymola + Loads.Cooling.BuildingTimeSeriesWithETS loaCoo[2]( + each TChiWatSup_nominal=pla.TChiWatSup_nominal, + filNam=filNam, + each bui(w_aLoaCoo_nominal=0.015)) "Building cooling load" + annotation (Placement(transformation(extent={{10,-130},{-10,-110}}))); + // dpCheVal_nominal to avoid freezing in building waterr supply due to problem of temperature drop in Dymola + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet[2](each k=pla.THeaWatRet_nominal) + "Source signal for HW return temperature" + annotation (Placement(transformation(extent={{-190,40},{-170,60}}))); + Buildings.Controls.OBC.CDL.Logical.Not + onPla "On signal for the plant" + annotation (Placement(transformation(extent={{-64,146},{-44,166}}))); + Buildings.Controls.OBC.CDL.Logical.Timer + tim(t=3600) + annotation (Placement(transformation(extent={{-104,154},{-84,174}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold offHea(t=1e-4) + "Threshold comparison to disable the plant" + annotation (Placement(transformation(extent={{-144,154},{-124,174}}))); + Modelica.Blocks.Math.Gain norQFloHea(k=1/sum(loaHea.QHea_flow_nominal)) + "Normalized Q_flow" + annotation (Placement(transformation(extent={{-184,154},{-164,174}}))); + Buildings.Controls.OBC.CDL.Logical.Not + onPla1 + "On signal for the plant" + annotation (Placement(transformation(extent={{-26,-198},{-6,-178}}))); + Buildings.Controls.OBC.CDL.Logical.Timer + tim1(t=3600) + annotation (Placement(transformation(extent={{-66,-190},{-46,-170}}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold offCoo1(t=1e-4) + "Threshold comparison to disable the plant" + annotation (Placement(transformation(extent={{-106,-190},{-86,-170}}))); + Modelica.Blocks.Math.Gain norQFloCoo(k=1/sum(loaCoo.QCoo_flow_nominal)) + "Normalized Q_flow" + annotation (Placement(transformation(extent={{-146,-190},{-126,-170}}))); + Networks.Distribution2Pipe disHea( + redeclare final package Medium = Medium, + nCon=2, + allowFlowReversal=false, + mDis_flow_nominal=sum(loaHea.mBui_flow_nominal), + mCon_flow_nominal={loaHea[1].mBui_flow_nominal,loaHea[2].mBui_flow_nominal}, + dpDis_nominal(each displayUnit="Pa") = {200000,100000}) + "Distribution network for district heating system" + annotation (Placement(transformation(extent={{20,62},{-20,82}}))); + + Networks.Distribution2Pipe disCoo( + redeclare final package Medium = Medium, + nCon=2, + allowFlowReversal=false, + mDis_flow_nominal=sum(loaCoo.mBui_flow_nominal), + mCon_flow_nominal={loaCoo[1].mBui_flow_nominal,loaCoo[2].mBui_flow_nominal}, + dpDis_nominal(each displayUnit="Pa") = {20e4,10e4}) + "Distribution network for district cooling system" + annotation (Placement(transformation(extent={{20,-60},{-20,-80}}))); + + Modelica.Blocks.Math.Sum QTotHea_flow(nin=2) + "Total heating flow rate for all buildings " + annotation (Placement(transformation(extent={{-60,120},{-80,140}}))); + Modelica.Blocks.Math.Sum QTotCoo_flow(nin=2) + "Total cooling flow rate for all buildings " + annotation (Placement(transformation(extent={{-82,-150},{-102,-130}}))); +equation + connect(TChiWatSupSet.y, pla.TChiWatSupSet) annotation (Line(points={{-198,20}, + {-34,20}}, color={0,0,127})); + connect(THeaWatSupSet.y, pla.THeaWatSupSet) annotation (Line(points={{-168,0}, + {-74,0},{-74,16},{-34,16}}, color={0,0,127})); + connect(dpChiWatSet_max.y, pla.dpChiWatSet) annotation (Line(points={{-198,-40}, + {-70,-40},{-70,12},{-34,12}},color={0,0,127})); + connect(dpHeaWatSet_max.y, pla.dpHeaWatSet) annotation (Line(points={{-168,-60}, + {-66,-60},{-66,8},{-34,8}}, color={0,0,127})); + + connect(weaDat.weaBus, pla.weaBus) annotation (Line( + points={{-200,120},{-100,120},{-100,40},{0,40},{0,30}}, + color={255,204,51}, + thickness=0.5)); + connect(norQFloHea.y,offHea. u) + annotation (Line(points={{-163,164},{-146,164}}, color={0,0,127})); + connect(offHea.y, tim.u) + annotation (Line(points={{-122,164},{-106,164}}, color={255,0,255})); + connect(tim.passed, onPla.u) + annotation (Line(points={{-82,156},{-66,156}}, color={255,0,255})); + connect(onPla.y, pla.u1Hea) annotation (Line(points={{-42,156},{-38,156},{-38, + 24},{-34,24}}, color={255,0,255})); + connect(tim1.passed, onPla1.u) + annotation (Line(points={{-44,-188},{-40,-188},{-40,-190},{-36,-190},{-36,-188}, + {-28,-188}}, color={255,0,255})); + connect(offCoo1.y, tim1.u) + annotation (Line(points={{-84,-180},{-80,-180},{-80,-182},{-76,-182},{-76,-180}, + {-68,-180}}, color={255,0,255})); + connect(norQFloCoo.y, offCoo1.u) + annotation (Line(points={{-125,-180},{-120,-180},{-120,-182},{-116,-182},{-116, + -180},{-108,-180}}, color={0,0,127})); + connect(onPla1.y, pla.u1Coo) annotation (Line(points={{-4,-188},{8,-188},{8,-150}, + {-54,-150},{-54,28},{-34,28}}, color={255,0,255})); + connect(pla.port_bSerHea, disHea.port_aDisSup) annotation (Line(points={{30,0}, + {40,0},{40,72},{20,72}}, color={0,127,255})); + connect(disHea.port_bDisRet, pla.port_aSerHea) annotation (Line(points={{20,66}, + {30,66},{30,50},{-40,50},{-40,0},{-30,0}}, color={0,127,255})); + connect(disCoo.port_aDisSup, pla.port_bSerCoo) annotation (Line(points={{20,-70}, + {40,-70},{40,-4},{30,-4}}, color={0,127,255})); + connect(disCoo.port_bDisRet, pla.port_aSerCoo) annotation (Line(points={{20,-64}, + {30,-64},{30,-46},{-40,-46},{-40,-4},{-30,-4}}, color={0,127,255})); + connect(disCoo.ports_aCon, loaCoo.port_bSerCoo) annotation (Line(points={{-12, + -80},{-12,-92},{-32,-92},{-32,-128},{-10,-128}}, color={0,127,255})); + connect(disCoo.ports_bCon, loaCoo.port_aSerCoo) annotation (Line(points={{12,-80}, + {12,-92},{30,-92},{30,-128},{10,-128}}, color={0,127,255})); + connect(disHea.ports_bCon, loaHea.port_aSerHea) annotation (Line(points={{12,82}, + {12,92},{32,92},{32,106},{10,106}}, color={0,127,255})); + connect(loaHea.port_bSerHea, disHea.ports_aCon) annotation (Line(points={{-10, + 106},{-32,106},{-32,90},{-12,90},{-12,82}}, color={0,127,255})); + connect(QTotHea_flow.y, norQFloHea.u) annotation (Line(points={{-81,130},{-194, + 130},{-194,164},{-186,164}}, color={0,0,127})); + connect(loaCoo.QCoo_flow, QTotCoo_flow.u) annotation (Line(points={{-7,-132},{ + -8,-132},{-8,-140},{-80,-140}}, color={0,0,127})); + connect(QTotCoo_flow.y, norQFloCoo.u) annotation (Line(points={{-103,-140},{-160, + -140},{-160,-180},{-148,-180}}, color={0,0,127})); + connect(loaHea.QHea_flow, QTotHea_flow.u) annotation (Line(points={{-5,98},{-4, + 98},{-4,94},{-50,94},{-50,130},{-58,130}}, color={0,0,127})); + connect(TChiWatRet.y, loaCoo.TSetDisRet) annotation (Line(points={{-168,-100}, + {20,-100},{20,-113},{11,-113}}, color={0,0,127})); + connect(THeaWatRet.y, loaHea.TSetDisRet) annotation (Line(points={{-168,50},{-44, + 50},{-44,126},{20,126},{20,117},{11,117}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mos" + "Simulate and plot"), + experiment( + StartTime=3024000, + StopTime=3456000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-240,-240},{240,240}})), + Documentation(info=" +

    +This model uses + +Buildings.Experimental.DHC.Plants.Combined.AllElectricCWStorage +to provide heating and cooling to two identical buildings with heating and cooling +loads provided as time series. +

    +", revisions=" +
      +
    • +April 7, 2023, by David Blum:
      +First implementation. +
    • +
    +")); +end AllElectricCWStorage; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Examples/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Examples/package.mo new file mode 100644 index 00000000000..c5b6b00876b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Examples/package.mo @@ -0,0 +1,4 @@ +within Buildings.Experimental.DHC.Plants.Combined; +package Examples "This package holds example models using plants providing district heating and cooling" + extends Modelica.Icons.ExamplesPackage; +end Examples; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Examples/package.order b/Buildings/Experimental/DHC/Plants/Combined/Examples/package.order new file mode 100644 index 00000000000..563bdec055b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Examples/package.order @@ -0,0 +1 @@ +AllElectricCWStorage diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo new file mode 100644 index 00000000000..759a76f67c2 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo @@ -0,0 +1,104 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses; +block MultipleCommands + "Block that converts command signals for multiple units" + + parameter Integer nUni(final min=1, start=1) + "Number of units" + annotation(Evaluate=true); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] + "Command signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1One + "On/Off signal: true if at least one unit is commanded On" + annotation (Placement(transformation(extent={{100,40},{140,80}}), iconTransformation( + extent={{100,40},{140,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput nUniOnBou + "Number of units that are commanded On, with lower bound of 1" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), + iconTransformation(extent={{100,-80},{140,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput nUniOn + "Number of units that are commanded On" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nUni] + "Convert to real" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum(nin=nUni) + "Total" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.5) + "Returns true if at least one unit is commanded on" + annotation (Placement(transformation(extent={{70,50},{90,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Max max1 + "Maximum value" + annotation (Placement(transformation(extent={{70,-70},{90,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + "Constant one" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + +equation + connect(booToRea.y, mulSum.u) + annotation (Line(points={{-38,0},{-12,0}}, color={0,0,127})); + connect(greThr.y, y1One) + annotation (Line(points={{92,60},{120,60}}, + color={255,0,255})); + connect(mulSum.y, greThr.u) + annotation (Line(points={{12,0},{60,0},{60,60},{68,60}}, + color={0,0,127})); + connect(max1.y, nUniOnBou) + annotation (Line(points={{92,-60},{120,-60}}, + color={0,0,127})); + connect(mulSum.y, nUniOn) annotation (Line(points={{12,0},{120,0}}, + color={0,0,127})); + connect(one.y, max1.u2) + annotation (Line(points={{42,-60},{50,-60},{50,-66},{68,-66}}, + color={0,0,127})); + connect(mulSum.y, max1.u1) annotation (Line(points={{12,0},{60,0},{60,-54},{ + 68,-54}}, + color={0,0,127})); + connect(y1, booToRea.u) + annotation (Line(points={{-120,0},{-62,0}}, color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}})), + Documentation(info=" +

    +This block computes the following variables based on a Boolean array +representing typically the On/Off command signal for a group of multiple +units such as chillers or CHW pumps. +

    +
      +
    • +The Boolean output y1One is true if at least +one element of the input array is true. +
    • +
    • +The real output nUniOn is the number of elements of +the input array that are true (may be zero). +
    • +
    • +The real output nUniOnBou is the maximum between 1 +and nUniOn. +
    • +
    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultipleCommands; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleValves.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleValves.mo new file mode 100644 index 00000000000..22c8959cc77 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleValves.mo @@ -0,0 +1,177 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses; +model MultipleValves + "Parallel arrangement of identical two-way modulating valves" + extends Buildings.Fluid.Interfaces.LumpedVolumeDeclarations( + final massDynamics=energyDynamics, + final mSenFac=1); + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal(final min=Modelica.Constants.small)=nUni*mUni_flow_nominal, + show_T=false, + port_a( + h_outflow(start=h_outflow_start)), + port_b( + h_outflow(start=h_outflow_start), + p(start=p_start), + final m_flow(max = if allowFlowReversal then +Modelica.Constants.inf else 0))); + + parameter Integer nUni( + final min=1, + start=1) + "Number of units (branches in the network)" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mUni_flow_nominal( + final min=Modelica.Constants.small) + "Nominal mass flow rate (each unit)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpValve_nominal( + displayUnit="Pa", + min=0) + "Nominal pressure drop of fully open valve (each unit)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpFixed_nominal( + displayUnit="Pa", + min=0) = 0 + "Pressure drop of pipe and other resistances that are in series (each unit)" + annotation (Dialog(group="Nominal condition")); + + parameter Boolean use_inputFilter=true + "Opening is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening")); + parameter Modelica.Units.SI.Time riseTime=120 + "Rise time of the filter (time to reach 99.6 % of an opening step)" + annotation (Dialog( + tab="Dynamics", + group="Filtered opening", + enable=use_inputFilter)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + + parameter Boolean from_dp = false + "= true, use m_flow = f(dp) else dp = f(m_flow)" + annotation (Evaluate=true, Dialog(tab="Advanced")); + parameter Boolean linearized = false + "= true, use linear relation between m_flow and dp for any flow rate" + annotation(Evaluate=true, Dialog(tab="Advanced")); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput y[nUni] + "Valve commanded position" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput y_actual[nUni] + "Valve returned position" + annotation (Placement(transformation(extent={{100,40},{140,80}}), + iconTransformation(extent={{100,40},{140,80}}))); + + Fluid.FixedResistances.Junction junInl[nUni]( + redeclare each final package Medium=Medium, + each final m_flow_nominal=m_flow_nominal * {1,-1,-1}, + each final dp_nominal=fill(0,3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Entering, + each final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Leaving, + each final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Leaving) + "Fluid junction" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={-60,0}))); + Fluid.FixedResistances.Junction junOut[nUni]( + redeclare each final package Medium=Medium, + each final m_flow_nominal=m_flow_nominal * {1,-1,1}, + each final dp_nominal=fill(0,3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Entering, + each final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Leaving, + each final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional else + Modelica.Fluid.Types.PortFlowDirection.Entering) + "Fluid junction" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=90, + origin={60,0}))); + replaceable Fluid.Actuators.Valves.TwoWayEqualPercentage val[nUni] + constrainedby Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValveKv( + redeclare each final package Medium = Medium, + each final from_dp=from_dp, + each final linearized=linearized, + each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, + each final m_flow_nominal=mUni_flow_nominal, + each final dpValve_nominal=dpValve_nominal, + each final dpFixed_nominal=dpFixed_nominal, + each final allowFlowReversal=allowFlowReversal, + each final use_inputFilter=use_inputFilter, + each final riseTime=riseTime, + each final init=init, + each final y_start=y_start) + "Modulating valve" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +protected + final parameter Medium.ThermodynamicState sta_start=Medium.setState_pTX( + T=T_start, + p=p_start, + X=X_start) + "Medium state at start values"; + final parameter Modelica.Units.SI.SpecificEnthalpy h_outflow_start= + Medium.specificEnthalpy(sta_start) + "Start value for outflowing enthalpy"; +equation + if nUni > 1 then + for i in 1:(nUni - 1) loop + connect(junOut[i].port_1, junOut[i+1].port_2) + annotation (Line(points={{60,-10},{60,-20},{40,-20},{40,20},{60,20},{60, + 10}}, color={0,127,255})); + connect(junInl[i].port_2, junInl[i+1].port_1) + annotation (Line(points={{-60,-10},{-60,-20},{-40,-20},{-40,20},{-60,20}, + {-60,10}}, color={0,127,255})); + end for; + end if; + connect(junInl.port_3, val.port_a) annotation (Line(points={{-50,-6.66134e-16}, + {-30,-6.66134e-16},{-30,0},{-10,0}}, color={0,127,255})); + connect(val.port_b, junOut.port_3) annotation (Line(points={{10,0},{30,0},{30, + 4.44089e-16},{50,4.44089e-16}}, color={0,127,255})); + connect(junOut[1].port_2, port_b) + annotation (Line(points={{60,10},{60,20},{80,20},{80,0},{100,0}}, + color={0,127,255})); + + connect(port_a, junInl[1].port_1) + annotation (Line(points={{-100,0},{-80,0},{-80,20},{-60,20},{-60,10}}, + color={0,127,255})); + connect(val.y_actual, y_actual) + annotation (Line(points={{5,7},{20,7},{20,60},{120,60}}, color={0,0,127})); + connect(y, val.y) + annotation (Line(points={{-120,60},{0,60},{0,12}}, color={0,0,127})); + annotation ( + defaultComponentName="res", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

    +This model represents a set of control valves piped in +parallel. +An optional fixed resistance may be included in series with each valve. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultipleValves; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo new file mode 100644 index 00000000000..0fd70808ea1 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo @@ -0,0 +1,264 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses; +partial model PartialMultiplePumps + "Base class for modeling multiple identical pumps in parallel" + extends Buildings.Fluid.Interfaces.LumpedVolumeDeclarations( + final massDynamics=energyDynamics, + final mSenFac=1); + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal(final min=Modelica.Constants.small)=nPum * mPum_flow_nominal, + show_T=false, + port_a( + h_outflow(start=h_outflow_start)), + port_b( + h_outflow(start=h_outflow_start), + p(start=p_start), + final m_flow(max = if allowFlowReversal then +Modelica.Constants.inf else 0))); + + parameter Integer nPum( + final min=1, + start=1) + "Number of pumps" + annotation(Evaluate=true); + parameter Boolean have_var = true + "Set to true for variable speed pumps, false for constant speed" + annotation(Evaluate=true); + parameter Boolean have_valve = true + "Set to true for inline check valve" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mPum_flow_nominal + "Design mass flow rate (each pump)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpPum_nominal( + displayUnit="Pa") + "Design head (each pump)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpValve_nominal( + displayUnit="Pa")=10000 + "Pressure drop of check valve fully open" + annotation(Dialog(group="Nominal condition", enable=have_valve)); + replaceable parameter Fluid.Movers.Data.Generic per + constrainedby Buildings.Fluid.Movers.Data.Generic( + pressure( + V_flow={0, 1, 2} * mPum_flow_nominal / rho_default, + dp={1.14, 1, 0.42} * dpPum_nominal), + motorCooledByFluid=false) "Pump parameters" + annotation (Placement(transformation(extent={{-10,-98},{10,-78}}))); + + parameter Modelica.Units.SI.Time tau=1 + "Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic" + annotation (Dialog( + tab="Dynamics", + group="Nominal condition", + enable=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState)); + + // Classes used to implement the filtered speed + parameter Boolean use_inputFilter=true + "= true, if speed is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered speed")); + parameter Modelica.Units.SI.Time riseTime=30 + "Rise time of the filter (time to reach 99.6 % of the speed)" annotation ( + Dialog( + tab="Dynamics", + group="Filtered speed", + enable=use_inputFilter)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered speed",enable=use_inputFilter)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nPum] + "Start signal (VFD Run or motor starter contact)" + annotation (Placement( + transformation(extent={{-140,80},{-100,120}}), iconTransformation( + extent={{-140,60},{-100,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput P(final unit="W") + "Total power (all pumps)" + annotation (Placement(transformation(extent={{100,20},{140,60}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1_actual[nPum] + "Pump status" + annotation (Placement(transformation(extent={{100,80},{140, + 120}}), iconTransformation(extent={{100,60},{140,100}}))); + + Fluid.BaseClasses.MassFlowRateMultiplier mulOut( + redeclare final package Medium=Medium, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulInl( + redeclare final package Medium=Medium, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + replaceable Fluid.Movers.SpeedControlled_y pum + constrainedby Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine( + redeclare final package Medium=Medium, + final tau=tau, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final per=per, + addPowerToMedium=false) "Pump" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + MultipleCommands com(final nUni=nPum) "Convert command signal" + annotation (Placement(transformation(extent={{-50,90},{-30,110}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea + "Convert to real" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={10,100}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply mul "Compute total power" + annotation (Placement(transformation(extent={{60,30},{80,50}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply inp + "Compute pump input signal" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={0,40}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cst + if not have_var "Constant setpoint" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe(t=1E-2, h=0.5E-2) + "Evaluate if pump is operating" + annotation (Placement(transformation(extent={{30,-70},{50,-50}}))); + Fluid.FixedResistances.CheckValve cheVal( + redeclare final package Medium=Medium, + final m_flow_nominal=mPum_flow_nominal, + final dpValve_nominal=dpValve_nominal, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal) if have_valve + "Check valve (optional)" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + PassThroughFluid pas( + redeclare final package Medium=Medium, + final allowFlowReversal=allowFlowReversal) if not have_valve + "Direct fluid pass-through (case without check valve)" + annotation (Placement(transformation(extent={{30,-30},{50,-10}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep( + final nout=nPum) + "Replicate" + annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); + Buildings.Controls.OBC.CDL.Logical.Pre preY1[nPum] + "Left limit of signal avoiding direct feedback of status to controller" + annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); +protected + parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( + T=Medium.T_default, + p=Medium.p_default, + X=Medium.X_default) + "State of the medium at the medium default properties"; + parameter Modelica.Units.SI.Density rho_default=Medium.density(sta_default) + "Density at the medium default properties"; + final parameter Medium.ThermodynamicState sta_start=Medium.setState_pTX( + T=T_start, + p=p_start, + X=X_start) + "Medium state at start values"; + final parameter Modelica.Units.SI.SpecificEnthalpy h_outflow_start= + Medium.specificEnthalpy(sta_start) + "Start value for outflowing enthalpy"; +equation + connect(mulOut.port_b, port_b) + annotation (Line(points={{80,0},{100,0}}, color={0,127,255})); + connect(port_a, mulInl.port_a) + annotation (Line(points={{-100,0},{-80,0}}, color={0,127,255})); + connect(mulOut.uInv, mulInl.u) annotation (Line(points={{81,6},{88,6},{88,-26}, + {-90,-26},{-90,6},{-82,6}},color={0,0,127})); + connect(mulInl.port_b, pum.port_a) + annotation (Line(points={{-60,0},{-10,0}}, color={0,127,255})); + connect(com.nUniOnBou, mulOut.u) annotation (Line(points={{-28,94},{-20,94},{ + -20,80},{54,80},{54,6},{58,6}}, + color={0,0,127})); + connect(com.y1One, booToRea.u) + annotation (Line(points={{-28,106},{-10,106},{-10,100},{-2,100}}, + color={255,0,255})); + connect(mul.y, P) + annotation (Line(points={{82,40},{120,40}}, color={0,0,127})); + connect(com.nUniOn, mul.u1) annotation (Line(points={{-28,100},{-18,100},{-18, + 82},{56,82},{56,46},{58,46}}, + color={0,0,127})); + connect(pum.P, mul.u2) annotation (Line(points={{11,9},{20,9},{20,34},{58,34}}, + color={0,0,127})); + connect(pum.port_b, cheVal.port_a) + annotation (Line(points={{10,0},{30,0}}, color={0,127,255})); + connect(cheVal.port_b, mulOut.port_a) + annotation (Line(points={{50,0},{60,0}}, color={0,127,255})); + connect(cst.y, inp.u1) annotation (Line(points={{-58,30},{-40,30},{-40,60},{ + -6,60},{-6,52}}, + color={0,0,127})); + connect(booToRea.y, inp.u2) annotation (Line(points={{22,100},{40,100},{40,60}, + {6,60},{6,52}}, + color={0,0,127})); + connect(pum.port_b, pas.port_a) + annotation (Line(points={{10,0},{30,0},{30,-20}}, color={0,127,255})); + connect(pas.port_b, mulOut.port_a) + annotation (Line(points={{50,-20},{50,0},{60,0}}, color={0,127,255})); + connect(pum.y_actual, isOpe.u) annotation (Line(points={{11,7},{20,7},{20,-60}, + {28,-60}}, color={0,0,127})); + connect(isOpe.y, rep.u) + annotation (Line(points={{52,-60},{58,-60}}, color={255,0,255})); + connect(y1, preY1.u) annotation (Line(points={{-120,100},{-82,100}}, + color={255,0,255})); + connect(preY1.y, com.y1) + annotation (Line(points={{-58,100},{-52,100}}, color={255,0,255})); + connect(rep.y, y1_actual) annotation (Line(points={{82,-60},{92,-60},{92,100}, + {120,100}}, color={255,0,255})); + annotation ( + defaultComponentName="pum", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, + 100}}), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-100,16},{100,-16}}, + lineColor={0,0,0}, + fillColor={0,127,255}, + fillPattern=FillPattern.HorizontalCylinder), + Ellipse( + extent={{-58,58},{58,-58}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}), + Ellipse( + extent={{4,16},{36,-16}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + visible=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState, + fillColor={0,100,199}), + Polygon( + points={{0,50},{0,-50},{54,0},{0,50}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255})}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-120},{100,120}})), + Documentation(info=" +

    +This base class represents multiple identical pumps that are piped in parallel. +An optional check valve in series with each pump is included. +This class is used to construct the various multiple-pump models within + +Buildings.Experimental.DHC.Plants.Combined.Subsystems. +

    +

    Details

    +

    +In a parallel arrangement, all operating units have the same operating point. +This allows modeling the multiple pumps with a single instance of any +class derived from + +Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine. +Hydronics are resolved with mass flow rate multiplier components. +", revisions=" +

      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end PartialMultiplePumps; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PassThroughFluid.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PassThroughFluid.mo new file mode 100644 index 00000000000..8288d1ec6c7 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PassThroughFluid.mo @@ -0,0 +1,28 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses; +model PassThroughFluid "Direct fluid pass-through" + extends Buildings.Fluid.Interfaces.PartialTwoPort; + +equation + connect(port_a, port_b) annotation (Line(points={{-100,0},{0,0},{0,0},{100,0}}, + color={0,127,255})); + annotation ( + defaultComponentName="pas", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Line( + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

    +This is a model of a direct fluid pass-through used for +templating purposes. +

    +", revisions=" +
      +
    • +February 11, 2022, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end PassThroughFluid; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.mo new file mode 100644 index 00000000000..d01dc1e4b7a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +package BaseClasses "Package with base classes" + extends Modelica.Icons.BasesPackage; + + annotation (Documentation(info=" +

    +This package contains base classes that are used +to construct subsystem models. +

    +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.order b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.order new file mode 100644 index 00000000000..40e1fe5f8fd --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/package.order @@ -0,0 +1,4 @@ +MultipleCommands +MultipleValves +PartialMultiplePumps +PassThroughFluid diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo new file mode 100644 index 00000000000..40c41ca52fb --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo @@ -0,0 +1,545 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model ChillerGroup + "Model of multiple identical chillers in parallel" + extends Buildings.Fluid.Interfaces.PartialFourPortInterface( + final m1_flow_nominal = mConWat_flow_nominal, + final m2_flow_nominal = mChiWat_flow_nominal); + + parameter Integer nUni(final min=1, start=1) + "Number of units operating at design conditions" + annotation(Evaluate=true); + final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + dat.TEvaLvg_nominal + "Design (minimum) CHW supply temperature"; + final parameter Modelica.Units.SI.Temperature TConWatLvg_nominal= + dat.TConLvg_nominal + "Design (maximum) CW leaving temperature"; + final parameter Modelica.Units.SI.HeatFlowRate QChiWatUni_flow_nominal= + dat.QEva_flow_nominal + "Design cooling heat flow rate (each unit, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QConWatUni_flow_nominal= + -dat.QEva_flow_nominal * (1 + 1 / dat.COP_nominal * dat.etaMotor) + "Design CW heat flow rate (each unit, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= + nUni * QChiWatUni_flow_nominal + "Design cooling heat flow rate (all units, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QConWat_flow_nominal= + nUni * QConWatUni_flow_nominal + "Design CW heat flow rate (all units, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatUni_flow_nominal( + final min=0)=dat.mEva_flow_nominal + "Design chiller CHW mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( + final min=0)=dat.mCon_flow_nominal + "Design chiller CW mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0)=nUni * mChiWatUni_flow_nominal + "Design CHW mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0)=nUni * mConWatUni_flow_nominal + "Design CW mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpEva_nominal(displayUnit="Pa") + "Design chiller evaporator pressure drop (each unit)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpCon_nominal(displayUnit="Pa") + "Chiller condenser design pressure drop (each unit)" + annotation(Dialog(group="Nominal condition")); + + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic dat + "Chiller parameters (each unit)" + annotation (Placement(transformation(extent={{-10,-134},{10,-114}}))); + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "= true, if opening is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening")); + parameter Modelica.Units.SI.Time riseTime=120 + "Rise time of the filter (time to reach 99.6 % of an opening step)" + annotation (Dialog( + tab="Dynamics", + group="Filtered opening", + enable=use_inputFilter)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] + "Chiller On/Off command" + annotation (Placement(transformation(extent={{-140, + 100},{-100,140}}), iconTransformation(extent={{-140,70},{-100,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet( + final unit="K", displayUnit="degC") + "Supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,-110},{-100,-70}}), + iconTransformation(extent={{-140,-110},{-100, -70}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( + final unit="W") + "Power drawn" + annotation (Placement(transformation(extent={{100,0},{140,40}}), + iconTransformation(extent={{100,70},{140,110}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValCon[nUni]( + each final unit="1", each final min=0, each final max=1) + "Chiller condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={0,178}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-60,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEva[nUni]( + each final unit="1", each final min=0, each final max=1) + "Chiller evaporator isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={0,-180}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-58,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConLvg[nUni](each final + unit="K", each displayUnit="degC") + "Chiller condenser leaving temperature" annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={40,180}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={60,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mCon_flow[nUni]( + each final unit="kg/s") + "Chiller condenser barrel mass flow rate" annotation ( + Placement(transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={60,180}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={80,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TEvaLvg[nUni](each final + unit="K", each displayUnit="degC") + "Chiller evaporator leaving temperature" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={40,-180}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={60,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEva_flow[nUni]( + each final unit="kg/s") + "Chiller evaporator barrel mass flow rate" annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={60,-180}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={80,-120}))); + + Fluid.Chillers.ElectricReformulatedEIR chi( + PLR1(start=0), + final per=dat, + redeclare final package Medium1=Medium1, + redeclare final package Medium2=Medium2, + final have_switchover=false, + final dp1_nominal=0, + final dp2_nominal=0, + final allowFlowReversal1=allowFlowReversal1, + final allowFlowReversal2=allowFlowReversal2, + final energyDynamics=energyDynamics, + final show_T=show_T) "Chiller" + annotation (Placement(transformation(extent={{-4,-10},{16,10}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulConInl( + redeclare final package Medium = Medium1, + final allowFlowReversal=allowFlowReversal1, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{-50,50},{-30,70}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulConOut( + redeclare final package Medium = Medium1, + final allowFlowReversal=allowFlowReversal1, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{30,50},{50,70}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulEvaInl( + redeclare final package Medium = Medium2, + final allowFlowReversal=allowFlowReversal2, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{50,-70},{30,-50}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulEvaOut( + redeclare final package Medium = Medium2, + final allowFlowReversal=allowFlowReversal2, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{-30,-70},{-50,-50}}))); + BaseClasses.MultipleCommands com( + final nUni=nUni) + "Convert command signals" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + BaseClasses.MultipleValves valEva( + redeclare final package Medium = Medium2, + redeclare final Buildings.Fluid.Actuators.Valves.TwoWayLinear val, + linearized=true, + final nUni=nUni, + final mUni_flow_nominal=mChiWatUni_flow_nominal, + final dpFixed_nominal=dpEva_nominal, + dpValve_nominal=1E3, + final allowFlowReversal=allowFlowReversal2, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final show_T=show_T) + "Chiller evaporator isolation valves" + annotation (Placement(transformation(extent={{-70,-50},{-90,-70}}))); + BaseClasses.MultipleValves valCon( + redeclare final package Medium = Medium1, + redeclare final Buildings.Fluid.Actuators.Valves.TwoWayLinear val, + linearized=true, + final nUni=nUni, + final mUni_flow_nominal=mConWatUni_flow_nominal, + final dpFixed_nominal=dpCon_nominal, + dpValve_nominal=1E3, + final allowFlowReversal=allowFlowReversal1, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final show_T=show_T) + "Chiller condenser isolation valves" + annotation (Placement(transformation(extent={{70,50},{90,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + annotation (Placement(transformation(extent={{70,30},{90,10}}))); + Fluid.Sensors.TemperatureTwoPort temConLvg( + redeclare final package Medium = Medium1, + final m_flow_nominal=mConWatUni_flow_nominal, + final allowFlowReversal=allowFlowReversal1) + "Chiller condenser leaving temperature" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={20,20}))); + Fluid.Sensors.TemperatureTwoPort temEvaLvg( + redeclare final package Medium = Medium2, + final m_flow_nominal=mChiWatUni_flow_nominal, + final allowFlowReversal=allowFlowReversal2) + "Chiller evaporator leaving temperature" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={-20,-20}))); + Fluid.Sensors.MassFlowRate floCon( + redeclare final package Medium =Medium1, + final allowFlowReversal=allowFlowReversal1) + "Chiller condenser barrel mass flow rate" + annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={20,40}))); + Fluid.Sensors.MassFlowRate floEva( + redeclare final package Medium =Medium2, + final allowFlowReversal=allowFlowReversal2) + "Chiller evaporator barrel mass flow rate" + annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={-20,-40}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep(nout=nUni) + "Replicate" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={40,140}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep1(nout=nUni) + "Replicate" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={60,140}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep2(nout=nUni) + "Replicate" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={60,-140}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep3(nout=nUni) + "Replicate" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={40,-140}))); +equation + connect(mulEvaInl.port_b,chi. port_a2) + annotation (Line(points={{30,-60},{20,-60},{20,-6},{16,-6}}, + color={0,127,255})); + connect(TSet,chi. TSet) annotation (Line(points={{-120,-90},{-10,-90},{-10,-3}, + {-6,-3}}, color={0,0,127})); + connect(mulConOut.uInv, mulConInl.u) annotation (Line(points={{51,66},{54,66}, + {54,80},{-54,80},{-54,66},{-52,66}}, color={0,0,127})); + connect(mulEvaOut.uInv, mulEvaInl.u) annotation (Line(points={{-51,-54},{-54,-54}, + {-54,-80},{56,-80},{56,-54},{52,-54}}, color={0,0,127})); + connect(port_a1, mulConInl.port_a) + annotation (Line(points={{-100,60},{-50,60}}, color={0,127,255})); + connect(port_a2, mulEvaInl.port_a) + annotation (Line(points={{100,-60},{50,-60}}, color={0,127,255})); + connect(port_b2, valEva.port_b) + annotation (Line(points={{-100,-60},{-90,-60}}, color={0,127,255})); + connect(mulEvaOut.port_b, valEva.port_a) + annotation (Line(points={{-50,-60},{-70,-60}}, color={0,127,255})); + connect(y1, com.y1) annotation (Line(points={{-120,120},{-82,120}}, + color={255,0,255})); + connect(chi.P, mulP.u1) annotation (Line(points={{17,9},{60,9},{60,14},{68,14}}, + color={0,0,127})); + connect(com.nUniOn, mulP.u2) annotation (Line(points={{-58,120},{56,120},{56, + 26},{68,26}}, color={0,0,127})); + connect(yValCon, valCon.y) annotation (Line(points={{0,178},{0,122},{64,122}, + {64,66},{68,66}}, color={0,0,127})); + connect(yValEva, valEva.y) annotation (Line(points={{0,-180},{0,-140},{-60, + -140},{-60,-66},{-68,-66}}, color={0,0,127})); + + connect(mulConInl.port_b,chi. port_a1) annotation (Line(points={{-30,60},{-20, + 60},{-20,6},{-4,6}}, color={0,127,255})); + connect(mulP.y, P) + annotation (Line(points={{92,20},{120,20}}, color={0,0,127})); + connect(com.nUniOnBou, mulConOut.u) annotation (Line(points={{-58,114},{20,114}, + {20,66},{28,66}}, color={0,0,127})); + connect(mulConInl.uInv, mulEvaOut.u) annotation (Line(points={{-29,66},{-24,66}, + {-24,-54},{-28,-54}}, color={0,0,127})); + connect(com.y1One,chi. on) annotation (Line(points={{-58,126},{-10,126},{-10,3}, + {-6,3}}, color={255,0,255})); + connect(valCon.port_b, port_b1) + annotation (Line(points={{90,60},{100,60}}, color={0,127,255})); + connect(mulConOut.port_b, valCon.port_a) + annotation (Line(points={{50,60},{70,60}}, color={0,127,255})); + connect(temEvaLvg.port_a, chi.port_b2) + annotation (Line(points={{-20,-10},{-20,-6},{-4,-6}}, color={0,127,255})); + connect(chi.port_b1, temConLvg.port_a) + annotation (Line(points={{16,6},{20,6},{20,10}}, color={0,127,255})); + connect(temConLvg.port_b, floCon.port_a) + annotation (Line(points={{20,30},{20,30}}, color={0,127,255})); + connect(floCon.port_b, mulConOut.port_a) + annotation (Line(points={{20,50},{20,60},{30,60}}, color={0,127,255})); + connect(temEvaLvg.port_b, floEva.port_a) + annotation (Line(points={{-20,-30},{-20,-30}}, color={0,127,255})); + connect(floEva.port_b, mulEvaOut.port_a) annotation (Line(points={{-20,-50},{ + -20,-60},{-30,-60}}, color={0,127,255})); + connect(rep.y, TConLvg) + annotation (Line(points={{40,152},{40,180}}, color={0,0,127})); + connect(rep1.y, mCon_flow) + annotation (Line(points={{60,152},{60,180}}, color={0,0,127})); + connect(floCon.m_flow, rep1.u) + annotation (Line(points={{31,40},{60,40},{60,128}}, color={0,0,127})); + connect(temConLvg.T, rep.u) annotation (Line(points={{9,20},{0,20},{0,100},{ + 40,100},{40,128}}, color={0,0,127})); + connect(rep3.y, TEvaLvg) + annotation (Line(points={{40,-152},{40,-180},{40,-180}}, color={0,0,127})); + connect(rep2.y, mEva_flow) annotation (Line(points={{60,-152},{60,-158},{60, + -158},{60,-180}}, color={0,0,127})); + connect(floEva.m_flow, rep2.u) + annotation (Line(points={{-9,-40},{60,-40},{60,-128}}, color={0,0,127})); + connect(temEvaLvg.T, rep3.u) annotation (Line(points={{-9,-20},{24,-20},{24,-120}, + {40,-120},{40,-128}}, color={0,0,127})); + annotation ( + defaultComponentName="chi", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,80},{70,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,52},{-40,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,70},{58,52}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,12},{-32,12},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,-10},{-32,-10},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,-10},{-40,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{38,52},{42,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,-50},{58,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{18,24},{62,-18}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,24},{22,-8},{58,-8},{40,24}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,52},{-40,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,70},{58,52}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,12},{-32,12},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,-10},{-32,-10},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,-10},{-40,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{38,52},{42,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,-50},{58,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{18,24},{62,-18}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,24},{22,-8},{58,-8},{40,24}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-160},{100,160}})), + Documentation(info=" +

    +This model represents a set of identical water-cooled compression chillers +that are piped in parallel. +Modulating isolation valves are included on condenser and evaporator side. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +On/Off command y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +CHW supply temperature setpoint TSet: +AO signal common to all units, with a dimensionality of zero +
    • +
    • +Condenser and evaporator isolation valve commanded position yVal(Con|Eva): +AO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser and evaporator leaving temperature T(Con|Eva)Lvg: +AI signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser and evaporator mass flow rate m(Con|Eva)_flow: +AI signal dedicated to each unit, with a dimensionality of one +
    • +
    +

    Details

    +
    Modeling approach
    +

    +In a parallel arrangement, all operating units have the same operating point, +provided that the isolation valves are commanded to the same position. +This allows modeling the heat transfer through the condenser and evaporator +barrel with a single instance of + +Buildings.Fluid.Chillers.ElectricReformulatedEIR. +Hydronics are resolved with mass flow rate multiplier components in +conjunction with instances of + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.MultipleValves +which represent the parallel network of valves and fixed resistances. +

    +
    Actuators
    +

    +By default, linear valve models are used. Those are configured with +a pressure drop varying linearly with the flow rate, as opposed +to the quadratic dependency usually considered for a turbulent flow +regime. +This is because the whole plant model contains large nonlinear systems +of equations and this configuration limits the risk of solver failure +while reducing the time to solution. +This has no significant impact on the operating point of the circulation pumps +when a control loop is used to modulate the valve opening and maintain +the flow rate or the leaving temperature at setpoint. +Then, whatever the modeling assumptions for the valve, the +control loop ensures that the valve creates the adequate pressure drop +and flow, which will simply be reached at a different valve opening +with the above simplification. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ChillerGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo new file mode 100644 index 00000000000..01521cecad0 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo @@ -0,0 +1,779 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model ChillerHeatRecoveryGroup + "Model of multiple identical heat recovery chillers in parallel" + extends Buildings.Fluid.Interfaces.PartialEightPortInterface( + redeclare final package Medium1=Medium, + redeclare final package Medium2=Medium, + redeclare final package Medium3=Medium, + redeclare final package Medium4=Medium, + final m1_flow_nominal = mConWat_flow_nominal, + final m2_flow_nominal = mChiWat_flow_nominal, + final m3_flow_nominal = mConWat_flow_nominal, + final m4_flow_nominal = mChiWat_flow_nominal, + final allowFlowReversal1=allowFlowReversal, + final allowFlowReversal2=allowFlowReversal, + final allowFlowReversal3=allowFlowReversal, + final allowFlowReversal4=allowFlowReversal); + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium model for all four fluid circuits" + annotation (choices( + choice(redeclare package Medium=Buildings.Media.Water "Water"), + choice(redeclare package Medium = + Buildings.Media.Antifreeze.PropyleneGlycolWater ( + property_T=293.15,X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); + + parameter Integer nUni(final min=1, start=1) + "Number of units operating at design conditions" + annotation(Evaluate=true); + parameter Modelica.Units.SI.Temperature TCasHeaEnt_nominal=298.15 + "Design evaporator entering temperature in cascading heating mode"; + parameter Modelica.Units.SI.Temperature TCasCooEnt_nominal=288.15 + "Design condenser entering temperature in cascading cooling mode"; + final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= + dat.TEvaLvg_nominal + "Design (minimum) CHW supply temperature"; + final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal= + dat.TConLvg_nominal + "Design (maximum) HW supply temperature"; + final parameter Modelica.Units.SI.HeatFlowRate QChiWatUni_flow_nominal= + dat.QEva_flow_nominal + "Design cooling heat flow rate (each unit, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QHeaWatUni_flow_nominal= + -dat.QEva_flow_nominal * (1 + 1 / dat.COP_nominal * dat.etaMotor) + "Design heating heat flow rate in direct heat recovery mode (each unit, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.Efficiency COPCasHea_nominal(fixed=false) + "Coefficient of performance in cascading heating mode"; + final parameter Modelica.Units.SI.Efficiency COPCasCoo_nominal(fixed=false) + "Coefficient of performance in cascading cooling mode"; + final parameter Modelica.Units.SI.Temperature TCasHeaLvg_nominal(fixed=false) + "Design value of evaporator leaving temperature in cascading heating mode"; + final parameter Modelica.Units.SI.Temperature TCasCooLvg_nominal(fixed=false) + "Design value of condenser leaving temperature in cascading cooling mode"; + final parameter Modelica.Units.SI.HeatFlowRate QEvaCasHeaUni_flow_nominal( + fixed=false, + start=QChiWatUni_flow_nominal * (1 + 2E-2 * (TCasHeaEnt_nominal - + (dat.TEvaLvg_nominal - QChiWatUni_flow_nominal / mChiWatUni_flow_nominal / cpCas)))) + "Design evaporator heat flow rate in cascading heating mode (each unit, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCooUni_flow_nominal( + fixed=false, + start=QChiWatUni_flow_nominal * (1 - 2E-2 * (TCasCooEnt_nominal - + (dat.TConLvg_nominal - QHeaWatUni_flow_nominal / mConWatUni_flow_nominal / cpCas)))) + "Design cooling heat flow rate in cascading cooling mode (each unit, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QHeaWatCasHeaUni_flow_nominal= + -QEvaCasHeaUni_flow_nominal * (1 + 1 / COPCasHea_nominal * dat.etaMotor) + "Design heating heat flow rate in cascading heating mode (each unit, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QConCasCooUni_flow_nominal= + -QChiWatCasCooUni_flow_nominal * (1 + 1 / COPCasCoo_nominal * dat.etaMotor) + "Design condenser heat flow rate in cascading cooling mode (each unit, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= + nUni * QChiWatUni_flow_nominal + "Design cooling heat flow rate (all units, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal= + nUni * QHeaWatUni_flow_nominal + "Design heating heat flow rate (all units, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QEvaCasHea_flow_nominal= + nUni * QEvaCasHeaUni_flow_nominal + "Design evaporator heat flow rate in cascading heating mode (all units, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal= + nUni * QChiWatCasCooUni_flow_nominal + "Design cooling heat flow rate in cascading cooling mode (all units, <0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QHeaWatCasHea_flow_nominal= + nUni * QHeaWatCasHeaUni_flow_nominal + "Design heating heat flow rate in cascading heating mode (all units, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.HeatFlowRate QConCasCoo_flow_nominal= + nUni * QConCasCooUni_flow_nominal + "Design condenser heat flow rate in cascading cooling mode (all units, >0)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWatUni_flow_nominal( + final min=0)=dat.mEva_flow_nominal + "Design CHW mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( + final min=0)=dat.mCon_flow_nominal + "Design CW mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( + final min=0)=nUni * mChiWatUni_flow_nominal + "Design CHW mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0)=nUni * mConWatUni_flow_nominal + "Design CW mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpEva_nominal(displayUnit="Pa") + "Design evaporator pressure drop (each unit)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpCon_nominal(displayUnit="Pa") + "Design condenser pressure drop (each unit)" + annotation(Dialog(group="Nominal condition")); + + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic dat + "Chiller parameters (each unit)" + annotation (Placement(transformation(extent={{-90,-120},{-70,-100}}))); + + // Assumptions + parameter Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true); + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "= true, if opening is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening")); + parameter Modelica.Units.SI.Time riseTime=120 + "Rise time of the filter (time to reach 99.6 % of an opening step)" + annotation (Dialog( + tab="Dynamics", + group="Filtered opening", + enable=use_inputFilter)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] + "Chiller On/Off command" + annotation (Placement(transformation(extent={{-140,100},{-100,140}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1Coo[nUni] + "Cooling switchover command: true for cooling, false for heating" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-20,-20},{20,20}}, rotation=0, origin={-120,0}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet[nUni]( + each final unit="K", each displayUnit="degC") + "Supply temperature setpoint" + annotation (Placement( + transformation(extent={{-140,-20},{-100,20}}), iconTransformation( + extent={{-140,-80},{-100,-40}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValConSwi[nUni]( + each final unit="1", + each final min=0, + each final max=1) "Chiller condenser switchover valve commanded position" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-40,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-60,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEvaSwi[nUni]( + each final unit="1", + each final min=0, + each final max=1) "Chiller evaporator switchover valve commanded position" + annotation (Placement(transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={0,-160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-60,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( + final unit="W") "Power drawn" + annotation (Placement(transformation(extent={{100,100},{140,140}}), + iconTransformation(extent={{100,-20},{140,20}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValCon[nUni]( + each final unit="1", each final min=0, each final max=1) + "Chiller condenser isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={0,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={-80,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEva[nUni]( + each final unit="1", each final min=0, each final max=1) + "Chiller evaporator isolation valve commanded position" + annotation ( + Placement(transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={-40,-160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-80,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEva_flow[nUni](each final + unit="kg/s") "Chiller evaporator barrel mass flow rate" annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={60,-160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={80,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TEvaLvg[nUni]( + each final unit="K", each displayUnit="degC") + "Chiller evaporator leaving temperature" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={40,-160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={60,-120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput mCon_flow[nUni]( + each final unit="kg/s") + "Chiller condenser barrel mass flow rate" annotation ( + Placement(transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={60,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={90,120}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConLvg[nUni]( + each final unit="K", each displayUnit="degC") + "Chiller condenser leaving temperature" annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={40,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={70,120}))); + + Fluid.Chillers.ElectricReformulatedEIR chi[nUni]( + PLR1(each start=0), + each final per=dat, + redeclare each final package Medium1 = Medium, + redeclare final package Medium2 = Medium, + each final have_switchover=true, + each final dp1_nominal=0, + each final dp2_nominal=0, + each final allowFlowReversal1=allowFlowReversal, + each final allowFlowReversal2=allowFlowReversal, + each final energyDynamics=energyDynamics, + each final show_T=show_T) "Chiller" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Fluid.Actuators.Valves.TwoWayLinear valCon[nUni]( + redeclare each final package Medium = Medium, + each linearized=true, + each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, + each final m_flow_nominal=mConWatUni_flow_nominal, + each dpValve_nominal=1E3, + each final dpFixed_nominal=dpCon_nominal, + each final allowFlowReversal=allowFlowReversal, + each final use_inputFilter=use_inputFilter, + each final riseTime=riseTime, + each final init=init, + each final y_start=y_start) "Condenser isolation valve" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=90, + origin={20,80}))); + Fluid.Actuators.Valves.TwoWayLinear valEva[nUni]( + redeclare each final package Medium = Medium, + each linearized=true, + each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, + each final m_flow_nominal=mChiWatUni_flow_nominal, + each dpValve_nominal=1E3, + each final dpFixed_nominal=dpEva_nominal, + each final allowFlowReversal=allowFlowReversal, + each final use_inputFilter=use_inputFilter, + each final riseTime=riseTime, + each final init=init, + each final y_start=y_start) "Evaporator isolation valve" + annotation (Placement(transformation(extent={{10,10},{-10,-10}}, + rotation=90, + origin={-20,-80}))); + Fluid.FixedResistances.Junction junConWatEvaOut[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mChiWatUni_flow_nominal*{1,-1,1}, + each final dp_nominal=fill(1E3, 3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-80,-60}))); + Fluid.FixedResistances.Junction junConWatEvaInl[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mChiWatUni_flow_nominal*{1,-1,-1}, + each final dp_nominal=fill(1E3, 3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={60,-6}))); + Fluid.Sensors.TemperatureTwoPort temEvaLvg[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mChiWatUni_flow_nominal, + each final allowFlowReversal=allowFlowReversal) + "Chiller evaporator leaving temperature" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={-20,-20}))); + Fluid.FixedResistances.Junction junHeaWatConInl[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mConWatUni_flow_nominal*{1,-1,-1}, + each final dp_nominal=fill(1E3, 3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-60,60}))); + Fluid.FixedResistances.Junction junHeaWatConOut[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mConWatUni_flow_nominal*{1,-1,1}, + each final dp_nominal=fill(1E3, 3), + each final energyDynamics=energyDynamics, + each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, + each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={80,60}))); + Fluid.Sensors.TemperatureTwoPort temConEnt[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mConWatUni_flow_nominal, + each final allowFlowReversal=allowFlowReversal) + "Chiller condenser entering temperature" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-20,20}))); + Fluid.Sensors.TemperatureTwoPort temConLvg[nUni]( + redeclare each final package Medium = Medium, + each final m_flow_nominal=mConWatUni_flow_nominal, + each final allowFlowReversal=allowFlowReversal) + "Chiller condenser leaving temperature" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={20,20}))); + Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum(nin=nUni) + "Sum up power of all units" + annotation (Placement(transformation(extent={{70,110},{90,130}}))); + Fluid.Sensors.MassFlowRate floEva[nUni]( + redeclare each final package Medium =Medium, + each final allowFlowReversal=allowFlowReversal) + "Chiller evaporator barrel mass flow rate" annotation (Placement( + transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={-20,-50}))); + Fluid.Sensors.MassFlowRate floCon[nUni]( + redeclare each final package Medium =Medium, + each final allowFlowReversal=allowFlowReversal) + "Chiller condenser barrel mass flow rate" annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={20,50}))); + Fluid.Actuators.Valves.TwoWayLinear valConSwi[nUni]( + redeclare each final package Medium = Medium, + each linearized=true, + each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, + each final m_flow_nominal=mConWatUni_flow_nominal, + each dpValve_nominal=1E3, + each final dpFixed_nominal=0, + each final allowFlowReversal=true, + each final use_inputFilter=use_inputFilter, + each final riseTime=riseTime, + each final init=init, + each final y_start=y_start) "Condenser switchover valve" annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={-60,20}))); + Fluid.Actuators.Valves.TwoWayLinear valEvaSwi[nUni]( + redeclare each final package Medium = Medium, + each linearized=true, + each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, + each final m_flow_nominal=mChiWatUni_flow_nominal, + each dpValve_nominal=1E3, + each final dpFixed_nominal=0, + each final allowFlowReversal=true, + each final use_inputFilter=use_inputFilter, + each final riseTime=riseTime, + each final init=init, + each final y_start=y_start) "Evaporator switchover valve" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={60,-40}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConEnt[nUni](each final + unit="K", each displayUnit="degC") + "Chiller condenser entering temperature" annotation (Placement( + transformation( + extent={{20,-20},{-20,20}}, + rotation=-90, + origin={20,160}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={50,120}))); +protected + parameter Medium.ThermodynamicState staCas=Medium.setState_pTX( + T=(TCasHeaEnt_nominal + TCasCooEnt_nominal) / 2, + p=Medium.p_default, + X=Medium.X_default) + "State of source medium in cascading mode (at mean source temperature)"; + parameter Modelica.Units.SI.SpecificHeatCapacity cpCas= + Medium.specificHeatCapacityCp(state=staCas) + "Heat capacity of source medium in cascading mode"; +initial equation + TCasHeaLvg_nominal = TCasHeaEnt_nominal + + QEvaCasHeaUni_flow_nominal / cpCas / mConWatUni_flow_nominal; + TCasCooLvg_nominal = TCasCooEnt_nominal + + QConCasCooUni_flow_nominal / cpCas / mConWatUni_flow_nominal; + QEvaCasHeaUni_flow_nominal = dat.QEva_flow_nominal * + Buildings.Utilities.Math.Functions.biquadratic( + a=dat.capFunT, + x1=Modelica.Units.Conversions.to_degC(TCasHeaLvg_nominal), + x2=Modelica.Units.Conversions.to_degC(THeaWatSup_nominal)); + QChiWatCasCooUni_flow_nominal = dat.QEva_flow_nominal * + Buildings.Utilities.Math.Functions.biquadratic( + a=dat.capFunT, + x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), + x2=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal)); + COPCasHea_nominal = dat.COP_nominal / + Buildings.Utilities.Math.Functions.biquadratic( + a=dat.EIRFunT, + x1=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal), + x2=Modelica.Units.Conversions.to_degC(THeaWatSup_nominal)); + COPCasCoo_nominal = dat.COP_nominal / + Buildings.Utilities.Math.Functions.biquadratic( + a=dat.EIRFunT, + x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), + x2=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal)); +equation + if nUni > 1 then + connect(junHeaWatConOut[1:nUni - 1].port_1, junHeaWatConOut[2:nUni].port_2) + annotation (Line(points={{80,50},{66,50},{66,70},{80,70}}, color={0,127,255})); + connect(valEvaSwi[1:nUni - 1].port_a, junConWatEvaInl[2:nUni].port_2) + annotation (Line(points={{60,-50},{40,-50},{40,4},{60,4}}, color={0,127,255})); + connect(valConSwi[1:nUni - 1].port_a, junHeaWatConInl[2:nUni].port_2) + annotation (Line(points={{-60,10},{-44,10},{-44,70},{-60,70}}, color={0,127, + 255})); + connect(junConWatEvaOut[1:nUni - 1].port_1, junConWatEvaOut[2:nUni].port_2) + annotation (Line(points={{-80,-70},{-60,-70},{-60,-50},{-80,-50}}, color={0, + 127,255})); + end if; + connect(port_a4, valEvaSwi[nUni].port_a) + annotation (Line(points={{100,-80},{60,-80},{60,-50}}, color={0,127,255})); + connect(yValConSwi, valConSwi.y) + annotation (Line(points={{-40,160},{-40,20},{-48,20}}, color={0,0,127})); + + connect(y1, chi.on) annotation (Line(points={{-120,120},{-16,120},{-16,3},{-12, + 3}}, color={255,0,255})); + connect(TSet, chi.TSet) annotation (Line(points={{-120,0},{-20,0},{-20,-3},{-12, + -3}}, color={0,0,127})); + connect(y1Coo, chi.coo) + annotation (Line(points={{-120,100},{-8,100},{-8,14}}, color={255,0,255})); + connect(yValCon, valCon.y) annotation (Line(points={{0,160},{0,80},{8,80}}, + color={0,0,127})); + connect(chi.port_b2, temEvaLvg.port_a) + annotation (Line(points={{-10,-6},{-20,-6},{-20,-10}}, color={0,127,255})); + connect(yValEva, valEva.y) annotation (Line(points={{-40,-160},{-40,-120},{-4, + -120},{-4,-80},{-8,-80}}, + color={0,0,127})); + connect(temConEnt.port_b, chi.port_a1) + annotation (Line(points={{-20,10},{-20,6},{-10,6}}, color={0,127,255})); + connect(chi.port_b1, temConLvg.port_a) + annotation (Line(points={{10,6},{20,6},{20,10}}, color={0,127,255})); + connect(valCon.port_b, junHeaWatConOut.port_3) + annotation (Line(points={{20,90},{20,100},{60,100},{60,60},{70,60}}, + color={0,127,255})); + connect(valEva.port_b,junConWatEvaOut. port_3) annotation (Line(points={{-20,-90}, + {-20,-100},{-40,-100},{-40,-60},{-70,-60}}, + color={0,127,255})); + connect(chi.P, mulSum.u) annotation (Line(points={{11,9},{64,9},{64,120},{68,120}}, + color={0,0,127})); + connect(temEvaLvg.port_b, floEva.port_a) + annotation (Line(points={{-20,-30},{-20,-40}}, color={0,127,255})); + connect(floEva.port_b, valEva.port_a) + annotation (Line(points={{-20,-60},{-20,-70}}, color={0,127,255})); + connect(mulSum.y, P) + annotation (Line(points={{92,120},{120,120}}, color={0,0,127})); + connect(floEva.m_flow, mEva_flow) + annotation (Line(points={{-9,-50},{2,-50},{2,-118},{60,-118},{60,-160}}, + color={0,0,127})); + connect(temEvaLvg.T, TEvaLvg) annotation (Line(points={{-9,-20},{-2,-20},{-2,-120}, + {40,-120},{40,-160}}, color={0,0,127})); + connect(temConLvg.port_b, floCon.port_a) + annotation (Line(points={{20,30},{20,40}}, color={0,127,255})); + connect(floCon.port_b, valCon.port_a) + annotation (Line(points={{20,60},{20,70}}, color={0,127,255})); + connect(temConLvg.T, TConLvg) + annotation (Line(points={{31,20},{40,20},{40,160}}, color={0,0,127})); + connect(floCon.m_flow, mCon_flow) annotation (Line(points={{31,50},{62,50},{ + 62,140},{60,140},{60,160}}, color={0,0,127})); + connect(junConWatEvaInl.port_3, chi.port_a2) annotation (Line(points={{50,-6}, + {10,-6}}, color={0,127,255})); + connect(yValEvaSwi, valEvaSwi.y) + annotation (Line(points={{0,-160},{0,-40},{48,-40}}, color={0,0,127})); + connect(junHeaWatConInl.port_3, temConEnt.port_a) + annotation (Line(points={{-50,60},{-20,60},{-20,30}}, color={0,127,255})); + + connect(port_a1, junHeaWatConInl[1].port_2) + annotation (Line(points={{-100,80},{-60,80},{-60,70}}, color={0,127,255})); + connect(valConSwi.port_b, junHeaWatConInl.port_1) + annotation (Line(points={{-60,30},{-60,50}}, color={0,127,255})); + connect(junHeaWatConOut[1].port_2, port_b1) + annotation (Line(points={{80,70},{80,80},{100,80}}, color={0,127,255})); + connect(valEvaSwi.port_b, junConWatEvaInl.port_1) + annotation (Line(points={{60,-30},{60,-16}}, color={0,127,255})); + connect(port_a2, junConWatEvaInl[1].port_2) + annotation (Line(points={{100,30},{60,30},{60,4}}, color={0,127,255})); + connect(junHeaWatConOut[nUni].port_1, port_b3) + annotation (Line(points={{80,50},{80,-30},{100,-30}}, color={0,127,255})); + connect(junConWatEvaOut[1].port_2, port_b2) annotation (Line(points={{-80,-50}, + {-80,30},{-100,30}}, color={0,127,255})); + connect(junConWatEvaOut[nUni].port_1, port_b4) annotation (Line(points={{-80,-70}, + {-80,-80},{-100,-80}}, color={0,127,255})); + connect(valConSwi[nUni].port_a, port_a3) annotation (Line(points={{-60,10},{ + -60,-32},{-100,-32}}, + color={0,127,255})); + + connect(temConEnt.T, TConEnt) annotation (Line(points={{-31,20},{-32,20},{-32, + 130},{20,130},{20,160}}, color={0,0,127})); + annotation ( + defaultComponentName="chi", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,80},{70,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,52},{-40,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,70},{58,52}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,12},{-32,12},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,-10},{-32,-10},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,-10},{-40,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{38,52},{42,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,-50},{58,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{18,24},{62,-18}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,24},{22,-8},{58,-8},{40,24}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,52},{-40,12}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,70},{58,52}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,12},{-32,12},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,2},{-52,-10},{-32,-10},{-42,2}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,-10},{-40,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{38,52},{42,-50}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,-50},{58,-68}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{18,24},{62,-18}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{40,24},{22,-8},{58,-8},{40,24}}, + lineColor={0,0,0}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-140},{100,140}})), + Documentation(info=" +

    +This model represents a set of identical heat recovery chillers +that are piped in parallel. +Modulating isolation valves and modulating switchover valves are included +on condenser and evaporator side. +The switchover valves allow indexing the condenser (resp. the evaporator) +either to the CWC loop or to the HW loop (resp. to the CWE loop or to +the CHW loop). Modulating valves are used to allow for sequences of +operation that bleed CWE into the HW return flow to modulate the +condenser entering temperature. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +On/Off command y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Cooling switchover command y1Coo: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Supply temperature setpoint TSet: +AO signal dedicated to each unit, with a dimensionality of one
      +The signal corresponds either to the HW supply temperature setpoint when +the unit operates in heating mode, or to the CHW supply temperature setpoint when +the unit operates in cooling mode. +
    • +
    • +Condenser and evaporator isolation valve commanded position yVal(Con|Eva): +AO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser and evaporator switchover valve commanded position yVal(Con|Eva)Swi: +AO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser and evaporator leaving temperature T(Con|Eva)Lvg: +AI signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser entering temperature TConEnt: +AI signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Condenser and evaporator mass flow rate m(Con|Eva)_flow: +AI signal dedicated to each unit, with a dimensionality of one +
    • +
    +

    +Details +

    +
    +HRC performance data +
    +

    +The performance data should cover the HRC lift envelope, +that is when the HRC is operating in direct heat recovery mode, +producing CHW and HW at their setpoint value at full load. +In this case, and to allow for cascading heat recovery where +a third fluid circuit is used to generate a cascade of thermodynamic cycles, +two additional parameters TCasEntCoo_nominal and +TCasEntHea_nominal are exposed to specify the +entering temperature of the third fluid circuit when +the HRC is operating in cooling mode and in heating mode, +respectively. +In cooling mode the third fluid circuit is connected to the +condenser barrel. +In heating mode, the third fluid circuit is connected to the +evaporator barrel. +The parameters TCasEnt*_nominal are then used to assess the +design capacity in heating and cooling mode, respectively. +

    +
    +Actuators +
    +

    +By default, linear valve models are used. Those are configured with +a pressure drop varying linearly with the flow rate, as opposed +to the quadratic dependency usually considered for a turbulent flow +regime. +This is because the whole plant model contains large nonlinear systems +of equations and this configuration limits the risk of solver failure +while reducing the time to solution. +This has no significant impact on the operating point of the circulation pumps +when a control loop is used to modulate the valve opening and maintain +the flow rate or the leaving temperature at setpoint. +Then, whatever the modeling assumptions for the valve, the +control loop ensures that the valve creates the adequate pressure drop +and flow, which will simply be reached at a different valve opening +with the above simplification. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ChillerHeatRecoveryGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo new file mode 100644 index 00000000000..7762d4f196c --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo @@ -0,0 +1,262 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model CoolingTowerGroup "Model of multiple identical cooling towers in parallel" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal(final min=Modelica.Constants.small)=mConWat_flow_nominal); + + parameter Integer nUni(final min=1, start=1) + "Number of units operating at design conditions" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( + final min=0) + "CW design mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( + final min=0)=nUni * mConWatUni_flow_nominal + "CW design mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpConWatFriUni_nominal( + displayUnit="Pa") + "CW flow-friction losses through tower and piping only (without elevation head or valve)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mAirUni_flow_nominal( + final min=0, + start=mConWatUni_flow_nominal / 1.45) + "Air mass flow rate (each unit)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TWetBulEnt_nominal( + final min=273.15) + "Entering air wetbulb temperature" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConWatRet_nominal( + final min=273.15) + "CW return temperature (tower entering)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TConWatSup_nominal( + final min=273.15) + "CW supply temperature (tower leaving)" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Power PFanUni_nominal( + final min=0, + start=340 * mConWatUni_flow_nominal) + "Fan power (each unit)" + annotation (Dialog(group="Nominal condition")); + parameter Real yFan_min(unit="1")=0.1 + "CT fan minimum speed"; + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Modelica.Units.SI.Time tau=30 + "Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic" + annotation (Dialog( + tab="Dynamics", + group="Nominal condition", + enable=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] + "Cooling tower Start command" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput y( + final unit="1", final min=0) + "Cooling tower speed (common to all tower cells)" + annotation (Placement( + transformation(extent={{-140,40},{-100,80}}), iconTransformation( + extent={{-140,-80},{-100,-40}}))); + BoundaryConditions.WeatherData.Bus weaBus + "Bus with weather data" + annotation (Placement(transformation(extent={{90,-50},{110,-30}}), + iconTransformation(extent={{-20,80},{20,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput P(final unit="W") + "Power drawn by tower fans" + annotation (Placement(transformation(extent={{100,60},{140,100}}), + iconTransformation(extent={{100,60},{140,100}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatSup( + final unit="K", displayUnit="degC") + "CW supply temperature (tower leaving)" + annotation (Placement( + transformation(extent={{100,20},{140,60}}), iconTransformation(extent={{100,20}, + {140,60}}))); + + Fluid.BaseClasses.MassFlowRateMultiplier mulInl( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal, + final use_input=false, + final k=1/nUni) "Flow rate multiplier" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulOut( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal, + final use_input=false, + final k=nUni) "Flow rate multiplier" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + BaseClasses.MultipleCommands com(final nUni=nUni) + "Convert command signals" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + annotation (Placement(transformation(extent={{60,90},{80,70}}))); + + Fluid.HeatExchangers.CoolingTowers.Merkel coo( + redeclare final package Medium = Medium, + final m_flow_nominal=mConWatUni_flow_nominal, + final dp_nominal=dpConWatFriUni_nominal, + final yMin=yFan_min, + final ratWatAir_nominal=mConWatUni_flow_nominal/mAirUni_flow_nominal, + final TAirInWB_nominal=TWetBulEnt_nominal, + final TWatIn_nominal=TConWatRet_nominal, + final TWatOut_nominal=TConWatSup_nominal, + final PFan_nominal=PFanUni_nominal, + final tau=tau, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T, + final energyDynamics=energyDynamics) + "Cooling tower" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre preY1[nUni] + "Left limit of signal avoiding direct feedback of status to controller" + annotation (Placement(transformation(extent={{-90,90},{-70,110}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea + "Convert to real" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-14,80}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply inp + "Compute pump input signal" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-20,30}))); +equation + connect(com.nUniOn, mulP.u2) annotation (Line(points={{-38,100},{40,100},{40, + 86},{58,86}}, color={0,0,127})); + + connect(mulP.y, P) + annotation (Line(points={{82,80},{120,80}}, color={0,0,127})); + connect(mulOut.port_b, port_b) + annotation (Line(points={{80,0},{100,0}}, color={0,127,255})); + connect(mulInl.port_b, coo.port_a) + annotation (Line(points={{-60,0},{-10,0}}, + color={0,127,255})); + connect(coo.port_b, mulOut.port_a) + annotation (Line(points={{10,0},{60,0}}, color={0,127,255})); + connect(weaBus.TWetBul, coo.TAir) annotation (Line( + points={{100,-40},{-20,-40},{-20,4},{-12,4}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(coo.PFan, mulP.u1) + annotation (Line(points={{11,8},{40,8},{40,74},{58,74}}, color={0,0,127})); + connect(coo.TLvg, TConWatSup) annotation (Line(points={{11,-6},{50,-6},{50,40}, + {120,40}}, color={0,0,127})); + connect(y1, preY1.u) + annotation (Line(points={{-120,100},{-92,100}}, + color={255,0,255})); + connect(preY1.y, com.y1) + annotation (Line(points={{-68,100},{-62,100}}, + color={255,0,255})); + connect(com.y1One, booToRea.u) annotation (Line(points={{-38,106},{-14,106},{ + -14,92}}, color={255,0,255})); + connect(inp.y, coo.y) + annotation (Line(points={{-20,18},{-20,8},{-12,8}}, color={0,0,127})); + connect(y, inp.u1) + annotation (Line(points={{-120,60},{-26,60},{-26,42}}, color={0,0,127})); + connect(booToRea.y, inp.u2) + annotation (Line(points={{-14,68},{-14,42}}, color={0,0,127})); + connect(port_a, mulInl.port_a) + annotation (Line(points={{-100,0},{-80,0}}, color={0,127,255})); + annotation ( + defaultComponentName="coo", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,80},{70,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Text( + extent={{190,-12},{70,-62}}, + textColor={0,0,0}, + textString=DynamicSelect("", String(TLvg-273.15, format=".1f"))), + Ellipse( + extent={{-54,56},{0,44}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{0,56},{54,44}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{0,56},{54,44}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-54,56},{0,44}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}})), + Documentation(info=" +

    +This model represents a set of identical cooling towers +that are piped in parallel. +No actuated isolation valves are included. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +Start command (VFD Run) y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Speed command y: +AO signal common to all units, with a dimensionality of zero +
    • +
    • +CW supply temperature TConWatSup: +AI signal common to all units, with a dimensionality of zero +
    • +
    +

    Details

    +
    Modeling approach
    +

    +In a parallel arrangement, all operating units have the same operating point. +This allows modeling the heat transfer from outdoor air to condenser water +with a single instance of + +Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel. +Hydronics are resolved with mass flow rate multiplier components. +Note that the elevation head of open-circuit cooling towers is not modeled, +which is an inherent limitation of the cooling tower component model. +

    +

    +The fan cycling On and Off is implicitly modeled +in the cooling tower component which uses a low limit of the control signal +to switch to a free convection regime at zero fan power. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end CoolingTowerGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo new file mode 100644 index 00000000000..d5ddeb5a49e --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo @@ -0,0 +1,371 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model HeatPumpGroup + "Model of multiple identical air-source heat pumps in parallel" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal(final min=Modelica.Constants.small)=mHeaWat_flow_nominal); + + replaceable package MediumAir=Buildings.Media.Air + "Air medium"; + + parameter Integer nUni(final min=1, start=1) + "Number of units operating at design conditions" + annotation(Evaluate=true); + final parameter Modelica.Units.SI.HeatFlowRate capUni_nominal( + final min=0)=dat.hea.Q_flow + "Heat pump design capacity (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mHeaWatUni_flow_nominal( + final min=0)=dat.hea.mLoa_flow + "HW design mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mAirUni_flow_nominal( + final min=0)=dat.hea.mSou_flow + "Air design mass flow rate (each unit)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal( + final min=0)=nUni * mHeaWatUni_flow_nominal + "HW design mass flow rate (all units)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpPumHeaWatUni_nominal( + final min=0, + displayUnit="Pa")=dat.dpHeaLoa_nominal + "HW pump design head (each unit)" + annotation(Dialog(group="Nominal condition")); + + replaceable parameter Buildings.Fluid.HeatPumps.Data.EquationFitReversible.Generic dat + "Heat pump parameters (each unit)" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + replaceable parameter Fluid.Movers.Data.Generic datPum + constrainedby Fluid.Movers.Data.Generic( + pressure(V_flow={0,1,2}*mHeaWatUni_flow_nominal/rho_nominal, + dp={1.14,1,0.42}*dpPumHeaWatUni_nominal), + motorCooledByFluid=false) + "Condenser pump parameters (each unit)" + annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Modelica.Units.SI.Time tau=30 + "Time constant of fluid volume for nominal HW flow, used if energy or mass balance is dynamic" + annotation (Dialog( + tab="Dynamics", + group="Nominal condition", + enable=energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState)); + + // Pump speed filter parameters + parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "= true, if signal is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered pump speed")); + parameter Modelica.Units.SI.Time riseTime=30 + "Rise time of the filter (time to reach 99.6 % of the speed)" + annotation (Dialog( + tab="Dynamics", + group="Filtered pump speed", + enable=use_inputFilter)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered pump speed",enable=use_inputFilter)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered pump speed",enable=use_inputFilter)); + + Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] + "Heat pump On/Off command" + annotation (Placement(transformation(extent={{-140,80},{-100,120}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet( + final unit="K", displayUnit="degC") + "Supply temperature setpoint" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + BoundaryConditions.WeatherData.Bus weaBus + "Bus with weather data" + annotation (Placement(transformation(extent={{90,-50},{110,-30}}), + iconTransformation(extent={{-20,80},{20,120}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput PPum( + final unit="W") + "Power drawn by HW pumps" + annotation (Placement(transformation(extent={{100,40},{140,80}}), + iconTransformation(extent={{100,20},{140,60}}))); + Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( + final unit="W") + "Power drawn by heat pumps" + annotation (Placement(transformation(extent={{100,80},{140,120}}), + iconTransformation(extent={{100,60},{140,100}}))); + + Fluid.BaseClasses.MassFlowRateMultiplier mulConInl( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Fluid.BaseClasses.MassFlowRateMultiplier mulConOut( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal, + final use_input=true) + "Flow rate multiplier" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + BaseClasses.MultipleCommands com(final nUni=nUni) + "Convert command signals" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + annotation (Placement(transformation(extent={{70,110},{90,90}}))); + Fluid.HeatPumps.EquationFitReversible heaPum( + redeclare final package Medium1=Medium, + redeclare final package Medium2=MediumAir, + final per=dat, + final tau1=tau, + final show_T=show_T, + final energyDynamics=energyDynamics, + final allowFlowReversal1=allowFlowReversal, + final allowFlowReversal2=false) + "Heat pump" + annotation (Placement(transformation(extent={{-10,-16},{10,4}}))); + Fluid.Movers.SpeedControlled_y pum( + redeclare final package Medium = Medium, + inputType=Buildings.Fluid.Types.InputType.Continuous, + final tau=tau, + final show_T=show_T, + final allowFlowReversal=allowFlowReversal, + final energyDynamics=energyDynamics, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final per=datPum, + addPowerToMedium=false) "HW pump" + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); + Fluid.Sources.MassFlowSource_WeatherData airSou( + redeclare final package Medium=MediumAir, + final use_m_flow_in=true, + final nPorts=1) + "Air flow source" + annotation (Placement(transformation(extent={{42,-50},{22,-30}}))); + Fluid.Sources.Boundary_pT airSin( + redeclare final package Medium=MediumAir, + final nPorts=1) + "Air flow sink" + annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); + Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter comFan( + final k=mAirUni_flow_nominal) + "Convert On/Off command to air flow setpoint" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90, + origin={46,30}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply mulP1 "Scale power" + annotation (Placement(transformation(extent={{70,70},{90,50}}))); + + Buildings.Controls.OBC.CDL.Logical.Pre preY1[nUni] + "Left limit of signal avoiding direct feedback of status to controller" + annotation (Placement(transformation(extent={{-90,90},{-70,110}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea + "Convert to real" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,80}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply inp + "Compute pump input signal" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-40,30}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cst(final k=1) + "Constant" + annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); + Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert to integer" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-14,30}))); +protected + parameter Medium.ThermodynamicState sta_nominal=Medium.setState_pTX( + T=dat.hea.TRefLoa, + p=3E5, + X=Medium.X_default) + "State of the medium at the medium default properties"; + parameter Modelica.Units.SI.Density rho_nominal=Medium.density(sta_nominal) + "Density at the medium default properties"; +equation + connect(mulConOut.uInv, mulConInl.u) annotation (Line(points={{81,6},{86,6},{86, + -20},{-86,-20},{-86,6},{-82,6}}, color={0,0,127})); + connect(com.nUniOn, mulP.u2) annotation (Line(points={{-38,100},{60,100},{60, + 106},{68,106}}, color={0,0,127})); + + connect(mulP.y, P) + annotation (Line(points={{92,100},{120,100}}, + color={0,0,127})); + connect(com.nUniOnBou, mulConOut.u) annotation (Line(points={{-38,94},{16,94}, + {16,6},{58,6}}, color={0,0,127})); + connect(pum.port_b, heaPum.port_a1) + annotation (Line(points={{-30,0},{-10,0}}, color={0,127,255})); + connect(heaPum.port_b1, mulConOut.port_a) annotation (Line(points={{10,0},{60, + 0}}, color={0,127,255})); + connect(mulConInl.port_b, pum.port_a) annotation (Line(points={{-60,0},{-50,0}}, + color={0,127,255})); + connect(mulConOut.port_b, port_b) + annotation (Line(points={{80,0},{100,0}}, color={0,127,255})); + connect(heaPum.P, mulP.u1) annotation (Line(points={{11,-6.2},{18,-6.2},{18, + 94},{68,94}}, + color={0,0,127})); + connect(port_a, mulConInl.port_a) + annotation (Line(points={{-100,0},{-80,0}}, color={0,127,255})); + connect(airSou.ports[1], heaPum.port_a2) annotation (Line(points={{22,-40},{ + 16,-40},{16,-12},{10,-12}}, + color={0,127,255})); + connect(airSin.ports[1], heaPum.port_b2) annotation (Line(points={{-30,-40},{-20, + -40},{-20,-12},{-10,-12}}, color={0,127,255})); + connect(TSet, heaPum.TSet) annotation (Line(points={{-120,-60},{-16,-60},{-16, + 3},{-11.4,3}}, color={0,0,127})); + connect(comFan.y, airSou.m_flow_in) annotation (Line(points={{46,18},{46,-32}, + {42,-32}}, color={0,0,127})); + connect(weaBus, airSou.weaBus) annotation (Line( + points={{100,-40},{42,-40},{42,-39.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(mulP1.y, PPum) + annotation (Line(points={{92,60},{120,60}}, color={0,0,127})); + connect(pum.P, mulP1.u1) annotation (Line(points={{-29,9},{60,9},{60,54},{68, + 54}}, color={0,0,127})); + connect(com.nUniOn, mulP1.u2) annotation (Line(points={{-38,100},{60,100},{60, + 66},{68,66}}, + color={0,0,127})); + connect(y1, preY1.u) + annotation (Line(points={{-120,100},{-92,100}}, color={255,0,255})); + connect(preY1.y, com.y1) + annotation (Line(points={{-68,100},{-62,100}}, color={255,0,255})); + connect(com.y1One, booToRea.u) annotation (Line(points={{-38,106},{-20,106},{ + -20,92}}, color={255,0,255})); + connect(inp.y, pum.y) + annotation (Line(points={{-40,18},{-40,12}}, color={0,0,127})); + connect(booToRea.y, comFan.u) + annotation (Line(points={{-20,68},{-20,60},{46,60},{46,42}}, + color={0,0,127})); + connect(booToRea.y, inp.u2) annotation (Line(points={{-20,68},{-20,60},{-34, + 60},{-34,42}}, color={0,0,127})); + connect(cst.y, inp.u1) + annotation (Line(points={{-68,60},{-46,60},{-46,42}}, color={0,0,127})); + connect(booToRea.y, reaToInt.u) annotation (Line(points={{-20,68},{-20,60},{ + -14,60},{-14,42}}, color={0,0,127})); + connect(reaToInt.y, heaPum.uMod) + annotation (Line(points={{-14,18},{-14,-6},{-11,-6}}, color={255,127,0})); + annotation ( + defaultComponentName="heaPum", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-70,80},{70,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Rectangle( + extent={{-56,68},{58,50}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-56,-52},{58,-70}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-42,0},{-52,-12},{-32,-12},{-42,0}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{-42,0},{-52,10},{-32,10},{-42,0}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Rectangle( + extent={{-44,50},{-40,10}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-44,-12},{-40,-52}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{38,50},{42,-52}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{18,22},{62,-20}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Polygon( + points={{40,22},{22,-10},{58,-10},{40,22}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}})), + Documentation(info=" +

    +This model represents a set of identical air-to-water heat pumps +that are piped in parallel. +Dedicated constant-speed condenser pumps are included. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +On/Off command y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +Supply temperature setpoint TSet: +AO signal common to all units, with a dimensionality of zero +
    • +
    • +CW supply temperature TConWatSup: +AI signal common to all units, with a dimensionality of zero +
    • +
    +

    Details

    +
    Modeling approach
    +

    +In a parallel arrangement, all operating units have the same operating point. +This allows modeling the heat transfer from outdoor air to condenser water +with a single instance of + +Buildings.Fluid.HeatPumps.EquationFitReversible. +Hydronics are resolved with mass flow rate multiplier components. +

    +The model + +Buildings.Fluid.HeatPumps.EquationFitReversible +does not capture the sensitivity of the heat pump performance +to the HW supply temperature setpoint. +This means that a varying HW supply temperature setpoint +has no impact on the heat pump COP (all other variables +such as the HW return temperature being kept invariant). +This is a limitation of the model. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end HeatPumpGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsDp.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsDp.mo new file mode 100644 index 00000000000..75929a79f30 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsDp.mo @@ -0,0 +1,69 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model MultiplePumpsDp + "Model of multiple identical pumps in parallel with dp-controlled pump model" + extends BaseClasses.PartialMultiplePumps( + final have_var=have_varSet, + redeclare final Buildings.Fluid.Movers.FlowControlled_dp pum( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal), + cst(final k=dpPum_nominal)); + + parameter Boolean have_varSet = true + "Set to true for variable setpoint, false for constant setpoint (design value)" + annotation(Evaluate=true); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput dp_in( + final unit="Pa", + final min=0) + if have_var + "Differential pressure setpoint" + annotation ( + Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); +equation + connect(dp_in, inp.u1) annotation (Line(points={{-120,60},{-6,60},{-6,52}}, + color={0,0,127})); + connect(inp.y, pum.dp_in) + annotation (Line(points={{-8.88178e-16,28},{0,28},{0,12}}, + color={0,0,127})); + annotation ( + defaultComponentName="pum", Documentation(info=" +

    +This model represents a set of identical dp-controlled +variable speed pumps that are piped in parallel. +An optional check valve in series with each pump is included. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +Start command (VFD Run) y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +(Optionally if have_varSet is true) Differential pressure setpoint dp_in: +AO signal common to all units, with a dimensionality of zero +
    • +
    • +Pump status y1_actual: +DI signal dedicated to each unit, with a dimensionality of one +
    • +
    +

    Details

    +

    +See the base class + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. +for a description of the modeling approach. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsDp; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo new file mode 100644 index 00000000000..d85f8851647 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo @@ -0,0 +1,77 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model MultiplePumpsFlow + "Model of multiple identical pumps in parallel with flow-controlled pump model" + extends BaseClasses.PartialMultiplePumps( + final have_var=have_varSet, + redeclare final Buildings.Fluid.Movers.FlowControlled_m_flow pum( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal), + cst(final k=mPum_flow_nominal)); + + parameter Boolean have_varSet = true + "Set to true for variable setpoint, false for constant setpoint (design value)" + annotation(Evaluate=true); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput m_flow_in( + final unit="kg/s", + final min=0) + if have_var + "Mass flow rate setpoint (total over all pumps)" + annotation ( + Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + Buildings.Controls.OBC.CDL.Continuous.Divide div1 + "Divide total flow setpoint by number of pumps commanded On" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); +equation + connect(m_flow_in, div1.u1) annotation (Line(points={{-120,60},{-90,60},{-90,66}, + {-82,66}}, color={0,0,127})); + connect(com.nUniOnBou, div1.u2) annotation (Line(points={{-28,94},{-20,94},{ + -20,80},{-86,80},{-86,54},{-82,54}}, color={0,0,127})); + connect(div1.y, inp.u1) annotation (Line(points={{-58,60},{-6,60},{-6,52}}, + color={0,0,127})); + connect(inp.y, pum.m_flow_in) + annotation (Line(points={{-8.88178e-16,28},{0,28},{0,12}}, + color={0,0,127})); + annotation ( + defaultComponentName="pum", Documentation(info=" +

    +This model represents a set of identical flow-controlled +variable speed pumps that are piped in parallel. +An optional check valve in series with each pump is included. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +Start command (VFD Run) y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +(Optionally if have_varSet is true) Mass flow rate setpoint m_flow_in: +AO signal with a dimensionality of zero
      +The setpoint corresponds to the total flow rate of all units. +
    • +
    • +Pump status y1_actual: +DI signal dedicated to each unit, with a dimensionality of one +
    • +
    +

    Details

    +

    +See the base class + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. +for a description of the modeling approach. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsFlow; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsSpeed.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsSpeed.mo new file mode 100644 index 00000000000..92d29a0b140 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsSpeed.mo @@ -0,0 +1,67 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +model MultiplePumpsSpeed + "Model of multiple identical pumps in parallel with speed-controlled pump model" + extends + Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps( + redeclare final Buildings.Fluid.Movers.SpeedControlled_y pum, + cst(final k=1)); + + Buildings.Controls.OBC.CDL.Interfaces.RealInput y( + final unit="1", + final min=0, + final max=1) + if have_var + "Pump speed (common to all pumps)" + annotation ( + Placement(transformation(extent={{-140,40},{-100,80}}), iconTransformation( + extent={{-140,20},{-100,60}}))); + +equation + connect(y, inp.u1) annotation (Line(points={{-120,60},{-6,60},{-6,52}}, + color={0,0,127})); + connect(inp.y, pum.y) + annotation (Line(points={{-8.88178e-16,28},{0,28},{0,12}}, + color={0,0,127})); + annotation ( + defaultComponentName="pum", Documentation(info=" +

    +This model represents a set of identical speed-controlled +pumps that are piped in parallel. +The model may be configured to represent either constant speed +pumps or variable speed pumps. +An optional check valve in series with each pump is included. +

    +

    Control points

    +

    +The following input and output points are available. +

    +
      +
    • +Start command (VFD Run for variable speed pumps or Starter contact for constant speed pumps) y1: +DO signal dedicated to each unit, with a dimensionality of one +
    • +
    • +(Optionally if have_var is true) Speed command y: +AO signal common to all units, with a dimensionality of zero +
    • +
    • +Pump status y1_actual: +DI signal dedicated to each unit, with a dimensionality of one +
    • +
    +

    Details

    +

    +See the base class + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. +for a description of the modeling approach. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsSpeed; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo new file mode 100644 index 00000000000..b240b946dd4 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo @@ -0,0 +1,204 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.BaseClasses; +partial model PartialMultiplePumps + "Base class for validating the multiple pumps model" + extends Modelica.Icons.Example; + + package Medium = Buildings.Media.Water + "Medium model for hot water"; + + parameter Integer nPum( + final min=1)=2 + "Number of pumps" + annotation(Evaluate=true); + parameter Modelica.Units.SI.MassFlowRate mPum_flow_nominal=1 + "Pump mass flow rate (each pump)" + annotation(Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpPum_nominal = 1E5 + "Pump head (each pump)" + annotation(Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= + nPum * mPum_flow_nominal + "Circuit mass flow rate at design conditions"; + parameter Modelica.Units.SI.Pressure p_min = 2E5 + "Circuit minimum pressure"; + parameter Modelica.Units.SI.PressureDifference dp_nominal = dpPum_nominal + "Circuit total pressure drop at design conditions"; + + Fluid.Sources.Boundary_pT bou( + redeclare final package Medium = Medium, + final p=p_min, + nPorts=2) + "Pressure boundary condition" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + replaceable Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pum + constrainedby + Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps( + redeclare final package Medium = Medium, + final nPum=nPum, + final mPum_flow_nominal=mPum_flow_nominal, + final dpPum_nominal=dpPum_nominal, + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Multiple pumps in parallel - Speed controlled" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + + Fluid.Sensors.RelativePressure senRelPre(redeclare package Medium = Medium) + "Differential pressure sensor" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={40,60}))); + Fluid.Sensors.MassFlowRate senMasFlo(redeclare package Medium = Medium) + "Mass flow rate sensor" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={20,30}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ope( + height=0.8, + duration=300, + offset=0.2, + startTime=200) + "Valve opening signal" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Fluid.Actuators.Valves.TwoWayEqualPercentage val( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dpValve_nominal=5000, + dpFixed_nominal=dp_nominal - val.dpValve_nominal) + "Modulating valve" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Pum( + table=[0,0,0; 1,0,0; 1,1,0; 4,1,1; 4,1,1; 10,1,1], + timeScale=100, + period=1000) "Pump Start signal" + annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); + replaceable Fluid.Movers.SpeedControlled_y pum1 + constrainedby Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine( + redeclare final package Medium = Medium, + final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + final per=pum.per, + addPowerToMedium=false) + "Pump" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); + Fluid.FixedResistances.CheckValve cheVal1( + redeclare final package Medium = Medium, + final m_flow_nominal=mPum_flow_nominal, + final dpValve_nominal=pum.dpValve_nominal) + "Check valve" + annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); + replaceable Fluid.Movers.SpeedControlled_y pum2 + constrainedby Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + use_inputFilter=false, + final per=pum.per, + addPowerToMedium=false) + "Pump" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Fluid.FixedResistances.CheckValve cheVal2( + redeclare final package Medium = Medium, + final m_flow_nominal=mPum_flow_nominal, + final dpValve_nominal=pum.dpValve_nominal) + "Check valve" + annotation (Placement(transformation(extent={{30,-90},{50,-70}}))); + Fluid.Actuators.Valves.TwoWayEqualPercentage val1( + redeclare package Medium = Medium, + m_flow_nominal=m_flow_nominal, + dpValve_nominal=5000, + dpFixed_nominal=dp_nominal - val.dpValve_nominal) + "Modulating valve" + annotation (Placement(transformation(extent={{10,-130},{-10,-110}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2] + "Convert to real" + annotation (Placement(transformation(extent={{80,110},{100,130}}))); + Fluid.Sensors.RelativePressure senRelPre1(redeclare package Medium = Medium) + "Differential pressure sensor" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={90,-80}))); + Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = Medium) + "Mass flow rate sensor" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={60,-100}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply inp1 + "Compute pump input signal" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={120,2}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply inp2 + "Compute pump input signal" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={120,-42}))); +equation + connect(bou.ports[1], pum.port_a) + annotation (Line(points={{-60,59},{-60,60},{-10,60}}, color={0,127,255})); + connect(val.port_b, pum.port_a) annotation (Line(points={{-10,0},{-20,0},{-20, + 60},{-10,60}}, color={0,127,255})); + connect(pum.port_b, senRelPre.port_a) + annotation (Line(points={{10,60},{30,60}}, color={0,127,255})); + connect(ope.y, val.y) annotation (Line(points={{-98,0},{-40,0},{-40,20},{0,20}, + {0,12}}, color={0,0,127})); + connect(y1Pum.y, pum.y1) annotation (Line(points={{-98,120},{-14,120},{-14,68}, + {-12,68}}, color={255,0,255})); + connect(pum.port_b, senMasFlo.port_a) + annotation (Line(points={{10,60},{20,60},{20,40}}, color={0,127,255})); + connect(senMasFlo.port_b, val.port_a) + annotation (Line(points={{20,20},{20,0},{10,0}}, color={0,127,255})); + connect(senRelPre.port_b, pum.port_a) annotation (Line(points={{50,60},{60,60}, + {60,74},{-10,74},{-10,60}}, color={0,127,255})); + connect(pum1.port_b, cheVal1.port_a) + annotation (Line(points={{10,-40},{30,-40}}, color={0,127,255})); + connect(pum2.port_b, cheVal2.port_a) + annotation (Line(points={{10,-80},{30,-80}}, color={0,127,255})); + connect(val1.port_b, pum2.port_a) annotation (Line(points={{-10,-120},{-40,-120}, + {-40,-80},{-10,-80}}, color={0,127,255})); + connect(val1.port_b, pum1.port_a) annotation (Line(points={{-10,-120},{-40,-120}, + {-40,-40},{-10,-40}}, color={0,127,255})); + connect(val1.port_b, bou.ports[2]) annotation (Line(points={{-10,-120},{-60,-120}, + {-60,61}}, color={0,127,255})); + connect(y1Pum.y, booToRea.u) + annotation (Line(points={{-98,120},{78,120}}, color={255,0,255})); + connect(cheVal2.port_b, senMasFlo1.port_a) + annotation (Line(points={{50,-80},{60,-80},{60,-90}}, color={0,127,255})); + connect(senMasFlo1.port_b, val1.port_a) annotation (Line(points={{60,-110},{60, + -120},{10,-120}}, color={0,127,255})); + connect(cheVal1.port_b, senMasFlo1.port_a) + annotation (Line(points={{50,-40},{60,-40},{60,-90}}, color={0,127,255})); + connect(senRelPre1.port_a, senMasFlo1.port_a) + annotation (Line(points={{80,-80},{60,-80},{60,-90}}, color={0,127,255})); + connect(senRelPre1.port_b, pum2.port_a) annotation (Line(points={{100,-80},{120, + -80},{120,-130},{-40,-130},{-40,-80},{-10,-80}}, color={0,127,255})); + connect(booToRea[1].y, inp1.u2) + annotation (Line(points={{102,120},{126,120},{126,14}}, color={0,0,127})); + connect(ope.y, val1.y) annotation (Line(points={{-98,0},{-80,0},{-80,-100},{0, + -100},{0,-108}}, color={0,0,127})); + connect(booToRea[2].y, inp2.u2) annotation (Line(points={{102,120},{134,120},{ + 134,-20},{126,-20},{126,-30}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

    +This base class is used to construct validation models +for the various multiple-pump models within + +Buildings.Experimental.DHC.Plants.Combined.Subsystems. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end PartialMultiplePumps; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.mo new file mode 100644 index 00000000000..e2584e38473 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +package BaseClasses "Package with base classes" + extends Modelica.Icons.BasesPackage; + + annotation (Documentation(info=" +

    +This package contains base classes that are used +for validation purposes. +

    +")); +end BaseClasses; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.order b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.order new file mode 100644 index 00000000000..57edab9c9ac --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/package.order @@ -0,0 +1 @@ +PartialMultiplePumps diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo new file mode 100644 index 00000000000..70d15d82f5a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo @@ -0,0 +1,125 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model ChillerGroup "Validation of chiller group model" + extends Modelica.Icons.Example; + + replaceable package MediumChiWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + replaceable package MediumConWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium"; + + parameter + Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_1403kW_7_09COP_VSD + dat "Chiller parameters" + annotation (Placement(transformation(extent={{90,92},{110,112}}))); + + Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup chi( + redeclare final package Medium1 = MediumConWat, + redeclare final package Medium2 = MediumChiWat, + show_T=true, + nUni=2, + dpEva_nominal=3E5, + dpCon_nominal=3E5, + final dat=dat, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Chiller group" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Fluid.Sources.Boundary_pT retChiWat( + redeclare final package Medium = MediumChiWat, + p=supChiWat.p + chi.dpEva_nominal + chi.valEva.dpValve_nominal, + T=288.15, + nPorts=1) + "Boundary conditions for CHW" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={20,-102}))); + + Fluid.Sources.Boundary_pT supConWat( + redeclare final package Medium = MediumConWat, + p=retConWat.p + chi.dpCon_nominal + chi.valCon.dpValve_nominal, + nPorts=1) "Boundary conditions for CW" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,100}))); + + Fluid.Sources.Boundary_pT retConWat( + redeclare final package Medium = MediumConWat, + p=200000, + nPorts=1) "Boundary conditions for CW" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,100}))); + Fluid.Sources.Boundary_pT supChiWat( + redeclare final package Medium = MediumChiWat, + p=200000, + nPorts=1) "Boundary conditions for CHW" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={-20,-102}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TChiWatSupSet( + y(displayUnit="degC", unit="K"), + height=+5, + duration=1000, + offset=dat.TEvaLvg_nominal) "CHW supply temperature setpoint" + annotation (Placement(transformation(extent={{-110,-50},{-90,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,1,1; 0.5,1,1; 0.5,1,0; 0.8,1,0; 0.8,0,0; 1,0,0], + timeScale=1000, + period=1000) "Chiller On/Off command" + annotation (Placement(transformation(extent={{-110,70},{-90,90}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[chi.nUni] + "Convert DO to AO" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-60,80}))); +equation + connect(chi.port_b1, retConWat.ports[1]) + annotation (Line(points={{10,6},{20,6},{20,90}}, color={0,127,255})); + connect(supConWat.ports[1], chi.port_a1) + annotation (Line(points={{-20,90},{-20,6},{-10,6}}, color={0,127,255})); + connect(retChiWat.ports[1], chi.port_a2) + annotation (Line(points={{20,-92},{20,-6},{10,-6}}, color={0,127,255})); + connect(supChiWat.ports[1], chi.port_b2) + annotation (Line(points={{-20,-92},{-20,-6},{-10,-6}}, color={0,127,255})); + connect(TChiWatSupSet.y, chi.TSet) annotation (Line(points={{-88,-40},{-16, + -40},{-16,-9},{-12,-9}}, color={0,0,127})); + connect(y1.y, chi.y1) annotation (Line(points={{-88,80},{-80,80},{-80,9},{-12, + 9}}, color={255,0,255})); + connect(y1.y, booToRea.u) + annotation (Line(points={{-88,80},{-72,80}}, color={255,0,255})); + connect(booToRea.y, chi.yValCon) + annotation (Line(points={{-48,80},{-6,80},{-6,12}}, color={0,0,127})); + connect(booToRea.y, chi.yValEva) annotation (Line(points={{-48,80},{-40,80},{ + -40,-20},{-5.8,-20},{-5.8,-12}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup +in a configuration with two chillers. +The chillers are initially On and they are switched Off one after the other +as they receive an increasing CHW supply temperature setpoint. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ChillerGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo new file mode 100644 index 00000000000..339882608a4 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo @@ -0,0 +1,476 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model ChillerHeatRecoveryGroup + "Validation of heat recovery chiller group model" + extends Modelica.Icons.Example; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium model"; + final parameter Integer nChiHea(final min=1, start=1)=2 + "Number of HRCs operating at design conditions" + annotation(Evaluate=true); + parameter + Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_1403kW_7_09COP_VSD dat( + EIRFunT={0.0101739374, 0.0607200115, 0.0003348647, 0.003162578, 0.0002388594, -0.0014121289}, + capFunT={0.0387084662, 0.2305017927, 0.0004779504, 0.0178244359, -8.48808e-05, -0.0032406711}, + EIRFunPLR={0.4304252832, -0.0144718912, 5.12039e-05, -0.7562386674, 0.5661683373, + 0.0406987748, 3.0278e-06, -0.3413411197, -0.000469572, 0.0055009208}, + QEva_flow_nominal=-1E6, + COP_nominal=2.5, + mEva_flow_nominal=20, + mCon_flow_nominal=22, + TEvaLvg_nominal=279.15, + TEvaLvgMin=277.15, + TEvaLvgMax=308.15, + TConLvg_nominal=333.15, + TConLvgMin=296.15, + TConLvgMax=336.15) + "Chiller parameters (each unit)" + annotation ( + Dialog(group="CHW loop and cooling-only chillers"), + Placement(transformation(extent={{140,200},{160,220}}))); + + Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup + chi( + redeclare final package Medium = Medium, + show_T=true, + final nUni=nChiHea, + dpEva_nominal=3E5, + dpCon_nominal=3E5, + final dat=dat, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Chiller group" + annotation (Placement(transformation(extent={{50,-10},{70,10}}))); + + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium = Medium, + p=300000, + nPorts=1) "Pressure boundary condition for CHW" + annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={120,-190}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,1,1; 0.8,1,1; 0.8,1,0; 0.9,1,0; 0.9,0,0; 1,0,0], + timeScale=2000, + period=2000) "Chiller On/Off command" + annotation (Placement(transformation(extent={{-240,170},{-220,190}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Coo( + table=[0,0,0; 0.2,0,0; 0.2,0,1; 0.6,0,1; 0.6,1,1; 1,1,1], + timeScale=2000, + period=2000) + "Cooling mode switchover command" + annotation (Placement(transformation(extent={{-240,90},{-220,110}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1HeaCoo( + table=[0,0,0; 0.4,0,0; 0.4,1,0; 0.6,1,0; 0.6,0,0; 1,0,0], + timeScale=2000, + period=2000) + "Direct heat recovery switchover command" + annotation (Placement(transformation(extent={{-240,50},{-220,70}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSet[nChiHea]( + each final k=chi.TChiWatSup_nominal, y(each final unit="K", each + displayUnit="degC")) "Supply temperature setpoint" + annotation (Placement(transformation(extent={{-240,-190},{-220,-170}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[chi.nUni] + "Convert DO to AO" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-130,200}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup( + redeclare final package Medium = + Medium, final m_flow_nominal=chi.mConWat_flow_nominal) + "HW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={100,20}))); + Fluid.Sensors.MassFlowRate floHeaWat(redeclare final package Medium = + Medium) "HW flow" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={130,80}))); + Fluid.Sensors.MassFlowRate floChiWat(redeclare final package Medium = + Medium) "CHW flow" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={160,-100}))); + Fluid.Sensors.TemperatureTwoPort TChiWatSup(redeclare final package Medium = + Medium, final m_flow_nominal=chi.mChiWat_flow_nominal) + "CHW supply temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={40,-80}))); + Buildings.Controls.OBC.CDL.Logical.Or cooOrDir[nChiHea] + "Return true if cooling OR direct HR" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-160,-60}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yValConSwi[nChiHea] + "HRC condenser switchover valve commanded position" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,-20}))); + Buildings.Controls.OBC.CDL.Logical.Not hea[nChiHea] "Return true if heating" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-160,20}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nChiHea] + "Convert" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum numHea(nin=nChiHea) + "Number of HRC connected to HW loop" + annotation (Placement(transformation(extent={{-110,10},{-90,30}}))); + Buildings.Controls.OBC.CDL.Integers.Less intLes[nChiHea] + "Return true if switchover valve to be open" + annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant idx[nChiHea](final k={i + for i in 1:nChiHea}) "HRC index" + annotation (Placement(transformation(extent={{-240,-30},{-220,-10}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-150,-50},{-130,-30}}))); + Buildings.Controls.OBC.CDL.Logical.Or mul[nChiHea] + "Return true if cooling OR direct HR" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,-20}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal yValEvaSwi[nChiHea] + "HRC evaporator switchover valve commanded position" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,-60}))); + Buildings.Controls.OBC.CDL.Logical.Not heaAndCas[nChiHea] + "Return true if cascading heating" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-160,-100}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1[nChiHea] + "Convert" + annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum numHeaAndCas(nin=nChiHea) + "Number of HRC in cascading heating" + annotation (Placement(transformation(extent={{-110,-110},{-90,-90}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep1(final nout= + nChiHea) "Replicate" + annotation (Placement(transformation(extent={{-150,-170},{-130,-150}}))); + Buildings.Controls.OBC.CDL.Integers.Less intLes1 + [nChiHea] + "Return true if switchover valve to be open" + annotation (Placement(transformation(extent={{-110,-150},{-90,-130}}))); + Buildings.Controls.OBC.CDL.Logical.Or mul1 + [nChiHea] + "Return true if cooling OR direct HR" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,-60}))); + Buildings.Controls.OBC.CDL.Continuous.Switch TChiHeaSupSet[nChiHea] + "Switch supply temperature setpoint" + annotation (Placement(transformation(extent={{-168,-210},{-148,-190}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSet[nChiHea]( + each final k=chi.THeaWatSup_nominal, y(each final unit="K", each + displayUnit="degC")) "Supply temperature setpoint" + annotation (Placement(transformation(extent={{-240,-230},{-220,-210}}))); + Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pumChiWat( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + nPum=1, + have_var=false, + have_valve=true, + final mPum_flow_nominal=chi.mChiWat_flow_nominal, + final dpPum_nominal=chi.dpEva_nominal) + "CHW pumps" + annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr y1PumConWatCon(nin=2) + "Start pump if any HRC in cascading cooling" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,140}))); + Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pumHeaWat( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + nPum=1, + have_var=false, + have_valve=true, + final mPum_flow_nominal=chi.mConWat_flow_nominal, + final dpPum_nominal=chi.dpCon_nominal) + "HW pumps" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={130,20}))); + Buildings.Controls.OBC.CDL.Logical.And onAndHea[nChiHea] + "Return true if On and heating" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-100,60}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr y1PumHeaWat(nin=2) + "Start pump if any HRC On and in heating" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,60}))); + Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pumConWatCon( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + nPum=1, + have_var=false, + have_valve=true, + final mPum_flow_nominal=chi.mConWat_flow_nominal, + final dpPum_nominal=chi.dpCon_nominal) + "CW pumps serving condenser barrels" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={130,160}))); + Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pumConWatEva( + redeclare package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + nPum=1, + have_var=false, + have_valve=true, + final mPum_flow_nominal=chi.mChiWat_flow_nominal, + final dpPum_nominal=chi.dpEva_nominal) + "CW pumps serving evaporator barrels" + annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); + Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold y1PumConWatEva(t=1) + "Return true if CW to be operating" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + Buildings.Controls.OBC.CDL.Logical.MultiOr y1PumChiWat(nin=2) + "Start pump if any HRC in cooling or direct HR mode" annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-30,-160}))); + Fluid.HeatExchangers.SensibleCooler_T disHeaWat( + redeclare final package Medium = Medium, + final m_flow_nominal=THeaWatRet.k, + final dp_nominal=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=300, + T_start=chi.THeaWatSup_nominal - 12) + "Distribution system approximated by prescribed temperature" + annotation (Placement(transformation(extent={{100,70},{80,90}}))); + Fluid.HeatExchangers.Heater_T disConWatEva( + redeclare final package Medium = Medium, + final m_flow_nominal=chi.mChiWat_flow_nominal, + final dp_nominal=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=300, + T_start=TConWatEvaSup.k) + "Distribution system approximated by prescribed temperature" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + Fluid.HeatExchangers.SensibleCooler_T disConWatCon( + redeclare final package Medium = Medium, + final m_flow_nominal=TConWatConSup.k, + final dp_nominal=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=300, + T_start=chi.TCasCooEnt_nominal) + "Distribution system approximated by prescribed temperature" + annotation (Placement(transformation(extent={{100,150},{80,170}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet( + final k=chi.THeaWatSup_nominal - 12, + y(final unit="K", displayUnit="degC")) + "Return temperature" + annotation (Placement(transformation(extent={{220,90},{200,110}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatConSup(final k= + chi.TCasCooEnt_nominal, y(final unit="K", displayUnit="degC")) + "Supply temperature" + annotation (Placement(transformation(extent={{220,170},{200,190}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaSup(final k= + chi.TCasHeaEnt_nominal, y(final unit="K", displayUnit="degC")) + "Supply temperature" + annotation (Placement(transformation(extent={{220,-30},{200,-10}}))); + Fluid.HeatExchangers.Heater_T disChiWat( + redeclare final package Medium = Medium, + final m_flow_nominal=TChiWatRet.k, + final dp_nominal=0, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + tau=300, + T_start=chi.TChiWatSup_nominal) + "Distribution system approximated by prescribed temperature" + annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet( + final k=chi.TChiWatSup_nominal + 6, y(final unit="K", displayUnit="degC")) + "Return temperature" + annotation (Placement(transformation(extent={{220,-130},{200,-110}}))); + Fluid.Sources.Boundary_pT bouHeaWat( + redeclare final package Medium = Medium, + p=300000, + nPorts=1) "Pressure boundary condition for HW" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={210,40}))); +equation + connect(y1.y, chi.y1) + annotation (Line(points={{-218,180},{26,180},{26,6},{48,6}}, + color={255,0,255})); + connect(y1Coo.y, chi.y1Coo) + annotation (Line(points={{-218,100},{14,100},{14,0},{48,0}}, + color={255,0,255})); + connect(y1.y, booToRea.u) annotation (Line(points={{-218,180},{-160,180},{-160, + 200},{-142,200}}, + color={255,0,255})); + connect(booToRea.y, chi.yValEva) annotation (Line(points={{-118,200},{20,200}, + {20,-16},{52,-16},{52,-12}}, + color={0,0,127})); + connect(chi.port_b1, THeaWatSup.port_a) + annotation (Line(points={{70,8},{80,8},{80,20},{90,20}}, + color={0,127,255})); + connect(floChiWat.port_b, chi.port_a4) + annotation (Line(points={{160,-90},{160,-8},{70,-8}}, + color={0,127,255})); + connect(TChiWatSup.port_a, chi.port_b4) annotation (Line(points={{40,-70},{40, + -8.5},{50,-8.5}}, color={0,127,255})); + connect(y1Coo.y, cooOrDir.u1) annotation (Line(points={{-218,100},{-180,100},{ + -180,-60},{-172,-60}}, + color={255,0,255})); + connect(y1HeaCoo.y, cooOrDir.u2) annotation (Line(points={{-218,60},{-190,60}, + {-190,-68},{-172,-68}}, + color={255,0,255})); + connect(y1Coo.y, hea.u) annotation (Line(points={{-218,100},{-180,100},{-180,20}, + {-172,20}}, color={255,0,255})); + connect(hea.y, booToInt.u) + annotation (Line(points={{-148,20},{-142,20}}, color={255,0,255})); + connect(booToInt.y, numHea.u) + annotation (Line(points={{-118,20},{-112,20}}, + color={255,127,0})); + connect(idx.y, intLes.u1) + annotation (Line(points={{-218,-20},{-112,-20}},color={255,127,0})); + connect(rep.y, intLes.u2) annotation (Line(points={{-128,-40},{-120,-40},{-120, + -28},{-112,-28}}, + color={255,127,0})); + connect(intLes.y, mul.u2) annotation (Line(points={{-88,-20},{-80,-20},{-80,-28}, + {-42,-28}}, color={255,0,255})); + connect(mul.y, yValConSwi.u) + annotation (Line(points={{-18,-20},{-12,-20}}, + color={255,0,255})); + connect(yValConSwi.y, chi.yValConSwi) annotation (Line(points={{12,-20},{36,-20}, + {36,16},{54,16},{54,12}}, color={0,0,127})); + connect(y1Coo.y[1:2], mul.u1) annotation (Line(points={{-218,100},{-60,100},{-60, + -20},{-42,-20}}, color={255,0,255})); + connect(yValEvaSwi.y, chi.yValEvaSwi) annotation (Line(points={{12,-60},{34,-60}, + {34,-40},{54,-40},{54,-26},{54,-26},{54,-12}}, + color={0,0,127})); + connect(numHea.y, rep.u) annotation (Line(points={{-88,20},{-80,20},{-80,0},{-160, + 0},{-160,-40},{-152,-40}}, color={255,127,0})); + connect(cooOrDir.y, heaAndCas.u) annotation (Line(points={{-148,-60},{-140, + -60},{-140,-80},{-176,-80},{-176,-100},{-172,-100}}, + color={255,0,255})); + connect(heaAndCas.y, booToInt1.u) annotation (Line(points={{-148,-100},{-142,-100}}, + color={255,0,255})); + connect(booToInt1.y, numHeaAndCas.u) + annotation (Line(points={{-118,-100},{-112,-100}}, + color={255,127,0})); + connect(numHeaAndCas.y, rep1.u) annotation (Line(points={{-88,-100},{-80,-100}, + {-80,-120},{-160,-120},{-160,-160},{-152,-160}}, + color={255,127,0})); + connect(rep1.y, intLes1.u2) annotation (Line(points={{-128,-160},{-120,-160}, + {-120,-148},{-112,-148}}, + color={255,127,0})); + connect(idx.y, intLes1.u1) annotation (Line(points={{-218,-20},{-200,-20},{-200, + -140},{-112,-140}}, color={255,127,0})); + connect(cooOrDir.y, mul1.u1) annotation (Line(points={{-148,-60},{-42,-60}}, + color={255,0,255})); + connect(intLes1.y, mul1.u2) annotation (Line(points={{-88,-140},{-56,-140},{ + -56,-68},{-42,-68}}, + color={255,0,255})); + connect(mul1.y, yValEvaSwi.u) annotation (Line(points={{-18,-60},{-12,-60}}, + color={255,0,255})); + connect(TChiWatSet.y, TChiHeaSupSet.u1) annotation (Line(points={{-218,-180},{ + -190,-180},{-190,-192},{-170,-192}}, color={0,0,127})); + connect(THeaWatSet.y, TChiHeaSupSet.u3) annotation (Line(points={{-218,-220},{ + -190,-220},{-190,-208},{-170,-208}}, color={0,0,127})); + connect(y1Coo.y, TChiHeaSupSet.u2) annotation (Line(points={{-218,100},{-180,100}, + {-180,-200},{-170,-200}}, color={255,0,255})); + connect(TChiHeaSupSet.y, chi.TSet) annotation (Line(points={{-146,-200},{24, + -200},{24,-6},{48,-6}}, + color={0,0,127})); + connect(pumChiWat.port_b, floChiWat.port_a) annotation (Line(points={{140,-140}, + {160,-140},{160,-110}},color={0,127,255})); + connect(y1Coo.y[1:2], y1PumConWatCon.u[1:2]) annotation (Line(points={{-218,100}, + {-180,100},{-180,140},{-42,140},{-42,141.75}}, color={255,0,255})); + connect(pumHeaWat.port_b, floHeaWat.port_a) annotation (Line(points={{140,20}, + {160,20},{160,80},{140,80}}, color={0,127,255})); + connect(y1.y[1:2], onAndHea.u1) annotation (Line(points={{-218,180},{-160,180}, + {-160,60},{-112,60}}, color={255,0,255})); + connect(hea.y, onAndHea.u2) annotation (Line(points={{-148,20},{-146,20},{-146, + 52},{-112,52}}, color={255,0,255})); + connect(onAndHea.y, y1PumHeaWat.u[1:2]) annotation (Line(points={{-88,60},{-42, + 60},{-42,61.75}}, color={255,0,255})); + connect(y1PumHeaWat.y, pumHeaWat.y1[1]) annotation (Line(points={{-18,60},{110, + 60},{110,28},{118,28}}, color={255,0,255})); + connect(THeaWatSup.port_b, pumHeaWat.port_a) + annotation (Line(points={{110,20},{120,20}}, color={0,127,255})); + connect(pumConWatEva.port_b, chi.port_a2) annotation (Line(points={{140,-60},{ + 150,-60},{150,3},{70,3}}, color={0,127,255})); + connect(chi.port_b3, pumConWatCon.port_a) annotation (Line(points={{70,-3.1},{ + 170,-3.1},{170,160},{140,160}}, color={0,127,255})); + connect(numHeaAndCas.y, y1PumConWatEva.u) + annotation (Line(points={{-88,-100},{-42,-100}}, color={255,127,0})); + connect(y1PumConWatEva.y, pumConWatEva.y1[1]) annotation (Line(points={{-18,-100}, + {110,-100},{110,-52},{118,-52}}, color={255,0,255})); + connect(y1PumConWatCon.y, pumConWatCon.y1[1]) annotation (Line(points={{-18,140}, + {160,140},{160,168},{142,168}}, color={255,0,255})); + connect(y1PumChiWat.y, pumChiWat.y1[1]) annotation (Line(points={{-18,-160},{110, + -160},{110,-132},{118,-132}}, color={255,0,255})); + connect(cooOrDir.y, y1PumChiWat.u[1:2]) annotation (Line(points={{-148,-60},{-60, + -60},{-60,-160},{-42,-160},{-42,-158.25}}, color={255,0,255})); + connect(floHeaWat.port_b, disHeaWat.port_a) + annotation (Line(points={{120,80},{100,80}}, color={0,127,255})); + connect(disHeaWat.port_b, chi.port_a1) annotation (Line(points={{80,80},{44,80}, + {44,8},{50,8}}, color={0,127,255})); + connect(chi.port_b2, disConWatEva.port_a) annotation (Line(points={{50,3},{44, + 3},{44,-60},{80,-60}}, color={0,127,255})); + connect(disConWatEva.port_b, pumConWatEva.port_a) + annotation (Line(points={{100,-60},{120,-60}}, color={0,127,255})); + connect(pumConWatCon.port_b, disConWatCon.port_a) + annotation (Line(points={{120,160},{100,160}}, color={0,127,255})); + connect(disConWatCon.port_b, chi.port_a3) annotation (Line(points={{80,160},{40, + 160},{40,-3.2},{50,-3.2}}, color={0,127,255})); + connect(THeaWatRet.y, disHeaWat.TSet) annotation (Line(points={{198,100},{110, + 100},{110,88},{102,88}},color={0,0,127})); + connect(TConWatConSup.y, disConWatCon.TSet) annotation (Line(points={{198,180}, + {110,180},{110,168},{102,168}}, color={0,0,127})); + connect(TConWatEvaSup.y, disConWatEva.TSet) annotation (Line(points={{198,-20}, + {70,-20},{70,-52},{78,-52}}, color={0,0,127})); + connect(disChiWat.port_b, pumChiWat.port_a) + annotation (Line(points={{100,-140},{120,-140}}, color={0,127,255})); + connect(TChiWatSup.port_b, disChiWat.port_a) annotation (Line(points={{40,-90}, + {40,-140},{80,-140}}, color={0,127,255})); + connect(TChiWatRet.y, disChiWat.TSet) annotation (Line(points={{198,-120},{68, + -120},{68,-132},{78,-132}}, color={0,0,127})); + connect(bouChiWat.ports[1], pumChiWat.port_a) + annotation (Line(points={{120,-180},{120,-140}}, color={0,127,255})); + connect(booToRea.y, chi.yValCon) annotation (Line(points={{-118,200},{52,200}, + {52,12}}, color={0,0,127})); + connect(bouHeaWat.ports[1], pumHeaWat.port_a) annotation (Line(points={{200,40}, + {116,40},{116,20},{120,20}}, color={0,127,255})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mos" + "Simulate and plot"), + experiment( + StopTime=2000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-260,-260},{260,260}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup +in a configuration with two HRCs. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ChillerHeatRecoveryGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo new file mode 100644 index 00000000000..08fe8edfd66 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo @@ -0,0 +1,143 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model CoolingTowerGroup "Validation of cooling tower group model" + extends Modelica.Icons.Example; + + replaceable package MediumConWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium"; + + Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup coo( + redeclare final package Medium = MediumConWat, + show_T=true, + nUni=2, + mConWatUni_flow_nominal=1, + dpConWatFriUni_nominal=1E4, + mAirUni_flow_nominal=coo.mConWatUni_flow_nominal/1.45, + TWetBulEnt_nominal=297.05, + TConWatRet_nominal=308.15, + TConWatSup_nominal=302.55, + PFanUni_nominal=340*coo.mConWatUni_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Cooling tower group" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Fluid.Sources.Boundary_pT bouConWat( + redeclare final package Medium = MediumConWat, + T=coo.TConWatRet_nominal, + nPorts=2) + "Boundary conditions for CW" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-70}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TConWatSupSet( + height=+3, + duration=500, + offset=coo.TConWatSup_nominal, + startTime=500, + y(displayUnit="degC", unit="K")) + "CW supply temperature setpoint" + annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,1,1; 0.4,1,1; 0.4,1,0; 0.8,1,0; 0.8,0,0; 1,0,0], + timeScale=1000, + period=1000) + "On/Off command" + annotation (Placement(transformation(extent={{-110,90},{-90,110}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Outdoor conditions" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-100,20}))); + Fluid.Sensors.TemperatureTwoPort TConWatSup( + redeclare package Medium =MediumConWat, + final m_flow_nominal=coo.mConWat_flow_nominal) + "CW supply temperature" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={30,0}))); + Fluid.Sensors.TemperatureTwoPort TConWatRet( + redeclare package Medium =MediumConWat, + final m_flow_nominal=coo.mConWat_flow_nominal) + "CW return temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-60,-40}))); + EnergyTransferStations.Combined.Controls.PIDWithEnable ctl( + k=1, + Ti=60, + reverseActing=false) "Controller" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pum( + redeclare package Medium =MediumConWat, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + final nPum=coo.nUni, + have_var=false, + have_valve=false, + final mPum_flow_nominal=coo.mConWatUni_flow_nominal, + final dpPum_nominal=coo.dpConWatFriUni_nominal) + "CW pumps" + annotation (Placement(transformation(extent={{50,-10},{70,10}}))); +equation + connect(y1.y, coo.y1) annotation (Line(points={{-88,100},{-40,100},{-40,6},{-12, + 6}}, color={255,0,255})); + connect(weaDat.weaBus, coo.weaBus) annotation (Line( + points={{-90,20},{0,20},{0,10}}, + color={255,204,51}, + thickness=0.5)); + connect(coo.port_b, TConWatSup.port_a) + annotation (Line(points={{10,0},{10,1.77636e-15},{20,1.77636e-15}}, + color={0,127,255})); + connect(bouConWat.ports[1],TConWatRet. port_a) annotation (Line(points={{-1,-80}, + {-60,-80},{-60,-50}}, color={0,127,255})); + connect(TConWatRet.port_b, coo.port_a) + annotation (Line(points={{-60,-30},{-60,0},{-10,0}}, color={0,127,255})); + connect(coo.TConWatSup, ctl.u_m) annotation (Line(points={{12,4},{20,4},{20, + 40},{0,40},{0,48}}, color={0,0,127})); + connect(y1.y[1], ctl.uEna) annotation (Line(points={{-88,100},{-40,100},{-40, + 40},{-4,40},{-4,48}}, color={255,0,255})); + connect(TConWatSupSet.y, ctl.u_s) + annotation (Line(points={{-88,60},{-12,60}}, color={0,0,127})); + connect(ctl.y, coo.y) annotation (Line(points={{12,60},{20,60},{20,80},{-28, + 80},{-28,-6},{-12,-6}}, color={0,0,127})); + connect(pum.port_b, bouConWat.ports[2]) annotation (Line(points={{70,0},{80,0}, + {80,-80},{1,-80}}, color={0,127,255})); + connect(TConWatSup.port_b, pum.port_a) + annotation (Line(points={{40,0},{50,0}}, color={0,127,255})); + connect(y1.y, pum.y1) annotation (Line(points={{-88,100},{40,100},{40,8},{48,8}}, + color={255,0,255})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup +in a configuration with two tower cells. +The tower cells are initially enabled and they are disabled one after the other +as the CW supply temperature setpoint is increasing after an initial +period where it is fixed at its design value. +The Start command of the CW pumps is the same signal +as the one used for the cooling towers. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end CoolingTowerGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo new file mode 100644 index 00000000000..c0816965a0a --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo @@ -0,0 +1,142 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model HeatPumpGroup "Validation of heat pump group model" + extends Modelica.Icons.Example; + + replaceable package MediumHeaWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "CW medium"; + + parameter Fluid.HeatPumps.Data.EquationFitReversible.Generic dat( + dpHeaLoa_nominal=50000, + dpHeaSou_nominal=100, + hea( + mLoa_flow=dat.hea.Q_flow / 10 / 4186, + mSou_flow=1E-4 * dat.hea.Q_flow, + Q_flow=1E6, + P=dat.hea.Q_flow / 2.2, + coeQ={-5.64420084, 1.95212447, 9.96663913, 0.23316322, -5.64420084}, + coeP={-3.96682255, 6.8419453, 1.99606939, 0.01393387, -3.96682255}, + TRefLoa=298.15, + TRefSou=253.15), + coo( + mLoa_flow=0, + mSou_flow=0, + Q_flow=-1, + P=0, + coeQ=fill(0, 5), + coeP=fill(0, 5), + TRefLoa=273.15, + TRefSou=273.15)) + "Heat pump parameters (each unit)" + annotation (Placement(transformation(extent={{90,92},{110,112}}))); + + Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup heaPum( + redeclare final package Medium = MediumHeaWat, + redeclare final package MediumAir = MediumAir, + show_T=true, + nUni=2, + final dat=dat, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) + "Heat pump group" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Fluid.Sources.Boundary_pT bouHeaWat( + redeclare final package Medium = MediumHeaWat, + use_T_in=true, + nPorts=2) + "Boundary conditions for HW" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={2,-90}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet( + k=dat.hea.TRefLoa+ 10, + y(displayUnit="degC", unit="K")) "HW supply temperature setpoint" + annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,1,1; 0.5,1,1; 0.5,1,0; 0.8,1,0; 0.8,0,0; 1,0,0], + timeScale=1000, + period=1000) + "Heat pump On/Off command" + annotation (Placement(transformation(extent={{-110,90},{-90,110}}))); + + BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Outdoor conditions" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-100,20}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp THeaWatRetBou( + y(displayUnit="degC", unit="K"), + height=+5, + duration=1000, + offset=dat.hea.TRefLoa) "HW return temperature" + annotation (Placement(transformation(extent={{-110,-70},{-90,-50}}))); + Fluid.Sensors.TemperatureTwoPort THeaWatSup( + redeclare package Medium = MediumHeaWat, + final m_flow_nominal=heaPum.mHeaWat_flow_nominal) + "HW supply temperature" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=90, + origin={20,-40}))); + Fluid.Sensors.TemperatureTwoPort THeaWatRet( + redeclare package Medium = MediumHeaWat, + final m_flow_nominal=heaPum.mHeaWat_flow_nominal) + "HW return temperature" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-20,-40}))); +equation + connect(THeaWatSupSet.y,heaPum. TSet) annotation (Line(points={{-88,60},{-60,60}, + {-60,-6},{-12,-6}}, color={0,0,127})); + connect(y1.y,heaPum. y1) annotation (Line(points={{-88,100},{-40,100},{-40,6}, + {-12,6}}, + color={255,0,255})); + connect(weaDat.weaBus,heaPum. weaBus) annotation (Line( + points={{-90,20},{0,20},{0,10}}, + color={255,204,51}, + thickness=0.5)); + connect(THeaWatRetBou.y, bouHeaWat.T_in) + annotation (Line(points={{-88,-60},{6,-60},{6,-78}}, color={0,0,127})); + connect(heaPum.port_b, THeaWatSup.port_a) + annotation (Line(points={{10,0},{20,0},{20,-30}}, color={0,127,255})); + connect(THeaWatSup.port_b, bouHeaWat.ports[1]) + annotation (Line(points={{20,-50},{20,-100},{1,-100}}, color={0,127,255})); + connect(bouHeaWat.ports[2], THeaWatRet.port_a) annotation (Line(points={{3,-100}, + {-20,-100},{-20,-50}}, color={0,127,255})); + connect(THeaWatRet.port_b, heaPum.port_a) + annotation (Line(points={{-20,-30},{-20,0},{-10,0}}, color={0,127,255})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup +in a configuration with two heat pumps. +The heat pumps are initially On and they are switched Off one after the other +as they are exposed to an increasing HW return temperature. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end HeatPumpGroup; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo new file mode 100644 index 00000000000..0fc836cd6e6 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo @@ -0,0 +1,58 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model MultiplePumpsDp + "Validation of multiple pumps model with dp-controlled pump model" + extends BaseClasses.PartialMultiplePumps( + redeclare final Subsystems.MultiplePumpsDp pum, + redeclare final Buildings.Fluid.Movers.FlowControlled_dp pum1( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal), + redeclare final Buildings.Fluid.Movers.FlowControlled_dp pum2( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal)); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpSet( + height=dpPum_nominal, duration=500) + "Differential pressure setpoint" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); +equation + connect(dpSet.y, inp1.u1) + annotation (Line(points={{-98,40},{114,40},{114,14}}, color={0,0,127})); + connect(dpSet.y, inp2.u1) annotation (Line(points={{-98,40},{100,40},{100,-26}, + {114,-26},{114,-30}}, color={0,0,127})); + connect(inp1.y, pum1.dp_in) annotation (Line(points={{120,-10},{120,-20},{0,-20}, + {0,-28}}, color={0,0,127})); + connect(inp2.y, pum2.dp_in) annotation (Line(points={{120,-54},{120,-60},{0,-60}, + {0,-68}}, color={0,0,127})); + connect(dpSet.y, pum.dp_in) annotation (Line(points={{-98,40},{-40,40},{-40,64}, + {-12,64}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsDp +by comparing an instance of that model with two instances of + +Buildings.Fluid.Movers.FlowControlled_dp +connected in parallel. +The two pumps are commanded On one after the other as they receive +an increasing differential pressure setpoint and work +against a two-way modulating valve that gets progressively opened. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsDp; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo new file mode 100644 index 00000000000..6743d600ef8 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo @@ -0,0 +1,67 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model MultiplePumpsFlow + "Validation of multiple pumps model with flow-controlled pump model" + extends BaseClasses.PartialMultiplePumps( + redeclare final Subsystems.MultiplePumpsFlow pum, + redeclare final Buildings.Fluid.Movers.FlowControlled_m_flow pum1( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal), + redeclare final Buildings.Fluid.Movers.FlowControlled_m_flow pum2( + final m_flow_nominal=mPum_flow_nominal, + final dp_nominal=dpPum_nominal)); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp floSet(height= + mPum_flow_nominal, duration=500) "Mass flow rate setpoint (each pump)" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + Buildings.Controls.OBC.CDL.Continuous.Add floTotSet + "Compute total flow rate setpoint (all pumps)" annotation (Placement( + transformation( + extent={{10,-10},{-10,10}}, + rotation=-90, + origin={80,0}))); +equation + connect(floSet.y, inp1.u1) + annotation (Line(points={{-98,40},{114,40},{114,14}}, color={0,0,127})); + connect(floSet.y, inp2.u1) annotation (Line(points={{-98,40},{100,40},{100,-26}, + {114,-26},{114,-30}}, color={0,0,127})); + connect(inp2.y, pum2.m_flow_in) annotation (Line(points={{120,-54},{120,-60}, + {0,-60},{0,-68}}, color={0,0,127})); + connect(inp1.y, pum1.m_flow_in) annotation (Line(points={{120,-10},{120,-20}, + {0,-20},{0,-28}}, color={0,0,127})); + connect(floTotSet.y, pum.m_flow_in) annotation (Line(points={{80,12},{80,44}, + {-16,44},{-16,64},{-12,64}}, color={0,0,127})); + connect(inp1.y, floTotSet.u1) annotation (Line(points={{120,-10},{120,-20},{ + 86,-20},{86,-12}}, color={0,0,127})); + connect(inp2.y, floTotSet.u2) annotation (Line(points={{120,-54},{120,-60},{ + 74,-60},{74,-12}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsFlow +by comparing an instance of that model with two instances of + +Buildings.Fluid.Movers.FlowControlled_m_flow +connected in parallel. +The two pumps are commanded On one after the other as they receive +an increasing flow setpoint and work against a two-way modulating +valve that gets progressively opened. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsFlow; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo new file mode 100644 index 00000000000..67f863383eb --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo @@ -0,0 +1,53 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model MultiplePumpsSpeed + "Validation of multiple pumps model with speed-controlled pump model" + extends BaseClasses.PartialMultiplePumps( + redeclare final Subsystems.MultiplePumpsSpeed pum, + redeclare final Fluid.Movers.SpeedControlled_y pum1, + redeclare final Fluid.Movers.SpeedControlled_y pum2); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp spe(duration=500) + "Pump speed signal" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); +equation + connect(spe.y, pum.y) annotation (Line(points={{-98,40},{-40,40},{-40,64},{ + -12,64}}, color={0,0,127})); + connect(spe.y, inp1.u1) + annotation (Line(points={{-98,40},{114,40},{114,14}}, color={0,0,127})); + connect(spe.y, inp2.u1) annotation (Line(points={{-98,40},{100,40},{100,-26}, + {114,-26},{114,-30}}, color={0,0,127})); + connect(inp1.y, pum1.y) annotation (Line(points={{120,-10},{120,-20},{0,-20}, + {0,-28}}, color={0,0,127})); + connect(inp2.y, pum2.y) annotation (Line(points={{120,-54},{120,-60},{0,-60}, + {0,-68}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos" + "Simulate and plot"), + experiment( + StopTime=1000, + Tolerance=1e-06), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-140},{140,140}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed +by comparing an instance of that model with two instances of + +Buildings.Fluid.Movers.SpeedControlled_y +connected in parallel. +The two pumps are commanded On one after the other as they receive +an increasing speed signal and work against a two-way modulating valve +that gets progressively opened. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end MultiplePumpsSpeed; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mo new file mode 100644 index 00000000000..ed84d121851 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mo @@ -0,0 +1,94 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation; +model ValveOpeningFlowBalancing + "Validation model for the computation of the valve opening ensuring flow balancing" + extends Modelica.Icons.Example; + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium"; + + parameter Real m1_flow = 1 + "Valve #1 design mass flow rate"; + parameter Real m2_flow = 1.5 + "Valve #2 design mass flow rate"; + parameter Real dpv1 = 1E3 + "Valve #1 design pressure drop"; + parameter Real dpv2 = 1E3 + "Valve #2 design pressure drop"; + parameter Real dpf1 = 3E4 + "Design pressure drop of fixed flow resistance in series with valve #1"; + parameter Real dpf2 = 5E4 + "Design pressure drop of fixed flow resistance in series with valve #2"; + parameter Real dps = 20E4; + + parameter Real y1 = if dpf2 + dpv2 - dpf1 <= 0 then 1 else + (dpv1 / (dpf2 + dpv2 - dpf1))^0.5 + "Valve #1 opening"; + parameter Real y2 = if dpf1 + dpv1 - dpf2 <= 0 then 1 else + (dpv2 / (dpf1 + dpv1 - dpf2))^0.5 + "Valve #2 opening"; + + Fluid.Actuators.Valves.TwoWayLinear val1( + redeclare package Medium = Medium, + m_flow_nominal=m1_flow, + linearized=true, + dpValve_nominal=dpv1, + use_inputFilter=false, + dpFixed_nominal=dpf1) + "Valve #1" + annotation (Placement(transformation(extent={{-10,30},{10,50}}))); + Fluid.Actuators.Valves.TwoWayLinear val2( + redeclare package Medium=Medium, + m_flow_nominal=m2_flow, + linearized=true, + dpValve_nominal=dpv2, + use_inputFilter=false, + dpFixed_nominal=dpf2) + "Valve #1" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); + Fluid.Sources.Boundary_pT bou( + p=Medium.p_default + dps, nPorts=2, + redeclare package Medium=Medium) + "Pressure boundary condition" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Fluid.Sources.Boundary_pT bou1(nPorts=2, + redeclare package Medium=Medium) + "Pressure boundary condition" + annotation (Placement(transformation(extent={{90,-10},{70,10}}))); + Modelica.Blocks.Sources.RealExpression y[2](y={y1, y2}) + "Valve opening signal" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); +equation + connect(bou.ports[1], val1.port_a) annotation (Line(points={{-60,-1},{-40,-1}, + {-40,40},{-10,40}}, color={0,127,255})); + connect(val1.port_b, bou1.ports[1]) annotation (Line(points={{10,40},{40,40},{ + 40,-1},{70,-1}}, color={0,127,255})); + connect(bou.ports[2],val2. port_a) annotation (Line(points={{-60,1},{-40,1},{-40, + -40},{-10,-40}}, color={0,127,255})); + connect(val2.port_b, bou1.ports[2]) annotation (Line(points={{10,-40},{40,-40}, + {40,1},{70,1}}, color={0,127,255})); + connect(y[1].y, val1.y) + annotation (Line(points={{-59,60},{0,60},{0,52}}, color={0,0,127})); + connect(y[2].y,val2. y) annotation (Line(points={{-59,60},{-20,60},{-20,-20},{ + 0,-20},{0,-28}}, color={0,0,127})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mos" + "Simulate and plot"), + experiment( + StopTime=1, + Tolerance=1e-06), + Documentation(info=" +

    +This model validates the computation of the valve opening that ensures +flow balancing proportional to design flow in the case of linear valves +configured with a pressure drop varying linearly with the flow rate. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end ValveOpeningFlowBalancing; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.mo new file mode 100644 index 00000000000..72c90cfbbbb --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.mo @@ -0,0 +1,10 @@ +within Buildings.Experimental.DHC.Plants.Combined.Subsystems; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

    +This pakcge contains validation models. +

    +")); +end Validation; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.order b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.order new file mode 100644 index 00000000000..655733397a2 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/package.order @@ -0,0 +1,9 @@ +ChillerGroup +ChillerHeatRecoveryGroup +CoolingTowerGroup +HeatPumpGroup +MultiplePumpsDp +MultiplePumpsFlow +MultiplePumpsSpeed +ValveOpeningFlowBalancing +BaseClasses diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.mo new file mode 100644 index 00000000000..dc008dabcf6 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Plants.Combined; +package Subsystems "Package of models for subsystems of combined plants" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

    +This package contains models of components used in +combined heating and cooling plants. +

    +")); +end Subsystems; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.order b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.order new file mode 100644 index 00000000000..37a34c1a3c1 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/package.order @@ -0,0 +1,9 @@ +ChillerGroup +ChillerHeatRecoveryGroup +CoolingTowerGroup +HeatPumpGroup +MultiplePumpsDp +MultiplePumpsFlow +MultiplePumpsSpeed +Validation +BaseClasses diff --git a/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo b/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo new file mode 100644 index 00000000000..88723a2637b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo @@ -0,0 +1,237 @@ +within Buildings.Experimental.DHC.Plants.Combined.Validation; +model AllElectricCWStorage "Validation of all-electric plant model" + extends Modelica.Icons.Example; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Main medium (common to CHW, HW and CW)"; + replaceable package MediumConWatCoo=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium in cooler circuit"; + + replaceable parameter + Fluid.Chillers.Data.ElectricReformulatedEIR.ReformEIRChiller_Carrier_19XR_1403kW_7_09COP_VSD datChi( + EIRFunT={0.0101739374, 0.0607200115, 0.0003348647, 0.003162578, 0.0002388594, -0.0014121289}, + capFunT={0.0387084662, 0.2305017927, 0.0004779504, 0.0178244359, -8.48808e-05, -0.0032406711}, + EIRFunPLR={0.4304252832, -0.0144718912, 5.12039e-05, -0.7562386674, 0.5661683373, + 0.0406987748, 3.0278e-06, -0.3413411197, -0.000469572, 0.0055009208}, + QEva_flow_nominal=-1E6, + COP_nominal=2.5, + mEva_flow_nominal=-datChi.QEva_flow_nominal/5/4186, + mCon_flow_nominal=-datChi.QEva_flow_nominal * (1 + 1/datChi.COP_nominal) / 10 / 4186, + TEvaLvg_nominal=279.15, + TEvaLvgMin=277.15, + TEvaLvgMax=308.15, + TConLvg_nominal=333.15, + TConLvgMin=296.15, + TConLvgMax=336.15) + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "Chiller parameters (each unit)" + annotation ( + Dialog(group="CHW loop and cooling-only chillers"), + Placement(transformation(extent={{140,200},{160,220}}))); + replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic datChiHea= + datChi + constrainedby Buildings.Fluid.Chillers.Data.BaseClasses.Chiller + "Chiller parameters (each unit)" + annotation ( + Dialog(group="HW loop and heat recovery chillers"), + Placement(transformation(extent={{170,200},{190,220}}))); + replaceable parameter Fluid.HeatPumps.Data.EquationFitReversible.Generic datHeaPum( + dpHeaLoa_nominal=50000, + dpHeaSou_nominal=100, + hea( + mLoa_flow=datHeaPum.hea.Q_flow / 10 / 4186, + mSou_flow=1E-4 * datHeaPum.hea.Q_flow, + Q_flow=1E6, + P=datHeaPum.hea.Q_flow / 2.2, + coeQ={-5.64420084, 1.95212447, 9.96663913, 0.23316322, -5.64420084}, + coeP={-3.96682255, 6.8419453, 1.99606939, 0.01393387, -3.96682255}, + TRefLoa=298.15, + TRefSou=253.15), + coo( + mLoa_flow=0, + mSou_flow=0, + Q_flow=-1, + P=0, + coeQ=fill(0, 5), + coeP=fill(0, 5), + TRefLoa=273.15, + TRefSou=273.15)) + "Heat pump parameters (each unit)" + annotation (Placement(transformation(extent={{200,200},{220,220}}))); + + // Assumptions + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Buildings.Experimental.DHC.Plants.Combined.AllElectricCWStorage pla( + redeclare final package Medium = Medium, + redeclare package MediumHea_b = Medium, + redeclare final package MediumConWatCoo = MediumConWatCoo, + allowFlowReversal=true, + dpConWatCooFri_nominal=1E4, + mAirCooUni_flow_nominal=pla.mConWatCoo_flow_nominal/pla.nCoo/1.45, + TWetBulCooEnt_nominal=297.05, + PFanCoo_nominal=340*pla.mConWatCoo_flow_nominal/pla.nCoo, + chi(show_T=true), + chiHea(show_T=true), + heaPum(show_T=true), + final datChi=datChi, + final datChiHea=datChiHea, + final datHeaPum=datHeaPum, + nChi=2, + dpChiWatSet_max=20E4, + nChiHea=2, + dpHeaWatSet_max=20E4, + nHeaPum=2, + dInsTan=0.05, + nCoo=3, + final energyDynamics=energyDynamics) + "CHW and HW plant" + annotation (Placement(transformation(extent={{-30,-30},{30,30}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for setpoint" + annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for setpoint" + annotation (Placement(transformation(extent={{-190,-10},{-170,10}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpHeaWatSet_max( + k=pla.dpHeaWatSet_max, + y(final unit="Pa")) "Source signal for setpoint" + annotation (Placement(transformation(extent={{-190,-70},{-170,-50}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpChiWatSet_max( + k=pla.dpChiWatSet_max, + y(final unit="Pa")) "Source signal for setpoint" + annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")) + "Outdoor conditions" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-210,120}))); + Fluid.HeatExchangers.SensibleCooler_T disHeaWat( + redeclare final package Medium = Medium, + final m_flow_nominal=pla.mHeaWat_flow_nominal, + final dp_nominal=0, + final energyDynamics=energyDynamics, + tau=300) + "Distribution system approximated by prescribed return temperature" + annotation (Placement(transformation(extent={{12,130},{-8,150}}))); + Fluid.HeatExchangers.Heater_T disChiWat( + redeclare final package Medium = Medium, + final m_flow_nominal=pla.mChiWat_flow_nominal, + show_T=true, + final dp_nominal=0, + final energyDynamics=energyDynamics, + tau=300) + "Distribution system approximated by prescribed return temperature" + annotation (Placement(transformation(extent={{10,-150},{-10,-130}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet(k=pla.THeaWatRet_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for HW return temperature" + annotation (Placement(transformation(extent={{-190,70},{-170,90}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet(k=pla.TChiWatRet_nominal, + y(final unit="K", displayUnit="degC")) + "Source signal for CHW return temperature" + annotation (Placement(transformation(extent={{-220,-110},{-200,-90}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1( + table=[0,0,0; 4,1,1; 72,0,1; 96,0,0], + timeScale=3600, + period=96*3600) "Plant enable signal: y[1] for cooling, y[2] for heating" + annotation (Placement(transformation(extent={{-220,50},{-200,70}}))); + Fluid.Actuators.Valves.TwoWayPressureIndependent valDisHeaWat( + redeclare final package Medium = Medium, + m_flow_nominal=pla.mHeaWat_flow_nominal, + dpValve_nominal=1E4, + dpFixed_nominal=pla.dpHeaWatSet_max - valDisHeaWat.dpValve_nominal) + "Distribution system approximated by variable flow resistance" + annotation (Placement(transformation(extent={{-30,130},{-50,150}}))); + Fluid.Actuators.Valves.TwoWayPressureIndependent valDisChiWat( + redeclare final package Medium = Medium, + m_flow_nominal=pla.mChiWat_flow_nominal, + dpValve_nominal=1E4, + dpFixed_nominal=pla.dpChiWatSet_max - valDisChiWat.dpValve_nominal) + "Distribution system approximated by variable flow resistance" + annotation (Placement(transformation(extent={{-30,-150},{-50,-130}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ratFlo(table=[0,0,0; + 6,0,0; 10,0.3,0.1; 15,1,0.1; 24,0.1,0.1; 30,0.1,1; 39,1,0.3; 48,0.1,0.1; + 54,0.1,1; 63,0.1,0.3; 72,0,0; 78,0,1; 96,0,0], + timeScale=3600) + "Source signal: y[1] for cooling load, y[2] for heating load" + annotation (Placement(transformation(extent={{-220,170},{-200,190}}))); +equation + connect(TChiWatSupSet.y, pla.TChiWatSupSet) annotation (Line(points={{-198,20}, + {-34,20}}, color={0,0,127})); + connect(THeaWatSupSet.y, pla.THeaWatSupSet) annotation (Line(points={{-168,0}, + {-74,0},{-74,16},{-34,16}}, color={0,0,127})); + connect(dpChiWatSet_max.y, pla.dpChiWatSet) annotation (Line(points={{-198,-40}, + {-70,-40},{-70,12},{-34,12}},color={0,0,127})); + connect(dpHeaWatSet_max.y, pla.dpHeaWatSet) annotation (Line(points={{-168,-60}, + {-66,-60},{-66,8},{-34,8}}, color={0,0,127})); + + connect(weaDat.weaBus, pla.weaBus) annotation (Line( + points={{-200,120},{0,120},{0,30}}, + color={255,204,51}, + thickness=0.5)); + connect(pla.port_bSerHea, disHeaWat.port_a) annotation (Line(points={{30,0},{ + 60,0},{60,140},{12,140}}, color={0,127,255})); + connect(pla.port_bSerCoo, disChiWat.port_a) annotation (Line(points={{30,-4}, + {60,-4},{60,-140},{10,-140}},color={0,127,255})); + connect(THeaWatRet.y, disHeaWat.TSet) annotation (Line(points={{-168,80},{20,80}, + {20,148},{14,148}}, color={0,0,127})); + connect(TChiWatRet.y, disChiWat.TSet) annotation (Line(points={{-198,-100},{20, + -100},{20,-132},{12,-132}}, color={0,0,127})); + connect(u1.y[1], pla.u1Coo) annotation (Line(points={{-198,60},{-40,60},{-40,28}, + {-34,28}}, color={255,0,255})); + connect(disHeaWat.port_b, valDisHeaWat.port_a) + annotation (Line(points={{-8,140},{-30,140}}, color={0,127,255})); + connect(valDisHeaWat.port_b, pla.port_aSerHea) annotation (Line(points={{-50,140}, + {-60,140},{-60,0},{-30,0}}, color={0,127,255})); + connect(disChiWat.port_b, valDisChiWat.port_a) + annotation (Line(points={{-10,-140},{-30,-140}}, color={0,127,255})); + connect(valDisChiWat.port_b, pla.port_aSerCoo) annotation (Line(points={{-50,-140}, + {-60,-140},{-60,-4},{-30,-4}}, color={0,127,255})); + connect(ratFlo.y[2], valDisHeaWat.y) annotation (Line(points={{-198,180},{-40, + 180},{-40,152}}, color={0,0,127})); + connect(ratFlo.y[1], valDisChiWat.y) annotation (Line(points={{-198,180},{-80, + 180},{-80,-120},{-40,-120},{-40,-128}}, color={0,0,127})); + connect(u1.y[2], pla.u1Hea) annotation (Line(points={{-198,60},{-40,60},{-40, + 24},{-34,24}}, color={255,0,255})); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mos" + "Simulate and plot"), + experiment( + StopTime=345600, + Tolerance=1e-06), + Diagram(coordinateSystem(extent={{-240,-240},{240,240}})), + Documentation(info=" +

    +This model validates + +Buildings.Experimental.DHC.Plants.Combined.AllElectricCWStorage +over a four-day simulation period where the load profile is characterized by +high cooling loads and low heating loads during the first day, +concomitant high cooling and heating loads during the second day, +low cooling loads and high heating loads during the third day, +and no cooling loads (cooling disabled) and high heating loads +during the last day. +

    +", revisions=" +
      +
    • +February 24, 2023, by Antoine Gautier:
      +First implementation. +
    • +
    +")); +end AllElectricCWStorage; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Validation/package.mo b/Buildings/Experimental/DHC/Plants/Combined/Validation/package.mo new file mode 100644 index 00000000000..a708d489d62 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Validation/package.mo @@ -0,0 +1,10 @@ +within Buildings.Experimental.DHC.Plants.Combined; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

    +This package contains validation models. +

    +")); +end Validation; diff --git a/Buildings/Experimental/DHC/Plants/Combined/Validation/package.order b/Buildings/Experimental/DHC/Plants/Combined/Validation/package.order new file mode 100644 index 00000000000..563bdec055b --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/Validation/package.order @@ -0,0 +1 @@ +AllElectricCWStorage diff --git a/Buildings/Experimental/DHC/Plants/Combined/package.mo b/Buildings/Experimental/DHC/Plants/Combined/package.mo new file mode 100644 index 00000000000..d58f0974d94 --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/package.mo @@ -0,0 +1,11 @@ +within Buildings.Experimental.DHC.Plants; +package Combined "Package of models for central plants that provide heating and cooling" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

    +This package contains models for combined heating and cooling plants +used in DHC systems. +

    +")); +end Combined; diff --git a/Buildings/Experimental/DHC/Plants/Combined/package.order b/Buildings/Experimental/DHC/Plants/Combined/package.order new file mode 100644 index 00000000000..11dd5f03b7f --- /dev/null +++ b/Buildings/Experimental/DHC/Plants/Combined/package.order @@ -0,0 +1,5 @@ +AllElectricCWStorage +Controls +Subsystems +Examples +Validation diff --git a/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo b/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo index ac3500b2a4a..f06bc64890d 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo @@ -101,14 +101,14 @@ model ElectricChillerParallel annotation(Evaluate=true, Dialog(tab = "Advanced", group="Dynamics")); Modelica.Blocks.Interfaces.BooleanInput on "On signal of the plant" - annotation (Placement(transformation(extent={{-340,220},{-300,260}}), - iconTransformation(extent={{-342,202},{-302,242}}))); + annotation (Placement(transformation(extent={{-420,200},{-380,240}}), + iconTransformation(extent={{-340,200},{-300,240}}))); Modelica.Blocks.Interfaces.RealInput TCHWSupSet( final unit="K", displayUnit="degC") "Set point for chilled water supply temperature" - annotation (Placement(transformation(extent={{-340,100},{-300,140}}), - iconTransformation(extent={{-340,138},{-300,178}}))); + annotation (Placement(transformation(extent={{-420,100},{-380,140}}), + iconTransformation(extent={{-340,140},{-300,180}}))); Buildings.Applications.BaseClasses.Equipment.ElectricChillerParallel mulChiSys( final use_inputFilter=use_inputFilter, final per=fill( @@ -222,15 +222,15 @@ model ElectricChillerParallel Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( nin=4) "Total pump power" - annotation (Placement(transformation(extent={{260,150},{280,170}}))); + annotation (Placement(transformation(extent={{340,150},{360,170}}))); Buildings.Controls.OBC.CDL.Continuous.MultiSum totPFan( nin=2) "Total fan power" - annotation (Placement(transformation(extent={{260,190},{280,210}}))); + annotation (Placement(transformation(extent={{340,190},{360,210}}))); Buildings.Controls.OBC.CDL.Continuous.MultiSum totPCoo( nin=2) "Total cooling power" - annotation (Placement(transformation(extent={{260,230},{280,250}}))); + annotation (Placement(transformation(extent={{340,230},{360,250}}))); Buildings.Fluid.FixedResistances.Junction joiCHWRet( redeclare final package Medium=Medium, final m_flow_nominal=mCHW_flow_nominal .* {1,-1,1}, @@ -282,7 +282,8 @@ equation connect(cooTowWitByp.port_b,pumCW.port_a) annotation (Line(points={{-20,170},{60,170}},color={0,127,255})); connect(on,chiStaCon.on) - annotation (Line(points={{-320,240},{-280,240},{-280,213.75},{-201.25,213.75}}, + annotation (Line(points={{-400,220},{-220,220},{-220,213.75},{-201.25, + 213.75}}, color={255,0,255})); connect(pumCHW.port_b,mulChiSys.port_a2) annotation (Line(points={{-32,44},{40,44}}, color={0,127,255})); @@ -310,32 +311,33 @@ equation annotation (Line(points={{-179.375,210},{-160,210},{-160,174},{-42,174}}, color={255,0,255})); connect(weaBus.TWetBul,cooTowWitByp.TWetBul) - annotation (Line(points={{1,266},{0,266},{0,238},{-50,238},{-50,168},{-42,168}}, + annotation (Line(points={{0,380},{0,380},{0,238},{-50,238},{-50,168},{-42,168}}, color={255,204,51},thickness=0.5),Text(string="%first",index=-1, extent={{-6,3},{-6,3}},horizontalAlignment=TextAlignment.Right)); connect(port_aSerCoo,senTCHWRet.port_a) - annotation (Line(points={{-300,-40},{-270,-40}},color={0,127,255})); + annotation (Line(points={{-380,-40},{-270,-40}},color={0,127,255})); connect(senTCHWSup.port_b,port_bSerCoo) - annotation (Line(points={{160,-40},{300,-40}}, color={0,127,255})); + annotation (Line(points={{160,-40},{380,-40}}, color={0,127,255})); connect(TCHWSupSet,mulChiSys.TSet) - annotation (Line(points={{-320,120},{100,120},{100,50},{62,50}},color={0,0,127})); + annotation (Line(points={{-400,120},{100,120},{100,50},{62,50}},color={0,0,127})); connect(totPPum.y,PPum) - annotation (Line(points={{282,160},{320,160}},color={0,0,127})); + annotation (Line(points={{362,160},{400,160}},color={0,0,127})); connect(pumCW.P,totPPum.u[1:2]) - annotation (Line(points={{81,174},{240,174},{240,159.75},{258,159.75}}, + annotation (Line(points={{81,174},{240,174},{240,159.75},{338,159.75}}, color={0,0,127})); connect(pumCHW.P,totPPum.u[3:4]) - annotation (Line(points={{-31,48},{0,48},{0,0},{240,0},{240,160.75},{258,160.75}}, + annotation (Line(points={{-31,48},{0,48},{0,0},{240,0},{240,160.75},{338, + 160.75}}, color={0,0,127})); connect(totPFan.y,PFan) - annotation (Line(points={{282,200},{320,200}},color={0,0,127})); + annotation (Line(points={{362,200},{400,200}},color={0,0,127})); connect(cooTowWitByp.PFan,totPFan.u[1:2]) - annotation (Line(points={{-19,176},{-20,176},{-20,200},{258,200},{258,200.5}}, + annotation (Line(points={{-19,176},{-20,176},{-20,200},{338,200},{338,200.5}}, color={0,0,127})); connect(totPCoo.y,PCoo) - annotation (Line(points={{282,240},{320,240}},color={0,0,127})); + annotation (Line(points={{362,240},{400,240}},color={0,0,127})); connect(mulChiSys.P,totPCoo.u[1:2]) - annotation (Line(points={{39,52},{20,52},{20,240.5},{258,240.5}}, + annotation (Line(points={{39,52},{20,52},{20,240.5},{338,240.5}}, color={0,0,127})); connect(splCHWSup.port_3,senTCHWSup.port_a) annotation (Line(points={{130,-42},{130,-40},{140,-40}},color={0,127,255})); @@ -441,9 +443,5 @@ First implementation. points={{-62,-14},{-62,-14}}, lineColor={238,46,47}, fillColor={255,255,255}, - fillPattern=FillPattern.Solid)}), - Diagram( - coordinateSystem( - preserveAspectRatio=false, - extent={{-300,-300},{300,300}}))); + fillPattern=FillPattern.Solid)})); end ElectricChillerParallel; diff --git a/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo b/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo index 884bb7dd091..df5de431f91 100644 --- a/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo +++ b/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo @@ -28,9 +28,9 @@ model SewageHeatRecovery displayUnit="degC") "Sewage water temperature" annotation (Placement(transformation( - extent={{-40,-40},{40,40}}, + extent={{-20,-20},{20,20}}, rotation=0, - origin={-340,220}), iconTransformation( + origin={-400,240}), iconTransformation( extent={{-40,-40},{40,40}}, rotation=0, origin={-340,220}))); @@ -38,9 +38,9 @@ model SewageHeatRecovery final unit="kg/s") "Pumps mass flow rate" annotation (Placement(transformation( - extent={{-40,-40},{40,40}}, + extent={{-20,-20},{20,20}}, rotation=0, - origin={-340,140}),iconTransformation( + origin={-400,160}),iconTransformation( extent={{-40,-40},{40,40}}, rotation=0, origin={-340,140}))); @@ -118,22 +118,22 @@ model SewageHeatRecovery annotation (Placement(transformation(extent={{260,150},{280,170}}))); equation connect(senTSewOut.port_b, souSew.ports[1]) - annotation (Line(points={{-46,20},{-60,20},{-60,78}}, color={0,127,255})); + annotation (Line(points={{-46,20},{-60,20},{-60,75}}, color={0,127,255})); connect(souSew.ports[2], pumSew.port_a) - annotation (Line(points={{-60,74},{-60,80},{30,80}}, + annotation (Line(points={{-60,77},{-60,80},{30,80}}, color={0,127,255})); - connect(souSew.T_in, TSewWat) annotation (Line(points={{-82,80},{-100,80},{-100, - 220},{-340,220}}, + connect(souSew.T_in, TSewWat) annotation (Line(points={{-82,80},{-100,80},{ + -100,240},{-400,240}}, color={0,0,127})); connect(mPum_flow, pumSew.m_flow_in) - annotation (Line(points={{-340,140},{40,140},{40,92}}, + annotation (Line(points={{-400,160},{40,160},{40,92}}, color={0,0,127})); connect(pumSew.port_b, hex.port_a1) annotation (Line(points={{50,80},{60,80}, {60,20},{10,20}}, color={0,127,255})); connect(hex.port_b1, senTSewOut.port_a) annotation (Line(points={{-10,20},{ -34,20}}, color={0,127,255})); connect(mPum_flow, pumDis.m_flow_in) - annotation (Line(points={{-340,140},{80,140},{80,-28}}, + annotation (Line(points={{-400,160},{80,160},{80,-28}}, color={0,0,127})); connect(senDifEntFlo.dH_flow, dH_flow) annotation (Line(points={{3,-28},{3, -78},{258,-78},{258,80},{320,80}}, @@ -142,19 +142,21 @@ equation 0},{-20,0},{-20,8},{-10,8}}, color={0,127,255})); connect(hex.port_b2, senDifEntFlo.port_a1) annotation (Line(points={{10,8},{20, 8},{20,0},{6,0},{6,-6}}, color={0,127,255})); - connect(port_aSerAmb, senDifEntFlo.port_a2) annotation (Line(points={{-300,40}, + connect(port_aSerAmb, senDifEntFlo.port_a2) annotation (Line(points={{-380,40}, {-280,40},{-280,-40},{-6,-40},{-6,-26}}, color={0,127,255})); connect(senDifEntFlo.port_b1, pumDis.port_a) annotation (Line(points={{6,-26},{6,-40},{70,-40}}, color={0,127,255})); connect(pumDis.port_b, port_bSerAmb) annotation (Line(points={{90,-40},{280, - -40},{280,40},{300,40}}, + -40},{280,40},{380,40}}, color={0,127,255})); connect(sumPPum.y, PPum) annotation (Line(points={{282,160},{294,160},{294, - 160},{320,160}}, color={0,0,127})); + 160},{400,160}}, color={0,0,127})); connect(pumSew.P, sumPPum.u[1]) annotation (Line(points={{51,89},{238,89},{ - 238,161},{258,161}}, color={0,0,127})); + 238,159.5},{258,159.5}}, + color={0,0,127})); connect(pumDis.P, sumPPum.u[2]) annotation (Line(points={{91,-31},{240,-31},{ - 240,159},{258,159}}, color={0,0,127})); + 240,160.5},{258,160.5}}, + color={0,0,127})); annotation ( DefaultComponentName="pla", Icon(coordinateSystem(preserveAspectRatio=false), diff --git a/Buildings/Experimental/DHC/Plants/package.order b/Buildings/Experimental/DHC/Plants/package.order index f00cdd9c49f..6c2208451b5 100644 --- a/Buildings/Experimental/DHC/Plants/package.order +++ b/Buildings/Experimental/DHC/Plants/package.order @@ -1,3 +1,4 @@ +Combined Cooling Heating Reservoir diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.png b/Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.png new file mode 100644 index 0000000000000000000000000000000000000000..6c2bc561f315e920957bf7c7b9d5dfe9f8cdd1bc GIT binary patch literal 242030 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

    ajO$!h0C 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.svg b/Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.svg new file mode 100644 index 00000000000..5690a8e4a4e --- /dev/null +++ b/Buildings/Resources/Images/Experimental/DHC/Plants/Combined/AllElectricCWStorage.svg @@ -0,0 +1,10988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + T + + + + + + + T + + + + + + + + + + + + + + + + + FM + + + + + + + T + + + + + Signals to/from all units + Direct HR: HRC condenser entering temperature + + + Signals to/from all units + + + + FM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FM + + + + + + + FM + + + + + + + + + + + + Feuille.4 + + + + + + + + + + + + + + + + + + + EVAP + + + COND + + + + + + + + + + + + + + + + + + + + + Feuille.4 + + + + + + + + + + + + + + + + + + + EVAP + + + COND + + + + + + + Feuille.4 + + + + + + + + + + + + + + + + + + + + EVAP + + + COND + + + + + + + + + 0/1 + + + + + Feuille.4 + + + + + + + + + + + + + + + + + + + + + + + + coo + + chi + + valConWatEvaMix + tan + valBypTan + + + + + + DP + + + + + + + + DP + + HWS + CHWR + CHWS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VFD + + + VFD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VFD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VFD + + + VFD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VFD + + + VFD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MS + + + + + + + + + + + MS + + VFD + + + + + + VFD + + + + + + + VFD + + HexCoo + + + + FM + + + + + + + FM + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VFD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + valChiWatMinByp + chi.valEva.val[1] + chi.valEva.val[2] + heaPum.pum + + + + T + + + + + + T + + + + + + + + + + + + + + + T + + + + + + + + + + + + + + + + + + + + EVAP + + + COND + + + + + + + + + + + EVAP + + + COND + + + + + + + + + + + EVAP + + + COND + + + + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + T + + + + + + + + + + + + + VFD + + + + + FM + + + + + + + FM + + + + + + + FM + + + + + + + FM + + + + + + + FM + + + + + + + FM + + + + + + + T + + + + pumChiWat + heaPum + heaPum.pum + pumConWatCon + + + + + + + + + + + + + + + + + + + + + + + EVAP + + + COND + + + + + + + + + + T + + + + + FM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DP + + + + + + + T + + + + + + + + DP + + + + + + + + + + + + + + + + T + + + + + + + T + + + + + + T + + + + min + + + + + + FM + + + + DO + AO + DI + AI + + + + + + + + + + + + + + FM + + + + + + + + T + + + + Cooling tower loop + + + + + HRC evaporator entering temperature + CWE pumps + + + + + + + DO + AO + DI + AI + + + + + FM + + + + Heating or direct HR: HRC evaporator leaving temperatureCooling: Fixed valve position + + + + + + + DO + AO + DI + AI + DO + AO + DI + AI + + + + + + + + + CWC pumps + + + + + T + + + + + + + T + + + + + + + T + + + + + + + + + + + + + + Charge Assist: CW return temperatureTank Charge: chiller condenser leaving temperatureHeat Rejection: design chiller condenser flow + + + pumConWatEva + chiHea.valCon[1] + pumConWatCoo + HRC in direct HR: chiller evaporator flowOtherwise: fixed valve position + + + CHW minimum flow + + CHW pumps + + + + + + + + HW minimum flow + HW pumps + + + + + HWR + valHeaWatMinByp + pumHeaWat + + + + + + + + + Condenser loop operating mode + + + + Tank cycle flag + + + + + + + + + Heating or direct HR: 100 % openCooling: Similar as chiller condenser valve control + + Signals from all units + Signals from all units + Signals to/from all units + + + + + + + chiHea.valEva[1] + chiHea.valConSwi[1] + + + + + + + + + + + Plant staging + DO + AO + DI + AI + + + + + + + + + + + + + T + + + + + + + + + T + + + + + + * + + + + + * + + + + Signals to/from all units + Signals to/from all units + + + + + * + + + + + + + chi.valCon.val[1] + + chiHea.valEvaSwi[1] + chi.valCon.val[2] + + + + + + + + + chiHea.chi[1] + chiHea.valCon[3] + chiHea.valEva[3] + chiHea.valConSwi[3] + chiHea.valEvaSwi[3] + chiHea.chi[3] + CW bypass valve + Charge Assist and chiller condenser isolation valves closed: CW return temperatureOtherwise: Valve closed + + + Heat pumps + Charge Assist: Enabled with supplytemperature depending on active tank cycleOtherwise: Disabled + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Direct.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Direct.txt new file mode 100644 index 00000000000..d10fc245f89 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Direct.txt @@ -0,0 +1,24 @@ +last-generated=2023-05-09 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "14", + "numerical Jacobians": "0" +} +time=[0e+00, 8.64e+04] +heaETS.senTDisSup.T=[2.931499938964844e+02, 3.234003295898438e+02, 3.236470336914062e+02, 3.238858337402344e+02, 3.241130065917969e+02, 3.243250122070312e+02, 3.245184936523438e+02, 3.246904296875e+02, 3.248380737304688e+02, 3.249591369628906e+02, 3.250516967773438e+02, 3.251142883300781e+02, 3.251459655761719e+02, 3.251461486816406e+02, 3.251149291992188e+02, 3.25052734375e+02, 3.249605407714844e+02, 3.2483984375e+02, 3.246925354003906e+02, 3.245209045410156e+02, 3.243276977539062e+02, 3.241159057617188e+02, 3.23888916015625e+02, 3.236502685546875e+02, 3.234037780761719e+02, 3.231532592773438e+02, 3.229027404785156e+02, 3.226560668945312e+02, 3.224171752929688e+02, 3.221898193359375e+02, 3.219776306152344e+02, 3.217838745117188e+02, 3.216116638183594e+02, 3.214636840820312e+02, 3.213422546386719e+02, 3.212492980957031e+02, 3.211863098144531e+02, 3.211542663574219e+02, 3.211536254882812e+02, 3.211844787597656e+02, 3.212462768554688e+02, 3.213380432128906e+02, 3.214583740234375e+02, 3.216053771972656e+02, 3.217766723632812e+02, 3.219696350097656e+02, 3.2218115234375e+02, 3.22407958984375e+02, 3.226464538574219e+02, 3.228928833007812e+02, 3.231433715820312e+02, 3.233940124511719e+02, 3.236407775878906e+02, 3.238798217773438e+02, 3.241073608398438e+02, 3.243197937011719e+02, 3.245137939453125e+02, 3.246863098144531e+02, 3.248346252441406e+02, 3.249563903808594e+02, 3.250497131347656e+02, 3.251130981445312e+02, 3.251455383300781e+02, 3.251465454101562e+02, 3.251160888671875e+02, 3.250546875e+02, 3.249632568359375e+02, 3.2484326171875e+02, 3.246965637207031e+02, 3.245255126953125e+02, 3.243328247070312e+02, 3.241214599609375e+02, 3.238948059082031e+02, 3.236564331054688e+02, 3.234100646972656e+02, 3.231595764160156e+02, 3.229089660644531e+02, 3.226621704101562e+02, 3.224230346679688e+02, 3.221953430175781e+02, 3.219827270507812e+02, 3.217884826660156e+02, 3.216156921386719e+02, 3.21467041015625e+02, 3.213449401855469e+02, 3.212512817382812e+02, 3.211875305175781e+02, 3.211546630859375e+02, 3.211532592773438e+02, 3.211833190917969e+02, 3.212443542480469e+02, 3.213354187011719e+02, 3.21455078125e+02, 3.216014099121094e+02, 3.217721557617188e+02, 3.219646301269531e+02, 3.221757507324219e+02, 3.224022216796875e+02, 3.226405029296875e+02, 3.228867797851562e+02, 3.2313720703125e+02] +heaETS.senTBuiSup.T=[2.931499938964844e+02, 3.233981018066406e+02, 3.231710205078125e+02, 3.231272277832031e+02, 3.231352844238281e+02, 3.231557922363281e+02, 3.231557312011719e+02, 3.231563415527344e+02, 3.231555786132812e+02, 3.231544799804688e+02, 3.231533203125e+02, 3.231521606445312e+02, 3.231510009765625e+02, 3.231498413085938e+02, 3.231487426757812e+02, 3.231476745605469e+02, 3.231466674804688e+02, 3.231458435058594e+02, 3.231463928222656e+02, 3.231463317871094e+02, 3.231460876464844e+02, 3.231457214355469e+02, 3.231452941894531e+02, 3.231447143554688e+02, 3.231436462402344e+02, 3.231377868652344e+02, 3.229037780761719e+02, 3.226571350097656e+02, 3.22418212890625e+02, 3.221908569335938e+02, 3.219785766601562e+02, 3.217847595214844e+02, 3.216124572753906e+02, 3.2146435546875e+02, 3.213428344726562e+02, 3.21249755859375e+02, 3.211865844726562e+02, 3.211543579101562e+02, 3.21153564453125e+02, 3.211841735839844e+02, 3.212457580566406e+02, 3.213373413085938e+02, 3.214574584960938e+02, 3.216041870117188e+02, 3.217752990722656e+02, 3.219679870605469e+02, 3.221793212890625e+02, 3.224059143066406e+02, 3.226441955566406e+02, 3.228904418945312e+02, 3.231407470703125e+02, 3.233919372558594e+02, 3.232535095214844e+02, 3.231431884765625e+02, 3.231436462402344e+02, 3.231445617675781e+02, 3.231452026367188e+02, 3.231456604003906e+02, 3.231460266113281e+02, 3.231463623046875e+02, 3.231468811035156e+02, 3.231482238769531e+02, 3.231479187011719e+02, 3.231472778320312e+02, 3.231463928222656e+02, 3.231453552246094e+02, 3.231441345214844e+02, 3.231427917480469e+02, 3.23141357421875e+02, 3.231398620605469e+02, 3.231384582519531e+02, 3.231393432617188e+02, 3.231400756835938e+02, 3.231398620605469e+02, 3.231388854980469e+02, 3.2313134765625e+02, 3.229093322753906e+02, 3.226625061035156e+02, 3.224233703613281e+02, 3.221956787109375e+02, 3.219830322265625e+02, 3.217887573242188e+02, 3.216159362792969e+02, 3.214672546386719e+02, 3.213451232910156e+02, 3.212514038085938e+02, 3.211875915527344e+02, 3.211546936035156e+02, 3.211532592773438e+02, 3.211832580566406e+02, 3.212442321777344e+02, 3.213352355957031e+02, 3.21454833984375e+02, 3.216011352539062e+02, 3.217718200683594e+02, 3.219642333984375e+02, 3.221753234863281e+02, 3.224017639160156e+02, 3.226400146484375e+02, 3.228862609863281e+02, 3.231366882324219e+02] +heaETS.senTBuiRet.T=[2.931499938964844e+02, 3.132987976074219e+02, 3.131961059570312e+02, 3.130978393554688e+02, 3.131135559082031e+02, 3.131565246582031e+02, 3.131564636230469e+02, 3.131571044921875e+02, 3.131563415527344e+02, 3.131552429199219e+02, 3.131541137695312e+02, 3.131529541015625e+02, 3.131517944335938e+02, 3.131506652832031e+02, 3.131495361328125e+02, 3.131484985351562e+02, 3.131474914550781e+02, 3.131466674804688e+02, 3.13147216796875e+02, 3.131471862792969e+02, 3.131469421386719e+02, 3.131465759277344e+02, 3.131461486816406e+02, 3.131455993652344e+02, 3.131445617675781e+02, 3.131388854980469e+02, 3.129092712402344e+02, 3.126626892089844e+02, 3.124237976074219e+02, 3.121963806152344e+02, 3.119840087890625e+02, 3.117900390625e+02, 3.116175231933594e+02, 3.114691772460938e+02, 3.113473510742188e+02, 3.1125390625e+02, 3.111903381347656e+02, 3.111576843261719e+02, 3.111564025878906e+02, 3.111865234375e+02, 3.112475891113281e+02, 3.113385925292969e+02, 3.114581604003906e+02, 3.116043701171875e+02, 3.1177490234375e+02, 3.119671020507812e+02, 3.121779479980469e+02, 3.124040832519531e+02, 3.126419982910156e+02, 3.128879089355469e+02, 3.131380004882812e+02, 3.133669128417969e+02, 3.1318603515625e+02, 3.131303100585938e+02, 3.131322326660156e+02, 3.131343994140625e+02, 3.131361083984375e+02, 3.131373901367188e+02, 3.131384582519531e+02, 3.13139404296875e+02, 3.131404113769531e+02, 3.131422119140625e+02, 3.131422729492188e+02, 3.131419677734375e+02, 3.131413879394531e+02, 3.131405944824219e+02, 3.131396179199219e+02, 3.131384887695312e+02, 3.131372680664062e+02, 3.131359558105469e+02, 3.131347045898438e+02, 3.131357421875e+02, 3.131366271972656e+02, 3.131365356445312e+02, 3.131356811523438e+02, 3.131283874511719e+02, 3.1291162109375e+02, 3.126648254394531e+02, 3.124256591796875e+02, 3.121979370117188e+02, 3.119852294921875e+02, 3.117908935546875e+02, 3.116180114746094e+02, 3.114692687988281e+02, 3.113470153808594e+02, 3.11253173828125e+02, 3.111892395019531e+02, 3.111562194824219e+02, 3.111546020507812e+02, 3.111844787597656e+02, 3.112453002929688e+02, 3.11336181640625e+02, 3.114556274414062e+02, 3.11601806640625e+02, 3.117723693847656e+02, 3.119646911621094e+02, 3.121756591796875e+02, 3.124020385742188e+02, 3.126401977539062e+02, 3.128864440917969e+02, 3.131368408203125e+02] +heaETS.senTDisRet.T=[2.931499938964844e+02, 3.132964782714844e+02, 3.132204895019531e+02, 3.130977478027344e+02, 3.13113525390625e+02, 3.131565551757812e+02, 3.131564636230469e+02, 3.131571044921875e+02, 3.131563415527344e+02, 3.131552429199219e+02, 3.131541137695312e+02, 3.131529541015625e+02, 3.131517944335938e+02, 3.131506652832031e+02, 3.131495361328125e+02, 3.131484985351562e+02, 3.131474914550781e+02, 3.131466674804688e+02, 3.13147216796875e+02, 3.131471862792969e+02, 3.131469421386719e+02, 3.131465759277344e+02, 3.131461486816406e+02, 3.131455993652344e+02, 3.131445617675781e+02, 3.131389465332031e+02, 3.129107055664062e+02, 3.126641845703125e+02, 3.1242529296875e+02, 3.121978454589844e+02, 3.119854431152344e+02, 3.117914123535156e+02, 3.116188354492188e+02, 3.114703979492188e+02, 3.113484497070312e+02, 3.112548828125e+02, 3.111911926269531e+02, 3.111583557128906e+02, 3.111569213867188e+02, 3.111868591308594e+02, 3.112477416992188e+02, 3.113385620117188e+02, 3.114579162597656e+02, 3.116039428710938e+02, 3.117742919921875e+02, 3.1196630859375e+02, 3.121769409179688e+02, 3.124029235839844e+02, 3.126406555175781e+02, 3.128864440917969e+02, 3.131364440917969e+02, 3.133656005859375e+02, 3.131736755371094e+02, 3.131300964355469e+02, 3.131322326660156e+02, 3.131343994140625e+02, 3.131360778808594e+02, 3.131373901367188e+02, 3.131384582519531e+02, 3.131393737792969e+02, 3.131404113769531e+02, 3.131422119140625e+02, 3.131422729492188e+02, 3.131419677734375e+02, 3.131413879394531e+02, 3.131405944824219e+02, 3.131396484375e+02, 3.131385192871094e+02, 3.131372680664062e+02, 3.131359558105469e+02, 3.131347045898438e+02, 3.131357421875e+02, 3.131366271972656e+02, 3.131365356445312e+02, 3.131356811523438e+02, 3.131284484863281e+02, 3.129120788574219e+02, 3.126652526855469e+02, 3.124260864257812e+02, 3.121983642578125e+02, 3.119856567382812e+02, 3.117912902832031e+02, 3.116183776855469e+02, 3.114695739746094e+02, 3.113472900390625e+02, 3.1125341796875e+02, 3.11189453125e+02, 3.111563720703125e+02, 3.111547241210938e+02, 3.111845397949219e+02, 3.112453002929688e+02, 3.113361206054688e+02, 3.114555358886719e+02, 3.116016540527344e+02, 3.117721862792969e+02, 3.119644470214844e+02, 3.121754150390625e+02, 3.124017333984375e+02, 3.12639892578125e+02, 3.128861083984375e+02, 3.131365051269531e+02] +heaETS.port_aSerHea.m_flow=[5.041492113377899e-05, 5.640286803245544e-01, 1.071774959564209e+00, 1.556895732879639e+00, 2.019232749938965e+00, 2.054395437240601e+00, 2.002572059631348e+00, 1.956252813339233e+00, 1.915027976036072e+00, 1.879012107849121e+00, 1.84814441204071e+00, 1.822309374809265e+00, 1.801384210586548e+00, 1.785243391990662e+00, 1.773760676383972e+00, 1.766809701919556e+00, 1.764262437820435e+00, 1.766000986099243e+00, 1.772060394287109e+00, 1.781984210014343e+00, 1.795637965202332e+00, 1.812816381454468e+00, 1.833250522613525e+00, 1.856596112251282e+00, 1.882385492324829e+00, 1.909263610839844e+00, 1.166647434234619e+00, 1.137972354888916e+00, 1.109291672706604e+00, 1.080611109733582e+00, 1.051930546760559e+00, 1.023249864578247e+00, 9.945693016052246e-01, 9.658886790275574e-01, 9.3720805644989e-01, 9.08527433872223e-01, 8.798468112945557e-01, 8.511662483215332e-01, 8.22485625743866e-01, 7.93804943561554e-01, 7.651243209838867e-01, 7.364436984062195e-01, 7.077630758285522e-01, 6.79082453250885e-01, 6.504018306732178e-01, 6.217211484909058e-01, 5.930405259132385e-01, 5.643599033355713e-01, 5.356792211532593e-01, 5.06998598575592e-01, 4.783179461956024e-01, 6.012323498725891e-01, 6.99383020401001e-01, 7.914302349090576e-01, 8.884920477867126e-01, 9.829083085060127e-01, 1.07552719116211e+00, 1.167198061943054e+00, 1.258763194084167e+00, 1.351064085960388e+00, 1.444955706596375e+00, 1.54134202003479e+00, 1.640726685523987e+00, 1.744074821472168e+00, 1.85221529006958e+00, 1.965959310531616e+00, 2.08611536026001e+00, 2.213484287261963e+00, 2.348851919174196e+00, 2.492976903915404e+00, 2.646591663360594e+00, 2.810894012451172e+00, 2.985864639282227e+00, 3.171636343002319e+00, 3.368395328521729e+00, 3.573875188827515e+00, 3.537745475769043e+00, 3.489944934844971e+00, 3.442144155502319e+00, 3.394343376159668e+00, 3.346542835235596e+00, 3.298742055892944e+00, 3.250941276550293e+00, 3.203140497207642e+00, 3.155339956283569e+00, 3.107539176940918e+00, 3.059738397598267e+00, 3.011937618255615e+00, 2.964136838912964e+00, 2.916336059570312e+00, 2.868535280227661e+00, 2.82073450088501e+00, 2.772933721542358e+00, 2.725132942199707e+00, 2.677332162857056e+00, 2.629531383514404e+00, 2.581730604171753e+00, 2.533929824829102e+00, 2.48612904548645e+00, 2.43832802772522e+00, 2.390527248382568e+00] +heaETS.ports_aHeaWat[1].m_flow=[0e+00, 5.63978910446167e-01, 1.123908042907715e+00, 1.674659252166748e+00, 2.216232776641846e+00, 2.294625997543335e+00, 2.275505542755127e+00, 2.256385087966919e+00, 2.237264633178711e+00, 2.218144178390503e+00, 2.199023723602295e+00, 2.179903268814087e+00, 2.160782814025879e+00, 2.141662359237671e+00, 2.122541904449463e+00, 2.103421449661255e+00, 2.084300994873047e+00, 2.065180540084839e+00, 2.046060085296631e+00, 2.026939630508423e+00, 2.007819175720215e+00, 1.988698601722717e+00, 1.969578146934509e+00, 1.950457692146301e+00, 1.931337237358093e+00, 1.912216782569885e+00, 1.166604399681091e+00, 1.137923717498779e+00, 1.109243035316467e+00, 1.080562353134155e+00, 1.051881551742554e+00, 1.023200869560242e+00, 9.945202469825745e-01, 9.658395648002625e-01, 9.371588826179503e-01, 9.084781408309938e-01, 8.797974586486816e-01, 8.511167764663696e-01, 8.224360942840576e-01, 7.937554121017456e-01, 7.650747299194336e-01, 7.363940477371216e-01, 7.077133655548096e-01, 6.790326833724976e-01, 6.503520011901855e-01, 6.216712594032288e-01, 5.929905772209167e-01, 5.643098950386047e-01, 5.356292128562927e-01, 5.069485306739807e-01, 4.782678484916687e-01, 6.011835336685181e-01, 7.254664897918701e-01, 8.497495055198669e-01, 9.74032461643219e-01, 1.098315477371217e+00, 1.222598433494569e+00, 1.346881389617919e+00, 1.471164345741272e+00, 1.595447421073914e+00, 1.719730377197266e+00, 1.844013333320618e+00, 1.96829628944397e+00, 2.092579364776611e+00, 2.216862201690674e+00, 2.341145277023315e+00, 2.465428352355957e+00, 2.58971118927002e+00, 2.713994264602662e+00, 2.838277101516723e+00, 2.962560176849364e+00, 3.086843252182007e+00, 3.211126089096069e+00, 3.335409164428711e+00, 3.459692001342773e+00, 3.583974838256836e+00, 3.537712097167969e+00, 3.489911079406738e+00, 3.442109823226929e+00, 3.394308805465698e+00, 3.346507549285889e+00, 3.298706531524658e+00, 3.250905275344849e+00, 3.203104257583618e+00, 3.155303001403809e+00, 3.107501745223999e+00, 3.059700727462769e+00, 3.011899471282959e+00, 2.964098453521729e+00, 2.916297197341919e+00, 2.868496179580688e+00, 2.820694923400879e+00, 2.772893905639648e+00, 2.725092649459839e+00, 2.677291631698608e+00, 2.629490375518799e+00, 2.581689119338989e+00, 2.533888101577759e+00, 2.486086845397949e+00, 2.438285827636719e+00, 2.390484571456909e+00] +heaETS.cheVal.m_flow=[-5.041492113377899e-05, -4.976411946699955e-05, 5.21329790353775e-02, 1.177634671330452e-01, 1.969999223947525e-01, 2.402306199073792e-01, 2.729334831237793e-01, 3.001323044300079e-01, 3.22236567735672e-01, 3.391320109367371e-01, 3.508792817592621e-01, 3.57593834400177e-01, 3.593985140323639e-01, 3.564189076423645e-01, 3.487811982631683e-01, 3.366117179393768e-01, 3.200385570526123e-01, 2.991794645786285e-01, 2.739996016025543e-01, 2.449553906917572e-01, 2.121811360120773e-01, 1.758822798728943e-01, 1.363276839256287e-01, 9.38616469502449e-02, 4.895182326436043e-02, 2.953223418444395e-03, -4.304055983084254e-05, -4.865122173214331e-05, -4.873900252277963e-05, -4.882454231847078e-05, -4.890784475719556e-05, -4.898890256299637e-05, -4.906772301183082e-05, -4.91443024657201e-05, -4.921864092466421e-05, -4.929073838866316e-05, -4.936059485771693e-05, -4.942821033182554e-05, -4.949358481098898e-05, -4.955672193318605e-05, -4.961761442245916e-05, -4.96762695547659e-05, -4.973268369212747e-05, -4.978685319656506e-05, -4.98387853440363e-05, -4.988847649656236e-05, -4.993592665414326e-05, -4.998113945475779e-05, -5.002410762244835e-05, -5.006483479519375e-05, -5.010332461097278e-05, -4.885004454990849e-05, 2.608347125351429e-02, 5.831924825906754e-02, 8.554044365882874e-02, 1.154071539640429e-01, 1.4707125723362e-01, 1.796834021806714e-01, 2.124011665582657e-01, 2.443832904100418e-01, 2.747746706008911e-01, 3.026712834835052e-01, 3.275696635246277e-01, 3.485044836997986e-01, 3.646470010280609e-01, 3.751859366893768e-01, 3.793128430843353e-01, 3.762268722057343e-01, 3.651422560214995e-01, 3.453003764152529e-01, 3.159686326980594e-01, 2.759492695331573e-01, 2.252614051103592e-01, 1.637728810310364e-01, 9.12967324256897e-02, 1.009981799870729e-02, -3.336901136208326e-05, -3.382664726814255e-05, -3.42779494530987e-05, -3.472302341833711e-05, -3.516187280183658e-05, -3.559450124157593e-05, -3.602090509957634e-05, -3.644108437583782e-05, -3.685503907036036e-05, -3.726277282112278e-05, -3.766427835216746e-05, -3.805956293945201e-05, -3.844862294499762e-05, -3.883145836880431e-05, -3.920806921087205e-05, -3.957845547120087e-05, -3.994262078776956e-05, -4.030056152259931e-05, -4.065227403771132e-05, -4.099776560906321e-05, -4.133703623665497e-05, -4.167007864452899e-05, -4.199690010864288e-05, -4.231749335303903e-05, -4.263186565367505e-05] +heaETS.conVal.y=[1e+00, 9.436479210853577e-01, 5.471596121788025e-01, 6.343891620635986e-01, 6.956332921981812e-01, 6.960726380348206e-01, 6.86751127243042e-01, 6.770187616348267e-01, 6.672693490982056e-01, 6.59026563167572e-01, 6.523984670639038e-01, 6.474286913871765e-01, 6.441277861595154e-01, 6.42480731010437e-01, 6.424502730369568e-01, 6.43976628780365e-01, 6.469743847846985e-01, 6.513098478317261e-01, 6.556189656257629e-01, 6.595959067344666e-01, 6.638321280479431e-01, 6.685268878936768e-01, 6.737905740737915e-01, 6.797683238983154e-01, 6.868646740913391e-01, 6.979257464408875e-01, 8.30072283744812e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.462421894073486e-01, 4.344042241573334e-01, 4.648256599903107e-01, 4.923007488250732e-01, 5.160580873489382e-01, 5.370754003524781e-01, 5.559868216514586e-01, 5.73229193687439e-01, 5.890735387802124e-01, 6.035481095314026e-01, 6.159868240356445e-01, 6.27042829990387e-01, 6.383877396583557e-01, 6.504030823707581e-01, 6.634203791618347e-01, 6.77727222442627e-01, 6.935662031173706e-01, 7.111273407936097e-01, 7.305276393890379e-01, 7.517765164375303e-01, 7.736384272575378e-01, 7.932217121124268e-01, 8.125009536743164e-01, 8.324742913246155e-01, 8.565930128097534e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +heaETS.Q_flow=[0e+00, 2.3843990234375e+04, 4.67557265625e+04, 7.02740234375e+04, 9.29287578125e+04, 9.59995546875e+04, 9.5199609375e+04, 9.43997890625e+04, 9.35996015625e+04, 9.27996484375e+04, 9.19997109375e+04, 9.11997734375e+04, 9.039984375e+04, 8.95999140625e+04, 8.87999765625e+04, 8.80000390625e+04, 8.72001015625e+04, 8.64002890625e+04, 8.5600390625e+04, 8.480040625e+04, 8.40004296875e+04, 8.3200421875e+04, 8.24004296875e+04, 8.16004140625e+04, 8.08005e+04, 7.999784375e+04, 4.877352734375e+04, 4.7574140625e+04, 4.637515624999999e+04, 4.517658203125e+04, 4.397836328125e+04, 4.278048828125e+04, 4.158291796875e+04, 4.03856171875e+04, 3.918853515624999e+04, 3.799164453125001e+04, 3.67948828125e+04, 3.559819921875e+04, 3.4401546875e+04, 3.32048671875e+04, 3.2008103515625e+04, 3.081121875e+04, 2.96141640625e+04, 2.841688671875e+04, 2.7219337890625e+04, 2.602146875e+04, 2.482326953125e+04, 2.362471484375e+04, 2.24257890625e+04, 2.1226453125e+04, 2.002666796875e+04, 2.5227001953125e+04, 3.0629015625e+04, 3.55960546875e+04, 4.0799484375e+04, 4.599983593750004e+04, 5.119975781250004e+04, 5.639978906249996e+04, 6.159980859375e+04, 6.67998359375e+04, 7.2e+04, 7.719990625e+04, 8.23999375e+04, 8.759996875e+04, 9.2800015625e+04, 9.80000546875e+04, 1.032001015625e+05, 1.084001796875e+05, 1.13600234375e+05, 1.18799796875e+05, 1.240003671875e+05, 1.29200703125e+05, 1.344005e+05, 1.3960040625e+05, 1.44800546875e+05, 1.4999671875e+05, 1.479735e+05, 1.45974109375e+05, 1.43975140625e+05, 1.41976546875e+05, 1.39978328125e+05, 1.379804375e+05, 1.35982875e+05, 1.339855625e+05, 1.319885e+05, 1.299916015625e+05, 1.279948359375e+05, 1.2599815625e+05, 1.240015078125e+05, 1.22004828125e+05, 1.200080859375e+05, 1.18011203125e+05, 1.160141484375e+05, 1.14016875e+05, 1.12019328125e+05, 1.10021484375e+05, 1.08023296875e+05, 1.060247421875e+05, 1.040258046875e+05, 1.02026453125e+05, 1.000266875e+05] +heaETS.Q=[0e+00, 1.2344129e+07, 4.3048872e+07, 9.38294e+07, 1.64360304e+08, 2.47373952e+08, 3.29972e+08, 4.118789440000001e+08, 4.93094624e+08, 5.73619072e+08, 6.53452416e+08, 7.32594624e+08, 8.11045632e+08, 8.88805504e+08, 9.658743040000001e+08, 1.042251904e+09, 1.117938304e+09, 1.192932864e+09, 1.267235072e+09, 1.340848128e+09, 1.413770112e+09, 1.486000896e+09, 1.557540352e+09, 1.628388736e+09, 1.69854592e+09, 1.768011392e+09, 1.810672e+09, 1.852294144e+09, 1.892880128e+09, 1.932430464e+09, 1.970945408e+09, 2.008425216e+09, 2.044870144e+09, 2.080280576e+09, 2.114656512e+09, 2.147998464e+09, 2.180306176e+09, 2.211579904e+09, 2.241819904e+09, 2.27102592e+09, 2.299197952e+09, 2.326335744e+09, 2.352439552e+09, 2.37750912e+09, 2.401543936e+09, 2.424544e+09, 2.4465088e+09, 2.467438592e+09, 2.487332352e+09, 2.50619008e+09, 2.52401152e+09, 2.543559168e+09, 2.567561728e+09, 2.596067328e+09, 2.629071872e+09, 2.666569216e+09, 2.70855936e+09, 2.755042304e+09, 2.806018048e+09, 2.861486848e+09, 2.921448448e+09, 2.985902848e+09, 3.054849792e+09, 3.128289792e+09, 3.206222592e+09, 3.288648192e+09, 3.375566848e+09, 3.466978048e+09, 3.562882304000001e+09, 3.663279103999999e+09, 3.768168959999999e+09, 3.877551872e+09, 3.991427584e+09, 4.109796096e+09, 4.232657152e+09, 4.360010752e+09, 4.488726528e+09, 4.615711744e+09, 4.740969984e+09, 4.864501248e+09, 4.986305536e+09, 5.106383872e+09, 5.224735744e+09, 5.341362176e+09, 5.456263168e+09, 5.569438208e+09, 5.68088832e+09, 5.790613504e+09, 5.898613248e+09, 6.004888064e+09, 6.10943744e+09, 6.212261888e+09, 6.313360896e+09, 6.412734464e+09, 6.51038208e+09, 6.606303744e+09, 6.700498944e+09, 6.79296768e+09, 6.883709952e+09, 6.972724224e+09, 7.06001152e+09] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Indirect.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Indirect.txt new file mode 100644 index 00000000000..2526eb293a0 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_EnergyTransferStations_Heating_Examples_Indirect.txt @@ -0,0 +1,29 @@ +last-generated=2023-05-04 +statistics-initialization= +{ + "linear": "0", + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "11", + "numerical Jacobians": "0" +} +time=[0e+00, 8.64e+04] +heaETS.senTDisSup.T=[2.931499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02, 3.281499938964844e+02] +heaETS.senTDisRet.T=[2.931499938964844e+02, 3.255582885742188e+02, 3.26948974609375e+02, 3.276083984375e+02, 3.27920654296875e+02, 3.262579040527344e+02, 3.221266174316406e+02, 3.219113464355469e+02, 3.215403747558594e+02, 3.211888122558594e+02, 3.208557434082031e+02, 3.20539306640625e+02, 3.202377014160156e+02, 3.199491882324219e+02, 3.196723327636719e+02, 3.194058837890625e+02, 3.191487731933594e+02, 3.188999938964844e+02, 3.186588134765625e+02, 3.184245300292969e+02, 3.181964416503906e+02, 3.179740905761719e+02, 3.177568359375e+02, 3.175446472167969e+02, 3.173365173339844e+02, 3.171325073242188e+02, 3.165313415527344e+02, 3.165029296875e+02, 3.1647412109375e+02, 3.164447021484375e+02, 3.164147033691406e+02, 3.16384033203125e+02, 3.163526916503906e+02, 3.163206481933594e+02, 3.16287841796875e+02, 3.162542419433594e+02, 3.162198486328125e+02, 3.161845703125e+02, 3.161483459472656e+02, 3.161111755371094e+02, 3.160729370117188e+02, 3.160335998535156e+02, 3.159931030273438e+02, 3.159513244628906e+02, 3.15908203125e+02, 3.158636474609375e+02, 3.158175048828125e+02, 3.157696838378906e+02, 3.157198791503906e+02, 3.156667785644531e+02, 3.156087341308594e+02, 3.157703552246094e+02, 3.159678039550781e+02, 3.161401062011719e+02, 3.162927551269531e+02, 3.164301452636719e+02, 3.165552978515625e+02, 3.1667041015625e+02, 3.167770690917969e+02, 3.168765563964844e+02, 3.169698486328125e+02, 3.170576782226562e+02, 3.171407165527344e+02, 3.172195129394531e+02, 3.172944641113281e+02, 3.173659973144531e+02, 3.174343872070312e+02, 3.174999694824219e+02, 3.175629272460938e+02, 3.176234436035156e+02, 3.176817932128906e+02, 3.177380981445312e+02, 3.1779248046875e+02, 3.178451843261719e+02, 3.179020385742188e+02, 3.179462585449219e+02, 3.179441833496094e+02, 3.1792822265625e+02, 3.179098205566406e+02, 3.178887023925781e+02, 3.178659057617188e+02, 3.178446044921875e+02, 3.17824462890625e+02, 3.178040771484375e+02, 3.177834167480469e+02, 3.177625122070312e+02, 3.177413330078125e+02, 3.177198791503906e+02, 3.176981201171875e+02, 3.176760864257812e+02, 3.176537475585938e+02, 3.17631103515625e+02, 3.176081237792969e+02, 3.175848388671875e+02, 3.175611877441406e+02, 3.175372009277344e+02, 3.175128479003906e+02, 3.174880981445312e+02, 3.174629821777344e+02, 3.174374694824219e+02, 3.174115295410156e+02] +heaETS.senTBuiSup.T=[2.931499938964844e+02, 3.257665710449219e+02, 3.270467834472656e+02, 3.276535949707031e+02, 3.279407653808594e+02, 3.261917114257812e+02, 3.230202941894531e+02, 3.231147766113281e+02, 3.231254577636719e+02, 3.231315307617188e+02, 3.231353759765625e+02, 3.231379699707031e+02, 3.23139892578125e+02, 3.231413269042969e+02, 3.231424255371094e+02, 3.231433410644531e+02, 3.231440734863281e+02, 3.231446838378906e+02, 3.231452026367188e+02, 3.231456604003906e+02, 3.231460571289062e+02, 3.231463928222656e+02, 3.231466979980469e+02, 3.2314697265625e+02, 3.231472473144531e+02, 3.231474609375e+02, 3.231531982421875e+02, 3.231533508300781e+02, 3.231534118652344e+02, 3.231535034179688e+02, 3.231535949707031e+02, 3.231536865234375e+02, 3.231537780761719e+02, 3.231539001464844e+02, 3.231540222167969e+02, 3.231541137695312e+02, 3.231542663574219e+02, 3.231543884277344e+02, 3.23154541015625e+02, 3.231546936035156e+02, 3.231548461914062e+02, 3.23155029296875e+02, 3.231552429199219e+02, 3.231554565429688e+02, 3.231556701660156e+02, 3.231559143066406e+02, 3.231561889648438e+02, 3.23156494140625e+02, 3.231568298339844e+02, 3.231572265625e+02, 3.231576843261719e+02, 3.231230773925781e+02, 3.231276245117188e+02, 3.231307678222656e+02, 3.231331176757812e+02, 3.231349182128906e+02, 3.231363525390625e+02, 3.231374816894531e+02, 3.23138427734375e+02, 3.231392211914062e+02, 3.23139892578125e+02, 3.231404724121094e+02, 3.231409606933594e+02, 3.23141357421875e+02, 3.231417236328125e+02, 3.231420288085938e+02, 3.231423034667969e+02, 3.231425476074219e+02, 3.231427307128906e+02, 3.231428833007812e+02, 3.231430358886719e+02, 3.231431579589844e+02, 3.231432189941406e+02, 3.231432800292969e+02, 3.231432800292969e+02, 3.231435546875e+02, 3.231524963378906e+02, 3.231525268554688e+02, 3.23152587890625e+02, 3.231526184082031e+02, 3.231526184082031e+02, 3.23152587890625e+02, 3.23152587890625e+02, 3.231526184082031e+02, 3.231526184082031e+02, 3.231526184082031e+02, 3.231526489257812e+02, 3.231526489257812e+02, 3.231526794433594e+02, 3.231526794433594e+02, 3.231527099609375e+02, 3.231527404785156e+02, 3.231527709960938e+02, 3.231527709960938e+02, 3.231528015136719e+02, 3.2315283203125e+02, 3.231528625488281e+02, 3.231528930664062e+02, 3.231529235839844e+02, 3.231529846191406e+02, 3.231530151367188e+02] +heaETS.senTBuiRet.T=[2.931499938964844e+02, 3.256422119140625e+02, 3.269887390136719e+02, 3.276272277832031e+02, 3.279295654296875e+02, 3.260859680175781e+02, 3.220827941894531e+02, 3.217907104492188e+02, 3.213224792480469e+02, 3.208490905761719e+02, 3.203733520507812e+02, 3.198963623046875e+02, 3.194186401367188e+02, 3.189404296875e+02, 3.184618835449219e+02, 3.17983154296875e+02, 3.175042724609375e+02, 3.170252380371094e+02, 3.16546142578125e+02, 3.160669860839844e+02, 3.155877685546875e+02, 3.151084899902344e+02, 3.146292114257812e+02, 3.1414990234375e+02, 3.136705627441406e+02, 3.131912231445312e+02, 3.131569519042969e+02, 3.131566162109375e+02, 3.131567077636719e+02, 3.131567993164062e+02, 3.131569213867188e+02, 3.131570739746094e+02, 3.131571960449219e+02, 3.131573486328125e+02, 3.131575012207031e+02, 3.131576843261719e+02, 3.131578674316406e+02, 3.131580810546875e+02, 3.131582946777344e+02, 3.131585083007812e+02, 3.131587829589844e+02, 3.131590576171875e+02, 3.131593627929688e+02, 3.1315966796875e+02, 3.131600341796875e+02, 3.131604309082031e+02, 3.131608581542969e+02, 3.131613464355469e+02, 3.13161865234375e+02, 3.131624755859375e+02, 3.131631469726562e+02, 3.131048278808594e+02, 3.131112976074219e+02, 3.13117431640625e+02, 3.131219177246094e+02, 3.131253356933594e+02, 3.131280517578125e+02, 3.131302490234375e+02, 3.131321105957031e+02, 3.131336975097656e+02, 3.131350708007812e+02, 3.131362609863281e+02, 3.131373291015625e+02, 3.131382751464844e+02, 3.131391296386719e+02, 3.131399230957031e+02, 3.131406555175781e+02, 3.131413269042969e+02, 3.131419372558594e+02, 3.131425170898438e+02, 3.1314306640625e+02, 3.131435546875e+02, 3.1314404296875e+02, 3.131444702148438e+02, 3.131448364257812e+02, 3.131455078125e+02, 3.131586608886719e+02, 3.131586303710938e+02, 3.131585693359375e+02, 3.131585388183594e+02, 3.131584777832031e+02, 3.131583557128906e+02, 3.131582641601562e+02, 3.13158203125e+02, 3.131581420898438e+02, 3.131580810546875e+02, 3.131580200195312e+02, 3.13157958984375e+02, 3.131579284667969e+02, 3.131578674316406e+02, 3.131578369140625e+02, 3.131577758789062e+02, 3.131577453613281e+02, 3.1315771484375e+02, 3.131576843261719e+02, 3.131576538085938e+02, 3.131576232910156e+02, 3.131575927734375e+02, 3.131575927734375e+02, 3.131575927734375e+02, 3.131575622558594e+02] +heaETS.hex.m1_flow=[1.210962295772333e-06, 1.17571484297514e-02, 1.17571484297514e-02, 1.17571484297514e-02, 1.17571484297514e-02, 1.17571484297514e-02, 3.5539161413908e-02, 4.789609834551813e-02, 6.103789061307907e-02, 7.27391242980957e-02, 8.32783579826355e-02, 9.286065399646759e-02, 1.016366332769394e-01, 1.097202003002167e-01, 1.171990483999252e-01, 1.241427212953568e-01, 1.306070685386658e-01, 1.366378217935562e-01, 1.422729641199112e-01, 1.47544264793396e-01, 1.524788290262222e-01, 1.57100036740303e-01, 1.614276170730591e-01, 1.654794663190842e-01, 1.692709773778915e-01, 1.728156805038452e-01, 1.003691554069519e-01, 9.76673886179924e-02, 9.497050195932387e-02, 9.228222072124481e-02, 8.960265666246414e-02, 8.693200349807739e-02, 8.427034318447113e-02, 8.161793649196625e-02, 7.897488772869109e-02, 7.634127885103227e-02, 7.371746748685837e-02, 7.110356539487839e-02, 6.849965453147888e-02, 6.590607017278671e-02, 6.3323013484478e-02, 6.075070053339005e-02, 5.818938463926315e-02, 5.563920736312866e-02, 5.310074239969254e-02, 5.057390406727791e-02, 4.805942997336388e-02, 4.555731266736984e-02, 4.306734725832939e-02, 4.058682918548584e-02, 3.811206296086311e-02, 4.865997657179832e-02, 5.965646728873253e-02, 7.085540890693665e-02, 8.224477618932724e-02, 9.380958974361429e-02, 1.055374518036843e-01, 1.17418237030506e-01, 1.294434815645218e-01, 1.416055858135223e-01, 1.538984030485153e-01, 1.663161665201187e-01, 1.788538545370102e-01, 1.915069371461868e-01, 2.042713761329651e-01, 2.171434164047241e-01, 2.301197350025177e-01, 2.431971430778503e-01, 2.563727796077729e-01, 2.696439623832702e-01, 2.83008188009262e-01, 2.964630424976349e-01, 3.100064098834991e-01, 3.236389756202698e-01, 3.375483751296997e-01, 3.511732220649719e-01, 3.464218080043793e-01, 3.41210663318634e-01, 3.359349370002747e-01, 3.30590158700943e-01, 3.25215071439743e-01, 3.199096918106079e-01, 3.146616220474243e-01, 3.094259202480316e-01, 3.042033612728119e-01, 2.989940047264099e-01, 2.937978506088257e-01, 2.886147499084473e-01, 2.83445417881012e-01, 2.782894670963287e-01, 2.731472253799438e-01, 2.680187523365021e-01, 2.629042863845825e-01, 2.578037679195404e-01, 2.527175843715668e-01, 2.476456314325333e-01, 2.425882369279861e-01, 2.375455349683762e-01, 2.325175404548645e-01, 2.275047451257706e-01, 2.225069254636765e-01] +heaETS.hex.m2_flow=[0e+00, 2.371107786893845e-01, 2.351987361907959e-01, 2.332866936922073e-01, 2.313746511936188e-01, 2.29462593793869e-01, 2.275505512952805e-01, 2.256385087966919e-01, 2.237264662981033e-01, 2.218144088983536e-01, 2.19902366399765e-01, 2.179903239011765e-01, 2.160782814025879e-01, 2.141662240028381e-01, 2.122541815042496e-01, 2.10342139005661e-01, 2.084300965070724e-01, 2.065180540084839e-01, 2.046059966087341e-01, 2.026939541101456e-01, 2.00781911611557e-01, 1.988698691129684e-01, 1.969578117132187e-01, 1.950457692146301e-01, 1.931337267160416e-01, 1.91221684217453e-01, 1.16660438477993e-01, 1.137923672795296e-01, 1.109242960810661e-01, 1.080562323331833e-01, 1.051881611347198e-01, 1.023200899362564e-01, 9.945202618837357e-02, 9.658395498991013e-02, 9.371588379144667e-02, 9.084782004356386e-02, 8.79797488451004e-02, 8.511167764663696e-02, 8.224361389875412e-02, 7.937554270029068e-02, 7.650747150182724e-02, 7.36394003033638e-02, 7.077133655548096e-02, 6.790326535701752e-02, 6.503519415855408e-02, 6.216712668538094e-02, 5.929905921220779e-02, 5.643099173903465e-02, 5.356292054057121e-02, 5.069485306739807e-02, 4.782678559422493e-02, 6.011835113167763e-02, 7.254664599895477e-02, 8.497494459152222e-02, 9.740324318408966e-02, 1.098315417766572e-01, 1.222598403692247e-01, 1.346881389617919e-01, 1.471164375543594e-01, 1.595447361469269e-01, 1.719730347394943e-01, 1.844013333320618e-01, 1.968296319246292e-01, 2.092579305171967e-01, 2.216862291097641e-01, 2.341145277023315e-01, 2.46542826294899e-01, 2.589711248874664e-01, 2.713994085788728e-01, 2.838277220726012e-01, 2.962560057640075e-01, 3.086843192577362e-01, 3.211126029491425e-01, 3.335409164428711e-01, 3.459692001342773e-01, 3.583948612213135e-01, 3.537712097167969e-01, 3.489910960197449e-01, 3.442109823226929e-01, 3.394308686256409e-01, 3.346507549285889e-01, 3.298706412315369e-01, 3.250905275344849e-01, 3.203104138374329e-01, 3.155303001403809e-01, 3.107501864433289e-01, 3.059700727462769e-01, 3.011899590492249e-01, 2.964098453521729e-01, 2.916297316551208e-01, 2.868496179580688e-01, 2.820695042610168e-01, 2.772893905639648e-01, 2.725092768669128e-01, 2.677291631698608e-01, 2.629490494728088e-01, 2.581689357757568e-01, 2.533888220787048e-01, 2.486086934804916e-01, 2.438285797834396e-01, 2.390484660863876e-01] +loa.m_flow=[0e+00, 2.371107786893845e-01, 2.351987361907959e-01, 2.332866936922073e-01, 2.313746511936188e-01, 2.29462593793869e-01, 2.275505512952805e-01, 2.256385087966919e-01, 2.237264662981033e-01, 2.218144088983536e-01, 2.19902366399765e-01, 2.179903239011765e-01, 2.160782814025879e-01, 2.141662240028381e-01, 2.122541815042496e-01, 2.10342139005661e-01, 2.084300965070724e-01, 2.065180540084839e-01, 2.046059966087341e-01, 2.026939541101456e-01, 2.00781911611557e-01, 1.988698691129684e-01, 1.969578117132187e-01, 1.950457692146301e-01, 1.931337267160416e-01, 1.91221684217453e-01, 1.16660438477993e-01, 1.137923672795296e-01, 1.109242960810661e-01, 1.080562323331833e-01, 1.051881611347198e-01, 1.023200899362564e-01, 9.945202618837357e-02, 9.658395498991013e-02, 9.371588379144667e-02, 9.084782004356386e-02, 8.79797488451004e-02, 8.511167764663696e-02, 8.224361389875412e-02, 7.937554270029068e-02, 7.650747150182724e-02, 7.36394003033638e-02, 7.077133655548096e-02, 6.790326535701752e-02, 6.503519415855408e-02, 6.216712668538094e-02, 5.929905921220779e-02, 5.643099173903465e-02, 5.356292054057121e-02, 5.069485306739807e-02, 4.782678559422493e-02, 6.011835113167763e-02, 7.254664599895477e-02, 8.497494459152222e-02, 9.740324318408966e-02, 1.098315417766572e-01, 1.222598403692247e-01, 1.346881389617919e-01, 1.471164375543594e-01, 1.595447361469269e-01, 1.719730347394943e-01, 1.844013333320618e-01, 1.968296319246292e-01, 2.092579305171967e-01, 2.216862291097641e-01, 2.341145277023315e-01, 2.46542826294899e-01, 2.589711248874664e-01, 2.713994085788728e-01, 2.838277220726012e-01, 2.962560057640075e-01, 3.086843192577362e-01, 3.211126029491425e-01, 3.335409164428711e-01, 3.459692001342773e-01, 3.583948612213135e-01, 3.537712097167969e-01, 3.489910960197449e-01, 3.442109823226929e-01, 3.394308686256409e-01, 3.346507549285889e-01, 3.298706412315369e-01, 3.250905275344849e-01, 3.203104138374329e-01, 3.155303001403809e-01, 3.107501864433289e-01, 3.059700727462769e-01, 3.011899590492249e-01, 2.964098453521729e-01, 2.916297316551208e-01, 2.868496179580688e-01, 2.820695042610168e-01, 2.772893905639648e-01, 2.725092768669128e-01, 2.677291631698608e-01, 2.629490494728088e-01, 2.581689357757568e-01, 2.533888220787048e-01, 2.486086934804916e-01, 2.438285797834396e-01, 2.390484660863876e-01] +heaETS.conVal.y=[1e+00, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 2.610067427158356e-01, 3.373704254627228e-01, 3.997290432453156e-01, 4.450134634971619e-01, 4.800945520401001e-01, 5.084512233734131e-01, 5.320642590522766e-01, 5.521619915962219e-01, 5.69553554058075e-01, 5.847992897033691e-01, 5.983015894889832e-01, 6.103586554527283e-01, 6.211971044540405e-01, 6.309927701950073e-01, 6.39884889125824e-01, 6.479854583740234e-01, 6.553849577903748e-01, 6.621590852737427e-01, 6.68370246887207e-01, 6.740709543228149e-01, 5.286896228790283e-01, 5.215438008308411e-01, 5.142208337783813e-01, 5.067207217216492e-01, 4.990337491035461e-01, 4.911493957042694e-01, 4.830561280250549e-01, 4.747417271137238e-01, 4.661925137042999e-01, 4.573934078216553e-01, 4.483287334442139e-01, 4.389804899692535e-01, 4.293286204338074e-01, 4.193518459796906e-01, 4.09026026725769e-01, 3.983243405818939e-01, 3.872167468070984e-01, 3.756690323352814e-01, 3.636445701122284e-01, 3.510983288288116e-01, 3.379831910133362e-01, 3.242408335208893e-01, 3.098024427890778e-01, 2.94571727514267e-01, 2.784270346164703e-01, 3.413873314857483e-01, 3.938122987747192e-01, 4.382269382476807e-01, 4.768629670143127e-01, 5.111261010169985e-01, 5.419715046882632e-01, 5.700795054435728e-01, 5.959524512290955e-01, 6.199719309806824e-01, 6.424362063407898e-01, 6.635823845863342e-01, 6.836031675338745e-01, 7.026576995849609e-01, 7.208794951438904e-01, 7.383823394775391e-01, 7.552644014358521e-01, 7.71611750125885e-01, 7.875008583068849e-01, 8.030007481575011e-01, 8.181744813919066e-01, 8.330807685852051e-01, 8.477752804756165e-01, 8.623145818710327e-01, 8.769495487213135e-01, 8.91144335269928e-01, 8.861488699913025e-01, 8.807175159454346e-01, 8.752007484436035e-01, 8.695898652076721e-01, 8.639218807220459e-01, 8.582990765571594e-01, 8.527054786682129e-01, 8.470907211303711e-01, 8.414524793624878e-01, 8.357877135276794e-01, 8.300932049751282e-01, 8.243656158447266e-01, 8.186023831367493e-01, 8.127997517585754e-01, 8.069546818733215e-01, 8.010637760162354e-01, 7.951236367225647e-01, 7.891305685043335e-01, 7.830811738967896e-01, 7.769713401794434e-01, 7.707974910736084e-01, 7.645554542541504e-01, 7.58240818977356e-01, 7.518495917320251e-01, 7.453767061233521e-01] +heaETS.hex.port_a1.p=[3e+05, 3.0000990625e+05, 3.0000990625e+05, 3.0000990625e+05, 3.0000990625e+05, 3.0000990625e+05, 3.0005546875e+05, 3.00100125e+05, 3.0016259375e+05, 3.0023090625e+05, 3.003026875e+05, 3.0037634375e+05, 3.0045084375e+05, 3.0052540625e+05, 3.0059946875e+05, 3.0067259375e+05, 3.0074446875e+05, 3.008148125e+05, 3.0088340625e+05, 3.0095009375e+05, 3.010146875e+05, 3.01077125e+05, 3.011373125e+05, 3.0119509375e+05, 3.012505e+05, 3.0130340625e+05, 3.0043965625e+05, 3.004163125e+05, 3.00393625e+05, 3.0037165625e+05, 3.0035040625e+05, 3.003298125e+05, 3.003099375e+05, 3.0029071875e+05, 3.0027221875e+05, 3.0025434375e+05, 3.0023715625e+05, 3.0022065625e+05, 3.0020478125e+05, 3.001895625e+05, 3.00175e+05, 3.001610625e+05, 3.0014778125e+05, 3.0013509375e+05, 3.001230625e+05, 3.00111625e+05, 3.001008125e+05, 3.0009059375e+05, 3.0008096875e+05, 3.000719375e+05, 3.0006353125e+05, 3.0010334375e+05, 3.001553125e+05, 3.00219125e+05, 3.0029521875e+05, 3.003840625e+05, 3.0048609375e+05, 3.0060171875e+05, 3.0073128125e+05, 3.0087515625e+05, 3.010336875e+05, 3.0120721875e+05, 3.0139609375e+05, 3.01600625e+05, 3.0182109375e+05, 3.0205784375e+05, 3.0231115625e+05, 3.0258128125e+05, 3.028685625e+05, 3.0317321875e+05, 3.034955625e+05, 3.0383584375e+05, 3.041943125e+05, 3.045713125e+05, 3.049726875e+05, 3.0538221875e+05, 3.052375625e+05, 3.0508115625e+05, 3.0492525e+05, 3.0476978125e+05, 3.046159375e+05, 3.044665625e+05, 3.0432121875e+05, 3.04178625e+05, 3.0403875e+05, 3.0390159375e+05, 3.037671875e+05, 3.036354375e+05, 3.03506375e+05, 3.0337996875e+05, 3.0325621875e+05, 3.0313509375e+05, 3.030165625e+05, 3.0290065625e+05, 3.0278734375e+05, 3.0267659375e+05, 3.02568375e+05, 3.0246271875e+05, 3.023595625e+05, 3.0225890625e+05, 3.0216075e+05] +heaETS.hex.port_b1.p=[3e+05, 3e+05] +heaETS.hex.port_a2.p=[3e+05, 3.024536875e+05, 3.0241428125e+05, 3.023751875e+05, 3.0233640625e+05, 3.0229796875e+05, 3.022598125e+05, 3.02222e+05, 3.021845e+05, 3.021473125e+05, 3.0211046875e+05, 3.020739375e+05, 3.020376875e+05, 3.020018125e+05, 3.0196621875e+05, 3.019309375e+05, 3.01896e+05, 3.01861375e+05, 3.018270625e+05, 3.0179309375e+05, 3.0175940625e+05, 3.017260625e+05, 3.0169303125e+05, 3.016603125e+05, 3.016279375e+05, 3.0159584375e+05, 3.0059396875e+05, 3.00565125e+05, 3.00537e+05, 3.0050959375e+05, 3.0048290625e+05, 3.0045690625e+05, 3.0043165625e+05, 3.00407125e+05, 3.003833125e+05, 3.0036021875e+05, 3.003378125e+05, 3.0031615625e+05, 3.0029521875e+05, 3.0027496875e+05, 3.0025546875e+05, 3.0023665625e+05, 3.0021859375e+05, 3.0020121875e+05, 3.0018459375e+05, 3.0016865625e+05, 3.0015346875e+05, 3.0013896875e+05, 3.0012521875e+05, 3.0011215625e+05, 3.0009984375e+05, 3.0015775e+05, 3.002296875e+05, 3.00315125e+05, 3.004140625e+05, 3.0052646875e+05, 3.0065234375e+05, 3.0079171875e+05, 3.0094459375e+05, 3.011109375e+05, 3.0129075e+05, 3.0148403125e+05, 3.0169084375e+05, 3.0191109375e+05, 3.0214484375e+05, 3.0239209375e+05, 3.0265278125e+05, 3.02927e+05, 3.0321465625e+05, 3.0351584375e+05, 3.0383046875e+05, 3.0415859375e+05, 3.0450021875e+05, 3.048553125e+05, 3.05223875e+05, 3.05605875e+05, 3.0546215625e+05, 3.0531553125e+05, 3.051709375e+05, 3.050283125e+05, 3.048876875e+05, 3.0474903125e+05, 3.0461240625e+05, 3.0447775e+05, 3.04345125e+05, 3.0421446875e+05, 3.0408578125e+05, 3.03959125e+05, 3.0383446875e+05, 3.0371178125e+05, 3.0359109375e+05, 3.0347240625e+05, 3.0335571875e+05, 3.0324103125e+05, 3.031283125e+05, 3.0301759375e+05, 3.02908875e+05, 3.0280215625e+05, 3.026974375e+05, 3.0259471875e+05, 3.0249396875e+05] +heaETS.hex.port_b2.p=[3e+05, 3e+05] +heaETS.Q_flow=[0e+00, 1.233626937866211e+02, 5.712399291992188e+01, 2.571580505371094e+01, 1.084419822692871e+01, 1.015337066650391e+02, 9.02167724609375e+02, 1.274382690429688e+03, 1.743630981445312e+03, 2.221961669921875e+03, 2.709668212890625e+03, 3.2067783203125e+03, 3.712996826171875e+03, 4.2278369140625e+03, 4.750665527343751e+03, 5.28079150390625e+03, 5.81747119140625e+03, 6.359939941406251e+03, 6.90742822265625e+03, 7.45915478515625e+03, 8.0143515625e+03, 8.572263671875e+03, 9.132119140625e+03, 9.6931962890625e+03, 1.0254765625e+04, 1.08161064453125e+04, 6.29624755859375e+03, 6.12690673828125e+03, 5.957684570312499e+03, 5.7890009765625e+03, 5.62086279296875e+03, 5.45328271484375e+03, 5.286267578125e+03, 5.11983154296875e+03, 4.953982421874999e+03, 4.788724609375001e+03, 4.62408154296875e+03, 4.46005908203125e+03, 4.29666357421875e+03, 4.13391552734375e+03, 3.971827880859375e+03, 3.8104140625e+03, 3.649689697265625e+03, 3.4896640625e+03, 3.33037353515625e+03, 3.17181201171875e+03, 3.014026611328125e+03, 2.857016357421875e+03, 2.700768310546875e+03, 2.545111572265625e+03, 2.38981494140625e+03, 3.06309716796875e+03, 3.7537021484375e+03, 4.4565380859375e+03, 5.171345703125e+03, 5.897172363281256e+03, 6.633226074218756e+03, 7.378865722656244e+03, 8.13355859375e+03, 8.896828125e+03, 9.668283203125e+03, 1.04475654296875e+04, 1.123435546875e+04, 1.20283701171875e+04, 1.28293544921875e+04, 1.36370751953125e+04, 1.44513203125e+04, 1.5271890625e+04, 1.609860742187501e+04, 1.693130468749999e+04, 1.776982031249999e+04, 1.861401171875e+04, 1.9463740234375e+04, 2.0319060546875e+04, 2.1191818359375e+04, 2.2046251953125e+04, 2.172886328125e+04, 2.1402076171875e+04, 2.1071220703125e+04, 2.0736029296875e+04, 2.0398974609375e+04, 2.0066357421875e+04, 1.9737267578125e+04, 1.9408943359375e+04, 1.90814375e+04, 1.8754751953125e+04, 1.8428888671875e+04, 1.8103837890625e+04, 1.777964453125e+04, 1.745628515625e+04, 1.7133779296875e+04, 1.6812130859375e+04, 1.649135546875e+04, 1.617144921875e+04, 1.58524384765625e+04, 1.5534314453125e+04, 1.5217099609375e+04, 1.49007998046875e+04, 1.458541796875e+04, 1.4270984375e+04, 1.3957486328125e+04] +heaETS.Q=[0e+00, 2.5212315e+06, 2.59566425e+06, 2.62978175e+06, 2.644782e+06, 2.67531325e+06, 2.9745895e+06, 3.884869250000001e+06, 5.1879495e+06, 6.900422e+06, 9.030205e+06, 1.158544e+07, 1.4574144e+07, 1.8003988e+07, 2.188215000000001e+07, 2.621524e+07, 3.1009244e+07, 3.626949600000001e+07, 4.2000668e+07, 4.8206752e+07, 5.4891084e+07, 6.2056336e+07, 6.9704512e+07, 7.7836992e+07, 8.6454504e+07, 9.555716e+07, 1.01085976e+08, 1.0645288e+08, 1.11673384e+08, 1.16747912e+08, 1.21676936e+08, 1.26460936e+08, 1.31100384e+08, 1.35595792e+08, 1.39947632e+08, 1.44156464e+08, 1.48222752e+08, 1.52147056e+08, 1.5592992e+08, 1.59571888e+08, 1.6307352e+08, 1.66435408e+08, 1.69658112e+08, 1.72742256e+08, 1.75688464e+08, 1.78497344e+08, 1.81169568e+08, 1.83705792e+08, 1.86106704e+08, 1.8837288e+08, 1.90504736e+08, 1.92853376e+08, 1.9579744e+08, 1.9934336e+08, 2.03501776e+08, 2.08282624e+08, 2.136950400000001e+08, 2.197475999999999e+08, 2.26448336e+08, 2.33804848e+08, 2.418244e+08, 2.50513904e+08, 2.59879952e+08, 2.6992896e+08, 2.80667008e+08, 2.921e+08, 3.04233728e+08, 3.17073728e+08, 3.306253440000001e+08, 3.448938239999999e+08, 3.598842879999999e+08, 3.75601728e+08, 3.92050912e+08, 4.0923664e+08, 4.27168672e+08, 4.45849568e+08, 4.64764288e+08, 4.83396928e+08, 5.01745312e+08, 5.19805888e+08, 5.37576128e+08, 5.55056832e+08, 5.72252032e+08, 5.89163264e+08, 6.0579136e+08, 6.22136768e+08, 6.3820032e+08, 6.53982784e+08, 6.69484608e+08, 6.84706624e+08, 6.99649536e+08, 7.14314176e+08, 7.28701184e+08, 7.42811456e+08, 7.5664576e+08, 7.70204736e+08, 7.8348928e+08, 7.9650016e+08, 8.09238208e+08, 8.21704064e+08, 8.33898688e+08] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Loads_Heating_Examples_BuildingTimeSeriesWithETS.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Loads_Heating_Examples_BuildingTimeSeriesWithETS.txt new file mode 100644 index 00000000000..ae61f4d35e0 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Loads_Heating_Examples_BuildingTimeSeriesWithETS.txt @@ -0,0 +1,20 @@ +last-generated=2023-05-10 +statistics-initialization= +{ + "nonlinear": "2, 0, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "2, 1, 1", + "number of continuous time states": "14", + "numerical Jacobians": "0" +} +time=[2.592e+06, 3.6288e+06] +buiWitETS.bui.loa.y[2]=[0e+00, 1.004075744628906e+03, 1.0291171875e+05, 5.2077609375e+04, 8.225325e+04, 1.3286041015625e+04, 1.6628634375e+05, 4.158326953125e+04, 0e+00, 0e+00, 0e+00, 3.83742421875e+04, 4.91756640625e+03, 2.68711962890625e+03, 1.6945669921875e+04, 1.8203630859375e+04, 0e+00, 0e+00, 0e+00, 3.871204296875e+04, 1.58887890625e+04, 1.29604814453125e+04, 1.7335392578125e+04, 0e+00, 0e+00, 0e+00, 1.806312866210938e+02, 6.46372119140625e+03, 4.41243310546875e+03, 1.543296356201172e+02, 0e+00, 1.410057983398438e+03, 3.88358447265625e+03, 1.07421767578125e+04, 1.4436244140625e+04, 3.642763125e+05, 1.66839765625e+05, 1.9847203125e+04, 1.6756640625e+04, 4.654546484375e+04, 4.877700390625e+04, 0e+00, 4.834840393066406e+02, 5.23384765625e+03, 3.10431875e+05, 2.167645703125e+04, 7.28719921875e+04, 1.313465234375e+04, 7.158540625e+04, 4.78350859375e+04, 7.5383271484375e+03, 3.1975685546875e+04, 2.8822525e+05, 1.10339234375e+05, 1.230865546875e+05, 1.938912109375e+04, 2.08965125e+05, 5.983159375e+04, 2.511646484375e+03, 2.6849072265625e+04, 3.6527796875e+05, 2.3455278125e+05, 2.8752578125e+04, 9.0070234375e+03, 3.862687890625e+04, 4.00853125e+04, 0e+00, 3.39047802734375e+03, 6.2619248046875e+03, 2.475595e+05, 1.26875478515625e+04, 2.1355607421875e+04, 2.221658447265625e+03, 4.06975390625e+04, 2.997396875e+04, 0e+00, 1.5190458984375e+03, 9.84034140625e+04, 3.436667578125e+04, 1.70246171875e+04, 1.523075390625e+04, 0e+00, 0e+00, 4.264939453125e+03, 9.4947412109375e+03, 1.0351466796875e+04, 7.85510693359375e+03, 1.05032568359375e+03, 0e+00, 1.165992919921875e+03, 3.019004150390625e+03, 1.1689822265625e+04, 1.366400390625e+04, 2.092121484375e+04, 2.7471825e+05, 2.8967375e+04, 4.191477734375e+04, 7.08997314453125e+03, 4.051390234375e+04, 2.927763671875e+04, 0e+00] +buiWitETS.ets.Q_flow=[0e+00, 2.2493759765625e+03, 1.032904296875e+05, 5.129146484375e+04, 9.82447734375e+04, 9.215701171875e+03, 1.6842609375e+05, 4.102537890625e+04, 4.785414123535156e+02, 4.441349182128906e+02, 4.111793212890625e+02, 3.759825390625e+04, 3.187685302734375e+03, 1.680121459960938e+03, 1.2910890625e+04, 1.45676484375e+04, 6.714845581054688e+02, 5.79841796875e+02, 5.363632202148438e+02, 3.770138671875e+04, 1.30419052734375e+04, 1.17866083984375e+04, 1.8312857421875e+04, 6.850307006835938e+02, 6.1335546875e+02, 5.719215698242188e+02, 7.117693481445312e+02, 4.42920556640625e+03, 3.523832275390625e+03, 8.946137084960938e+02, 6.526187133789062e+02, 1.204793701171875e+03, 2.803854248046875e+03, 1.0250333984375e+04, 1.49698583984375e+04, 3.5656021875e+05, 1.70771984375e+05, 1.57641259765625e+04, 1.1767919921875e+04, 5.899504296875e+04, 4.8043234375e+04, 4.966031188964844e+02, 6.439692993164062e+02, 2.8652099609375e+03, 3.0641209375e+05, 1.70239296875e+04, 7.42068203125e+04, 1.03324228515625e+04, 7.1072734375e+04, 4.82440859375e+04, 4.1452900390625e+03, 3.826369921875e+04, 2.91925625e+05, 1.104687109375e+05, 1.24144359375e+05, 1.4697052734375e+04, 2.1148078125e+05, 5.957313671875e+04, 1.21228662109375e+03, 2.91059375e+04, 3.5781071875e+05, 2.41422203125e+05, 2.5742841796875e+04, 5.18904150390625e+03, 4.6709890625e+04, 3.898361328125e+04, 5.20301513671875e+02, 1.726983764648438e+03, 4.1678427734375e+03, 2.45566125e+05, 8.400302734375e+03, 2.0217345703125e+04, 1.328046997070312e+03, 3.910512109375e+04, 3.05075390625e+04, 4.506978454589844e+02, 9.427885131835938e+02, 9.903940625e+04, 3.2764720703125e+04, 1.47866025390625e+04, 1.4496537109375e+04, 7.152548828125e+02, 6.226627197265625e+02, 2.895615966796875e+03, 8.15669091796875e+03, 9.8584794921875e+03, 7.0163232421875e+03, 1.345616943359375e+03, 6.750175170898438e+02, 1.228148803710938e+03, 2.30589111328125e+03, 1.18134013671875e+04, 1.40497216796875e+04, 2.3257412109375e+04, 2.715453125e+05, 2.566175e+04, 4.302294921875e+04, 4.88401416015625e+03, 3.92312890625e+04, 2.89774140625e+04, 5.026904602050781e+02] +senMasFlo.m_flow=[1.342661096714437e-03, 1.8189312890172e-02, 2.057136535644531e+00, 9.657817482948303e-01, 1.459048748016357e+00, 1.378217786550522e-01, 3.503560543060303e+00, 7.151978611946106e-01, 7.900307886302471e-03, 7.89512787014246e-03, 7.780301384627819e-03, 6.875908374786377e-01, 4.296381026506424e-02, 2.371825277805328e-02, 1.724681705236435e-01, 2.130356281995773e-01, 8.369206450879574e-03, 7.82385841012001e-03, 7.761907763779163e-03, 6.543797850608826e-01, 1.767414063215256e-01, 1.330966353416443e-01, 1.970100551843643e-01, 7.927472703158855e-03, 7.713544182479382e-03, 7.687970530241728e-03, 1.01211741566658e-02, 5.716508999466896e-02, 3.885489702224731e-02, 1.000395230948925e-02, 7.764635607600212e-03, 1.506380457431078e-02, 3.299536183476448e-02, 1.046689376235008e-01, 1.537756025791168e-01, 7.961378574371338e+00, 3.649820327758789e+00, 2.451021373271942e-01, 1.954080611467361e-01, 7.232824563980103e-01, 8.696519136428833e-01, 8.369357325136662e-03, 1.166630815714598e-02, 4.536092281341553e-02, 6.828181743621826e+00, 2.879816889762878e-01, 1.421767473220825e+00, 1.347383707761765e-01, 1.361681580543518e+00, 8.599709868431091e-01, 6.782315671443939e-02, 4.912157952785492e-01, 6.610735893249512e+00, 2.227808713912964e+00, 2.315272331237793e+00, 2.374891638755798e-01, 4.530436992645264e+00, 1.096054077148438e+00, 2.138848789036274e-02, 3.769822418689728e-01, 8.021238327026367e+00, 5.396124839782715e+00, 4.36519056558609e-01, 8.624831587076187e-02, 5.756276249885559e-01, 6.808961033821106e-01, 8.386039175093174e-03, 2.907445095479488e-02, 5.571778491139412e-02, 5.322250366210938e+00, 1.314476579427719e-01, 2.936669290065765e-01, 1.912763528525829e-02, 7.114960551261902e-01, 4.620657563209534e-01, 7.000714540481567e-03, 1.540771219879389e-02, 1.971088528633118e+00, 5.584473013877869e-01, 1.928656548261642e-01, 1.652623862028122e-01, 8.14514048397541e-03, 7.715511601418257e-03, 3.6841731518507e-02, 8.968815207481384e-02, 1.001302301883698e-01, 7.20440074801445e-02, 1.395603083074093e-02, 7.414997555315495e-03, 1.429170835763216e-02, 2.554053068161011e-02, 1.165785491466522e-01, 1.42817422747612e-01, 2.55304217338562e-01, 5.945148944854736e+00, 4.570500254631042e-01, 7.640479207038879e-01, 6.394342333078384e-02, 7.023883461952209e-01, 4.466201961040497e-01, 7.874570786952972e-03] +buiWitETS.ets.senMasFlo.m_flow=[1.342661096714437e-03, 1.8189312890172e-02, 2.057136535644531e+00, 9.657817482948303e-01, 1.459048748016357e+00, 1.378217786550522e-01, 3.503560543060303e+00, 7.151978611946106e-01, 7.900307886302471e-03, 7.89512787014246e-03, 7.780301384627819e-03, 6.875908374786377e-01, 4.296381026506424e-02, 2.371825277805328e-02, 1.724681705236435e-01, 2.130356281995773e-01, 8.369206450879574e-03, 7.82385841012001e-03, 7.761907763779163e-03, 6.543797850608826e-01, 1.767414063215256e-01, 1.330966353416443e-01, 1.970100551843643e-01, 7.927472703158855e-03, 7.713544182479382e-03, 7.687970530241728e-03, 1.01211741566658e-02, 5.716508999466896e-02, 3.885489702224731e-02, 1.000395230948925e-02, 7.764635607600212e-03, 1.506380457431078e-02, 3.299536183476448e-02, 1.046689376235008e-01, 1.537756025791168e-01, 7.961378574371338e+00, 3.649820327758789e+00, 2.451021373271942e-01, 1.954080611467361e-01, 7.232824563980103e-01, 8.696519136428833e-01, 8.369357325136662e-03, 1.166630815714598e-02, 4.536092281341553e-02, 6.828181743621826e+00, 2.879816889762878e-01, 1.421767473220825e+00, 1.347383707761765e-01, 1.361681580543518e+00, 8.599709868431091e-01, 6.782315671443939e-02, 4.912157952785492e-01, 6.610735893249512e+00, 2.227808713912964e+00, 2.315272331237793e+00, 2.374891638755798e-01, 4.530436992645264e+00, 1.096054077148438e+00, 2.138848789036274e-02, 3.769822418689728e-01, 8.021238327026367e+00, 5.396124839782715e+00, 4.36519056558609e-01, 8.624831587076187e-02, 5.756276249885559e-01, 6.808961033821106e-01, 8.386039175093174e-03, 2.907445095479488e-02, 5.571778491139412e-02, 5.322250366210938e+00, 1.314476579427719e-01, 2.936669290065765e-01, 1.912763528525829e-02, 7.114960551261902e-01, 4.620657563209534e-01, 7.000714540481567e-03, 1.540771219879389e-02, 1.971088528633118e+00, 5.584473013877869e-01, 1.928656548261642e-01, 1.652623862028122e-01, 8.14514048397541e-03, 7.715511601418257e-03, 3.6841731518507e-02, 8.968815207481384e-02, 1.001302301883698e-01, 7.20440074801445e-02, 1.395603083074093e-02, 7.414997555315495e-03, 1.429170835763216e-02, 2.554053068161011e-02, 1.165785491466522e-01, 1.42817422747612e-01, 2.55304217338562e-01, 5.945148944854736e+00, 4.570500254631042e-01, 7.640479207038879e-01, 6.394342333078384e-02, 7.023883461952209e-01, 4.466201961040497e-01, 7.874570786952972e-03] +buiWitETS.ets.senTDisSup.T=[2.931499938964844e+02, 3.231353149414062e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02, 3.231499938964844e+02] +buiWitETS.ets.senTDisRet.T=[2.931499938964844e+02, 2.935787658691406e+02, 3.111493225097656e+02, 3.104566955566406e+02, 3.070565795898438e+02, 3.0716845703125e+02, 3.116603088378906e+02, 3.094400939941406e+02, 3.086728210449219e+02, 3.097048950195312e+02, 3.105188293457031e+02, 3.100809020996094e+02, 3.054170532226562e+02, 3.062196350097656e+02, 3.052581481933594e+02, 3.068064880371094e+02, 3.039739074707031e+02, 3.054367980957031e+02, 3.066342163085938e+02, 3.093799438476562e+02, 3.055135498046875e+02, 3.019844360351562e+02, 3.009334716796875e+02, 3.024969787597656e+02, 3.041450500488281e+02, 3.053699340820312e+02, 3.063419799804688e+02, 3.046316223144531e+02, 3.014740600585938e+02, 3.017766723632812e+02, 3.030615234375e+02, 3.040344848632812e+02, 3.028399658203125e+02, 2.997439270019531e+02, 2.998830871582031e+02, 3.124458312988281e+02, 3.119671325683594e+02, 3.077779846191406e+02, 3.087565307617188e+02, 3.036553344726562e+02, 3.099463195800781e+02, 3.089683837890625e+02, 3.099570922851562e+02, 3.080532836914062e+02, 3.124247131347656e+02, 3.090212707519531e+02, 3.106754760742188e+02, 3.048218383789062e+02, 3.106751403808594e+02, 3.097418518066406e+02, 3.085421752929688e+02, 3.045324401855469e+02, 3.125956726074219e+02, 3.11298583984375e+02, 3.103345642089844e+02, 3.083591003417969e+02, 3.119932250976562e+02, 3.101594848632812e+02, 3.096033020019531e+02, 3.046968994140625e+02, 3.124884643554688e+02, 3.124569091796875e+02, 3.090551147460938e+02, 3.087704772949219e+02, 3.037556457519531e+02, 3.094660949707031e+02, 3.083211669921875e+02, 3.08953369140625e+02, 3.05271728515625e+02, 3.121223754882812e+02, 3.078760986328125e+02, 3.066957702636719e+02, 3.065556335449219e+02, 3.100137939453125e+02, 3.073698425292969e+02, 3.077630920410156e+02, 3.08525390625e+02, 3.111408996582031e+02, 3.091272583007812e+02, 3.04825927734375e+02, 3.02184814453125e+02, 3.021620178222656e+02, 3.038616027832031e+02, 3.043650817871094e+02, 3.014136047363281e+02, 2.996183166503906e+02, 2.998733825683594e+02, 3.0010546875e+02, 3.01392333984375e+02, 3.026112060546875e+02, 3.015716857910156e+02, 2.989305419921875e+02, 2.996377258300781e+02, 3.013773193359375e+02, 3.122333984375e+02, 3.097306823730469e+02, 3.096917724609375e+02, 3.048946838378906e+02, 3.09800537109375e+02, 3.076429443359375e+02, 3.078925476074219e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StageIndex.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StageIndex.txt new file mode 100644 index 00000000000..84ffb1863f6 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StageIndex.txt @@ -0,0 +1,12 @@ +last-generated=2023-02-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +sta.u1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sta.u1Up=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sta.u1Dow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sta.idxSta=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPlant.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPlant.txt new file mode 100644 index 00000000000..ad56ef213a3 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPlant.txt @@ -0,0 +1,25 @@ +last-generated=2023-02-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 3e+04] +staChi.loaChiWat.y=[0e+00, 0e+00, 0e+00, 0e+00, 2.08e+05, 5.2e+05, 8.32e+05, 1.144e+06, 1.456e+06, 1.768e+06, 2.08e+06, 2.392e+06, 2.704e+06, 3.016e+06, 4.576e+06, 6.76e+06, 8.944e+06, 1.02128e+07, 9.6512e+06, 9.0896e+06, 8.528e+06, 7.9664e+06, 7.4048e+06, 6.8432e+06, 6.2816e+06, 5.72e+06, 5.1584e+06, 4.596799999999998e+06, 4.0352e+06, 3.4736e+06, 2.912e+06, 2.3504e+06, 1.7888e+06, 1.2272e+06, 1.664e+06, 2.6e+06, 3.536e+06, 4.472e+06, 5.408e+06, 6.344e+06, 7.28e+06, 8.216e+06, 9.152e+06, 1.0088e+07, 9.914667e+06, 9.186667e+06, 8.458667e+06, 7.7306665e+06, 7.0026665e+06, 6.2746665e+06, 5.5466665e+06, 4.8186665e+06, 4.09066675e+06, 3.36266675e+06, 3.015999999999999e+06, 2.86e+06, 2.704e+06, 2.548e+06, 2.392e+06, 2.236e+06, 2.08e+06, 1.924e+06, 1.768e+06, 1.612e+06, 1.456e+06, 1.3e+06, 1.144e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 1.04e+06, 9.984e+05, 9.36e+05, 8.736e+05, 8.112e+05, 7.488e+05, 6.864e+05, 6.24e+05, 5.616e+05, 4.992e+05, 4.368e+05, 3.744e+05, 3.12e+05, 2.496e+05, 1.872e+05, 1.248e+05, 6.24e+04, 0e+00] +staChi.loaHeaWat.y=[0e+00, 0e+00, 0e+00, 0e+00, 4.266666796875e+04, 1.066666640625e+05, 1.70666671875e+05, 2.34666671875e+05, 2.9866665625e+05, 3.6266665625e+05, 4.2666665625e+05, 4.9066665625e+05, 5.546666875e+05, 6.186666875e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 6.4e+05, 7.253333125e+05, 8.533333125e+05, 9.813333125e+05, 1.109333375e+06, 1.237333375e+06, 1.365333375e+06, 1.493333375e+06, 1.621333375e+06, 1.749333375e+06, 1.877333375e+06, 2.21866675e+06, 2.66666675e+06, 3.11466675e+06, 3.56266675e+06, 4.01066675e+06, 4.4586665e+06, 4.9066665e+06, 5.3546665e+06, 5.8026665e+06, 6.2506665e+06, 6.111999999999997e+06, 5.68e+06, 5.248e+06, 4.816e+06, 4.384e+06, 3.952e+06, 3.52e+06, 3.088e+06, 2.656e+06, 2.224e+06, 1.792e+06, 1.36e+06, 9.28e+05, 6.72e+05, 7.68e+05, 8.64e+05, 9.6e+05, 1.056e+06, 1.152e+06, 1.248e+06, 1.344e+06, 1.44e+06, 1.536e+06, 1.632e+06, 1.728e+06, 1.824e+06, 1.92e+06, 3.264e+06, 4.608e+06, 5.952e+06, 6.144e+06, 5.76e+06, 5.376e+06, 4.992e+06, 4.608e+06, 4.224e+06, 3.84e+06, 3.456e+06, 3.072e+06, 2.688e+06, 2.304e+06, 1.92e+06, 1.536e+06, 1.152e+06, 7.68e+05, 3.84e+05, 0e+00] +QChiWatChi_flow_nominal=[-4.4e+06, -4.4e+06] +QChiWatCasCoo_flow_nominal=[-6e+06, -6e+06] +QHeaWat_flow_nominal=[6.4e+06, 6.4e+06] +staChi.y1Chi[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staChi.y1Chi[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1ChiHea[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staChi.y1ChiHea[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00] +staChi.y1ChiHea[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1CooChiHea[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1CooChiHea[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1CooChiHea[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1HeaCooChiHea[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1HeaCooChiHea[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staChi.y1HeaCooChiHea[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPump.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPump.txt new file mode 100644 index 00000000000..1a00f18bc0f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Controls_BaseClasses_Validation_StagingPump.txt @@ -0,0 +1,14 @@ +last-generated=2023-02-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+03] +staDet.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.222222276031971e-02, 4.444444552063942e-02, 6.666667014360428e-02, 8.888889104127889e-02, 1.111111119389534e-01, 1.333333402872086e-01, 1.555555611848832e-01, 1.777777820825577e-01, 2.000000029802322e-01, 2.222222238779068e-01, 2.444444447755814e-01, 2.666666805744171e-01, 2.888889014720917e-01, 3.111111223697662e-01, 3.333333432674408e-01, 3.555555641651154e-01, 3.777777850627899e-01, 4.000000059604646e-01, 4.22222226858139e-01, 4.444444477558136e-01, 4.666666686534882e-01, 4.888888895511627e-01, 5.111111402511597e-01, 5.333333611488343e-01, 5.555555820465088e-01, 5.777778029441833e-01, 6.000000238418579e-01, 6.222222447395325e-01, 6.44444465637207e-01, 6.666666865348816e-01, 6.99999988079071e-01, 7.333333492279053e-01, 7.666666507720947e-01, 8.00000011920929e-01, 8.333333134651184e-01, 8.666666746139526e-01, 8.999999761581421e-01, 9.333333373069763e-01, 9.666666388511658e-01, 1e+00, 9.800000190734863e-01, 9.599999785423279e-01, 9.399999976158142e-01, 9.200000166893005e-01, 8.999999761581421e-01, 8.799999952316282e-01, 8.60000014305115e-01, 8.399999737739563e-01, 8.199999928474426e-01, 8.00000011920929e-01, 7.799999713897705e-01, 7.599999904632568e-01, 7.400000095367432e-01, 7.200000286102295e-01, 6.99999988079071e-01, 6.800000071525574e-01, 6.600000262260437e-01, 6.39999985694885e-01, 6.200000047683718e-01, 6.000000238418579e-01, 5.799999833106995e-01, 5.600000023841858e-01, 5.400000214576721e-01, 5.199999809265137e-01, 5e-01, 4.799999892711639e-01, 4.600000083446503e-01, 4.399999976158142e-01, 4.199999868869781e-01, 4.000000059604645e-01, 3.799999952316283e-01, 3.600000143051147e-01, 3.400000035762787e-01, 3.199999928474426e-01, 3.00000011920929e-01, 2.800000011920929e-01, 2.599999904632568e-01, 2.39999994635582e-01, 2.199999988079071e-01, 2.000000029802322e-01, 1.800000071525574e-01, 1.599999964237213e-01, 1.400000005960464e-01, 1.19999997317791e-01, 1.000000014901161e-01, 7.999999821186066e-02, 5.999999865889549e-02, 3.999999910593033e-02, 1.999999955296516e-02, 0e+00] +m_flow_nominal=[1e+00, 1e+00] +staDet.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.333333507180214e-02, 6.666667014360428e-02, 1.000000014901161e-01, 1.333333402872086e-01, 1.666666716337204e-01, 2.000000029802322e-01, 2.333333343267442e-01, 2.666666805744171e-01, 3.00000011920929e-01, 3.333333432674408e-01, 3.666666746139526e-01, 4.000000059604645e-01, 4.333333373069763e-01, 4.666666686534882e-01, 5e-01, 5.333333611488342e-01, 5.666666626930237e-01, 6.00000023841858e-01, 6.333333253860474e-01, 6.666666865348816e-01, 6.99999988079071e-01, 7.333333492279053e-01, 7.666666507720947e-01, 8.000000119209291e-01, 8.333333134651184e-01, 8.666666746139526e-01, 8.999999761581421e-01, 9.333333373069763e-01, 9.666666388511658e-01, 1e+00, 9.900000095367432e-01, 9.800000190734863e-01, 9.700000286102295e-01, 9.599999785423279e-01, 9.49999988079071e-01, 9.399999976158142e-01, 9.300000071525574e-01, 9.200000166893005e-01, 9.100000262260437e-01, 8.999999761581421e-01, 8.840000033378601e-01, 8.679999709129333e-01, 8.519999980926514e-01, 8.360000252723694e-01, 8.199999928474426e-01, 8.040000200271605e-01, 7.87999987602234e-01, 7.720000147819519e-01, 7.559999823570251e-01, 7.400000095367432e-01, 7.239999771118164e-01, 7.080000042915344e-01, 6.919999718666077e-01, 6.759999990463257e-01, 6.600000262260437e-01, 6.439999938011169e-01, 6.28000020980835e-01, 6.119999885559081e-01, 5.960000157356263e-01, 5.799999833106995e-01, 5.640000104904175e-01, 5.479999780654907e-01, 5.320000052452087e-01, 5.15999972820282e-01, 5e-01, 4.839999973773956e-01, 4.679999947547913e-01, 4.519999921321869e-01, 4.359999895095825e-01, 4.199999868869781e-01, 4.04000014066696e-01, 3.880000114440918e-01, 3.720000088214874e-01, 3.560000061988831e-01, 3.400000035762787e-01, 3.240000009536743e-01, 3.079999983310699e-01, 2.919999957084656e-01, 2.759999930858612e-01, 2.599999904632568e-01, 2.440000027418137e-01, 2.280000001192093e-01, 2.119999974966049e-01, 1.959999948740005e-01, 1.800000071525574e-01, 1.64000004529953e-01, 1.480000019073486e-01, 1.319999992847443e-01, 1.159999966621399e-01, 1.000000014901161e-01] +staDet.y1[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +staDet.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +staDet.y1[3]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Examples_AllElectricCWStorage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Examples_AllElectricCWStorage.txt new file mode 100644 index 00000000000..d163287db8a --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Examples_AllElectricCWStorage.txt @@ -0,0 +1,30 @@ +last-generated=2023-07-31 +statistics-initialization= +{ + "nonlinear": "1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 2, 0, 2, 0, 39, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "2, 2", + "nonlinear": "2, 2, 2, 2, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1", + "number of continuous time states": "228", + "numerical Jacobians": "0" +} +time=[3.024e+06, 3.456e+06] +loaHea[1].bui.QReqHea_flow=[0e+00, 9.493225708007812e+02, 3.54977392578125e+03, 4.39458447265625e+03, 2.9589153125e+05, 1.8381359375e+05, 3.200260625e+05, 7.4181671875e+04, 2.167645703125e+04, 1.15662470703125e+04, 1.0672275e+05, 2.2364638671875e+04, 1.11800234375e+04, 1.3954861328125e+04, 1.507481875e+05, 8.15220234375e+04, 5.126853515625e+04, 4.920661328125e+04, 1.753485546875e+04, 1.126832885742188e+03, 7.5383271484375e+03, 1.37367978515625e+04, 2.28338671875e+04, 2.7365931640625e+04, 3.7124821875e+05, 2.672950625e+05, 4.0747228125e+05, 1.27899234375e+05, 6.44606171875e+04, 4.228007421875e+04, 1.953594375e+05, 6.5861234375e+04, 1.938912109375e+04, 1.823637109375e+04, 2.06956828125e+05, 1.106841171875e+05, 6.88439296875e+04, 5.960363671875e+04, 2.052243359375e+04, 1.741843017578125e+03, 6.6513701171875e+03, 9.551298828125e+03, 2.5892623046875e+04, 2.9517029296875e+04, 3.6527796875e+05, 2.75665125e+05, 3.807398125e+05, 1.104560078125e+05, 4.86697421875e+04, 2.555734375e+04, 9.34002109375e+04, 1.2115904296875e+04, 6.60182275390625e+03, 1.1296390625e+04, 1.020401875e+05, 6.076783984375e+04, 4.00853125e+04, 3.972075390625e+04, 1.33900302734375e+04, 0e+00, 8.846060180664062e+02, 3.472963134765625e+03, 4.832275390625e+03, 6.455421875e+03, 2.779866875e+05, 1.73268265625e+05, 2.488240625e+05, 4.81323671875e+04, 1.26875478515625e+04, 5.47889111328125e+03, 3.72345078125e+04, 2.417204345703125e+03, 1.654268188476562e+03, 2.834942138671875e+03, 9.587775e+04, 4.7938921875e+04, 2.7294283203125e+04, 2.950828515625e+04, 1.0987525390625e+04, 0e+00, 0e+00, 1.095909271240234e+02, 1.375607055664062e+03, 1.935897583007812e+03, 1.4607953125e+05, 8.16317109375e+04, 5.449210546875e+04, 3.66879609375e+04, 2.5443546875e+04, 1.7017060546875e+04, 1.7355943359375e+04, 1.3462158203125e+04, 1.523075390625e+04, 1.7201748046875e+04, 1.905946166992188e+03, 0e+00, 0e+00, 0e+00, 4.523660583496094e+02, 3.9840888671875e+03, 3.58901708984375e+03] +loaHea[1].bui.QHea_flow=[0e+00, 9.231002197265625e+02, 3.555528564453125e+03, 4.36855224609375e+03, 2.86278e+05, 1.84529484375e+05, 3.2482975e+05, 7.61395390625e+04, 2.222205859375e+04, 1.15943642578125e+04, 1.063295078125e+05, 2.2959298828125e+04, 1.1162927734375e+04, 1.3895189453125e+04, 1.46642609375e+05, 8.28033984375e+04, 5.140463671875e+04, 4.917498828125e+04, 1.906831640625e+04, 1.118329345703125e+03, 7.47692626953125e+03, 1.36922509765625e+04, 2.2346138671875e+04, 2.7668162109375e+04, 3.591009375e+05, 2.68090625e+05, 4.131994375e+05, 1.3015096875e+05, 6.529741796875e+04, 4.24690390625e+04, 1.95379953125e+05, 6.7694359375e+04, 1.957632421875e+04, 1.813507421875e+04, 2.00717328125e+05, 1.125036875e+05, 6.9264640625e+04, 5.962154296875e+04, 2.2584978515625e+04, 1.731439575195312e+03, 6.6367724609375e+03, 9.3293076171875e+03, 2.6022072265625e+04, 2.9030251953125e+04, 3.54071125e+05, 2.7636621875e+05, 3.859445e+05, 1.13010203125e+05, 4.927931640625e+04, 2.5813931640625e+04, 9.31356953125e+04, 1.2324513671875e+04, 6.562439453125e+03, 1.12462509765625e+04, 9.9519921875e+04, 6.157533203125e+04, 4.009282421875e+04, 3.974525390625e+04, 1.4294505859375e+04, 1.869077831506729e-01, 8.795971069335938e+02, 3.470666748046875e+03, 4.79319091796875e+03, 6.46654736328125e+03, 2.6983728125e+05, 1.73925265625e+05, 2.52575953125e+05, 4.985307421875e+04, 1.2818619140625e+04, 5.505017578125e+03, 3.70948671875e+04, 2.433891845703125e+03, 1.653771362304688e+03, 2.80828759765625e+03, 9.32736015625e+04, 4.882748828125e+04, 2.7292314453125e+04, 2.9402578125e+04, 1.161424609375e+04, 1.864832192659378e-01, 6.343424320220947e-02, 0e+00, 1.37478515625e+03, 1.932812866210938e+03, 1.41666359375e+05, 8.274059375e+04, 5.495119921875e+04, 3.69577578125e+04, 2.5663171875e+04, 1.710590625e+04, 1.736618359375e+04, 1.341218359375e+04, 1.52608642578125e+04, 1.712176953125e+04, 2.013870971679688e+03, 1.42064556479454e-01, 5.625147745013237e-02, 3.343262523412704e-02, 4.453864440917969e+02, 3.9598701171875e+03, 3.589494384765625e+03] +loaHea[2].bui.QReqHea_flow=[0e+00, 9.493225708007812e+02, 3.54977392578125e+03, 4.39458447265625e+03, 2.9589153125e+05, 1.8381359375e+05, 3.200260625e+05, 7.4181671875e+04, 2.167645703125e+04, 1.15662470703125e+04, 1.0672275e+05, 2.2364638671875e+04, 1.11800234375e+04, 1.3954861328125e+04, 1.507481875e+05, 8.15220234375e+04, 5.126853515625e+04, 4.920661328125e+04, 1.753485546875e+04, 1.126832885742188e+03, 7.5383271484375e+03, 1.37367978515625e+04, 2.28338671875e+04, 2.7365931640625e+04, 3.7124821875e+05, 2.672950625e+05, 4.0747228125e+05, 1.27899234375e+05, 6.44606171875e+04, 4.228007421875e+04, 1.953594375e+05, 6.5861234375e+04, 1.938912109375e+04, 1.823637109375e+04, 2.06956828125e+05, 1.106841171875e+05, 6.88439296875e+04, 5.960363671875e+04, 2.052243359375e+04, 1.741843017578125e+03, 6.6513701171875e+03, 9.551298828125e+03, 2.5892623046875e+04, 2.9517029296875e+04, 3.6527796875e+05, 2.75665125e+05, 3.807398125e+05, 1.104560078125e+05, 4.86697421875e+04, 2.555734375e+04, 9.34002109375e+04, 1.2115904296875e+04, 6.60182275390625e+03, 1.1296390625e+04, 1.020401875e+05, 6.076783984375e+04, 4.00853125e+04, 3.972075390625e+04, 1.33900302734375e+04, 0e+00, 8.846060180664062e+02, 3.472963134765625e+03, 4.832275390625e+03, 6.455421875e+03, 2.779866875e+05, 1.73268265625e+05, 2.488240625e+05, 4.81323671875e+04, 1.26875478515625e+04, 5.47889111328125e+03, 3.72345078125e+04, 2.417204345703125e+03, 1.654268188476562e+03, 2.834942138671875e+03, 9.587775e+04, 4.7938921875e+04, 2.7294283203125e+04, 2.950828515625e+04, 1.0987525390625e+04, 0e+00, 0e+00, 1.095909271240234e+02, 1.375607055664062e+03, 1.935897583007812e+03, 1.4607953125e+05, 8.16317109375e+04, 5.449210546875e+04, 3.66879609375e+04, 2.5443546875e+04, 1.7017060546875e+04, 1.7355943359375e+04, 1.3462158203125e+04, 1.523075390625e+04, 1.7201748046875e+04, 1.905946166992188e+03, 0e+00, 0e+00, 0e+00, 4.523660583496094e+02, 3.9840888671875e+03, 3.58901708984375e+03] +loaHea[2].bui.QHea_flow=[0e+00, 9.113931274414062e+02, 3.56154052734375e+03, 4.3692587890625e+03, 2.8635075e+05, 1.845295e+05, 3.2482975e+05, 7.6140140625e+04, 2.222205859375e+04, 1.15943642578125e+04, 1.063295078125e+05, 2.2959298828125e+04, 1.1162927734375e+04, 1.3895189453125e+04, 1.46642609375e+05, 8.28034609375e+04, 5.140463671875e+04, 4.917498828125e+04, 1.906831640625e+04, 1.118329345703125e+03, 7.47692626953125e+03, 1.36922509765625e+04, 2.2346138671875e+04, 2.7668162109375e+04, 3.5772715625e+05, 2.68102e+05, 4.1466815625e+05, 1.30150234375e+05, 6.5297390625e+04, 4.24690390625e+04, 1.953655e+05, 6.76943828125e+04, 1.957632421875e+04, 1.813507421875e+04, 2.00923765625e+05, 1.125036875e+05, 6.9264640625e+04, 5.962154296875e+04, 2.2584978515625e+04, 1.731439575195312e+03, 6.6367724609375e+03, 9.3293076171875e+03, 2.6022072265625e+04, 2.9030251953125e+04, 3.539011875e+05, 2.76375e+05, 3.894399375e+05, 1.130490546875e+05, 4.927937890625e+04, 2.5813935546875e+04, 9.31356953125e+04, 1.2324513671875e+04, 6.562439453125e+03, 1.12462509765625e+04, 9.9519921875e+04, 6.157533203125e+04, 4.009282421875e+04, 3.974525390625e+04, 1.4294505859375e+04, 1.869077831506729e-01, 8.795971069335938e+02, 3.470666748046875e+03, 4.79319091796875e+03, 6.46654736328125e+03, 2.700659375e+05, 1.73925265625e+05, 2.52575953125e+05, 4.98530859375e+04, 1.2818619140625e+04, 5.505017578125e+03, 3.70948671875e+04, 2.433891845703125e+03, 1.653771362304688e+03, 2.80828759765625e+03, 9.32736015625e+04, 4.882748828125e+04, 2.7292314453125e+04, 2.9402578125e+04, 1.161424609375e+04, 1.864832192659378e-01, 6.343385577201843e-02, 0e+00, 1.37478515625e+03, 1.932812866210938e+03, 1.41666359375e+05, 8.27406171875e+04, 5.495119921875e+04, 3.69577578125e+04, 2.5663171875e+04, 1.710590625e+04, 1.736618359375e+04, 1.341218359375e+04, 1.52608642578125e+04, 1.712176953125e+04, 2.013870971679688e+03, 1.420645415782928e-01, 5.625099316239357e-02, 3.343221917748451e-02, 4.453863220214844e+02, 3.9598701171875e+03, 3.589494384765625e+03] +loaCoo[1].bui.QReqCoo_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -5.339547119140625e+02, -3.32694873046875e+03, -9.840388793945312e+02, -6.12227490234375e+03, -9.533259765625e+03, -9.902181640625e+03, -8.495443359375e+03, -1.0278958984375e+04, -1.0153583984375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.992416076660156e+02, -3.1106591796875e+03, -2.382525482177734e+02, -4.572083984375e+03, -8.15827001953125e+03, -8.8536318359375e+03, -7.414298828125e+03, -1.0230013671875e+04, -1.00746240234375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.6863232421875e+02, -2.91993994140625e+03, -2.195702514648438e+02, -3.989195556640625e+03, -8.70266015625e+03, -9.702943359375e+03, -8.4947177734375e+03, -1.021785546875e+04, -1.0063189453125e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -6.977890625e+02, -4.601482421875e+03, -4.14751123046875e+03, -1.2553451171875e+04, -2.0243689453125e+04, -1.9603640625e+04, -1.2679734375e+04, -1.1632966796875e+04, -1.1368833984375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +loaCoo[1].bui.QCoo_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.807701110839844e+01, -3.521373779296875e+03, -9.507727661132812e+02, -5.9635439453125e+03, -9.4928203125e+03, -9.9517861328125e+03, -8.483775390625e+03, -1.0167056640625e+04, -1.0221708984375e+04, -9.18123779296875e+01, -3.699032068252563e+00, -1.346491575241089e+00, -7.716261148452759e-01, -5.426958203315735e-01, -4.202494919300079e-01, -3.436214029788971e-01, -2.9081791639328e-01, -2.519198954105377e-01, -2.218787968158722e-01, -1.978706419467926e-01, -6.258880233764648e+01, -3.288309326171875e+03, -1.62488037109375e+02, -4.41138232421875e+03, -8.1050556640625e+03, -8.911859375e+03, -7.36772119140625e+03, -1.0115455078125e+04, -1.01441923828125e+04, -9.138276672363281e+01, -3.69756031036377e+00, -1.345631003379822e+00, -7.711644768714905e-01, -5.424042344093323e-01, -4.200310707092285e-01, -3.434529900550842e-01, -2.906893789768219e-01, -2.518229484558105e-01, -2.218059301376343e-01, -1.978160291910172e-01, -4.788637924194336e+01, -3.083849853515625e+03, -1.346405181884766e+02, -3.845603759765625e+03, -8.6278779296875e+03, -9.7458671875e+03, -8.482875e+03, -1.01113154296875e+04, -1.01308720703125e+04, -9.092356872558594e+01, -3.696234703063965e+00, -1.345559477806091e+00, -7.711955308914185e-01, -5.424407124519348e-01, -4.200713336467743e-01, -3.434869349002838e-01, -2.907155752182007e-01, -2.518419921398163e-01, -2.218196541070938e-01, -1.978254318237305e-01, -2.376166229248047e+02, -4.853859375e+03, -3.90962744140625e+03, -1.23178564453125e+04, -2.02102890625e+04, -1.9716388671875e+04, -1.28953359375e+04, -1.153817578125e+04, -1.14409677734375e+04, -9.691410827636719e+01, -3.711919546127319e+00, -1.353968620300293e+00, -7.756562232971191e-01, -5.452203154563904e-01, -4.221272766590118e-01, -3.450658619403839e-01, -2.91910707950592e-01, -2.527400255203247e-01, -2.224924713373184e-01, -1.983326822519302e-01, -1.785658597946167e-01, -1.620790064334869e-01, -1.481219381093979e-01, -1.361623555421829e-01, -1.258093416690826e-01, -1.167681813240051e-01, -1.088119223713875e-01, -1.017627045512199e-01, -9.547912329435349e-02, -8.984728157520294e-02, -8.477684110403061e-02, -8.018846809864044e-02, -7.601849734783173e-02, -7.221294939517975e-02, -6.873028725385666e-02] +loaCoo[2].bui.QReqCoo_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -5.339547119140625e+02, -3.32694873046875e+03, -9.840388793945312e+02, -6.12227490234375e+03, -9.533259765625e+03, -9.902181640625e+03, -8.495443359375e+03, -1.0278958984375e+04, -1.0153583984375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.992416076660156e+02, -3.1106591796875e+03, -2.382525482177734e+02, -4.572083984375e+03, -8.15827001953125e+03, -8.8536318359375e+03, -7.414298828125e+03, -1.0230013671875e+04, -1.00746240234375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -4.6863232421875e+02, -2.91993994140625e+03, -2.195702514648438e+02, -3.989195556640625e+03, -8.70266015625e+03, -9.702943359375e+03, -8.4947177734375e+03, -1.021785546875e+04, -1.0063189453125e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -6.977890625e+02, -4.601482421875e+03, -4.14751123046875e+03, -1.2553451171875e+04, -2.0243689453125e+04, -1.9603640625e+04, -1.2679734375e+04, -1.1632966796875e+04, -1.1368833984375e+04, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +loaCoo[2].bui.QCoo_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.704433822631836e+01, -3.523980712890625e+03, -9.5077587890625e+02, -5.96354443359375e+03, -9.4928203125e+03, -9.9517861328125e+03, -8.483775390625e+03, -1.0167056640625e+04, -1.0221708984375e+04, -9.18123779296875e+01, -3.699022531509399e+00, -1.346437335014343e+00, -7.7165687084198e-01, -5.427303314208984e-01, -4.202786684036255e-01, -3.436452448368073e-01, -2.908373475074768e-01, -2.519358098506927e-01, -2.218921035528183e-01, -1.97885200381279e-01, -6.259086608886719e+01, -3.28831005859375e+03, -1.62488037109375e+02, -4.41138232421875e+03, -8.1050556640625e+03, -8.911859375e+03, -7.36772119140625e+03, -1.0115455078125e+04, -1.01441923828125e+04, -9.138276672363281e+01, -3.697549343109131e+00, -1.345576524734497e+00, -7.711958885192871e-01, -5.42439341545105e-01, -4.200606644153595e-01, -3.43477189540863e-01, -2.907090783119202e-01, -2.518390715122223e-01, -2.218194454908371e-01, -1.978307962417603e-01, -4.788802337646484e+01, -3.083850830078125e+03, -1.346405181884766e+02, -3.845603759765625e+03, -8.6278779296875e+03, -9.7458671875e+03, -8.482875e+03, -1.01113154296875e+04, -1.01308720703125e+04, -9.092356872558594e+01, -3.69622278213501e+00, -1.345505595207214e+00, -7.712265253067017e-01, -5.424754023551941e-01, -4.200995862483978e-01, -3.435105681419373e-01, -2.907350659370422e-01, -2.518580257892609e-01, -2.218329906463623e-01, -1.978400051593781e-01, -2.376173400878906e+02, -4.85385986328125e+03, -3.90962744140625e+03, -1.23178564453125e+04, -2.02102890625e+04, -1.9716388671875e+04, -1.28953359375e+04, -1.153817578125e+04, -1.14409677734375e+04, -9.691410827636719e+01, -3.711917877197266e+00, -1.353913068771362e+00, -7.756880521774292e-01, -5.452560186386108e-01, -4.22154039144516e-01, -3.450857400894165e-01, -2.919287979602814e-01, -2.527559399604797e-01, -2.22506120800972e-01, -1.983462274074554e-01, -1.785766929388046e-01, -1.620878577232361e-01, -1.481293886899948e-01, -1.361687630414963e-01, -1.258149296045303e-01, -1.167731210589409e-01, -1.088163256645203e-01, -1.017666682600975e-01, -9.548270702362061e-02, -8.985054492950439e-02, -8.477913588285446e-02, -8.019004762172699e-02, -7.601974904537201e-02, -7.221455872058868e-02, -6.873209029436111e-02] +pla.PHea=[0e+00, 1.5193078125e+05, 7.09247021484375e+03, 5.2266708984375e+03, 3.6679971875e+05, 1.103119765625e+05, 3.688869375e+05, 1.0253703125e+05, 1.373916796875e+04, 6.77868896484375e+03, 6.1921796875e+04, 1.4778013671875e+04, 6.0798046875e+03, 8.9345107421875e+03, 8.071278125e+04, 1.35060390625e+05, 1.38358609375e+05, 4.28389921875e+04, 1.2403857421875e+04, 1.670692749023438e+03, 2.24373828125e+03, 7.78316845703125e+03, 1.87410546875e+04, 2.525425e+04, 3.9533434375e+05, 1.37234640625e+05, 3.8363353125e+05, 1.7966928125e+05, 4.671766015625e+04, 3.6247453125e+04, 1.169270625e+05, 1.240895625e+05, 1.22347568359375e+04, 1.23073681640625e+04, 2.12131953125e+05, 1.702601875e+05, 4.778072265625e+04, 4.752873046875e+04, 1.5401376953125e+04, 1.708269165039062e+03, 2.16878125e+03, 4.08530908203125e+03, 2.39360703125e+04, 2.73924609375e+04, 4.1048546875e+05, 1.39618296875e+05, 3.97093125e+05, 1.269389921875e+05, 4.18809765625e+04, 1.869304296875e+04, 5.67941484375e+04, 6.62039599609375e+03, 3.26246728515625e+03, 6.0961806640625e+03, 6.334171484375e+04, 4.829902734375e+04, 3.366432421875e+04, 3.4354890625e+04, 2.2631434375e+05, 1.5371796875e+03, 1.001046997070312e+03, 1.043619384765625e+03, 1.611591064453125e+03, 3.099651611328125e+03, 1.4196234375e+05, 3.115085625e+05, 2.7526021875e+05, 4.14091953125e+04, 7.23772509765625e+03, 3.442313720703125e+03, 4.109982421875e+04, 2.871171142578125e+03, 1.61505859375e+03, 1.274035034179688e+03, 6.211125e+04, 4.1081171875e+04, 2.0459306640625e+04, 2.519542578125e+04, 8.0138818359375e+03, 1.660680053710938e+03, 0e+00, 0e+00, 1.22968017578125e+03, 9.786393432617188e+02, 7.67515625e+04, 5.280864453125e+04, 4.687955859375e+04, 3.0524314453125e+04, 1.9421892578125e+04, 1.18159404296875e+04, 1.313246875e+04, 9.888556640625e+03, 1.23451328125e+04, 1.4620361328125e+04, 3.705736572265625e+03, 0e+00, 0e+00, 0e+00, 1.857749145507812e+03, 2.16135302734375e+03, 2.204888427734375e+03] +pla.PCoo=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.895761489868164e+01, 1.556354370117188e+03, 7.404185180664062e+02, 1.813484252929688e+03, 3.46779736328125e+03, 3.359240478515625e+03, 2.649623779296875e+03, 3.21693359375e+03, 3.800939697265625e+03, 5.562002563476562e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.466811370849609e+01, 8.79885009765625e+02, 4.445778198242188e+02, 8.721212158203125e+02, 2.50765185546875e+03, 2.91924462890625e+03, 2.18178125e+03, 3.758346923828125e+03, 3.425477783203125e+03, 5.457368774414062e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.736616325378418e+01, 8.062943115234375e+02, 4.853930358886719e+02, 7.176683959960938e+02, 2.772221923828125e+03, 3.20577099609375e+03, 2.610924072265625e+03, 3.166865966796875e+03, 3.716767333984375e+03, 5.723580322265625e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.090525512695312e+02, 1.433487670898438e+03, 9.072676391601562e+02, 4.08760888671875e+03, 6.5256416015625e+03, 6.05821240234375e+03, 3.909632080078125e+03, 3.487699951171875e+03, 5.138587890625e+03, 5.83144775390625e+02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.PFan=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.464501857757568e+01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.PPum=[0e+00, 1.6045265625e+04, 6.233923828125e+03, 6.23430810546875e+03, 2.141026171875e+04, 1.278353125e+04, 3.342290625e+04, 2.094278515625e+04, 1.814331640625e+04, 1.813998828125e+04, 1.927009375e+04, 1.8131638671875e+04, 1.8139015625e+04, 1.81402578125e+04, 1.84415859375e+04, 2.0965861328125e+04, 1.136232421875e+04, 6.23402783203125e+03, 6.21793017578125e+03, 6.23420947265625e+03, 6.2347119140625e+03, 6.23450341796875e+03, 6.23812255859375e+03, 6.2308955078125e+03, 2.4107486328125e+04, 1.33553681640625e+04, 3.878955859375e+04, 2.7592791015625e+04, 1.8686197265625e+04, 1.8137125e+04, 2.042057421875e+04, 2.0988869140625e+04, 1.840239453125e+04, 1.8350505859375e+04, 2.368230859375e+04, 2.7598904296875e+04, 6.510341796875e+03, 6.2334345703125e+03, 6.21302490234375e+03, 6.2342255859375e+03, 6.23431494140625e+03, 6.23564990234375e+03, 6.2327255859375e+03, 6.23812646484375e+03, 2.378176953125e+04, 1.35969072265625e+04, 3.840425390625e+04, 2.47952734375e+04, 1.850771875e+04, 1.8136462890625e+04, 1.81481953125e+04, 1.813611328125e+04, 1.813933203125e+04, 1.8140208984375e+04, 1.8178966796875e+04, 1.8124478515625e+04, 6.2327890625e+03, 6.23341943359375e+03, 1.34650537109375e+04, 6.23412060546875e+03, 6.2338046875e+03, 6.234111328125e+03, 6.2344609375e+03, 6.23399609375e+03, 1.48844541015625e+04, 2.0477865234375e+04, 3.599164453125e+04, 1.8108130859375e+04, 1.8138330078125e+04, 1.814073046875e+04, 1.814213671875e+04, 1.8137818359375e+04, 1.81370078125e+04, 1.8140025390625e+04, 1.8476564453125e+04, 1.8124669921875e+04, 6.2330390625e+03, 6.234763671875e+03, 6.22744287109375e+03, 6.23407861328125e+03, 0e+00, 0e+00, 6.23409619140625e+03, 6.2341142578125e+03, 6.40972021484375e+03, 6.1931845703125e+03, 6.22840283203125e+03, 6.23096923828125e+03, 6.23172265625e+03, 6.23323291015625e+03, 6.23392529296875e+03, 6.2342265625e+03, 6.23380078125e+03, 6.23471142578125e+03, 6.23256640625e+03, 0e+00, 0e+00, 0e+00, 6.19026611328125e+03, 6.23433544921875e+03, 6.2340712890625e+03] +pla.THeaWatSup.T=[2.931499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331399536132812e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.323327331542969e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.327231750488281e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331487731933594e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331497497558594e+02, 3.331497497558594e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331496887207031e+02, 3.331496887207031e+02, 3.331496887207031e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02] +pla.THeaWatPriRet.T=[2.931499938964844e+02, 3.322843322753906e+02, 3.324285278320312e+02, 3.326192626953125e+02, 3.213935852050781e+02, 3.252612915039062e+02, 3.226264343261719e+02, 3.265223083496094e+02, 3.316749877929688e+02, 3.324622802734375e+02, 3.230289306640625e+02, 3.316553344726562e+02, 3.32533203125e+02, 3.322422790527344e+02, 3.200981140136719e+02, 3.259209594726562e+02, 3.286793212890625e+02, 3.288119201660156e+02, 3.319039916992188e+02, 3.329806823730469e+02, 3.329216613769531e+02, 3.323590087890625e+02, 3.312483215332031e+02, 3.305898132324219e+02, 3.223136596679688e+02, 3.2240771484375e+02, 3.214100036621094e+02, 3.276151733398438e+02, 3.274568481445312e+02, 3.295187072753906e+02, 3.235866394042969e+02, 3.272757873535156e+02, 3.319126892089844e+02, 3.318878784179688e+02, 3.212857055664062e+02, 3.28393798828125e+02, 3.270775756835938e+02, 3.278941650390625e+02, 3.31599609375e+02, 3.329768981933594e+02, 3.329296569824219e+02, 3.327333374023438e+02, 3.307212524414062e+02, 3.303695678710938e+02, 3.223660278320312e+02, 3.224404296875e+02, 3.218664855957031e+02, 3.250014343261719e+02, 3.289156799316406e+02, 3.31259521484375e+02, 3.244965209960938e+02, 3.324775695800781e+02, 3.328182678222656e+02, 3.325297241210938e+02, 3.228556518554688e+02, 3.278085632324219e+02, 3.297332763671875e+02, 3.296573181152344e+02, 3.322396850585938e+02, 3.329941711425781e+02, 3.330396728515625e+02, 3.330358276367188e+02, 3.329757385253906e+02, 3.328251342773438e+02, 3.215442199707031e+02, 3.257261657714844e+02, 3.222654113769531e+02, 3.289174194335938e+02, 3.324169006347656e+02, 3.327991943359375e+02, 3.29000244140625e+02, 3.328584899902344e+02, 3.329866333007812e+02, 3.330206604003906e+02, 3.232275390625e+02, 3.289888916015625e+02, 3.310762634277344e+02, 3.305847778320312e+02, 3.323459167480469e+02, 3.329819030761719e+02, 3.329974670410156e+02, 3.329974670410156e+02, 3.330153503417969e+02, 3.330439758300781e+02, 3.202323913574219e+02, 3.259291687011719e+02, 3.283504333496094e+02, 3.300520935058594e+02, 3.311802978515625e+02, 3.319518127441406e+02, 3.318175048828125e+02, 3.321464538574219e+02, 3.318976440429688e+02, 3.316656494140625e+02, 3.32776611328125e+02, 3.329612426757812e+02, 3.329612426757812e+02, 3.329612426757812e+02, 3.329461669921875e+02, 3.329175415039062e+02, 3.329190979003906e+02] +pla.TChiWatSup.T=[2.931499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791502075195312e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02] +pla.TChiWatPriRet.T=[2.931499938964844e+02, 2.792318420410156e+02, 2.792318420410156e+02, 2.792318420410156e+02, 2.792318420410156e+02, 2.792318420410156e+02, 2.792359008789062e+02, 2.794509582519531e+02, 2.792957153320312e+02, 2.795194702148438e+02, 2.797974853515625e+02, 2.797849731445312e+02, 2.796673583984375e+02, 2.797942810058594e+02, 2.797849426269531e+02, 2.7925e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.791949157714844e+02, 2.792137451171875e+02, 2.793114013671875e+02, 2.792225952148438e+02, 2.793100280761719e+02, 2.796179504394531e+02, 2.797020874023438e+02, 2.795906372070312e+02, 2.798012390136719e+02, 2.79781982421875e+02, 2.792501220703125e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791950073242188e+02, 2.791996154785156e+02, 2.793002014160156e+02, 2.792198791503906e+02, 2.792855529785156e+02, 2.796497192382812e+02, 2.797562255859375e+02, 2.796654663085938e+02, 2.797897033691406e+02, 2.797789611816406e+02, 2.792499389648438e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.791949462890625e+02, 2.792660522460938e+02, 2.794034729003906e+02, 2.793150024414062e+02, 2.799420166015625e+02, 2.804203186035156e+02, 2.803740234375e+02, 2.799365234375e+02, 2.798594055175781e+02, 2.798560791015625e+02, 2.792496032714844e+02, 2.791941833496094e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02, 2.791941528320312e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerGroup.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerGroup.txt new file mode 100644 index 00000000000..08a4bbcce36 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerGroup.txt @@ -0,0 +1,22 @@ +last-generated=2023-02-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "20", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +y1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chi.m2_flow=[6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.851999664306641e+01, 6.848078155517578e+01, 6.834674835205078e+01, 6.800241851806641e+01, 6.712545776367188e+01, 6.494511413574219e+01, 6.010591888427734e+01, 5.199925231933594e+01, 4.345879364013672e+01, 3.801622772216797e+01, 3.560041046142578e+01, 3.471099853515625e+01, 3.440866851806641e+01, 3.430903625488281e+01, 3.427648544311523e+01, 3.426578140258789e+01, 3.426218414306641e+01, 3.426092147827148e+01, 3.426045608520508e+01, 3.42602653503418e+01, 3.426018142700195e+01, 3.42601432800293e+01, 3.426012420654297e+01, 3.426011276245117e+01, 3.426010894775391e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.422088241577148e+01, 3.408684921264648e+01, 3.374252700805664e+01, 3.286556243896484e+01, 3.068508911132812e+01, 2.584568214416504e+01, 1.773900032043457e+01, 9.198827743530273e+00, 3.756534099578857e+00, 1.340850234031677e+00, 4.513252377510071e-01, 1.489333212375641e-01, 4.924436286091805e-02, 1.66342668235302e-02, 5.904278252273798e-03, 2.294623758643866e-03, 1.032429630868137e-03, 5.636331625282764e-04, 3.730602038558573e-04, 2.883975394070148e-04] +chi.chi.m2_flow=[3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 3.42599983215332e+01, 6.848078155517578e+01, 6.834674835205078e+01, 6.800241851806641e+01, 6.712545776367188e+01, 6.494511413574219e+01, 6.010591888427734e+01, 5.199925231933594e+01, 4.345879364013672e+01, 3.801622772216797e+01, 3.560041046142578e+01, 3.471099853515625e+01, 3.440866851806641e+01, 3.430903625488281e+01, 3.427648544311523e+01, 3.426578140258789e+01, 3.426218414306641e+01, 3.426092147827148e+01, 3.426045608520508e+01, 3.42602653503418e+01, 3.426018142700195e+01, 3.42601432800293e+01, 3.426012420654297e+01, 3.426011276245117e+01, 3.426010894775391e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.426010513305664e+01, 3.422088241577148e+01, 3.408684921264648e+01, 3.374252700805664e+01, 3.286556243896484e+01, 3.068508911132812e+01, 2.584568214416504e+01, 1.773900032043457e+01, 9.198827743530273e+00, 3.756534099578857e+00, 1.340850234031677e+00, 4.513252377510071e-01, 1.489333212375641e-01, 4.924436286091805e-02, 1.66342668235302e-02, 5.904278252273798e-03, 2.294623758643866e-03, 1.032429630868137e-03, 5.636331625282764e-04, 3.730602038558573e-04, 2.883975394070148e-04] +TChiWatSupSet.y=[2.798200073242188e+02, 2.798699951171875e+02, 2.799200134277344e+02, 2.799700012207031e+02, 2.800199890136719e+02, 2.800700073242188e+02, 2.801199951171875e+02, 2.801700134277344e+02, 2.802200012207031e+02, 2.802699890136719e+02, 2.803200073242188e+02, 2.803699951171875e+02, 2.804200134277344e+02, 2.804700012207031e+02, 2.805199890136719e+02, 2.805700073242188e+02, 2.806199951171875e+02, 2.806700134277344e+02, 2.807200012207031e+02, 2.807699890136719e+02, 2.808200073242188e+02, 2.808699951171875e+02, 2.809200134277344e+02, 2.809700012207031e+02, 2.810199890136719e+02, 2.810700073242188e+02, 2.811199951171875e+02, 2.811700134277344e+02, 2.812200012207031e+02, 2.812699890136719e+02, 2.813200073242188e+02, 2.813699951171875e+02, 2.814200134277344e+02, 2.814700012207031e+02, 2.815199890136719e+02, 2.815700073242188e+02, 2.816199951171875e+02, 2.816700134277344e+02, 2.817200012207031e+02, 2.817699890136719e+02, 2.818200073242188e+02, 2.818699951171875e+02, 2.819200134277344e+02, 2.819700012207031e+02, 2.820199890136719e+02, 2.820700073242188e+02, 2.821199951171875e+02, 2.821700134277344e+02, 2.822200012207031e+02, 2.822699890136719e+02, 2.823200073242188e+02, 2.823699951171875e+02, 2.824200134277344e+02, 2.824700012207031e+02, 2.825199890136719e+02, 2.825700073242188e+02, 2.826199951171875e+02, 2.826700134277344e+02, 2.827200012207031e+02, 2.827699890136719e+02, 2.828200073242188e+02, 2.828699951171875e+02, 2.829200134277344e+02, 2.829700012207031e+02, 2.830199890136719e+02, 2.830700073242188e+02, 2.831199951171875e+02, 2.831700134277344e+02, 2.832200012207031e+02, 2.832699890136719e+02, 2.833200073242188e+02, 2.833699951171875e+02, 2.834200134277344e+02, 2.834700012207031e+02, 2.835199890136719e+02, 2.835700073242188e+02, 2.836199951171875e+02, 2.836700134277344e+02, 2.837200012207031e+02, 2.837699890136719e+02, 2.838200073242188e+02, 2.838699951171875e+02, 2.839200134277344e+02, 2.839700012207031e+02, 2.840199890136719e+02, 2.840700073242188e+02, 2.841199951171875e+02, 2.841700134277344e+02, 2.842200012207031e+02, 2.842699890136719e+02, 2.843200073242188e+02, 2.843699951171875e+02, 2.844200134277344e+02, 2.844700012207031e+02, 2.845199890136719e+02, 2.845700073242188e+02, 2.846199951171875e+02, 2.846700134277344e+02, 2.847200012207031e+02, 2.847699890136719e+02, 2.848200073242188e+02] +chi.sta_a2.T=[2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02] +chi.sta_b2.T=[2.931499938964844e+02, 2.911517639160156e+02, 2.884336242675781e+02, 2.862734069824219e+02, 2.846167907714844e+02, 2.833311767578125e+02, 2.82342041015625e+02, 2.81602783203125e+02, 2.8107177734375e+02, 2.807076721191406e+02, 2.804714050292969e+02, 2.803291625976562e+02, 2.802536010742188e+02, 2.80223876953125e+02, 2.802247314453125e+02, 2.802455139160156e+02, 2.802788696289062e+02, 2.803199768066406e+02, 2.8036572265625e+02, 2.804140930175781e+02, 2.804638977050781e+02, 2.80514404296875e+02, 2.805652160644531e+02, 2.806160583496094e+02, 2.806668395996094e+02, 2.80717529296875e+02, 2.807680969238281e+02, 2.808185424804688e+02, 2.808689270019531e+02, 2.80919189453125e+02, 2.809693908691406e+02, 2.810195617675781e+02, 2.810696716308594e+02, 2.811197509765625e+02, 2.811698303222656e+02, 2.812198791503906e+02, 2.812698974609375e+02, 2.813199157714844e+02, 2.813699340820312e+02, 2.814199523925781e+02, 2.81469970703125e+02, 2.815199890136719e+02, 2.815699768066406e+02, 2.816199951171875e+02, 2.816699829101562e+02, 2.817200012207031e+02, 2.817699890136719e+02, 2.818200073242188e+02, 2.818699951171875e+02, 2.819200134277344e+02, 2.819700012207031e+02, 2.820470886230469e+02, 2.821887512207031e+02, 2.823528442382812e+02, 2.825070495605469e+02, 2.82635986328125e+02, 2.827276916503906e+02, 2.827730102539062e+02, 2.827870483398438e+02, 2.827868041992188e+02, 2.8278173828125e+02, 2.827776794433594e+02, 2.827781372070312e+02, 2.827850341796875e+02, 2.827988586425781e+02, 2.828193359375e+02, 2.828457946777344e+02, 2.828773193359375e+02, 2.829130249023438e+02, 2.829520874023438e+02, 2.829938049316406e+02, 2.8303759765625e+02, 2.830829467773438e+02, 2.831294860839844e+02, 2.831769409179688e+02, 2.832250366210938e+02, 2.83273681640625e+02, 2.833226623535156e+02, 2.833719177246094e+02, 2.8342138671875e+02, 2.834710083007812e+02, 2.835638122558594e+02, 2.83819091796875e+02, 2.842293395996094e+02, 2.847231140136719e+02, 2.852218933105469e+02, 2.856553344726562e+02, 2.859685974121094e+02, 2.861466674804688e+02, 2.862260131835938e+02, 2.86255859375e+02, 2.8626611328125e+02, 2.862695007324219e+02, 2.862705688476562e+02, 2.862709350585938e+02, 2.862710571289062e+02, 2.862710876464844e+02, 2.862711181640625e+02, 2.862711181640625e+02, 2.862711181640625e+02, 2.862711181640625e+02] +chi.sta_a1.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +chi.sta_b1.T=[2.931499938964844e+02, 2.938683471679688e+02, 2.949776306152344e+02, 2.959999084472656e+02, 2.96891845703125e+02, 2.976602172851562e+02, 2.983086853027344e+02, 2.988407287597656e+02, 2.992640991210938e+02, 2.995907897949219e+02, 2.998350219726562e+02, 3.000114135742188e+02, 3.001333923339844e+02, 3.002127685546875e+02, 3.002592468261719e+02, 3.002807006835938e+02, 3.002833251953125e+02, 3.002719116210938e+02, 3.002500915527344e+02, 3.002205810546875e+02, 3.001854553222656e+02, 3.001462097167969e+02, 3.001039733886719e+02, 3.000596313476562e+02, 3.000137023925781e+02, 2.999666748046875e+02, 2.999188537597656e+02, 2.998704833984375e+02, 2.998217163085938e+02, 2.997727355957031e+02, 2.997235412597656e+02, 2.996742553710938e+02, 2.996249389648438e+02, 2.995755615234375e+02, 2.995261840820312e+02, 2.994768676757812e+02, 2.994275512695312e+02, 2.993782653808594e+02, 2.993290405273438e+02, 2.992798767089844e+02, 2.992307739257812e+02, 2.991817016601562e+02, 2.991327209472656e+02, 2.990838012695312e+02, 2.990349426269531e+02, 2.989861755371094e+02, 2.989374389648438e+02, 2.988887939453125e+02, 2.988402099609375e+02, 2.987917175292969e+02, 2.987432556152344e+02, 2.986731872558594e+02, 2.985514221191406e+02, 2.984120788574219e+02, 2.982816162109375e+02, 2.981730651855469e+02, 2.9809716796875e+02, 2.980615234375e+02, 2.980514221191406e+02, 2.980507202148438e+02, 2.980505676269531e+02, 2.980464172363281e+02, 2.980361633300781e+02, 2.98019287109375e+02, 2.979962768554688e+02, 2.979679565429688e+02, 2.979352722167969e+02, 2.978991088867188e+02, 2.978602600097656e+02, 2.978193969726562e+02, 2.977769775390625e+02, 2.977334289550781e+02, 2.976890563964844e+02, 2.976441040039062e+02, 2.975987548828125e+02, 2.975531005859375e+02, 2.975072326660156e+02, 2.974612731933594e+02, 2.974152526855469e+02, 2.973691711425781e+02, 2.973231201171875e+02, 2.9723876953125e+02, 2.97010009765625e+02, 2.966436462402344e+02, 2.962031860351562e+02, 2.957584838867188e+02, 2.953721923828125e+02, 2.950930480957031e+02, 2.949344177246094e+02, 2.948637084960938e+02, 2.948371276855469e+02, 2.948279724121094e+02, 2.948249816894531e+02, 2.948240051269531e+02, 2.948236694335938e+02, 2.948235778808594e+02, 2.948235473632812e+02, 2.948235168457031e+02, 2.948235168457031e+02, 2.948235168457031e+02, 2.948235168457031e+02] +chi.chi.PLR1=[8.989824056625366e-01, 8.925913572311401e-01, 8.859312534332275e-01, 8.79097580909729e-01, 8.721590638160706e-01, 8.651647567749023e-01, 8.581489324569702e-01, 8.511355519294739e-01, 8.441410064697266e-01, 8.371766209602356e-01, 8.302497267723083e-01, 8.233652114868164e-01, 8.165262341499329e-01, 8.097344636917114e-01, 8.029910326004028e-01, 7.962961196899414e-01, 7.896498441696167e-01, 7.830517292022705e-01, 7.765013575553894e-01, 7.699981331825256e-01, 7.635412812232971e-01, 7.571300864219666e-01, 7.507637739181519e-01, 7.444415092468262e-01, 7.381625175476074e-01, 7.319259643554688e-01, 7.257310748100281e-01, 7.195770144462585e-01, 7.134630680084229e-01, 7.073883414268494e-01, 7.013521790504456e-01, 6.953538060188293e-01, 6.893923878669739e-01, 6.834672689437866e-01, 6.775777339935303e-01, 6.71722948551178e-01, 6.659023761749268e-01, 6.601151823997498e-01, 6.543607115745544e-01, 6.486383676528931e-01, 6.429473757743835e-01, 6.372871398925781e-01, 6.316570043563843e-01, 6.260563135147095e-01, 6.204844117164612e-01, 6.149407625198364e-01, 6.094246506690979e-01, 6.039355397224426e-01, 5.984727740287781e-01, 5.930358171463013e-01, 5.876240134239197e-01, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 9.723819494247437e-01, 8.340114951133728e-01, 6.907848119735718e-01, 5.987094640731812e-01, 5.554072260856628e-01, 5.363845229148865e-01, 5.266003012657166e-01, 5.199759602546692e-01, 5.143913626670837e-01, 5.091487765312195e-01, 5.040240883827209e-01, 4.989464581012726e-01, 4.938935041427612e-01, 4.888581037521362e-01, 4.838378429412842e-01, 4.788317680358887e-01, 4.738393723964691e-01, 4.688601791858673e-01, 4.638938009738922e-01, 4.589398205280304e-01, 4.539978206157684e-01, 4.490673542022705e-01, 4.441480040550232e-01, 4.392393231391907e-01, 4.343408644199371e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chi.chi.PLR2=[8.989824056625366e-01, 8.925913572311401e-01, 8.859312534332275e-01, 8.79097580909729e-01, 8.721590638160706e-01, 8.651647567749023e-01, 8.581489324569702e-01, 8.511355519294739e-01, 8.441410064697266e-01, 8.371766209602356e-01, 8.302497267723083e-01, 8.233652114868164e-01, 8.165262341499329e-01, 8.097344636917114e-01, 8.029910326004028e-01, 7.962961196899414e-01, 7.896498441696167e-01, 7.830517292022705e-01, 7.765013575553894e-01, 7.699981331825256e-01, 7.635412812232971e-01, 7.571300864219666e-01, 7.507637739181519e-01, 7.444415092468262e-01, 7.381625175476074e-01, 7.319259643554688e-01, 7.257310748100281e-01, 7.195770144462585e-01, 7.134630680084229e-01, 7.073883414268494e-01, 7.013521790504456e-01, 6.953538060188293e-01, 6.893923878669739e-01, 6.834672689437866e-01, 6.775777339935303e-01, 6.71722948551178e-01, 6.659023761749268e-01, 6.601151823997498e-01, 6.543607115745544e-01, 6.486383676528931e-01, 6.429473757743835e-01, 6.372871398925781e-01, 6.316570043563843e-01, 6.260563135147095e-01, 6.204844117164612e-01, 6.149407625198364e-01, 6.094246506690979e-01, 6.039355397224426e-01, 5.984727740287781e-01, 5.930358171463013e-01, 5.876240134239197e-01, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 1.029999971389771e+00, 9.723819494247437e-01, 8.340114951133728e-01, 6.907848119735718e-01, 5.987094640731812e-01, 5.554072260856628e-01, 5.363845229148865e-01, 5.266003012657166e-01, 5.199759602546692e-01, 5.143913626670837e-01, 5.091487765312195e-01, 5.040240883827209e-01, 4.989464581012726e-01, 4.938935041427612e-01, 4.888581037521362e-01, 4.838378429412842e-01, 4.788317680358887e-01, 4.738393723964691e-01, 4.688601791858673e-01, 4.638938009738922e-01, 4.589398205280304e-01, 4.539978206157684e-01, 4.490673542022705e-01, 4.441480040550232e-01, 4.392393231391907e-01, 4.343408644199371e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +dat.PLRMax=[1.029999971389771e+00, 1.029999971389771e+00] +chi.chi.COP=[6.661047458648682e+00, 6.671320915222168e+00, 6.684889793395996e+00, 6.701964855194092e+00, 6.722203254699707e+00, 6.745106220245361e+00, 6.77018404006958e+00, 6.79701566696167e+00, 6.825263023376465e+00, 6.854663372039795e+00, 6.885016441345215e+00, 6.916170597076416e+00, 6.948013782501221e+00, 6.980461597442627e+00, 7.013450622558594e+00, 7.046933174133301e+00, 7.080873012542725e+00, 7.115242481231689e+00, 7.150019645690918e+00, 7.185186862945557e+00, 7.220729351043701e+00, 7.256634712219238e+00, 7.292893409729004e+00, 7.329494953155518e+00, 7.36643123626709e+00, 7.403693675994873e+00, 7.441275119781494e+00, 7.479167461395264e+00, 7.517363548278809e+00, 7.555855751037598e+00, 7.5946364402771e+00, 7.6336989402771e+00, 7.67303466796875e+00, 7.712636947631836e+00, 7.752496719360352e+00, 7.792606353759766e+00, 7.83295726776123e+00, 7.873540878295898e+00, 7.914348125457764e+00, 7.95536994934082e+00, 7.996596813201904e+00, 8.038018226623535e+00, 8.079624176025391e+00, 8.121403694152832e+00, 8.163345336914062e+00, 8.205437660217285e+00, 8.247669219970703e+00, 8.290026664733887e+00, 8.332496643066406e+00, 8.375064849853516e+00, 8.417717933654785e+00, 7.099020481109619e+00, 7.165134906768799e+00, 7.196432590484619e+00, 7.206332683563232e+00, 7.195850849151611e+00, 7.425088405609131e+00, 7.669891834259033e+00, 8.153141021728516e+00, 8.564874649047852e+00, 8.776705741882324e+00, 8.876402854919434e+00, 8.93453311920166e+00, 8.979419708251953e+00, 9.02051830291748e+00, 9.060714721679688e+00, 9.100775718688965e+00, 9.140828132629395e+00, 9.180819511413574e+00, 9.220661163330078e+00, 9.26026439666748e+00, 9.299549102783203e+00, 9.338445663452148e+00, 9.376889228820801e+00, 9.414820671081543e+00, 9.452182769775391e+00, 9.488920211791992e+00, 9.524977684020996e+00, 9.560300827026367e+00, 9.594831466674805e+00, 9.628513336181641e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerHeatRecoveryGroup.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerHeatRecoveryGroup.txt new file mode 100644 index 00000000000..330175948d2 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ChillerHeatRecoveryGroup.txt @@ -0,0 +1,48 @@ +last-generated=2023-02-24 +statistics-initialization= +{ + "nonlinear": "1, 1, 15, 0, 0, 16, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "14, 15, 1, 1", + "number of continuous time states": "52", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+03] +y1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1Coo.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1Coo.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1HeaCoo.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1HeaCoo.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +chi.port_a1.m_flow=[0e+00, 3.930744934082031e+01, 4.171722030639648e+01, 4.174064254760742e+01, 4.172476196289062e+01, 4.169221115112305e+01, 4.168362808227539e+01, 4.168267440795898e+01, 4.168254852294922e+01, 4.168252563476562e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 3.39721794128418e+01, 2.419013977050781e+01, 2.358578300476074e+01, 2.342935180664062e+01, 2.340664100646973e+01, 2.340411758422852e+01, 2.340385246276855e+01, 2.340382385253906e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, -8.583689481019974e-02, -8.723079413175583e-02, -8.738322556018829e-02, -8.742210268974304e-02, -8.74340757727623e-02, -8.743791282176971e-02, -8.743914216756821e-02, -8.743952959775925e-02, -8.74396488070488e-02, -8.743968605995178e-02, -8.743969351053238e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.750451356172562e-02, -8.795971423387527e-02, -9.050146490335464e-02, -9.565133601427078e-02, -9.735932201147079e-02, -9.758333116769791e-02, -9.760770201683044e-02, -9.761033952236176e-02, -9.761065244674683e-02, -9.7610704600811e-02, -9.765493869781494e-02, -9.796220809221268e-02, -9.958949685096741e-02, -1.029614806175232e-01, -1.048105284571648e-01, -1.051878407597542e-01, -1.052417606115341e-01, -1.05248436331749e-01, -1.052492633461952e-01, -1.052493900060654e-01] +chi.port_a2.m_flow=[0e+00, 3.573404312133789e+01, 3.792474746704102e+01, 3.794603729248047e+01, 3.793160247802734e+01, 3.790200805664062e+01, 3.789420700073242e+01, 3.789334106445312e+01, 3.789322662353516e+01, 3.789320373535156e+01, 3.78931999206543e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.789319610595703e+01, 3.088379859924316e+01, 2.19897575378418e+01, 2.144150161743164e+01, 2.129940795898438e+01, 2.127876472473145e+01, 2.127647018432617e+01, 2.127622985839844e+01, 2.127620315551758e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, -7.803353667259216e-02, -7.930072396993637e-02, -7.943929731845856e-02, -7.947464287281036e-02, -7.948552072048187e-02, -7.948901504278183e-02, -7.949012517929077e-02, -7.949048280715942e-02, -7.949058711528778e-02, -7.949062436819077e-02, -7.949063181877136e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.949063926935196e-02, -7.954955846071243e-02, -7.996337860822678e-02, -8.227405697107315e-02, -8.695576339960098e-02, -8.85084792971611e-02, -8.871211856603622e-02, -8.873427659273148e-02, -8.873666822910309e-02, -8.873695880174637e-02, -8.873700350522995e-02, -8.877722173929214e-02, -8.905655145645142e-02, -9.053590893745422e-02, -9.360134601593018e-02, -9.528099745512009e-02, -9.562503546476364e-02, -9.567417949438095e-02, -9.568025916814804e-02, -9.568101167678833e-02, -9.568113088607788e-02] +chi.port_a3.m_flow=[0e+00, -8.271677792072296e-02, -8.756858110427856e-02, -8.505359292030334e-02, -6.160523742437363e-02, -1.418089400976896e-02, -1.678315340541303e-03, -2.907065209001303e-04, -1.085502372006886e-04, -7.394531712634489e-05, -6.561329792020842e-05, -6.344211578834802e-05, -6.283104448812082e-05, -6.265916454140097e-05, -6.260890222620219e-05, -6.259614747250453e-05, -6.259648944251239e-05, -6.25951070105657e-05, -6.259149085963145e-05, -6.259069050429389e-05, -6.259230576688424e-05, 1.054446315765381e+01, 2.246924018859863e+01, 2.313377952575684e+01, 2.330148887634277e+01, 2.332769966125488e+01, 2.333135795593262e+01, 2.333198928833008e+01, 2.333213233947754e+01, 2.333217239379883e+01, 2.333218383789062e+01, 2.333218765258789e+01, 2.333218765258789e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 4.12655143737793e+01, 4.151193618774414e+01, 4.154156494140625e+01, 4.154911804199219e+01, 4.155144500732422e+01, 4.155219268798828e+01, 4.155242919921875e+01, 4.155250549316406e+01, 4.155252838134766e+01, 4.155253601074219e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.155253982543945e+01, 4.147902679443359e+01, 4.095512008666992e+01, 3.774620056152344e+01, 2.877675819396973e+01, 2.391526794433594e+01, 2.315237998962402e+01, 2.306737518310547e+01, 2.305816841125488e+01, 2.305705642700195e+01, 2.305688095092773e+01, 2.295268821716309e+01, 2.221390914916992e+01, 1.782417297363281e+01, 6.648905754089355e+00, 1.076693534851074e+00, 2.135066986083984e-01, 1.173309162259102e-01, 1.069119572639465e-01, 1.056460216641426e-01, 1.054491251707077e-01] +chi.port_a4.m_flow=[-0e+00, -7.519707083702087e-02, -7.960779964923859e-02, -7.732144743204117e-02, -5.600476264953613e-02, -1.289172191172838e-02, -1.525741186924279e-03, -2.642786421347409e-04, -9.868203778751194e-05, -6.722301623085514e-05, -5.964845695416443e-05, -5.767465336248279e-05, -5.711913399863988e-05, -5.696288280887529e-05, -5.691718979505822e-05, -5.690558828064241e-05, -5.690589750884101e-05, -5.690464240615256e-05, -5.690135731128976e-05, -5.690062607754953e-05, -5.690209218300879e-05, 9.585875511169434e+00, 2.042786026000977e+01, 2.103082656860352e+01, 2.118317413330078e+01, 2.120700073242188e+01, 2.121032524108887e+01, 2.121089935302734e+01, 2.121103096008301e+01, 2.12110652923584e+01, 2.12110767364502e+01, 2.121107864379883e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 3.751410293579102e+01, 3.773812484741211e+01, 3.776505661010742e+01, 3.777192687988281e+01, 3.777404022216797e+01, 3.777471923828125e+01, 3.777493667602539e+01, 3.777500534057617e+01, 3.777502822875977e+01, 3.777503204345703e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.770820617675781e+01, 3.723192596435547e+01, 3.431472778320312e+01, 2.616069030761719e+01, 2.174115371704102e+01, 2.10476188659668e+01, 2.097034072875977e+01, 2.096197128295898e+01, 2.096096038818359e+01, 2.096080207824707e+01, 2.086608123779297e+01, 2.01944637298584e+01, 1.620379447937012e+01, 6.044459819793701e+00, 9.787988066673279e-01, 1.940964460372925e-01, 1.066642999649048e-01, 9.719255566596985e-02, 9.604170173406601e-02, 9.586270898580551e-02] +chi.mChiWat_flow_nominal=[4e+01, 4e+01] +chi.mConWat_flow_nominal=[4.4e+01, 4.4e+01] +floChiWat.m_flow=[-0e+00, -7.519707083702087e-02, -7.960779964923859e-02, -7.732144743204117e-02, -5.600476264953613e-02, -1.289172191172838e-02, -1.525741186924279e-03, -2.642786421347409e-04, -9.868203778751194e-05, -6.722301623085514e-05, -5.964845695416443e-05, -5.767465336248279e-05, -5.711913399863988e-05, -5.696288280887529e-05, -5.691718979505822e-05, -5.690558828064241e-05, -5.690589750884101e-05, -5.690464240615256e-05, -5.690135731128976e-05, -5.690062607754953e-05, -5.690209218300879e-05, 9.585875511169434e+00, 2.042786026000977e+01, 2.103082656860352e+01, 2.118317413330078e+01, 2.120700073242188e+01, 2.121032524108887e+01, 2.121089935302734e+01, 2.121103096008301e+01, 2.12110652923584e+01, 2.12110767364502e+01, 2.121107864379883e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 3.751410293579102e+01, 3.773812484741211e+01, 3.776505661010742e+01, 3.777192687988281e+01, 3.777404022216797e+01, 3.777471923828125e+01, 3.777493667602539e+01, 3.777500534057617e+01, 3.777502822875977e+01, 3.777503204345703e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.77750358581543e+01, 3.770820617675781e+01, 3.723192596435547e+01, 3.431472778320312e+01, 2.616069030761719e+01, 2.174115371704102e+01, 2.10476188659668e+01, 2.097034072875977e+01, 2.096197128295898e+01, 2.096096038818359e+01, 2.096080207824707e+01, 2.086608123779297e+01, 2.01944637298584e+01, 1.620379447937012e+01, 6.044459819793701e+00, 9.787988066673279e-01, 1.940964460372925e-01, 1.066642999649048e-01, 9.719255566596985e-02, 9.604170173406601e-02, 9.586270898580551e-02] +floHeaWat.m_flow=[0e+00, 3.930744934082031e+01, 4.171722030639648e+01, 4.174064254760742e+01, 4.172476196289062e+01, 4.169221115112305e+01, 4.168362808227539e+01, 4.168267440795898e+01, 4.168254852294922e+01, 4.168252563476562e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 4.168251800537109e+01, 3.39721794128418e+01, 2.419013977050781e+01, 2.358578300476074e+01, 2.342935180664062e+01, 2.340664100646973e+01, 2.340411758422852e+01, 2.340385246276855e+01, 2.340382385253906e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, -8.583689481019974e-02, -8.723079413175583e-02, -8.738322556018829e-02, -8.742210268974304e-02, -8.74340757727623e-02, -8.743791282176971e-02, -8.743914216756821e-02, -8.743952959775925e-02, -8.74396488070488e-02, -8.743968605995178e-02, -8.743969351053238e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.743970096111298e-02, -8.750451356172562e-02, -8.795971423387527e-02, -9.050146490335464e-02, -9.565133601427078e-02, -9.735932201147079e-02, -9.758333116769791e-02, -9.760770201683044e-02, -9.761033952236176e-02, -9.761065244674683e-02, -9.7610704600811e-02, -9.765493869781494e-02, -9.796220809221268e-02, -9.958949685096741e-02, -1.029614806175232e-01, -1.048105284571648e-01, -1.051878407597542e-01, -1.052417606115341e-01, -1.05248436331749e-01, -1.052492633461952e-01, -1.052493900060654e-01] +chi.chi[1].m1_flow=[0e+00, 1.975852966308594e+01, 2.097715377807617e+01, 2.099026298522949e+01, 2.099377632141113e+01, 2.100065994262695e+01, 2.100247383117676e+01, 2.10026741027832e+01, 2.100270080566406e+01, 2.100270652770996e+01, 2.100270652770996e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.100270843505859e+01, 2.234680557250977e+01, 2.334969139099121e+01, 2.339151763916016e+01, 2.340210151672363e+01, 2.340362930297852e+01, 2.340379905700684e+01, 2.340381622314453e+01, 2.340381813049316e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.34038200378418e+01, 2.022518157958984e+01, 2.052231216430664e+01, 2.05580940246582e+01, 2.056722068786621e+01, 2.057003211975098e+01, 2.057093238830566e+01, 2.057122039794922e+01, 2.057131195068359e+01, 2.057134056091309e+01, 2.057134819030762e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.057135200500488e+01, 2.058656883239746e+01, 2.069342994689941e+01, 2.129013252258301e+01, 2.24991397857666e+01, 2.290012741088867e+01, 2.295271873474121e+01, 2.295844078063965e+01, 2.295905876159668e+01, 2.295913314819336e+01, 2.295914459228516e+01, 2.285494804382324e+01, 2.211587333679199e+01, 1.772451210021973e+01, 6.545870304107666e+00, 9.71808135509491e-01, 1.082438006997108e-01, 1.201408822089434e-02, 1.588460756465793e-03, 3.216988407075405e-04, 1.246732281288132e-04] +chi.chi[2].m1_flow=[0e+00, 1.94662036895752e+01, 2.065250015258789e+01, 2.066532516479492e+01, 2.066938018798828e+01, 2.067737007141113e+01, 2.067947387695312e+01, 2.067970848083496e+01, 2.067973899841309e+01, 2.067974472045898e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.067974662780762e+01, 2.216983604431152e+01, 2.33096866607666e+01, 2.332804298400879e+01, 2.332873916625977e+01, 2.333071136474609e+01, 2.333167839050293e+01, 2.333202362060547e+01, 2.333213806152344e+01, 2.333217239379883e+01, 2.333218383789062e+01, 2.333218765258789e+01, 2.333218765258789e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.333218955993652e+01, 2.095449447631836e+01, 2.090239334106445e+01, 2.089608573913574e+01, 2.089447593688965e+01, 2.089398002624512e+01, 2.089382171630859e+01, 2.089377021789551e+01, 2.089375495910645e+01, 2.089374923706055e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.089374732971191e+01, 2.080495452880859e+01, 2.017372894287109e+01, 1.636556625366211e+01, 6.181968212127686e+00, 9.177817702293396e-01, 1.020788550376892e-01, 1.132670138031244e-02, 1.49977405089885e-03, 3.120538021903485e-04, 1.256034738617018e-04, 8.558463741792366e-05, 7.521300722146407e-05, 7.301823643501848e-05, 7.394616841338575e-05, 7.487869879696518e-05, 7.505466783186421e-05, 7.506837573600933e-05, 7.506619294872507e-05, 7.506478141294792e-05, 7.506430119974539e-05] +chi.chi[1].m2_flow=[0e+00, 1.796229934692383e+01, 1.907013893127441e+01, 1.908205795288086e+01, 1.908525085449219e+01, 1.909150886535645e+01, 1.90931568145752e+01, 1.909333992004395e+01, 1.909336471557617e+01, 1.909336853027344e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 1.909337043762207e+01, 2.031527900695801e+01, 2.122708320617676e+01, 2.126502418518066e+01, 2.127463722229004e+01, 2.127602767944336e+01, 2.127618026733398e+01, 2.127619743347168e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 2.127619934082031e+01, 1.838652801513672e+01, 1.865664863586426e+01, 1.868917655944824e+01, 1.869747352600098e+01, 1.870002937316895e+01, 1.870084762573242e+01, 1.870110893249512e+01, 1.870119285583496e+01, 1.870121765136719e+01, 1.870122528076172e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.870122909545898e+01, 1.871506118774414e+01, 1.881221008300781e+01, 1.935466575622559e+01, 2.045376205444336e+01, 2.081829833984375e+01, 2.086610794067383e+01, 2.087130928039551e+01, 2.087187194824219e+01, 2.087194061279297e+01, 2.087195014953613e+01, 2.077722549438477e+01, 2.010533905029297e+01, 1.611319160461426e+01, 5.950790882110596e+00, 8.834497928619385e-01, 9.840317070484161e-02, 1.092188060283661e-02, 1.444053137674928e-03, 2.924530708696693e-04, 1.133391342591494e-04] +chi.chi[2].m2_flow=[-0e+00, 1.769654846191406e+01, 1.877499961853027e+01, 1.878665924072266e+01, 1.879034614562988e+01, 1.879760932922363e+01, 1.879952239990234e+01, 1.879973411560059e+01, 1.879976272583008e+01, 1.879976844787598e+01, 1.879976844787598e+01, 1.879976844787598e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 1.879977035522461e+01, 2.015439605712891e+01, 2.11905345916748e+01, 2.120730400085449e+01, 2.120794296264648e+01, 2.120973777770996e+01, 2.121061515808105e+01, 2.12109317779541e+01, 2.121103477478027e+01, 2.121106719970703e+01, 2.12110767364502e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 2.121108055114746e+01, 1.904954147338867e+01, 1.900217437744141e+01, 1.899644088745117e+01, 1.89949779510498e+01, 1.899452781677246e+01, 1.899438285827637e+01, 1.899433708190918e+01, 1.899432182312012e+01, 1.899431800842285e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.899431610107422e+01, 1.891359519958496e+01, 1.833975410461426e+01, 1.487778854370117e+01, 5.61997127532959e+00, 8.343470692634583e-01, 9.279896318912506e-02, 1.029700040817261e-02, 1.363430870696902e-03, 2.836852800101042e-04, 1.141849788837135e-04, 7.780421583447605e-05, 6.837546243332326e-05, 6.638021295657381e-05, 6.722378748236224e-05, 6.807154568377882e-05, 6.823152216384187e-05, 6.824397860327736e-05, 6.824202137067914e-05, 6.824070442235097e-05, 6.824026786489412e-05] +chi.TSet[1]=[3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02] +chi.TSet[2]=[3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02] +TChiWatSup.T=[2.931499938964844e+02, 2.931500244140625e+02, 2.931512451171875e+02, 2.931554565429688e+02, 2.931620788574219e+02, 2.931660766601562e+02, 2.931663818359375e+02, 2.931660461425781e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.93166015625e+02, 2.903986206054688e+02, 2.842804260253906e+02, 2.818959045410156e+02, 2.8052978515625e+02, 2.798335266113281e+02, 2.794874267578125e+02, 2.793164367675781e+02, 2.792320861816406e+02, 2.791904907226562e+02, 2.791699523925781e+02, 2.791598510742188e+02, 2.791548461914062e+02, 2.791524047851562e+02, 2.791511840820312e+02, 2.791505737304688e+02, 2.791502990722656e+02, 2.79150146484375e+02, 2.791500854492188e+02, 2.791500244140625e+02, 2.791500244140625e+02, 2.827639770507812e+02, 2.81567626953125e+02, 2.796545715332031e+02, 2.783150024414062e+02, 2.7754052734375e+02, 2.771248779296875e+02, 2.769096069335938e+02, 2.768011474609375e+02, 2.767512817382812e+02, 2.767326049804688e+02, 2.767278747558594e+02, 2.767287902832031e+02, 2.767317199707031e+02, 2.767352600097656e+02, 2.767388916015625e+02, 2.767423706054688e+02, 2.767456665039062e+02, 2.767487182617188e+02, 2.767515869140625e+02, 2.767542419433594e+02, 2.771637878417969e+02, 2.779504699707031e+02, 2.784971313476562e+02, 2.788100891113281e+02, 2.789808044433594e+02, 2.790726318359375e+02, 2.791217956542969e+02, 2.791480102539062e+02, 2.791619262695312e+02, 2.791692504882812e+02, 2.791730346679688e+02, 2.791749267578125e+02, 2.791758117675781e+02, 2.791761474609375e+02, 2.791762084960938e+02, 2.791761169433594e+02, 2.791759338378906e+02, 2.791757202148438e+02, 2.791755065917969e+02, 2.791752624511719e+02, 2.802107543945312e+02, 2.810943298339844e+02, 2.813898010253906e+02, 2.808182983398438e+02, 2.798080444335938e+02, 2.793351135253906e+02, 2.792214965820312e+02, 2.792008361816406e+02, 2.791971130371094e+02, 2.791961669921875e+02, 2.799962158203125e+02, 2.819263000488281e+02, 2.83295654296875e+02, 2.838563842773438e+02, 2.839745788574219e+02, 2.839927673339844e+02, 2.839981994628906e+02, 2.840022888183594e+02, 2.840062866210938e+02, 2.840102844238281e+02] +THeaWatSup.T=[2.931499938964844e+02, 2.9751904296875e+02, 3.03946533203125e+02, 3.101740417480469e+02, 3.16714111328125e+02, 3.229267272949219e+02, 3.274051818847656e+02, 3.300440979003906e+02, 3.314888305664062e+02, 3.322640991210938e+02, 3.326779174804688e+02, 3.328984375e+02, 3.330159301757812e+02, 3.330785217285156e+02, 3.331118774414062e+02, 3.331296691894531e+02, 3.331390991210938e+02, 3.331441345214844e+02, 3.331468200683594e+02, 3.331482849121094e+02, 3.331490173339844e+02, 3.337669677734375e+02, 3.333873596191406e+02, 3.330745849609375e+02, 3.330858764648438e+02, 3.331320190429688e+02, 3.331465148925781e+02, 3.331494140625e+02, 3.3314990234375e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331494140625e+02, 3.331419677734375e+02, 3.331318664550781e+02, 3.3312451171875e+02, 3.331208190917969e+02, 3.331199951171875e+02, 3.331210327148438e+02, 3.331231079101562e+02, 3.33125732421875e+02, 3.331285400390625e+02, 3.331314086914062e+02, 3.331341857910156e+02, 3.331368713378906e+02, 3.330973205566406e+02, 3.330708618164062e+02, 3.330129699707031e+02, 3.329242553710938e+02, 3.328063659667969e+02, 3.326610717773438e+02, 3.324900512695312e+02, 3.322949523925781e+02, 3.320772705078125e+02, 3.318385009765625e+02, 3.31580078125e+02, 3.313033142089844e+02, 3.310094604492188e+02, 3.306997680664062e+02, 3.303753662109375e+02, 3.300373840332031e+02, 3.296868286132812e+02, 3.293247375488281e+02, 3.289519958496094e+02, 3.28569580078125e+02, 3.281781921386719e+02, 3.277778015136719e+02, 3.273642578125e+02, 3.269237060546875e+02, 3.264592590332031e+02, 3.259848937988281e+02, 3.255046691894531e+02, 3.250197448730469e+02, 3.245309448242188e+02, 3.240389404296875e+02, 3.235444030761719e+02, 3.230472717285156e+02, 3.22544677734375e+02, 3.220277099609375e+02, 3.214961853027344e+02, 3.209600524902344e+02, 3.204240112304688e+02, 3.198893737792969e+02, 3.19356689453125e+02, 3.18826416015625e+02] +chi.TEvaLvg[1]=[2.931499938964844e+02, 2.774970092773438e+02, 2.795649108886719e+02, 2.8035693359375e+02, 2.809271545410156e+02, 2.827138061523438e+02, 2.851226806640625e+02, 2.865536804199219e+02, 2.8735595703125e+02, 2.878025817871094e+02, 2.880501403808594e+02, 2.881869506835938e+02, 2.882623901367188e+02, 2.883038940429688e+02, 2.883266906738281e+02, 2.883391723632812e+02, 2.883460083007812e+02, 2.883497314453125e+02, 2.883517761230469e+02, 2.883529052734375e+02, 2.88353515625e+02, 2.88350341796875e+02, 2.883014221191406e+02, 2.8827197265625e+02, 2.882571411132812e+02, 2.882498474121094e+02, 2.882462768554688e+02, 2.882445373535156e+02, 2.882436828613281e+02, 2.882432861328125e+02, 2.882430725097656e+02, 2.882429809570312e+02, 2.882429504394531e+02, 2.88242919921875e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.882428894042969e+02, 2.851936950683594e+02, 2.806361694335938e+02, 2.775858459472656e+02, 2.75901123046875e+02, 2.750176391601562e+02, 2.745645446777344e+02, 2.743370971679688e+02, 2.742296142578125e+02, 2.741919250488281e+02, 2.741837158203125e+02, 2.741867980957031e+02, 2.741938781738281e+02, 2.742021179199219e+02, 2.7421044921875e+02, 2.742184448242188e+02, 2.742259826660156e+02, 2.742330932617188e+02, 2.7423974609375e+02, 2.742459411621094e+02, 2.742517395019531e+02, 2.764335021972656e+02, 2.77693603515625e+02, 2.783691711425781e+02, 2.787313842773438e+02, 2.789255676269531e+02, 2.790296630859375e+02, 2.790854797363281e+02, 2.791154174804688e+02, 2.791314392089844e+02, 2.791400451660156e+02, 2.791446533203125e+02, 2.791471252441406e+02, 2.791484680175781e+02, 2.79149169921875e+02, 2.791495666503906e+02, 2.791497497558594e+02, 2.791498718261719e+02, 2.791499328613281e+02, 2.791499633789062e+02, 2.791499633789062e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.820439758300781e+02, 2.835765991210938e+02, 2.84298095703125e+02, 2.845592041015625e+02, 2.846138000488281e+02, 2.846156921386719e+02, 2.846143493652344e+02, 2.846134033203125e+02, 2.846128234863281e+02, 2.846123657226562e+02] +chi.TEvaLvg[2]=[2.931499938964844e+02, 2.771577758789062e+02, 2.78969482421875e+02, 2.799446716308594e+02, 2.805375061035156e+02, 2.813546447753906e+02, 2.836594543457031e+02, 2.856086730957031e+02, 2.868124389648438e+02, 2.875025634765625e+02, 2.878897094726562e+02, 2.88105224609375e+02, 2.882247314453125e+02, 2.882909240722656e+02, 2.883275146484375e+02, 2.883476867675781e+02, 2.883587951660156e+02, 2.883648986816406e+02, 2.883682861328125e+02, 2.883701477050781e+02, 2.883711547851562e+02, 2.854311218261719e+02, 2.828233642578125e+02, 2.809617614746094e+02, 2.800434875488281e+02, 2.795906372070312e+02, 2.793672790527344e+02, 2.792571411132812e+02, 2.792028503417969e+02, 2.791760559082031e+02, 2.79162841796875e+02, 2.791563415527344e+02, 2.791531372070312e+02, 2.791515502929688e+02, 2.791507568359375e+02, 2.79150390625e+02, 2.791501770019531e+02, 2.791500854492188e+02, 2.791500549316406e+02, 2.791500244140625e+02, 2.791500244140625e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.818389282226562e+02, 2.833629760742188e+02, 2.841273193359375e+02, 2.844208068847656e+02, 2.844801025390625e+02, 2.844874572753906e+02, 2.844876098632812e+02, 2.844865112304688e+02, 2.844940795898438e+02, 2.844898376464844e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02, 2.844898071289062e+02] +chi.TConLvg[1]=[2.931499938964844e+02, 3.018280944824219e+02, 3.078323364257812e+02, 3.14858154296875e+02, 3.217459716796875e+02, 3.27096923828125e+02, 3.299468078613281e+02, 3.314549560546875e+02, 3.322530517578125e+02, 3.326753540039062e+02, 3.328988342285156e+02, 3.330170593261719e+02, 3.330796203613281e+02, 3.331127624511719e+02, 3.331302795410156e+02, 3.331395568847656e+02, 3.331444702148438e+02, 3.331470336914062e+02, 3.331484375e+02, 3.33149169921875e+02, 3.331495361328125e+02, 3.331497497558594e+02, 3.331498718261719e+02, 3.331499328613281e+02, 3.331499633789062e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331475524902344e+02, 3.331366577148438e+02, 3.33127197265625e+02, 3.331217651367188e+02, 3.331198120117188e+02, 3.331201782226562e+02, 3.331219177246094e+02, 3.331243591308594e+02, 3.331271667480469e+02, 3.331300354003906e+02, 3.331328735351562e+02, 3.331356201171875e+02, 3.331382141113281e+02, 3.273974304199219e+02, 3.143312072753906e+02, 3.053141479492188e+02, 3.001439514160156e+02, 2.973156433105469e+02, 2.95791259765625e+02, 2.949747009277344e+02, 2.945389404296875e+02, 2.943074645996094e+02, 2.941853637695312e+02, 2.941217651367188e+02, 2.940893249511719e+02, 2.94073486328125e+02, 2.940664367675781e+02, 2.940639953613281e+02, 2.9406396484375e+02, 2.940651550292969e+02, 2.940668640136719e+02, 2.940687866210938e+02, 2.940708312988281e+02, 2.9407275390625e+02, 2.940743103027344e+02, 2.94073974609375e+02, 2.940680847167969e+02, 2.940606994628906e+02, 2.940566101074219e+02, 2.940550842285156e+02, 2.940549011230469e+02, 2.940553894042969e+02, 2.940561828613281e+02, 2.912000732421875e+02, 2.8968798828125e+02, 2.889765625e+02, 2.887192687988281e+02, 2.8866552734375e+02, 2.886636352539062e+02, 2.886649780273438e+02, 2.886659240722656e+02, 2.886665344238281e+02, 2.886669921875e+02] +chi.TConLvg[2]=[2.931499938964844e+02, 3.016498718261719e+02, 3.060345153808594e+02, 3.121203918457031e+02, 3.186327514648438e+02, 3.249139404296875e+02, 3.287487487792969e+02, 3.307980651855469e+02, 3.318931884765625e+02, 3.324783935546875e+02, 3.327911071777344e+02, 3.329581604003906e+02, 3.330474548339844e+02, 3.330951843261719e+02, 3.331206970214844e+02, 3.331343383789062e+02, 3.331416015625e+02, 3.331454772949219e+02, 3.331475830078125e+02, 3.331487121582031e+02, 3.331492919921875e+02, 3.365486450195312e+02, 3.279651184082031e+02, 3.132091064453125e+02, 3.034571838378906e+02, 2.982261962890625e+02, 2.955977172851562e+02, 2.943186645507812e+02, 2.937157592773438e+02, 2.934472045898438e+02, 2.933426513671875e+02, 2.933175659179688e+02, 2.933302307128906e+02, 2.933599548339844e+02, 2.933966674804688e+02, 2.934354248046875e+02, 2.934739379882812e+02, 2.935110473632812e+02, 2.935463256835938e+02, 2.935796203613281e+02, 2.936109619140625e+02, 2.934608154296875e+02, 2.933056945800781e+02, 2.932376098632812e+02, 2.932135314941406e+02, 2.932108459472656e+02, 2.932181701660156e+02, 2.932298889160156e+02, 2.932432861328125e+02, 2.932570190429688e+02, 2.932704772949219e+02, 2.932833251953125e+02, 2.932955322265625e+02, 2.933070068359375e+02, 2.933177490234375e+02, 2.933278503417969e+02, 2.933373107910156e+02, 2.933461608886719e+02, 2.933544311523438e+02, 2.933621826171875e+02, 2.933694458007812e+02, 2.935585632324219e+02, 2.937630615234375e+02, 2.938772277832031e+02, 2.939411315917969e+02, 2.93977783203125e+02, 2.939997253417969e+02, 2.940136413574219e+02, 2.940231323242188e+02, 2.940301208496094e+02, 2.940356750488281e+02, 2.940403442382812e+02, 2.940444030761719e+02, 2.94048095703125e+02, 2.940514221191406e+02, 2.940545043945312e+02, 2.94057373046875e+02, 2.9406005859375e+02, 2.940625305175781e+02, 2.940648803710938e+02, 2.940670471191406e+02, 2.914026184082031e+02, 2.898932189941406e+02, 2.891369323730469e+02, 2.888469543457031e+02, 2.887884521484375e+02, 2.887812194824219e+02, 2.887810668945312e+02, 2.887821655273438e+02, 2.88774658203125e+02, 2.887788696289062e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02, 2.887789001464844e+02] +chi.port_b1.m_flow=[-0e+00, -3.930744934082031e+01, -4.171722030639648e+01, -4.174064254760742e+01, -4.172476196289062e+01, -4.169221115112305e+01, -4.168362808227539e+01, -4.168267440795898e+01, -4.168254852294922e+01, -4.168252563476562e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -4.168251800537109e+01, -3.39721794128418e+01, -2.419013977050781e+01, -2.358578300476074e+01, -2.342935180664062e+01, -2.340664100646973e+01, -2.340411758422852e+01, -2.340385246276855e+01, -2.340382385253906e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, -2.34038200378418e+01, 8.583689481019974e-02, 8.723079413175583e-02, 8.738322556018829e-02, 8.742210268974304e-02, 8.74340757727623e-02, 8.743791282176971e-02, 8.743914216756821e-02, 8.743952959775925e-02, 8.74396488070488e-02, 8.743968605995178e-02, 8.743969351053238e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.743970096111298e-02, 8.750451356172562e-02, 8.795971423387527e-02, 9.050146490335464e-02, 9.565133601427078e-02, 9.735932201147079e-02, 9.758333116769791e-02, 9.760770201683044e-02, 9.761033952236176e-02, 9.761065244674683e-02, 9.7610704600811e-02, 9.765493869781494e-02, 9.796220809221268e-02, 9.958949685096741e-02, 1.029614806175232e-01, 1.048105284571648e-01, 1.051878407597542e-01, 1.052417606115341e-01, 1.05248436331749e-01, 1.052492633461952e-01, 1.052493900060654e-01] +chi.port_b2.m_flow=[0e+00, -3.573404312133789e+01, -3.792474746704102e+01, -3.794603729248047e+01, -3.793160247802734e+01, -3.790200805664062e+01, -3.789420700073242e+01, -3.789334106445312e+01, -3.789322662353516e+01, -3.789320373535156e+01, -3.78931999206543e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.789319610595703e+01, -3.088379859924316e+01, -2.19897575378418e+01, -2.144150161743164e+01, -2.129940795898438e+01, -2.127876472473145e+01, -2.127647018432617e+01, -2.127622985839844e+01, -2.127620315551758e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, -2.127619934082031e+01, 7.803353667259216e-02, 7.930072396993637e-02, 7.943929731845856e-02, 7.947464287281036e-02, 7.948552072048187e-02, 7.948901504278183e-02, 7.949012517929077e-02, 7.949048280715942e-02, 7.949058711528778e-02, 7.949062436819077e-02, 7.949063181877136e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.949063926935196e-02, 7.954955846071243e-02, 7.996337860822678e-02, 8.227405697107315e-02, 8.695576339960098e-02, 8.85084792971611e-02, 8.871211856603622e-02, 8.873427659273148e-02, 8.873666822910309e-02, 8.873695880174637e-02, 8.873700350522995e-02, 8.877722173929214e-02, 8.905655145645142e-02, 9.053590893745422e-02, 9.360134601593018e-02, 9.528099745512009e-02, 9.562503546476364e-02, 9.567417949438095e-02, 9.568025916814804e-02, 9.568101167678833e-02, 9.568113088607788e-02] +chi.port_b3.m_flow=[0e+00, 8.271677792072296e-02, 8.756858110427856e-02, 8.505359292030334e-02, 6.160523742437363e-02, 1.418089400976896e-02, 1.678315340541303e-03, 2.907065209001303e-04, 1.085502444766462e-04, 7.394531712634489e-05, 6.561329792020842e-05, 6.344212306430563e-05, 6.283104448812082e-05, 6.265917181735858e-05, 6.26089095021598e-05, 6.259614747250453e-05, 6.259648944251239e-05, 6.25951070105657e-05, 6.259149085963145e-05, 6.259069050429389e-05, 6.259230576688424e-05, -1.054446315765381e+01, -2.246924018859863e+01, -2.313377952575684e+01, -2.330148887634277e+01, -2.332769966125488e+01, -2.333135795593262e+01, -2.333198928833008e+01, -2.333213233947754e+01, -2.333217239379883e+01, -2.333218383789062e+01, -2.333218765258789e+01, -2.333218765258789e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -2.333218955993652e+01, -4.12655143737793e+01, -4.151193618774414e+01, -4.154156494140625e+01, -4.154911804199219e+01, -4.155144500732422e+01, -4.155219268798828e+01, -4.155242919921875e+01, -4.155250549316406e+01, -4.155252838134766e+01, -4.155253601074219e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.155253982543945e+01, -4.147902679443359e+01, -4.095512008666992e+01, -3.774620056152344e+01, -2.877675819396973e+01, -2.391526794433594e+01, -2.315237998962402e+01, -2.306737518310547e+01, -2.305816841125488e+01, -2.305705642700195e+01, -2.305688095092773e+01, -2.295268821716309e+01, -2.221390914916992e+01, -1.782417297363281e+01, -6.648905754089355e+00, -1.076693534851074e+00, -2.135066986083984e-01, -1.173309162259102e-01, -1.069119572639465e-01, -1.056460216641426e-01, -1.054491251707077e-01] +chi.port_b4.m_flow=[0e+00, 7.519707083702087e-02, 7.960779964923859e-02, 7.732144743204117e-02, 5.600476264953613e-02, 1.289172191172838e-02, 1.525741186924279e-03, 2.642786421347409e-04, 9.868203778751194e-05, 6.722301623085514e-05, 5.964845331618562e-05, 5.767465336248279e-05, 5.711913399863988e-05, 5.696288280887529e-05, 5.691718615707941e-05, 5.69055846426636e-05, 5.690589750884101e-05, 5.690464240615256e-05, 5.690135731128976e-05, 5.690062607754953e-05, 5.690209218300879e-05, -9.585875511169434e+00, -2.042786026000977e+01, -2.103082656860352e+01, -2.118317413330078e+01, -2.120700073242188e+01, -2.121032524108887e+01, -2.121089935302734e+01, -2.121103096008301e+01, -2.12110652923584e+01, -2.12110767364502e+01, -2.121107864379883e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -2.121108055114746e+01, -3.751410293579102e+01, -3.773812484741211e+01, -3.776505661010742e+01, -3.777192687988281e+01, -3.777404022216797e+01, -3.777471923828125e+01, -3.777493667602539e+01, -3.777500534057617e+01, -3.777502822875977e+01, -3.777503204345703e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.77750358581543e+01, -3.770820617675781e+01, -3.723192596435547e+01, -3.431472778320312e+01, -2.616069030761719e+01, -2.174115371704102e+01, -2.10476188659668e+01, -2.097034072875977e+01, -2.096197128295898e+01, -2.096096038818359e+01, -2.096080207824707e+01, -2.086608123779297e+01, -2.01944637298584e+01, -1.620379447937012e+01, -6.044459819793701e+00, -9.787988066673279e-01, -1.940964460372925e-01, -1.066642999649048e-01, -9.719255566596985e-02, -9.604170173406601e-02, -9.586270898580551e-02] +chi.valConSwi[1].y_actual=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.286624670028687e-01, 2.693952620029449e-01, 1.004212945699692e-01, 3.480291739106178e-02, 1.153243705630302e-02, 3.706945572048426e-03, 1.16571132093668e-03, 3.611017309594899e-04, 1.103947797673754e-04, 3.339573959237896e-05, 1.011488984659081e-05, 3.132473011646653e-06, 9.33747344333824e-07, 2.904643849888089e-07, 7.777592259117228e-08, 1.837271135229912e-08, 5.743883146891449e-09, 1.573259744702682e-09, 1.359915957621638e-09, 9.939702394490268e-09, 1.718041264808789e-09, 1.953918693509138e-10, -2.191014557284543e-11, -2.66702909756944e-11, -1.296363277142332e-11, -5.090448028377548e-12, -1.819699122287965e-12, -6.153922315309257e-13, -2.006274513926057e-13, -6.366696720608994e-14, -1.985179260018642e-14, -6.115148433471791e-15, -1.912015306891894e-15, -5.796172342678292e-16, -1.810744418295085e-16, -5.159820643080023e-17, -1.42964404594398e-17, -7.04217898391305e-18, -5.067384946706509e-18, -1.707268627663136e-18, 3.713375329971313e-01, 7.306047081947327e-01, 8.995763659477234e-01, 9.651968479156494e-01, 9.884675741195679e-01, 9.962920546531677e-01, 9.988307356834412e-01, 9.996373653411865e-01, 9.998889565467834e-01, 9.999661445617676e-01, 9.999890923500061e-01, 9.999966025352478e-01, 9.99998927116394e-01, 9.999996423721313e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chi.valConSwi[2].y_actual=[1e+00, 2.739498615264893e-01, 7.504841685295105e-02, 2.055951580405235e-02, 5.632398184388876e-03, 1.542994286864996e-03, 4.226903838571161e-04, 1.158047962235287e-04, 3.173034929204732e-05, 8.700948455953039e-06, 2.388431084909826e-06, 6.787280995013134e-07, 1.922889794059301e-07, 5.504789157839696e-08, 1.487244194464665e-08, 4.672937592431481e-09, 4.945357456875854e-09, 3.840877838001688e-09, 9.518247301443239e-10, 3.088191091737968e-10, 1.600804711010539e-09, 3.713375329971313e-01, 7.306047081947327e-01, 8.995786905288696e-01, 9.651970863342285e-01, 9.884675741195679e-01, 9.962930679321289e-01, 9.988343119621277e-01, 9.996389150619507e-01, 9.99889612197876e-01, 9.999666213989258e-01, 9.999898672103882e-01, 9.999968409538269e-01, 9.999990463256836e-01, 9.999997019767761e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chi.valEvaSwi[1].y_actual=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 6.286624670028687e-01, 2.693952620029449e-01, 1.004212945699692e-01, 3.480291739106178e-02, 1.153243705630302e-02, 3.706945572048426e-03, 1.16571132093668e-03, 3.611017309594899e-04, 1.103947797673754e-04, 3.339573959237896e-05, 1.011488984659081e-05, 3.132473011646653e-06, 9.337472874904051e-07, 2.904643849888089e-07, 7.777592259117228e-08, 1.83727149050128e-08, 5.743884923248288e-09, 1.573259411635775e-09, 1.359918067045385e-09, 9.939718381701823e-09, 3.713375926017761e-01, 7.306041121482849e-01, 8.995761275291443e-01, 9.651973843574524e-01, 9.884680509567261e-01, 9.962919354438782e-01, 9.988331198692322e-01, 9.996389150619507e-01, 9.998897910118103e-01, 9.999667406082153e-01, 9.999900460243225e-01, 9.999970197677612e-01, 9.999991059303284e-01, 9.999997019767761e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +chi.valEvaSwi[2].y_actual=[1e+00, 2.739498615264893e-01, 7.504841685295105e-02, 2.055951580405235e-02, 5.632398184388876e-03, 1.542994286864996e-03, 4.226903838571161e-04, 1.158047962235287e-04, 3.173034929204732e-05, 8.700948455953039e-06, 2.388431084909826e-06, 6.787280995013134e-07, 1.922889794059301e-07, 5.504789157839696e-08, 1.487244194464665e-08, 4.672937592431481e-09, 4.945357456875854e-09, 3.840877838001688e-09, 9.518247301443239e-10, 3.088191091737968e-10, 1.600804711010539e-09, 3.713375329971313e-01, 7.306047081947327e-01, 8.995786905288696e-01, 9.651970863342285e-01, 9.884675741195679e-01, 9.962930679321289e-01, 9.988343119621277e-01, 9.996389150619507e-01, 9.99889612197876e-01, 9.999666213989258e-01, 9.999898672103882e-01, 9.999968409538269e-01, 9.999990463256836e-01, 9.999997019767761e-01, 9.999999403953552e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_CoolingTowerGroup.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_CoolingTowerGroup.txt new file mode 100644 index 00000000000..cde86cbbfab --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_CoolingTowerGroup.txt @@ -0,0 +1,25 @@ +last-generated=2023-02-24 +statistics-initialization= +{ + "nonlinear": "1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 1, 1", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +y1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ctl.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.886331975460052e-01, 3.269038200378418e-01, 3.273498713970184e-01, 3.277042806148529e-01, 3.27964723110199e-01, 3.281964659690857e-01, 3.283890783786774e-01, 3.285535573959351e-01, 3.286944925785065e-01, 3.288143873214722e-01, 3.289163112640381e-01, 3.290029764175415e-01, 3.290767073631287e-01, 3.291394114494324e-01, 3.29192727804184e-01, 3.292381167411804e-01, 3.292767107486725e-01, 3.293095529079437e-01, 3.29337477684021e-01, 3.29361230134964e-01, 3.293814063072205e-01, 3.293985724449158e-01, 3.294131755828857e-01, 3.294256031513214e-01, 3.29436182975769e-01, 3.294451832771301e-01, 3.294528424739838e-01, 3.294593393802643e-01, 3.29464852809906e-01, 3.294695317745209e-01, 3.294734954833984e-01, 3.294768929481506e-01, 3.294797837734222e-01, 3.29482227563858e-01, 3.294843137264252e-01, 3.294861316680908e-01, 2.685575187206268e-01, 2.682275176048279e-01, 2.680934071540833e-01, 2.679866552352905e-01, 2.678947746753693e-01, 2.678161263465881e-01, 2.67749547958374e-01, 2.676929831504822e-01, 2.676448822021484e-01, 2.676040232181549e-01, 2.548543512821198e-01, 2.519325613975525e-01, 2.490539997816086e-01, 2.461784034967422e-01, 2.433041632175446e-01, 2.404311448335648e-01, 2.375592291355133e-01, 2.346882522106171e-01, 2.318180650472641e-01, 2.289485484361649e-01, 2.260796278715134e-01, 2.232111990451813e-01, 2.203432321548462e-01, 2.17475637793541e-01, 2.146083861589432e-01, 2.117414325475693e-01, 2.088747322559357e-01, 2.0600825548172e-01, 2.031420022249222e-01, 2.002759128808975e-01, 1.97409987449646e-01, 1.945441961288452e-01, 1.916785389184952e-01, 1.888129711151123e-01, 1.85947522521019e-01, 1.830821484327316e-01, 1.802168637514114e-01, 1.773516684770584e-01, 1.744865328073502e-01, 1.716214567422867e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +coo.m_flow=[-0e+00, 1.461185812950134e+00, 1.930391192436218e+00, 1.992585897445679e+00, 1.999274730682373e+00, 1.999932885169983e+00, 1.999994039535522e+00, 1.999999403953552e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 1.622751832008362e+00, 4.370813369750977e-01, 4.883752763271332e-02, 8.276810985989869e-04, 7.932208063721191e-06, 6.754905967909508e-08, 3.744903831481849e-10, 9.148547804732621e-13, -7.127495815772988e-11, -4.135270459393325e-10, -2.204660204396802e-10, -5.030809536316072e-12, 5.515641329084664e-12, 7.504116279104592e-14, -1.245756319281921e-12, -6.441172600716097e-14, 1.020370094841072e-12, 1.072636228970081e-12, 6.275474389270952e-13, 1.365743997928937e-13, -1.406568817582249e-13] +coo.coo.m_flow=[-0e+00, 7.305929064750671e-01, 9.651955962181091e-01, 9.962929487228394e-01, 9.996373653411865e-01, 9.999664425849915e-01, 9.999970197677612e-01, 9.999997019767761e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 8.113759160041809e-01, 2.185406684875488e-01, 2.441876381635666e-02, 4.138405492994934e-04, 3.966104031860596e-06, 3.377452983954754e-08, 1.872451915740925e-10, 4.57427390236631e-13, -3.563747907886494e-11, -2.067635229696663e-10, -1.102330102198401e-10, -2.515404768158036e-12, 2.757820664542332e-12, 3.752058139552296e-14, -6.228781596409605e-13, -3.220586300358048e-14, 5.101850474205361e-13, 5.363181144850404e-13, 3.137737194635476e-13, 6.828719989644683e-14, -7.032844087911244e-14] +coo.mConWatUni_flow_nominal=[1e+00, 1e+00] +coo.weaBus.TWetBul=[2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02, 2.79588623046875e+02] +TConWatSupSet.y=[3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.025499877929688e+02, 3.026099853515625e+02, 3.026700134277344e+02, 3.027300109863281e+02, 3.027900085449219e+02, 3.028500061035156e+02, 3.029100036621094e+02, 3.029700012207031e+02, 3.030299987792969e+02, 3.030899963378906e+02, 3.031499938964844e+02, 3.032099914550781e+02, 3.032699890136719e+02, 3.033299865722656e+02, 3.033900146484375e+02, 3.034500122070312e+02, 3.03510009765625e+02, 3.035700073242188e+02, 3.036300048828125e+02, 3.036900024414062e+02, 3.0375e+02, 3.038099975585938e+02, 3.038699951171875e+02, 3.039299926757812e+02, 3.03989990234375e+02, 3.040499877929688e+02, 3.041099853515625e+02, 3.041700134277344e+02, 3.042300109863281e+02, 3.042900085449219e+02, 3.043500061035156e+02, 3.044100036621094e+02, 3.044700012207031e+02, 3.045299987792969e+02, 3.045899963378906e+02, 3.046499938964844e+02, 3.047099914550781e+02, 3.047699890136719e+02, 3.048299865722656e+02, 3.048900146484375e+02, 3.049500122070312e+02, 3.05010009765625e+02, 3.050700073242188e+02, 3.051300048828125e+02, 3.051900024414062e+02, 3.0525e+02, 3.053099975585938e+02, 3.053699951171875e+02, 3.054299926757812e+02, 3.05489990234375e+02, 3.055499877929688e+02] +TConWatRet.T=[2.931499938964844e+02, 3.077406005859375e+02, 3.081503295898438e+02, 3.081495666503906e+02, 3.0814990234375e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02, 3.081499328613281e+02] +TConWatSup.T=[2.931499938964844e+02, 2.939644165039062e+02, 2.969289855957031e+02, 2.994666442871094e+02, 3.013223876953125e+02, 3.025635986328125e+02, 3.026331787109375e+02, 3.026208801269531e+02, 3.026103820800781e+02, 3.026013488769531e+02, 3.025936889648438e+02, 3.02587158203125e+02, 3.025816040039062e+02, 3.025768737792969e+02, 3.025728759765625e+02, 3.025694580078125e+02, 3.025665588378906e+02, 3.025640869140625e+02, 3.025619812011719e+02, 3.025601806640625e+02, 3.025586547851562e+02, 3.02557373046875e+02, 3.025562744140625e+02, 3.025553283691406e+02, 3.025545349121094e+02, 3.025538635253906e+02, 3.025532836914062e+02, 3.025527954101562e+02, 3.025523681640625e+02, 3.025520324707031e+02, 3.025517272949219e+02, 3.025514526367188e+02, 3.025512390136719e+02, 3.025510559082031e+02, 3.025509033203125e+02, 3.0255078125e+02, 3.025506591796875e+02, 3.025505676269531e+02, 3.025504760742188e+02, 3.025504150390625e+02, 3.025503540039062e+02, 3.024965515136719e+02, 3.025040893554688e+02, 3.025110168457031e+02, 3.025168762207031e+02, 3.025218811035156e+02, 3.02526123046875e+02, 3.025297241210938e+02, 3.025327758789062e+02, 3.025353698730469e+02, 3.0253759765625e+02, 3.025810546875e+02, 3.026416015625e+02, 3.027021789550781e+02, 3.027626647949219e+02, 3.028230895996094e+02, 3.028834228515625e+02, 3.029437255859375e+02, 3.030039672851562e+02, 3.03064208984375e+02, 3.031243896484375e+02, 3.031845397949219e+02, 3.032446594238281e+02, 3.033047790527344e+02, 3.033648681640625e+02, 3.034249572753906e+02, 3.034850158691406e+02, 3.035450744628906e+02, 3.036051330566406e+02, 3.036651611328125e+02, 3.037252197265625e+02, 3.037852478027344e+02, 3.038452758789062e+02, 3.039052734375e+02, 3.039653015136719e+02, 3.040253295898438e+02, 3.040853271484375e+02, 3.041453552246094e+02, 3.042053527832031e+02, 3.04265380859375e+02, 3.043253784179688e+02, 3.043591613769531e+02, 3.042218933105469e+02, 3.042090759277344e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089233398438e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02, 3.042089538574219e+02] +coo.P=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.559466648101807e+01, 2.510229873657227e+01, 2.521159362792969e+01, 2.529840278625488e+01, 2.536217498779297e+01, 2.541891288757324e+01, 2.546605491638184e+01, 2.550630950927734e+01, 2.554079818725586e+01, 2.557013320922852e+01, 2.559506416320801e+01, 2.561626815795898e+01, 2.563430213928223e+01, 2.564963912963867e+01, 2.566268157958984e+01, 2.567378044128418e+01, 2.56832218170166e+01, 2.569125366210938e+01, 2.569808387756348e+01, 2.570388984680176e+01, 2.570882606506348e+01, 2.57130241394043e+01, 2.571659469604492e+01, 2.571963310241699e+01, 2.572221946716309e+01, 2.572441864013672e+01, 2.572628974914551e+01, 2.572788238525391e+01, 2.572923278808594e+01, 2.573037528991699e+01, 2.573134422302246e+01, 2.573217582702637e+01, 2.573287773132324e+01, 2.573347663879395e+01, 2.57339916229248e+01, 2.573443031311035e+01, 5.749840259552002e+00, 5.720120429992676e+00, 5.708076477050781e+00, 5.698503017425537e+00, 5.690276145935059e+00, 5.68324089050293e+00, 5.677289009094238e+00, 5.672237873077393e+00, 5.667944431304932e+00, 5.664298534393311e+00, 4.614985466003418e+00, 4.398312091827393e+00, 4.193129062652588e+00, 3.996180534362793e+00, 3.807160615921021e+00, 3.625866413116455e+00, 3.452100992202759e+00, 3.285665273666382e+00, 3.12636399269104e+00, 2.974004745483398e+00, 2.828397989273071e+00, 2.689355611801147e+00, 2.55669116973877e+00, 2.430218935012817e+00, 2.309754610061646e+00, 2.195114612579346e+00, 2.086115598678589e+00, 1.982575654983521e+00, 1.884312391281128e+00, 1.791144371032715e+00, 1.702890157699585e+00, 1.6193687915802e+00, 1.540399193763733e+00, 1.465801119804382e+00, 1.395394086837769e+00, 1.328997850418091e+00, 1.266432285308838e+00, 1.207517385482788e+00, 1.152072906494141e+00, 1.099919319152832e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_HeatPumpGroup.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_HeatPumpGroup.txt new file mode 100644 index 00000000000..37fe34e772c --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_HeatPumpGroup.txt @@ -0,0 +1,26 @@ +last-generated=2023-02-27 +statistics-initialization= +{ + "nonlinear": "1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 1", + "number of continuous time states": "8", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +y1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +y1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +heaPum.heaPum.uMod=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +heaPum.m_flow=[-0e+00, 3.490642547607422e+01, 4.611556243896484e+01, 4.760150909423828e+01, 4.776080322265625e+01, 4.777650833129883e+01, 4.777812576293945e+01, 4.777828598022461e+01, 4.777830505371094e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 4.77783088684082e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 6.434868335723877e+00, 6.977401375770569e-01, 9.93689801543951e-03, 9.504941408522427e-05, 8.25065626486321e-07, 9.362485897668194e-09, 1.093475865410198e-09, 2.822132805224697e-10, -1.590973464082879e-10, -1.781868819161758e-10, -1.161865742504986e-11, 3.139839733698468e-12, 6.793108176667007e-12, 4.008961565493685e-12, 8.273035170336743e-14, 3.691649105006835e-14, -5.875150626416525e-13, -1.3055042073426e-12, -5.055858075947439e-13, -1.304866696465179e-12] +heaPum.heaPum.m1_flow=[-0e+00, 1.745321273803711e+01, 2.305778121948242e+01, 2.380075454711914e+01, 2.388040161132812e+01, 2.388825416564941e+01, 2.388906288146973e+01, 2.38891429901123e+01, 2.388915252685547e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 6.434868335723877e+00, 6.977401375770569e-01, 9.93689801543951e-03, 9.504941408522427e-05, 8.25065626486321e-07, 9.362485897668194e-09, 1.093475865410198e-09, 2.822132805224697e-10, -1.590973464082879e-10, -1.781868819161758e-10, -1.161865742504986e-11, 3.139839733698468e-12, 6.793108176667007e-12, 4.008961565493685e-12, 8.273035170336743e-14, 3.691649105006835e-14, -5.875150626416525e-13, -1.3055042073426e-12, -5.055858075947439e-13, -1.304866696465179e-12] +heaPum.mHeaWatUni_flow_nominal=[2.38891544342041e+01, 2.38891544342041e+01] +heaPum.weaBus.TDryBul=[2.609500122070312e+02, 2.609493103027344e+02, 2.609486083984375e+02, 2.609479370117188e+02, 2.609472351074219e+02, 2.60946533203125e+02, 2.609458618164062e+02, 2.609451599121094e+02, 2.609444885253906e+02, 2.609438171386719e+02, 2.60943115234375e+02, 2.609424438476562e+02, 2.609417724609375e+02, 2.609411010742188e+02, 2.609403991699219e+02, 2.609397277832031e+02, 2.609390563964844e+02, 2.609383850097656e+02, 2.60937744140625e+02, 2.609370727539062e+02, 2.609364013671875e+02, 2.609357299804688e+02, 2.6093505859375e+02, 2.609344177246094e+02, 2.609337463378906e+02, 2.6093310546875e+02, 2.609324340820312e+02, 2.609317932128906e+02, 2.6093115234375e+02, 2.609304809570312e+02, 2.609298400878906e+02, 2.6092919921875e+02, 2.609285583496094e+02, 2.609279174804688e+02, 2.609272766113281e+02, 2.609266357421875e+02, 2.609259948730469e+02, 2.609253540039062e+02, 2.609247436523438e+02, 2.609241027832031e+02, 2.609234924316406e+02, 2.609228515625e+02, 2.609222412109375e+02, 2.609216003417969e+02, 2.609209899902344e+02, 2.609203796386719e+02, 2.609197692871094e+02, 2.609191589355469e+02, 2.609185485839844e+02, 2.609179382324219e+02, 2.609173278808594e+02, 2.609167175292969e+02, 2.609161376953125e+02, 2.6091552734375e+02, 2.609149475097656e+02, 2.609143371582031e+02, 2.609137573242188e+02, 2.609131774902344e+02, 2.609125671386719e+02, 2.609119873046875e+02, 2.609114074707031e+02, 2.609108276367188e+02, 2.609102783203125e+02, 2.609096984863281e+02, 2.609091186523438e+02, 2.609085693359375e+02, 2.609079895019531e+02, 2.609074401855469e+02, 2.609068603515625e+02, 2.609063110351562e+02, 2.6090576171875e+02, 2.609052124023438e+02, 2.609046630859375e+02, 2.609041137695312e+02, 2.609035949707031e+02, 2.609030456542969e+02, 2.609024963378906e+02, 2.609019775390625e+02, 2.609014282226562e+02, 2.609009094238281e+02, 2.60900390625e+02, 2.608998718261719e+02, 2.608993530273438e+02, 2.608988342285156e+02, 2.608983154296875e+02, 2.608977966308594e+02, 2.608973083496094e+02, 2.608967895507812e+02, 2.608963012695312e+02, 2.608958129882812e+02, 2.608953247070312e+02, 2.608948364257812e+02, 2.608943481445312e+02, 2.608938598632812e+02, 2.608933715820312e+02, 2.608928833007812e+02, 2.608924255371094e+02, 2.608919372558594e+02, 2.608914794921875e+02, 2.608910217285156e+02, 2.608905639648438e+02] +THeaWatSupSet.y=[3.081499938964844e+02, 3.081499938964844e+02] +THeaWatRet.T=[2.931499938964844e+02, 2.980550231933594e+02, 2.982447814941406e+02, 2.982949829101562e+02, 2.983450012207031e+02, 2.983949890136719e+02, 2.984450073242188e+02, 2.984949951171875e+02, 2.985450134277344e+02, 2.985950012207031e+02, 2.986449890136719e+02, 2.986950073242188e+02, 2.987449951171875e+02, 2.987950134277344e+02, 2.988450012207031e+02, 2.988949890136719e+02, 2.989450073242188e+02, 2.989949951171875e+02, 2.990450134277344e+02, 2.990950012207031e+02, 2.991449890136719e+02, 2.991950073242188e+02, 2.992449951171875e+02, 2.992950134277344e+02, 2.993450012207031e+02, 2.993949890136719e+02, 2.994450073242188e+02, 2.994949951171875e+02, 2.995450134277344e+02, 2.995950012207031e+02, 2.996449890136719e+02, 2.996950073242188e+02, 2.997449951171875e+02, 2.997950134277344e+02, 2.998450012207031e+02, 2.998949890136719e+02, 2.999450073242188e+02, 2.999949951171875e+02, 3.000450134277344e+02, 3.000950012207031e+02, 3.001449890136719e+02, 3.001950073242188e+02, 3.002449951171875e+02, 3.002950134277344e+02, 3.003450012207031e+02, 3.003949890136719e+02, 3.004450073242188e+02, 3.004949951171875e+02, 3.005450134277344e+02, 3.005950012207031e+02, 3.006449890136719e+02, 3.006897888183594e+02, 3.00739990234375e+02, 3.007900085449219e+02, 3.008399963378906e+02, 3.008900146484375e+02, 3.009400024414062e+02, 3.00989990234375e+02, 3.010400085449219e+02, 3.010899963378906e+02, 3.011400146484375e+02, 3.011900024414062e+02, 3.01239990234375e+02, 3.012900085449219e+02, 3.013399963378906e+02, 3.013900146484375e+02, 3.014400024414062e+02, 3.01489990234375e+02, 3.015400085449219e+02, 3.015899963378906e+02, 3.016400146484375e+02, 3.016900024414062e+02, 3.01739990234375e+02, 3.017900085449219e+02, 3.018399963378906e+02, 3.018900146484375e+02, 3.019400024414062e+02, 3.01989990234375e+02, 3.020400085449219e+02, 3.020899963378906e+02, 3.021400146484375e+02, 3.021792907714844e+02, 3.021968078613281e+02, 3.021991577148438e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02, 3.021991882324219e+02] +THeaWatSup.T=[2.931499938964844e+02, 2.944013366699219e+02, 2.975022277832031e+02, 2.998819274902344e+02, 3.017532348632812e+02, 3.032483520507812e+02, 3.044541320800781e+02, 3.054343872070312e+02, 3.062023620605469e+02, 3.067542724609375e+02, 3.071499328613281e+02, 3.074334411621094e+02, 3.076365966796875e+02, 3.077821350097656e+02, 3.07886474609375e+02, 3.079612426757812e+02, 3.080148010253906e+02, 3.080531005859375e+02, 3.080805358886719e+02, 3.081002502441406e+02, 3.081143493652344e+02, 3.081243896484375e+02, 3.08131591796875e+02, 3.081367797851562e+02, 3.081405334472656e+02, 3.081432495117188e+02, 3.081451416015625e+02, 3.081465148925781e+02, 3.081474914550781e+02, 3.081482238769531e+02, 3.081487426757812e+02, 3.081491088867188e+02, 3.081493835449219e+02, 3.081495666503906e+02, 3.081496887207031e+02, 3.081497802734375e+02, 3.081498413085938e+02, 3.081498718261719e+02, 3.0814990234375e+02, 3.081499328613281e+02, 3.081499633789062e+02, 3.081499633789062e+02, 3.081499633789062e+02, 3.081499633789062e+02, 3.081499938964844e+02, 3.081499633789062e+02, 3.081499633789062e+02, 3.081499633789062e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.081499938964844e+02, 3.072879333496094e+02, 3.0708935546875e+02, 3.070767822265625e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765686035156e+02, 3.070765686035156e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02, 3.070765991210938e+02] +heaPum.heaPum.PLR=[-0e+00, 9.972169995307922e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.740374088287354e-01, 9.495502114295959e-01, 9.281836152076721e-01, 9.094464778900146e-01, 8.929265141487122e-01, 8.782771229743958e-01, 8.652064800262451e-01, 8.534689545631409e-01, 8.428580164909363e-01, 8.331992030143738e-01, 8.243448138237e-01, 8.161706328392029e-01, 8.085718154907227e-01, 8.014599084854126e-01, 7.947598695755005e-01, 7.884082198143005e-01, 7.823514938354492e-01, 7.765447497367859e-01, 7.709497213363647e-01, 7.655341625213623e-01, 7.602706551551819e-01, 7.551361322402954e-01, 7.501110434532166e-01, 7.451789379119873e-01, 7.403258085250854e-01, 7.355398535728455e-01, 7.308109998703003e-01, 7.261307835578918e-01, 7.214920520782471e-01, 7.168887257575989e-01, 7.123156785964966e-01, 7.077687382698059e-01, 7.032440900802612e-01, 6.98738694190979e-01, 6.942499876022339e-01, 6.897757649421692e-01, 6.853139996528625e-01, 6.808633208274841e-01, 6.764221787452698e-01, 6.719894409179688e-01, 6.675642132759094e-01, 6.631455421447754e-01, 6.587328314781189e-01, 6.543253064155579e-01, 6.499230861663818e-01, 6.455255150794983e-01, 6.411319375038147e-01, 6.367417573928833e-01, 6.323550939559937e-01, 6.279716491699219e-01, 6.23591423034668e-01, 6.192143559455872e-01, 6.148400902748108e-01, 6.104688048362732e-01, 6.061002612113953e-01, 6.017342805862427e-01, 5.973710417747498e-01, 5.930102467536926e-01, 5.886518359184265e-01, 5.84295928478241e-01, 5.799424052238464e-01, 5.755912661552429e-01, 5.712425708770752e-01, 5.668960809707642e-01, 5.625519752502441e-01, 5.582100749015808e-01, 5.538703799247742e-01, 5.49532949924469e-01, 5.451977849006653e-01, 5.408650040626526e-01, 5.365343689918518e-01, 5.322059392929077e-01, 5.278796553611755e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +heaPum.heaPum.COP=[-0e+00, 2.729499578475952e+00, 2.819553136825562e+00, 2.800512790679932e+00, 2.772123098373413e+00, 2.74697470664978e+00, 2.725615739822388e+00, 2.707459449768066e+00, 2.69194221496582e+00, 2.678601026535034e+00, 2.667060136795044e+00, 2.657014608383179e+00, 2.648213624954224e+00, 2.640451669692993e+00, 2.633558750152588e+00, 2.627393960952759e+00, 2.621840715408325e+00, 2.616801261901855e+00, 2.612194299697876e+00, 2.607951641082764e+00, 2.604016304016113e+00, 2.600340604782104e+00, 2.596884250640869e+00, 2.593613862991333e+00, 2.590500354766846e+00, 2.587520599365234e+00, 2.584654331207275e+00, 2.581884384155273e+00, 2.579196691513062e+00, 2.576579332351685e+00, 2.574021816253662e+00, 2.571515798568726e+00, 2.569054126739502e+00, 2.566630363464355e+00, 2.564239978790283e+00, 2.561877965927124e+00, 2.559540987014771e+00, 2.557225942611694e+00, 2.554929971694946e+00, 2.552651166915894e+00, 2.550387620925903e+00, 2.548137664794922e+00, 2.545899868011475e+00, 2.543673515319824e+00, 2.541456937789917e+00, 2.539250135421753e+00, 2.537051677703857e+00, 2.534861326217651e+00, 2.532678842544556e+00, 2.530503273010254e+00, 2.528334379196167e+00, 2.526172161102295e+00, 2.524016141891479e+00, 2.521866321563721e+00, 2.51972222328186e+00, 2.517583608627319e+00, 2.515450477600098e+00, 2.513322830200195e+00, 2.511200428009033e+00, 2.509083271026611e+00, 2.50697135925293e+00, 2.504864454269409e+00, 2.50276255607605e+00, 2.500665903091431e+00, 2.498574018478394e+00, 2.496486902236938e+00, 2.494404792785645e+00, 2.492327451705933e+00, 2.490254878997803e+00, 2.488187313079834e+00, 2.486124277114868e+00, 2.484066009521484e+00, 2.482012271881104e+00, 2.479963541030884e+00, 2.477919101715088e+00, 2.475879430770874e+00, 2.473844528198242e+00, 2.471813917160034e+00, 2.469788312911987e+00, 2.467767000198364e+00, 2.465750217437744e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsDp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsDp.txt new file mode 100644 index 00000000000..d2a40b3d63d --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsDp.txt @@ -0,0 +1,23 @@ +last-generated=2023-02-27 +statistics-initialization= +{ + "nonlinear": "1, 1, 1, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 1, 1, 1, 1", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +y1Pum.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1Pum.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ope.y=[2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.266666740179062e-01, 2.533333301544189e-01, 2.800000011920929e-01, 3.066666722297668e-01, 3.333333432674408e-01, 3.600000143051147e-01, 3.866666555404663e-01, 4.133333265781403e-01, 4.399999976158142e-01, 4.666666686534882e-01, 4.933333396911621e-01, 5.199999809265137e-01, 5.4666668176651e-01, 5.733333230018616e-01, 6.000000238418579e-01, 6.266666650772095e-01, 6.53333306312561e-01, 6.800000071525574e-01, 7.066666483879089e-01, 7.333333492279053e-01, 7.599999904632568e-01, 7.866666913032532e-01, 8.133333325386047e-01, 8.399999737739563e-01, 8.666666746139526e-01, 8.933333158493042e-01, 9.200000166893005e-01, 9.466666579246521e-01, 9.733333587646484e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +dpSet.y=[0e+00, 2e+03, 4e+03, 6e+03, 8e+03, 1e+04, 1.2e+04, 1.4e+04, 1.6e+04, 1.8e+04, 2e+04, 2.2e+04, 2.4e+04, 2.6e+04, 2.8e+04, 3e+04, 3.2e+04, 3.4e+04, 3.6e+04, 3.8e+04, 4e+04, 4.2e+04, 4.4e+04, 4.6e+04, 4.8e+04, 5e+04, 5.2e+04, 5.4e+04, 5.6e+04, 5.8e+04, 6e+04, 6.2e+04, 6.4e+04, 6.6e+04, 6.8e+04, 7e+04, 7.2e+04, 7.4e+04, 7.6e+04, 7.8e+04, 8e+04, 8.2e+04, 8.4e+04, 8.6e+04, 8.8e+04, 9e+04, 9.2e+04, 9.4e+04, 9.6e+04, 9.8e+04, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05] +senRelPre.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.9852123046875e+04, 2.181348046875e+04, 2.3776806640625e+04, 2.5741966796875e+04, 2.770879296875e+04, 2.967712109375e+04, 3.1646802734375e+04, 3.361769921875e+04, 3.55896953125e+04, 3.75626875e+04, 3.95313515625e+04, 4.147927734375e+04, 4.3401734375e+04, 4.530012890625e+04, 4.717662109375e+04, 4.903222265625e+04, 5.086616015625e+04, 5.267527734375e+04, 5.44525078125e+04, 5.618284765625e+04, 5.782931640625e+04, 5.9262765625e+04, 6.032676171875e+04, 6.125435546875e+04, 6.206244921875e+04, 6.276231640625e+04, 6.337116015625e+04, 6.391111328125e+04, 6.440753515625e+04, 6.488687890625e+04, 7.70975625e+04, 7.86000546875e+04, 8.01110703125e+04, 8.16374375e+04, 8.3183703125e+04, 8.475278125e+04, 8.63460625e+04, 8.79637265625e+04, 8.96049609375e+04, 9.1268328125e+04, 9.113590625e+04, 9.10464921875e+04, 9.09909375e+04, 9.0957359375e+04, 9.0937328125e+04, 9.0925484375e+04, 9.09185390625e+04, 9.09145e+04, 9.09121640625e+04, 9.0910828125e+04, 9.09100703125e+04, 9.0909640625e+04, 9.09093984375e+04, 9.0909265625e+04, 9.09091953125e+04, 9.09091484375e+04, 9.0909125e+04, 9.0909109375e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04] +senRelPre1.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.98514609375e+04, 2.1812767578125e+04, 2.377604296875e+04, 2.5741150390625e+04, 2.770792578125e+04, 2.9676203125e+04, 3.1645833984375e+04, 3.361668359375e+04, 3.558862890625e+04, 3.756156640625e+04, 3.953018359375e+04, 4.14780703125e+04, 4.340049609375e+04, 4.5298859375e+04, 4.717531640625e+04, 4.9030875e+04, 5.08647421875e+04, 5.26737578125e+04, 5.445082421875e+04, 5.61808671875e+04, 5.78266796875e+04, 5.925805078125e+04, 6.032091796875e+04, 6.124798046875e+04, 6.20555546875e+04, 6.2754921875e+04, 6.336329296875e+04, 6.390280078125e+04, 6.43988203125e+04, 6.487778125e+04, 7.70975625e+04, 7.86000546875e+04, 8.01110703125e+04, 8.16374375e+04, 8.3183703125e+04, 8.475278125e+04, 8.63460625e+04, 8.79637265625e+04, 8.96049609375e+04, 9.1268328125e+04, 9.113590625e+04, 9.10464921875e+04, 9.09909375e+04, 9.0957359375e+04, 9.0937328125e+04, 9.0925484375e+04, 9.09185390625e+04, 9.09145e+04, 9.09121640625e+04, 9.0910828125e+04, 9.09100703125e+04, 9.0909640625e+04, 9.09093984375e+04, 9.0909265625e+04, 9.09091953125e+04, 9.09091484375e+04, 9.0909125e+04, 9.0909109375e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.09091015625e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.09090859375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04, 9.090909375e+04] +senMasFlo.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.716257184743881e-01, 1.796936541795731e-01, 1.874928027391434e-01, 1.950253248214722e-01, 2.02305018901825e-01, 2.093489021062851e-01, 2.161743640899658e-01, 2.227983772754669e-01, 2.292367964982986e-01, 2.35503762960434e-01, 2.428412735462189e-01, 2.551822662353516e-01, 2.738660573959351e-01, 2.988015115261078e-01, 3.296004831790924e-01, 3.659203350543976e-01, 4.075247645378113e-01, 4.542364478111267e-01, 5.059140920639038e-01, 5.623676180839539e-01, 6.232075691223145e-01, 6.873546838760376e-01, 7.53209114074707e-01, 8.213187456130981e-01, 8.909293413162231e-01, 9.611285924911499e-01, 1.030962586402893e+00, 1.099494814872742e+00, 1.165867209434509e+00, 1.229354381561279e+00, 1.40024745464325e+00, 1.469686031341553e+00, 1.53478729724884e+00, 1.595313668251038e+00, 1.651217222213745e+00, 1.702612161636353e+00, 1.749735355377197e+00, 1.792905688285828e+00, 1.832489013671875e+00, 1.868868112564087e+00, 1.882986068725586e+00, 1.892459392547607e+00, 1.898321509361267e+00, 1.901856422424316e+00, 1.903961420059204e+00, 1.905204772949219e+00, 1.905933618545532e+00, 1.906358003616333e+00, 1.90660285949707e+00, 1.906742691993713e+00, 1.906822443008423e+00, 1.906867504119873e+00, 1.906892776489258e+00, 1.906906604766846e+00, 1.906914472579956e+00, 1.906919121742249e+00, 1.906921863555908e+00, 1.906923294067383e+00, 1.906923890113831e+00, 1.906923890113831e+00, 1.90692400932312e+00, 1.90692412853241e+00, 1.906924366950989e+00, 1.906924724578857e+00, 1.906924962997437e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925439834595e+00, 1.906925439834595e+00, 1.906925678253174e+00, 1.906925797462463e+00, 1.906925678253174e+00, 1.906925678253174e+00, 1.906925559043884e+00, 1.906925439834595e+00, 1.906925320625305e+00, 1.906925320625305e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925082206726e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00] +senMasFlo1.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.716228723526001e-01, 1.796907186508179e-01, 1.87489777803421e-01, 1.95022240281105e-01, 2.023018449544907e-01, 2.09345668554306e-01, 2.161710560321808e-01, 2.227950096130371e-01, 2.292333543300629e-01, 2.355002611875534e-01, 2.428376972675323e-01, 2.551785707473755e-01, 2.738621532917023e-01, 2.987973392009735e-01, 3.295959234237671e-01, 3.659152984619141e-01, 4.075191020965576e-01, 4.542298913002014e-01, 5.059062838554382e-01, 5.623576641082764e-01, 6.231933236122131e-01, 6.873273253440857e-01, 7.531726360321045e-01, 8.212760090827942e-01, 8.908798694610596e-01, 9.610720276832581e-01, 1.030898690223694e+00, 1.099423289299011e+00, 1.165788292884827e+00, 1.229268193244934e+00, 1.40024745464325e+00, 1.469686031341553e+00, 1.53478729724884e+00, 1.595313668251038e+00, 1.651217222213745e+00, 1.702612161636353e+00, 1.749735355377197e+00, 1.792905688285828e+00, 1.832489013671875e+00, 1.868868112564087e+00, 1.882986068725586e+00, 1.892459392547607e+00, 1.898321509361267e+00, 1.901856422424316e+00, 1.903961420059204e+00, 1.905204772949219e+00, 1.905933618545532e+00, 1.906358003616333e+00, 1.90660285949707e+00, 1.906742691993713e+00, 1.906822443008423e+00, 1.906867504119873e+00, 1.906892776489258e+00, 1.906906604766846e+00, 1.906914472579956e+00, 1.906919121742249e+00, 1.906921863555908e+00, 1.906923294067383e+00, 1.906923890113831e+00, 1.906923890113831e+00, 1.90692400932312e+00, 1.90692412853241e+00, 1.906924366950989e+00, 1.906924724578857e+00, 1.906924962997437e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925082206726e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925439834595e+00, 1.906925439834595e+00, 1.906925678253174e+00, 1.906925797462463e+00, 1.906925678253174e+00, 1.906925678253174e+00, 1.906925559043884e+00, 1.906925439834595e+00, 1.906925320625305e+00, 1.906925320625305e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925082206726e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00, 1.906925201416016e+00] +pum.P=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.835444259643555e+01, 5.880522918701172e+01, 5.948139953613281e+01, 6.042271041870117e+01, 6.157704544067383e+01, 6.286743545532227e+01, 6.426499176025391e+01, 6.574300384521484e+01, 6.727500152587891e+01, 6.883343505859375e+01, 7.048130798339844e+01, 7.247931671142578e+01, 7.503864288330078e+01, 7.828094482421875e+01, 8.227046966552734e+01, 8.7044189453125e+01, 9.239511108398438e+01, 9.803115081787109e+01, 1.038898696899414e+02, 1.101478652954102e+02, 1.171946411132812e+02, 1.250215454101562e+02, 1.329222717285156e+02, 1.41297607421875e+02, 1.503477478027344e+02, 1.599262542724609e+02, 1.692291870117188e+02, 1.783068695068359e+02, 1.894911346435547e+02, 2.034797821044922e+02, 3.184115905761719e+02, 3.306909484863281e+02, 3.419552001953125e+02, 3.529059753417969e+02, 3.645795593261719e+02, 3.780531616210938e+02, 3.934713134765625e+02, 4.088645935058594e+02, 4.2413232421875e+02, 4.392890319824219e+02, 4.409727172851562e+02, 4.421076965332031e+02, 4.428121948242188e+02, 4.432378234863281e+02, 4.434915771484375e+02, 4.436415710449219e+02, 4.437295532226562e+02, 4.437807922363281e+02, 4.438103332519531e+02, 4.438272399902344e+02, 4.438368530273438e+02, 4.438423156738281e+02, 4.438453674316406e+02, 4.438470153808594e+02, 4.438479919433594e+02, 4.438485412597656e+02, 4.43848876953125e+02, 4.438490295410156e+02, 4.4384912109375e+02, 4.4384912109375e+02, 4.4384912109375e+02, 4.438491516113281e+02, 4.438491821289062e+02, 4.438492126464844e+02, 4.438492431640625e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492431640625e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438493041992188e+02, 4.438493041992188e+02, 4.438493347167969e+02, 4.438493347167969e+02, 4.438493347167969e+02, 4.438493347167969e+02, 4.438493347167969e+02, 4.438493041992188e+02, 4.438493041992188e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02, 4.438492736816406e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsFlow.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsFlow.txt new file mode 100644 index 00000000000..8839259278b --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsFlow.txt @@ -0,0 +1,23 @@ +last-generated=2023-02-27 +statistics-initialization= +{ + "nonlinear": "1, 1, 1, 1, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 1, 1, 1, 1, 1", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +y1Pum.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1Pum.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ope.y=[2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.266666740179062e-01, 2.533333301544189e-01, 2.800000011920929e-01, 3.066666722297668e-01, 3.333333432674408e-01, 3.600000143051147e-01, 3.866666555404663e-01, 4.133333265781403e-01, 4.399999976158142e-01, 4.666666686534882e-01, 4.933333396911621e-01, 5.199999809265137e-01, 5.4666668176651e-01, 5.733333230018616e-01, 6.000000238418579e-01, 6.266666650772095e-01, 6.53333306312561e-01, 6.800000071525574e-01, 7.066666483879089e-01, 7.333333492279053e-01, 7.599999904632568e-01, 7.866666913032532e-01, 8.133333325386047e-01, 8.399999737739563e-01, 8.666666746139526e-01, 8.933333158493042e-01, 9.200000166893005e-01, 9.466666579246521e-01, 9.733333587646484e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +senRelPre.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.262026953125e+04, 3.891185546875e+04, 4.572261328125e+04, 5.30610390625e+04, 6.09321953125e+04, 6.93394375e+04, 7.82851328125e+04, 8.77705703125e+04, 9.77963828125e+04, 1.083629765625e+05, 1.182483828125e+05, 1.23320578125e+05, 1.22446484375e+05, 1.16900484375e+05, 1.085653359375e+05, 9.90182421875e+04, 8.931171875e+04, 8.00606171875e+04, 7.15682421875e+04, 6.395369921875e+04, 5.72355703125e+04, 5.137833984375e+04, 4.63198046875e+04, 4.198859375e+04, 3.83123203125e+04, 3.522094140625e+04, 3.2648953125e+04, 3.053635546875e+04, 2.882887890625e+04, 2.747784765625e+04, 1.0575934375e+05, 1.0270515625e+05, 1.006127578125e+05, 9.93625e+04, 9.88495859375e+04, 9.89824296875e+04, 9.96812578125e+04, 1.00876765625e+05, 1.02508875e+05, 1.04525625e+05, 1.0281471875e+05, 1.016880859375e+05, 1.009993515625e+05, 1.005871171875e+05, 1.003427265625e+05, 1.001987578125e+05, 1.00114484375e+05, 1.000654609375e+05, 1.00037203125e+05, 1.000210625e+05, 1.00011859375e+05, 1.000066484375e+05, 1.000037421875e+05, 1.00002140625e+05, 1.00001234375e+05, 1.00000703125e+05, 1.00000390625e+05, 1.000002265625e+05, 1.000001484375e+05, 1.000001484375e+05, 1.00000140625e+05, 1.00000125e+05, 1.0000009375e+05, 1.000000546875e+05, 1.00000015625e+05, 1.000000078125e+05, 1.000000078125e+05, 1.00000015625e+05, 1.00000015625e+05, 1.00000015625e+05, 1e+05, 9.99999921875e+04, 9.999996875e+04, 9.999996875e+04, 9.99999453125e+04, 9.99999296875e+04, 9.99999375e+04, 9.99999375e+04, 9.9999953125e+04, 9.999996875e+04, 9.99999765625e+04, 9.99999921875e+04, 1e+05, 1e+05, 1e+05, 1.000000078125e+05, 1.000000078125e+05, 1e+05, 1e+05, 1e+05] +senRelPre1.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.262026953125e+04, 3.891185546875e+04, 4.572261328125e+04, 5.30610390625e+04, 6.09321953125e+04, 6.93394375e+04, 7.82851328125e+04, 8.77705703125e+04, 9.77963828125e+04, 1.083629765625e+05, 1.182483828125e+05, 1.23320578125e+05, 1.22446484375e+05, 1.16900484375e+05, 1.085653359375e+05, 9.90182421875e+04, 8.931171875e+04, 8.00606171875e+04, 7.15682421875e+04, 6.395369921875e+04, 5.72355703125e+04, 5.137833984375e+04, 4.63198046875e+04, 4.198859375e+04, 3.83123203125e+04, 3.522094140625e+04, 3.2648953125e+04, 3.053635546875e+04, 2.882887890625e+04, 2.747784765625e+04, 1.0575934375e+05, 1.0270515625e+05, 1.006127578125e+05, 9.93625e+04, 9.88495859375e+04, 9.89824296875e+04, 9.96812578125e+04, 1.00876765625e+05, 1.02508875e+05, 1.04525625e+05, 1.0281471875e+05, 1.016880859375e+05, 1.009993515625e+05, 1.005871171875e+05, 1.003427265625e+05, 1.001987578125e+05, 1.00114484375e+05, 1.000654609375e+05, 1.00037203125e+05, 1.000210625e+05, 1.00011859375e+05, 1.000066484375e+05, 1.000037421875e+05, 1.00002140625e+05, 1.00001234375e+05, 1.00000703125e+05, 1.00000390625e+05, 1.000002265625e+05, 1.000001484375e+05, 1.000001484375e+05, 1.00000140625e+05, 1.00000125e+05, 1.0000009375e+05, 1.000000546875e+05, 1.00000015625e+05, 1.000000078125e+05, 1.000000078125e+05, 1.00000015625e+05, 1.00000015625e+05, 1.00000015625e+05, 1e+05, 9.99999921875e+04, 9.999996875e+04, 9.999996875e+04, 9.99999453125e+04, 9.99999296875e+04, 9.99999375e+04, 9.99999375e+04, 9.9999953125e+04, 9.999996875e+04, 9.99999765625e+04, 9.99999921875e+04, 1e+05, 1e+05, 1e+05, 1.000000078125e+05, 1.000000078125e+05, 1e+05, 1e+05, 1e+05] +floSet.y=[0e+00, 1.999999955296516e-02, 3.999999910593033e-02, 5.999999865889549e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 5e-01, 5.199999809265137e-01, 5.400000214576721e-01, 5.600000023841858e-01, 5.799999833106995e-01, 6.000000238418579e-01, 6.200000047683716e-01, 6.399999856948853e-01, 6.600000262260437e-01, 6.800000071525574e-01, 6.99999988079071e-01, 7.200000286102295e-01, 7.400000095367432e-01, 7.599999904632568e-01, 7.799999713897705e-01, 8.00000011920929e-01, 8.199999928474426e-01, 8.399999737739563e-01, 8.600000143051147e-01, 8.799999952316284e-01, 8.999999761581421e-01, 9.200000166893005e-01, 9.399999976158142e-01, 9.599999785423279e-01, 9.800000190734863e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +senMasFlo.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.199999988079071e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 5e-01, 5.199999809265137e-01, 5.400000214576721e-01, 5.600000023841858e-01, 5.799999833106995e-01, 6.000000238418579e-01, 6.200000047683716e-01, 6.399999856948853e-01, 6.600000262260437e-01, 6.800000071525574e-01, 6.99999988079071e-01, 7.200000286102295e-01, 7.400000095367432e-01, 7.599999904632568e-01, 7.799999713897705e-01, 8.00000011920929e-01, 1.639999985694885e+00, 1.679999947547913e+00, 1.720000028610229e+00, 1.759999990463257e+00, 1.799999952316284e+00, 1.840000033378601e+00, 1.879999995231628e+00, 1.919999957084656e+00, 1.960000038146973e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +senMasFlo1.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.199999988079071e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 5e-01, 5.199999809265137e-01, 5.400000214576721e-01, 5.600000023841858e-01, 5.799999833106995e-01, 6.000000238418579e-01, 6.200000047683716e-01, 6.399999856948853e-01, 6.600000262260437e-01, 6.800000071525574e-01, 6.99999988079071e-01, 7.200000286102295e-01, 7.400000095367432e-01, 7.599999904632568e-01, 7.799999713897705e-01, 8.00000011920929e-01, 1.639999985694885e+00, 1.679999947547913e+00, 1.720000028610229e+00, 1.759999990463257e+00, 1.799999952316284e+00, 1.840000033378601e+00, 1.879999995231628e+00, 1.919999957084656e+00, 1.960000038146973e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +pum.P=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.502291870117188e+01, 6.992245483398438e+01, 7.523063659667969e+01, 8.170706939697266e+01, 9.033345794677734e+01, 1.016380157470703e+02, 1.155599670410156e+02, 1.311311645507812e+02, 1.476568756103516e+02, 1.652776641845703e+02, 1.811075134277344e+02, 1.954026031494141e+02, 2.014885864257812e+02, 1.987723693847656e+02, 1.895254211425781e+02, 1.782164459228516e+02, 1.666934051513672e+02, 1.530971374511719e+02, 1.393235015869141e+02, 1.268761672973633e+02, 1.158723220825195e+02, 1.068865432739258e+02, 9.970796203613281e+01, 9.420874786376953e+01, 9.013189697265625e+01, 8.720566558837891e+01, 8.5114501953125e+01, 8.368795013427734e+01, 8.280617523193359e+01, 8.237694549560547e+01, 4.796799011230469e+02, 4.6976025390625e+02, 4.65227294921875e+02, 4.652261962890625e+02, 4.692882080078125e+02, 4.770110168457031e+02, 4.880517272949219e+02, 5.021197509765625e+02, 5.189697265625e+02, 5.383948364257812e+02, 5.283932495117188e+02, 5.218377075195312e+02, 5.178422241210938e+02, 5.154552612304688e+02, 5.14041748046875e+02, 5.132095336914062e+02, 5.1272265625e+02, 5.12439453125e+02, 5.122762451171875e+02, 5.121830444335938e+02, 5.121298828125e+02, 5.120997924804688e+02, 5.120830078125e+02, 5.120737915039062e+02, 5.120685424804688e+02, 5.120654296875e+02, 5.120636596679688e+02, 5.120626831054688e+02, 5.12062255859375e+02, 5.12062255859375e+02, 5.120621948242188e+02, 5.120621337890625e+02, 5.120619506835938e+02, 5.120617065429688e+02, 5.120615234375e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614624023438e+02, 5.120614624023438e+02, 5.120614624023438e+02, 5.120614013671875e+02, 5.120613403320312e+02, 5.120612182617188e+02, 5.120612182617188e+02, 5.120610961914062e+02, 5.1206103515625e+02, 5.1206103515625e+02, 5.1206103515625e+02, 5.120610961914062e+02, 5.120612182617188e+02, 5.12061279296875e+02, 5.120613403320312e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02, 5.120614013671875e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsSpeed.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsSpeed.txt new file mode 100644 index 00000000000..0d9a35c9a31 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_MultiplePumpsSpeed.txt @@ -0,0 +1,23 @@ +last-generated=2023-02-27 +statistics-initialization= +{ + "nonlinear": "1, 2", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 2", + "number of continuous time states": "7", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+03] +spe.y=[0e+00, 1.999999955296516e-02, 3.999999910593033e-02, 5.999999865889549e-02, 7.999999821186066e-02, 1.000000014901161e-01, 1.19999997317791e-01, 1.400000005960464e-01, 1.599999964237213e-01, 1.800000071525574e-01, 2.000000029802322e-01, 2.199999988079071e-01, 2.39999994635582e-01, 2.599999904632568e-01, 2.800000011920929e-01, 3.00000011920929e-01, 3.199999928474426e-01, 3.400000035762787e-01, 3.600000143051147e-01, 3.799999952316284e-01, 4.000000059604645e-01, 4.199999868869781e-01, 4.399999976158142e-01, 4.600000083446503e-01, 4.799999892711639e-01, 5e-01, 5.199999809265137e-01, 5.400000214576721e-01, 5.600000023841858e-01, 5.799999833106995e-01, 6.000000238418579e-01, 6.200000047683716e-01, 6.399999856948853e-01, 6.600000262260437e-01, 6.800000071525574e-01, 6.99999988079071e-01, 7.200000286102295e-01, 7.400000095367432e-01, 7.599999904632568e-01, 7.799999713897705e-01, 8.00000011920929e-01, 8.199999928474426e-01, 8.399999737739563e-01, 8.600000143051147e-01, 8.799999952316284e-01, 8.999999761581421e-01, 9.200000166893005e-01, 9.399999976158142e-01, 9.599999785423279e-01, 9.800000190734863e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1Pum.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +y1Pum.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ope.y=[2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.266666740179062e-01, 2.533333301544189e-01, 2.800000011920929e-01, 3.066666722297668e-01, 3.333333432674408e-01, 3.600000143051147e-01, 3.866666555404663e-01, 4.133333265781403e-01, 4.399999976158142e-01, 4.666666686534882e-01, 4.933333396911621e-01, 5.199999809265137e-01, 5.4666668176651e-01, 5.733333230018616e-01, 6.000000238418579e-01, 6.266666650772095e-01, 6.53333306312561e-01, 6.800000071525574e-01, 7.066666483879089e-01, 7.333333492279053e-01, 7.599999904632568e-01, 7.866666913032532e-01, 8.133333325386047e-01, 8.399999737739563e-01, 8.666666746139526e-01, 8.933333158493042e-01, 9.200000166893005e-01, 9.466666579246521e-01, 9.733333587646484e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +senRelPre.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.77976806640625e+03, 4.73394775390625e+03, 5.7806064453125e+03, 6.9190166015625e+03, 8.1486259765625e+03, 9.4690068359375e+03, 1.0879822265625e+04, 1.23807978515625e+04, 1.39717099609375e+04, 1.565237109375e+04, 1.741636328125e+04, 1.9242408203125e+04, 2.1120765625e+04, 2.3048076171875e+04, 2.5020841796875e+04, 2.703241015625e+04, 2.90713125e+04, 3.11201953125e+04, 3.315463671875e+04, 3.514257421875e+04, 3.704438671875e+04, 3.881287890625e+04, 4.038956640625e+04, 4.167532421875e+04, 4.254628125e+04, 4.321653125e+04, 4.375798828125e+04, 4.422039453125e+04, 4.465328125e+04, 4.510214453125e+04, 6.6716859375e+04, 6.9406875e+04, 7.20469453125e+04, 7.47512890625e+04, 7.75398359375e+04, 8.042284375e+04, 8.34076015625e+04, 8.64986171875e+04, 8.96980546875e+04, 9.30061875e+04, 9.26930234375e+04, 9.2481421875e+04, 9.23498984375e+04, 9.2270375e+04, 9.22229453125e+04, 9.219490625e+04, 9.2178453125e+04, 9.2168875e+04, 9.21633515625e+04, 9.21601875e+04, 9.2158390625e+04, 9.21573671875e+04, 9.21568046875e+04, 9.2156484375e+04, 9.21563125e+04, 9.2156203125e+04, 9.2156140625e+04, 9.2156109375e+04, 9.215609375e+04, 9.215609375e+04, 9.215609375e+04, 9.215609375e+04, 9.21560859375e+04, 9.2156078125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560625e+04, 9.21560625e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560625e+04, 9.21560625e+04, 9.21560625e+04, 9.21560625e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04] +senRelPre1.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.77955224609375e+03, 4.73368408203125e+03, 5.7802900390625e+03, 6.91864306640625e+03, 8.1481904296875e+03, 9.46850390625e+03, 1.087924609375e+04, 1.23801435546875e+04, 1.39709697265625e+04, 1.56515400390625e+04, 1.7415435546875e+04, 1.92413828125e+04, 2.11196328125e+04, 2.3046822265625e+04, 2.5019435546875e+04, 2.70308046875e+04, 2.9069439453125e+04, 3.1117962890625e+04, 3.315192578125e+04, 3.513924609375e+04, 3.704027734375e+04, 3.88078046875e+04, 4.038329296875e+04, 4.166733203125e+04, 4.2536890625e+04, 4.320640234375e+04, 4.374727734375e+04, 4.42092265625e+04, 4.464174609375e+04, 4.509030078125e+04, 6.6716859375e+04, 6.9406875e+04, 7.20469453125e+04, 7.47512890625e+04, 7.75398359375e+04, 8.042284375e+04, 8.34076015625e+04, 8.64986171875e+04, 8.96980546875e+04, 9.30061875e+04, 9.26930234375e+04, 9.2481421875e+04, 9.23498984375e+04, 9.2270375e+04, 9.22229453125e+04, 9.219490625e+04, 9.2178453125e+04, 9.2168875e+04, 9.21633515625e+04, 9.21601875e+04, 9.2158390625e+04, 9.21573671875e+04, 9.21568046875e+04, 9.2156484375e+04, 9.21563125e+04, 9.2156203125e+04, 9.2156140625e+04, 9.2156109375e+04, 9.215609375e+04, 9.215609375e+04, 9.215609375e+04, 9.215609375e+04, 9.21560859375e+04, 9.2156078125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560625e+04, 9.21560625e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560546875e+04, 9.21560625e+04, 9.21560625e+04, 9.21560625e+04, 9.21560625e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04, 9.21560703125e+04] +senMasFlo.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.488787174224854e-02, 8.371090143918991e-02, 9.244736284017563e-02, 1.011095866560936e-01, 1.097084358334541e-01, 1.182529628276825e-01, 1.26750648021698e-01, 1.352079808712006e-01, 1.436305940151215e-01, 1.520231068134308e-01, 1.61187157034874e-01, 1.738059371709824e-01, 1.910466849803925e-01, 2.131328582763672e-01, 2.400354444980621e-01, 2.71699070930481e-01, 3.080859184265137e-01, 3.49140077829361e-01, 3.947661817073822e-01, 4.447697103023529e-01, 4.987924695014954e-01, 5.562600493431091e-01, 6.163042783737183e-01, 6.774585843086243e-01, 7.376657724380493e-01, 7.975482940673828e-01, 8.566941022872925e-01, 9.145686626434326e-01, 9.707500338554382e-01, 1.024937152862549e+00, 1.302573561668396e+00, 1.381065845489502e+00, 1.455491662025452e+00, 1.526548981666565e+00, 1.594217300415039e+00, 1.658549666404724e+00, 1.719704866409302e+00, 1.777911901473999e+00, 1.833440661430359e+00, 1.886576890945435e+00, 1.899003863334656e+00, 1.90731406211853e+00, 1.912444829940796e+00, 1.915534377098083e+00, 1.917372703552246e+00, 1.918457984924316e+00, 1.919094085693359e+00, 1.919464349746704e+00, 1.91967785358429e+00, 1.9197998046875e+00, 1.919869422912598e+00, 1.919908761978149e+00, 1.919930696487427e+00, 1.919942855834961e+00, 1.919949650764465e+00, 1.91995370388031e+00, 1.919956088066101e+00, 1.919957399368286e+00, 1.919957876205444e+00, 1.919957876205444e+00, 1.919957995414734e+00, 1.919958114624023e+00, 1.919958353042603e+00, 1.919958591461182e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995906829834e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.919959306716919e+00, 1.919959306716919e+00, 1.919959425926208e+00, 1.919959545135498e+00, 1.919959545135498e+00, 1.919959545135498e+00, 1.919959425926208e+00, 1.919959306716919e+00, 1.919959187507629e+00, 1.919959187507629e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00] +senMasFlo1.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.488573342561722e-02, 8.370856195688248e-02, 9.244482964277267e-02, 1.011068597435951e-01, 1.097055077552795e-01, 1.182498186826706e-01, 1.267472952604294e-01, 1.352044194936752e-01, 1.43626794219017e-01, 1.520190685987473e-01, 1.611828655004501e-01, 1.738013029098511e-01, 1.910415589809418e-01, 2.131270617246628e-01, 2.400286942720413e-01, 2.716909945011139e-01, 3.080759942531586e-01, 3.491275608539581e-01, 3.947500586509705e-01, 4.447486400604248e-01, 4.987647831439972e-01, 5.562236905097961e-01, 6.162563562393188e-01, 6.773936152458191e-01, 7.375843524932861e-01, 7.97454833984375e-01, 8.565892577171326e-01, 9.144531488418579e-01, 9.706246852874756e-01, 1.024802565574646e+00, 1.302573561668396e+00, 1.381065845489502e+00, 1.455491662025452e+00, 1.526548981666565e+00, 1.594217300415039e+00, 1.658549666404724e+00, 1.719704866409302e+00, 1.777911901473999e+00, 1.833440661430359e+00, 1.886576890945435e+00, 1.899003863334656e+00, 1.90731406211853e+00, 1.912444829940796e+00, 1.915534377098083e+00, 1.917372703552246e+00, 1.918457984924316e+00, 1.919094085693359e+00, 1.919464349746704e+00, 1.91967785358429e+00, 1.9197998046875e+00, 1.919869422912598e+00, 1.919908761978149e+00, 1.919930696487427e+00, 1.919942855834961e+00, 1.919949650764465e+00, 1.91995370388031e+00, 1.919956088066101e+00, 1.919957399368286e+00, 1.919957876205444e+00, 1.919957876205444e+00, 1.919957995414734e+00, 1.919958114624023e+00, 1.919958353042603e+00, 1.919958591461182e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995906829834e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995894908905e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.919959306716919e+00, 1.919959306716919e+00, 1.919959425926208e+00, 1.919959545135498e+00, 1.919959545135498e+00, 1.919959545135498e+00, 1.919959425926208e+00, 1.919959306716919e+00, 1.919959187507629e+00, 1.919959187507629e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00, 1.91995906829834e+00] +pum.P=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.037590026855469e+01, 5.36888427734375e+01, 5.923738479614258e+01, 5.901302337646484e+01, 5.878203201293945e+01, 5.855474853515625e+01, 5.834428024291992e+01, 5.816685104370117e+01, 5.804231262207031e+01, 5.799479293823242e+01, 5.805724334716797e+01, 5.830887985229492e+01, 5.891164779663086e+01, 6.013161468505859e+01, 6.214979553222656e+01, 6.474681091308594e+01, 6.767158508300781e+01, 7.064846801757812e+01, 7.352099609375e+01, 7.654214477539062e+01, 7.993752288818359e+01, 8.391086578369141e+01, 8.845890808105469e+01, 9.357923889160156e+01, 9.921476745605469e+01, 1.054066009521484e+02, 1.120504379272461e+02, 1.19042854309082e+02, 1.262386703491211e+02, 1.334314422607422e+02, 2.711035461425781e+02, 2.87775146484375e+02, 3.049844055175781e+02, 3.223709716796875e+02, 3.388602600097656e+02, 3.54942626953125e+02, 3.740233154296875e+02, 3.986927185058594e+02, 4.247934265136719e+02, 4.518948974609375e+02, 4.523218078613281e+02, 4.526000061035156e+02, 4.527688903808594e+02, 4.528695678710938e+02, 4.529291076660156e+02, 4.52964111328125e+02, 4.529845886230469e+02, 4.529964904785156e+02, 4.530033569335938e+02, 4.530072937011719e+02, 4.53009521484375e+02, 4.530107727050781e+02, 4.53011474609375e+02, 4.530118713378906e+02, 4.530120849609375e+02, 4.530122375488281e+02, 4.530122985839844e+02, 4.530123291015625e+02, 4.530123596191406e+02, 4.530123596191406e+02, 4.530123596191406e+02, 4.530123596191406e+02, 4.530123596191406e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530124206542969e+02, 4.530124206542969e+02, 4.530124206542969e+02, 4.530124206542969e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02, 4.530123901367188e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ValveOpeningFlowBalancing.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ValveOpeningFlowBalancing.txt new file mode 100644 index 00000000000..fb41d01d9c9 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Subsystems_Validation_ValveOpeningFlowBalancing.txt @@ -0,0 +1,10 @@ +last-generated=2023-02-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +y1=[2.182178944349289e-01, 2.182178944349289e-01] +y2=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Validation_AllElectricCWStorage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Validation_AllElectricCWStorage.txt new file mode 100644 index 00000000000..552fd472539 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Experimental_DHC_Plants_Combined_Validation_AllElectricCWStorage.txt @@ -0,0 +1,95 @@ +last-generated=2023-07-31 +statistics-initialization= +{ + "nonlinear": "1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "37, 1, 1, 1, 1, 1", + "number of continuous time states": "168", + "numerical Jacobians": "0" +} +time=[0e+00, 3.456e+05] +pla.chi.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.chi.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.chiHea.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pla.chiHea.y1Coo[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.ctl.y1HeaCooChiHea[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.chiHea.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.chiHea.y1Coo[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.ctl.y1HeaCooChiHea[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.ctl.cycTan.idxCycTan=[1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pla.ctl.modConLoo.mode=[1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 2e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 2e+00, 2e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 2e+00, 1e+00, 2e+00, 1e+00, 1e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 1e+00, 1e+00] +pla.chi.m1_flow=[1.978321714364896e-17, -2.065122032465948e-21, -2.065122032465948e-21, -2.065122032465948e-21, -2.065122032465948e-21, 3.336462783813477e+01, 1.183481502532959e+01, 1.183136463165283e+01, 3.05494499206543e+01, 3.358616256713867e+01, 6.679955291748047e+01, 6.689244842529297e+01, 6.782830047607422e+01, 6.692398071289062e+01, 6.712364196777344e+01, 6.690320587158203e+01, 6.689041900634766e+01, 6.688982391357422e+01, 6.689514923095703e+01, 6.688988494873047e+01, 6.782774353027344e+01, 6.689566802978516e+01, 6.689467620849609e+01, 6.67608642578125e+01, 6.690306091308594e+01, 3.338858795166016e+01, 1.738451766967773e+01, 3.265230941772461e+01, 3.145639801025305e+01, 1.183188152313232e+01, 1.183232116699219e+01, 3.32789421081543e+01, 3.344155120849609e+01, 6.990756225585938e+01, 6.684864807128906e+01, 5.211583328247059e+01, 6.583558654785156e+01, 6.686013793945312e+01, 6.718377685546875e+01, 6.689933013916016e+01, 6.621038818359375e+01, 6.676487731933594e+01, 6.766310119628906e+01, 6.690460968017578e+01, 6.689000701904297e+01, 6.738272094726562e+01, 6.689637756347656e+01, 6.689223480224609e+01, 6.685826873779297e+01, 6.690060424804688e+01, 3.338835906982422e+01, 1.835992240905762e+01, 3.213178634643555e+01, 3.343207168579102e+01, 1.183188819885254e+01, 1.183216857910156e+01, 3.327868270874024e+01, 3.344156646728516e+01, 3.344476699829102e+01, 3.344479751586914e+01, 3.344479370117188e+01, 3.344478607177734e+01, 3.344478988647461e+01, 3.344478988647461e+01, 3.344478988647461e+01, 3.339691543579102e+01, 2.665746688842773e+01, 2.651067352294922e+01, 1.728398895263658e+01, 1.183136177062988e+01, 1.183135795593262e+01, 1.183135318756104e+01, 1.183134174346924e+01, 1.183131122589111e+01, 1.183129596710205e+01, 1.18313159942627e+01, 8.631744208287273e-09, 2.509033336650646e-08, 3.647246558102779e-05, 3.704736809595488e-05, 1.201737092060284e-07, 3.545462095644325e-05, 3.544247738318518e-05, 3.551992267603055e-05, 3.543272032402456e-05, 3.550116525730118e-05, 1.202050441406755e-07, 3.542055492289364e-05, 9.254974031591701e-08, 3.537350494298153e-05, 6.598770596610848e-08, 5.933214097808559e-08, 3.580289194360375e-05, 3.519995880196802e-05, 2.534027743195111e-08, 1.897479151580228e-08, 1.39895597328632e-08, 1.002138994010693e-08, 3.532841947162524e-05, 5.637962097182481e-09, 5.554503523796939e-09] +pla.chi.m2_flow=[1.400704801341567e-17, 3.574439078823619e-26, 3.574439078823619e-26, 3.574439078823619e-26, 3.574439078823619e-26, 3.15336856842041e+01, 3.153368377685547e+01, 3.156808471679688e+01, 3.15983829498291e+01, 3.955873489379883e+01, 6.316604995727539e+01, 7.3719970703125e+01, 6.812078094482422e+01, 8.525246429443359e+01, 8.217301940917972e+01, 9.892166137695312e+01, 1.056189346313477e+02, 9.289166259765622e+01, 8.136112976074219e+01, 7.857249450683594e+01, 7.67105712890625e+01, 6.733341217041016e+01, 6.747029113769531e+01, 6.287528991699219e+01, 6.298038101196289e+01, 3.146763038635254e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.456625366210938e+01, 6.319543838500977e+01, 7.105941772460945e+01, 6.765596008300778e+01, 7.333045959472656e+01, 9.112136840820312e+01, 7.919327545166016e+01, 9.275480651855469e+01, 1.108626861572266e+02, 1.055620346069336e+02, 9.289149475097656e+01, 8.136102294921875e+01, 7.857261657714844e+01, 7.67105712890625e+01, 6.733336639404297e+01, 6.747029113769531e+01, 6.287562561035156e+01, 6.298042297363281e+01, 3.146840667724609e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.15267219543457e+01, 3.152727699279785e+01, 3.152771759033203e+01, 3.152807807922363e+01, 3.152837944030762e+01, 3.152863693237305e+01, 3.152886009216309e+01, 3.152905654907227e+01, 3.152923011779785e+01, 3.15294361114502e+01, 1.181969722097165e-08, 1.181880815437353e-08, 2.219312555951092e-08, 3.259942005229277e-08, 3.254216451864522e-08, 3.26023474883641e-08, 3.244788260303721e-08, 3.250514168939844e-08, 3.246383428745503e-08, 3.251670221970926e-08, 3.237400036937288e-08, 3.250390534503822e-08, 3.24205515767062e-08, 3.250887914418854e-08, 3.245304114329883e-08, 3.245229507342628e-08, 3.25202478279607e-08, 1.180378728093956e-08, 1.181936770677794e-08, 1.18193073106454e-08, 1.181926556625967e-08, 1.181921671644659e-08, 1.181940412209315e-08, 1.181867048671847e-08, 1.18194876108646e-08] +pla.chiHea.m1_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.207358741760254e+01, 2.207357978820801e+01, 2.207846832275391e+01, 2.207867240905762e+01, 2.207890510559082e+01, 2.207917213439941e+01, 2.207357978820801e+01, 2.207357406616211e+01, 2.207357406616211e+01, 1.851713752746582e+01, 1.813945770263672e+01, 1.814436912536621e+01, 1.818189430236816e+01, 1.846994972229004e+01, 1.906264114379883e+01, 2.207357406616211e+01, 2.207357406616211e+01, 2.207357406616211e+01, 2.207357978820801e+01, 2.207357978820801e+01, 2.207357978820801e+01, 2.21301383972168e+01, 2.643255996704102e+01, 4.572628021240234e+01, 4.59626579284668e+01, 5.498098373413086e+01, 6.443997955322266e+01, 6.326328659057617e+01, 5.835983276367188e+01, 5.344892120361326e+01, 4.853055191040041e+01, 4.553484725952148e+01, 4.423139190673828e+01, 4.370270538330078e+01, 4.286456298828125e+01, 4.523873901367188e+01, 2.015219306945801e+01, 2.089242172241211e+01, 2.080857467651367e+01, 2.105655860900879e+01, 2.206649398803711e+01, 2.206707572937012e+01, 2.206753349304199e+01, 2.206791305541992e+01, 2.206822204589844e+01, 2.206856918334961e+01, 2.21301383972168e+01, 2.643255996704102e+01, 4.572628402709961e+01, 4.5962646484375e+01, 5.498098373413094e+01, 6.443997955322274e+01, 6.326328659057621e+01, 5.835983657836914e+01, 5.344892120361328e+01, 4.853055191040039e+01, 4.553573226928711e+01, 4.558781051635742e+01, 4.560086822509766e+01, 4.560752868652344e+01, 2.382914733886719e+01, 2.205352401733398e+01, 2.205943298339844e+01, 2.20620288848877e+01, 2.206357383728027e+01, 2.206462669372559e+01, 2.206540107727051e+01, 2.206600570678711e+01, 2.206649017333984e+01, 2.206689262390137e+01, 2.206729316711426e+01, 2.21176929473877e+01, 2.226992797851562e+01, 4.277423858642578e+01, 4.582069778442383e+01, 5.365517807006836e+01, 6.416769409179688e+01, 6.429983520507812e+01, 6.079928970336914e+01, 5.729493713378906e+01, 5.378678131103516e+01, 5.027481842041016e+01, 4.675904846191406e+01, 4.557433319091797e+01, 4.56002197265625e+01, 4.560917663574219e+01, 4.561409759521484e+01, 4.561730575561523e+01, 2.558558082580566e+01, 2.204387474060059e+01, 2.204758262634277e+01, 2.205527305603027e+01, 2.205863189697266e+01, 2.206062889099121e+01, 2.206199645996094e+01, 2.20631103515625e+01] +pla.chiHea.m2_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.866700553894043e+01, 2.866699600219727e+01, 2.866699600219727e+01, 2.866777610778809e+01, 2.866730499267578e+01, 2.866702842712402e+01, 2.866699409484863e+01, 2.866702461242676e+01, 2.866699028015137e+01, -5.780205596238378e-03, -8.258485235273838e-03, -9.320634417235851e-03, -7.31972092762589e-03, -5.687654484063387e-03, -5.391141399741173e-03, 2.866641235351562e+01, 2.86672420501709e+01, 2.866699409484863e+01, 2.866698455810547e+01, 2.866699600219727e+01, 2.866699600219727e+01, 3.554349517822266e+01, 2.86669921875e+01, 6.023976135253903e+01, 5.733392715454102e+01, 5.73339729309082e+01, 5.733400726318359e+01, 5.87338752746582e+01, 6.120072937011719e+01, 5.898788070678711e+01, 2.866261100769043e+01, 2.866696929931641e+01, 2.866697883605957e+01, -8.803926408290863e-03, -1.090961694717407e-02, -1.438764110207558e-02, -9.127556346356869e-03, -7.522741798311472e-03, -5.947812460362911e-03, -5.61342341825366e-03, 2.866687965393066e+01, 2.866654968261719e+01, 2.866699409484863e+01, 2.86669921875e+01, 2.86669979095459e+01, 2.866699600219727e+01, 3.551352691650391e+01, 2.866699028015137e+01, 6.023919296264648e+01, 5.733392715454102e+01, 5.73339729309082e+01, 5.733400344848633e+01, 5.866270446777341e+01, 5.929121780395508e+01, 5.934783554077148e+01, 5.925060653686523e+01, 5.913285064697266e+01, 5.911289215087891e+01, 5.91324577331543e+01, 5.916738891601562e+01, 2.866704368591309e+01, 2.866859817504883e+01, 2.866851806640625e+01, 2.866657829284668e+01, 2.86669979095459e+01, 2.866699600219727e+01, 2.866699600219727e+01, 2.866699600219727e+01, 2.866699600219727e+01, 2.866699600219727e+01, 2.86669979095459e+01, 2.86670036315918e+01, 2.866701698303223e+01, 5.859470748901367e+01, 5.733394241333008e+01, 5.733576202392578e+01, 5.733400344848633e+01, 5.951646041870117e+01, 5.902192687988281e+01, 5.931528854370117e+01, 5.878619384765625e+01, 5.992984008789062e+01, 5.868339538574219e+01, 5.983040618896484e+01, 5.865935897827148e+01, 5.951775741577148e+01, 5.945808792114258e+01, 5.853639984130859e+01, 2.86673583984375e+01, 2.866700172424316e+01, 2.866700172424316e+01, 2.866700172424316e+01, 2.866700172424316e+01, 2.866697120666504e+01, 2.866702270507812e+01, 2.866699600219727e+01] +pla.chiHea.m3_flow=[-2.039138435132293e-15, 4.749422276860865e-24, 4.749422276860865e-24, 4.749422276860865e-24, 4.749422276860865e-24, 7.966118573676795e-06, 7.970980732352473e-06, 7.966660632519051e-06, 7.838079909561202e-06, 7.988827746885363e-06, 8.011449608602561e-06, 7.960548828123137e-06, 3.161335945129395e+01, 3.175247383117676e+01, 3.495186614990234e+01, 3.537268829345703e+01, 3.536751937866211e+01, 3.533290481567383e+01, 3.50762939453125e+01, 3.453503799438477e+01, 3.196911239624023e+01, 3.178023529052734e+01, 3.178704261779785e+01, 7.967141755216289e-06, 7.985390766407363e-06, 7.969772013893817e-06, 8.292870006698649e-06, 7.15119540473097e-06, 6.256752840272418e-06, 6.096383913245518e-06, 3.806005224760156e-06, 1.391505406900251e-06, 1.696719891697285e-06, 3.911966814484913e-06, 4.192674168734816e-06, 5.161653916729844e-06, 6.119745648902608e-06, 1.219742774963379e+00, 1.710717558860779e+00, 2.469513893127441e+00, 4.128348827362061e-01, 3.727903366088867e+01, 3.289426803588867e+01, 3.292270278930664e+01, 3.269599914550781e+01, 3.179217147827148e+01, 3.177424430847168e+01, 3.177776336669922e+01, 7.975425432960037e-06, 7.981573617144022e-06, 7.969759280967992e-06, 8.282916496682446e-06, 7.12654627932352e-06, 6.156064046081156e-06, 6.096397100918693e-06, 3.805776714216315e-06, 1.391521209370674e-06, 1.696729555078481e-06, 2.945125743281096e-06, 4.19403295381926e-06, 5.443577265396016e-06, 6.203844804986147e-06, 6.190581189002842e-06, 6.187216058606282e-06, 6.185470283526229e-06, 7.655177796550561e-06, 7.761518645565957e-06, 7.736771294730715e-06, 7.922199984022885e-06, 7.969320904521737e-06, 7.969129001139663e-06, 7.968985300976783e-06, 7.968866157170851e-06, 7.968749741849024e-06, 7.968661520862952e-06, 7.968609679664951e-06, -3.854642272926867e-06, -3.876382834278047e-06, 7.415180789394071e-06, 6.929583378223469e-06, -1.352402614429593e-05, 1.468023697270837e-06, 1.428287191629352e-06, 2.35850302487961e-06, 3.206689825674403e-06, 4.133019956498174e-06, -1.266501385543961e-05, 5.877983767277328e-06, -1.148529827332823e-05, 6.148612101242179e-06, -1.150742264144355e-05, -1.151200012827758e-05, 6.35896913081524e-06, 7.253287094499683e-06, -3.835873940261081e-06, -3.838658358290559e-06, -3.841695161099778e-06, -3.843618742394028e-06, 7.928827471914701e-06, -3.845681021630298e-06, -3.845908395305742e-06] +pla.chiHea.m4_flow=[-1.401207065409509e-17, -2.519748895653833e-23, -2.519748895653833e-23, -2.519748895653833e-23, -2.519748895653833e-23, 2.3955099095474e-06, 2.395278215772123e-06, 2.406974772384274e-06, 2.41546558754635e-06, 5.122200946061639e-06, 2.412998583167791e-06, 4.206485300528584e-06, 3.177938842773438e+01, 3.931763076782227e+01, 6.77136154174805e+01, 7.620960235595703e+01, 7.8919921875e+01, 7.363806152343749e+01, 6.712343597412109e+01, 6.508697509765625e+01, 3.557956695556641e+01, 3.14289379119873e+01, 3.148988723754883e+01, 2.362604845984606e-06, 2.379958232268109e-06, 2.372523340454791e-06, 2.605746658446151e-06, 2.3949201022333e-06, -6.635611498495567e-06, -6.892765213706298e-06, -6.889823453093413e-06, -6.88979616825236e-06, -5.259196314000292e-06, -6.639193088631146e-06, -4.773461114382352e-06, 3.157254600524901e+01, 3.408918380737305e+01, 3.441969680786133e+01, 6.554400634765625e+01, 6.892616271972656e+01, 6.883553314208984e+01, 7.898385620117188e+01, 7.363824462890625e+01, 6.712354278564453e+01, 6.508722686767578e+01, 3.557956695556641e+01, 3.142891883850098e+01, 3.148988723754883e+01, 2.36243749895948e-06, 2.38016377807071e-06, 2.372856670262991e-06, 2.60778801930428e-06, 2.394774583081016e-06, -6.636303623963613e-06, -6.892550118209329e-06, -6.890020358696347e-06, -6.890028089401312e-06, -6.807929821661674e-06, -6.792937256250298e-06, -6.790744464524323e-06, -6.796104116801871e-06, -6.801861673011445e-06, -6.802153620810714e-06, -6.801018571422901e-06, -6.799149559810758e-06, 2.397460320935352e-06, 2.381437752774218e-06, 2.381898866588017e-06, 2.385603238508339e-06, 2.393451723037288e-06, 2.393557224422693e-06, 2.393612476225826e-06, 2.393707291048486e-06, 2.393815066170646e-06, 2.393874410699937e-06, 2.393933527855552e-06, -8.322464054799639e-06, -8.321837412950117e-06, -1.562658326292876e-05, -2.295384365424979e-05, -2.291353121108841e-05, -2.295590456924401e-05, -2.28471435548272e-05, -2.288746145495679e-05, -2.285837581439409e-05, -2.289559961354826e-05, -2.279512045788579e-05, -2.28865919780219e-05, -2.282790046592709e-05, -2.289009171363432e-05, -2.285077607666608e-05, -2.285025038872845e-05, -2.289809708599932e-05, -8.3112608990632e-06, -8.322231224155985e-06, -8.322188477905001e-06, -8.322159374074545e-06, -8.322125722770579e-06, -8.322257599502336e-06, -8.321741006511729e-06, -8.32231580716325e-06] +pla.chi.chi.m2_flow=[1.400704801341567e-17, 3.574439078823619e-26, 3.574439078823619e-26, 3.574439078823619e-26, 3.574439078823619e-26, 3.15336856842041e+01, 3.153368377685547e+01, 3.156808471679688e+01, 3.15983829498291e+01, 3.955873489379883e+01, 3.15830249786377e+01, 3.68599853515625e+01, 3.406039047241211e+01, 4.26262321472168e+01, 4.108650970458986e+01, 4.946083068847656e+01, 5.280946731567383e+01, 4.644583129882811e+01, 4.068056488037109e+01, 3.928624725341797e+01, 3.835528564453125e+01, 3.366670608520508e+01, 3.373514556884766e+01, 3.143764495849609e+01, 3.149019050598145e+01, 3.146763038635254e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.456625366210938e+01, 3.159771919250488e+01, 3.552970886230472e+01, 3.382798004150389e+01, 3.666522979736328e+01, 4.556068420410156e+01, 3.959663772583008e+01, 4.637740325927734e+01, 5.543134307861328e+01, 5.27810173034668e+01, 4.644574737548828e+01, 4.068051147460938e+01, 3.928630828857422e+01, 3.835528564453125e+01, 3.366668319702148e+01, 3.373514556884766e+01, 3.143781280517578e+01, 3.149021148681641e+01, 3.146840667724609e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.153368377685547e+01, 3.15267219543457e+01, 3.152727699279785e+01, 3.152771759033203e+01, 3.152807807922363e+01, 3.152837944030762e+01, 3.152863693237305e+01, 3.152886009216309e+01, 3.152905654907227e+01, 3.152923011779785e+01, 3.15294361114502e+01, 1.181969722097165e-08, 1.181880815437353e-08, 2.219312555951092e-08, 3.259942005229277e-08, 3.254216451864522e-08, 3.26023474883641e-08, 3.244788260303721e-08, 3.250514168939844e-08, 3.246383428745503e-08, 3.251670221970926e-08, 3.237400036937288e-08, 3.250390534503822e-08, 3.24205515767062e-08, 3.250887914418854e-08, 3.245304114329883e-08, 3.245229507342628e-08, 3.25202478279607e-08, 1.180378728093956e-08, 1.181936770677794e-08, 1.18193073106454e-08, 1.181926556625967e-08, 1.181921671644659e-08, 1.181940412209315e-08, 1.181867048671847e-08, 1.18194876108646e-08] +pla.chiHea.chi[1].m2_flow=[-0e+00, -0e+00, -0e+00, -0e+00, -0e+00, 2.866699409484863e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866776466369629e+01, 2.866729545593262e+01, 2.866701698303223e+01, 2.866698455810547e+01, 2.866701507568359e+01, 2.866698455810547e+01, 3.271736526489259e+01, 3.443373870849609e+01, 3.438774871826172e+01, 3.434624099731445e+01, 3.243853378295898e+01, 3.147561264038086e+01, 2.866640472412109e+01, 2.866723251342773e+01, 2.86669864654541e+01, 2.866697311401367e+01, 2.866698455810547e+01, 2.866698455810547e+01, 3.554348373413086e+01, 2.86669807434082e+01, 2.866764640808105e+01, 2.866695594787598e+01, 2.866698265075684e+01, 2.86669979095459e+01, 3.006697654724121e+01, 3.253311538696289e+01, 3.032085609436035e+01, 2.866260147094727e+01, 2.866696357727051e+01, 2.866697692871094e+01, 3.16900520324707e+01, 3.448048782348633e+01, 3.441198348999023e+01, 3.437895202636719e+01, 3.43463249206543e+01, 3.243844604492188e+01, 3.147561454772949e+01, 2.866687202453613e+01, 2.866654205322266e+01, 2.866698455810547e+01, 2.86669807434082e+01, 2.86669864654541e+01, 2.866698455810547e+01, 3.551351547241211e+01, 2.866697883605957e+01, 2.866831588745117e+01, 2.866696357727051e+01, 2.866698265075684e+01, 2.866699600219727e+01, 2.999582290649411e+01, 3.062421989440918e+01, 3.068083763122559e+01, 3.058360290527344e+01, 3.046585464477539e+01, 3.044589996337891e+01, 3.046546936035156e+01, 3.050040054321289e+01, 2.866703224182129e+01, 2.866858673095703e+01, 2.866850662231445e+01, 2.866656684875488e+01, 2.86669864654541e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.86669864654541e+01, 2.86669864654541e+01, 2.866699981689453e+01, 2.866769027709961e+01, 2.866695213317871e+01, 2.866761779785156e+01, 2.866699028015137e+01, 3.084944725036621e+01, 3.035508346557617e+01, 3.064827919006348e+01, 3.01194019317627e+01, 3.126261520385742e+01, 3.001643562316895e+01, 3.116303062438965e+01, 2.999234008789062e+01, 3.085073471069336e+01, 3.079111099243164e+01, 2.98693733215332e+01, 2.866734313964844e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866698455810547e+01, 2.866695404052734e+01, 2.866700744628906e+01, 2.86669807434082e+01] +pla.chiHea.chi[2].m2_flow=[-1.401207065409509e-17, -2.519748895653833e-23, -2.519748895653833e-23, -2.519748895653833e-23, -2.519748895653833e-23, 1.368665289191995e-05, 1.368688754155301e-05, 1.36927310450119e-05, 1.369969322695397e-05, 1.505273485236103e-05, 1.369433812214993e-05, 1.459210307075409e-05, 3.177939796447754e+01, 3.931763458251953e+01, 3.499047088623048e+01, 4.176760101318359e+01, 4.452285385131836e+01, 3.92845001220703e+01, 3.467921447753906e+01, 3.36059684753418e+01, 3.557957458496094e+01, 3.142894744873047e+01, 3.148989677429199e+01, 1.367058666801313e-05, 1.368003540846985e-05, 1.367595268675359e-05, 1.347641591564752e-05, 1.36872422444867e-05, 3.157210731506344e+01, 2.866696166992188e+01, 2.866698265075684e+01, 2.866700172424316e+01, 2.866689300537109e+01, 2.866760635375977e+01, 2.866702079772949e+01, 3.157255363464354e+01, 3.408919143676758e+01, 3.441970062255859e+01, 3.384515380859375e+01, 3.443476104736328e+01, 3.440916061401367e+01, 4.459577560424805e+01, 3.928439331054688e+01, 3.467914962768555e+01, 3.360599899291992e+01, 3.557957458496094e+01, 3.142892646789551e+01, 3.148989486694336e+01, 1.367084041703492e-05, 1.367983531963546e-05, 1.367601635138271e-05, 1.347437682852615e-05, 1.368739049212309e-05, 3.157087326049805e+01, 2.866695976257324e+01, 2.866698265075684e+01, 2.866699981689453e+01, 2.866687393188477e+01, 2.866699028015137e+01, 2.86669921875e+01, 2.866699600219727e+01, 2.866698837280273e+01, 2.866698455810547e+01, 2.866698265075684e+01, 2.86669807434082e+01, 1.368470293527935e-05, 1.369717392663006e-05, 1.369699566566851e-05, 1.369351775792893e-05, 1.368585253658239e-05, 1.368590346828569e-05, 1.368597804685123e-05, 1.368599714623997e-05, 1.368598896078765e-05, 1.368601897411281e-05, 1.36860653583426e-05, 8.328372132382356e-06, 8.327741852554027e-06, 2.9927001953125e+01, 2.866696548461914e+01, 2.866811943054199e+01, 2.86669921875e+01, 2.866698837280273e+01, 2.866681861877441e+01, 2.86669864654541e+01, 2.866677093505859e+01, 2.866720008850098e+01, 2.866693496704102e+01, 2.866735076904297e+01, 2.86669979095459e+01, 2.86669979095459e+01, 2.866695213317871e+01, 2.86670036315918e+01, 8.317158062709495e-06, 8.328138392244e-06, 8.32809200801421e-06, 8.328065632667858e-06, 8.328027433890384e-06, 8.328159310622141e-06, 8.327648174599744e-06, 8.328218427777756e-06] +pla.chi.mChiWatUni_flow_nominal=[4.77783088684082e+01, 4.77783088684082e+01] +pla.chiHea.mChiWatUni_flow_nominal=[4.77783088684082e+01, 4.77783088684082e+01] +pla.TChiWatSupSet=[2.791499938964844e+02, 2.791499938964844e+02] +pla.TChiWatPriRet.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.794562072753906e+02, 2.794562072753906e+02, 2.810286865234375e+02, 2.832014770507812e+02, 2.841523742675781e+02, 2.833577880859375e+02, 2.841523742675781e+02, 2.841118469238281e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.83692626953125e+02, 2.841523742675781e+02, 2.839239501953125e+02, 2.829949035644531e+02, 2.8375732421875e+02, 2.822994079589844e+02, 2.825740356445312e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.841523742675781e+02, 2.833191223144531e+02, 2.841523742675781e+02, 2.836163024902344e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841139831542969e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.841523742675781e+02, 2.836930847167969e+02, 2.841523742675781e+02, 2.839239501953125e+02, 2.829949035644531e+02, 2.837573547363281e+02, 2.822994079589844e+02, 2.825740661621094e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.82484619140625e+02, 2.823734130859375e+02, 2.82050537109375e+02, 2.817276000976562e+02, 2.814046020507812e+02, 2.810815734863281e+02, 2.807584533691406e+02, 2.804352722167969e+02, 2.801120300292969e+02, 2.797887268066406e+02, 2.794653930664062e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02, 2.794651489257812e+02] +pla.TChiWatSup.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791614685058594e+02, 2.791505432128906e+02, 2.791509704589844e+02, 2.791505737304688e+02, 2.791432189941406e+02, 2.791424255371094e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.788643493652344e+02, 2.793191833496094e+02, 2.791600646972656e+02, 2.793725280761719e+02, 2.795615234375e+02, 2.802176513671875e+02, 2.787919006347656e+02, 2.791629638671875e+02, 2.791484985351562e+02, 2.791476745605469e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02] +pla.chiHea.TEvaLvg[1]=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.980702514648438e+02, 2.949082946777344e+02, 2.898137817382812e+02, 2.879375610351562e+02, 2.86986572265625e+02, 2.881829833984375e+02, 2.8817236328125e+02, 2.881673583984375e+02, 2.881571960449219e+02, 2.792024536132812e+02, 2.791487426757812e+02, 2.791507263183594e+02, 2.791492614746094e+02, 2.791160278320312e+02, 2.791126708984375e+02, 2.886086730957031e+02, 2.881417541503906e+02, 2.881380310058594e+02, 2.881795959472656e+02, 2.880597534179688e+02, 2.877460021972656e+02, 2.859583740234375e+02, 2.879000549316406e+02, 2.88335479736328e+02, 2.878553466796875e+02, 2.87721435546875e+02, 2.872615356445312e+02, 2.879572143554688e+02, 2.880641174316406e+02, 2.881990966796875e+02, 2.91521728515625e+02, 2.889683532714844e+02, 2.882711486816406e+02, 2.800940856933594e+02, 2.810422058105469e+02, 2.818542175292969e+02, 2.772273254394531e+02, 2.792019653320312e+02, 2.791402893066406e+02, 2.791367492675781e+02, 2.88427001953125e+02, 2.881430053710938e+02, 2.881422729492188e+02, 2.881287231445312e+02, 2.880682678222656e+02, 2.878423461914062e+02, 2.858053894042969e+02, 2.879670715332031e+02, 2.883839416503906e+02, 2.878334350585938e+02, 2.877765197753906e+02, 2.872433471679688e+02, 2.879341125488281e+02, 2.88150634765625e+02, 2.881541442871094e+02, 2.881609497070312e+02, 2.881582336425781e+02, 2.881492614746094e+02, 2.881474914550781e+02, 2.881461791992188e+02, 2.882804870605469e+02, 2.913797912597656e+02, 2.916934814453125e+02, 2.919942932128903e+02, 2.882291564941406e+02, 2.882809448242188e+02, 2.882088928222656e+02, 2.882414855957031e+02, 2.882789611816406e+02, 2.882557373046875e+02, 2.881952514648438e+02, 2.877834167480469e+02, 2.869343566894531e+02, 2.928094787597656e+02, 2.888150939941406e+02, 2.872809448242188e+02, 2.872133178710938e+02, 2.881368408203125e+02, 2.88230712890625e+02, 2.881453552246094e+02, 2.881670227050781e+02, 2.878923950195312e+02, 2.880865173339844e+02, 2.882632141113281e+02, 2.881365356445312e+02, 2.881746520996094e+02, 2.881236572265625e+02, 2.882156372070312e+02, 2.896179809570312e+02, 2.883520202636719e+02, 2.883315124511719e+02, 2.883097839355469e+02, 2.883141784667969e+02, 2.883843688964844e+02, 2.881791687011719e+02, 2.881387023925781e+02] +pla.chiHea.TEvaLvg[2]=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499633789062e+02, 2.931499328613281e+02, 2.9314990234375e+02, 2.931498718261719e+02, 2.931498413085938e+02, 2.931498107910156e+02, 2.931497802734375e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.891147155761718e+02, 2.882877807617188e+02, 2.8828955078125e+02, 2.879903259277344e+02, 2.882839965820312e+02, 2.876932067871094e+02, 2.88362548828125e+02, 2.782518615722656e+02, 2.796963806152344e+02, 2.791864624023438e+02, 2.792262878417969e+02, 2.79187255859375e+02, 2.819692993164062e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.791499938964844e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.815317993164062e+02, 2.891371459960938e+02, 2.882664184570312e+02, 2.883445739746094e+02, 2.879706115722656e+02, 2.882814331054688e+02, 2.882821350097656e+02, 2.882393188476562e+02, 2.882376098632812e+02, 2.882389221191406e+02, 2.882362365722656e+02, 2.882344665527344e+02, 2.882324829101562e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.894658508300781e+02, 2.93270263671875e+02, 2.892341003417969e+02, 2.878699951171875e+02, 2.879339294433594e+02, 2.882555541992188e+02, 2.884535522460938e+02, 2.882625427246094e+02, 2.883865661621094e+02, 2.878247680664062e+02, 2.882643127441406e+02, 2.882145385742188e+02, 2.882965393066406e+02, 2.882043762207031e+02, 2.881714172363281e+02, 2.883802795410156e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02, 2.895086975097656e+02] +pla.pumChiWat.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.pumChiWat.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.pumChiWat.pum.y_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.762452602386475e-01, 8.7624591588974e-01, 8.763275146484375e-01, 8.763889074325562e-01, 8.930742740631104e-01, 8.95171582698822e-01, 9.141505360603333e-01, 8.928797841072083e-01, 9.133762717247009e-01, 9.252008199691774e-01, 9.591297507286072e-01, 9.768333435058594e-01, 9.502268433570862e-01, 9.264326095581055e-01, 9.194225668907166e-01, 9.032310247421265e-01, 8.886747360229492e-01, 8.88915479183197e-01, 8.94585132598877e-01, 8.948162198066711e-01, 8.760800361633301e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.810328245162964e-01, 8.952909111976624e-01, 9.09209728240967e-01, 9.537529945373532e-01, 8.960780501365662e-01, 9.194098711013794e-01, 9.206035733222961e-01, 9.430860280990601e-01, 9.735167026519775e-01, 9.781360030174255e-01, 9.502295255661011e-01, 9.264324903488159e-01, 9.1942298412323e-01, 9.032310247421265e-01, 8.886745572090149e-01, 8.88915479183197e-01, 8.945849537849426e-01, 8.948162794113159e-01, 8.760804533958435e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.7624591588974e-01, 8.762296438217163e-01, 8.76230776309967e-01, 8.76231849193573e-01, 8.762326836585999e-01, 8.762333989143372e-01, 8.762340545654297e-01, 8.762345910072327e-01, 8.762350082397461e-01, 8.762354254722595e-01, 8.762358427047729e-01, -0e+00, 0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00] +pla.dpChiWatSet=[2e+05, 2e+05] +pla.dpChiWat.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.99999625e+05, 2e+05, 2.00000421875e+05, 1.99995109375e+05, 1.98879140625e+05, 1.99997140625e+05, 1.98036875e+05, 2.01699875e+05, 1.990456875e+05, 1.99030046875e+05, 1.98711640625e+05, 2.00943984375e+05, 2.0089165625e+05, 2.00756234375e+05, 1.9998934375e+05, 2.00644953125e+05, 1.99969703125e+05, 1.99997875e+05, 1.99980578125e+05, 1.999975625e+05, 1.9999415625e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 1.9872025e+05, 2.00032625e+05, 1.98633796875e+05, 1.973309218749999e+05, 1.9937871875e+05, 1.99137890625e+05, 1.9994225e+05, 1.989388125e+05, 1.9885328125e+05, 2.01680203125e+05, 2.00893375e+05, 2.00756234375e+05, 1.99989375e+05, 2.00644953125e+05, 1.99969609375e+05, 1.99997859375e+05, 1.99980125e+05, 1.99997546875e+05, 1.99993359375e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2.0000003125e+05, 1.99999953125e+05, 1.9999996875e+05, 1.9999996875e+05, 1.99999984375e+05, 1.99999984375e+05, 1.99999984375e+05, 1.99999984375e+05, 1.99999984375e+05, 1.999999375e+05, -1.236919342773035e-04, -1.236826210515574e-04, -2.322487998753786e-04, -3.411495999898762e-04, -3.405504394322634e-04, -3.411802463233471e-04, -3.395637904759496e-04, -3.401630092412233e-04, -3.397307591512799e-04, -3.402839647606015e-04, -3.387905890122056e-04, -3.401500871405005e-04, -3.392777871340513e-04, -3.402021247893572e-04, -3.396177780814469e-04, -3.396099782548845e-04, -3.403211012482643e-04, -1.235254312632605e-04, -1.236884709214792e-04, -1.236878451891243e-04, -1.236874086316675e-04, -1.236868993146345e-04, -1.236888638231903e-04, -1.236811804119498e-04, -1.23689736938104e-04] +pla.pumChiWat.pum.dpMachine=[1.530441753942852e-21, 7.666708790458689e-24, 7.666708790458689e-24, 7.666708790458689e-24, 7.666708790458689e-24, 2.36484578125e+05, 2.36484953125e+05, 2.3652353125e+05, 2.36551828125e+05, 2.4426515625e+05, 2.38172515625e+05, 2.43334140625e+05, 2.4168109375e+05, 2.48929296875e+05, 2.49038e+05, 2.5990503125e+05, 2.6663821875e+05, 2.58062125e+05, 2.5021634375e+05, 2.47575171875e+05, 2.45538984375e+05, 2.3950325e+05, 2.3960921875e+05, 2.3797375e+05, 2.380565e+05, 2.3640584375e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.385684375e+05, 2.3822646875e+05, 2.420892343750001e+05, 2.442232187499998e+05, 2.42331921875e+05, 2.52196859375e+05, 2.47944484375e+05, 2.5560053125e+05, 2.668634375e+05, 2.67468875e+05, 2.5806375e+05, 2.5021628125e+05, 2.4757528125e+05, 2.45538984375e+05, 2.39503140625e+05, 2.3960921875e+05, 2.379735e+05, 2.38056515625e+05, 2.3640590625e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36484953125e+05, 2.36477265625e+05, 2.364778125e+05, 2.364783125e+05, 2.3647871875e+05, 2.36479046875e+05, 2.3647934375e+05, 2.3647959375e+05, 2.364798125e+05, 2.3648e+05, 2.36480171875e+05, 2.532228563723038e-06, 2.532038024583017e-06, 4.754611381940776e-06, 6.984034826018615e-06, 6.971768925723154e-06, 6.984661922615487e-06, 6.951569503144128e-06, 6.963837222428992e-06, 6.954987384233391e-06, 6.966313321754569e-06, 6.935741112101823e-06, 6.963572559470776e-06, 6.945714631001465e-06, 6.964637577766553e-06, 6.952674993954133e-06, 6.952515377633972e-06, 6.9670732045779e-06, 2.528820004954468e-06, 2.532157850509975e-06, 2.532144890210475e-06, 2.532135795263457e-06, 2.532125563448062e-06, 2.53216558121494e-06, 2.532008466005209e-06, 2.5321835437353e-06] +pla.pumChiWat.dpPum_nominal=[2.783e+05, 2.783e+05] +pla.mChiWatPri_flow.m_flow=[-5.022831318703783e-21, -2.516174409120096e-23, -2.516174409120096e-23, -2.516174409120096e-23, -2.516174409120096e-23, 3.153368759155273e+01, 3.15336856842041e+01, 3.156808853149414e+01, 3.159838485717773e+01, 3.955874252319336e+01, 6.316605377197266e+01, 7.371997833251953e+01, 9.990016937255859e+01, 1.245700912475586e+02, 1.498866424560547e+02, 1.751312561035156e+02, 1.845388488769531e+02, 1.665297241210937e+02, 1.484845733642578e+02, 1.436594696044922e+02, 1.122901382446289e+02, 9.876235198974609e+01, 9.896018218994141e+01, 6.287529373168945e+01, 6.298038482666016e+01, 3.146763229370117e+01, 3.15336856842041e+01, 3.15336856842041e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.456624984741211e+01, 6.319543075561523e+01, 7.105941009521491e+01, 9.922850799560543e+01, 1.074196395874023e+02, 1.255410690307617e+02, 1.447372741699219e+02, 1.616809692382812e+02, 1.796982269287109e+02, 1.845458831787109e+02, 1.665297393798828e+02, 1.484845733642578e+02, 1.436598510742188e+02, 1.122901382446289e+02, 9.876228332519531e+01, 9.896017456054688e+01, 6.287562942504883e+01, 6.298042297363281e+01, 3.146841049194336e+01, 3.15336856842041e+01, 3.15336856842041e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.153367614746094e+01, 3.15336856842041e+01, 3.152672386169434e+01, 3.152727890014648e+01, 3.152771949768066e+01, 3.152807998657227e+01, 3.152838134765625e+01, 3.152863883972168e+01, 3.152886199951172e+01, 3.15290584564209e+01, 3.152923202514648e+01, 3.152943801879883e+01, -8.310644261655398e-06, -8.310018529300578e-06, -1.56043897732161e-05, -2.292124372615945e-05, -2.288098767166957e-05, -2.292330282216426e-05, -2.281469642184675e-05, -2.285495611431543e-05, -2.282591231050901e-05, -2.286308335897047e-05, -2.276274790347088e-05, -2.285408845636994e-05, -2.279547879879829e-05, -2.285758273501415e-05, -2.281832166772801e-05, -2.28177996177692e-05, -2.286557719344273e-05, -8.299457476823591e-06, -8.310412340506446e-06, -8.310369594255462e-06, -8.310340490425006e-06, -8.310305929626338e-06, -8.310437806358095e-06, -8.30992212286219e-06, -8.31049692351371e-06] +pla.mChiWat_flow_nominal=[1.911132354736328e+02, 1.911132354736328e+02] +pla.mChiWatChi_flow_min=[2.866698455810547e+01, 2.866698455810547e+01] +pla.chiHea.chi[1].m1_flow=[-2.039138435132293e-15, 4.749422276860865e-24, 4.749422276860865e-24, 4.749422276860865e-24, 4.749422276860865e-24, 2.207358551025391e+01, 2.207357788085938e+01, 2.207846641540527e+01, 2.207867050170898e+01, 2.207890319824219e+01, 2.207917022705078e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.207589149475098e+01, 2.207368659973145e+01, 2.207348823547363e+01, 2.20733699798584e+01, 2.207122993469238e+01, 2.207113265991211e+01, 2.207357978820801e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.207357788085938e+01, 2.213013648986816e+01, 2.643255615234375e+01, 2.361309814453125e+01, 2.373764610290527e+01, 2.850639915466309e+01, 3.354237747192383e+01, 3.29140625e+01, 3.030138206481934e+01, 2.769397354125975e+01, 2.509216117858888e+01, 2.351224899291992e+01, 2.340240669250488e+01, 2.335693168640137e+01, 2.327657127380371e+01, 2.355109786987305e+01, 2.700171089172363e+01, 2.206911087036133e+01, 2.206149864196777e+01, 2.206332969665527e+01, 2.206649971008301e+01, 2.206708145141602e+01, 2.206753921508789e+01, 2.206791114807129e+01, 2.206822204589844e+01, 2.206856727600098e+01, 2.213013648986816e+01, 2.643255615234375e+01, 2.361309814453125e+01, 2.373764038085938e+01, 2.850639915466313e+01, 3.354237747192387e+01, 3.291406250000002e+01, 3.03013801574707e+01, 2.769397354125977e+01, 2.50921630859375e+01, 2.351271438598633e+01, 2.354014778137207e+01, 2.354702568054199e+01, 2.355053520202637e+01, 2.382914543151855e+01, 2.205352210998535e+01, 2.20594310760498e+01, 2.206202697753906e+01, 2.206357192993164e+01, 2.206462478637695e+01, 2.206540107727051e+01, 2.206600379943848e+01, 2.206648826599121e+01, 2.206689071655273e+01, 2.206729125976562e+01, 2.211768531799316e+01, 2.226992034912109e+01, 2.205961608886719e+01, 2.366284370422363e+01, 2.780328559875488e+01, 3.339694213867188e+01, 3.34675178527832e+01, 3.160004615783691e+01, 2.973518753051758e+01, 2.787305450439453e+01, 2.601375579833984e+01, 2.415743827819824e+01, 2.353303909301758e+01, 2.354668617248535e+01, 2.355139541625977e+01, 2.355398941040039e+01, 2.355568695068359e+01, 2.558557891845703e+01, 2.204386711120605e+01, 2.204757499694824e+01, 2.205526542663574e+01, 2.205862426757812e+01, 2.206062698364258e+01, 2.206198883056641e+01, 2.206310272216797e+01] +pla.chiHea.chi[2].m1_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.757502084539738e-06, 9.759934073372278e-06, 9.759087333804928e-06, 9.694851542008109e-06, 9.770288670551963e-06, 9.78167008724995e-06, 9.754720849741716e-06, 3.161335372924805e+01, 3.175246810913086e+01, 3.139311027526855e+01, 3.143846130371094e+01, 3.143840217590332e+01, 3.144143104553223e+01, 3.147501564025879e+01, 3.152654647827148e+01, 3.196910858154297e+01, 3.178023147583008e+01, 3.178703689575195e+01, 9.758017768035643e-06, 9.767149094841443e-06, 9.759335625858512e-06, 9.936053174897097e-06, 1.052480547514278e-05, 2.211318969726562e+01, 2.222501945495605e+01, 2.647458839416504e+01, 3.089760398864746e+01, 3.03492259979248e+01, 2.805845642089844e+01, 2.575495147705077e+01, 2.34383945465088e+01, 2.202260589599609e+01, 2.204872512817383e+01, 2.205648994445801e+01, 2.205750465393066e+01, 2.21004753112793e+01, 3.042951774597168e+01, 3.171757698059082e+01, 3.166977882385254e+01, 3.168922805786133e+01, 3.179216575622559e+01, 3.177423858642578e+01, 3.177775764465332e+01, 9.760638931766152e-06, 9.763795787876006e-06, 9.75798047875287e-06, 9.931070962920785e-06, 1.051248455041787e-05, 2.211318969726562e+01, 2.222501373291016e+01, 2.647458839416508e+01, 3.08976039886475e+01, 3.034922599792482e+01, 2.805845642089844e+01, 2.575495147705078e+01, 2.343839454650879e+01, 2.202302551269531e+01, 2.204766845703125e+01, 2.205384826660156e+01, 2.205699920654297e+01, 1.007380069495412e-05, 9.649819730839226e-06, 9.63903858064441e-06, 9.732445505505895e-06, 9.756425242812838e-06, 9.756611689226702e-06, 9.756746294442564e-06, 9.756844519870356e-06, 9.756920007930603e-06, 9.756981853570323e-06, 9.757061889104079e-06, 3.858956915792078e-06, 3.888924766215496e-06, 2.071463203430176e+01, 2.215786170959473e+01, 2.585187721252441e+01, 3.077075576782227e+01, 3.083231925964355e+01, 2.919924545288086e+01, 2.755975341796875e+01, 2.591372871398926e+01, 2.426104736328125e+01, 2.260161781311035e+01, 2.204128265380859e+01, 2.205354118347168e+01, 2.205776977539062e+01, 2.206009864807129e+01, 2.206162643432617e+01, 1.034669458022108e-05, 3.848540472972672e-06, 3.848143478535349e-06, 3.848688720609061e-06, 3.848627329716692e-06, 9.735386811371427e-06, 3.848497271974338e-06, 3.848684173135553e-06] +pla.chiHea.mConWatUni_flow_nominal=[3.344481658935547e+01, 3.344481658935547e+01] +pla.THeaWatSupSet=[3.331499938964844e+02, 3.331499938964844e+02] +pla.THeaWatPriRet.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.328437805175781e+02, 3.328437805175781e+02, 3.323119201660156e+02, 3.315849914550781e+02, 3.308583984375e+02, 3.301322021484375e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.291762084960938e+02, 3.290922241210938e+02, 3.290932006835938e+02, 3.291015014648438e+02, 3.291634216308594e+02, 3.292873840332031e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.298153686523438e+02, 3.255650329589844e+02, 3.231452331542969e+02, 3.252863464355469e+02, 3.232544555664062e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.235645141601562e+02, 3.243984680175781e+02, 3.254237670898438e+02, 3.264270324707031e+02, 3.278829650878906e+02, 3.231452331542969e+02, 3.241720886230469e+02, 3.248133239746094e+02, 3.25586181640625e+02, 3.265776672363281e+02, 3.272221984863281e+02, 3.27866943359375e+02, 3.285119323730469e+02, 3.291571350097656e+02, 3.298025817871094e+02, 3.255650329589844e+02, 3.231452331542969e+02, 3.252863464355469e+02, 3.232544555664062e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.235642395019531e+02, 3.246583862304688e+02, 3.257447814941406e+02, 3.26831298828125e+02, 3.231452331542969e+02, 3.241122131347656e+02, 3.250800476074219e+02, 3.260469055175781e+02, 3.270138549804688e+02, 3.279811706542969e+02, 3.28948974609375e+02, 3.299172973632812e+02, 3.308861694335938e+02, 3.318556213378906e+02, 3.328256530761719e+02, 3.281010437011719e+02, 3.233450317382812e+02, 3.255465087890625e+02, 3.237470703125e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.231452331542969e+02, 3.236544189453125e+02, 3.24432861328125e+02, 3.252082824707031e+02, 3.259835815429688e+02, 3.267593078613281e+02, 3.231452331542969e+02, 3.23145263671875e+02, 3.247416381835938e+02, 3.263549194335938e+02, 3.279677734375e+02, 3.295816040039062e+02, 3.311968383789062e+02, 3.328135681152344e+02] +pla.THeaWatSup.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.253816223144531e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331332092285156e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02] +pla.chiHea.TConLvg[1]=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.255688781738281e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02] +pla.chiHea.TConLvg[2]=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.953133239746094e+02, 2.963571166992188e+02, 2.966376647949219e+02, 2.985224609375e+02, 2.990752563476562e+02, 2.9780224609375e+02, 2.966233520507812e+02, 2.955336608886719e+02, 2.953233032226562e+02, 2.942207946777344e+02, 2.929176025390625e+02, 2.8963037109375e+02, 2.8963037109375e+02, 2.8963037109375e+02, 2.8963037109375e+02, 2.8963037109375e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 2.987344360351562e+02, 2.990431823730469e+02, 2.974458312988281e+02, 2.962783508300781e+02, 2.954779052734375e+02, 2.941463317871094e+02, 2.92841796875e+02, 2.895586242675781e+02, 2.895586242675781e+02, 2.895586242675781e+02, 2.895586242675781e+02, 2.895586242675781e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.294312133789062e+02, 3.294312133789062e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.294312438964844e+02, 3.331311950683594e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02, 3.293644409179688e+02] +pla.pumHeaWat.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pla.pumHeaWat.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.pumHeaWat.pum.y_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.980683088302612e-01, 8.980706930160522e-01, 8.980986475944519e-01, 8.980998396873474e-01, 8.981011509895325e-01, 8.981026411056519e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.897292613983154e-01, 8.887561559677124e-01, 8.887574672698975e-01, 8.888305425643921e-01, 8.893281817436218e-01, 8.905383348464966e-01, 8.980703353881836e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.980706930160522e-01, 8.983805179595947e-01, 9.220739006996155e-01, 9.104737043380737e-01, 9.102983474731445e-01, 9.406787753105164e-01, 9.793209433555603e-01, 9.775948524475098e-01, 9.571471214294434e-01, 9.380156993865966e-01, 9.202144145965577e-01, 9.090281128883362e-01, 9.066357612609863e-01, 9.05687689781189e-01, 9.041091203689575e-01, 9.230051040649414e-01, 9.024673700332642e-01, 8.948719501495361e-01, 8.945878148078918e-01, 8.952174186706543e-01, 8.980297446250916e-01, 8.980332612991333e-01, 8.980359435081482e-01, 8.980380892753601e-01, 8.980399370193481e-01, 8.980414867401123e-01, 8.983805179595947e-01, 9.220739006996155e-01, 9.104731678962708e-01, 9.102984666824341e-01, 9.406786561012271e-01, 9.793209433555606e-01, 9.7759485244751e-01, 9.571471810340881e-01, 9.380156993865967e-01, 9.202144145965576e-01, 9.090264439582825e-01, 9.092534780502319e-01, 9.092983603477478e-01, 9.093207716941833e-01, 9.105029702186584e-01, 8.979494571685791e-01, 8.979883193969727e-01, 8.980038166046143e-01, 8.980129361152649e-01, 8.980190753936768e-01, 8.980236053466797e-01, 8.980271220207214e-01, 8.980299234390259e-01, 8.980322480201721e-01, 8.980342745780945e-01, 8.983170390129089e-01, 8.98944079875946e-01, 9.975088238716125e-01, 9.099718332290649e-01, 9.354426264762878e-01, 9.778932332992554e-01, 9.817559123039246e-01, 9.668290615081787e-01, 9.525669813156128e-01, 9.38980758190155e-01, 9.260746836662292e-01, 9.138460159301758e-01, 9.09199059009552e-01, 9.09295380115509e-01, 9.09325897693634e-01, 9.093424081802368e-01, 9.093530774116516e-01, 9.210982918739319e-01, 8.991605043411255e-01, 8.979164958000183e-01, 8.979641199111938e-01, 8.979841470718384e-01, 8.979959487915039e-01, 8.980039358139038e-01, 8.980098366737366e-01] +pla.dpHeaWatSet=[2e+05, 2e+05] +pla.dpHeaWat.p_rel=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.99998625e+05, 2e+05, 1.99999953125e+05, 1.99999953125e+05, 1.99999953125e+05, 1.999999375e+05, 2.00000015625e+05, 2e+05, 2e+05, 2.00123703125e+05, 2.00000984375e+05, 1.9999675e+05, 1.99996984375e+05, 1.999608125e+05, 1.9995525e+05, 1.999998125e+05, 2e+05, 2e+05, 2e+05, 2e+05, 2e+05, 1.99991609375e+05, 1.97759609375e+05, 2.004395625e+05, 1.99894125e+05, 1.98747328125e+05, 1.98575703125e+05, 2.00733078125e+05, 2.00687984375e+05, 2.00641890625e+05, 2.00595796875e+05, 1.99966875e+05, 2.00042578125e+05, 2.000618125e+05, 2.000359375e+05, 2.08272875e+05, 1.9734778125e+05, 2.0000859375e+05, 1.9998028125e+05, 1.99975625e+05, 1.99999796875e+05, 1.99999890625e+05, 1.99999921875e+05, 1.999999375e+05, 1.999999375e+05, 1.99999734375e+05, 1.99991609375e+05, 1.97759609375e+05, 2.0043925e+05, 1.99894234375e+05, 1.98747265625e+05, 1.98575703125e+05, 2.00733078125e+05, 2.0068803125e+05, 2.00641890625e+05, 2.00595796875e+05, 1.99964265625e+05, 1.99997546875e+05, 1.99998953125e+05, 1.99999390625e+05, 2.010529375e+05, 1.9999640625e+05, 1.9999925e+05, 1.99999609375e+05, 1.9999975e+05, 1.999998125e+05, 1.99999859375e+05, 1.99999890625e+05, 1.9999990625e+05, 1.99999921875e+05, 1.99999765625e+05, 1.99996171875e+05, 1.99853765625e+05, 1.8632303125e+05, 1.9997403125e+05, 1.98636390625e+05, 1.98423671875e+05, 2.00529921875e+05, 2.005071875e+05, 2.00483875e+05, 2.00460296875e+05, 2.004366875e+05, 2.00412828125e+05, 1.99991453125e+05, 1.99998421875e+05, 1.9999925e+05, 1.99999546875e+05, 1.999996875e+05, 2.0057909375e+05, 2.00713359375e+05, 1.99997e+05, 1.99999015625e+05, 1.999995e+05, 1.99999671875e+05, 1.99999765625e+05, 1.99999515625e+05] +pla.pumHeaWat.pum.dpMachine=[1.775198310086643e-15, -4.134670862031183e-24, -4.134670862031183e-24, -4.134670862031183e-24, -4.134670862031183e-24, 2.398545e+05, 2.39855859375e+05, 2.3986534375e+05, 2.39865734375e+05, 2.398661875e+05, 2.39866703125e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39044671875e+05, 2.3883796875e+05, 2.38834453125e+05, 2.3884240625e+05, 2.38864140625e+05, 2.38989015625e+05, 2.3985565625e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39855859375e+05, 2.39957875e+05, 2.46811390625e+05, 2.45875625e+05, 2.45611140625e+05, 2.55831e+05, 2.6844190625e+05, 2.6896196875e+05, 2.6223825e+05, 2.5573675e+05, 2.49459734375e+05, 2.45176890625e+05, 2.4467103125e+05, 2.44465203125e+05, 2.44080546875e+05, 2.5344909375e+05, 2.445920625e+05, 2.3949371875e+05, 2.3943009375e+05, 2.3949759375e+05, 2.3984184375e+05, 2.39843078125e+05, 2.39844e+05, 2.39844734375e+05, 2.39845359375e+05, 2.398458125e+05, 2.39957875e+05, 2.46811390625e+05, 2.45875328125e+05, 2.45611234375e+05, 2.558309375000001e+05, 2.684419062500001e+05, 2.689619687500001e+05, 2.6223828125e+05, 2.5573675e+05, 2.49459734375e+05, 2.451753125e+05, 2.4526996875e+05, 2.4528678125e+05, 2.45295078125e+05, 2.44497015625e+05, 2.39813171875e+05, 2.3982753125e+05, 2.398329375e+05, 2.3983609375e+05, 2.3983821875e+05, 2.3983978125e+05, 2.39840984375e+05, 2.39841953125e+05, 2.3984275e+05, 2.39843375e+05, 2.39938109375e+05, 2.40094125e+05, 2.40460375e+05, 2.4552209375e+05, 2.5399765625e+05, 2.679098125e+05, 2.7020040625e+05, 2.653509375e+05, 2.60614484375e+05, 2.5599178125e+05, 2.5148353125e+05, 2.47091046875e+05, 2.4524796875e+05, 2.452855e+05, 2.45296875e+05, 2.4530296875e+05, 2.45306921875e+05, 2.47787875e+05, 2.405113125e+05, 2.398021875e+05, 2.398191875e+05, 2.39826203125e+05, 2.3983028125e+05, 2.3983303125e+05, 2.39834953125e+05] +pla.pumHeaWat.dpPum_nominal=[2.783e+05, 2.783e+05] +pla.mHeaWatPri_flow.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.207358741760254e+01, 2.207357978820801e+01, 2.207846832275391e+01, 2.207867240905762e+01, 2.207890510559082e+01, 2.207917213439941e+01, 2.207357978820801e+01, 2.207357406616211e+01, 2.207357406616211e+01, 1.851713752746582e+01, 1.813945770263672e+01, 1.814436912536621e+01, 1.818189430236816e+01, 1.846994972229004e+01, 1.906264114379883e+01, 2.207357406616211e+01, 2.207357406616211e+01, 2.207357406616211e+01, 2.207357978820801e+01, 2.207357978820801e+01, 2.207357978820801e+01, 2.21301383972168e+01, 2.643255996704102e+01, 4.572628021240234e+01, 4.59626579284668e+01, 5.498098373413086e+01, 6.443997955322266e+01, 6.326328659057617e+01, 5.835983276367188e+01, 5.344892120361326e+01, 4.853055191040041e+01, 4.553484725952148e+01, 4.423139190673828e+01, 4.370270538330078e+01, 4.286456298828125e+01, 4.523873901367188e+01, 2.015219306945801e+01, 2.089242172241211e+01, 2.080857467651367e+01, 2.105655860900879e+01, 2.206649398803711e+01, 2.206707572937012e+01, 2.206753349304199e+01, 2.206791305541992e+01, 2.206822204589844e+01, 2.206856918334961e+01, 2.21301383972168e+01, 2.643255996704102e+01, 4.572628402709961e+01, 4.5962646484375e+01, 5.498098373413094e+01, 6.443997955322274e+01, 6.326328659057621e+01, 5.835983657836914e+01, 5.344892120361328e+01, 4.853055191040039e+01, 4.553573226928711e+01, 4.558781051635742e+01, 4.560086822509766e+01, 4.560752868652344e+01, 2.382914733886719e+01, 2.205352401733398e+01, 2.205943298339844e+01, 2.20620288848877e+01, 2.206357383728027e+01, 2.206462669372559e+01, 2.206540107727051e+01, 2.206600570678711e+01, 2.206649017333984e+01, 2.206689262390137e+01, 2.206729316711426e+01, 2.21176929473877e+01, 2.226992797851562e+01, 4.277423858642578e+01, 4.582069778442383e+01, 5.365517807006836e+01, 6.416769409179688e+01, 6.429983520507812e+01, 6.079928970336914e+01, 5.729493713378906e+01, 5.378678131103516e+01, 5.027481842041016e+01, 4.675904846191406e+01, 4.557433319091797e+01, 4.56002197265625e+01, 4.560917663574219e+01, 4.561409759521484e+01, 4.561730575561523e+01, 2.558558082580566e+01, 2.204387474060059e+01, 2.204758262634277e+01, 2.205527305603027e+01, 2.205863189697266e+01, 2.206062889099121e+01, 2.206199645996094e+01, 2.20631103515625e+01] +pla.mHeaWat_flow_nominal=[6.688963317871094e+01, 6.688963317871094e+01] +pla.mHeaWatChiHea_flow_min=[2.00668888092041e+01, 2.00668888092041e+01] +pla.pumConWatCon.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +pla.pumConWatCon.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +pla.pumConWatCon.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.577261328697205e-01, 7.360697388648987e-01, 7.359670996665955e-01, 7.5298672914505e-01, 7.681975364685059e-01, 7.950292229652405e-01, 7.955337762832642e-01, 8.8079833984375e-01, 8.802565932273865e-01, 9.001981616020203e-01, 9.015806913375854e-01, 9.015183448791504e-01, 9.013949632644653e-01, 9.006322026252747e-01, 8.988242149353027e-01, 8.831190466880798e-01, 8.774276375770569e-01, 8.742570281028748e-01, 7.919747829437256e-01, 7.860056161880493e-01, 7.592499256134033e-01, 7.500128149986267e-01, 7.553336620330811e-01, 7.564007043838498e-01, 7.356282472610474e-01, 7.352985739707947e-01, 7.567373514175415e-01, 7.570471167564392e-01, 7.773165106773376e-01, 7.577016353607178e-01, 7.963535189628598e-01, 7.735062837600708e-01, 7.864512205123901e-01, 8.107621073722839e-01, 8.121105432510376e-01, 8.093990683555603e-01, 9.006643295288086e-01, 8.963047862052917e-01, 8.935304880142212e-01, 8.927340507507324e-01, 8.671006560325623e-01, 8.65449845790863e-01, 8.63702654838562e-01, 7.873183488845825e-01, 7.828944325447083e-01, 7.590821981430054e-01, 7.505740523338318e-01, 7.539626955986023e-01, 7.571797370910645e-01, 7.356500029563904e-01, 7.353554964065552e-01, 7.567392587661743e-01, 7.570516467094421e-01, 7.570716738700867e-01, 7.57077693939209e-01, 7.570958733558655e-01, 7.571285367012024e-01, 7.5717693567276e-01, 7.572414875030518e-01, 7.573233246803284e-01, 7.57330596446991e-01, 7.438367009162903e-01, 7.431705594062805e-01, 7.394607067108154e-01, 7.358633279800415e-01, 7.358644008636475e-01, 7.358701825141907e-01, 7.35877513885498e-01, 7.358956933021545e-01, 7.359272241592407e-01, 7.359574437141418e-01, 0e+00, 0e+00, 7.756808996200562e-01, 7.711841464042664e-01, 0e+00, 7.55353569984436e-01, 7.563304305076599e-01, 7.560664415359497e-01, 7.577140331268311e-01, 7.569268941879272e-01, 0e+00, 7.573548555374146e-01, 0e+00, 7.606266140937805e-01, 0e+00, 0e+00, 7.60455846786499e-01, 7.746562957763672e-01, 0e+00, 0e+00, 0e+00, 0e+00, 7.622043490409851e-01, 0e+00, 0e+00] +pla.chiHea.m3_flow_nominal=[6.688963317871094e+01, 6.688963317871094e+01] +pla.pumConWatEva.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pla.pumConWatEva.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pla.pumConWatEva.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.428766369819641e-01, 9.428878426551819e-01, 9.428878426551819e-01, 9.428054690361023e-01, 9.42693829536438e-01, 9.420863389968872e-01, 9.422109127044678e-01, 9.423967003822327e-01, 9.424384236335754e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.423782229423523e-01, 9.423221349716187e-01, 9.421922564506531e-01, 9.420411586761475e-01, 9.41754162311554e-01, 9.417701363563538e-01, 9.577470421791077e-01, 9.423801898956299e-01, 9.509403109550475e-01, 9.457456469535828e-01, 9.45534348487854e-01, 9.452210664749146e-01, 9.466878175735474e-01, 9.492557048797607e-01, 9.470258951187134e-01, 9.255602359771732e-01, 9.414373636245728e-01, 9.416782855987549e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.417197108268738e-01, 9.418686032295227e-01, 9.41813588142395e-01, 9.4181227684021e-01, 9.416298866271973e-01, 9.417521357536316e-01, 9.574823379516602e-01, 9.423902034759521e-01, 9.509352445602417e-01, 9.45767879486084e-01, 9.455418586730957e-01, 9.4524085521698e-01, 9.465999007225037e-01, 9.478768110275269e-01, 9.481390118598938e-01, 9.481756091117859e-01, 9.481757879257202e-01, 9.483036994934082e-01, 9.485011100769043e-01, 9.487309455871582e-01, 9.422752261161804e-01, 9.429923295974731e-01, 9.430282711982727e-01, 9.430562257766724e-01, 9.425408244132996e-01, 9.425632357597351e-01, 9.426276683807373e-01, 9.42663848400116e-01, 9.427258372306824e-01, 9.428050518035889e-01, 9.428896903991699e-01, 9.427130222320557e-01, 9.425369501113892e-01, 1e+00, 9.449647068977356e-01, 9.452947378158569e-01, 9.445936679840088e-01, 9.472528696060181e-01, 9.469555020332336e-01, 9.471368193626404e-01, 9.467617273330688e-01, 9.487934112548828e-01, 9.466023445129395e-01, 9.490966200828552e-01, 9.467898011207581e-01, 9.488988518714905e-01, 9.48814868927002e-01, 9.473341703414917e-01, 9.411236047744751e-01, 9.425560235977173e-01, 9.425692558288574e-01, 9.426068663597107e-01, 9.426646828651428e-01, 9.42578911781311e-01, 9.428328275680542e-01, 9.428886771202087e-01] +pla.chiHea.m2_flow_nominal=[9.555661773681641e+01, 9.555661773681641e+01] +pla.heaPum.y1[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +pla.heaPum.y1[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00] +pla.ctl.THeaPumSet=[3.011499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 2.911499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02] +pla.TConWatHeaPumEnt.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.957699890136719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.955287780761719e+02, 2.969348449707031e+02, 2.961722717285156e+02, 2.961723937988281e+02, 2.961723937988281e+02, 2.942275085449219e+02, 2.958105773925781e+02, 2.91706298828125e+02, 2.948726501464844e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.968368225097656e+02, 2.967917175292969e+02, 2.96395263671875e+02, 2.96614990234375e+02, 2.96614990234375e+02, 2.941993713378906e+02, 2.944074096679688e+02, 2.945031127929688e+02, 2.944891662597656e+02, 2.945004577636719e+02, 2.945606689453125e+02, 2.947795715332031e+02, 2.953776550292969e+02, 2.965814514160156e+02, 2.976950378417969e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.975814819335938e+02, 2.961425170898438e+02, 2.939664916992188e+02, 2.900287780761719e+02, 2.916808166503906e+02, 2.892198791503906e+02, 2.901113586425781e+02, 2.893324890136719e+02, 2.908895263671875e+02, 2.899878845214844e+02, 2.919930725097656e+02, 2.90581298828125e+02, 2.928096923828125e+02, 2.920724487304688e+02, 2.935488586425781e+02, 2.935488586425781e+02, 2.898004760742188e+02, 2.945281372070312e+02, 2.948786315917969e+02, 2.948786315917969e+02, 2.948786315917969e+02, 2.948786315917969e+02, 2.921709289550781e+02, 2.964485473632812e+02, 2.964485473632812e+02] +pla.TConWatHeaPumLvg.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.011499938964844e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.005851440429688e+02, 3.011499938964844e+02, 3.006492004394531e+02, 3.006491394042969e+02, 3.006491394042969e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.006872863769531e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.006982727050781e+02, 3.006982727050781e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.009898986816406e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.007890319824219e+02, 3.006436767578125e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.001508483886719e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.0018017578125e+02, 3.011499938964844e+02, 3.002655639648438e+02, 3.011499938964844e+02, 3.003421936035156e+02, 3.003421936035156e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.004826354980469e+02, 3.004826354980469e+02, 3.004826354980469e+02, 3.004826354980469e+02, 3.011499938964844e+02, 3.006419982910156e+02, 3.006419982910156e+02] +pla.heaPum.heaPum.m1_flow=[-0e+00, -0e+00, -0e+00, -0e+00, -0e+00, 2.38891544342041e+01, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, -6.098883876225203e-14, 2.38891544342041e+01, 2.592273631306691e-07, 3.689493236749483e-14, 3.689493236749483e-14, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, -1.282432022582007e-14, 2.38891544342041e+01, 2.38891544342041e+01, -1.439752383611791e-14, -1.439752383611791e-14, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 1.360180568695068e+01, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, -3.202175869842887e-15, 6.994577849859726e-16, 2.38891544342041e+01, 2.38891544342041e+01, 1.9840445746825e-14, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, 2.38891544342041e+01, -8.534980109275135e-15, 2.38891544342041e+01, -7.541943415276253e-14, 2.38891544342041e+01, 5.6718915181957e-14, 5.6718915181957e-14, 2.38891544342041e+01, 2.38891544342041e+01, 2.199116743198913e-14, 2.199116743198913e-14, 2.199116743198913e-14, 2.199116743198913e-14, 2.38891544342041e+01, 6.844707228304339e-14, 6.844707228304339e-14] +pla.heaPum.heaPum.m1_flow_nominal=[2.38891544342041e+01, 2.38891544342041e+01] +pla.TTan[1].T=[2.931499938964844e+02, 2.931405944824219e+02, 2.931329345703125e+02, 2.931255493164062e+02, 2.931180419921875e+02, 3.001508483886719e+02, 2.992264709472656e+02, 2.980367126464844e+02, 2.99302490234375e+02, 2.992852478027344e+02, 2.992657165527344e+02, 2.992471923828125e+02, 2.992291564941406e+02, 2.992116088867188e+02, 2.991950073242188e+02, 2.991794128417969e+02, 2.991665649414062e+02, 2.991540832519531e+02, 2.991389465332031e+02, 2.991230163574219e+02, 2.99106689453125e+02, 2.9908984375e+02, 2.990717163085938e+02, 2.990537719726562e+02, 2.990350952148438e+02, 2.990153198242188e+02, 2.989859313964844e+02, 2.999911499023438e+02, 3.009213256835938e+02, 2.999102478027344e+02, 2.9842431640625e+02, 2.971414794921875e+02, 2.964697875976562e+02, 2.975790710449219e+02, 2.990762634277344e+02, 2.992501831054688e+02, 2.991380004882812e+02, 2.991299438476562e+02, 2.991219482421875e+02, 2.991139831542969e+02, 2.991059875488281e+02, 2.990972290039062e+02, 2.990885009765625e+02, 2.990788879394531e+02, 2.990686950683594e+02, 2.990590515136719e+02, 2.99049560546875e+02, 2.990391540527344e+02, 2.990280456542969e+02, 2.990169067382812e+02, 2.990058288574219e+02, 2.989948425292969e+02, 2.999013671875e+02, 3.009072875976562e+02, 3.003038330078125e+02, 2.990819702148438e+02, 2.980354309082031e+02, 2.974808044433594e+02, 2.97120849609375e+02, 2.974457702636719e+02, 2.988701477050781e+02, 3.001775207519531e+02, 3.008587951660156e+02, 3.010857238769531e+02, 3.011359558105469e+02, 3.01142822265625e+02, 3.010411376953125e+02, 3.009893493652344e+02, 3.008544616699219e+02, 3.006435241699219e+02, 3.006125793457031e+02, 3.00077880859375e+02, 2.993760986328125e+02, 2.986380920410156e+02, 2.979726257324219e+02, 2.975960998535156e+02, 2.976379089355469e+02, 2.981609497070312e+02, 2.976806945800781e+02, 2.974798583984375e+02, 2.981191101074219e+02, 2.979312133789062e+02, 2.981080932617188e+02, 2.977353515625e+02, 2.981116943359375e+02, 2.978519897460938e+02, 2.980778198242188e+02, 2.98021728515625e+02, 2.980915222167969e+02, 2.981109924316406e+02, 2.980144653320312e+02, 2.97389404296875e+02, 2.980367736816406e+02, 2.981831665039062e+02, 2.981455383300781e+02, 2.97982666015625e+02, 2.975437316894531e+02, 2.968483581542969e+02, 2.981578369140625e+02, 2.983003234863281e+02, 2.982767028808594e+02] +pla.TTan[5].T=[2.931499938964844e+02, 2.931439514160156e+02, 2.931371154785156e+02, 2.931300964355469e+02, 2.931228942871094e+02, 2.935990295410156e+02, 2.975629272460938e+02, 2.980696411132812e+02, 2.981322937011719e+02, 2.981245422363281e+02, 2.981165771484375e+02, 2.981091003417969e+02, 2.981018981933594e+02, 2.980949401855469e+02, 2.980882873535156e+02, 2.980819091796875e+02, 2.980765686035156e+02, 2.980715026855469e+02, 2.980653686523438e+02, 2.980589599609375e+02, 2.980523681640625e+02, 2.980457153320312e+02, 2.980386047363281e+02, 2.980313110351562e+02, 2.980237121582031e+02, 2.980154724121094e+02, 2.980018615722656e+02, 2.980156555175781e+02, 2.985769653320312e+02, 2.979262084960938e+02, 2.946995239257812e+02, 2.919896240234375e+02, 2.911123657226562e+02, 2.923576049804688e+02, 2.963675231933594e+02, 2.983364562988281e+02, 2.988190002441406e+02, 2.988134155273438e+02, 2.98807861328125e+02, 2.988023376464844e+02, 2.987967834472656e+02, 2.987906188964844e+02, 2.987845458984375e+02, 2.987779235839844e+02, 2.987709045410156e+02, 2.987642211914062e+02, 2.987577514648438e+02, 2.98750732421875e+02, 2.987430725097656e+02, 2.987353515625e+02, 2.987276000976562e+02, 2.98701416015625e+02, 2.98568603515625e+02, 2.990072326660156e+02, 2.985699157714844e+02, 2.956094665527343e+02, 2.929804992675781e+02, 2.920593566894531e+02, 2.9158203125e+02, 2.91774658203125e+02, 2.925306396484375e+02, 2.938287658691406e+02, 2.95721923828125e+02, 2.980281677246094e+02, 2.99908203125e+02, 3.007344360351562e+02, 3.003543701171875e+02, 2.997403564453125e+02, 2.988629455566406e+02, 2.989630737304688e+02, 2.989620666503906e+02, 2.991448364257812e+02, 2.99336181640625e+02, 2.987297058105469e+02, 2.980737915039062e+02, 2.976673583984375e+02, 2.976437072753906e+02, 2.977496643066406e+02, 2.975323181152344e+02, 2.973034057617188e+02, 2.975719604492188e+02, 2.974444885253906e+02, 2.975765075683594e+02, 2.974695739746094e+02, 2.976016845703125e+02, 2.975071411132812e+02, 2.976199035644531e+02, 2.973872680664062e+02, 2.9760693359375e+02, 2.975155944824219e+02, 2.973482971191406e+02, 2.939005737304688e+02, 2.958710021972656e+02, 2.980149230957031e+02, 2.976663818359375e+02, 2.960293884277344e+02, 2.938044128417969e+02, 2.921101989746094e+02, 2.969722595214844e+02, 2.981127014160156e+02, 2.980857543945312e+02] +pla.TTan[10].T=[2.931499938964844e+02, 2.931366271972656e+02, 2.93123291015625e+02, 2.931098022460938e+02, 2.930957641601562e+02, 2.931101684570312e+02, 2.933526916503906e+02, 2.939864807128906e+02, 2.95714599609375e+02, 2.957048034667969e+02, 2.956898498535156e+02, 2.956759948730469e+02, 2.956627197265625e+02, 2.956501159667969e+02, 2.956381530761719e+02, 2.956268310546875e+02, 2.95617919921875e+02, 2.956095581054688e+02, 2.955987854003906e+02, 2.955874328613281e+02, 2.955757141113281e+02, 2.955638427734375e+02, 2.955509033203125e+02, 2.955375671386719e+02, 2.955234680175781e+02, 2.955079650878906e+02, 2.950186157226562e+02, 2.943903198242188e+02, 2.962739868164062e+02, 2.896255187988281e+02, 2.881460571289062e+02, 2.883722839355469e+02, 2.881101989746094e+02, 2.883436279296875e+02, 2.9045849609375e+02, 2.935482788085938e+02, 2.950082397460938e+02, 2.95000244140625e+02, 2.94992431640625e+02, 2.94984619140625e+02, 2.94976806640625e+02, 2.949676513671875e+02, 2.949586791992188e+02, 2.94948486328125e+02, 2.949374694824219e+02, 2.949271545410156e+02, 2.949172973632812e+02, 2.9490625e+02, 2.948936767578125e+02, 2.948810119628906e+02, 2.948682556152344e+02, 2.944628601074219e+02, 2.938456115722656e+02, 2.959869384765625e+02, 2.901941833496094e+02, 2.882434997558594e+02, 2.884162292480469e+02, 2.881524658203125e+02, 2.881543273925781e+02, 2.881718444824219e+02, 2.882744140625e+02, 2.885960998535156e+02, 2.894287414550781e+02, 2.911128234863281e+02, 2.937525634765625e+02, 2.964035339355469e+02, 2.933218994140625e+02, 2.919781188964844e+02, 2.914551696777344e+02, 2.913132629394531e+02, 2.913059997558594e+02, 2.915829467773438e+02, 2.921645812988281e+02, 2.931527099609375e+02, 2.946511535644531e+02, 2.962210693359375e+02, 2.936682434082031e+02, 2.947723693847656e+02, 2.954210815429688e+02, 2.913226928710938e+02, 2.951875610351562e+02, 2.934427795410156e+02, 2.958223266601562e+02, 2.919837036132812e+02, 2.957528686523438e+02, 2.928306884765625e+02, 2.921877746582031e+02, 2.93256591796875e+02, 2.908966369628906e+02, 2.947608642578125e+02, 2.893846435546875e+02, 2.882343444824219e+02, 2.905041809082031e+02, 2.960752563476562e+02, 2.896084289550781e+02, 2.885588684082031e+02, 2.883733825683594e+02, 2.883269958496094e+02, 2.92568359375e+02, 2.958397827148438e+02, 2.947052307128906e+02] +pla.chiHea.valConSwi[1].y_actual=[1e+00, -9.085635528150433e-34, 3.707467856520224e-35, 1.367924584063227e-35, -3.33793357967718e-38, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.409451693296435e-02, 8.822597563266754e-02, 8.816754072904587e-02, 8.77256914973259e-02, 8.420265465974808e-02, 7.669972628355026e-02, 0e+00, 0e+00, 0e+00, -0e+00, -0e+00, 0e+00, -0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.948620975017548e-01, 4.737338051199913e-02, 4.899383708834648e-02, 4.385897889733315e-02, -0e+00, 0e+00, -0e+00, 0e+00, -0e+00, 0e+00, 0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -8.527433648832955e-40, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999998211860657e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1.051767471947325e-35, 3.822194039972578e-19, -1.374622359167614e-32, -1.146682533356998e-41, -0e+00, 0e+00, -0e+00, 0e+00] +pla.chiHea.valConSwi[2].y_actual=[1e+00, -9.085635528150433e-34, 3.707467856520224e-35, 1.367924584063227e-35, -3.33793357967718e-38, 0e+00, 2.258084364480748e-23, 5.391005779062194e-16, -0e+00, 6.492215785216877e-42, -0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -0e+00, -0e+00, 0e+00, -0e+00, 0e+00, 7.177088171354186e-17, -0e+00, 1.511941968595235e-21, 0e+00, -0e+00, 0e+00, 0e+00, 1.990398616688557e-24, 0e+00, 4.44091223180294e-02, 5.26142381131649e-02, 6.315105408430099e-02, 2.544446662068367e-02, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -0e+00, 0e+00, -0e+00, 4.471921750245859e-40, 2.030325798469941e-16, -0e+00, -0e+00, 0e+00, 0e+00, 0e+00, -0e+00, -0e+00, -0e+00, 0e+00, 0e+00, -0e+00, -0e+00, -0e+00, 0e+00, 1.386395355682978e-28, 1.5802975399051e-24, 6.025592002272114e-19, -7.490404689028343e-22, -7.055322971107124e-33, 0e+00, -1.820802785651219e-18, 1.245201797195085e-35, -0e+00, -6.212257372742707e-15, 1.379974666360255e-28, -6.390481516706896e-41, 2.725885016793311e-35, 7.209084282589126e-19, -0e+00, 0e+00, 0e+00, -0e+00, 2.179733774241896e-40, -1.081617597030746e-16, -0e+00, 2.710675334111579e-17, 0e+00, -1.317609777725252e-20, 1.067217969806845e-24, -0e+00, 0e+00, -1.093431052429153e-19, 8.329209228867189e-20, -5.779158230094812e-17, 7.490149563425227e-17, 0e+00, 7.012195630562247e-24, 4.224577996819922e-32] +pla.chiHea.valEvaSwi[1].y_actual=[1e+00, -9.085635528150433e-34, 3.707467856520224e-35, 1.367924584063227e-35, -3.33793357967718e-38, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, -0e+00, -0e+00, 0e+00, -0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.093674955791308e-12, 0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -0e+00, 0e+00, -0e+00, 0e+00, -0e+00, 0e+00, 0e+00, -0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -8.527433648832955e-40, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999998211860657e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1.051767471947325e-35, -0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, -0e+00] +pla.chiHea.valEvaSwi[2].y_actual=[1e+00, -9.085635528150433e-34, 3.707467856520224e-35, 1.367924584063227e-35, -3.33793357967718e-38, 0e+00, -0e+00, 0e+00, 0e+00, -3.475220191525546e-43, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -0e+00, -0e+00, 0e+00, -0e+00, 0e+00, 5.989017177502168e-18, -3.227624765863994e-40, -1.973788852115428e-29, -1.905122268572425e-18, 0e+00, -0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -0e+00, 0e+00, -0e+00, -0e+00, 0e+00, 0e+00, -0e+00, 7.685364956435966e-25, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -3.366096252251968e-32, -2.802596928649634e-45, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 3.581314857995286e-18, -4.3641822936099e-20, -2.424720216443401e-19, -1.08919244972346e-18, 4.934703302371928e-20, -8.587047758901533e-19, -2.223785579790257e-25, -4.35835415995961e-19, 8.237799696572456e-19, 2.707272705982327e-19, -3.517252340035385e-22, -1.640973056475879e-21, 2.317629795427106e-19, -7.020893455402952e-19, -1.096210767028243e-19, 4.233398188675818e-19, -1.227512635326994e-19, -9.704867456209987e-20, 3.624941319928916e-22, 1.533165999882055e-23, 2.899049081286082e-29, 1.612045323147708e-36, -1.615051431048428e-18, -6.887660776919713e-36, 7.695163495559216e-21] +pla.TConWatConChiEnt.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931099853515625e+02, 2.933381042480469e+02, 2.939522399902344e+02, 2.95910400390625e+02, 2.838604431152344e+02, 2.874870910644531e+02, 2.873931274414062e+02, 2.899110412597656e+02, 2.897094421386719e+02, 2.906524353027344e+02, 2.913427734375e+02, 2.913788146972656e+02, 2.910275268554688e+02, 2.906571350097656e+02, 2.902835388183594e+02, 2.892861938476562e+02, 2.891004333496094e+02, 2.887556762695312e+02, 2.872022399902344e+02, 2.872092590332031e+02, 2.860549621582031e+02, 2.855466003417969e+02, 2.914564819335938e+02, 2.914025573730468e+02, 2.88064697265625e+02, 2.880107116699219e+02, 2.876532897949219e+02, 2.8810986328125e+02, 2.879464416503906e+02, 2.892691040039062e+02, 2.925242614746094e+02, 2.895975341796875e+02, 2.888591003417969e+02, 2.910445251464844e+02, 2.907697448730469e+02, 2.911862182617188e+02, 2.909076538085938e+02, 2.922184753417969e+02, 2.915035705566406e+02, 2.910456848144531e+02, 2.895721130371094e+02, 2.890260620117188e+02, 2.886797485351562e+02, 2.872044372558594e+02, 2.872793884277344e+02, 2.861549072265625e+02, 2.854899597167969e+02, 2.911090087890625e+02, 2.9136767578125e+02, 2.880478210449219e+02, 2.880643310546875e+02, 2.876279296875e+02, 2.880967102050781e+02, 2.882138061523438e+02, 2.881932678222656e+02, 2.882107238769531e+02, 2.883023986816406e+02, 2.886351623535156e+02, 2.895260925292969e+02, 2.9129345703125e+02, 2.929976501464844e+02, 2.932242736816406e+02, 2.928714599609375e+02, 2.924085388183592e+02, 2.882399291992188e+02, 2.884291381835938e+02, 2.890672607421875e+02, 2.896780700683594e+02, 2.909862365722656e+02, 2.932473449707031e+02, 2.958108520507812e+02, 2.958136291503906e+02, 2.958136291503906e+02, 2.958135986328125e+02, 2.958135986328125e+02, 2.958135986328125e+02, 2.958135986328125e+02, 2.958135681152344e+02, 2.958135681152344e+02, 2.958135375976562e+02, 2.958135375976562e+02, 2.958135375976562e+02, 2.958135070800781e+02, 2.958135070800781e+02, 2.958135070800781e+02, 2.958135070800781e+02, 2.958135070800781e+02, 2.958134765625e+02, 2.958134765625e+02, 2.958134765625e+02, 2.958134765625e+02, 2.958134765625e+02, 2.958134765625e+02, 2.958134460449219e+02, 2.958134460449219e+02, 2.958134460449219e+02] +pla.TConWatConChiLvg.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.934451904296875e+02, 2.942405700683594e+02, 2.988957824707031e+02, 2.998646240234375e+02, 2.906112976074219e+02, 2.918159484863281e+02, 2.932535400390625e+02, 2.953175659179688e+02, 2.964581909179688e+02, 2.982774047851562e+02, 3.003711242675781e+02, 3.009894714355469e+02, 2.996615905761719e+02, 2.983316650390625e+02, 2.970067749023438e+02, 2.95449951171875e+02, 2.942903747558594e+02, 2.929728088378906e+02, 2.919052124023438e+02, 2.905130310058594e+02, 2.897071228027344e+02, 2.892317810058594e+02, 2.949763488769531e+02, 2.945295410156251e+02, 2.978073120117188e+02, 2.977934875488281e+02, 2.911916809082031e+02, 2.935477905273438e+02, 2.917460632324219e+02, 2.948923034667969e+02, 2.991643981933593e+02, 2.954306945800781e+02, 2.967879943847656e+02, 2.984125061035156e+02, 2.99493408203125e+02, 3.002249145507812e+02, 3.008715209960938e+02, 3.000040893554688e+02, 2.98348388671875e+02, 2.970357360839844e+02, 2.954632263183594e+02, 2.942148742675781e+02, 2.928957214355469e+02, 2.919041748046875e+02, 2.905855712890625e+02, 2.897970581054688e+02, 2.891377868652344e+02, 2.946554565429688e+02, 2.944154357910156e+02, 2.978681335449219e+02, 2.978423767089844e+02, 2.911533508300781e+02, 2.915204162597656e+02, 2.916546325683594e+02, 2.916346130371094e+02, 2.916509399414062e+02, 2.917378540039062e+02, 2.920534973144531e+02, 2.929134521484375e+02, 2.946406860351562e+02, 2.963178405761719e+02, 2.996889038085938e+02, 2.996326293945312e+02, 3.001095275878905e+02, 2.952317810058594e+02, 2.943333129882812e+02, 2.940935363769531e+02, 2.936544799804688e+02, 2.938551330566406e+02, 2.950093994140625e+02, 2.96600830078125e+02, 2.966027526855469e+02, 2.960841674804688e+02, 2.940649719238281e+02, 2.900751953125e+02, 2.915669555664062e+02, 2.892200927734375e+02, 2.901171569824219e+02, 2.893357543945312e+02, 2.908988342285156e+02, 2.899993896484375e+02, 2.918946228027344e+02, 2.906029968261719e+02, 2.927255249023438e+02, 2.920989990234375e+02, 2.934815979003906e+02, 2.934815979003906e+02, 2.898256225585938e+02, 2.945450439453125e+02, 2.948676147460938e+02, 2.948676147460938e+02, 2.948676147460938e+02, 2.948676147460938e+02, 2.922198486328125e+02, 2.964689636230469e+02, 2.964689636230469e+02] +pla.TConWatConRet.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.011499938964844e+02, 2.942166137695312e+02, 2.98408935546875e+02, 2.998364562988281e+02, 2.909297790527344e+02, 2.918243713378906e+02, 2.932340698242188e+02, 2.953302001953125e+02, 2.964417419433594e+02, 2.982729797363281e+02, 3.003575439453125e+02, 3.009991455078125e+02, 2.996717529296875e+02, 2.983415832519531e+02, 2.97016845703125e+02, 2.955293579101562e+02, 2.943018798828125e+02, 2.929832153320312e+02, 2.919111938476562e+02, 2.905276794433594e+02, 2.89762939453125e+02, 2.88915283203125e+02, 3.011499938964844e+02, 2.973893432617182e+02, 2.9780908203125e+02, 2.978021545410156e+02, 3.011499938964844e+02, 3.011499938964844e+02, 2.981128845214844e+02, 2.993541259765625e+02, 2.991171264648436e+02, 2.953565063476562e+02, 2.967556762695312e+02, 2.984817810058594e+02, 2.994813537597656e+02, 3.000404357910156e+02, 3.00860595703125e+02, 3.000500793457031e+02, 2.983583984375e+02, 2.970460510253906e+02, 2.954064331054688e+02, 2.942261657714844e+02, 2.929057922363281e+02, 2.919149169921875e+02, 2.906011352539062e+02, 2.89846435546875e+02, 2.888616333007812e+02, 3.011499938964844e+02, 3.011499938964844e+02, 2.979656066894531e+02, 2.9784912109375e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.011499938964844e+02, 3.010613403320312e+02, 3.004046020507812e+02, 3.005558166503906e+02, 3.009432067871092e+02, 2.953451843261719e+02, 2.943478698730469e+02, 2.941319885253906e+02, 2.936686706542969e+02, 2.938149108886719e+02, 2.949099426269531e+02, 2.964989013671875e+02, 2.965009460449219e+02, 2.978043823242188e+02, 2.983957214355469e+02, 2.982347717285156e+02, 2.979111938476562e+02, 2.98150146484375e+02, 2.981526794433594e+02, 2.981537475585938e+02, 2.981553039550781e+02, 2.981572570800781e+02, 2.979302978515625e+02, 2.981614074707031e+02, 2.979618835449219e+02, 2.981718444824219e+02, 2.979964904785156e+02, 2.979964904785156e+02, 2.981763305664062e+02, 2.981909484863281e+02, 2.980606689453125e+02, 2.980606689453125e+02, 2.980606689453125e+02, 2.980606689453125e+02, 2.981891784667969e+02, 2.982852172851562e+02, 2.982852172851562e+02] +pla.TConWatHexCooEnt.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.99502685546875e+02, 2.912838134765625e+02, 2.918309936523438e+02, 2.932137145996094e+02, 2.953454895019531e+02, 2.964254150390625e+02, 2.982768249511719e+02, 3.003436584472656e+02, 3.010084533691406e+02, 2.99681640625e+02, 2.983513488769531e+02, 2.9702685546875e+02, 2.956376647949219e+02, 2.943138122558594e+02, 2.92994140625e+02, 2.919156188964844e+02, 2.905450439453125e+02, 2.89852783203125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.872569580078125e+02, 2.952567138671875e+02, 2.967147216796875e+02, 2.985582885742188e+02, 2.994683227539062e+02, 2.998915710449219e+02, 3.00840087890625e+02, 3.000933227539062e+02, 2.983682250976562e+02, 2.970562744140625e+02, 2.953495483398438e+02, 2.942383728027344e+02, 2.929168395996094e+02, 2.919275512695312e+02, 2.906202392578125e+02, 2.89925537109375e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.872568969726562e+02, 2.936514892578125e+02, 2.944025573730469e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836704711914062e+02, 2.836705932617188e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836706848144531e+02, 2.836707153320312e+02, 2.836707153320312e+02, 2.836707153320312e+02, 2.836707153320312e+02, 2.836707153320312e+02, 2.836707153320312e+02, 2.836707458496094e+02, 2.836707458496094e+02] +pla.TConWatHexCooLvg.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.99502685546875e+02, 2.833626708984375e+02, 2.873463745117188e+02, 2.872824096679688e+02, 2.899974060058594e+02, 2.897974853515625e+02, 2.906658325195312e+02, 2.913446044921875e+02, 2.913773193359375e+02, 2.910257568359375e+02, 2.906554260253906e+02, 2.902818298339844e+02, 2.89351318359375e+02, 2.891680908203125e+02, 2.888122863769531e+02, 2.870111999511719e+02, 2.869263916015625e+02, 2.836366882324219e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.83709716796875e+02, 2.900005493164062e+02, 2.890611267089844e+02, 2.910165100097656e+02, 2.90764892578125e+02, 2.911956176757812e+02, 2.909474792480469e+02, 2.921924438476562e+02, 2.9150146484375e+02, 2.910434265136719e+02, 2.898074951171875e+02, 2.891645202636719e+02, 2.887716979980469e+02, 2.869362487792969e+02, 2.869552917480469e+02, 2.836180725097656e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.837688598632812e+02, 2.919963073730469e+02, 2.933595275878906e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815339660644531e+02, 2.815340881347656e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342102050781e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342407226562e+02, 2.815342712402344e+02, 2.815343017578125e+02, 2.815343017578125e+02] diff --git a/Buildings/Resources/Scripts/BuildingsPy/conf.yml b/Buildings/Resources/Scripts/BuildingsPy/conf.yml index c0521ce6874..7c85e21af05 100644 --- a/Buildings/Resources/Scripts/BuildingsPy/conf.yml +++ b/Buildings/Resources/Scripts/BuildingsPy/conf.yml @@ -132,6 +132,21 @@ openmodelica: comment: simulation terminated by an assertion at initialization simulate: false +- model_name: Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant + openmodelica: + comment: Internal error BackendDAETransform.analyseStrongComponentBlock failed (Purely discrete algebraic loops cannot be solved by iterative processes. Try to break them open using the delay() operator.) + translate: false +- model_name: Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage + openmodelica: + comment: Internal error NFCeval.evalBinaryMul failed to evaluate {0.0, 0.03359309597916374, 0.06718619195832748, 0.09151222697772191}[pressure.n] * 0.0 + translate: false + optimica: + comment: pyfmi.fmi.FMUException Failed to update the events at time 3.024307E+06 + simulate: false +- model_name: Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage + openmodelica: + comment: Internal error NFCeval.evalBinaryMul failed to evaluate {0.0, 0.03359309597916374, 0.06718619195832748, 0.09151222697772191}[pressure.n] * 0.0 + translate: false - model_name: Buildings.Experimental.DHC.Plants.Cooling.Examples.StoragePlantDualSource openmodelica: comment: 'Could not evaluate structural parameter (or constant): mChi_flow_nominal' @@ -234,6 +249,7 @@ openmodelica: comment: simulation terminated by an assertion at initialization simulate: false + time_out: 600 - model_name: Buildings.Obsolete.Utilities.IO.Python36.Examples.KalmanFilter dymola: comment: Python 3.6 is not supported on Ubuntu 20.04, will be upgraded to more recent version diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mos new file mode 100644 index 00000000000..a293e1ae956 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Direct.mos @@ -0,0 +1,39 @@ +// Simulate +simulateModel("Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Direct", tolerance=1e-6, stopTime=86400, numberOfIntervals=500, resultFile="Direct"); +// Plot commands +createPlot(id=1, + position={11, 19, 713, 564}, + y={"heaETS.senTDisSup.T", "heaETS.senTBuiSup.T", "heaETS.senTBuiRet.T", "heaETS.senTDisRet.T"}, + range={0.0, 24.0, 6.0, 18.0}, + grid=true, + filename="Direct.mat", + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="h", + displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=1, + position={11, 19, 713, 280}, + y={"heaETS.port_aSerHea.m_flow", "heaETS.ports_aHeaWat[1].m_flow", "heaETS.cheVal.m_flow"}, + range={0.0, 24.0, -0.1, 0.6}, + grid=true, + subPlot=2, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="h"); +createPlot(id=2, + position={734, 19, 720, 561}, + y={"heaETS.conVal.y"}, + range={0.0, 24.0, -0.2, 1.2}, + grid=true, + colors={{28,108,200}}, + timeUnit="h"); +createPlot(id=2, + position={734, 19, 720, 278}, + y={"heaETS.Q_flow", "heaETS.Q"}, + range={0.0, 24.0, -5.0, 30.0}, + grid=true, + subPlot=2, + colors={{28,108,200}, {0,140,72}}, + range2={-100.0, 700.0}, + axes={1, 2}, + timeUnit="h", + displayUnits={"kW", "kWh"}); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mos new file mode 100644 index 00000000000..fea7c029f51 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/EnergyTransferStations/Heating/Examples/Indirect.mos @@ -0,0 +1,54 @@ +// Simulate +simulateModel("Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Indirect", + stopTime=86400, + tolerance=1e-06, + numberOfIntervals=500, + resultFile="Indirect"); +// Plot commands +createPlot(id=1, + position={11, 19, 713, 564}, + y={"heaETS.senTDisSup.T", "heaETS.senTDisRet.T", "heaETS.senTBuiSup.T", "heaETS.senTBuiRet.T"}, + range={0.0, 24.0, 0.0, 20.0}, + grid=true, + filename="Indirect.mat", + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="h", + displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=1, + position={11, 19, 713, 186}, + y={"heaETS.hex.m1_flow", "heaETS.hex.m2_flow", "loa.m_flow"}, + range={0.0, 24.0, -0.2, 0.6}, + grid=true, + subPlot=2, + bottomTitleType=0, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="h"); +createPlot(id=1, + position={11, 19, 713, 185}, + y={"heaETS.conVal.y"}, + range={0.0, 24.0, -0.05, 0.1}, + grid=true, + subPlot=3, + colors={{28,108,200}}, + timeUnit="h"); +createPlot(id=2, + position={733, 18, 719, 568}, + y={"heaETS.hex.port_a1.p", "heaETS.hex.port_b1.p", "heaETS.hex.port_a2.p", "heaETS.hex.port_b2.p"}, + range={0.0, 24.0, 3, 3}, + grid=true, + bottomTitleType=0, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, + timeUnit="h", + displayUnits={"bar", "bar", "bar", "bar"}); +createPlot(id=2, + position={733, 18, 719, 187}, + y={"heaETS.Q_flow", "heaETS.Q"}, + autoscale=true, + range={0.0, 24.0, -10.0, 30.0}, + grid=true, + subPlot=2, + colors={{28,108,200}, {238,46,47}}, + axes={1,2}, + displayUnits={"kW", "kWh"}, + timeUnit="h"); + diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mos new file mode 100644 index 00000000000..b3c2278d44c --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Loads/Heating/Examples/BuildingTimeSeriesWithETS.mos @@ -0,0 +1,4 @@ +simulateModel("Buildings.Experimental.DHC.Loads.Heating.Examples.BuildingTimeSeriesWithETS", startTime=2592000, stopTime=3628800, method="Cvode", tolerance=1e-06, resultFile="BuildingTimeSeriesWithETS"); +createPlot(id=1, position={11, 19, 713, 558}, y={"buiWitETS.bui.loa.y[2]", "buiWitETS.ets.Q_flow"}, range={30.0, 42.0, -30.0, 10.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}, timeUnit="d", displayUnits={"kW", "kW"}); +createPlot(id=1, position={11, 19, 713, 558}, y={"senMasFlo.m_flow", "buiWitETS.ets.senMasFlo.m_flow"}, range={30.0, 42.0, -0.1, 0.4}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="d", displayUnits={"kg/s", "kg/s"}); +createPlot(id=2, position={211, 7, 1250, 715}, y={"buiWitETS.ets.senTDisSup.T", "buiWitETS.ets.senTDisRet.T"}, range={30.0, 42.0, 6.0, 24.0}, grid=true, colors={{238,46,47}, {0,140,72}}, timeUnit="d", displayUnits={"degC", "degC"}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mos new file mode 100644 index 00000000000..1fd71036b50 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StageIndex.mos @@ -0,0 +1,25 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StageIndex", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="StageIndex"); + +createPlot( + id=1, + position={24, 21, 592, 515}, + y={"sta.u1", "sta.u1Up", "sta.u1Dow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=2, + y={"sta.idxSta"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mos new file mode 100644 index 00000000000..c12e851d111 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mos @@ -0,0 +1,52 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=30000, + resultFile="StagingPlant"); + +createPlot( + id=1, + position={15, 15, 592, 564}, + y={"staChi.loaChiWat.y", "staChi.loaHeaWat.y", "QChiWatChi_flow_nominal", "QChiWatCasCoo_flow_nominal", "QHeaWat_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=2, + y={"staChi.y1Chi[1]","staChi.y1Chi[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=3, + y={"staChi.y1ChiHea[1]","staChi.y1ChiHea[2]","staChi.y1ChiHea[3]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + position={615, 15, 593, 570}, + y={"staChi.y1CooChiHea[1]","staChi.y1CooChiHea[2]","staChi.y1CooChiHea[3]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=2, + y={"staChi.y1HeaCooChiHea[1]","staChi.y1HeaCooChiHea[2]","staChi.y1HeaCooChiHea[3]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mos new file mode 100644 index 00000000000..b628097b586 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mos @@ -0,0 +1,34 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPump", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=5000, + resultFile="StagingPump"); + +createPlot( + id=1, + position={15, 15, 592, 564}, + y={"staDet.m_flow", "m_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=2, + y={"staDet.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=3, + y={"staDet.y1[1]", "staDet.y1[2]", "staDet.y1[3]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mos new file mode 100644 index 00000000000..acbcadaac02 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mos @@ -0,0 +1,11 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage", + method="Radau", + tolerance=1e-6, + startTime=3024000, + stopTime=3456000, + resultFile="AllElectricCWStorage"); +// Plot commands +createPlot(id=1, position={413, 4, 775, 634}, y={"loaHea[1].bui.QReqHea_flow", "loaHea[1].bui.QHea_flow", "loaHea[2].bui.QReqHea_flow","loaHea[2].bui.QHea_flow"}, range={35, 40, -500000.0, 1000000.0}, autoscale=false, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="d", displayUnits={"W", "W", "W", "W"}); +createPlot(id=1, position={413, 4, 775, 634}, y={"loaCoo[1].bui.QReqCoo_flow", "loaCoo[1].bui.QCoo_flow", "loaCoo[2].bui.QReqCoo_flow","loaCoo[2].bui.QCoo_flow"}, range={35, 40, -40000.0, 20000.0}, autoscale=false, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="d", displayUnits={"W", "W", "W", "W"}); +createPlot(id=1, position={413, 4, 775, 634}, y={"pla.PHea", "pla.PCoo", "pla.PFan", "pla.PPum"}, range={35, 40, -500000.0, 1000000.0}, autoscale=false, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="d", displayUnits={"W", "W", "W", "W"}); +createPlot(id=1, position={413, 4, 775, 634}, y={"pla.THeaWatSup.T", "pla.THeaWatPriRet.T", "pla.TChiWatSup.T", "pla.TChiWatPriRet.T"}, range={35, 40, 0.0, 100.0}, autoscale=false, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC"}); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mos new file mode 100644 index 00000000000..02a151a3e7e --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mos @@ -0,0 +1,42 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerGroup", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="ChillerGroup"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1.y[1]", "y1.y[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"chi.m2_flow", "chi.chi.m2_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"TChiWatSupSet.y", "chi.sta_a2.T", "chi.sta_b2.T", "chi.sta_a1.T", "chi.sta_b1.T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"chi.chi.PLR1", "chi.chi.PLR2", "dat.PLRMax", "chi.chi.COP"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mos new file mode 100644 index 00000000000..d17ab9478ea --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mos @@ -0,0 +1,96 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerHeatRecoveryGroup", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=2000, + resultFile="ChillerHeatRecoveryGroup"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1.y[1]", "y1.y[2]", "y1Coo.y[1]", "y1Coo.y[2]", "y1HeaCoo.y[1]", "y1HeaCoo.y[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=2, + y={"chi.port_a1.m_flow", "chi.port_a2.m_flow", "chi.port_a3.m_flow", "chi.port_a4.m_flow", "chi.mChiWat_flow_nominal", "chi.mConWat_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=3, + y={"floChiWat.m_flow", "floHeaWat.m_flow", "chi.chi[1].m1_flow", "chi.chi[2].m1_flow", "chi.chi[1].m2_flow", "chi.chi[2].m2_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=4, + y={"chi.TSet[1]", "chi.TSet[2]", "TChiWatSup.T", "THeaWatSup.T", "chi.TEvaLvg[1]", "chi.TEvaLvg[2]", "chi.TConLvg[1]", "chi.TConLvg[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + position={317, 28, 592, 539}, + y={"chi.port_a1.m_flow", "chi.port_b1.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=2, + y={"chi.port_a2.m_flow", "chi.port_b2.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=3, + y={"chi.port_a3.m_flow", "chi.port_b3.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=4, + y={"chi.port_a4.m_flow", "chi.port_b4.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=3, + position={593, 26, 592, 396}, + y={"chi.valConSwi[1].y_actual", "chi.valConSwi[2].y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=3, + subPlot=2, + y={"chi.valEvaSwi[1].y_actual", "chi.valEvaSwi[2].y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mos new file mode 100644 index 00000000000..fce32ca5208 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mos @@ -0,0 +1,42 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.CoolingTowerGroup", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="CoolingTowerGroup"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1.y[1]", "y1.y[2]", "ctl.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"coo.m_flow", "coo.coo.m_flow", "coo.mConWatUni_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"coo.weaBus.TWetBul", "TConWatSupSet.y", "TConWatRet.T", "TConWatSup.T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"coo.P"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mos new file mode 100644 index 00000000000..5adb5c66dde --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mos @@ -0,0 +1,42 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.HeatPumpGroup", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="HeatPumpGroup"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1.y[1]", "y1.y[2]", "heaPum.heaPum.uMod"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"heaPum.m_flow", "heaPum.heaPum.m1_flow", "heaPum.mHeaWatUni_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"heaPum.weaBus.TDryBul", "THeaWatSupSet.y", "THeaWatRet.T", "THeaWatSup.T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"heaPum.heaPum.PLR", "heaPum.heaPum.COP"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mos new file mode 100644 index 00000000000..4be87254d08 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mos @@ -0,0 +1,43 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsDp", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="MultiplePumpsDp"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1Pum.y[1]", "y1Pum.y[2]", "ope.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"dpSet.y", "senRelPre.p_rel", "senRelPre1.p_rel"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"senMasFlo.m_flow", "senMasFlo1.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"pum.P"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +plotExpression(apply(MultiplePumpsDp.pum1.P + MultiplePumpsDp.pum2.P), false, "pum1.P+pum2.P"); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mos new file mode 100644 index 00000000000..e975b2fd4d7 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mos @@ -0,0 +1,43 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsFlow", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="MultiplePumpsFlow"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"y1Pum.y[1]", "y1Pum.y[2]", "ope.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"senRelPre.p_rel", "senRelPre1.p_rel"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"floSet.y", "senMasFlo.m_flow", "senMasFlo1.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"pum.P"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +plotExpression(apply(MultiplePumpsFlow.pum1.P + MultiplePumpsFlow.pum2.P), false, "pum1.P+pum2.P"); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos new file mode 100644 index 00000000000..6ff9145656b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mos @@ -0,0 +1,43 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsSpeed", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1000, + resultFile="MultiplePumpsSpeed"); +createPlot( + id=1, + position={42, 30, 624, 552}, + y={"spe.y", "y1Pum.y[1]", "y1Pum.y[2]", "ope.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=102, + y={"senRelPre.p_rel", "senRelPre1.p_rel"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=103, + y={"senMasFlo.m_flow", "senMasFlo1.m_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=104, + y={"pum.P"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +plotExpression(apply(MultiplePumpsSpeed.pum1.P + MultiplePumpsSpeed.pum2.P), false, "pum1.P+pum2.P"); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mos new file mode 100644 index 00000000000..eb2c2466bf5 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Subsystems/Validation/ValveOpeningFlowBalancing.mos @@ -0,0 +1,18 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ValveOpeningFlowBalancing", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=1, + resultFile="ValveOpeningFlowBalancing"); +createPlot( + id=1, + position={42, 27, 592, 367}, + y={"y1", "y2"}, + range={0.0, 1, 0.0, 1.0}, + autoscale=false, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +plotExpression(apply(ValveOpeningFlowBalancing.m1_flow / ValveOpeningFlowBalancing.m2_flow), false, "m1_flow/m2_flow"); +plotExpression(apply(ValveOpeningFlowBalancing.val1.m_flow / ValveOpeningFlowBalancing.val2.m_flow), false, "val1.m_flow/val2.m_flow"); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mos b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mos new file mode 100644 index 00000000000..b8cd7757fb6 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mos @@ -0,0 +1,240 @@ +simulateModel("Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage", + method="Cvode", + tolerance=1e-6, + startTime=0, + stopTime=345600, + resultFile="AllElectricCWStorage"); +createPlot( + id=1, + position={8, 9, 504, 530}, + y={"pla.chi.y1[1]", "pla.chi.y1[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=2, + y={"pla.chiHea.y1[1]", "pla.chiHea.y1Coo[1]", "pla.ctl.y1HeaCooChiHea[1]", "pla.chiHea.y1[2]", "pla.chiHea.y1Coo[2]", "pla.ctl.y1HeaCooChiHea[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=1, + subPlot=3, + y={"pla.ctl.cycTan.idxCycTan", "pla.ctl.modConLoo.mode"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + position={38, 10, 442, 494}, + y={"pla.chi.m1_flow", "pla.chi.m2_flow", "pla.chiHea.m1_flow", "pla.chiHea.m2_flow", "pla.chiHea.m3_flow", "pla.chiHea.m4_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=2, + y={"pla.chi.chi.m2_flow", "pla.chiHea.chi[1].m2_flow", "pla.chiHea.chi[2].m2_flow", "pla.chi.mChiWatUni_flow_nominal", "pla.chiHea.mChiWatUni_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=2, + subPlot=3, + y={"pla.TChiWatSupSet", "pla.TChiWatPriRet.T", "pla.TChiWatSup.T", "pla.chiHea.TEvaLvg[1]", "pla.chiHea.TEvaLvg[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=3, + position={66, 80, 442, 494}, + y={"pla.pumChiWat.y1[1]", "pla.pumChiWat.y1[2]","pla.pumChiWat.pum.y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=3, + subPlot=2, + y={"pla.dpChiWatSet", "pla.dpChiWat.p_rel", "pla.pumChiWat.pum.dpMachine", "pla.pumChiWat.dpPum_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=3, + subPlot=3, + y={"pla.mChiWatPri_flow.m_flow", "pla.mChiWat_flow_nominal", "pla.chi.m2_flow", "pla.chiHea.m4_flow", "pla.mChiWatChi_flow_min"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=4, + position={463, 12, 443, 466}, + y={"pla.chiHea.m1_flow", "pla.chiHea.m2_flow", "pla.chiHea.m3_flow", "pla.chiHea.m4_flow"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=4, + subPlot=2, + y={"pla.chiHea.chi[1].m1_flow", "pla.chiHea.chi[2].m1_flow", "pla.chiHea.mConWatUni_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=4, + subPlot=3, + y={"pla.THeaWatSupSet", "pla.THeaWatPriRet.T", "pla.THeaWatSup.T", "pla.chiHea.TConLvg[1]", "pla.chiHea.TConLvg[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=5, + position={517, 80, 443, 495}, + y={"pla.pumHeaWat.y1[1]", "pla.pumHeaWat.y1[2]", "pla.pumHeaWat.pum.y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=5, + subPlot=2, + y={"pla.dpHeaWatSet", "pla.dpHeaWat.p_rel", "pla.pumHeaWat.pum.dpMachine", "pla.pumHeaWat.dpPum_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=5, + subPlot=3, + y={"pla.mHeaWatPri_flow.m_flow", "pla.mHeaWat_flow_nominal", "pla.chiHea.m1_flow", "pla.mHeaWatChiHea_flow_min"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=6, + position={915, 12, 407, 496}, + y={"pla.pumConWatCon.y1[1]", "pla.pumConWatCon.y1[2]", "pla.pumConWatCon.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=6, + subPlot=2, + y={"pla.chi.m1_flow", "pla.chiHea.m3_flow", "pla.chiHea.m3_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=6, + subPlot=3, + y={"pla.pumConWatEva.y1[1]", "pla.pumConWatEva.y1[2]", "pla.pumConWatEva.y"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=6, + subPlot=4, + y={"pla.chiHea.m2_flow", "pla.chiHea.m2_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=7, + position={981, 81, 443, 524}, + y={"pla.heaPum.y1[1]", "pla.heaPum.y1[2]"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=7, + subPlot=2, + y={"pla.ctl.THeaPumSet", "pla.TConWatHeaPumEnt.T", "pla.TConWatHeaPumLvg.T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=7, + subPlot=3, + y={"pla.heaPum.heaPum.m1_flow", "pla.heaPum.heaPum.m1_flow_nominal"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=7, + subPlot=4, + y={"pla.TTan[1].T", "pla.TTan[5].T", "pla.TTan[10].T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=8, + position={593, 26, 592, 396}, + y={"pla.chiHea.valConSwi[1].y_actual", "pla.chiHea.valConSwi[2].y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=8, + subPlot=2, + y={"pla.chiHea.valEvaSwi[1].y_actual", "pla.chiHea.valEvaSwi[2].y_actual"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); +createPlot( + id=9, + position={75, 75, 584, 361}, + y={"pla.TConWatConChiEnt.T", "pla.TConWatConChiLvg.T", "pla.TConWatConRet.T", "pla.TConWatHexCooEnt.T", "pla.TConWatHexCooLvg.T"}, + autoscale=true, + autoerase=true, + autoreplot=true, + grid=true, + color=true); diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Direct.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Direct.mos new file mode 100644 index 00000000000..e534c08768d --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Direct.mos @@ -0,0 +1,13 @@ +compareVars := + { + "heaETS.senTDisSup.T", + "heaETS.senTBuiSup.T", + "heaETS.senTBuiRet.T", + "heaETS.senTDisRet.T", + "heaETS.port_aSerHea.m_flow", + "heaETS.ports_aHeaWat[1].m_flow", + "heaETS.cheVal.m_flow", + "heaETS.conVal.y", + "heaETS.Q_flow", + "heaETS.Q" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Indirect.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Indirect.mos new file mode 100644 index 00000000000..e9b99a5148e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.EnergyTransferStations.Heating.Examples.Indirect.mos @@ -0,0 +1,17 @@ +compareVars := + { + "heaETS.senTDisSup.T", + "heaETS.senTDisRet.T", + "heaETS.senTBuiSup.T", + "heaETS.senTBuiRet.T", + "heaETS.hex.m1_flow", + "heaETS.hex.m2_flow", + "loa.m_flow", + "heaETS.conVal.y", + "heaETS.hex.port_a1.p", + "heaETS.hex.port_b1.p", + "heaETS.hex.port_a2.p", + "heaETS.hex.port_b2.p", + "heaETS.Q_flow", + "heaETS.Q" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Loads.Heating.Examples.BuildingTimeSeriesWithETS.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Loads.Heating.Examples.BuildingTimeSeriesWithETS.mos new file mode 100644 index 00000000000..b326d5ff6dd --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Loads.Heating.Examples.BuildingTimeSeriesWithETS.mos @@ -0,0 +1,9 @@ +compareVars := + { + "buiWitETS.bui.loa.y[2]", + "buiWitETS.ets.Q_flow", + "senMasFlo.m_flow", + "buiWitETS.ets.senMasFlo.m_flow", + "buiWitETS.ets.senTDisSup.T", + "buiWitETS.ets.senTDisRet.T" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StageIndex.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StageIndex.mos new file mode 100644 index 00000000000..39f2b8777ba --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StageIndex.mos @@ -0,0 +1,7 @@ +compareVars := + { + "sta.u1", + "sta.u1Up", + "sta.u1Dow", + "sta.idxSta" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant.mos new file mode 100644 index 00000000000..53f99c8215a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPlant.mos @@ -0,0 +1,19 @@ +compareVars := + { + "staChi.loaChiWat.y", + "staChi.loaHeaWat.y", + "QChiWatChi_flow_nominal", + "QChiWatCasCoo_flow_nominal", + "QHeaWat_flow_nominal", + "staChi.y1Chi[1]", + "staChi.y1Chi[2]", + "staChi.y1ChiHea[1]", + "staChi.y1ChiHea[2]", + "staChi.y1ChiHea[3]", + "staChi.y1CooChiHea[1]", + "staChi.y1CooChiHea[2]", + "staChi.y1CooChiHea[3]", + "staChi.y1HeaCooChiHea[1]", + "staChi.y1HeaCooChiHea[2]", + "staChi.y1HeaCooChiHea[3]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPump.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPump.mos new file mode 100644 index 00000000000..d379c72ca79 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Controls.BaseClasses.Validation.StagingPump.mos @@ -0,0 +1,9 @@ +compareVars := + { + "staDet.m_flow", + "m_flow_nominal", + "staDet.y", + "staDet.y1[1]", + "staDet.y1[2]", + "staDet.y1[3]" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage.mos new file mode 100644 index 00000000000..48c38bce11c --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Examples.AllElectricCWStorage.mos @@ -0,0 +1,19 @@ +compareVars := + { + "loaHea[1].bui.QReqHea_flow", + "loaHea[1].bui.QHea_flow", + "loaHea[2].bui.QReqHea_flow", + "loaHea[2].bui.QHea_flow", + "loaCoo[1].bui.QReqCoo_flow", + "loaCoo[1].bui.QCoo_flow", + "loaCoo[2].bui.QReqCoo_flow", + "loaCoo[2].bui.QCoo_flow", + "pla.PHea", + "pla.PCoo", + "pla.PFan", + "pla.PPum", + "pla.THeaWatSup.T", + "pla.THeaWatPriRet.T", + "pla.TChiWatSup.T", + "pla.TChiWatPriRet.T" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerGroup.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerGroup.mos new file mode 100644 index 00000000000..b8660ce311c --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerGroup.mos @@ -0,0 +1,16 @@ +compareVars := + { + "y1.y[1]", + "y1.y[2]", + "chi.m2_flow", + "chi.chi.m2_flow", + "TChiWatSupSet.y", + "chi.sta_a2.T", + "chi.sta_b2.T", + "chi.sta_a1.T", + "chi.sta_b1.T", + "chi.chi.PLR1", + "chi.chi.PLR2", + "dat.PLRMax", + "chi.chi.COP" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerHeatRecoveryGroup.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerHeatRecoveryGroup.mos new file mode 100644 index 00000000000..a04eb87b022 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ChillerHeatRecoveryGroup.mos @@ -0,0 +1,41 @@ +compareVars := + { + "y1.y[1]", + "y1.y[2]", + "y1Coo.y[1]", + "y1Coo.y[2]", + "y1HeaCoo.y[1]", + "y1HeaCoo.y[2]", + "chi.port_a1.m_flow", + "chi.port_a2.m_flow", + "chi.port_a3.m_flow", + "chi.port_a4.m_flow", + "chi.mChiWat_flow_nominal", + "chi.mConWat_flow_nominal", + "floChiWat.m_flow", + "floHeaWat.m_flow", + "chi.chi[1].m1_flow", + "chi.chi[2].m1_flow", + "chi.chi[1].m2_flow", + "chi.chi[2].m2_flow", + "chi.TSet[1]", + "chi.TSet[2]", + "TChiWatSup.T", + "THeaWatSup.T", + "chi.TEvaLvg[1]", + "chi.TEvaLvg[2]", + "chi.TConLvg[1]", + "chi.TConLvg[2]", + "chi.port_a1.m_flow", + "chi.port_b1.m_flow", + "chi.port_a2.m_flow", + "chi.port_b2.m_flow", + "chi.port_a3.m_flow", + "chi.port_b3.m_flow", + "chi.port_a4.m_flow", + "chi.port_b4.m_flow", + "chi.valConSwi[1].y_actual", + "chi.valConSwi[2].y_actual", + "chi.valEvaSwi[1].y_actual", + "chi.valEvaSwi[2].y_actual" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.CoolingTowerGroup.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.CoolingTowerGroup.mos new file mode 100644 index 00000000000..cc70b71ff42 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.CoolingTowerGroup.mos @@ -0,0 +1,14 @@ +compareVars := + { + "y1.y[1]", + "y1.y[2]", + "ctl.y", + "coo.m_flow", + "coo.coo.m_flow", + "coo.mConWatUni_flow_nominal", + "coo.weaBus.TWetBul", + "TConWatSupSet.y", + "TConWatRet.T", + "TConWatSup.T", + "coo.P" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.HeatPumpGroup.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.HeatPumpGroup.mos new file mode 100644 index 00000000000..96f9ee77b5a --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.HeatPumpGroup.mos @@ -0,0 +1,15 @@ +compareVars := + { + "y1.y[1]", + "y1.y[2]", + "heaPum.heaPum.uMod", + "heaPum.m_flow", + "heaPum.heaPum.m1_flow", + "heaPum.mHeaWatUni_flow_nominal", + "heaPum.weaBus.TDryBul", + "THeaWatSupSet.y", + "THeaWatRet.T", + "THeaWatSup.T", + "heaPum.heaPum.PLR", + "heaPum.heaPum.COP" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsDp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsDp.mos new file mode 100644 index 00000000000..d92a6c571e6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsDp.mos @@ -0,0 +1,12 @@ +compareVars := + { + "y1Pum.y[1]", + "y1Pum.y[2]", + "ope.y", + "dpSet.y", + "senRelPre.p_rel", + "senRelPre1.p_rel", + "senMasFlo.m_flow", + "senMasFlo1.m_flow", + "pum.P" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsFlow.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsFlow.mos new file mode 100644 index 00000000000..18dc17827c9 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsFlow.mos @@ -0,0 +1,12 @@ +compareVars := + { + "y1Pum.y[1]", + "y1Pum.y[2]", + "ope.y", + "senRelPre.p_rel", + "senRelPre1.p_rel", + "floSet.y", + "senMasFlo.m_flow", + "senMasFlo1.m_flow", + "pum.P" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsSpeed.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsSpeed.mos new file mode 100644 index 00000000000..9998817c7be --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.MultiplePumpsSpeed.mos @@ -0,0 +1,12 @@ +compareVars := + { + "spe.y", + "y1Pum.y[1]", + "y1Pum.y[2]", + "ope.y", + "senRelPre.p_rel", + "senRelPre1.p_rel", + "senMasFlo.m_flow", + "senMasFlo1.m_flow", + "pum.P" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ValveOpeningFlowBalancing.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ValveOpeningFlowBalancing.mos new file mode 100644 index 00000000000..f89d912dea6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation.ValveOpeningFlowBalancing.mos @@ -0,0 +1,5 @@ +compareVars := + { + "y1", + "y2" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage.mos new file mode 100644 index 00000000000..82e48c3c4cd --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Experimental.DHC.Plants.Combined.Validation.AllElectricCWStorage.mos @@ -0,0 +1,94 @@ +compareVars := + { + "pla.chi.y1[1]", + "pla.chi.y1[2]", + "pla.chiHea.y1[1]", + "pla.chiHea.y1Coo[1]", + "pla.ctl.y1HeaCooChiHea[1]", + "pla.chiHea.y1[2]", + "pla.chiHea.y1Coo[2]", + "pla.ctl.y1HeaCooChiHea[2]", + "pla.ctl.cycTan.idxCycTan", + "pla.ctl.modConLoo.mode", + "pla.chi.m1_flow", + "pla.chi.m2_flow", + "pla.chiHea.m1_flow", + "pla.chiHea.m2_flow", + "pla.chiHea.m3_flow", + "pla.chiHea.m4_flow", + "pla.chi.chi.m2_flow", + "pla.chiHea.chi[1].m2_flow", + "pla.chiHea.chi[2].m2_flow", + "pla.chi.mChiWatUni_flow_nominal", + "pla.chiHea.mChiWatUni_flow_nominal", + "pla.TChiWatSupSet", + "pla.TChiWatPriRet.T", + "pla.TChiWatSup.T", + "pla.chiHea.TEvaLvg[1]", + "pla.chiHea.TEvaLvg[2]", + "pla.pumChiWat.y1[1]", + "pla.pumChiWat.y1[2]", + "pla.pumChiWat.pum.y_actual", + "pla.dpChiWatSet", + "pla.dpChiWat.p_rel", + "pla.pumChiWat.pum.dpMachine", + "pla.pumChiWat.dpPum_nominal", + "pla.mChiWatPri_flow.m_flow", + "pla.mChiWat_flow_nominal", + "pla.chi.m2_flow", + "pla.chiHea.m4_flow", + "pla.mChiWatChi_flow_min", + "pla.chiHea.m1_flow", + "pla.chiHea.m2_flow", + "pla.chiHea.m3_flow", + "pla.chiHea.m4_flow", + "pla.chiHea.chi[1].m1_flow", + "pla.chiHea.chi[2].m1_flow", + "pla.chiHea.mConWatUni_flow_nominal", + "pla.THeaWatSupSet", + "pla.THeaWatPriRet.T", + "pla.THeaWatSup.T", + "pla.chiHea.TConLvg[1]", + "pla.chiHea.TConLvg[2]", + "pla.pumHeaWat.y1[1]", + "pla.pumHeaWat.y1[2]", + "pla.pumHeaWat.pum.y_actual", + "pla.dpHeaWatSet", + "pla.dpHeaWat.p_rel", + "pla.pumHeaWat.pum.dpMachine", + "pla.pumHeaWat.dpPum_nominal", + "pla.mHeaWatPri_flow.m_flow", + "pla.mHeaWat_flow_nominal", + "pla.chiHea.m1_flow", + "pla.mHeaWatChiHea_flow_min", + "pla.pumConWatCon.y1[1]", + "pla.pumConWatCon.y1[2]", + "pla.pumConWatCon.y", + "pla.chi.m1_flow", + "pla.chiHea.m3_flow", + "pla.chiHea.m3_flow_nominal", + "pla.pumConWatEva.y1[1]", + "pla.pumConWatEva.y1[2]", + "pla.pumConWatEva.y", + "pla.chiHea.m2_flow", + "pla.chiHea.m2_flow_nominal", + "pla.heaPum.y1[1]", + "pla.heaPum.y1[2]", + "pla.ctl.THeaPumSet", + "pla.TConWatHeaPumEnt.T", + "pla.TConWatHeaPumLvg.T", + "pla.heaPum.heaPum.m1_flow", + "pla.heaPum.heaPum.m1_flow_nominal", + "pla.TTan[1].T", + "pla.TTan[5].T", + "pla.TTan[10].T", + "pla.chiHea.valConSwi[1].y_actual", + "pla.chiHea.valConSwi[2].y_actual", + "pla.chiHea.valEvaSwi[1].y_actual", + "pla.chiHea.valEvaSwi[2].y_actual", + "pla.TConWatConChiEnt.T", + "pla.TConWatConChiLvg.T", + "pla.TConWatConRet.T", + "pla.TConWatHexCooEnt.T", + "pla.TConWatHexCooLvg.T" + }; diff --git a/Buildings/Resources/Scripts/travis/Makefile b/Buildings/Resources/Scripts/travis/Makefile index 863b358ddbd..0456be0ac5a 100644 --- a/Buildings/Resources/Scripts/travis/Makefile +++ b/Buildings/Resources/Scripts/travis/Makefile @@ -161,14 +161,14 @@ test-dymola: (cd $(ROOT)/Buildings && \ export PYTHONPATH=$(TRAVIS_BUILD_DIR)/Buildings/Resources/Python-Sources && \ export BUILDINGSPY_SKIP_STATISTICS_VERIFICATION='$(BUILDINGSPY_SKIP_STATISTICS_VERIFICATION)' && \ - python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool dymola) + python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool dymola -n $(NPROC)) test-openmodelica: (cd $(ROOT)/Buildings && \ export PYTHONPATH=$(TRAVIS_BUILD_DIR)/Buildings/Resources/Python-Sources && \ - python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool openmodelica --skip-verification) + python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool openmodelica --skip-verification -n $(NPROC)) test-optimica: (cd $(ROOT)/Buildings && \ export PYTHONPATH=$(TRAVIS_BUILD_DIR)/Buildings/Resources/Python-Sources && \ - python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool optimica --skip-verification) + python3 ../bin/runUnitTests.py --batch --single-package $(PACKAGE) --tool optimica --skip-verification -n $(NPROC)) diff --git a/Buildings/package.mo b/Buildings/package.mo index 0e96a30e692..9f17e1f3958 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -233,6 +233,11 @@ The following new libraries have been added: The models are inspired by the ISO 13790:2008 Standard. +Buildings.Experimental.DHC.EnergyTransferStations.Heating + + Package containing models for energy transfer stations used in district heating systems. + + Buildings.Experimental.DHC.Loads.Combined.Examples Package that contains example models of a building @@ -241,6 +246,16 @@ The following new libraries have been added: and free cooling in an ambient district network. +Buildings.Experimental.DHC.Loads.Heating + + Package containing models for loads in district heating systems. + + +Buildings.Experimental.DHC.Plants.Combined + + Package of models for central plants that provide heating and cooling. + + Buildings.Experimental.DHC.BaseClasses.Steam Package for steam systems using the split-medium approach.. From 3dd4a0cf130da981ecd2d1c9883a263f1d886edd Mon Sep 17 00:00:00 2001 From: Casper Fu <91219266+hcasperfu@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:40:46 -0700 Subject: [PATCH 5/9] Issue3479 misc fix (#3480) * fixed typo in Buildings.Fluid.FMI.UsersGuide * improved mover model assert messages * moved connection line to void overlapping The connection line out of returnAir is moved because it overlapped with many other lines. Also slightly moved the fan to straighten connection lines. Slightly moved another connection line out of the chiller so that it is not so close to another line. * fixed typo in equation Corrected an equation in documentaiton where dT should be T. Also rewrote a sentence for clarity. And fixed another minor documentation typo. * fixed typo * fixed broken mos that caused missing figure * corrected mos to remove empty subplot --- .../VAV/ChillerDXHeatingEconomizer.mo | 20 +++++----- .../DHC/Loads/BaseClasses/SimpleRoomODE.mo | 8 ++-- .../Fluid/CHPs/ThermalElectricalFollowing.mo | 2 +- Buildings/Fluid/FMI/UsersGuide.mo | 2 +- .../Movers/BaseClasses/PartialFlowMachine.mo | 6 ++- .../Validation/HeaterCooler_u.mos | 40 ++++++++----------- .../Validation/StratifiedLoadingUnloading.mos | 38 +++++++++++------- 7 files changed, 60 insertions(+), 56 deletions(-) diff --git a/Buildings/Air/Systems/SingleZone/VAV/ChillerDXHeatingEconomizer.mo b/Buildings/Air/Systems/SingleZone/VAV/ChillerDXHeatingEconomizer.mo index 527071ccf21..72c890697f1 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/ChillerDXHeatingEconomizer.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/ChillerDXHeatingEconomizer.mo @@ -132,7 +132,7 @@ model ChillerDXHeatingEconomizer final use_inputFilter=false, redeclare package Medium = MediumA) "Supply fan" - annotation (Placement(transformation(extent={{-30,32},{-10,52}}))); + annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); Buildings.Fluid.FixedResistances.PressureDrop totalRes( final m_flow_nominal=mAir_flow_nominal, final dp_nominal=dp_nominal, @@ -370,9 +370,9 @@ protected end IdealValve; equation - connect(fanSup.port_b, totalRes.port_a) annotation (Line(points={{-10,42}, - {0,42},{0,40},{10,40}}, color={0,127,255})); - connect(fanSup.P, PFan) annotation (Line(points={{-9,51},{-6,51},{-6,150},{ + connect(fanSup.port_b, totalRes.port_a) annotation (Line(points={{-10,40}, + {10,40}}, color={0,127,255})); + connect(fanSup.P, PFan) annotation (Line(points={{-9,49},{-6,49},{-6,150},{ 210,150}}, color={0,0,127})); connect(eff.y, QHea_flow) annotation (Line(points={{141,110},{166,110},{166, 130},{210,130}}, @@ -385,7 +385,7 @@ equation index=-1, extent={{-6,3},{-6,3}})); connect(senTMixAir.port_b, fanSup.port_a) annotation (Line(points={{-40,40}, - {-36,40},{-36,42},{-30,42}}, color={0,127,255})); + {-30,40}}, color={0,127,255})); connect(heaCoi.Q_flow, eff.u) annotation (Line(points={{73,46},{80,46},{80, 110},{118,110}}, color={0,0,127})); connect(heaCoi.port_b, cooCoi.port_a2) annotation (Line(points={{72,40},{90,40}}, color={0,127,255})); @@ -410,7 +410,7 @@ equation extent={{-6,3},{-6,3}})); connect(pumChiWat.P, PPum) annotation (Line(points={{111,-79},{111,-52},{180, -52},{180,90},{210,90}}, color={0,0,127})); - connect(chi.P, PCoo) annotation (Line(points={{89,-177},{84,-177},{84,-128},{ + connect(chi.P, PCoo) annotation (Line(points={{89,-177},{80,-177},{80,-128},{ 98,-128},{98,-50},{178,-50},{178,110},{210,110}}, color={0,0,127})); connect(ideVal.port_2, chi.port_a2) annotation (Line(points={{86,0.2},{86,-162},{90,-162}}, @@ -425,7 +425,7 @@ equation connect(senTSup.port_b, supplyAir) annotation (Line(points={{148,40},{174,40}, {174,60},{202,60}}, color={0,127,255})); connect(gaiFan.y, fanSup.m_flow_in) annotation (Line(points={{-59,140},{ - -20,140},{-20,54}}, color={0,0,127})); + -20,140},{-20,52}}, color={0,0,127})); connect(booToInt.y, pumChiWat.m_flow_in) annotation (Line(points={{81,-90},{108,-90}}, color={0,0,127})); connect(booToInt.u, chiOn) annotation (Line(points={{58,-90},{40,-90},{40,-120}, {-220,-120}}, color={255,0,255})); @@ -455,10 +455,10 @@ equation connect(TRet, senTRetAir.T) annotation (Line(points={{210,-80},{174,-80},{174, -20},{-30,-20},{-30,-29}}, color={0,0,127})); connect(senTRetAir.port_a, senTraSub.port_b) annotation (Line(points={{-20,-40},{20,-40}}, color={0,127,255})); - connect(senTraSub.port_a, returnAir) annotation (Line(points={{40,-40},{120,-40},{120,-20},{202,-20}}, - color={0,127,255})); + connect(senTraSub.port_a, returnAir) annotation (Line(points={{40,-40},{192, + -40},{192,-20},{202,-20}}, color={0,127,255})); - connect(fanSup.y_actual, y_actual) annotation (Line(points={{-9,49},{0,49},{0, + connect(fanSup.y_actual, y_actual) annotation (Line(points={{-9,47},{0,47},{0, 172},{210,172}}, color={0,0,127})); annotation (defaultComponentName="chiDXHeaEco", Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-220}, diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/SimpleRoomODE.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/SimpleRoomODE.mo index 0a206555d8e..9eb42ef71f9 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/SimpleRoomODE.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/SimpleRoomODE.mo @@ -70,11 +70,11 @@ infiltration and ventilation) is assessed from the steady-state energy balance at heating nominal conditions as

      -0 = Q̇heating, nom + G (dTout, heating, nom - Tind, heating, nom). +0 = Q̇heating, nom + G (Tout, heating, nom - Tind, heating, nom).

      -Note that it is important for the model representativeness that -Q̇heating, nom be evaluated in close to steady-state conditions +Note that for model representativeness, it is important +for Q̇heating, nom to be evaluated in close to steady-state conditions with no internal heat gains and no solar heat gains.

      @@ -91,7 +91,7 @@ G (Tout - Tind, set) + Q̇various,

      -where various represent the miscellaneous heat gains. +where various represents the miscellaneous heat gains. The indoor temperature variation rate due to an unmet load is given by

      diff --git a/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo b/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo index 0099bb327ec..df4ff5f1490 100644 --- a/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo +++ b/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo @@ -150,7 +150,7 @@ model ThermalElectricalFollowing "CHP model that can be thermal or electrical lo final Td=Td, final yMax=1, final yMin=0) if switchThermalElectricalFollowing - "Cooling water outplet controller" + "Cooling water outlet controller" annotation (Placement(transformation(extent={{-60,340},{-40,360}}))); Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter elePowDem( final k=per.PEleMax) if switchThermalElectricalFollowing diff --git a/Buildings/Fluid/FMI/UsersGuide.mo b/Buildings/Fluid/FMI/UsersGuide.mo index 8107321204f..9c6068c3fcd 100644 --- a/Buildings/Fluid/FMI/UsersGuide.mo +++ b/Buildings/Fluid/FMI/UsersGuide.mo @@ -249,7 +249,7 @@ The model Buildings.Fluid.Movers.FlowControlled_m_flow cannot be exported as an FMU. -This is because it assignes the mass flow rate. +This is because it assigns the mass flow rate. However, the input connector Buildings.Fluid.FMI.Interfaces.Inlet diff --git a/Buildings/Fluid/Movers/BaseClasses/PartialFlowMachine.mo b/Buildings/Fluid/Movers/BaseClasses/PartialFlowMachine.mo index fb8622e920a..e8fec9e99f0 100644 --- a/Buildings/Fluid/Movers/BaseClasses/PartialFlowMachine.mo +++ b/Buildings/Fluid/Movers/BaseClasses/PartialFlowMachine.mo @@ -422,7 +422,8 @@ Set nominalValuesDefineDefaultPressureCurve=true to suppress this warning.", "*** Warning in " + getInstanceName() + ": Mover has per.etaHydMet=.Power_VolumeFlowRate or per.etaHydMet=.EulerNumber. This requires per.pressure to be provided. -Because it is not, the model overrides this setting by using per.etaHydMet=.NotProvided.", +Because it is not, the model overrides this setting by using per.etaHydMet=.NotProvided. +Also consider using models under Movers.Preconfigured which autopopulate a pressure curve.", level=AssertionLevel.warning); assert(per.havePressureCurve or per.haveWMot_nominal or @@ -433,7 +434,8 @@ Because it is not, the model overrides this setting by using per.etaHydMet=.NotP "*** Warning in " + getInstanceName() + ": Mover has per.etaMotMet=.Efficiency_MotorPartLoadRatio or per.etaMotMet=.GenericCurve. This requires per.WMot_nominal or per.pressure to be provided. Because neither is provided, -the model overrides this setting and by using per.etaMotMet=.NotProvided.", +the model overrides this setting and by using per.etaMotMet=.NotProvided. +Also consider using models under Movers.Preconfigured which autopopulate a pressure curve.", level=AssertionLevel.warning); assert(per.powerOrEfficiencyIsHydraulic or diff --git a/Buildings/Resources/Scripts/Dymola/Fluid/HeatExchangers/Validation/HeaterCooler_u.mos b/Buildings/Resources/Scripts/Dymola/Fluid/HeatExchangers/Validation/HeaterCooler_u.mos index dba10857c4b..e7fdc8fcf05 100644 --- a/Buildings/Resources/Scripts/Dymola/Fluid/HeatExchangers/Validation/HeaterCooler_u.mos +++ b/Buildings/Resources/Scripts/Dymola/Fluid/HeatExchangers/Validation/HeaterCooler_u.mos @@ -1,24 +1,18 @@ simulateModel("Buildings.Fluid.HeatExchangers.Validation.HeaterCooler_u", method="CVode", tolerance=1e-6, stopTime=1200, resultFile="HeaterCooler_u"); -createPlot(id = 1, - position = {78, 39, 400, 444}, - y = {"con1.u_s", "con1.u_m", "con2.u_m"}, - range = {0.0, 1200.0, 35.0, 15.0}, - autoscale = true, - autoerase = true, - autoreplot = true, - grid = true, - color = true, - leftTitleType = 1, - bottomTitleType = 1); -createPlot(id = 20, - position = {78, 39, 400, 219}, - y = {"con1.y", "con2.y"}, - range = {0.0, 1200.0, 1.5, -0.5}, - autoscale = true, - autoerase = true, - autoreplot = true, - grid = true, - color = true, - subPlot = 2, - leftTitleType = 1, - bottomTitleType = 1); +createPlot(id=1, + position={125, 65, 400, 447}, + y={"con1.u_s", "con1.u_m", "con2.u_m"}, + range={0.0, 1200.0, 290.0, 305.0}, + grid=true, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}}, + timeUnit="s"); +createPlot(id=1, + position={125, 65, 400, 447}, + y={"con1.y", "con2.y"}, + range={0.0, 1200.0, -0.5, 1.5}, + grid=true, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s"); + diff --git a/Buildings/Resources/Scripts/Dymola/Fluid/Storage/Validation/StratifiedLoadingUnloading.mos b/Buildings/Resources/Scripts/Dymola/Fluid/Storage/Validation/StratifiedLoadingUnloading.mos index 8217c0ad245..434ad5b9105 100644 --- a/Buildings/Resources/Scripts/Dymola/Fluid/Storage/Validation/StratifiedLoadingUnloading.mos +++ b/Buildings/Resources/Scripts/Dymola/Fluid/Storage/Validation/StratifiedLoadingUnloading.mos @@ -1,9 +1,12 @@ simulateModel("Buildings.Fluid.Storage.Validation.StratifiedLoadingUnloading", tolerance=1e-6, stopTime=14400, method="CVode", resultFile="StratifiedLoadingUnloading"); -createPlot(id = 1, - position = {10, 30, 719, 600}, - filename = "StratifiedLoadingUnloading.mat", - y = {"tanEnh.vol[1].T", "tanEnh.vol[2].T", "tanEnh.vol[3].T", "tanEnh.vol[4].T", "tanEnh.vol[5].T", "tanEnh.vol[6].T", "tanEnh.vol[7].T"}, - range = {0, 15000.0, 55.0, 15.0}, +createPlot(id=1, + position={10, 30, 719, 603}, + y={"tanEnh.vol[1].T", "tanEnh.vol[2].T", "tanEnh.vol[3].T", "tanEnh.vol[4].T", "tanEnh.vol[5].T", "tanEnh.vol[6].T", "tanEnh.vol[7].T"}, + range={0.0, 15000.0, 10.0, 50.0}, + subPlot=101, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}, {162,29,33}, {244,125,35}}, + timeUnit="s", + displayUnits={"degC", "degC", "degC", "degC", "degC", "degC", "degC"}, autoscale = true, autoerase = true, autoreplot = true, @@ -11,27 +14,32 @@ createPlot(id = 1, color = true, leftTitleType = 1, bottomTitleType = 1); -createPlot(id = 1, - position = {10, 30, 719, 200}, - y = {"dHTan.y", "dHTanEnh.y"}, - range = {0, 14500.0, 60.0, 10.0}, +createPlot(id=1, + position={10, 30, 719, 603}, + y={"dHTan.y", "dHTanEnh.y"}, + range={0.0, 15000.0, -5000000.0, 10000000.0}, + subPlot=102, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", autoscale = true, autoerase = true, autoreplot = true, grid = true, color = true, - subPlot = 3, leftTitleType = 1, bottomTitleType = 1); -createPlot(id = 1, - position = {10, 30, 719, 200}, - y = {"tan.vol[1].T", "tan.vol[2].T", "tan.vol[3].T", "tan.vol[4].T", "tan.vol[5].T", "tan.vol[6].T", "tan.vol[7].T"}, - range = {0, 14500.0, 60.0, 10.0}, +createPlot(id=1, + position={10, 30, 719, 603}, + y={"tan.vol[1].T", "tan.vol[2].T", "tan.vol[3].T", "tan.vol[4].T", "tan.vol[5].T","tan.vol[6].T", "tan.vol[7].T"}, + range={0.0, 15000.0, 10.0, 50.0}, + subPlot=103, + colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}, {162,29,33}, {244,125,35}}, + timeUnit="s", + displayUnits={"degC", "degC", "degC", "degC", "degC", "degC", "degC"}, autoscale = true, autoerase = true, autoreplot = true, grid = true, color = true, - subPlot = 2, leftTitleType = 1, bottomTitleType = 1); From f2bb4670f66b6385b3081fc1fcd70e6c6a131323 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 25 Aug 2023 18:23:00 -0700 Subject: [PATCH 6/9] Change to latest BuildingsPy (#3472) * Change to latest BuildingsPy This version of BuildingsPy refactors the regression tests --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3150d87b376..08a0dc61da6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ services: env: global: - - BUILDINGSPY_VERSION=BuildingsPy@50ac74d8e4fd067179bb38bc23140c2c9254c94c + - BUILDINGSPY_VERSION=BuildingsPy@7de32eb4b1bd77738dccd0cf9f7fa44b25fd51a2 - OMC_VERSION=ubuntu-2204-omc:1.22.0_dev-41-g8a5b18f-1 - OPTIMICA_VERSION=travis-ubuntu-2204-optimica:1.43.4 - DYMOLA_VERSION=travis_ubuntu-2004_dymola:2023x-x86_64_rev-1 From 0d53db3e879982889a0449f0ac8fa88c0e2f731d Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Tue, 29 Aug 2023 09:36:50 -0700 Subject: [PATCH 7/9] Issue3483 cdl reals (#3486) * Renamed CDL.Continuous to CDL.Reals For #3483 --- .../ControllerChillerDXHeatingEconomizer.mo | 10 +- .../VAV/BaseClasses/ControllerEconomizer.mo | 6 +- .../ControllerChillerDXHeatingEconomizer.mo | 4 +- .../VAV/Examples/BaseClasses/Room.mo | 6 +- .../Examples/ChillerDXHeatingEconomizer.mo | 4 +- .../SingleZone/VAV/Examples/Guideline36.mo | 12 +- .../BaseClasses/ZoneWithAHUG36.mo | 12 +- .../OptimalStart/ConventionalSpring.mo | 12 +- .../OptimalStart/Guideline36Spring.mo | 6 +- .../BaseClasses/PartialPumpParallel.mo | 8 +- .../Examples/BaseClasses/PartialDataCenter.mo | 4 +- .../DXCooled/Controls/AirsideEconomizer.mo | 4 +- .../DXCooled/Controls/Compressor.mo | 4 +- .../VAV/Economizers/Subsequences/Enable.mo | 16 +-- .../Economizers/Subsequences/Limits/Common.mo | 24 ++-- .../Subsequences/Limits/SeparateWithAFMS.mo | 48 +++---- .../Subsequences/Limits/SeparateWithDP.mo | 56 ++++---- .../Limits/Validation/Common_LoopDisable.mo | 8 +- .../Limits/Validation/Common_VOut_flow.mo | 4 +- .../Limits/Validation/SeparateWithAFMS.mo | 24 ++-- .../Limits/Validation/SeparateWithDP.mo | 24 ++-- .../Subsequences/Modulations/Reliefs.mo | 16 +-- .../Subsequences/Modulations/ReturnFan.mo | 12 +- .../Modulations/Validation/Reliefs.mo | 10 +- .../Modulations/Validation/ReturnFan.mo | 6 +- .../Validation/Enable_FreProSta.mo | 18 +-- .../Validation/Enable_TOut_hOut.mo | 22 ++-- .../Validation/Controller_Disable.mo | 10 +- .../Validation/Controller_Mod_DamLim.mo | 12 +- .../VAV/SetPoints/FreezeProtection.mo | 82 ++++++------ .../OutdoorAirFlow/ASHRAE62_1/AHU.mo | 30 ++--- .../OutdoorAirFlow/ASHRAE62_1/SumZone.mo | 32 ++--- .../ASHRAE62_1/Validation/OutdoorAirFlow.mo | 10 +- .../SetPoints/OutdoorAirFlow/Title24/AHU.mo | 30 ++--- .../OutdoorAirFlow/Title24/SumZone.mo | 14 +- .../Title24/Validation/OutdoorAirFlow.mo | 8 +- .../MultiZone/VAV/SetPoints/PlantRequests.mo | 24 ++-- .../MultiZone/VAV/SetPoints/ReliefDamper.mo | 12 +- .../AHUs/MultiZone/VAV/SetPoints/ReliefFan.mo | 20 +-- .../MultiZone/VAV/SetPoints/ReliefFanGroup.mo | 74 +++++------ .../VAV/SetPoints/ReturnFanAirflowTracking.mo | 10 +- .../VAV/SetPoints/ReturnFanDirectPressure.mo | 40 +++--- .../AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo | 12 +- .../MultiZone/VAV/SetPoints/SupplySignals.mo | 18 +-- .../VAV/SetPoints/SupplyTemperature.mo | 20 +-- .../SetPoints/Validation/FreezeProtection.mo | 20 +-- .../Validation/FreezeProtection_Disable.mo | 14 +- .../VAV/SetPoints/Validation/PlantRequests.mo | 14 +- .../VAV/SetPoints/Validation/ReliefDamper.mo | 2 +- .../VAV/SetPoints/Validation/ReliefFan.mo | 6 +- .../SetPoints/Validation/ReliefFanGroup.mo | 10 +- .../Validation/ReturnFanAirflowTracking.mo | 4 +- .../Validation/ReturnFanDirectPressure.mo | 2 +- .../VAV/SetPoints/Validation/SupplyFan.mo | 14 +- .../VAV/SetPoints/Validation/SupplySignals.mo | 4 +- .../SetPoints/Validation/SupplyTemperature.mo | 12 +- .../MultiZone/VAV/Validation/Controller.mo | 40 +++--- .../Controller_UnspecifiedClimate.mo | 40 +++--- .../G36/AHUs/SingleZone/VAV/Controller.mo | 4 +- .../VAV/Economizers/Subsequences/Enable.mo | 16 +-- .../VAV/Economizers/Subsequences/Limits.mo | 36 +++--- .../Economizers/Subsequences/Modulation.mo | 22 ++-- .../Validation/Enable_FreProSta_ZonSta.mo | 12 +- .../Validation/Enable_TOut_hOut.mo | 16 +-- .../Subsequences/Validation/Limits_Disable.mo | 4 +- .../Validation/Limits_FanSpe_VOut_flow.mo | 8 +- .../Validation/Modulation_TSup.mo | 12 +- .../Validation/Controller_Disable.mo | 12 +- .../Validation/Controller_Mod_DamLim.mo | 14 +- .../SingleZone/VAV/SetPoints/CoolingCoil.mo | 6 +- .../VAV/SetPoints/FreezeProtection.mo | 72 +++++------ .../SingleZone/VAV/SetPoints/PlantRequests.mo | 24 ++-- .../SingleZone/VAV/SetPoints/ReliefDamper.mo | 14 +- .../SingleZone/VAV/SetPoints/ReliefFan.mo | 20 +-- .../VAV/SetPoints/ReliefFanGroup.mo | 74 +++++------ .../SingleZone/VAV/SetPoints/ReturnFan.mo | 6 +- .../AHUs/SingleZone/VAV/SetPoints/Supply.mo | 80 ++++++------ .../VAV/SetPoints/Validation/CoolingCoil.mo | 6 +- .../SetPoints/Validation/FreezeProtection.mo | 18 +-- .../Validation/FreezeProtection_Disable.mo | 12 +- .../SetPoints/Validation/ModeAndSetPoints.mo | 30 ++--- .../VAV/SetPoints/Validation/PlantRequests.mo | 16 +-- .../VAV/SetPoints/Validation/ReliefDamper.mo | 4 +- .../VAV/SetPoints/Validation/ReliefFan.mo | 6 +- .../SetPoints/Validation/ReliefFanGroup.mo | 10 +- .../VAV/SetPoints/Validation/ReturnFan.mo | 4 +- .../VAV/SetPoints/Validation/Supply_T.mo | 14 +- .../VAV/SetPoints/Validation/Supply_u.mo | 14 +- .../SingleZone/VAV/Validation/Controller.mo | 36 +++--- .../G36/Generic/AirEconomizerHighLimits.mo | 82 ++++++------ .../OBC/ASHRAE/G36/Generic/TimeSuppression.mo | 28 ++-- .../OBC/ASHRAE/G36/Generic/TrimAndRespond.mo | 58 ++++----- .../Validation/AirEconomizerHighLimits.mo | 4 +- .../G36/Generic/Validation/TimeSuppression.mo | 4 +- .../G36/Generic/Validation/TrimAndRespond.mo | 16 +-- .../CoolingOnly/Subsequences/ActiveAirFlow.mo | 2 +- .../CoolingOnly/Subsequences/Alarms.mo | 22 ++-- .../CoolingOnly/Subsequences/Dampers.mo | 30 ++--- .../Subsequences/SystemRequests.mo | 22 ++-- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 8 +- .../Subsequences/Validation/Dampers.mo | 24 ++-- .../Subsequences/Validation/SystemRequests.mo | 12 +- .../CoolingOnly/Validation/Controller.mo | 28 ++-- .../DualDuctColdDuctMin/Controller.mo | 8 +- .../Subsequences/ActiveAirFlow.mo | 10 +- .../Subsequences/Alarms.mo | 32 ++--- .../Subsequences/Dampers.mo | 60 ++++----- .../Subsequences/Overrides.mo | 16 +-- .../Subsequences/SystemRequests.mo | 48 +++---- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 14 +- .../Subsequences/Validation/Dampers.mo | 20 +-- .../Subsequences/Validation/Overrides.mo | 18 +-- .../Subsequences/Validation/SystemRequests.mo | 22 ++-- .../Validation/Controller.mo | 36 +++--- .../Subsequences/ActiveAirFlow.mo | 2 +- .../Subsequences/Alarms.mo | 24 ++-- .../Subsequences/Dampers.mo | 68 +++++----- .../Subsequences/Overrides.mo | 16 +-- .../Subsequences/SystemRequests.mo | 44 +++---- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 12 +- .../Subsequences/Validation/Dampers.mo | 18 +-- .../Subsequences/Validation/Overrides.mo | 18 +-- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../Validation/Controller.mo | 34 ++--- .../Subsequences/ActiveAirFlow.mo | 2 +- .../Subsequences/Alarms.mo | 32 ++--- .../Subsequences/Dampers.mo | 68 +++++----- .../Subsequences/Overrides.mo | 16 +-- .../Subsequences/SystemRequests.mo | 48 +++---- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 14 +- .../Subsequences/Validation/Dampers.mo | 20 +-- .../Subsequences/Validation/Overrides.mo | 18 +-- .../Subsequences/Validation/SystemRequests.mo | 22 ++-- .../Validation/Controller.mo | 36 +++--- .../Subsequences/ActiveAirFlow.mo | 2 +- .../DualDuctSnapActing/Subsequences/Alarms.mo | 38 +++--- .../Subsequences/DampersDualSensors.mo | 76 +++++------ .../Subsequences/DampersSingleSensors.mo | 48 +++---- .../Subsequences/Overrides.mo | 16 +-- .../Subsequences/SystemRequests.mo | 48 +++---- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 14 +- .../Validation/DampersDualSensors.mo | 20 +-- .../Validation/DampersSingleSensors.mo | 12 +- .../Subsequences/Validation/Overrides.mo | 18 +-- .../Subsequences/Validation/SystemRequests.mo | 26 ++-- .../Validation/Controller.mo | 36 +++--- .../Subsequences/ActiveAirFlow.mo | 2 +- .../ParallelFanCVF/Subsequences/Alarms.mo | 40 +++--- .../Subsequences/DamperValves.mo | 54 ++++---- .../ParallelFanCVF/Subsequences/Overrides.mo | 6 +- .../Subsequences/SystemRequests.mo | 34 ++--- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 16 +-- .../Subsequences/Validation/DamperValves.mo | 30 ++--- .../Subsequences/Validation/Overrides.mo | 12 +- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../ParallelFanCVF/Validation/Controller.mo | 36 +++--- .../ParallelFanVVF/Controller.mo | 2 +- .../Subsequences/ActiveAirFlow.mo | 2 +- .../ParallelFanVVF/Subsequences/Alarms.mo | 40 +++--- .../Subsequences/DamperValves.mo | 88 ++++++------- .../ParallelFanVVF/Subsequences/Overrides.mo | 6 +- .../Subsequences/SystemRequests.mo | 34 ++--- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 16 +-- .../Subsequences/Validation/DamperValves.mo | 30 ++--- .../Subsequences/Validation/Overrides.mo | 12 +- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../ParallelFanVVF/Validation/Controller.mo | 36 +++--- .../Reheat/Subsequences/ActiveAirFlow.mo | 22 ++-- .../Reheat/Subsequences/Alarms.mo | 40 +++--- .../Reheat/Subsequences/DamperValves.mo | 78 +++++------ .../Reheat/Subsequences/Overrides.mo | 6 +- .../Reheat/Subsequences/SystemRequests.mo | 34 ++--- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Reheat/Subsequences/Validation/Alarms.mo | 16 +-- .../Subsequences/Validation/DamperValves.mo | 34 ++--- .../Subsequences/Validation/Overrides.mo | 8 +- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../Reheat/Validation/Controller.mo | 32 ++--- .../Subsequences/ActiveAirFlow.mo | 2 +- .../SeriesFanCVF/Subsequences/Alarms.mo | 40 +++--- .../SeriesFanCVF/Subsequences/DamperValves.mo | 52 ++++---- .../SeriesFanCVF/Subsequences/Overrides.mo | 6 +- .../Subsequences/SystemRequests.mo | 34 ++--- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 16 +-- .../Subsequences/Validation/DamperValves.mo | 30 ++--- .../Subsequences/Validation/Overrides.mo | 12 +- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../SeriesFanCVF/Validation/Controller.mo | 36 +++--- .../TerminalUnits/SeriesFanVVF/Controller.mo | 2 +- .../Subsequences/ActiveAirFlow.mo | 2 +- .../SeriesFanVVF/Subsequences/Alarms.mo | 40 +++--- .../SeriesFanVVF/Subsequences/DamperValves.mo | 72 +++++------ .../SeriesFanVVF/Subsequences/Overrides.mo | 6 +- .../Subsequences/SystemRequests.mo | 34 ++--- .../Subsequences/Validation/ActiveAirFlow.mo | 6 +- .../Subsequences/Validation/Alarms.mo | 16 +-- .../Subsequences/Validation/DamperValves.mo | 32 ++--- .../Subsequences/Validation/Overrides.mo | 12 +- .../Subsequences/Validation/SystemRequests.mo | 18 +-- .../SeriesFanVVF/Validation/Controller.mo | 36 +++--- .../OBC/ASHRAE/G36/ThermalZones/Alarms.mo | 18 +-- .../ASHRAE/G36/ThermalZones/ControlLoops.mo | 16 +-- .../OBC/ASHRAE/G36/ThermalZones/Setpoints.mo | 120 ++++++++--------- .../G36/ThermalZones/Validation/Alarms.mo | 12 +- .../ThermalZones/Validation/ControlLoops.mo | 6 +- .../G36/ThermalZones/Validation/Setpoints.mo | 22 ++-- .../G36/ThermalZones/Validation/ZoneStates.mo | 4 +- .../OBC/ASHRAE/G36/ThermalZones/ZoneStates.mo | 8 +- .../VentilationZones/ASHRAE62_1/Setpoints.mo | 60 ++++----- .../ASHRAE62_1/Validation/Setpoints.mo | 16 +-- .../G36/VentilationZones/Title24/Setpoints.mo | 56 ++++---- .../Title24/Validation/Setpoints.mo | 12 +- .../OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo | 30 ++--- .../ASHRAE/G36/ZoneGroups/OperationMode.mo | 50 +++---- .../G36/ZoneGroups/Validation/GroupStatus.mo | 30 ++--- .../ZoneGroups/Validation/OperationMode.mo | 36 +++--- .../G36/ZoneGroups/Validation/ZoneStatus.mo | 20 +-- .../Validation/ZoneStatusDuplicator.mo | 2 +- .../ASHRAE/G36/ZoneGroups/ZoneGroupSystem.mo | 2 +- .../OBC/ASHRAE/G36/ZoneGroups/ZoneStatus.mo | 28 ++-- Buildings/Controls/OBC/ASHRAE/G36/package.mo | 4 +- .../Conversions/Validation/IntegerToReal.mo | 4 +- .../Conversions/Validation/RealToInteger.mo | 2 +- .../CDL/Discrete/Examples/FirstOrderHold.mo | 4 +- .../OBC/CDL/Discrete/Examples/Sampler.mo | 4 +- .../OBC/CDL/Discrete/Examples/TriggeredMax.mo | 4 +- .../Discrete/Examples/TriggeredMovingMean.mo | 2 +- .../CDL/Discrete/Examples/TriggeredSampler.mo | 4 +- .../OBC/CDL/Discrete/Examples/UnitDelay.mo | 4 +- .../CDL/Discrete/Examples/ZeroOrderHold.mo | 4 +- .../OBC/CDL/Integers/Validation/Abs.mo | 4 +- .../OBC/CDL/Integers/Validation/Add.mo | 8 +- .../CDL/Integers/Validation/AddParameter.mo | 4 +- .../OBC/CDL/Integers/Validation/Change.mo | 4 +- .../OBC/CDL/Integers/Validation/Equal.mo | 4 +- .../OBC/CDL/Integers/Validation/Greater.mo | 8 +- .../CDL/Integers/Validation/GreaterEqual.mo | 4 +- .../Validation/GreaterEqualThreshold.mo | 4 +- .../Integers/Validation/GreaterThreshold.mo | 4 +- .../OBC/CDL/Integers/Validation/Less.mo | 4 +- .../OBC/CDL/Integers/Validation/LessEqual.mo | 8 +- .../Integers/Validation/LessEqualThreshold.mo | 4 +- .../CDL/Integers/Validation/LessThreshold.mo | 4 +- .../OBC/CDL/Integers/Validation/Max.mo | 8 +- .../OBC/CDL/Integers/Validation/Min.mo | 8 +- .../OBC/CDL/Integers/Validation/MultiSum.mo | 12 +- .../OBC/CDL/Integers/Validation/Multiply.mo | 4 +- .../OBC/CDL/Integers/Validation/Stage.mo | 4 +- .../OBC/CDL/Integers/Validation/Subtract.mo | 8 +- .../Sources/Validation/SampleTrigger.mo | 2 +- .../SampleTriggerNegativeStartTime.mo | 2 +- .../SampleTriggerPositiveStartTime.mo | 2 +- .../OBC/CDL/Logical/Validation/Change.mo | 2 +- .../OBC/CDL/Logical/Validation/Edge.mo | 2 +- .../OBC/CDL/Logical/Validation/FallingEdge.mo | 2 +- .../CDL/Logical/Validation/OnOffController.mo | 6 +- .../CDL/Logical/Validation/VariablePulse.mo | 14 +- .../Validation/VariablePulseMinHold.mo | 2 +- .../CDL/Logical/Validation/ZeroCrossing.mo | 6 +- .../Controls/OBC/CDL/Logical/VariablePulse.mo | 6 +- .../Validation/DewPoint_TDryBulPhi.mo | 8 +- .../Validation/SpecificEnthalpy_TDryBulPhi.mo | 4 +- .../Validation/WetBulb_TDryBulPhi.mo | 8 +- .../OBC/CDL/{Continuous => Reals}/Abs.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Acos.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Add.mo | 2 +- .../CDL/{Continuous => Reals}/AddParameter.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Asin.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Atan.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Atan2.mo | 8 +- .../OBC/CDL/{Continuous => Reals}/Average.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Cos.mo | 4 +- .../CDL/{Continuous => Reals}/Derivative.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Divide.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Exp.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Greater.mo | 2 +- .../{Continuous => Reals}/GreaterThreshold.mo | 2 +- .../CDL/{Continuous => Reals}/Hysteresis.mo | 4 +- .../IntegratorWithReset.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Less.mo | 2 +- .../{Continuous => Reals}/LessThreshold.mo | 2 +- .../{Continuous => Reals}/LimitSlewRate.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Limiter.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Line.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Log.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Log10.mo | 4 +- .../CDL/{Continuous => Reals}/MatrixGain.mo | 2 +- .../CDL/{Continuous => Reals}/MatrixMax.mo | 2 +- .../CDL/{Continuous => Reals}/MatrixMin.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Max.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Min.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Modulo.mo | 2 +- .../{Continuous => Reals}/MovingAverage.mo | 10 +- .../OBC/CDL/{Continuous => Reals}/MultiMax.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/MultiMin.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/MultiSum.mo | 6 +- .../OBC/CDL/{Continuous => Reals}/Multiply.mo | 2 +- .../MultiplyByParameter.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/PID.mo | 42 +++--- .../CDL/{Continuous => Reals}/PIDWithReset.mo | 40 +++--- .../OBC/CDL/{Continuous => Reals}/Ramp.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Round.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Sin.mo | 4 +- .../OBC/CDL/{Continuous => Reals}/Sort.mo | 2 +- .../Sources/CalendarTime.mo | 2 +- .../{Continuous => Reals}/Sources/Constant.mo | 4 +- .../Sources/ModelTime.mo | 2 +- .../{Continuous => Reals}/Sources/Pulse.mo | 4 +- .../CDL/{Continuous => Reals}/Sources/Ramp.mo | 4 +- .../CDL/{Continuous => Reals}/Sources/Sin.mo | 8 +- .../Sources/TimeTable.mo | 2 +- .../Sources/Validation/CalendarTimeMonths.mo | 10 +- .../Validation/CalendarTimeMonthsMinus.mo | 14 +- .../Validation/CalendarTimeMonthsPlus.mo | 14 +- .../Sources/Validation/Constant.mo | 10 +- .../Sources/Validation/Pulse.mo | 10 +- .../Sources/Validation/Ramp.mo | 10 +- .../Sources/Validation/Sin.mo | 10 +- .../Sources/Validation/StandardTime.mo | 6 +- .../Sources/Validation/TimeTable.mo | 14 +- .../Validation/TimeTableNegativeStartTime.mo | 22 ++-- .../Sources/Validation/package.mo | 6 +- .../Sources/Validation/package.order | 0 .../{Continuous => Reals}/Sources/package.mo | 2 +- .../Sources/package.order | 0 .../OBC/CDL/{Continuous => Reals}/Sqrt.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Subtract.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Switch.mo | 2 +- .../OBC/CDL/{Continuous => Reals}/Tan.mo | 4 +- .../{Continuous => Reals}/Validation/Abs.mo | 16 +-- .../{Continuous => Reals}/Validation/Acos.mo | 12 +- .../{Continuous => Reals}/Validation/Add.mo | 14 +- .../Validation/AddParameter.mo | 12 +- .../{Continuous => Reals}/Validation/Asin.mo | 12 +- .../{Continuous => Reals}/Validation/Atan.mo | 12 +- .../{Continuous => Reals}/Validation/Atan2.mo | 14 +- .../Validation/Average.mo | 14 +- .../{Continuous => Reals}/Validation/Cos.mo | 12 +- .../Validation/Derivative.mo | 34 ++--- .../Validation/Divide.mo | 14 +- .../{Continuous => Reals}/Validation/Exp.mo | 12 +- .../Validation/Greater.mo | 16 +-- .../Validation/GreaterThreshold.mo | 14 +- .../Validation/Hysteresis.mo | 24 ++-- .../Validation/IntegratorWithReset.mo | 18 +-- .../{Continuous => Reals}/Validation/Less.mo | 16 +-- .../Validation/LessThreshold.mo | 14 +- .../Validation/LimitSlewRate.mo | 40 +++--- .../Validation/Limiter.mo | 12 +- .../{Continuous => Reals}/Validation/Line.mo | 24 ++-- .../{Continuous => Reals}/Validation/Log.mo | 12 +- .../{Continuous => Reals}/Validation/Log10.mo | 12 +- .../Validation/MatrixGain.mo | 18 +-- .../Validation/MatrixMax.mo | 20 +-- .../Validation/MatrixMin.mo | 20 +-- .../{Continuous => Reals}/Validation/Max.mo | 14 +- .../{Continuous => Reals}/Validation/Min.mo | 14 +- .../Validation/Modulo.mo | 14 +- .../Validation/MovingAverage.mo | 32 ++--- .../Validation/MovingAverage_nonZeroStart.mo | 26 ++-- .../Validation/MultiMax.mo | 12 +- .../Validation/MultiMin.mo | 12 +- .../Validation/MultiSum.mo | 26 ++-- .../Validation/Multiply.mo | 14 +- .../Validation/MultiplyByParameter.mo | 12 +- .../{Continuous => Reals}/Validation/PID.mo | 22 ++-- .../Validation/PIDInitialDerivativeOutput.mo | 20 +-- .../Validation/PIDInitialState.mo | 16 +-- .../Validation/PIDScale.mo | 24 ++-- .../Validation/PIDWithReset.mo | 30 ++--- .../Validation/PIDWithResetScale.mo | 24 ++-- .../{Continuous => Reals}/Validation/Ramp.mo | 22 ++-- .../{Continuous => Reals}/Validation/Round.mo | 20 +-- .../{Continuous => Reals}/Validation/Sin.mo | 12 +- .../{Continuous => Reals}/Validation/Sort.mo | 22 ++-- .../{Continuous => Reals}/Validation/Sqrt.mo | 12 +- .../Validation/Subtract.mo | 14 +- .../Validation/Switch.mo | 14 +- .../{Continuous => Reals}/Validation/Tan.mo | 12 +- .../Validation/package.mo | 6 +- .../Validation/package.order | 0 .../OBC/CDL/{Continuous => Reals}/package.mo | 4 +- .../CDL/{Continuous => Reals}/package.order | 0 .../Validation/IntegerScalarReplicator.mo | 2 +- .../Validation/IntegerVectorReplicator.mo | 2 +- .../Routing/Validation/RealExtractSignal.mo | 10 +- .../CDL/Routing/Validation/RealExtractor.mo | 10 +- .../Validation/RealScalarReplicator.mo | 2 +- .../Routing/Validation/RealVectorFilter.mo | 2 +- .../Validation/RealVectorReplicator.mo | 2 +- Buildings/Controls/OBC/CDL/Types/ZeroTime.mo | 4 +- Buildings/Controls/OBC/CDL/package.order | 2 +- .../HighMassSupplyTemperature_TRoomRelHum.mo | 16 +-- .../HighMassSupplyTemperature_TSurRelHum.mo | 18 +-- .../HighMassSupplyTemperature_TRoomRelHum.mo | 4 +- .../HighMassSupplyTemperature_TSurRelHum.mo | 6 +- .../HighMassSupplyTemperature_TRoom.mo | 14 +- .../HighMassSupplyTemperature_TRoom.mo | 4 +- Buildings/Controls/OBC/Shade/Shade_H.mo | 2 +- Buildings/Controls/OBC/Shade/Shade_T.mo | 2 +- .../Controls/OBC/Shade/Validation/Shade_H.mo | 2 +- .../Controls/OBC/Shade/Validation/Shade_T.mo | 2 +- .../Controls/OBC/UnitConversions/From_Btu.mo | 2 +- .../OBC/UnitConversions/From_BtuPerHour.mo | 2 +- .../Controls/OBC/UnitConversions/From_bar.mo | 2 +- .../Controls/OBC/UnitConversions/From_cfm.mo | 2 +- .../Controls/OBC/UnitConversions/From_degC.mo | 4 +- .../Controls/OBC/UnitConversions/From_degF.mo | 4 +- .../Controls/OBC/UnitConversions/From_gal.mo | 2 +- .../Controls/OBC/UnitConversions/From_hp.mo | 2 +- .../OBC/UnitConversions/From_inH2O.mo | 2 +- .../Controls/OBC/UnitConversions/From_psi.mo | 2 +- .../Controls/OBC/UnitConversions/From_quad.mo | 2 +- .../Controls/OBC/UnitConversions/From_ton.mo | 2 +- .../Controls/OBC/UnitConversions/To_Btu.mo | 2 +- .../OBC/UnitConversions/To_BtuPerHour.mo | 2 +- .../Controls/OBC/UnitConversions/To_bar.mo | 2 +- .../Controls/OBC/UnitConversions/To_cfm.mo | 2 +- .../Controls/OBC/UnitConversions/To_degC.mo | 4 +- .../Controls/OBC/UnitConversions/To_degF.mo | 4 +- .../Controls/OBC/UnitConversions/To_gal.mo | 2 +- .../Controls/OBC/UnitConversions/To_hp.mo | 2 +- .../Controls/OBC/UnitConversions/To_inH2O.mo | 2 +- .../Controls/OBC/UnitConversions/To_psi.mo | 2 +- .../Controls/OBC/UnitConversions/To_quad.mo | 2 +- .../Controls/OBC/UnitConversions/To_ton.mo | 2 +- .../UnitConversions/Validation/From_Btu.mo | 12 +- .../Validation/From_BtuPerHour.mo | 12 +- .../UnitConversions/Validation/From_bar.mo | 12 +- .../UnitConversions/Validation/From_cfm.mo | 12 +- .../UnitConversions/Validation/From_degC.mo | 12 +- .../UnitConversions/Validation/From_degF.mo | 12 +- .../UnitConversions/Validation/From_gal.mo | 12 +- .../OBC/UnitConversions/Validation/From_hp.mo | 12 +- .../UnitConversions/Validation/From_inH2O.mo | 12 +- .../UnitConversions/Validation/From_psi.mo | 12 +- .../UnitConversions/Validation/From_quad.mo | 12 +- .../UnitConversions/Validation/From_ton.mo | 12 +- .../OBC/UnitConversions/Validation/To_Btu.mo | 12 +- .../Validation/To_BtuPerHour.mo | 12 +- .../OBC/UnitConversions/Validation/To_bar.mo | 12 +- .../OBC/UnitConversions/Validation/To_cfm.mo | 12 +- .../OBC/UnitConversions/Validation/To_degC.mo | 12 +- .../OBC/UnitConversions/Validation/To_degF.mo | 12 +- .../OBC/UnitConversions/Validation/To_gal.mo | 12 +- .../OBC/UnitConversions/Validation/To_hp.mo | 12 +- .../UnitConversions/Validation/To_inH2O.mo | 12 +- .../OBC/UnitConversions/Validation/To_psi.mo | 12 +- .../OBC/UnitConversions/Validation/To_quad.mo | 12 +- .../OBC/UnitConversions/Validation/To_ton.mo | 12 +- .../BaseClasses/OptimalStartCalculation.mo | 32 ++--- .../Controls/OBC/Utilities/OptimalStart.mo | 14 +- .../OBC/Utilities/PIDWithInputGains.mo | 54 ++++---- .../SetPoints/SupplyReturnTemperatureReset.mo | 54 ++++---- .../SupplyReturnTemperatureReset.mo | 8 +- .../SupplyReturnTemperatureResetExponent.mo | 4 +- .../OptimalStartCoolingNegativeStartTime.mo | 16 +-- .../OptimalStartCoolingPositiveStartTime.mo | 16 +-- .../Validation/OptimalStartHeating.mo | 16 +-- .../Validation/OptimalStartHeatingCooling.mo | 28 ++-- .../OptimalStartNoHeatingNoCooling.mo | 24 ++-- .../Utilities/Validation/PIDWithInputGains.mo | 26 ++-- .../Examples/DualFanDualDuct/ClosedLoop.mo | 2 +- .../DualFanDualDuct/Controls/RoomMixingBox.mo | 24 ++-- .../HydronicHeating/TwoRoomsWithStorage.mo | 48 +++---- .../BuildingVAV/ThermalZones/ThermalZone.mo | 6 +- Buildings/Examples/Tutorial/Boiler/System1.mo | 12 +- Buildings/Examples/Tutorial/Boiler/System2.mo | 10 +- Buildings/Examples/Tutorial/Boiler/System3.mo | 14 +- Buildings/Examples/Tutorial/Boiler/System4.mo | 12 +- Buildings/Examples/Tutorial/Boiler/System5.mo | 36 +++--- Buildings/Examples/Tutorial/Boiler/System6.mo | 22 ++-- Buildings/Examples/Tutorial/Boiler/System7.mo | 28 ++-- .../CDL/BaseClasses/PartialOpenLoop.mo | 2 +- .../Tutorial/CDL/Controls/BoilerReturn.mo | 4 +- .../Tutorial/CDL/Controls/EquipmentOnOff.mo | 2 +- .../CDL/Controls/OpenLoopBoilerReturn.mo | 2 +- .../CDL/Controls/OpenLoopRadiatorSupply.mo | 2 +- .../Tutorial/CDL/Controls/RadiatorSupply.mo | 10 +- .../Tutorial/CDL/Controls/SystemOnOff.mo | 4 +- .../CDL/Controls/Validation/BoilerReturn.mo | 2 +- .../CDL/Controls/Validation/EquipmentOnOff.mo | 2 +- .../CDL/Controls/Validation/RadiatorSupply.mo | 4 +- .../CDL/Controls/Validation/SystemOnOff.mo | 4 +- Buildings/Examples/Tutorial/CDL/System1.mo | 14 +- Buildings/Examples/Tutorial/CDL/System2.mo | 4 +- Buildings/Examples/Tutorial/CDL/System3.mo | 8 +- Buildings/Examples/Tutorial/CDL/System4.mo | 4 +- Buildings/Examples/Tutorial/CDL/System6.mo | 8 +- .../Examples/Tutorial/SpaceCooling/System2.mo | 4 +- .../Examples/Tutorial/SpaceCooling/System3.mo | 8 +- .../Examples/VAVCO2/VAVSystemCTControl.mo | 2 +- .../VAVReheat/BaseClasses/ASHRAE2006.mo | 8 +- .../BaseClasses/Controls/Economizer.mo | 16 +-- .../BaseClasses/Controls/Examples/RoomVAV.mo | 12 +- .../Controls/Examples/SupplyAirTemperature.mo | 4 +- .../Controls/Examples/SystemHysteresis.mo | 4 +- .../VAVReheat/BaseClasses/Controls/FanVFD.mo | 4 +- .../BaseClasses/Controls/FreezeStat.mo | 2 +- .../VAVReheat/BaseClasses/Controls/RoomVAV.mo | 34 ++--- .../Controls/SupplyAirTemperature.mo | 30 ++--- .../Controls/SupplyAirTemperatureSetpoint.mo | 2 +- .../BaseClasses/Controls/SystemHysteresis.mo | 10 +- .../VAVReheat/BaseClasses/Guideline36.mo | 16 +-- .../Validation/Guideline36SteadyState.mo | 2 +- .../BaseClasses/PartialDirect.mo | 2 +- .../BaseClasses/PartialIndirect.mo | 2 +- .../Validation/CollectorDistributor.mo | 44 +++---- .../Combined/BaseClasses/PartialParallel.mo | 6 +- .../Combined/ChillerBorefield.mo | 4 +- .../Combined/Controls/Borefield.mo | 26 ++-- .../Combined/Controls/Chiller.mo | 4 +- .../Combined/Controls/HeatExchanger.mo | 26 ++-- .../Combined/Controls/PIDWithEnable.mo | 16 +-- .../Combined/Controls/PrimaryVariableFlow.mo | 8 +- .../Combined/Controls/Reset.mo | 6 +- .../Combined/Controls/SideCold.mo | 30 ++--- .../Combined/Controls/SideHot.mo | 22 ++-- .../Combined/Controls/Supervisory.mo | 2 +- .../Combined/Controls/WatersideEconomizer.mo | 24 ++-- .../Combined/Examples/ChillerOnly.mo | 4 +- .../Combined/HeatPumpHeatExchanger.mo | 36 +++--- .../Combined/Subsystems/Borefield.mo | 2 +- .../Combined/Subsystems/Chiller.mo | 6 +- .../Combined/Subsystems/HeatExchanger.mo | 6 +- .../Combined/Subsystems/HeatPump.mo | 14 +- .../Subsystems/Validation/Borefield.mo | 4 +- .../Combined/Subsystems/Validation/Chiller.mo | 2 +- .../Subsystems/Validation/HeatExchanger.mo | 8 +- .../Subsystems/Validation/SwitchBox.mo | 6 +- .../Validation/WatersideEconomizer.mo | 2 +- .../Subsystems/WatersideEconomizer.mo | 2 +- .../BaseClasses/PartialChillerBorefield.mo | 16 +-- .../Combined/BaseClasses/PartialSeries.mo | 14 +- .../Examples/Combined/SeriesConstantFlow.mo | 4 +- .../Examples/Combined/SeriesVariableFlow.mo | 6 +- .../Cooling/ElectricChillersDirectETS.mo | 2 +- .../Controls/MixingValveControl.mo | 14 +- .../Controls/Validation/MixingValveControl.mo | 22 ++-- .../Examples/BaseClasses/BuildingRCZ1Valve.mo | 10 +- .../Examples/BaseClasses/BuildingRCZ6.mo | 6 +- .../Examples/BaseClasses/BuildingSpawnZ1.mo | 4 +- .../Examples/BaseClasses/BuildingSpawnZ6.mo | 8 +- .../BaseClasses/BuildingTimeSeries.mo | 18 +-- .../BaseClasses/FanCoil4PipeHeatPorts.mo | 2 +- .../BaseClasses/PartialFanCoil4Pipe.mo | 10 +- .../Examples/CouplingTimeSeries.mo | 8 +- .../Examples/CouplingTimeSeriesSingleLoop.mo | 8 +- .../DHC/Loads/BaseClasses/FlowDistribution.mo | 4 +- .../DHC/Loads/BaseClasses/PartialBuilding.mo | 12 +- .../PartialBuildingWithPartialETS.mo | 22 ++-- .../Loads/BaseClasses/PartialTerminalUnit.mo | 20 +-- .../Validation/BaseClasses/Building.mo | 14 +- .../BaseClasses/Validation/BaseClasses/ETS.mo | 8 +- .../BaseClasses/FanCoil2PipeCooling.mo | 16 +-- .../BaseClasses/FanCoil2PipeHeating.mo | 16 +-- .../BaseClasses/FanCoil2PipeHeatingValve.mo | 12 +- .../Validation/BenchmarkFlowDistribution1.mo | 4 +- .../Validation/BenchmarkFlowDistribution2.mo | 6 +- .../Validation/FlowDistributionPumpControl.mo | 8 +- .../BaseClasses/Validation/SimpleRoomODE.mo | 12 +- .../Validation/TerminalUnitScaling.mo | 4 +- .../BaseClasses/PartialBuildingWithETS.mo | 8 +- .../Combined/BuildingTimeSeriesWithETS.mo | 6 +- .../Examples/BuildingTimeSeriesWithETS.mo | 10 +- .../Steam/BaseClasses/ValveSelfActing.mo | 4 +- .../BaseClasses/DifferenceEnthalpyFlowRate.mo | 2 +- .../DHC/Networks/Controls/MainPump.mo | 44 +++---- .../Controls/BaseClasses/CoolingTowerLoop.mo | 60 ++++----- .../BaseClasses/DirectHeatRecovery.mo | 26 ++-- .../Controls/BaseClasses/ModeCondenserLoop.mo | 30 ++--- .../Controls/BaseClasses/StagingPlant.mo | 40 +++--- .../Controls/BaseClasses/StagingPump.mo | 16 +-- .../Controls/BaseClasses/TankCycle.mo | 6 +- .../BaseClasses/Validation/StagingPlant.mo | 16 +-- .../BaseClasses/Validation/StagingPump.mo | 6 +- .../BaseClasses/ValveCondenserEvaporator.mo | 84 ++++++------ .../Plants/Combined/Controls/Controller.mo | 8 +- .../Combined/Examples/AllElectricCWStorage.mo | 16 +-- .../BaseClasses/MultipleCommands.mo | 8 +- .../BaseClasses/PartialMultiplePumps.mo | 8 +- .../Combined/Subsystems/ChillerGroup.mo | 2 +- .../Subsystems/ChillerHeatRecoveryGroup.mo | 2 +- .../Combined/Subsystems/CoolingTowerGroup.mo | 4 +- .../Combined/Subsystems/HeatPumpGroup.mo | 10 +- .../Combined/Subsystems/MultiplePumpsFlow.mo | 2 +- .../BaseClasses/PartialMultiplePumps.mo | 6 +- .../Subsystems/Validation/ChillerGroup.mo | 2 +- .../Validation/ChillerHeatRecoveryGroup.mo | 14 +- .../Validation/CoolingTowerGroup.mo | 2 +- .../Subsystems/Validation/HeatPumpGroup.mo | 4 +- .../Subsystems/Validation/MultiplePumpsDp.mo | 2 +- .../Validation/MultiplePumpsFlow.mo | 4 +- .../Validation/MultiplePumpsSpeed.mo | 2 +- .../Validation/AllElectricCWStorage.mo | 14 +- .../Cooling/Controls/ChilledWaterBypass.mo | 2 +- .../Cooling/Controls/ChilledWaterPumpSpeed.mo | 2 +- .../Plants/Cooling/Controls/ChillerStage.mo | 2 +- .../Plants/Cooling/Controls/FlowControl.mo | 2 +- .../DHC/Plants/Cooling/Controls/TankStatus.mo | 10 +- .../Cooling/Controls/Validation/TankStatus.mo | 4 +- .../Plants/Cooling/ElectricChillerParallel.mo | 6 +- .../Examples/StoragePlantDualSource.mo | 4 +- .../Subsystems/CoolingTowersWithBypass.mo | 12 +- .../PartialCoolingTowersSubsystem.mo | 8 +- .../Examples/CoolingTowersParallel.mo | 4 +- .../DHC/Plants/Heating/SewageHeatRecovery.mo | 2 +- .../Fluid/CHPs/BaseClasses/AssertFuelFlow.mo | 4 +- .../Fluid/CHPs/BaseClasses/AssertPower.mo | 8 +- .../Fluid/CHPs/BaseClasses/AssertWaterFlow.mo | 2 +- .../BaseClasses/AssertWaterTemperature.mo | 2 +- .../Fluid/CHPs/BaseClasses/Controller.mo | 10 +- .../CHPs/BaseClasses/EnergyConversion.mo | 16 +-- .../BaseClasses/EnergyConversionNormal.mo | 6 +- .../BaseClasses/EnergyConversionWarmUp.mo | 40 +++--- .../Fluid/CHPs/BaseClasses/FilterPower.mo | 8 +- .../CHPs/BaseClasses/PowerConsumption.mo | 10 +- .../BaseClasses/Validation/AssertFuelFlow.mo | 2 +- .../BaseClasses/Validation/AssertPower.mo | 2 +- .../BaseClasses/Validation/AssertWaterFlow.mo | 2 +- .../Validation/AssertWaterTemperature.mo | 2 +- .../CHPs/BaseClasses/Validation/Controller.mo | 2 +- .../Validation/EnergyConversion.mo | 8 +- .../Validation/EnergyConversionNormal.mo | 6 +- .../Validation/EnergyConversionWarmUp.mo | 8 +- .../Validation/EngineTemperature.mo | 6 +- .../BaseClasses/Validation/FilterPower.mo | 2 +- .../Validation/PowerConsumption.mo | 2 +- .../CHPs/BaseClasses/Validation/StandBy.mo | 6 +- .../Validation/WarmUpTemperature.mo | 4 +- .../Validation/WaterFlowControl.mo | 8 +- .../Fluid/CHPs/BaseClasses/WarmUpLeaving.mo | 10 +- .../CHPs/BaseClasses/WaterFlowControl.mo | 4 +- .../Fluid/CHPs/ThermalElectricalFollowing.mo | 12 +- .../CHPs/Validation/ElectricalFollowing.mo | 12 +- .../Fluid/CHPs/Validation/ThermalFollowing.mo | 14 +- .../Examples/AbsorptionIndirectSteam.mo | 6 +- .../AbsorptionIndirectSteamVaryingLoad.mo | 12 +- .../Validation/BaseClasses/PLRToPulse.mo | 4 +- .../BaseClasses/Validation/PLRToPulse.mo | 4 +- .../CoilDefrostTimeCalculations.mo | 2 +- .../CoolingTowers/Examples/Merkel.mo | 2 +- .../WetCoilCounterFlowLowWaterFlowRate.mo | 2 +- .../WetCoilEffectivenessNTUHeating.mo | 2 +- .../Validation/EquationFitReversible.mo | 8 +- .../Examples/EquationFitReversible.mo | 18 +-- ...EquationFitReversible_CoolingClosedLoop.mo | 8 +- .../EquationFitReversible_ScalingFactor.mo | 2 +- .../ActiveNetworks/Decoupling.mo | 2 +- .../Examples/BaseClasses/Load.mo | 12 +- .../BaseClasses/PartialActivePrimary.mo | 2 +- .../Examples/BaseClasses/PartialDecoupling.mo | 8 +- .../BaseClasses/PartialInjectionTwoWay.mo | 4 +- .../Examples/DecouplingMixing.mo | 14 +- .../Examples/DecouplingTemperature.mo | 10 +- .../Examples/DiversionOpenLoop.mo | 4 +- .../Examples/InjectionThreeWay.mo | 6 +- .../Examples/InjectionTwoWayConstant.mo | 16 +-- .../Examples/InjectionTwoWayVariable.mo | 2 +- .../Examples/InjectionTwoWayVariableReturn.mo | 4 +- .../ActiveNetworks/Examples/SingleMixing.mo | 6 +- .../Examples/ThrottleOpenLoop.mo | 8 +- .../HydronicConfigurations/Components/Pump.mo | 12 +- .../Controls/PIDWithOperatingMode.mo | 24 ++-- .../Validation/PIDWithOperatingMode.mo | 6 +- .../Examples/TwoWayOpenLoop.mo | 2 +- .../BaseClasses/PartialPassivePrimary.mo | 2 +- .../PassiveNetworks/Examples/DualMixing.mo | 6 +- .../PassiveNetworks/Examples/SingleMixing.mo | 10 +- .../Examples/SingleMixingOpenLoop.mo | 4 +- .../SolarCollectors/Controls/CollectorPump.mo | 6 +- .../Examples/NormalizedHeatFlowRate.mo | 2 +- .../Ice/BaseClasses/NormalizedHeatFlowRate.mo | 2 +- .../Fluid/Storage/Ice/BaseClasses/Tank.mo | 4 +- .../Windows/Validation/WindowSteadyState.mo | 2 +- .../SingleZone/VAV/Examples/Guideline36.mo | 4 +- .../BaseClasses/ZoneWithAHUG36.mo | 4 +- .../OptimalStart/Guideline36Spring.mo | 6 +- .../G36_PR1/AHUs/MultiZone/VAV/Controller.mo | 4 +- .../MultiZone/VAV/Economizers/Controller.mo | 10 +- .../VAV/Economizers/Subsequences/Enable.mo | 16 +-- .../VAV/Economizers/Subsequences/Limits.mo | 24 ++-- .../Economizers/Subsequences/Modulation.mo | 16 +-- .../Validation/Enable_FreProSta.mo | 18 +-- .../Validation/Enable_TOut_hOut.mo | 22 ++-- .../Validation/Limits_LoopDisable.mo | 12 +- .../Validation/Limits_VOut_flow.mo | 4 +- .../Validation/Modulation_TSup.mo | 14 +- .../Validation/Controller_Disable.mo | 16 +-- .../Validation/Controller_Mod_DamLim.mo | 16 +-- .../MultiZone/VAV/SetPoints/ExhaustDamper.mo | 14 +- .../VAV/SetPoints/OutdoorAirFlow/AHU.mo | 32 ++--- .../VAV/SetPoints/OutdoorAirFlow/SumZone.mo | 16 +-- .../Validation/OutdoorAirFlow.mo | 16 +-- .../VAV/SetPoints/OutdoorAirFlow/Zone.mo | 58 ++++----- .../VAV/SetPoints/ReturnFanDirectPressure.mo | 26 ++-- .../AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo | 6 +- .../MultiZone/VAV/SetPoints/SupplySignals.mo | 18 +-- .../VAV/SetPoints/SupplyTemperature.mo | 18 +-- .../VAV/SetPoints/Validation/ExhaustDamper.mo | 2 +- .../Validation/ReturnFanDirectPressure.mo | 2 +- .../VAV/SetPoints/Validation/SupplyFan.mo | 14 +- .../Validation/SupplySignals_Valve.mo | 4 +- .../SetPoints/Validation/SupplyTemperature.mo | 14 +- .../MultiZone/VAV/Validation/Controller.mo | 46 +++---- .../G36_PR1/AHUs/SingleZone/VAV/Controller.mo | 8 +- .../AHUs/SingleZone/VAV/CoolingCoil.mo | 6 +- .../SingleZone/VAV/Economizers/Controller.mo | 8 +- .../VAV/Economizers/Subsequences/Enable.mo | 20 +-- .../VAV/Economizers/Subsequences/Limits.mo | 30 ++--- .../Economizers/Subsequences/Modulation.mo | 22 ++-- .../Validation/Enable_FreProSta_ZonSta.mo | 12 +- .../Validation/Enable_TOut_hOut.mo | 16 +-- .../Subsequences/Validation/Limits_Disable.mo | 4 +- .../Validation/Limits_FanSpe_VOut_flow.mo | 8 +- .../Validation/Modulation_TSup.mo | 12 +- .../Validation/Controller_Disable.mo | 18 +-- .../Validation/Controller_Mod_DamLim.mo | 18 +-- .../SingleZone/VAV/SetPoints/ExhaustDamper.mo | 16 +-- .../VAV/SetPoints/OutsideAirFlow.mo | 30 ++--- .../AHUs/SingleZone/VAV/SetPoints/Supply.mo | 86 ++++++------ .../VAV/SetPoints/Validation/ExhaustDamper.mo | 2 +- .../SetPoints/Validation/ModeAndSetPoints.mo | 10 +- .../SetPoints/Validation/OutsideAirFlow.mo | 6 +- .../VAV/SetPoints/Validation/Supply_T.mo | 12 +- .../VAV/SetPoints/Validation/Supply_u.mo | 12 +- .../SingleZone/VAV/Validation/Controller.mo | 22 ++-- .../SingleZone/VAV/Validation/CoolingCoil.mo | 6 +- .../SingleZone/VAV/Validation/ZoneState.mo | 2 +- .../G36_PR1/AHUs/SingleZone/VAV/ZoneState.mo | 8 +- .../Generic/FreezeProtectionMixedAir.mo | 8 +- .../G36_PR1/Generic/SetPoints/GroupStatus.mo | 30 ++--- .../Generic/SetPoints/OperationMode.mo | 50 +++---- .../Generic/SetPoints/TrimAndRespond.mo | 58 ++++----- .../SetPoints/Validation/GroupStatus.mo | 30 ++--- .../SetPoints/Validation/OperationMode.mo | 36 +++--- .../SetPoints/Validation/TrimAndRespond.mo | 16 +-- .../SetPoints/Validation/ZoneStatus.mo | 12 +- .../Validation/ZoneStatusDuplicator.mo | 2 +- .../G36_PR1/Generic/SetPoints/ZoneStatus.mo | 36 +++--- .../Validation/FreezeProtectionMixedAir.mo | 2 +- .../G36_PR1/TerminalUnits/Controller.mo | 4 +- .../TerminalUnits/Reheat/DamperValves.mo | 78 +++++------ .../Reheat/SetPoints/ActiveAirFlow.mo | 96 +++++++------- .../SetPoints/Validation/ActiveAirFlow.mo | 6 +- .../TerminalUnits/Reheat/SystemRequests.mo | 110 ++++++++-------- .../Reheat/Validation/DamperValves.mo | 24 ++-- .../Reheat/Validation/SystemRequests.mo | 18 +-- .../SetPoints/Validation/ZoneTemperatures.mo | 22 ++-- .../SetPoints/ZoneTemperatures.mo | 122 +++++++++--------- .../TerminalUnits/Validation/Controller.mo | 18 +-- .../Controls/OBC/ASHRAE/G36_PR1/package.mo | 4 +- .../Controls/OBC/CDL/Continuous/ChangeSign.mo | 2 +- .../OBC/CDL/Continuous/GreaterEqual.mo | 2 +- .../CDL/Continuous/GreaterEqualThreshold.mo | 2 +- .../OBC/CDL/Continuous/HysteresisWithHold.mo | 4 +- .../Controls/OBC/CDL/Continuous/LessEqual.mo | 2 +- .../OBC/CDL/Continuous/LessEqualThreshold.mo | 2 +- .../Controls/OBC/CDL/Continuous/LimPID.mo | 32 ++--- .../OBC/CDL/Continuous/Validation/Add.mo | 4 +- .../CDL/Continuous/Validation/AddParameter.mo | 2 +- .../CDL/Continuous/Validation/ChangeSign.mo | 2 +- .../CDL/Continuous/Validation/Derivative.mo | 4 +- .../OBC/CDL/Continuous/Validation/Feedback.mo | 4 +- .../CDL/Continuous/Validation/GreaterEqual.mo | 4 +- .../Validation/GreaterEqualThreshold.mo | 2 +- .../CDL/Continuous/Validation/LessEqual.mo | 4 +- .../Validation/LessEqualThreshold.mo | 2 +- .../OBC/CDL/Continuous/Validation/LimPID.mo | 4 +- .../LimPIDInitialDerivativeOutput.mo | 4 +- .../Validation/LimPIDInitialState.mo | 4 +- .../Continuous/Validation/LimPIDWithReset.mo | 14 +- .../Continuous/Validation/NumberOfRequests.mo | 10 +- .../Controls/OBC/CDL/Continuous/package.mo | 4 +- .../OBC/CDL/Discrete/Examples/MovingMean.mo | 2 +- .../OBC/CDL/Integers/Validation/Add.mo | 8 +- .../OBC/CDL/Logical/Validation/Timer.mo | 2 +- .../Validation/TDewPoi_TDryBulPhi.mo | 16 +-- .../Validation/TWetBul_TDryBulPhi.mo | 10 +- .../Psychrometrics/Validation/h_TDryBulPhi.mo | 6 +- .../VAVReheat/BaseClasses/Guideline36.mo | 12 +- .../VAVReheat/BaseClasses/VAVBranch.mo | 2 +- .../Validation/Guideline36SteadyState.mo | 2 +- .../build/html/_sources/bestPractice.rst.txt | 3 +- .../build/html/_sources/development.rst.txt | 2 +- .../build/html/_sources/performance.rst.txt | 2 +- .../userGuide/build/html/bestPractice.html | 2 +- .../userGuide/build/html/development.html | 2 +- .../userGuide/build/html/performance.html | 2 +- .../userGuide/source/bestPractice.rst | 3 +- .../userGuide/source/development.rst | 2 +- .../userGuide/source/modelica/FlowCircuit.mo | 2 +- .../userGuide/source/performance.rst | 2 +- .../OBC/CDL/{ => Reals}/Continuous/Acos.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Asin.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Atan.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Atan2.png | Bin .../CDL/{ => Reals}/Continuous/Constant.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Cos.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Exp.png | Bin .../CDL/{ => Reals}/Continuous/Hysteresis.png | Bin .../CDL/{ => Reals}/Continuous/Hysteresis.svg | 0 .../Continuous/HysteresisWithHold.svg | 0 .../OBC/CDL/{ => Reals}/Continuous/Log.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Log10.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Sin.png | Bin .../OBC/CDL/{ => Reals}/Continuous/Tan.png | Bin .../OBC/CDL/{ => Reals}/Continuous/int.pdf | Bin .../OBC/CDL/{ => Reals}/Continuous/int.png | Bin .../{Continuous => Reals}/Sources/Pulse.png | Bin .../{Continuous => Reals}/Sources/Pulse.svg | 0 .../{Continuous => Reals}/Sources/Ramp.png | Bin .../{Continuous => Reals}/Sources/Ramp.svg | 0 .../CDL/{Continuous => Reals}/Sources/Sin.png | Bin ...Sources_Validation_CalendarTimeMonths.txt} | 0 ...es_Validation_CalendarTimeMonthsMinus.txt} | 0 ...ces_Validation_CalendarTimeMonthsPlus.txt} | 0 ...CDL_Reals_Sources_Validation_Constant.txt} | 0 ...BC_CDL_Reals_Sources_Validation_Pulse.txt} | 0 ...OBC_CDL_Reals_Sources_Validation_Ramp.txt} | 0 ..._OBC_CDL_Reals_Sources_Validation_Sin.txt} | 0 ...Reals_Sources_Validation_StandardTime.txt} | 0 ...DL_Reals_Sources_Validation_TimeTable.txt} | 0 ...Validation_TimeTableNegativeStartTime.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Abs.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Acos.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Add.txt} | 0 ...OBC_CDL_Reals_Validation_AddParameter.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Asin.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Atan.txt} | 0 ...ntrols_OBC_CDL_Reals_Validation_Atan2.txt} | 0 ...rols_OBC_CDL_Reals_Validation_Average.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Cos.txt} | 0 ...s_OBC_CDL_Reals_Validation_Derivative.txt} | 0 ...trols_OBC_CDL_Reals_Validation_Divide.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Exp.txt} | 0 ...rols_OBC_CDL_Reals_Validation_Greater.txt} | 0 ...CDL_Reals_Validation_GreaterThreshold.txt} | 0 ...s_OBC_CDL_Reals_Validation_Hysteresis.txt} | 0 ..._Reals_Validation_IntegratorWithReset.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Less.txt} | 0 ...BC_CDL_Reals_Validation_LessThreshold.txt} | 0 ...BC_CDL_Reals_Validation_LimitSlewRate.txt} | 0 ...rols_OBC_CDL_Reals_Validation_Limiter.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Line.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Log.txt} | 0 ...ntrols_OBC_CDL_Reals_Validation_Log10.txt} | 0 ...s_OBC_CDL_Reals_Validation_MatrixGain.txt} | 0 ...ls_OBC_CDL_Reals_Validation_MatrixMax.txt} | 0 ...ls_OBC_CDL_Reals_Validation_MatrixMin.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Max.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Min.txt} | 0 ...trols_OBC_CDL_Reals_Validation_Modulo.txt} | 0 ...BC_CDL_Reals_Validation_MovingAverage.txt} | 0 ...Validation_MovingAverage_nonZeroStart.txt} | 0 ...ols_OBC_CDL_Reals_Validation_MultiMax.txt} | 0 ...ols_OBC_CDL_Reals_Validation_MultiMin.txt} | 0 ...ols_OBC_CDL_Reals_Validation_MultiSum.txt} | 0 ...ols_OBC_CDL_Reals_Validation_Multiply.txt} | 0 ..._Reals_Validation_MultiplyByParameter.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_PID.txt} | 0 ...Validation_PIDInitialDerivativeOutput.txt} | 0 ..._CDL_Reals_Validation_PIDInitialState.txt} | 0 ...ols_OBC_CDL_Reals_Validation_PIDScale.txt} | 0 ...OBC_CDL_Reals_Validation_PIDWithReset.txt} | 0 ...DL_Reals_Validation_PIDWithResetScale.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Ramp.txt} | 0 ...ntrols_OBC_CDL_Reals_Validation_Round.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Sin.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Sort.txt} | 0 ...ontrols_OBC_CDL_Reals_Validation_Sqrt.txt} | 0 ...ols_OBC_CDL_Reals_Validation_Subtract.txt} | 0 ...trols_OBC_CDL_Reals_Validation_Switch.txt} | 0 ...Controls_OBC_CDL_Reals_Validation_Tan.txt} | 0 .../ConvertBuildings_from_9_to_10.0.0.mos | 9 +- .../Sources/Validation/Constant.mos | 2 - .../Continuous/Sources/Validation/Pulse.mos | 2 - .../Continuous/Sources/Validation/Ramp.mos | 2 - .../CDL/Continuous/Sources/Validation/Sin.mos | 2 - .../Sources/Validation/StandardTime.mos | 2 - .../Continuous/Validation/AddParameter.mos | 2 - .../Continuous/Validation/LimitSlewRate.mos | 2 - .../Validation/MultiplyByParameter.mos | 2 - .../Sources/Validation/CalendarTimeMonths.mos | 2 +- .../Validation/CalendarTimeMonthsMinus.mos | 2 +- .../Validation/CalendarTimeMonthsPlus.mos | 2 +- .../CDL/Reals/Sources/Validation/Constant.mos | 2 + .../CDL/Reals/Sources/Validation/Pulse.mos | 2 + .../OBC/CDL/Reals/Sources/Validation/Ramp.mos | 2 + .../OBC/CDL/Reals/Sources/Validation/Sin.mos | 2 + .../Reals/Sources/Validation/StandardTime.mos | 2 + .../Sources/Validation/TimeTable.mos | 2 +- .../Validation/TimeTableNegativeStartTime.mos | 2 +- .../{Continuous => Reals}/Validation/Abs.mos | 2 +- .../{Continuous => Reals}/Validation/Acos.mos | 2 +- .../{Continuous => Reals}/Validation/Add.mos | 2 +- .../OBC/CDL/Reals/Validation/AddParameter.mos | 2 + .../{Continuous => Reals}/Validation/Asin.mos | 2 +- .../{Continuous => Reals}/Validation/Atan.mos | 2 +- .../Validation/Atan2.mos | 2 +- .../Validation/Average.mos | 2 +- .../{Continuous => Reals}/Validation/Cos.mos | 2 +- .../Validation/Derivative.mos | 2 +- .../Validation/Divide.mos | 2 +- .../{Continuous => Reals}/Validation/Exp.mos | 2 +- .../Validation/Greater.mos | 2 +- .../Validation/GreaterThreshold.mos | 2 +- .../Validation/Hysteresis.mos | 2 +- .../Validation/IntegratorWithReset.mos | 2 +- .../{Continuous => Reals}/Validation/Less.mos | 2 +- .../Validation/LessThreshold.mos | 2 +- .../CDL/Reals/Validation/LimitSlewRate.mos | 2 + .../Validation/Limiter.mos | 2 +- .../{Continuous => Reals}/Validation/Line.mos | 2 +- .../{Continuous => Reals}/Validation/Log.mos | 2 +- .../Validation/Log10.mos | 2 +- .../Validation/MatrixGain.mos | 2 +- .../Validation/MatrixMax.mos | 2 +- .../Validation/MatrixMin.mos | 2 +- .../{Continuous => Reals}/Validation/Max.mos | 2 +- .../{Continuous => Reals}/Validation/Min.mos | 2 +- .../Validation/Modulo.mos | 2 +- .../Validation/MovingAverage.mos | 2 +- .../Validation/MovingAverage_nonZeroStart.mos | 2 +- .../Validation/MultiMax.mos | 2 +- .../Validation/MultiMin.mos | 2 +- .../Validation/MultiSum.mos | 2 +- .../Validation/Multiply.mos | 2 +- .../Reals/Validation/MultiplyByParameter.mos | 2 + .../{Continuous => Reals}/Validation/PID.mos | 2 +- .../Validation/PIDInitialDerivativeOutput.mos | 2 +- .../Validation/PIDInitialState.mos | 2 +- .../Validation/PIDScale.mos | 2 +- .../Validation/PIDWithReset.mos | 2 +- .../Validation/PIDWithResetScale.mos | 2 +- .../{Continuous => Reals}/Validation/Ramp.mos | 2 +- .../Validation/Round.mos | 2 +- .../{Continuous => Reals}/Validation/Sin.mos | 2 +- .../{Continuous => Reals}/Validation/Sort.mos | 2 +- .../{Continuous => Reals}/Validation/Sqrt.mos | 2 +- .../Validation/Subtract.mos | 2 +- .../Validation/Switch.mos | 2 +- .../{Continuous => Reals}/Validation/Tan.mos | 2 +- ...Sources.Validation.CalendarTimeMonths.mos} | 0 ...es.Validation.CalendarTimeMonthsMinus.mos} | 0 ...ces.Validation.CalendarTimeMonthsPlus.mos} | 0 ...CDL.Reals.Sources.Validation.Constant.mos} | 0 ...BC.CDL.Reals.Sources.Validation.Pulse.mos} | 0 ...OBC.CDL.Reals.Sources.Validation.Ramp.mos} | 0 ....OBC.CDL.Reals.Sources.Validation.Sin.mos} | 0 ...Reals.Sources.Validation.StandardTime.mos} | 0 ...DL.Reals.Sources.Validation.TimeTable.mos} | 0 ...Validation.TimeTableNegativeStartTime.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Abs.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Acos.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Add.mos} | 0 ...OBC.CDL.Reals.Validation.AddParameter.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Asin.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Atan.mos} | 0 ...ntrols.OBC.CDL.Reals.Validation.Atan2.mos} | 0 ...rols.OBC.CDL.Reals.Validation.Average.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Cos.mos} | 0 ...s.OBC.CDL.Reals.Validation.Derivative.mos} | 0 ...trols.OBC.CDL.Reals.Validation.Divide.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Exp.mos} | 0 ...rols.OBC.CDL.Reals.Validation.Greater.mos} | 0 ...CDL.Reals.Validation.GreaterThreshold.mos} | 0 ...s.OBC.CDL.Reals.Validation.Hysteresis.mos} | 0 ....Reals.Validation.IntegratorWithReset.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Less.mos} | 0 ...BC.CDL.Reals.Validation.LessThreshold.mos} | 0 ...BC.CDL.Reals.Validation.LimitSlewRate.mos} | 0 ...rols.OBC.CDL.Reals.Validation.Limiter.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Line.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Log.mos} | 0 ...ntrols.OBC.CDL.Reals.Validation.Log10.mos} | 0 ...s.OBC.CDL.Reals.Validation.MatrixGain.mos} | 0 ...ls.OBC.CDL.Reals.Validation.MatrixMax.mos} | 0 ...ls.OBC.CDL.Reals.Validation.MatrixMin.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Max.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Min.mos} | 0 ...trols.OBC.CDL.Reals.Validation.Modulo.mos} | 0 ...BC.CDL.Reals.Validation.MovingAverage.mos} | 0 ...Validation.MovingAverage_nonZeroStart.mos} | 0 ...ols.OBC.CDL.Reals.Validation.MultiMax.mos} | 0 ...ols.OBC.CDL.Reals.Validation.MultiMin.mos} | 0 ...ols.OBC.CDL.Reals.Validation.MultiSum.mos} | 0 ...ols.OBC.CDL.Reals.Validation.Multiply.mos} | 0 ....Reals.Validation.MultiplyByParameter.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.PID.mos} | 0 ...Validation.PIDInitialDerivativeOutput.mos} | 0 ....CDL.Reals.Validation.PIDInitialState.mos} | 0 ...ols.OBC.CDL.Reals.Validation.PIDScale.mos} | 0 ...OBC.CDL.Reals.Validation.PIDWithReset.mos} | 0 ...DL.Reals.Validation.PIDWithResetScale.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Ramp.mos} | 0 ...ntrols.OBC.CDL.Reals.Validation.Round.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Sin.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Sort.mos} | 0 ...ontrols.OBC.CDL.Reals.Validation.Sqrt.mos} | 0 ...ols.OBC.CDL.Reals.Validation.Subtract.mos} | 0 ...trols.OBC.CDL.Reals.Validation.Switch.mos} | 0 ...Controls.OBC.CDL.Reals.Validation.Tan.mos} | 0 .../OBC/UnitConversions/unit_converters.py | 18 +-- .../Components/Controls/OpenLoop.mo | 18 +-- .../ZoneEquipment/VAVBoxControlPoints.mo | 10 +- .../Components/Dampers/TwoPosition.mo | 4 +- .../Components/Fans/ArrayVariable.mo | 4 +- .../Components/Fans/SingleConstant.mo | 2 +- .../Components/Fans/SingleVariable.mo | 4 +- .../Templates/Components/Validation/Coils.mo | 12 +- .../Components/Validation/Dampers.mo | 2 +- .../Templates/Components/Validation/Fans.mo | 2 +- .../Templates/Components/Validation/Valves.mo | 2 +- .../Components/Valves/ThreeWayTwoPosition.mo | 4 +- .../Components/Valves/TwoWayTwoPosition.mo | 4 +- .../Components/Controls/OpenLoop.mo | 4 +- .../Interfaces/ControllerG36VAVBox.mo | 8 +- .../AirHandlersFans/VAVMZControlPoints.mo | 6 +- .../UserProject/BASControlPoints.mo | 10 +- .../UserProject/ZoneControlPoints.mo | 4 +- .../Detailed/Examples/MixedAirCO2.mo | 4 +- .../BESTEST/BaseClasses/DaySchedule.mo | 2 +- .../Validation/BESTEST/Cases6xx/Case600.mo | 16 +-- .../Validation/BESTEST/Cases6xx/Case600FF.mo | 8 +- .../Validation/BESTEST/Cases9xx/Case960.mo | 4 +- .../Detailed/Validation/BESTEST/UsersGuide.mo | 8 +- .../BaseClasses/SingleZoneFloorHeater.mo | 6 +- .../MixedAirFreeResponseSteadyState.mo | 2 +- .../Validation/SingleZoneFloorWithHeating.mo | 4 +- .../Examples/SingleFamilyHouse/AirHeating.mo | 16 +-- .../SingleFamilyHouse/EquipmentSchedule.mo | 2 +- ...eatPumpRadiantHeatingGroundHeatTransfer.mo | 12 +- .../SingleFamilyHouse/LightsControl.mo | 14 +- .../RadiantHeatingCooling_TRoom.mo | 4 +- .../RadiantHeatingCooling_TSurface.mo | 12 +- .../SingleFamilyHouse/ShadeControl.mo | 10 +- .../Examples/SmallOffice/BaseClasses/Floor.mo | 2 +- .../BaseClasses/IdealHeaterCooler.mo | 4 +- .../SmallOffice/IdealHeatingCoolingWinter.mo | 8 +- .../EnergyPlus_9_6_0/ThermalZone.mo | 2 +- .../EquipmentScheduleOutputVariable.mo | 2 +- .../Validation/ThermalZone/OneZoneOneYear.mo | 2 +- .../ThermalZone/TwoIdenticalZones.mo | 2 +- .../OneZoneConstantFloorTemperature.mo | 2 +- .../OneZoneControlledFloorTemperature.mo | 16 +-- Buildings/Utilities/Math/Functions/round.mo | 4 +- .../Examples/BaseClasses/CoolingCoilValve.mo | 20 +-- .../Validation/CoolingCoilValve.mo | 32 ++--- .../ControlsVerification_CoolingCoilValve.mo | 6 +- .../Examples/SingleZoneVAVSupply_u.mo | 14 +- Buildings/package.mo | 31 +++-- 1060 files changed, 5878 insertions(+), 5862 deletions(-) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Abs.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Acos.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Add.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/AddParameter.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Asin.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Atan.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Atan2.mo (94%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Average.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Cos.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Derivative.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Divide.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Exp.mo (96%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Greater.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/GreaterThreshold.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Hysteresis.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/IntegratorWithReset.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Less.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/LessThreshold.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/LimitSlewRate.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Limiter.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Line.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Log.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Log10.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MatrixGain.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MatrixMax.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MatrixMin.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Max.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Min.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Modulo.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MovingAverage.mo (93%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MultiMax.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MultiMin.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MultiSum.mo (93%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Multiply.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/MultiplyByParameter.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/PID.mo (94%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/PIDWithReset.mo (95%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Ramp.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Round.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sin.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sort.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/CalendarTime.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Constant.mo (96%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/ModelTime.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Pulse.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Ramp.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Sin.mo (94%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/TimeTable.mo (99%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonths.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonthsMinus.mo (52%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonthsPlus.mo (52%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/Constant.mo (73%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/Pulse.mo (75%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/Ramp.mo (75%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/Sin.mo (75%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/StandardTime.mo (82%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/TimeTable.mo (88%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/TimeTableNegativeStartTime.mo (76%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/package.mo (86%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/package.order (100%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/package.mo (95%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sources/package.order (100%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Sqrt.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Subtract.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Switch.mo (98%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Tan.mo (97%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Abs.mo (77%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Acos.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Add.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/AddParameter.mo (77%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Asin.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Atan.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Atan2.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Average.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Cos.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Derivative.mo (83%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Divide.mo (81%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Exp.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Greater.mo (82%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/GreaterThreshold.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Hysteresis.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/IntegratorWithReset.mo (84%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Less.mo (83%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/LessThreshold.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/LimitSlewRate.mo (82%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Limiter.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Line.mo (86%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Log.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Log10.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixGain.mo (82%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixMax.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixMin.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Max.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Min.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Modulo.mo (80%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MovingAverage.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MovingAverage_nonZeroStart.mo (81%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiMax.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiMin.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiSum.mo (83%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Multiply.mo (81%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiplyByParameter.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PID.mo (86%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDInitialDerivativeOutput.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDInitialState.mo (85%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDScale.mo (85%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDWithReset.mo (86%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDWithResetScale.mo (85%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Ramp.mo (87%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Round.mo (77%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sin.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sort.mo (84%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sqrt.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Subtract.mo (79%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Switch.mo (81%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/Tan.mo (78%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/package.mo (88%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/Validation/package.order (100%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/package.mo (91%) rename Buildings/Controls/OBC/CDL/{Continuous => Reals}/package.order (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Acos.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Asin.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Atan.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Atan2.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Constant.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Cos.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Exp.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Hysteresis.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Hysteresis.svg (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/HysteresisWithHold.svg (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Log.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Log10.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Sin.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/Tan.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/int.pdf (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{ => Reals}/Continuous/int.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{Continuous => Reals}/Sources/Pulse.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{Continuous => Reals}/Sources/Pulse.svg (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{Continuous => Reals}/Sources/Ramp.png (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{Continuous => Reals}/Sources/Ramp.svg (100%) rename Buildings/Resources/Images/Controls/OBC/CDL/{Continuous => Reals}/Sources/Sin.png (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonths.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsMinus.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsPlus.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Constant.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Pulse.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Ramp.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Sin.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_StandardTime.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_StandardTime.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTable.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTableNegativeStartTime.txt => Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Abs.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Abs.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Acos.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Acos.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Add.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Add.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_AddParameter.txt => Buildings_Controls_OBC_CDL_Reals_Validation_AddParameter.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Asin.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Asin.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Atan.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Atan.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Atan2.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Atan2.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Average.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Average.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Cos.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Cos.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Derivative.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Derivative.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Divide.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Divide.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Exp.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Exp.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Greater.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Greater.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_GreaterThreshold.txt => Buildings_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Hysteresis.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_IntegratorWithReset.txt => Buildings_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Less.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Less.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_LessThreshold.txt => Buildings_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_LimitSlewRate.txt => Buildings_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Limiter.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Limiter.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Line.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Line.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Log.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Log.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Log10.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Log10.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixGain.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMax.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMin.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Max.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Max.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Min.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Min.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Modulo.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Modulo.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage_nonZeroStart.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMax.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MultiMax.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMin.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MultiMin.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MultiSum.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MultiSum.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Multiply.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Multiply.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_MultiplyByParameter.txt => Buildings_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PID.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PID.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialDerivativeOutput.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialState.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PIDScale.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PIDScale.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithReset.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithResetScale.txt => Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Ramp.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Ramp.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Round.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Round.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Sin.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Sin.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Sort.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Sort.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Sqrt.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Sqrt.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Subtract.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Subtract.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Switch.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Switch.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Continuous_Validation_Tan.txt => Buildings_Controls_OBC_CDL_Reals_Validation_Tan.txt} (100%) delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/AddParameter.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonths.mos (82%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonthsMinus.mos (81%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/CalendarTimeMonthsPlus.mos (81%) create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/TimeTable.mos (77%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Sources/Validation/TimeTableNegativeStartTime.mos (74%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Abs.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Acos.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Add.mos (55%) create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Asin.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Atan.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Atan2.mos (55%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Average.mos (54%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Cos.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Derivative.mos (70%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Divide.mos (54%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Exp.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Greater.mos (68%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/GreaterThreshold.mos (65%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Hysteresis.mos (77%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/IntegratorWithReset.mos (84%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Less.mos (69%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/LessThreshold.mos (66%) create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Limiter.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Line.mos (71%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Log.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Log10.mos (52%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixGain.mos (82%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixMax.mos (78%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MatrixMin.mos (79%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Max.mos (55%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Min.mos (55%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Modulo.mos (54%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MovingAverage.mos (79%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MovingAverage_nonZeroStart.mos (75%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiMax.mos (70%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiMin.mos (70%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/MultiSum.mos (80%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Multiply.mos (55%) create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PID.mos (79%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDInitialDerivativeOutput.mos (54%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDInitialState.mos (61%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDScale.mos (70%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDWithReset.mos (83%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/PIDWithResetScale.mos (75%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Ramp.mos (88%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Round.mos (77%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sin.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sort.mos (84%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Sqrt.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Subtract.mos (54%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Switch.mos (69%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/{Continuous => Reals}/Validation/Tan.mos (51%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsMinus.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsMinus.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsPlus.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsPlus.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Constant.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Constant.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Pulse.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Pulse.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Ramp.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Ramp.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sin.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Sin.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.StandardTime.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.StandardTime.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTableNegativeStartTime.mos => Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTableNegativeStartTime.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Abs.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Abs.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Acos.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Acos.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Add.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Add.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.AddParameter.mos => Buildings.Controls.OBC.CDL.Reals.Validation.AddParameter.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Asin.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Asin.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Atan.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Atan.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Atan2.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Atan2.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Average.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Average.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Cos.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Cos.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Derivative.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Derivative.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Divide.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Divide.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Exp.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Exp.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Greater.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Greater.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.GreaterThreshold.mos => Buildings.Controls.OBC.CDL.Reals.Validation.GreaterThreshold.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Hysteresis.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Hysteresis.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.IntegratorWithReset.mos => Buildings.Controls.OBC.CDL.Reals.Validation.IntegratorWithReset.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Less.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Less.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.LessThreshold.mos => Buildings.Controls.OBC.CDL.Reals.Validation.LessThreshold.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.LimitSlewRate.mos => Buildings.Controls.OBC.CDL.Reals.Validation.LimitSlewRate.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Limiter.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Limiter.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Line.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Line.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Log.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Log.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Log10.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Log10.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixGain.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MatrixGain.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMax.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMax.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMin.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMin.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Max.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Max.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Min.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Min.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Modulo.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Modulo.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage_nonZeroStart.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMax.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MultiMax.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMin.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MultiMin.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MultiSum.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MultiSum.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Multiply.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Multiply.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.MultiplyByParameter.mos => Buildings.Controls.OBC.CDL.Reals.Validation.MultiplyByParameter.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PID.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PID.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialDerivativeOutput.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialDerivativeOutput.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialState.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialState.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PIDScale.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PIDScale.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithReset.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithReset.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithResetScale.mos => Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithResetScale.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Ramp.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Ramp.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Round.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Round.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Sin.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Sin.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Sort.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Sort.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Sqrt.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Sqrt.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Subtract.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Subtract.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Switch.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Switch.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Continuous.Validation.Tan.mos => Buildings.Controls.OBC.CDL.Reals.Validation.Tan.mos} (100%) diff --git a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerChillerDXHeatingEconomizer.mo b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerChillerDXHeatingEconomizer.mo index 3d72bc1000a..015dbfbb345 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerChillerDXHeatingEconomizer.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerChillerDXHeatingEconomizer.mo @@ -200,19 +200,19 @@ model ControllerChillerDXHeatingEconomizer final reverseActing=false) "Cooling coil valve controller" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch the outdoor air fraction to 0 when in unoccupied mode" annotation (Placement(transformation(extent={{0,20},{20,40}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOcc "Current occupancy period, true if it is in occupant period" annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), iconTransformation(extent={{-140,-20},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=0) "Zero outside air fraction" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFan "Switch fan on" + Buildings.Controls.OBC.CDL.Reals.Switch swiFan "Switch fan on" annotation (Placement(transformation(extent={{70,120},{90,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysHea( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysHea( final uLow=0.01, final uHigh=0.05) "Hysteresis for heating" @@ -222,7 +222,7 @@ model ControllerChillerDXHeatingEconomizer annotation (Placement(transformation(extent={{40,94},{60,114}}))); Modelica.Blocks.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{70,-40},{90,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater chiOnTRoo(h=1) + Buildings.Controls.OBC.CDL.Reals.Greater chiOnTRoo(h=1) "Chiller on signal based on room temperature" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); diff --git a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerEconomizer.mo b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerEconomizer.mo index 9651c3eaeec..722860ae94c 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerEconomizer.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerEconomizer.mo @@ -89,7 +89,7 @@ model ControllerEconomizer "Controller for economizer" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); Modelica.Blocks.Math.Feedback feedback1 annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Controls.OBC.CDL.Continuous.Hysteresis hysChiPla( + Controls.OBC.CDL.Reals.Hysteresis hysChiPla( final uLow=0.95, final uHigh=0.98) "Hysteresis with delay to switch on cooling" @@ -101,7 +101,7 @@ model ControllerEconomizer "Controller for economizer" Modelica.Blocks.Logical.Not not1 "No economizer" annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); - Controls.OBC.CDL.Continuous.Hysteresis hysCooPot( + Controls.OBC.CDL.Reals.Hysteresis hysCooPot( final uLow=0, final uHigh=0.5) "Hysteresis with delay to check for cooling potential of outside air" @@ -114,7 +114,7 @@ model ControllerEconomizer "Controller for economizer" final trueHoldDuration=60*15) "True/false hold for mixing temperature" annotation (Placement(transformation(extent={{-24,-40},{-4,-20}}))); - Controls.OBC.CDL.Continuous.Hysteresis hysTMix( + Controls.OBC.CDL.Reals.Hysteresis hysTMix( final uLow=-0.5, final uHigh=0.5) "Hysteresis with delay for mixed air temperature" diff --git a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/Validation/ControllerChillerDXHeatingEconomizer.mo b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/Validation/ControllerChillerDXHeatingEconomizer.mo index 79edc2afa0f..892c2da658b 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/Validation/ControllerChillerDXHeatingEconomizer.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/BaseClasses/Validation/ControllerChillerDXHeatingEconomizer.mo @@ -26,7 +26,7 @@ model ControllerChillerDXHeatingEconomizer minOAFra=0.4, TSetSupAir=286.15) "Controller" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooHea( + Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooHea( table=[ 0, 15 + 273.15; 8*3600, 20 + 273.15; @@ -36,7 +36,7 @@ model ControllerChillerDXHeatingEconomizer extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic) "Heating setpoint for room temperature" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooCoo( + Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooCoo( table=[ 0, 30 + 273.15; 8*3600, 25 + 273.15; diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/BaseClasses/Room.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/BaseClasses/Room.mo index fbd6684838e..28b15d9fc00 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/BaseClasses/Room.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/BaseClasses/Room.mo @@ -219,7 +219,7 @@ model Room nPorts=1) "Source model for air infiltration" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable intLoad(table=[0, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable intLoad(table=[0, 0.1; 8*3600,0.1; 8*3600,1.0; 18*3600,1.0; 18*3600,0.1; 24*3600,0.1]) "Internal loads" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); @@ -370,8 +370,8 @@ This is for

    1. July 21, 2020, by Kun Zhang:
      Replaced the internal gain block from BaseClasses by directly using the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable. + +Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable.
    2. June 21, 2017, by Michael Wetter:
      diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/ChillerDXHeatingEconomizer.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/ChillerDXHeatingEconomizer.mo index af4be9b85bb..6f150f5a4fd 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/ChillerDXHeatingEconomizer.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/ChillerDXHeatingEconomizer.mo @@ -23,7 +23,7 @@ model ChillerDXHeatingEconomizer TSupChi_nominal=TSupChi_nominal, TSetSupAir=286.15) "Controller for single zone VAV system" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooHea( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooHea( table=[ 0, 15 + 273.15; 8*3600, 20 + 273.15; @@ -33,7 +33,7 @@ model ChillerDXHeatingEconomizer extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic) "Heating setpoint for room temperature" annotation (Placement(transformation(extent={{-152,40},{-132,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooCoo( table=[ 0, 30 + 273.15; 8*3600, 25 + 273.15; diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo index 7f772d74741..45292befecb 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo @@ -43,7 +43,7 @@ model Guideline36 "VAV controller" annotation (Placement(transformation(extent={{-120,-20},{-80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysChiPla( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysChiPla( uLow=-1, uHigh=0) "Hysteresis with delay to switch on cooling" @@ -59,19 +59,19 @@ model Guideline36 Buildings.Controls.OBC.CDL.Integers.Sources.Constant demLim(final k=0) "Cooling and heating demand imit level" annotation (Placement(transformation(extent={{-200,-30},{-180,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooWarTim(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooWarTim(final k=0) "Cooldown and warm-up time" annotation (Placement(transformation(extent={{-200,40},{-180,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccHeaSet(final k=293.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccHeaSet(final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-210,170},{-190,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccCooSet(final k=298.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccCooSet(final k=298.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-180,150},{-160,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoHeaSet(final k=288.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoHeaSet(final k=288.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-210,120},{-190,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoCooSet(final k=303.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoCooSet(final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); Modelica.Blocks.Sources.BooleanConstant freRes(k=true) diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo index d667f60e831..f24cc3b2171 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo @@ -87,7 +87,7 @@ block ZoneWithAHUG36 QCoo_flow_nominal=QCoo_flow_nominal, TSupChi_nominal=TSupChi_nominal) "HVAC system" annotation (Placement(transformation(extent={{40,-78},{80,-38}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysChiPla1(uLow=-1, uHigh=0) + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysChiPla1(uLow=-1, uHigh=0) "Hysteresis with delay to switch on cooling" annotation (Placement(transformation(extent={{-50,-130},{-30,-110}}))); Modelica.Blocks.Math.Feedback errTRooCoo1 @@ -101,23 +101,23 @@ block ZoneWithAHUG36 final k=0) "Cooling and heating demand imit level" annotation (Placement(transformation(extent={{-140,-120},{-120,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccHeaSet(final k=293.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccHeaSet(final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccCooSet(final k=297.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccCooSet(final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoHeaSet(final k=288.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoHeaSet(final k=288.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoCooSet(final k=303.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoCooSet(final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); Modelica.Blocks.Sources.BooleanConstant freRes(k=true) "Freeze protection reset" annotation (Placement(transformation(extent={{-140,-154},{-120,-134}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSupChiConst( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSupChiConst( final k=TSupChi_nominal) "Set point for chiller temperature" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/ConventionalSpring.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/ConventionalSpring.mo index 3f9e688061d..6c6353771fa 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/ConventionalSpring.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/ConventionalSpring.mo @@ -17,7 +17,7 @@ model ConventionalSpring thrOptOn(displayUnit="s")) "Optimal start for heating and cooling system " annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooHea( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooHea( table=[0,15 + 273.15; 8*3600,20 + 273.15; 18*3600,15 + 273.15; 24*3600,15 + 273.15], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, @@ -26,7 +26,7 @@ model ConventionalSpring each displayUnit="degC")) "Heating setpoint for room temperature" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TSetRooCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TSetRooCoo( table=[0,30 + 273.15; 8*3600,24 + 273.15; 18*3600,30 + 273.15; 24*3600,30 + 273.15], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, @@ -38,10 +38,10 @@ model ConventionalSpring Buildings.Controls.SetPoints.OccupancySchedule occSch(occupancy=3600*{8,18}) "Occupancy schedule" annotation (Placement(transformation(extent={{-100,-16},{-80,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetHeaOn(k=20 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOn(k=20 + 273.15) "Zone heating setpoint during occupied period" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOn(k=24 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOn(k=24 + 273.15) "Zone cooling setpoint during occupied time" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea(realTrue=-6) @@ -50,10 +50,10 @@ model ConventionalSpring Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1(realTrue=5) "Switch to occupied heating setpoint" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 + Buildings.Controls.OBC.CDL.Reals.Add add3 "New cooling setpoint schedule for room" annotation (Placement(transformation(extent={{40,34},{60,54}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "New heating setpoint schedule for room" annotation (Placement(transformation(extent={{40,64},{60,84}}))); Buildings.Air.Systems.SingleZone.VAV.Examples.OptimalStart.BaseClasses.ZoneWithAHUConventional zonAHUOpt diff --git a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo index 4886bf0164b..3ccb054a9a3 100644 --- a/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo +++ b/Buildings/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo @@ -19,10 +19,10 @@ model Guideline36Spring Buildings.Controls.SetPoints.OccupancySchedule occSch(occupancy=3600*{8,18}) "Occupancy schedule" annotation (Placement(transformation(extent={{-60,-34},{-40,-14}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetHeaOn(k=20 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOn(k=20 + 273.15) "Zone heating setpoint during occupied period" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOn(k=24 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOn(k=24 + 273.15) "Zone cooling setpoint during occupied time" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); Buildings.Controls.OBC.Utilities.OptimalStart optStaCoo( @@ -32,7 +32,7 @@ model Guideline36Spring thrOptOn(displayUnit="s")) "Optimal start for cooling" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=0) "No optimal start" annotation (Placement(transformation(extent={{-20,-78},{0,-58}}))); Buildings.Air.Systems.SingleZone.VAV.Examples.OptimalStart.BaseClasses.ZoneWithAHUG36 zonAHUG36Opt diff --git a/Buildings/Applications/DataCenters/ChillerCooled/Equipment/BaseClasses/PartialPumpParallel.mo b/Buildings/Applications/DataCenters/ChillerCooled/Equipment/BaseClasses/PartialPumpParallel.mo index 36aefacabae..7f388892186 100644 --- a/Buildings/Applications/DataCenters/ChillerCooled/Equipment/BaseClasses/PartialPumpParallel.mo +++ b/Buildings/Applications/DataCenters/ChillerCooled/Equipment/BaseClasses/PartialPumpParallel.mo @@ -139,20 +139,20 @@ partial model PartialPumpParallel "Partial model for pump parallel" "Isolation valves" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys[num]( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys[num]( each final uLow=threshold, each final uHigh=2*threshold) "Hysteresis for isolation valves" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi[num] + Buildings.Controls.OBC.CDL.Reals.Switch swi[num] "Switch to enable pump only once the valve is commanded open" annotation (Placement(transformation(extent={{-48,-40},{-28,-20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer[num]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[num]( each final k=0.0) "Outputs 0 as the control signal" annotation (Placement(transformation(extent={{-90,-70},{-70,-50}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one[num](each final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one[num](each final k= 1.0) "Outputs 1 as the control signal" annotation (Placement(transformation(extent={{-90,-32},{-70,-12}}))); initial equation diff --git a/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo b/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo index 1e23ed09aac..4d03ca35b3b 100644 --- a/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo +++ b/Buildings/Applications/DataCenters/ChillerCooled/Examples/BaseClasses/PartialDataCenter.mo @@ -283,12 +283,12 @@ partial model PartialDataCenter annotation (Placement(transformation(extent={{-180,-100},{-160,-80}}))); Modelica.Blocks.Math.Gain gai1(k=1/dpSetPoi) "Gain effect" annotation (Placement(transformation(extent={{-200,-70},{-220,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi[numChi] + Buildings.Controls.OBC.CDL.Reals.Switch swi[numChi] "Switch to assign pump signal if plant is on" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); Buildings.Controls.OBC.CDL.Logical.Or plaOn "Output true if plant is on" annotation (Placement(transformation(extent={{-160,230},{-140,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer[numChi](each final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[numChi](each final k=0) "Outputs zero" annotation (Placement(transformation(extent={{-220,230},{-200,250}}))); Modelica.Blocks.MathBoolean.Or chiOnSta(nu=numChi) diff --git a/Buildings/Applications/DataCenters/DXCooled/Controls/AirsideEconomizer.mo b/Buildings/Applications/DataCenters/DXCooled/Controls/AirsideEconomizer.mo index 9fc15b58aca..0bb6e5981ca 100644 --- a/Buildings/Applications/DataCenters/DXCooled/Controls/AirsideEconomizer.mo +++ b/Buildings/Applications/DataCenters/DXCooled/Controls/AirsideEconomizer.mo @@ -36,7 +36,7 @@ model AirsideEconomizer "Controller for airside economizer" Ti=Ti) "PID controller" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0) "Constant output signal with value 1" annotation (Placement(transformation(extent={{0,20},{20,40}}))); @@ -48,7 +48,7 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal ecoOff "Determine if airside economizer is off" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch1 + Buildings.Controls.OBC.CDL.Reals.Switch switch1 "Switch to select control output" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); diff --git a/Buildings/Applications/DataCenters/DXCooled/Controls/Compressor.mo b/Buildings/Applications/DataCenters/DXCooled/Controls/Compressor.mo index de228f94a42..4066ec52c04 100644 --- a/Buildings/Applications/DataCenters/DXCooled/Controls/Compressor.mo +++ b/Buildings/Applications/DataCenters/DXCooled/Controls/Compressor.mo @@ -49,10 +49,10 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal freCoo "Determine if free cooling is on" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch1 + Buildings.Controls.OBC.CDL.Reals.Switch switch1 "Switch to select control output" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0) "Constant output signal with value 1" annotation (Placement(transformation(extent={{20,30},{40,50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo index 7544572928b..759f15f723b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo @@ -147,31 +147,31 @@ protected final parameter Real hOutHigLimCutLow = hOutHigLimCutHig - delEntHis "Hysteresis block low limit cutoff"; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 if use_enthalpy "Add block determines difference between hOut and hOutCut" annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Add block determines difference between TOut and TOutCut" annotation (Placement(transformation(extent={{-200,220},{-180,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutTem( final uLow=TOutHigLimCutLow, final uHigh=TOutHigLimCutHig) "Outdoor air temperature hysteresis for both fixed and differential dry bulb temperature cutoff conditions" annotation (Placement(transformation(extent={{-160,220},{-140,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutEnt( final uLow=hOutHigLimCutLow, final uHigh=hOutHigLimCutHig) if use_enthalpy "Outdoor air enthalpy hysteresis for both fixed and differential enthalpy cutoff conditions" annotation (Placement(transformation(extent={{-160,140},{-140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch outDamSwitch "Set maximum OA damper position to minimum at disable (after a given time delay)" annotation (Placement(transformation(extent={{82,-78},{102,-58}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamSwitch "Set minimum RA damper position to maximum at disable" + Buildings.Controls.OBC.CDL.Reals.Switch retDamSwitch "Set minimum RA damper position to maximum at disable" annotation (Placement(transformation(extent={{-20,-176},{0,-156}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch maxRetDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch maxRetDamSwitch "Keep maximum RA damper position at physical maximum for a short time period after disable signal" annotation (Placement(transformation(extent={{60,-136},{80,-116}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minRetDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch minRetDamSwitch "Keep minimum RA damper position at physical maximum for a short time period after disable" annotation (Placement(transformation(extent={{60,-178},{80,-158}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not that starts the timer at disable signal " diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Common.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Common.mo index 7bae9d1741d..15dc28aefa9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Common.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Common.mo @@ -126,7 +126,7 @@ block Common annotation (Placement(transformation(extent={{180,-160},{220,-120}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset damLimCon( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset damLimCon( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -139,48 +139,48 @@ block Common protected parameter Real yMin=0 "Lower limit of control loop signal"; parameter Real yMax=1 "Upper limit of control loop signal"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhy_min) "Physically fixed minimum position of the outdoor air damper. This is the initial position of the economizer damper" annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhy_max) "Physically fixed maximum position of the outdoor air damper." annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMinSig( final k=retDamPhy_min) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhy_max) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSigLim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSigLim( final k=yMin) "Equals minimum controller output signal" annotation (Placement(transformation(extent={{-100,200},{-80,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSigLim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSigLim( final k=yMax) "Equals maximum controller output signal" annotation (Placement(transformation(extent={{-20,200},{0,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sigFraForOutDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sigFraForOutDam( final k=uRetDam_min) "Equals the fraction of the control loop signal below which the outdoor air damper limit gets modulated and above which the return air damper limit gets modulated" annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minOutDam( + Buildings.Controls.OBC.CDL.Reals.Line minOutDam( final limitBelow=true, final limitAbove=true) "Linear mapping of the outdoor air damper position to the control signal" annotation (Placement(transformation(extent={{120,140},{140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minRetDam( + Buildings.Controls.OBC.CDL.Reals.Line minRetDam( final limitBelow=true, final limitAbove=true) "Linear mapping of the return air damper position to the control signal" annotation (Placement(transformation(extent={{120,100},{140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwitch + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMinSwitch "A switch to deactivate the return air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDamPosMaxSwitch + Buildings.Controls.OBC.CDL.Reals.Switch outDamPosMaxSwitch "A switch to deactivate the outdoor air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{40,10},{60,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithAFMS.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithAFMS.mo index 47957d56690..6b742cef2f8 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithAFMS.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithAFMS.mo @@ -150,7 +150,7 @@ block SeparateWithAFMS annotation (Placement(transformation(extent={{220,-310},{260,-270}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conMinOA( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conMinOA( final controllerType=minOAConTyp, final k=kMinOA, final Ti=TiMinOA, @@ -171,56 +171,56 @@ protected Buildings.Controls.OBC.CDL.Logical.And enaMinCon "Check if the minimum outdoor air control loop should be enabled" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Constant" annotation (Placement(transformation(extent={{120,260},{140,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0.5) "Constant" annotation (Placement(transformation(extent={{80,200},{100,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minOutDamPos( + Buildings.Controls.OBC.CDL.Reals.Line minOutDamPos( final limitBelow=true, final limitAbove=true) "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{160,230},{180,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutDamPhyPosMinSig( final k=minOutDamPhy_min) "Physically fixed minimum position of the minimum outdoor air damper. This is the initial position of the economizer damper" annotation (Placement(transformation(extent={{80,260},{100,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutDamPhyPosMaxSig( final k=minOutDamPhy_max) "Physically fixed maximum position of the minimum outdoor air damper" annotation (Placement(transformation(extent={{120,200},{140,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "Constant one" annotation (Placement(transformation(extent={{-200,-80},{-180,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=0.05) "Constant" annotation (Placement(transformation(extent={{-160,-80},{-140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( final k=0.8) "Constant" annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFanSpe( final k=minSpe) "Minimum fan speed" annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Line moaP( + Buildings.Controls.OBC.CDL.Reals.Line moaP( final limitBelow=true, final limitAbove=true) "Linear mapping of the supply fan speed to the control signal" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=0.05) "Check if economizer outdoor air damper is less than projected position" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.98, final h=0.01) "Check if the minimum outdoor air damper position is fully open" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1.1) "Projected position with a gain factor" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=0.05) "Check if the economizer outdoor air damper is greater than threshold" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); @@ -236,37 +236,37 @@ protected Buildings.Controls.OBC.CDL.Logical.Or disRetDamMin "Disable return air damper minimum outdoor air control" annotation (Placement(transformation(extent={{60,-20},{80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhy_min) "Physically fixed minimum position of the outdoor air damper. This is the initial position of the economizer damper" annotation (Placement(transformation(extent={{-200,-130},{-180,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhy_max) "Physically fixed maximum position of the outdoor air damper." annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMinSig( final k=retDamPhy_min) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-200,-210},{-180,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhy_max) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-200,-250},{-180,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwi + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMinSwi "A switch to deactivate the return air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{180,-210},{200,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMaxSwi + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMaxSwi "A switch to deactivate the return air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{180,-260},{200,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Line maxRetDamPos( + Buildings.Controls.OBC.CDL.Reals.Line maxRetDamPos( final limitBelow=true, final limitAbove=true) "Maximum return air damper position" annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=0.5) "Constant" annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=1) "Constant" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithDP.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithDP.mo index fd7e8136b7a..92a492594b1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithDP.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/SeparateWithDP.mo @@ -148,10 +148,10 @@ block SeparateWithDP "Physical maximum return air damper position limit. Required as an input for the economizer enable disable sequence" annotation (Placement(transformation(extent={{220,-360},{260,-320}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply minDp if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1 + Buildings.Controls.OBC.CDL.Reals.Multiply minDp if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1 "Minimum pressure difference setpoint when complying with ASHRAE 62.1" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset maxRetDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset maxRetDam( final controllerType=dpCon, final k=kDp, final Ti=TiDp, @@ -159,27 +159,27 @@ block SeparateWithDP annotation (Placement(transformation(extent={{120,160},{140,180}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minDesDp( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minDesDp( final k=dpDesMinOutDam) "Design minimum outdoor air damper pressure difference" annotation (Placement(transformation(extent={{-180,180},{-160,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1 "Square of the normalized minimum airflow" annotation (Placement(transformation(extent={{-180,140},{-160,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final h=1) "Check if the minimum pressure difference setpoint is greater than zero" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=0.05) "Check if economizer outdoor air damper is less than projected position" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1.1) "Projected position with a gain factor" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=0.05) "Check if the economizer outdoor air damper is greater than threshold" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); @@ -204,83 +204,83 @@ protected Buildings.Controls.OBC.CDL.Logical.And3 enaMinDam "Check if the minimum outdoor air damper should be enabled" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "Constant" annotation (Placement(transformation(extent={{-200,-130},{-180,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFanSpe( final k=minSpe) "Minimum fan speed" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0.05) "Constant" annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=0.8) "Constant" annotation (Placement(transformation(extent={{-200,-70},{-180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Line moaP( + Buildings.Controls.OBC.CDL.Reals.Line moaP( final limitBelow=true, final limitAbove=true) "Linear mapping of the supply fan speed to the control signal" annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhy_min) "Physically fixed minimum position of the outdoor air damper. This is the initial position of the economizer damper" annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhy_max) "Physically fixed maximum position of the outdoor air damper." annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMinSig( final k=retDamPhy_min) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-200,-260},{-180,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhy_max) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-200,-300},{-180,-280}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMaxSwi + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMaxSwi "A switch to deactivate the return air damper maximum outdoor airflow control" annotation (Placement(transformation(extent={{180,-310},{200,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwi + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMinSwi "A switch to deactivate the return air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{180,-260},{200,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Square of the normalized minimum airflow" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Square of the normalized minimum airflow" annotation (Placement(transformation(extent={{-180,220},{-160,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minAbsDp( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minAbsDp( final k=dpAbsMinOutDam) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Absolute minimum outdoor air damper pressure difference" annotation (Placement(transformation(extent={{-180,330},{-160,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minDp1( + Buildings.Controls.OBC.CDL.Reals.Line minDp1( final limitAbove=true) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Minimum pressure difference setpoint when complying with Title 24" annotation (Placement(transformation(extent={{20,260},{40,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one1( final k=1) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Design fan speed" annotation (Placement(transformation(extent={{-60,230},{-40,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal( final k=0.5) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Constant" annotation (Placement(transformation(extent={{-60,290},{-40,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one2( final k=1) if not have_CO2Sen and venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Design fan speed" annotation (Placement(transformation(extent={{-120,240},{-100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply actAbsMinDp + Buildings.Controls.OBC.CDL.Reals.Multiply actAbsMinDp if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Active absolute minimum pressure difference setpoint" annotation (Placement(transformation(extent={{-120,300},{-100,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply actDesMinDp + Buildings.Controls.OBC.CDL.Reals.Multiply actDesMinDp if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 "Active design minimum pressure difference setpoint" annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_LoopDisable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_LoopDisable.mo index 7561d2db8b7..86706aefcf8 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_LoopDisable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_LoopDisable.mo @@ -2,11 +2,11 @@ within Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subseque model Common_LoopDisable "Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=VOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet1_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet1_flow( final k=VOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{20,0},{40,20}}))); @@ -22,12 +22,12 @@ model Common_LoopDisable "AHU operation mode is NOT Occupied" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut1_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut1_flow( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_VOut_flow.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_VOut_flow.mo index b189251c8dc..0e12e639317 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_VOut_flow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/Common_VOut_flow.mo @@ -2,11 +2,11 @@ within Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subseque model Common_VOut_flow "Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor volumetric airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=VOutMin_flow, final height=incVOutSet_flow) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithAFMS.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithAFMS.mo index 3693ae77a8d..d51ad0a6aa9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithAFMS.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithAFMS.mo @@ -17,11 +17,11 @@ model SeparateWithAFMS "Multi zone VAV AHU minimum outdoor air control - damper position limits" annotation (Placement(transformation(extent={{200,10},{220,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor volumetric airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{120,50},{140,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=VOutMin_flow, final height=incVOutSet_flow) @@ -57,7 +57,7 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.warmUp) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow1( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-220,50},{-200,70}}))); @@ -65,21 +65,21 @@ protected final k=false) "Fan is off" annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow1( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-220,90},{-200,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{-220,-70},{-200,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supFanSpe( final k=0) "Supply fan speed" annotation (Placement(transformation(extent={{-220,-110},{-200,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow2( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); @@ -87,25 +87,25 @@ protected final k=true) "Fan is on" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow2( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos1( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supFanSpe1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supFanSpe1( final k=0.2) "Supply fan speed" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos2( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe2( final height=0.5, final duration=1800, final offset=0.1) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithDP.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithDP.mo index 7b660996f1b..71345b86622 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithDP.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits/Validation/SeparateWithDP.mo @@ -23,7 +23,7 @@ model SeparateWithDP "Multi zone VAV AHU minimum outdoor air control - damper position limits" annotation (Placement(transformation(extent={{200,10},{220,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor volumetric airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{120,50},{140,70}}))); @@ -57,7 +57,7 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.warmUp) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow1( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-220,50},{-200,70}}))); @@ -65,15 +65,15 @@ protected final k=false) "Fan is off" annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{-220,-70},{-200,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supFanSpe( final k=0) "Supply fan speed" annotation (Placement(transformation(extent={{-220,-110},{-200,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow2( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); @@ -81,36 +81,36 @@ protected final k=true) "Fan is on" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos1( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supFanSpe1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supFanSpe1( final k=0.2) "Supply fan speed" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos2( final duration=1800, final offset=0.1, final height=0.5) "Outdoor air damper position" annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe2( final height=0.5, final duration=1800, final offset=0.1) "Supply fan speed" annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpDam( final duration=1800, final offset=250, final height=100) "Pressure accross outdoor air damper" annotation (Placement(transformation(extent={{-220,90},{-200,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpDam1( final duration=1800, final offset=250, final height=100) "Pressure accross outdoor air damper" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpDam2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpDam2( final duration=1800, final offset=120, final height=52) "Pressure accross outdoor air damper" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Reliefs.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Reliefs.mo index bc86e24e0e0..d16d0379788 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Reliefs.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Reliefs.mo @@ -77,32 +77,32 @@ block Reliefs iconTransformation(extent={{100,40},{140,80}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMinLimSig( final k=uMin) "Minimal control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-60,-32},{-40,-12}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMaxLimSig( final k=uOutDamMax) "Maximum control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamConMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamConMinLimSig( final k=uRetDamMin) "Minimal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-80,68},{-60,88}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamMaxLimSig( final k=uMax) "Maximal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line outDamPos( + Buildings.Controls.OBC.CDL.Reals.Line outDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( + Buildings.Controls.OBC.CDL.Reals.Line retDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min "Overwrite due to freeze protection" + Buildings.Controls.OBC.CDL.Reals.Min min "Overwrite due to freeze protection" annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max "Overwrite due to freeze protection" + Buildings.Controls.OBC.CDL.Reals.Max max "Overwrite due to freeze protection" annotation (Placement(transformation(extent={{60,50},{80,70}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/ReturnFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/ReturnFan.mo index 322ba468f78..ba003652642 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/ReturnFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/ReturnFan.mo @@ -58,28 +58,28 @@ block ReturnFan iconTransformation(extent={{100,-80},{140,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant damMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant damMinLimSig( final k=uMin) "Minimal control loop signal for the relief and return air damper position" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant damMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant damMaxLimSig( final k=uMax) "Maximal control loop signal for the return and exhast air damper" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( + Buildings.Controls.OBC.CDL.Reals.Line retDamPos( final limitBelow=true, final limitAbove=true) "Return air damper position" annotation (Placement(transformation(extent={{40,30},{60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Line relDamPos( + Buildings.Controls.OBC.CDL.Reals.Line relDamPos( final limitBelow=true, final limitAbove=true) if not have_dirCon "Relief air damper position" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) if not have_dirCon "Constant zero" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "Constant one" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/Reliefs.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/Reliefs.mo index 7cb5b58f687..a516a411fdc 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/Reliefs.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/Reliefs.mo @@ -6,24 +6,24 @@ model Reliefs "Multi zone VAV AHU minimum outdoor air control - damper modulation" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxRetDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxRetDam( final k=0.9) "Return damper maximum position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp temLoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp temLoo( final duration=1800, final offset=-1, final height=2) "Temperature control loop output" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxOutDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxOutDam( final k=1) "Outdoor air damper maximum position" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minRetDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minRetDam( final k=0.1) "Return damper minimum position" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutDam( final k=0) "Outdoor air damper minimum position" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/ReturnFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/ReturnFan.mo index 5e8d6755c6b..d90936dffb9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/ReturnFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulations/Validation/ReturnFan.mo @@ -11,16 +11,16 @@ model ReturnFan "Multi zone VAV AHU minimum outdoor air control - damper modulation, the unit does not have direct pressure control" annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxRetDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxRetDam( final k=0.9) "Return damper maximum position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp temLoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp temLoo( final duration=1800, final offset=-1, final height=2) "Temperature control loop output" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minRetDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minRetDam( final k=0.1) "Return damper minimum position" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo index 2f12273dda8..7f063c5522c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo @@ -15,34 +15,34 @@ model Enable_FreProSta "Multi zone VAV AHU enable disable sequence" annotation (Placement(transformation(extent={{60,-40},{80,-12}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "OA temperature high limit cutoff" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-120},{-90,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMax( final k=1) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMax( final k=0.8) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-60},{-90,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMin( final k=0) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-90},{-90,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFanSta(k=true) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo index ab102bbc43d..f151aad6243 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Economizers.Subseque model Enable_TOut_hOut "Model validates economizer disable in case outdoor air conditions are above cutoff" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut1( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid TOut( @@ -43,33 +43,33 @@ protected final quantity="SpecificEnergy")=65100 "Outdoor air enthalpy high limit cutoff"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-240,80},{-220,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-240,118},{-220,138}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-80},{-220,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-120},{-220,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMax( final k=0.8) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMin( final k=0) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-200},{-140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMax( final k=1) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-120},{-140,-100}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo index bc87a0c7306..428fc16a22f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo @@ -62,22 +62,22 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 40000) "Outdoor air enthalpy is below the cutoff" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 30) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, example assumes 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final height=incVOutSet_flow, final offset=VOutMin_flow, final duration=1800) "Measured outdoor air volumetric airflow" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup( final duration=1800, final height=2, final offset=-1) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo index 30668756345..780290ec4ca 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo @@ -54,30 +54,30 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 5) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, example assumes 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final offset=VOutMin_flow, final duration=1800, final height=incVOutSet_flow) "Measured outdoor air volumetric airflow" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup( final duration=1800, final height=2, final offset=-1) "Supply air temperature control signal" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final duration=1800, final height=0.5, final offset=0.2) "Supply fan speed" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpDam2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpDam2( final duration=1800, final offset=120, final height=52) "Pressure accross outdoor air damper" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/FreezeProtection.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/FreezeProtection.mo index 2677d3cf871..7ba704765e2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/FreezeProtection.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/FreezeProtection.mo @@ -268,7 +268,7 @@ block FreezeProtection annotation (Placement(transformation(extent={{440,-860},{480,-820}}), iconTransformation(extent={{100,-210},{140,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=273.15 + 4.4, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -285,10 +285,10 @@ block FreezeProtection final k=minHotWatReq) if have_hotWatCoi and have_frePro "Minimum hot-water plant requests" annotation (Placement(transformation(extent={{-20,830},{0,850}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minVen if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch minVen if have_frePro "Minimum ventilation when in stage 1 mode" annotation (Placement(transformation(extent={{60,730},{80,750}}))); - Buildings.Controls.OBC.CDL.Continuous.PID heaCoiCon1( + Buildings.Controls.OBC.CDL.Reals.PID heaCoiCon1( final controllerType=heaCoiCon, final k=k, final Ti=Ti, @@ -297,11 +297,11 @@ block FreezeProtection final yMin=yMin) if have_hotWatCoi and have_frePro "Heating coil control in stage 1 mode" annotation (Placement(transformation(extent={{-320,680},{-300,700}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaCoi1 + Buildings.Controls.OBC.CDL.Reals.Switch heaCoi1 if have_hotWatCoi and have_frePro "Heating coil position" annotation (Placement(transformation(extent={{120,660},{140,680}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=273.15 + 7, final h=Thys) if have_frePro "Check if supply air temperature is greater than threshold" @@ -316,7 +316,7 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.Edge endStaOne if have_frePro "Clear the latch to end the stage 1 freeze protection" annotation (Placement(transformation(extent={{-260,592},{-240,612}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1( final t=273.15 + 3.3, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -330,22 +330,22 @@ block FreezeProtection final falseHoldDuration=0) if have_frePro "Stage in stage 2 freeze protection mode" annotation (Placement(transformation(extent={{-300,452},{-280,472}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDam2 if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch outDam2 if have_frePro "Outdoor air damper position" annotation (Placement(transformation(extent={{120,590},{140,610}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) if have_frePro "Fully closed damper position" annotation (Placement(transformation(extent={{40,610},{60,630}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minOutDam2 if minOADes == + Buildings.Controls.OBC.CDL.Reals.Switch minOutDam2 if minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow and have_frePro "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{120,540},{140,560}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDam2 if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch retDam2 if have_frePro "Return air damper position" annotation (Placement(transformation(extent={{120,408},{140,428}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=1) if have_frePro "Fully open damper or valve position" annotation (Placement(transformation(extent={{-140,310},{-120,330}}))); @@ -364,7 +364,7 @@ block FreezeProtection final t=900) if have_frePro "Check if the supply air temperature has been lower than threshold value for sufficient long time" annotation (Placement(transformation(extent={{-300,240},{-280,260}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2( final t=273.15 + 1, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -384,33 +384,33 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.Latch lat1 if have_frePro "Stay in stage 3 freeze protection mode" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch supFan if (not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch supFan if (not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro "Supply fan speed" annotation (Placement(transformation(extent={{120,-230},{140,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retFan if (buiPreCon == + Buildings.Controls.OBC.CDL.Reals.Switch retFan if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) and (not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro "Return fan speed" annotation (Placement(transformation(extent={{120,-370},{140,-350}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch relFan if buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan + Buildings.Controls.OBC.CDL.Reals.Switch relFan if buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan and (not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro "Relief fan speed" annotation (Placement(transformation(extent={{120,-510},{140,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=0) if have_frePro "Zero constant" annotation (Placement(transformation(extent={{-140,48},{-120,68}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDam if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch outDam if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Outdoor air damper" annotation (Placement(transformation(extent={{320,70},{340,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooCoi if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch cooCoi if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Cooling coil position" @@ -425,11 +425,11 @@ block FreezeProtection and have_frePro "Minimum hot-water plant requests" annotation (Placement(transformation(extent={{-140,-782},{-120,-762}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 if have_hotWatCoi and have_frePro "Higher of supply air and mixed air temperature" annotation (Placement(transformation(extent={{-300,-700},{-280,-680}}))); - Buildings.Controls.OBC.CDL.Continuous.PID heaCoiMod( + Buildings.Controls.OBC.CDL.Reals.PID heaCoiMod( final controllerType=heaCoiCon, final k=k, final Ti=Ti, @@ -438,11 +438,11 @@ block FreezeProtection final yMin=yMin) if have_hotWatCoi and have_frePro "Heating coil control when it is in stage 3 mode" annotation (Placement(transformation(extent={{40,-670},{60,-650}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=273.15 + 27) if have_hotWatCoi and have_frePro "Setpoint temperature" annotation (Placement(transformation(extent={{-140,-670},{-120,-650}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaCoiPos if have_hotWatCoi and ( + Buildings.Controls.OBC.CDL.Reals.Switch heaCoiPos if have_hotWatCoi and ( not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro "Heating coil position" @@ -474,7 +474,7 @@ block FreezeProtection final t=3600) if have_frePro "Check if it has been in stage 2 for sufficient long time" annotation (Placement(transformation(extent={{-260,420},{-240,440}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minOutDam if minOADes == + Buildings.Controls.OBC.CDL.Reals.Switch minOutDam if minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow and (not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro @@ -493,12 +493,12 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.Or or2 if have_frePro "Start stage 1 freeze protection mode" annotation (Placement(transformation(extent={{-160,802},{-140,822}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDam if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch retDam if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Return air damper position" annotation (Placement(transformation(extent={{320,150},{340,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supTemSet( final k=273.15+ 6) if have_hotWatCoi and have_frePro "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-380,680},{-360,700}}))); @@ -573,17 +573,17 @@ block FreezeProtection and have_frePro "Disable relief fan when in stage 3" annotation (Placement(transformation(extent={{320,-430},{340,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1) if (have_hotWatCoi and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{320,-650},{340,-630}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{120,-620},{140,-600}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=1) if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro @@ -594,7 +594,7 @@ block FreezeProtection or not have_frePro) "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-470},{340,-450}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3( final k=1) if ((buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) @@ -607,17 +607,17 @@ block FreezeProtection or not have_frePro) "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-330},{340,-310}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{320,120},{340,140}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai5( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai5( final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{320,40},{340,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai6( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai6( final k=1) if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment) and have_frePro @@ -632,44 +632,44 @@ block FreezeProtection or (not have_frePro) "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-190},{340,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai7( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai7( final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{120,-260},{140,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai8(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai8(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-240,-60},{-220,-40}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt9(final k=0) if not have_frePro "Dummy constant" annotation (Placement(transformation(extent={{380,360},{400,380}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai9(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai9(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-240,-90},{-220,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai10(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai10(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-240,-120},{-220,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai11(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai11(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-260,-280},{-240,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai12(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai12(final k=1) if (not have_frePro) and (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-260,-420},{-240,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai13(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai13(final k=1) if (not have_frePro) and buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-260,-560},{-240,-540}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai14(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai14(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-260,-640},{-240,-620}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai15(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai15(final k=1) if (not have_frePro) and have_hotWatCoi "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-260,-740},{-240,-720}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/AHU.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/AHU.mo index f896d708a5d..827f76740fc 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/AHU.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/AHU.mo @@ -72,54 +72,54 @@ block AHU "Outdoor airflow related calculations at the AHU level" annotation (Placement(transformation(extent={{220,-120},{260,-80}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uncDesOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uncDesOutAir( final k=VUncDesOutAir_flow) "Uncorrected design outdoor airflow rate, including diversity where applicable" annotation (Placement(transformation(extent={{-180,0},{-160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Sum of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-180,70},{-160,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Uncorrected minimum outdoor airflow rate" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "First input divided by second input" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=1) "Add parameter" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sysVenEff + Buildings.Controls.OBC.CDL.Reals.Subtract sysVenEff "Current system ventilation efficiency" annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Avoid devide by zero" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desOutAir( final k=VDesTotOutAir_flow) "Design total outdoor airflow rate " annotation (Placement(transformation(extent={{120,50},{140,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div2 "Division" + Buildings.Controls.OBC.CDL.Reals.Divide div2 "Division" annotation (Placement(transformation(extent={{120,-10},{140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min2 + Buildings.Controls.OBC.CDL.Reals.Min min2 "Uncorrected minimum outdoor airflow rate" annotation (Placement(transformation(extent={{180,20},{200,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiDivZer( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiDivZer( final k=1E-3) "Gain, used to avoid division by zero if the flow rate is smaller than 0.1%" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOutMin + Buildings.Controls.OBC.CDL.Reals.Divide norVOutMin "Normalization for minimum outdoor air flow rate" annotation (Placement(transformation(extent={{160,-70},{180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOut + Buildings.Controls.OBC.CDL.Reals.Divide norVOut if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow or minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper) "Normalization for outdoor air flow rate" annotation (Placement(transformation(extent={{160,-110},{180,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant neaZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant neaZer( final k=1E-4) "Near zero value" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Avoid devide by zero" annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/SumZone.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/SumZone.mo index bd7b3d0f701..8000cb8f305 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/SumZone.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/SumZone.mo @@ -70,53 +70,53 @@ block SumZone "Calculate the sum of zone level setpoints" annotation (Placement(transformation(extent={{220,-90},{260,-50}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo( final K=zonGroMat) "Vector of total zone flow of each group" annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo1( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo1( final K=zonGroMat) "Vector of total zone flow of each group" annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nGro] "Convert boolean to real" annotation (Placement(transformation(extent={{-40,170},{-20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul[nGro] + Buildings.Controls.OBC.CDL.Reals.Multiply mul[nGro] "Find the total flow of zone group" annotation (Placement(transformation(extent={{20,110},{40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1[nGro] + Buildings.Controls.OBC.CDL.Reals.Multiply mul1[nGro] "Find the total flow of zone group" annotation (Placement(transformation(extent={{20,50},{40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( final nin=nGro) "Sum of the adjusted population component breathing zone flow rate" annotation (Placement(transformation(extent={{80,110},{100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum1( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1( final nin=nGro) "Sum of the adjusted area component breathing zone flow rate" annotation (Placement(transformation(extent={{80,50},{100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo2( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo2( final K=zonGroMat) "Vector of total zone flow of each group" annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul2[nGro] + Buildings.Controls.OBC.CDL.Reals.Multiply mul2[nGro] "Find the total flow of zone group" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum2( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum2( final nin=nGro) "Sum of the zone primary airflow rates for all zones in all zone groups that are in occupied mode" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1[nZon] + Buildings.Controls.OBC.CDL.Reals.Divide div1[nZon] "Zone outdoor air fraction" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo3( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo3( final K=zonGroMatTra) "Vector of zones in occupied mode" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul3[nZon] + Buildings.Controls.OBC.CDL.Reals.Multiply mul3[nZon] "Vector of zone outdoor air fraction" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax mulMax( + Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax( final nin=nZon) "Maximum zone outdoor air fraction" annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); @@ -127,13 +127,13 @@ block SumZone "Calculate the sum of zone level setpoints" Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nGro] "Check if operation mode is occupied" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2[nZon] "Avoid devide by zero" + Buildings.Controls.OBC.CDL.Reals.Max max2[nZon] "Avoid devide by zero" annotation (Placement(transformation(extent={{-100,-150},{-80,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant neaZer[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant neaZer[nZon]( final k=fill(1E-4, nZon)) "Near zero value" annotation (Placement(transformation(extent={{-160,-180},{-140,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1[nZon] "Use smaller value" + Buildings.Controls.OBC.CDL.Reals.Min min1[nZon] "Use smaller value" annotation (Placement(transformation(extent={{-120,-104},{-100,-84}}))); equation connect(uOpeMod, intEqu1.u1) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/Validation/OutdoorAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/Validation/OutdoorAirFlow.mo index 260d2e6cd4f..1a7aa3bdaeb 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/Validation/OutdoorAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/ASHRAE62_1/Validation/OutdoorAirFlow.mo @@ -29,23 +29,23 @@ protected Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.unoccupied}) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant adjPopFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant adjPopFlo[nZon]( final k={0.1,0.12,0.2,0.15}) "Adjusted population component flow" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant adjAreFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant adjAreFlo[nZon]( final k={0.08,0.1,0.15,0.1}) "Adjusted area component flow" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant priFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant priFlo[nZon]( final k={0.3,0.25,0.4,0.5}) "Measured zone primary airflow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOAFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOAFlo[nZon]( final k={0.2,0.21,0.35,0.25}) "Minimum outdoor airflow" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outAirFlo(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outAirFlo(final k=1) "Adjusted area component flow" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/AHU.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/AHU.mo index f69e89a43b8..8cfc690db7e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/AHU.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/AHU.mo @@ -78,58 +78,58 @@ block AHU "AHU level setpoint calculation" annotation (Placement(transformation(extent={{100,-180},{140,-140}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant absOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant absOutAir( final k=VAbsOutAir_flow) "Design outdoor airflow rate when all zones with CO2 sensors or occupancy sensors are unpopulated" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Effective outdoor air absolute minimum setpoint" annotation (Placement(transformation(extent={{20,150},{40,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desOutAir( final k=VDesOutAir_flow) "Design minimum outdoor airflow with areas served by the system are occupied at their design population, including diversity where applicable" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min2 "Effective outdoor air design minimum setpoint" + Buildings.Controls.OBC.CDL.Reals.Min min2 "Effective outdoor air design minimum setpoint" annotation (Placement(transformation(extent={{20,50},{40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOutMin + Buildings.Controls.OBC.CDL.Reals.Divide norVOutMin "Normalization for minimum outdoor air flow rate" annotation (Placement(transformation(extent={{20,10},{40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOutMin1 + Buildings.Controls.OBC.CDL.Reals.Divide norVOutMin1 "Normalization for minimum outdoor air flow rate" annotation (Placement(transformation(extent={{20,110},{40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0.5) if have_CO2Sen "Constant value" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=1) if have_CO2Sen "Constant value" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Line effOutAir( + Buildings.Controls.OBC.CDL.Reals.Line effOutAir( final limitBelow=false, final limitAbove=true) if have_CO2Sen "Normalized effective outdoor air setpoint" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1) if not have_CO2Sen "When there is no zone has CO2 sensor, design setpoint will be applied" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOutMin2 if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Divide norVOutMin2 if have_CO2Sen "Normalization for minimum outdoor air flow rate" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOut + Buildings.Controls.OBC.CDL.Reals.Divide norVOut if (minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow or minOADes == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper) "Normalization for outdoor air flow rate" annotation (Placement(transformation(extent={{40,-170},{60,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant neaZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant neaZer( final k=1E-4) "Near zero value" annotation (Placement(transformation(extent={{-80,-2},{-60,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Avoid devide by zero" annotation (Placement(transformation(extent={{-30,104},{-10,124}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Avoid devide by zero" annotation (Placement(transformation(extent={{-30,4},{-10,24}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/SumZone.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/SumZone.mo index 057455f1928..9cf9a366a7a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/SumZone.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/SumZone.mo @@ -54,28 +54,28 @@ block SumZone "Sum of the zone level setpoints calculation" annotation (Placement(transformation(extent={{120,-120},{160,-80}}), iconTransformation(extent={{100,-70},{140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo( final K=zonGroMat) "Vector of total zone flow of each group" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain groFlo1( + Buildings.Controls.OBC.CDL.Reals.MatrixGain groFlo1( final K=zonGroMat) "Vector of total zone flow of each group" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nGro] "Convert boolean to real" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul[nGro] + Buildings.Controls.OBC.CDL.Reals.Multiply mul[nGro] "Find the total flow of zone group" annotation (Placement(transformation(extent={{40,30},{60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1[nGro] + Buildings.Controls.OBC.CDL.Reals.Multiply mul1[nGro] "Find the total flow of zone group" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( final nin=nGro) "Sum of the zone absolute minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{80,30},{100,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum1( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum1( final nin=nGro) "Sum of the zone design minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); @@ -86,7 +86,7 @@ block SumZone "Sum of the zone level setpoints calculation" Buildings.Controls.OBC.CDL.Integers.Equal intEqu1[nGro] "Check if operation mode is occupied" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax mulMax( + Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax( final nin=nZon) if have_CO2Sen "Maximum CO2 loop signal" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/Validation/OutdoorAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/Validation/OutdoorAirFlow.mo index 13108ee4adb..1f72bc11fef 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/Validation/OutdoorAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Title24/Validation/OutdoorAirFlow.mo @@ -30,16 +30,16 @@ protected Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.unoccupied}) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonAbsMinFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonAbsMinFlo[nZon]( final k={0.1,0.12,0.2,0.15}) "Zone absolute minimum flow" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonDesMinFlo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonDesMinFlo[nZon]( final k={0.15,0.2,0.25,0.3}) "Adjusted area component flow" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant co2Loo[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant co2Loo[nZon]( final k={0.3,0.25,0.4,0.5}) "Zone CO2 loop signal" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outAirFlo(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outAirFlo(final k=1) "Adjusted area component flow" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/PlantRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/PlantRequests.mo index 3e210c55b7b..3c224dd3b3f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/PlantRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/PlantRequests.mo @@ -58,15 +58,15 @@ block PlantRequests "Output plant requests for multizone air handling unit" iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Subtract cooSupTemDif + Buildings.Controls.OBC.CDL.Reals.Subtract cooSupTemDif "Find the cooling supply temperature difference to the setpoint" annotation (Placement(transformation(extent={{-170,190},{-150,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=3, final h=Thys) "Check if the supply temperature is greater than the setpoint by a threshold value" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=2, final h=Thys) "Check if the supply temperature is greater than the setpoint by a threshold value" @@ -79,7 +79,7 @@ protected final delayTime=120) "Check if the input has been true for a certain time" annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=0.95, final h=posHys) "Check if the chilled water valve position is greater than a threshold value" @@ -97,7 +97,7 @@ protected final k=2) "Constant 2" annotation (Placement(transformation(extent={{0,170},{20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.85, final h=posHys) "Check if the chilled water valve position is less than a threshold value" @@ -117,7 +117,7 @@ protected Buildings.Controls.OBC.CDL.Logical.Latch lat1 "Keep true signal until other condition becomes true" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1( final t=0.1, final h=posHys) "Check if the chilled water valve position is less than a threshold value" @@ -125,16 +125,16 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch intSwi3 "Send 1 chiller plant request" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract heaSupTemDif if have_hotWatCoi + Buildings.Controls.OBC.CDL.Reals.Subtract heaSupTemDif if have_hotWatCoi "Find the heating supply temperature difference to the setpoint" annotation (Placement(transformation(extent={{-150,-50},{-130,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=17, final h=Thys) if have_hotWatCoi "Check if the supply temperature is less than the setpoint by a threshold value" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=8, final h=Thys) if have_hotWatCoi @@ -154,13 +154,13 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch hotWatRes2 if have_hotWatCoi "Send 2 hot water reset request" annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2( final t=0.85, final h=posHys) if have_hotWatCoi "Check if the hot water valve position is less than a threshold value" annotation (Placement(transformation(extent={{-120,-190},{-100,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=posHys) if have_hotWatCoi @@ -172,7 +172,7 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch hotWatRes1 if have_hotWatCoi "Send 1 hot water reset request" annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=0.1, final h=posHys) if have_hotWatCoi diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefDamper.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefDamper.mo index e1085a6c6dc..93ea37f87c9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefDamper.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefDamper.mo @@ -29,29 +29,29 @@ block ReliefDamper iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Check if relief damper should be enabled" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract conErr( + Buildings.Controls.OBC.CDL.Reals.Subtract conErr( u1(final unit="Pa", displayUnit="Pa"), u2(final unit="Pa", displayUnit="Pa"), y(final unit="Pa", displayUnit="Pa")) "Control error" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final reverseActing=false) "Building static pressure controller" annotation (Placement(transformation(extent={{10,60},{30,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerDam( final k=0) "Close damper when disabled" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Zero constant" annotation (Placement(transformation(extent={{-30,60},{-10,80}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFan.mo index d09ed4b46cf..a20a33a6e4a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFan.mo @@ -56,33 +56,33 @@ block ReliefFan "Sequence for control of relief fan in AHU" annotation (Placement(transformation(extent={{220,-120},{260,-80}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea( + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( final delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-220,130},{-200,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-220,70},{-200,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Normalized the control error" annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-180,160},{-160,180}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final reverseActing=false) "Building static pressure controller" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05, final h=hys) "Check if the controller output is greater than threshold" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.005, final h=hys) "Check if the controller output is near zero" @@ -97,7 +97,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" Buildings.Controls.OBC.CDL.Logical.Latch lat "Enable damper" annotation (Placement(transformation(extent={{40,30},{60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=relFanSpe_min + 0.15, final h=hys) "Check if the controller output is greater than minimum speed plus threshold" @@ -106,7 +106,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" final t=420) "Check if the controller output has been greater than threshold for sufficient long time" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=relFanSpe_min, final h=hys) "Check if the controller output is less than minimum speed" @@ -127,7 +127,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2 "Convert boolean to real" annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 "Relief fan speed" + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Relief fan speed" annotation (Placement(transformation(extent={{160,-50},{180,-30}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFanGroup.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFanGroup.mo index e18635a6ff7..7842f6851aa 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFanGroup.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReliefFanGroup.mo @@ -69,25 +69,25 @@ block ReliefFanGroup annotation (Placement(transformation(extent={{500,60},{540,100}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain enaRel( + Buildings.Controls.OBC.CDL.Reals.MatrixGain enaRel( final K=relFanMat) "Vector of relief fans with the enabled one denoted by 1" annotation (Placement(transformation(extent={{-460,340},{-440,360}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nSupFan] "Convert boolean to real" annotation (Placement(transformation(extent={{-500,340},{-480,360}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai[nRelFan]( final k=staVec) "Vector of enabling fan, along with its staging order" annotation (Placement(transformation(extent={{-420,340},{-400,360}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea( + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( final delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-500,240},{-480,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Normalized the control error" annotation (Placement(transformation(extent={{-400,200},{-380,220}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final reverseActing=false) @@ -100,10 +100,10 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" annotation (Placement(transformation(extent={{-460,300},{-440,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Set controller output to zero when the relief system is disabled" annotation (Placement(transformation(extent={{140,294},{160,314}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05, final h=hys) "Check if the controller output is greater than threshold" @@ -113,7 +113,7 @@ block ReliefFanGroup annotation (Placement(transformation(extent={{-260,140},{-240,160}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Enable damper" annotation (Placement(transformation(extent={{-220,140},{-200,160}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.005, final h=hys) "Check if the controller output is near zero" @@ -126,14 +126,14 @@ block ReliefFanGroup final nout=nRelFan) "Boolean replicator" annotation (Placement(transformation(extent={{-160,140},{-140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1[nRelFan]( final t=fill(0.5, nRelFan)) "Check if a relief fan should be enabled" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); Buildings.Controls.OBC.CDL.Logical.And enaDam[nRelFan] "Enable damper" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=relFanSpe_min + 0.15, final h=hys) "Check if the controller output is greater than minimum speed plus threshold" @@ -149,37 +149,37 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2[nRelFan] "Convert boolean to real" annotation (Placement(transformation(extent={{-460,-16},{-440,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub2[nRelFan] "Identify relief fans that have been enabled but not yet operating" annotation (Placement(transformation(extent={{-400,-10},{-380,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro1[nRelFan] "List of standby fans, along with their staging order" annotation (Placement(transformation(extent={{-320,10},{-300,30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin(nin=nRelFan) + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin(nin=nRelFan) "Identify current order of staging" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( final nout=nRelFan) "Replicate real number" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub1[nRelFan] "Identify next operating fan" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the input is less than threshold" annotation (Placement(transformation(extent={{-260,-20},{-240,0}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar[nRelFan]( final p=fill(nRelFan + 1, nRelFan)) "Add value to the input" annotation (Placement(transformation(extent={{-260,10},{-240,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-220,-20},{-200,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Abs abs1[nRelFan] "Find absolute value" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2[nRelFan]( final t=fill(0.5, nRelFan)) "Identify next operating fan" annotation (Placement(transformation(extent={{40,10},{60,30}}))); @@ -189,7 +189,7 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Logical.Latch lat2 "Stage up next relief fan" annotation (Placement(transformation(extent={{240,-80},{260,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=relFanSpe_min, final h=hys) "Check if the controller output is less than minimum speed" @@ -202,30 +202,30 @@ block ReliefFanGroup final pre_u_start=true) "Break algebraic loop" annotation (Placement(transformation(extent={{0,-338},{20,-318}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro2[nRelFan] "List of operating fans, along with their staging order" annotation (Placement(transformation(extent={{-320,-220},{-300,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1[nRelFan]( final p=fill(nRelFan + 1, nRelFan)) "Add value to the input" annotation (Placement(transformation(extent={{-260,-220},{-240,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr4[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr4[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the input is less than threshold" annotation (Placement(transformation(extent={{-260,-250},{-240,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-220,-250},{-200,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin1( + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin1( final nin=nRelFan) "Minimum staging order of the running relief fans" annotation (Placement(transformation(extent={{-140,-250},{-120,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub3[nRelFan] "Identify next operating fan" annotation (Placement(transformation(extent={{-40,-220},{-20,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Abs abs2[nRelFan] "Find absolute value" annotation (Placement(transformation(extent={{0,-220},{20,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr5[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr5[nRelFan]( final t=fill(0.5, nRelFan)) "Identify next fan to be off" annotation (Placement(transformation(extent={{40,-220},{60,-200}}))); @@ -279,7 +279,7 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea3[nRelFan] "Convert boolean to real" annotation (Placement(transformation(extent={{400,-80},{420,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=1, final uMin=relFanSpe_min) "Limit the controller output" @@ -288,25 +288,25 @@ block ReliefFanGroup final nout=nRelFan) "Replicate real input" annotation (Placement(transformation(extent={{400,226},{420,246}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro3[nRelFan] "Relief fan speed" annotation (Placement(transformation(extent={{460,220},{480,240}}))); Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[nRelFan] "Vector of relief fan status after staging up" annotation (Placement(transformation(extent={{400,130},{420,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-460,170},{-440,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-420,270},{-400,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Zero fan speed when it is in stage 0" annotation (Placement(transformation(extent={{180,200},{200,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch input values" annotation (Placement(transformation(extent={{360,226},{380,246}}))); Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(nin=nRelFan) @@ -343,17 +343,17 @@ block ReliefFanGroup final realFalse=fill(1, nRelFan)) "Convert boolean to real" annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply mul[nRelFan] "Product of inputs" annotation (Placement(transformation(extent={{460,70},{480,90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the relief fan is enabled" annotation (Placement(transformation(extent={{-40,226},{-20,246}}))); Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd1( final nin=nRelFan) "Check if all the fans are proven off" annotation (Placement(transformation(extent={{-320,-70},{-300,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi3[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanAirflowTracking.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanAirflowTracking.mo index 057c6eb2800..1b6154b75c7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanAirflowTracking.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanAirflowTracking.mo @@ -66,7 +66,7 @@ block ReturnFanAirflowTracking "Return fan commanded on" annotation (Placement(transformation(extent={{100,-90},{140,-50}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=conTyp, final k=k, final Ti=Ti, @@ -77,19 +77,19 @@ block ReturnFanAirflowTracking annotation (Placement(transformation(extent={{0,70},{20,90}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Check if relief damper should be enabled" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract conErr( + Buildings.Controls.OBC.CDL.Reals.Subtract conErr( u1(final unit="m3/s", displayUnit="m3/s"), u2(final unit="m3/s", displayUnit="m3/s"), y(final unit="m3/s", displayUnit="m3/s")) "Control error" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerSpe( final k=0) "Disable return fan" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant difFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant difFlo( final k=difFloSet) "Return airflow less than supply airflow" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo index 241c2d0dbfe..73c5b6434f7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo @@ -103,74 +103,74 @@ block ReturnFanDirectPressure annotation (Placement(transformation(extent={{120,-220},{160,-180}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea( + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( final delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-130,130},{-110,150}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=conTyp, final k=k, final Ti=Ti, final Td=Td) "Building static pressure controller" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Line linExhAirDam + Buildings.Controls.OBC.CDL.Reals.Line linExhAirDam "Exhaust air damper position" annotation (Placement(transformation(extent={{60,170},{80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Line linRetFanStaPre + Buildings.Controls.OBC.CDL.Reals.Line linRetFanStaPre "Return fan static pressure setpoint" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Relief air damper position" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Return fan discharge static pressure setpoint" annotation (Placement(transformation(extent={{80,-30},{100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div "Normalized the control error" + Buildings.Controls.OBC.CDL.Reals.Divide div "Normalized the control error" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Line linRetFanSpe "Return fan speed" + Buildings.Controls.OBC.CDL.Reals.Line linRetFanSpe "Return fan speed" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Return fan speed setpoint" annotation (Placement(transformation(extent={{80,-160},{100,-140}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-130,100},{-110,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanDisPreMin( final k=p_rel_RetFan_min) "Return fan discharge static pressure minimum setpoint" annotation (Placement(transformation(extent={{0,40},{20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanDisPreMax( final k=p_rel_RetFan_max) "Return fan discharge static pressure maximum setpoint" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero fan control signal" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0) "Zero constant" annotation (Placement(transformation(extent={{-40,112},{-20,132}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0.5) "Constant 0.5" annotation (Placement(transformation(extent={{0,150},{20,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one" annotation (Placement(transformation(extent={{0,96},{20,116}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne(final k=1) "Constant one" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And enaDam "Check if the relief damper should be enabled" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanSpeMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanSpeMin( final k=disSpe_min) "Return fan speed when discharge static pressure minimum setpoint" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanSpeMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanSpeMax( final k=disSpe_max) "Return fan speed when discharge static pressure maximum setpoint" annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2( final k=0) "Zero fan control signal" annotation (Placement(transformation(extent={{0,-180},{20,-160}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo index ae6b1f672fe..e9195fb8e11 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo @@ -127,7 +127,7 @@ block SupplyFan "Block to control multi zone VAV AHU supply fan" final maxRes=maxRes) "Static pressure setpoint reset using trim and respond logic" annotation (Placement(transformation(extent={{-130,-60},{-110,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conSpe( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conSpe( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -138,10 +138,10 @@ block SupplyFan "Block to control multi zone VAV AHU supply fan" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerSpe(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerSpe(k=0) "Zero fan speed when it becomes OFF" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "If fan is OFF, fan speed outputs to zero" annotation (Placement(transformation(extent={{80,-90},{100,-110}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -192,14 +192,14 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Check if current operation mode is warmup mode" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant gaiNor( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant gaiNor( final k=maxSet) "Gain for normalization of controller input" annotation (Placement(transformation(extent={{-130,-100},{-110,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norPSet + Buildings.Controls.OBC.CDL.Reals.Divide norPSet "Normalization for pressure set point" annotation (Placement(transformation(extent={{-70,-80},{-50,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norPMea + Buildings.Controls.OBC.CDL.Reals.Divide norPMea "Normalization of pressure measurement" annotation (Placement(transformation(extent={{-70,-120},{-50,-100}}))); Buildings.Controls.OBC.CDL.Discrete.FirstOrderHold firOrdHol( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo index 9d60be7b487..b67ef7ab44b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo @@ -75,7 +75,7 @@ block SupplySignals annotation (Placement(transformation(extent={{100,40},{140,80}}), iconTransformation(extent={{100,40},{140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conTSup( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conTSup( final controllerType=controllerType, final k=kTSup, final Ti=TiTSup, @@ -88,33 +88,33 @@ block SupplySignals annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch to select supply temperature control signal based on status of supply fan" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHeaMaxCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uHeaMaxCon( final k=uHea_max) if have_heaCoi "Constant signal to map control action" annotation (Placement(transformation(extent={{0,-20},{20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant negOne(final k=-1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant negOne(final k=-1) if have_heaCoi "Negative unity signal" annotation (Placement(transformation(extent={{0,18},{20,38}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCooMinCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uCooMinCon( final k=uCoo_min) "Constant signal to map control action" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero control signal" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Unity signal" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conSigCoo( + Buildings.Controls.OBC.CDL.Reals.Line conSigCoo( final limitBelow=true, final limitAbove=false) "Cooling control signal" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conSigHea( + Buildings.Controls.OBC.CDL.Reals.Line conSigHea( final limitBelow=false, final limitAbove=true) if have_heaCoi "Heating control signal" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo index 0dfc56f110f..622be6d00e9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo @@ -142,36 +142,36 @@ protected "Minimum setpoint" annotation (Dialog(group="Trim and respond logic")); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Supply temperature distributes linearly between minimum and maximum supply air temperature, according to outdoor temperature" annotation (Placement(transformation(extent={{0,110},{20,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutTem( final k=TOut_min) "Lower value of the outdoor air temperature reset range" annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxOutTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxOutTem( final k=TOut_max) "Higher value of the outdoor air temperature reset range" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSupTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSupTem( final k=TSupCoo_min) "Lowest cooling supply air temperature setpoint" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); Buildings.Controls.OBC.CDL.Logical.And and1 "Check if it is in Warmup or Setback mode" annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemWarUpSetBac( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supTemWarUpSetBac( final k=TSupWarUpSetBac) "Supply temperature setpoint under warm-up and setback mode" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "If operation mode is warm-up or setback modes, setpoint shall be 35 degC" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "If operation mode is setup or cool-down, setpoint shall be the lowest cooling supply setpoint" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Check output regarding supply fan status" annotation (Placement(transformation(extent={{100,-10},{120,10}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant cooDowMod( @@ -196,14 +196,14 @@ protected Buildings.Controls.OBC.CDL.Logical.And and2 "Check if it is in occupied or setup mode" annotation (Placement(transformation(extent={{0,18},{20,38}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If operation mode is occupied or setup ,mode, setpoint shall be reset" annotation (Placement(transformation(extent={{40,50},{60,70}}))); Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Check if it is in cooldown mode" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - CDL.Continuous.Sources.Constant TDea(final k=TDeaBan) + CDL.Reals.Sources.Constant TDea(final k=TDeaBan) "Deadband supply temperature setpoint" annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection.mo index 6275abbd767..292c379019b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection.mo @@ -10,25 +10,25 @@ model FreezeProtection "Freeze protection control" annotation (Placement(transformation(extent={{80,0},{100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final height=0.5, final offset=0.1, final duration=3600) "Outdoor air damper position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Outdoor air damper minimum position" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoiPos( final height=0.46, final offset=0.5, final duration=3600) "Heating coil position" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutDamPos( final k=0.15) "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retDamPos( final height=0.2, final offset=0.7, final duration=3600) "Return air damper position" @@ -41,27 +41,27 @@ model FreezeProtection Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final height=0.2, final offset=0.5, final duration=3600) "Supply fan speed" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoiPos( final height=0.2, final offset=0.5, final duration=3600) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem( final height=-4, final offset=273.15 + 6, final duration=3600) "Supply air temperature" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp mixTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp mixTem( final height=-5, final offset=273.15 + 8, final duration=3600) "Mixed air temperature" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final h=0.01) "Check if the supply fan is proven on" annotation (Placement(transformation(extent={{0,-56},{20,-36}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo index fcddee20db5..5d066a8793b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo @@ -11,36 +11,36 @@ model FreezeProtection_Disable "Freeze protection control" annotation (Placement(transformation(extent={{80,0},{100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final height=0.5, final offset=0.1, final duration=3600) "Outdoor air damper position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoiPos( final height=0.46, final offset=0.5, final duration=3600) "Heating coil position" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutDamPos( final k=0.15) "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retDamPos( final height=0.2, final offset=0.7, final duration=3600) "Return air damper position" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final height=0.2, final offset=0.5, final duration=3600) "Supply fan speed" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoiPos( final height=0.2, final offset=0.5, final duration=3600) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final h=0.01) "Check if the supply fan is proven on" annotation (Placement(transformation(extent={{0,-56},{20,-36}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/PlantRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/PlantRequests.mo index 79edaac949f..1b37e9f18e6 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/PlantRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/PlantRequests.mo @@ -9,39 +9,39 @@ model PlantRequests final have_hotWatCoi=false) "Calculate plant request" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem( final height=8, final offset=273.15 + 15, final duration=3600) "Supply air temperature" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTemSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTemSet( final height=6, final offset=273.15 + 14.5, final duration=3600) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoi( final height=-0.3, final offset=0.96, final duration=3600, startTime=1000) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoi( final height=-0.3, final offset=0.96, final duration=3600, startTime=1000) "Heating coil position" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem1( final height=8, final offset=273.15 + 12, final duration=3600) "Supply air temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTemSet1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTemSet1( final height=15, final offset=273.15 + 20, final duration=3600) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooCoi1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooCoi1( final k=0) "Cooling coil position" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefDamper.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefDamper.mo index 972203140f6..f5e992d55cc 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefDamper.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefDamper.mo @@ -14,7 +14,7 @@ model ReliefDamper final period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFan.mo index 8064f9a583c..e5ac987712c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFan.mo @@ -16,12 +16,12 @@ model ReliefFan "Validate model for controlling relief fan" final period=3600) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui1( final height=-15, final offset=20, final duration=1800, @@ -32,7 +32,7 @@ model ReliefFan "Validate model for controlling relief fan" final k=true) "Supply fan status" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui2( final height=3, final offset=11, final duration=1800) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFanGroup.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFanGroup.mo index cf5a951127a..95bf26163a3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFanGroup.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReliefFanGroup.mo @@ -17,7 +17,7 @@ model ReliefFanGroup final period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" @@ -27,13 +27,13 @@ model ReliefFanGroup final period=4000, shift=600) "Supply fan status" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,100},{80,120}}))); Buildings.Controls.OBC.CDL.Logical.Pre pre[4] "Return relief fan status" annotation (Placement(transformation(extent={{100,100},{120,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,0},{80,20}}))); @@ -55,7 +55,7 @@ model ReliefFanGroup final samplePeriod=fill(20, 4)) "Zero order hold" annotation (Placement(transformation(extent={{30,0},{50,20}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,-120},{80,-100}}))); @@ -65,7 +65,7 @@ model ReliefFanGroup final samplePeriod=fill(20, 4)) "Zero order hold" annotation (Placement(transformation(extent={{30,-120},{50,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui1( final height=-15, final offset=20, final duration=1800, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanAirflowTracking.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanAirflowTracking.mo index e229a4d41ce..78b8c54177f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanAirflowTracking.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanAirflowTracking.mo @@ -16,13 +16,13 @@ model ReturnFanAirflowTracking final period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFlo( final height=1.0, final offset=0.2, final duration=1800) "Supply air flow rate" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retFlo( final height=0.4, final offset=0.1, final duration=1800) "Return air flow rate" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo index 1ec1495dd23..2e37da10dc4 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo @@ -23,7 +23,7 @@ model ReturnFanDirectPressure final period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo index e5e63c97834..a4892b7f50b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo @@ -29,29 +29,29 @@ model SupplyFan "Validate SupplyFan" annotation (Placement(transformation(extent={{80,20},{100,40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=28800, final height=6) "Ramp signal for generating operation mode" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/14400, final offset=3, final amplitude=2) "Generate sine signal " annotation (Placement(transformation(extent={{-200,-10},{-180,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final freqHz=1/14400, final offset=200, amplitude=150) "Generate sine signal" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); @@ -61,7 +61,7 @@ protected Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals.mo index b29150ca393..e1b34746713 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals.mo @@ -8,13 +8,13 @@ model SupplySignals Buildings.Controls.OBC.CDL.Logical.Sources.Pulse supFanSta(period=7200) "Supply fan status" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse TSup( final amplitude=14, final period=7200, final offset=10 + 273.15) "Supply air temperature" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSupSet( final height=3, final duration=7200, final offset=15 + 273.15) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo index 62cbf567cce..8b320ac3dfe 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo @@ -5,7 +5,7 @@ model SupplyTemperature Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature conTSupSet "Supply air temperature setpoint for multi zone system" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin outTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin outTem( final amplitude=5, final freqHz=1/86400, final offset=18 + 273.15) "Outdoor air temperature" @@ -14,15 +14,15 @@ model SupplyTemperature final period=43200) "Supply fan status" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=1, final duration=90000) "Operation mode" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final amplitude=6, final freqHz=1/86400) "Block generates sine signal" @@ -30,14 +30,14 @@ model SupplyTemperature Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{32,-40},{52,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller.mo index db1a3abc224..211d7229cd5 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller.mo @@ -12,54 +12,54 @@ model Controller "Validation controller model" final VDesTotOutAir_flow=0.05) "Multizone VAV AHU controller" annotation (Placement(transformation(extent={{100,-120},{180,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final duration=3600, final offset=273.15 + 14) "AHU supply air temperature" annotation (Placement(transformation(extent={{-200,130},{-180,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=0.02, final height=0.0168) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-200,-70},{-180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TMixMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TMixMea( final height=4, final duration=1, final offset=273.15 + 2, final startTime=0) "Measured mixed air temperature" annotation (Placement(transformation(extent={{-200,-200},{-180,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( final amplitude=5, final offset=18 + 273.15, final freqHz=1/3600) "Outdoor air temperature" annotation (Placement(transformation(extent={{-240,180},{-220,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin ducStaPre( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin ducStaPre( final offset=200, final amplitude=150, final freqHz=1/3600) "Duct static pressure" annotation (Placement(transformation(extent={{-200,200},{-180,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine2( final offset=3, final amplitude=2, final freqHz=1/9600) "Duct static pressure setpoint reset requests" annotation (Placement(transformation(extent={{-240,220},{-220,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine3( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine3( final amplitude=6, final freqHz=1/9600) "Maximum supply temperature setpoint reset" annotation (Placement(transformation(extent={{-240,150},{-220,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2 + Buildings.Controls.OBC.CDL.Reals.Abs abs2 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs3 + Buildings.Controls.OBC.CDL.Reals.Abs abs3 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,220},{-140,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round4(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,220},{-100,240}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger ducPreResReq @@ -72,46 +72,46 @@ model Controller "Validation controller model" final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{-200,240},{-180,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesPopBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon( final k=0.0125) "Sum of the population component design breathing zone flow rate" annotation (Placement(transformation(extent={{-200,90},{-180,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesAreBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon( final k=0.03) "Sum of the area component design breathing zone flow rate" annotation (Placement(transformation(extent={{-240,70},{-220,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo2( final offset=0.08, final height=0.02, final duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-180,10},{-160,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo1( final height=0.05, final offset=0.08, final duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-180,-30},{-160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "System primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uOutAirFra_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uOutAirFra_max( final amplitude=0.005, final width=0.25, final period=3600, final offset=0.015) "Maximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones" annotation (Placement(transformation(extent={{-240,-50},{-220,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" annotation (Placement(transformation(extent={{-240,-220},{-220,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoi( final k=0) "Heating coil position" annotation (Placement(transformation(extent={{-240,-260},{-220,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoi( final height=-0.3, final offset=0.96, final duration=3600, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller_UnspecifiedClimate.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller_UnspecifiedClimate.mo index dd26d290c5e..56adc0b496d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller_UnspecifiedClimate.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/MultiZone/VAV/Validation/Controller_UnspecifiedClimate.mo @@ -13,54 +13,54 @@ model Controller_UnspecifiedClimate final VDesTotOutAir_flow=0.05) "Multizone VAV AHU controller" annotation (Placement(transformation(extent={{100,-120},{180,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final duration=3600, final offset=273.15 + 14) "AHU supply air temperature" annotation (Placement(transformation(extent={{-200,130},{-180,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=0.02, final height=0.0168) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-200,-70},{-180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TMixMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TMixMea( final height=4, final duration=1, final offset=273.15 + 2, final startTime=0) "Measured mixed air temperature" annotation (Placement(transformation(extent={{-200,-200},{-180,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( final amplitude=5, final offset=18 + 273.15, final freqHz=1/3600) "Outdoor air temperature" annotation (Placement(transformation(extent={{-240,180},{-220,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin ducStaPre( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin ducStaPre( final offset=200, final amplitude=150, final freqHz=1/3600) "Duct static pressure" annotation (Placement(transformation(extent={{-200,200},{-180,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine2( final offset=3, final amplitude=2, final freqHz=1/9600) "Duct static pressure setpoint reset requests" annotation (Placement(transformation(extent={{-240,220},{-220,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine3( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine3( final amplitude=6, final freqHz=1/9600) "Maximum supply temperature setpoint reset" annotation (Placement(transformation(extent={{-240,150},{-220,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2 + Buildings.Controls.OBC.CDL.Reals.Abs abs2 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs3 + Buildings.Controls.OBC.CDL.Reals.Abs abs3 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,220},{-140,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round4(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,220},{-100,240}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger ducPreResReq @@ -73,46 +73,46 @@ model Controller_UnspecifiedClimate final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{-200,240},{-180,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesPopBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon( final k=0.0125) "Sum of the population component design breathing zone flow rate" annotation (Placement(transformation(extent={{-200,90},{-180,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesAreBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon( final k=0.03) "Sum of the area component design breathing zone flow rate" annotation (Placement(transformation(extent={{-240,70},{-220,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo2( final offset=0.08, final height=0.02, final duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-180,10},{-160,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo1( final height=0.05, final offset=0.08, final duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-180,-30},{-160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "System primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uOutAirFra_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uOutAirFra_max( final amplitude=0.005, final width=0.25, final period=3600, final offset=0.015) "Maximum zone outdoor air fraction, equals to the maximum of primary outdoor air fraction of all zones" annotation (Placement(transformation(extent={{-240,-50},{-220,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" annotation (Placement(transformation(extent={{-240,-220},{-220,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoi( final k=0) "Heating coil position" annotation (Placement(transformation(extent={{-240,-260},{-220,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoi( final height=-0.3, final offset=0.96, final duration=3600, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo index 5364210220f..3b9bda3f7e3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Controller.mo @@ -865,7 +865,7 @@ block Controller final spePoiFou=spePoiFou) "Supply air set point and fan signal for single zone VAV system" annotation (Placement(transformation(extent={{-20,390},{0,410}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset cooPI( final controllerType=cooLooCon, final k=kCoo, final Ti=TiCoo, @@ -873,7 +873,7 @@ block Controller final reverseActing=false) "Zone cooling control signal" annotation (Placement(transformation(extent={{-90,350},{-70,370}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset heaPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset heaPI( final controllerType=heaLooCon, final k=kHea, final Ti=TiHea, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo index b2c0fa45f20..ec4083d4981 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo @@ -134,34 +134,34 @@ protected final k=false) if not use_enthalpy "Deactivates outdoor air enthalpy condition if there is no enthalpy sensor" annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyMin( final k=retDamPhy_min) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-140,-258},{-120,-238}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyMax( final k=retDamPhy_max) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-140,-220},{-120,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutTem( final uHigh=TOutHigLimCutHig, final uLow=TOutHigLimCutLow) "Outdoor air temperature hysteresis for fixed or differential dry bulb temperature cutoff conditions" annotation (Placement(transformation(extent={{-100,240},{-80,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutEnt( final uLow=hOutHigLimCutLow, final uHigh=hOutHigLimCutHig) if use_enthalpy "Outdoor air enthalpy hysteresis for fixed or differential enthalpy cutoff conditions" annotation (Placement(transformation(extent={{-100,160},{-80,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 if use_enthalpy + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 if use_enthalpy "Add block that determines the difference between hOut and hOutCut" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Add block that determines difference the between TOut and TOutCut" annotation (Placement(transformation(extent={{-140,240},{-120,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch maxOutDam + Buildings.Controls.OBC.CDL.Reals.Switch maxOutDam "Set maximum OA damper position to minimum at disable (after time delay)" annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minRetDam + Buildings.Controls.OBC.CDL.Reals.Switch minRetDam "Keep minimum RA damper position at physical maximum for a short time period after disable" annotation (Placement(transformation(extent={{40,-250},{60,-230}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo index 9581bd00139..196b45631cc 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo @@ -112,63 +112,63 @@ block Limits "Single zone VAV AHU minimum outdoor air control - damper position iconTransformation(extent={{100,40},{140,80}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanMinSig( final k=supFanSpe_min) "Minimum supply fan speed" annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhy_min) "Physically fixed minimum position of the outdoor air damper" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhy_max) "Physically fixed maximum position of the outdoor air damper" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanMaxSig( final k=supFanSpe_max) "Maximum supply fan speed" annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_minSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutMin_minSpeSig( final k=outDamMinFloMinSpe) "OA damper position to supply minimum outdoor airflow at minimum fan speed" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_minSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutDes_minSpeSig( final k=outDamDesFloMinSpe) "OA damper position to supply design outdoor airflow at minimum fan speed" annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_maxSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutMin_maxSpeSig( final k=outDamMinFloMaxSpe) "OA damper position to supply minimum outdoor airflow at maximum fan speed" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_maxSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutDes_maxSpeSig( final k=outDamDesFloMaxSpe) "OA damper position to supply design outdoor airflow at maximum fan speed" annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minVOutSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minVOutSig( final k=VOutMin_flow) "Minimum outdoor airflow rate" annotation (Placement(transformation(extent={{20,170},{40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desVOutSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desVOutSig( final k=VOutDes_flow) "Design outdoor airflow rate" annotation (Placement(transformation(extent={{40,90},{60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutMin_curSpe( + Buildings.Controls.OBC.CDL.Reals.Line yDam_VOutMin_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow at current fan speed" annotation (Placement(transformation(extent={{40,130},{60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutDes_curSpe( + Buildings.Controls.OBC.CDL.Reals.Line yDam_VOutDes_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply design outdoor airflow at current fan speed" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minVOutSetCurFanSpePos( + Buildings.Controls.OBC.CDL.Reals.Line minVOutSetCurFanSpePos( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow setpoint at current fan speed" annotation (Placement(transformation(extent={{100,110},{120,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis + Buildings.Controls.OBC.CDL.Reals.Switch enaDis "Logical switch to enable damper position limit calculation or disable it (set min limit to physical minimum)" annotation (Placement(transformation(extent={{80,-120},{100,-100}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis1 + Buildings.Controls.OBC.CDL.Reals.Switch enaDis1 "Logical switch to enable damper position limit calculation or disable it (set max limit to physical minimum)" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( @@ -186,14 +186,14 @@ protected annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); Buildings.Controls.OBC.CDL.Logical.And3 and3 "Logical and" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis2 + Buildings.Controls.OBC.CDL.Reals.Switch enaDis2 "Zero minimum damper position when the min OA is near zero" annotation (Placement(transformation(extent={{120,-170},{140,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Zero minimum damper position" annotation (Placement(transformation(extent={{80,-200},{100,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold noZerMin( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold noZerMin( final t=floHys, final h=0.5*floHys) "Check if the min OA is greater than zero" annotation (Placement(transformation(extent={{20,-170},{40,-150}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo index b81fabce796..07c8f02ad46 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo @@ -104,7 +104,7 @@ block Modulation "Outdoor and return air damper position modulation sequence for Placement(transformation(extent={{120,-10},{140,10}}), iconTransformation( extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset uTSup( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset uTSup( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -115,44 +115,44 @@ block Modulation "Outdoor and return air damper position modulation sequence for annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMinLimSig( final k=uMin) "Minimal control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-60,-88},{-40,-68}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamMaxLimSig( final k=uMax) "Maximal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-60,-34},{-40,-14}}))); - Buildings.Controls.OBC.CDL.Continuous.Line outDamPos( + Buildings.Controls.OBC.CDL.Reals.Line outDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{24,-50},{44,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( + Buildings.Controls.OBC.CDL.Reals.Line retDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{22,-10},{42,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line HeaCoi( + Buildings.Controls.OBC.CDL.Reals.Line HeaCoi( final limitBelow=true, final limitAbove=true) if have_heaCoi "Heating coil signal is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{22,30},{42,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoiMaxLimSig( final k=1) if have_heaCoi "Maximal control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoiMinLimSig( final k=0) if have_heaCoi "Minimum control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uMaxHeaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uMaxHeaCoi( final k=1) "Maximal control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis if have_heaCoi + Buildings.Controls.OBC.CDL.Reals.Switch enaDis if have_heaCoi "Enable or disable the heating coil" annotation (Placement(transformation(extent={{76,30},{96,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Off( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Off( final k=0) if have_heaCoi "Off signal for heating coil" annotation (Placement(transformation(extent={{6,-90},{26,-70}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo index c6bf20b634a..6e93381059e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo @@ -20,19 +20,19 @@ protected final quantity = "SpecificEnergy")=65100 "Outdoor air enthalpy high limit cutoff"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor temperature high limit cutoff" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( @@ -51,11 +51,11 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.ZoneStates.deadband) "Zone state is deadband" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo index 2df2cf7d3d5..ff90dd0a008 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo @@ -14,10 +14,10 @@ model Enable_TOut_hOut "Single zone VAV AHU economizer enable disable sequence" annotation (Placement(transformation(extent={{220,-80},{240,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut1( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid TOut( @@ -46,17 +46,17 @@ protected "Minimum outdoor air damper position"; final parameter Real outDamPosMax=0.9 "Minimum return air damper position"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-240,0},{-220,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{0,40},{20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-240,40},{-220,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{54,40},{74,60}}))); @@ -64,11 +64,11 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.ZoneStates.deadband) "Zone State is deadband" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMaxSig( final k=outDamPosMax) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-120},{-220,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMinSig( final k=outDamPosMin) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-160},{-220,-140}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo index d1766c461af..90fdffa19e7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo @@ -51,12 +51,12 @@ protected final quantity="VolumeFlowRate")=0.2 "Maximum increase in airflow volume during the example simulation"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=supFanSpe_min, final height=supFanSpe_max - supFanSpe_min) "Supply fan speed signal" annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Constant minimum outdoor airflow setpoint" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo index 0c6240ec9b2..d057788fcef 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo @@ -47,21 +47,21 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "Operation mode - occupied" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSetSig( final k=VOutSet_flow) "Constant minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=supFanSpe_min, final height=supFanSpe_max - supFanSpe_min) "Supply fan speed signal" annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig1( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Constant minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant SupFanSpeSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant SupFanSpeSig1( final k=fanSpe) "Supply fan speed signal" annotation (Placement(transformation(extent={{20,20},{40,40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo index 03382501204..df36a15f485 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo @@ -12,24 +12,24 @@ model Modulation_TSup mod "Economizer modulation sequence" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final duration=900, final height=4, final offset=TSupSet - 2) "Measured supply air temperature" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin(final k=0.1) "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(final k=0.9) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax(final k=0.9) "Maximum outdoor air damper position" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant RetDamPosMin(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RetDamPosMin(final k=0.1) "Minimum return air damper position" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant RetDamPosMax(final k=0.9) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RetDamPosMax(final k=0.9) "Maximum return air damper position" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo index 4d0f4773fa6..458b0dad71e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo @@ -69,33 +69,33 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 40000) "Outdoor air enthalpy is below the cutoff" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Heating supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta2( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage2) "Freeze protection stage is 2" annotation (Placement(transformation(extent={{40,-130},{60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 30) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final offset=TSupSet - 2, final duration=1800) "Supply air temperature" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=supFanSpe_min, final height=supFanSpe_max - supFanSpe_min) "Supply fan speed signal" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo index 89bdfc4015b..c1a5232c1e5 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo @@ -72,31 +72,31 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 10000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 5) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Heating supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSig( final k=TSup) "Measured supply air temperature" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSupSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSupSig1( final duration=900, final height=2, final offset=TSupSet - 1) "Measured supply air temperature" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=supFanSpe_min, final height=supFanSpe_max - supFanSpe_min) "Supply fan speed signal" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/CoolingCoil.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/CoolingCoil.mo index f35e408e9da..337ba655fdb 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/CoolingCoil.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/CoolingCoil.mo @@ -46,7 +46,7 @@ block CoolingCoil "Controller for cooling coil valve" annotation (Placement(transformation(extent={{100,-20},{140,20}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCoi( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCoi( final controllerType=controllerTypeCooCoi, final k=kCooCoi, final Ti=TiCooCoi, @@ -63,9 +63,9 @@ protected final k=Buildings.Controls.OBC.ASHRAE.G36.Types.ZoneStates.cooling) "Cooling state value" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch "Switch to assign cooling coil control signal" + Buildings.Controls.OBC.CDL.Reals.Switch switch "Switch to assign cooling coil control signal" annotation (Placement(transformation(extent={{72,-10},{92,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=0) "Cooling off mode" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=0) "Cooling off mode" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Logical.And and2 "Conditions for cooling state" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/FreezeProtection.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/FreezeProtection.mo index 1fb3d6c1388..4a1fdd07925 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/FreezeProtection.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/FreezeProtection.mo @@ -236,7 +236,7 @@ block FreezeProtection annotation (Placement(transformation(extent={{440,-710},{480,-670}}), iconTransformation(extent={{100,-210},{140,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=273.15 + 4, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -253,10 +253,10 @@ block FreezeProtection final k=minHotWatReq) if have_hotWatCoi and have_frePro "Minimum hot-water plant requests" annotation (Placement(transformation(extent={{-20,690},{0,710}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minVen if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch minVen if have_frePro "Minimum ventilation when in stage 1 mode" annotation (Placement(transformation(extent={{60,580},{80,600}}))); - Buildings.Controls.OBC.CDL.Continuous.PID heaCoiCon1( + Buildings.Controls.OBC.CDL.Reals.PID heaCoiCon1( final controllerType=heaCoiCon, final k=k, final Ti=Ti, @@ -265,11 +265,11 @@ block FreezeProtection final yMin=yMin) if have_hotWatCoi and have_frePro "Heating coil control in stage 1 mode" annotation (Placement(transformation(extent={{-320,530},{-300,550}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaCoi1 + Buildings.Controls.OBC.CDL.Reals.Switch heaCoi1 if have_hotWatCoi and have_frePro "Heating coil position" annotation (Placement(transformation(extent={{120,510},{140,530}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=273.15 + 7, final h=Thys) if have_frePro "Check if supply air temperature is greater than threshold" @@ -284,7 +284,7 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.Edge endStaOne if have_frePro "Clear the latch to end the stage 1 freeze protection" annotation (Placement(transformation(extent={{-260,442},{-240,462}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1( final t=273.15 + 3, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -298,17 +298,17 @@ block FreezeProtection final falseHoldDuration=0) if have_frePro "Stage in stage 2 freeze protection mode" annotation (Placement(transformation(extent={{-300,352},{-280,372}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDam2 if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch outDam2 if have_frePro "Outdoor air damper position" annotation (Placement(transformation(extent={{120,440},{140,460}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0.0) if have_frePro "Fully closed damper position" annotation (Placement(transformation(extent={{40,460},{60,480}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDam2 if have_frePro + Buildings.Controls.OBC.CDL.Reals.Switch retDam2 if have_frePro "Return air damper position" annotation (Placement(transformation(extent={{120,308},{140,328}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=1.0) if have_frePro "Fully open damper or valve position" annotation (Placement(transformation(extent={{-80,200},{-60,220}}))); @@ -327,7 +327,7 @@ block FreezeProtection final t=900) if have_frePro "Check if the supply air temperature has been lower than threshold value for sufficient long time" annotation (Placement(transformation(extent={{-300,160},{-280,180}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2( final t=273.15 + 1, final h=Thys) if have_frePro "Check if supply air temperature is less than threshold" @@ -342,34 +342,34 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.Latch lat1 if have_frePro "Stay in stage 3 freeze protection mode" annotation (Placement(transformation(extent={{-140,112},{-120,132}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch supFan if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch supFan if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Supply fan speed" annotation (Placement(transformation(extent={{160,-150},{180,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retFan if (buiPreCon == + Buildings.Controls.OBC.CDL.Reals.Switch retFan if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) and not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Return fan speed" annotation (Placement(transformation(extent={{120,-270},{140,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch relFan if (buiPreCon == + Buildings.Controls.OBC.CDL.Reals.Switch relFan if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan) and not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Relief fan speed" annotation (Placement(transformation(extent={{120,-390},{140,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=0) if have_frePro "Zero constant" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDam if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch outDam if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Outdoor air damper" annotation (Placement(transformation(extent={{320,-20},{340,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooCoi if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch cooCoi if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Cooling coil position" @@ -382,11 +382,11 @@ block FreezeProtection final k=minHotWatReq) if have_hotWatCoi and have_frePro "Minimum hot-water plant requests" annotation (Placement(transformation(extent={{-140,-642},{-120,-622}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 if have_hotWatCoi and have_frePro "Higher of supply air and mixed air temperature" annotation (Placement(transformation(extent={{-300,-560},{-280,-540}}))); - Buildings.Controls.OBC.CDL.Continuous.PID heaCoiMod( + Buildings.Controls.OBC.CDL.Reals.PID heaCoiMod( final controllerType=heaCoiCon, final k=k, final Ti=Ti, @@ -395,11 +395,11 @@ block FreezeProtection final yMin=yMin) if have_hotWatCoi and have_frePro "Heating coil control when it is in stage 3 mode" annotation (Placement(transformation(extent={{40,-530},{60,-510}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=273.15 + 27) if have_hotWatCoi and have_frePro "Setpoint temperature" annotation (Placement(transformation(extent={{-140,-530},{-120,-510}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaCoiPos if have_hotWatCoi and + Buildings.Controls.OBC.CDL.Reals.Switch heaCoiPos if have_hotWatCoi and not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Heating coil position" @@ -447,12 +447,12 @@ block FreezeProtection Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg if have_frePro "Switch from stage 2 to stage 1" annotation (Placement(transformation(extent={{-140,620},{-120,640}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDam if not freSta == + Buildings.Controls.OBC.CDL.Reals.Switch retDam if not freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Return air damper position" annotation (Placement(transformation(extent={{320,60},{340,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supTemSet( final k=273.15+ 6) if have_hotWatCoi and have_frePro "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-380,530},{-360,550}}))); @@ -518,12 +518,12 @@ block FreezeProtection "Disable supply fan when in stage 3" annotation (Placement(transformation(extent={{320,-100},{340,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4(final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{320,30},{340,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" @@ -532,7 +532,7 @@ block FreezeProtection or not have_frePro "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-130},{340,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" @@ -543,7 +543,7 @@ block FreezeProtection or not have_frePro) "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-240},{340,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=1) if ( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(final k=1) if ( buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment @@ -555,18 +555,18 @@ block FreezeProtection or not have_frePro) "Dummy block for enabling and disabling conditional connection" annotation (Placement(transformation(extent={{320,-360},{340,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai5(final k=1) if ( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai5(final k=1) if ( buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan) and freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{120,-420},{140,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai6(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai6(final k=1) if freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment and have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{120,-500},{140,-480}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai7(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai7(final k=1) if have_hotWatCoi and (freSta == Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.Hardwired_to_equipment or not have_frePro) "Dummy block for enabling and disabling the conditional connection" @@ -580,30 +580,30 @@ block FreezeProtection CDL.Integers.Sources.Constant conInt10(final k=0) if not have_frePro "Dummy constant" annotation (Placement(transformation(extent={{380,-680},{400,-660}}))); - CDL.Continuous.MultiplyByParameter gai8(final k=1) + CDL.Reals.MultiplyByParameter gai8(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-80},{-280,-60}}))); - CDL.Continuous.MultiplyByParameter gai9(final k=1) + CDL.Reals.MultiplyByParameter gai9(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-130},{-280,-110}}))); - CDL.Continuous.MultiplyByParameter gai10(final k=1) + CDL.Reals.MultiplyByParameter gai10(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-190},{-280,-170}}))); - CDL.Continuous.MultiplyByParameter gai11(final k=1) + CDL.Reals.MultiplyByParameter gai11(final k=1) if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir or buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp) and not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-310},{-280,-290}}))); - CDL.Continuous.MultiplyByParameter gai12(final k=1) + CDL.Reals.MultiplyByParameter gai12(final k=1) if (buiPreCon == Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan) and not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-440},{-280,-420}}))); - CDL.Continuous.MultiplyByParameter gai13(final k=1) + CDL.Reals.MultiplyByParameter gai13(final k=1) if not have_frePro "Dummy block for enabling and disabling the conditional connection" annotation (Placement(transformation(extent={{-300,-510},{-280,-490}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/PlantRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/PlantRequests.mo index 685d8e1c2fc..350dbeb95ed 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/PlantRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/PlantRequests.mo @@ -65,15 +65,15 @@ block PlantRequests iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Subtract cooSupTemDif + Buildings.Controls.OBC.CDL.Reals.Subtract cooSupTemDif "Find the cooling supply temperature difference to the setpoint" annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=3, final h=Thys) "Check if the supply temperature is greater than the setpoint by a threshold value" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=2, final h=Thys) "Check if the supply temperature is greater than the setpoint by a threshold value" @@ -86,7 +86,7 @@ protected final delayTime=120) "Check if the input has been true for a certain time" annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=0.95, final h=posHys) "Check if the chilled water valve position is greater than a threshold value" @@ -104,7 +104,7 @@ protected final k=2) "Constant 2" annotation (Placement(transformation(extent={{0,170},{20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.85, final h=posHys) "Check if the chilled water valve position is less than a threshold value" @@ -124,7 +124,7 @@ protected Buildings.Controls.OBC.CDL.Logical.Latch lat1 "Keep true signal until other condition becomes true" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1( final t=0.1, final h=posHys) "Check if the chilled water valve position is less than a threshold value" @@ -132,16 +132,16 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch intSwi3 "Send 1 chiller plant request" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract heaSupTemDif if have_hotWatCoi + Buildings.Controls.OBC.CDL.Reals.Subtract heaSupTemDif if have_hotWatCoi "Find the heating supply temperature difference to the setpoint" annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=17, final h=Thys) if have_hotWatCoi "Check if the supply temperature is less than the setpoint by a threshold value" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=8, final h=Thys) if have_hotWatCoi @@ -161,13 +161,13 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch hotWatRes2 if have_hotWatCoi "Send 2 hot water reset request" annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2( final t=0.85, final h=posHys) if have_hotWatCoi "Check if the hot water valve position is less than a threshold value" annotation (Placement(transformation(extent={{-120,-190},{-100,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=posHys) if have_hotWatCoi @@ -179,7 +179,7 @@ protected Buildings.Controls.OBC.CDL.Integers.Switch hotWatRes1 if have_hotWatCoi "Send 1 hot water reset request" annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=0.1, final h=posHys) if have_hotWatCoi diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefDamper.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefDamper.mo index 86b31d10d9b..b5d04549443 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefDamper.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefDamper.mo @@ -37,7 +37,7 @@ block ReliefDamper iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05, final h=posHys) "Check if the outdoor damper is open" @@ -45,25 +45,25 @@ protected Buildings.Controls.OBC.CDL.Logical.And and2 "Check if the relief damper should be open" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Check if relief damper should be enabled" annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerDam( final k=0) "Close damper when disabled" annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minRel( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minRel( final k=relDam_min) "Minimum relief damper position" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxRel( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxRel( final k=relDam_max) "Maximum relief damper position" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fulOpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fulOpe( final k=1) "Fully open relief damper" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line relDam( + Buildings.Controls.OBC.CDL.Reals.Line relDam( final limitBelow=true, final limitAbove=true) "Relief damper signal is linearly proportional to the control signal between signal limits" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFan.mo index c64d20c0b52..d9b85153060 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFan.mo @@ -54,33 +54,33 @@ block ReliefFan "Sequence for control of relief fan in AHU" annotation (Placement(transformation(extent={{220,-120},{260,-80}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea( + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( final delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-220,130},{-200,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-220,70},{-200,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Normalized the control error" annotation (Placement(transformation(extent={{-180,100},{-160,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-180,160},{-160,180}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final reverseActing=false) "Building static pressure controller" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05, final h=hys) "Check if the controller output is greater than threshold" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.005, final h=hys) "Check if the controller output is near zero" @@ -95,7 +95,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" Buildings.Controls.OBC.CDL.Logical.Latch lat "Enable damper" annotation (Placement(transformation(extent={{40,30},{60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=relFanSpe_min + 0.15, final h=hys) "Check if the controller output is greater than minimum speed plus threshold" @@ -104,7 +104,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" final t=420) "Check if the controller output has been greater than threshold for sufficient long time" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=relFanSpe_min, final h=hys) "Check if the controller output is less than minimum speed" @@ -125,7 +125,7 @@ block ReliefFan "Sequence for control of relief fan in AHU" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2 "Convert boolean to real" annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 "Relief fan speed" + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Relief fan speed" annotation (Placement(transformation(extent={{160,-50},{180,-30}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFanGroup.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFanGroup.mo index f29bfdce256..0d59d6a3644 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFanGroup.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReliefFanGroup.mo @@ -70,25 +70,25 @@ block ReliefFanGroup annotation (Placement(transformation(extent={{500,60},{540,100}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain enaRel( + Buildings.Controls.OBC.CDL.Reals.MatrixGain enaRel( final K=relFanMat) "Vector of relief fans with the enabled one denoted by 1" annotation (Placement(transformation(extent={{-460,340},{-440,360}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nSupFan] "Convert boolean to real" annotation (Placement(transformation(extent={{-500,340},{-480,360}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai[nRelFan]( final k=staVec) "Vector of enabling fan, along with its staging order" annotation (Placement(transformation(extent={{-420,340},{-400,360}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea( + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea( final delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-500,240},{-480,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Normalized the control error" annotation (Placement(transformation(extent={{-400,200},{-380,220}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final reverseActing=false) @@ -101,10 +101,10 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" annotation (Placement(transformation(extent={{-460,300},{-440,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Set controller output to zero when the relief system is disabled" annotation (Placement(transformation(extent={{140,294},{160,314}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05, final h=hys) "Check if the controller output is greater than threshold" @@ -114,7 +114,7 @@ block ReliefFanGroup annotation (Placement(transformation(extent={{-260,140},{-240,160}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Enable damper" annotation (Placement(transformation(extent={{-220,140},{-200,160}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.005, final h=hys) "Check if the controller output is near zero" @@ -127,14 +127,14 @@ block ReliefFanGroup final nout=nRelFan) "Boolean replicator" annotation (Placement(transformation(extent={{-160,140},{-140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1[nRelFan]( final t=fill(0.5, nRelFan)) "Check if a relief fan should be enabled" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); Buildings.Controls.OBC.CDL.Logical.And enaDam[nRelFan] "Enable damper" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=relFanSpe_min + 0.15, final h=hys) "Check if the controller output is greater than minimum speed plus threshold" @@ -150,37 +150,37 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2[nRelFan] "Convert boolean to real" annotation (Placement(transformation(extent={{-460,-16},{-440,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub2[nRelFan] "Identify relief fans that have been enabled but not yet operating" annotation (Placement(transformation(extent={{-400,-10},{-380,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro1[nRelFan] "List of standby fans, along with their staging order" annotation (Placement(transformation(extent={{-320,10},{-300,30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin(nin=nRelFan) + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin(nin=nRelFan) "Identify current order of staging" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( final nout=nRelFan) "Replicate real number" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub1[nRelFan] "Identify next operating fan" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the input is less than threshold" annotation (Placement(transformation(extent={{-260,-20},{-240,0}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar[nRelFan]( final p=fill(nRelFan + 1, nRelFan)) "Add value to the input" annotation (Placement(transformation(extent={{-260,10},{-240,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-220,-20},{-200,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Abs abs1[nRelFan] "Find absolute value" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr2[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr2[nRelFan]( final t=fill(0.5, nRelFan)) "Identify next operating fan" annotation (Placement(transformation(extent={{40,10},{60,30}}))); @@ -190,7 +190,7 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Logical.Latch lat2 "Stage up next relief fan" annotation (Placement(transformation(extent={{240,-80},{260,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr3( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr3( final t=relFanSpe_min, final h=hys) "Check if the controller output is less than minimum speed" @@ -203,30 +203,30 @@ block ReliefFanGroup final pre_u_start=true) "Break algebraic loop" annotation (Placement(transformation(extent={{0,-338},{20,-318}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro2[nRelFan] "List of operating fans, along with their staging order" annotation (Placement(transformation(extent={{-320,-220},{-300,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1[nRelFan]( final p=fill(nRelFan + 1, nRelFan)) "Add value to the input" annotation (Placement(transformation(extent={{-260,-220},{-240,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr4[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr4[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the input is less than threshold" annotation (Placement(transformation(extent={{-260,-250},{-240,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-220,-250},{-200,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin1( + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin1( final nin=nRelFan) "Minimum staging order of the running relief fans" annotation (Placement(transformation(extent={{-140,-250},{-120,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Subtract sub3[nRelFan] "Identify next operating fan" annotation (Placement(transformation(extent={{-40,-220},{-20,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Abs abs2[nRelFan] "Find absolute value" annotation (Placement(transformation(extent={{0,-220},{20,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr5[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr5[nRelFan]( final t=fill(0.5, nRelFan)) "Identify next fan to be off" annotation (Placement(transformation(extent={{40,-220},{60,-200}}))); @@ -280,7 +280,7 @@ block ReliefFanGroup Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea3[nRelFan] "Convert boolean to real" annotation (Placement(transformation(extent={{400,-80},{420,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=1, final uMin=relFanSpe_min) "Limit the controller output" @@ -289,25 +289,25 @@ block ReliefFanGroup final nout=nRelFan) "Replicate real input" annotation (Placement(transformation(extent={{400,226},{420,246}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply pro3[nRelFan] "Relief fan speed" annotation (Placement(transformation(extent={{460,220},{480,240}}))); Buildings.Controls.OBC.CDL.Logical.Switch logSwi2[nRelFan] "Vector of relief fan status after staging up" annotation (Placement(transformation(extent={{400,130},{420,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-460,170},{-440,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-420,270},{-400,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Zero fan speed when it is in stage 0" annotation (Placement(transformation(extent={{180,200},{200,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch input values" annotation (Placement(transformation(extent={{360,226},{380,246}}))); Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(nin=nRelFan) @@ -344,17 +344,17 @@ block ReliefFanGroup final realFalse=fill(1, nRelFan)) "Convert boolean to real" annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Multiply mul[nRelFan] "Product of inputs" annotation (Placement(transformation(extent={{460,70},{480,90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3[nRelFan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3[nRelFan]( final t=fill(0.5, nRelFan)) "Check if the relief fan is enabled" annotation (Placement(transformation(extent={{-40,226},{-20,246}}))); Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd1( final nin=nRelFan) "Check if all the fans are proven off" annotation (Placement(transformation(extent={{-320,-70},{-300,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3[nRelFan] + Buildings.Controls.OBC.CDL.Reals.Switch swi3[nRelFan] "Switch input values" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep4( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReturnFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReturnFan.mo index e301805789d..3a0d778710a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReturnFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/ReturnFan.mo @@ -32,13 +32,13 @@ block ReturnFan "Return fan control for single zone AHU" annotation (Placement(transformation(extent={{100,-80},{140,-40}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=speDif) "Adjusted return fan speed" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Return fan speed" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Return fan speed" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Zero speed" annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Supply.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Supply.mo index 4ccc275b877..ae67685bc1f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Supply.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Supply.mo @@ -182,147 +182,147 @@ block Supply "Supply air set point for single zone VAV system" iconTransformation(extent={{100,-80},{140,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fanOff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fanOff( final k=0) "Fan off status" annotation (Placement(transformation(extent={{40,350},{60,370}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch fanSpe "Supply fan speed" + Buildings.Controls.OBC.CDL.Reals.Switch fanSpe "Supply fan speed" annotation (Placement(transformation(extent={{100,330},{120,350}}))); - Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate ramLim( + Buildings.Controls.OBC.CDL.Reals.LimitSlewRate ramLim( final raisingSlewRate=1/600, final Td=60) "Prevent changes in fan speed of more than 10% per minute" annotation (Placement(transformation(extent={{140,330},{160,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxDewPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxDewPoi( final k=TSupDew_max) "Maximum supply air dew-point temperature" annotation (Placement(transformation(extent={{-160,270},{-140,290}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-1) "Maximum supply dewpoint temperature minus threshold" annotation (Placement(transformation(extent={{-100,270},{-80,290}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=-6) "Zone temperature minus threshold" annotation (Placement(transformation(extent={{-100,230},{-80,250}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=0.5) "Zone temperature plus threshold" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Min endPoiTwo + Buildings.Controls.OBC.CDL.Reals.Min endPoiTwo "End point two for specifying medium fan speed" annotation (Placement(transformation(extent={{-40,250},{-20,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Min endPoiOne + Buildings.Controls.OBC.CDL.Reals.Min endPoiOne "End point one for specifying medium fan speed" annotation (Placement(transformation(extent={{-40,170},{-20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFanSpe( final k=minSpe) "Minimum fan speed" annotation (Placement(transformation(extent={{20,120},{40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxCooFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxCooFanSpe( final k=maxCooSpe) "Maximum fan speed for cooling" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Line medFanSpe + Buildings.Controls.OBC.CDL.Reals.Line medFanSpe "Medium fan speed" annotation (Placement(transformation(extent={{80,210},{100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Average aveZonSet + Buildings.Controls.OBC.CDL.Reals.Average aveZonSet "Average of the zone heating and cooling setpoint" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=TSupDea_max, final uMin=TSupDea_min) "Limiter that outputs the dead band value for the supply air temperature" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "Constant one" annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Line heaFanSpe + Buildings.Controls.OBC.CDL.Reals.Line heaFanSpe "Fan speed when it is in heating state" annotation (Placement(transformation(extent={{60,80},{80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speOnePoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speOnePoi( final k=spePoiOne) "Speed control point one in x-axis of control map" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxHeaFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxHeaFanSpe( final k=maxHeaSpe) "Maximum fan speed for heating" annotation (Placement(transformation(extent={{-120,120},{-100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speTwoPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speTwoPoi( final k=spePoiTwo) "Speed control point two in x-axis of control map" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speThrPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speThrPoi( final k=spePoiThr) "Speed control point three in x-axis of control map" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speFouPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speFouPoi( final k=spePoiFou) "Speed control point four in x-axis of control map" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line cooFanSpe1 + Buildings.Controls.OBC.CDL.Reals.Line cooFanSpe1 "Fan speed when it is in cooling state" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Line cooFanSpe2 + Buildings.Controls.OBC.CDL.Reals.Line cooFanSpe2 "Fan speed when it is in cooling mode" annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Max spe + Buildings.Controls.OBC.CDL.Reals.Max spe "Fan speed" annotation (Placement(transformation(extent={{140,60},{160,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Line heaSupTem + Buildings.Controls.OBC.CDL.Reals.Line heaSupTem "Supply air temperature when it is in heating state" annotation (Placement(transformation(extent={{60,-160},{80,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant temOnePoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant temOnePoi( final k=temPoiOne) "Temperature control point one in x-axis of control map" annotation (Placement(transformation(extent={{-120,-190},{-100,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSupTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSupTem( final k=TSup_max) "Highest heating supply air temperature" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant temTwoPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant temTwoPoi( final k=temPoiTwo) "Temperature control point two in x-axis of control map" annotation (Placement(transformation(extent={{-120,-270},{-100,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Line cooSupTem + Buildings.Controls.OBC.CDL.Reals.Line cooSupTem "Supply air temperature when it is in cooling state" annotation (Placement(transformation(extent={{60,-250},{80,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supCooTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supCooTem( final k=TSup_min) "Cooling supply air temperature" annotation (Placement(transformation(extent={{-120,-310},{-100,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar3( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar3( final p=-1) "Minimum cooling supply temperature minus threshold" annotation (Placement(transformation(extent={{-40,-280},{-20,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Line cooSupTem1 + Buildings.Controls.OBC.CDL.Reals.Line cooSupTem1 "Supply air temperature when it is in cooling state" annotation (Placement(transformation(extent={{60,-340},{80,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant temThrPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant temThrPoi( final k=temPoiThr) "Temperature control point three in x-axis of control map" annotation (Placement(transformation(extent={{-40,-320},{-20,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant temFouPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant temFouPoi( final k=temPoiFou) "Temperature control point four in x-axis of control map" annotation (Placement(transformation(extent={{-120,-370},{-100,-350}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooFan + Buildings.Controls.OBC.CDL.Reals.Switch cooFan "Fan speed when it is in cooling state" annotation (Placement(transformation(extent={{100,-20},{120,0}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold heaSta( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold heaSta( final t=looHys, final h=0.8*looHys) "Check if it is in heating state" annotation (Placement(transformation(extent={{-40,-230},{-20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch supTemSet + Buildings.Controls.OBC.CDL.Reals.Switch supTemSet "Supply temperature setpoint" annotation (Placement(transformation(extent={{120,-210},{140,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch supTemSet1 + Buildings.Controls.OBC.CDL.Reals.Switch supTemSet1 "Supply temperature setpoint" annotation (Placement(transformation(extent={{120,-290},{140,-270}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant unoMod( @@ -335,7 +335,7 @@ protected Buildings.Controls.OBC.CDL.Logical.Not not1 "Supply fan status" annotation (Placement(transformation(extent={{40,290},{60,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=spePoiFou - spePoiThr) "Check setpoint section" annotation (Placement(transformation(extent={{20,-20},{40,0}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/CoolingCoil.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/CoolingCoil.mo index 7d708ca5bfb..0c42293abb0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/CoolingCoil.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/CoolingCoil.mo @@ -9,12 +9,12 @@ model CoolingCoil "Validation of cooling coil model" final controllerTypeCooCoi=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final kCooCoi=1) "Cooling coil controller" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final offset=TSupSet - 2, final duration=3600*8) "Measured supply air temperature" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); @@ -22,7 +22,7 @@ model CoolingCoil "Validation of cooling coil model" final k=true) "Fan is on" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse zonSta( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse zonSta( final offset=2, final period=3600*2) "Zone state" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection.mo index cbcf876142f..39274fa0f64 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection.mo @@ -8,21 +8,21 @@ model FreezeProtection "Freeze protection control" annotation (Placement(transformation(extent={{80,0},{100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final height=0.5, final offset=0.1, final duration=3600) "Outdoor air damper position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Outdoor air damper minimum position" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoiPos( final height=0.49, final offset=0.5, final duration=3000) "Heating coil position" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retDamPos( final height=0.2, final offset=0.7, final duration=3600) "Return air damper position" @@ -35,27 +35,27 @@ model FreezeProtection Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final height=0.2, final offset=0.5, final duration=3600) "Supply fan speed" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoiPos( final height=0.2, final offset=0.5, final duration=3600) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem( final height=-4, final offset=273.15 + 6, final duration=3600) "Supply air temperature" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp mixTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp mixTem( final height=-5, final offset=273.15 + 8, final duration=3600) "Mixed air temperature" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.05) "Supply fan command on" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo index 5213a1742d7..618a5024334 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/FreezeProtection_Disable.mo @@ -8,32 +8,32 @@ model FreezeProtection_Disable "Freeze protection control" annotation (Placement(transformation(extent={{80,0},{100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( final height=0.5, final offset=0.1, final duration=3600) "Outdoor air damper position" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoiPos( final height=0.46, final offset=0.5, final duration=3600) "Heating coil position" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retDamPos( final height=0.2, final offset=0.7, final duration=3600) "Return air damper position" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final height=0.2, final offset=0.5, final duration=3600) "Supply fan speed" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoiPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoiPos( final height=0.2, final offset=0.5, final duration=3600) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final h=0.01) "Check if the supply fan is proven on" annotation (Placement(transformation(extent={{0,-56},{20,-36}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo index a506cebb4c0..25a153f6333 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo @@ -11,10 +11,10 @@ model ModeAndSetPoints ignDemLim=false) "Operating mode and temperature setpoints" annotation (Placement(transformation(extent={{80,40},{100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin cooSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooSetAdj( final freqHz=1/28800) "Cooling setpoint adjustment" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin heaSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin heaSetAdj( final freqHz=1/28800, final amplitude=0.5) "Heating setpoint adjustment" @@ -37,54 +37,54 @@ model ModeAndSetPoints final width=0.95) "Generate signal indicating occupancy status" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerAdj( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( final offset=0, final height=6.2831852, final duration=24*3600) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin2 + Buildings.Controls.OBC.CDL.Reals.Sin sin2 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=12.5) "Gain factor" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=273.15 + 22.5) "Current zone temperature" annotation (Placement(transformation(extent={{0,100},{20,120}}))); Buildings.Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetUno( final k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); Buildings.Controls.OBC.CDL.Logical.Not winOpe "Window is open" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/PlantRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/PlantRequests.mo index 70fa70f13b0..0b6cb49fd7e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/PlantRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/PlantRequests.mo @@ -9,42 +9,42 @@ model PlantRequests final have_hotWatCoi=false) "Calculate plant request" annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem( final height=8, final offset=273.15 + 15, final duration=3600) "Supply air temperature" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTemSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTemSet( final height=6, final offset=273.15 + 14.5, final duration=3600) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoi( final height=-0.3, final offset=0.96, final duration=3600, startTime=1000) "Cooling coil position" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaCoi( final height=-0.3, final offset=0.96, final duration=3600, startTime=1000) "Heating coil position" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem1( final height=8, final offset=273.15 + 12, final duration=3600) "Cooling supply air temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTemSet1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTemSet1( final height=15, final offset=273.15 + 20, final duration=3600) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooCoi1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooCoi1( final k=0) "Cooling coil position" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supTem2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supTem2( final height=7, final offset=273.15 + 13, final duration=3600) "Supply air temperature" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefDamper.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefDamper.mo index aab1b549732..9ed4d716f9c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefDamper.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefDamper.mo @@ -4,7 +4,7 @@ model ReliefDamper "Validation of relief damper control" Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.SetPoints.ReliefDamper relDam(final relDam_min=0.1, final relDam_max=0.6) "Relief damper controller" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamMin( final height=0.1, final offset=0.1, final duration=3600) @@ -14,7 +14,7 @@ model ReliefDamper "Validation of relief damper control" final period=3600) "Supply fan status" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDam( final height=0.6, final offset=0.2, final duration=3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFan.mo index 4c7a8c529bb..ac4c28763b2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFan.mo @@ -16,12 +16,12 @@ model ReliefFan "Validate model for controlling relief fan" final period=3600) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui1( final height=-15, final offset=20, final duration=1800, @@ -32,7 +32,7 @@ model ReliefFan "Validate model for controlling relief fan" final k=true) "Supply fan status" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui2( final height=3, final offset=11, final duration=1800) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFanGroup.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFanGroup.mo index 58b0e91ab73..9503003f1dd 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFanGroup.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReliefFanGroup.mo @@ -17,7 +17,7 @@ model ReliefFanGroup final period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( final height=40, final offset=0, final duration=1800) "Building static presure" @@ -27,13 +27,13 @@ model ReliefFanGroup final period=4000, shift=600) "Supply fan status" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,100},{80,120}}))); Buildings.Controls.OBC.CDL.Logical.Pre pre[4] "Return relief fan status" annotation (Placement(transformation(extent={{100,100},{120,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,0},{80,20}}))); @@ -55,7 +55,7 @@ model ReliefFanGroup final samplePeriod=fill(20, 4)) "Zero order hold" annotation (Placement(transformation(extent={{30,0},{50,20}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2[4]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2[4]( final t=fill(0.01, 4)) "Check if the relief fan is proven on" annotation (Placement(transformation(extent={{60,-120},{80,-100}}))); @@ -65,7 +65,7 @@ model ReliefFanGroup final samplePeriod=fill(20, 4)) "Zero order hold" annotation (Placement(transformation(extent={{30,-120},{50,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui1( final height=-15, final offset=20, final duration=1800, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReturnFan.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReturnFan.mo index 4a1ed38838f..35f49c1b613 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReturnFan.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/ReturnFan.mo @@ -4,7 +4,7 @@ model ReturnFan "Validation of return fan control" Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.SetPoints.ReturnFan retFan "Cooling coil controller" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supFanSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supFanSpe( final height=0.7, final offset=0.2, final duration=3600) "Supply fan speed" @@ -13,7 +13,7 @@ model ReturnFan "Validation of return fan control" final period=3600) "Supply fan status" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Fan speed should be zero when it is disabled" annotation (Placement(transformation(extent={{20,0},{40,20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo index 506e7aa8a5e..32c1d3f8c09 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo @@ -13,24 +13,24 @@ model Supply_T "Block that computes the setpoints for temperature and fan speed" annotation (Placement(transformation(extent={{60,-20},{80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHea(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uHea(k=0) "Heating control signal" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCoo(k=0.6) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uCoo(k=0.6) "Cooling control signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TOut( final duration=3600, final height=18, final offset=273.15 + 10) "Outdoor air temperature" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Difference zone minus outdoor temperature" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSet( final k=273.15 + 24) "Zone cooling set point" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); @@ -38,7 +38,7 @@ model Supply_T final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSet( final k=273.15 + 20) "Zone heating set point" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo index a2afaec5271..6f81a518096 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo @@ -34,24 +34,24 @@ model Supply_u "Validation model for temperature and fan speed" "Block that computes the setpoints for temperature and fan speed" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 28) "Zone air temperature" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut( final k=273.15 + 22) "Outdoor temperature" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final duration=900, final height=-1, final offset=1) "Heating control signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo(final duration=900, + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo(final duration=900, final startTime=2700) "Cooling control signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon1( final k=273.15 + 23) "Zone air temperature" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); @@ -59,11 +59,11 @@ model Supply_u "Validation model for temperature and fan speed" final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSet(final k=273.15 + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSet(final k=273.15 + 22) "Zone heating set point" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSet( final k=273.15 + 24) "Zone cooling set point" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Validation/Controller.mo index 3a839b77963..0e65951389c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/AHUs/SingleZone/VAV/Validation/Controller.mo @@ -26,7 +26,7 @@ model Controller "Validation of the top-level controller" final relDam_max=0.6) "Validate the cooling case" annotation (Placement(transformation(extent={{20,0},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon( final duration=86400, final height=6, final offset=273.15 + 16) @@ -36,23 +36,23 @@ model Controller "Validation of the top-level controller" final occupancy=3600*{4,20}) "Occupancy schedule" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut( final k=273.15 +17) "Outdoor air dry bulb temperature" annotation (Placement(transformation(extent={{-180,190},{-160,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-140,170},{-120,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-180,150},{-160,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin cooSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooSetAdj( final freqHz=1/28800) "Cooling setpoint adjustment" annotation (Placement(transformation(extent={{-150,-30},{-130,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin heaSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin heaSetAdj( final freqHz=1/28800, final amplitude=0.5) "Heating setpoint adjustment" @@ -62,14 +62,14 @@ model Controller "Validation of the top-level controller" final shift=1200) "Generate signal indicating window status" annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerAdj( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-150,10},{-130,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-70,-56},{-50,-36}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-70,-26},{-50,-6}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse occSta( @@ -89,47 +89,47 @@ model Controller "Validation of the top-level controller" Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp mixTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp mixTem( final height=-5, final offset=273.15 + 8, final duration=3600) "Mixed air temperature" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDam( final height=0.6, final offset=0.2, final duration=86400) "Outdoor damper position" annotation (Placement(transformation(extent={{-180,-170},{-160,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooCoi( final height=-0.3, final offset=0.96, final duration=86400, startTime=1000) "Cooling coil position" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoi( final k=0) "Heating coil position" annotation (Placement(transformation(extent={{-180,-210},{-160,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=2, final duration=86400, final offset=273.15 + 22.5) "Terminal unit discharge air temperature" annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-180,70},{-160,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetUno( final k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo index 17608fa94d1..ac8c51b6d53 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo @@ -188,29 +188,29 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Logical and" annotation (Placement(transformation(extent={{220,400},{240,420}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{460,800},{480,820}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=273.15 + 24) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off temperature" annotation (Placement(transformation(extent={{220,840},{240,860}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{420,660},{440,680}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=273.15 + 21) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off temperature" annotation (Placement(transformation(extent={{220,700},{240,720}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{380,580},{400,600}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( final k=273.15 + 18) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off temperature" @@ -239,7 +239,7 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Logical or" annotation (Placement(transformation(extent={{80,400},{100,420}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{340,420},{360,440}}))); @@ -264,16 +264,16 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Logical not" annotation (Placement(transformation(extent={{440,360},{460,380}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=273.15 + 24) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off temperature" annotation (Placement(transformation(extent={{20,150},{40,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air enthalpy" annotation (Placement(transformation(extent={{380,30},{400,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=66000) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Enthalpy cutoff value, J/kg" @@ -373,11 +373,11 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-340},{220,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{480,-340},{500,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con5( final k=273.15 + 24) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" @@ -390,11 +390,11 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-430},{220,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{440,-430},{460,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con6( final k=273.15 + 23) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" @@ -407,21 +407,21 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-510},{220,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con7( final k=273.15 + 22) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" annotation (Placement(transformation(extent={{200,-470},{220,-450}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 + Buildings.Controls.OBC.CDL.Reals.Switch swi7 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{400,-510},{420,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con8( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con8( final k=273.15 + 21) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" annotation (Placement(transformation(extent={{200,-550},{220,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{360,-590},{380,-570}}))); @@ -429,7 +429,7 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-660},{220,-640}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 + Buildings.Controls.OBC.CDL.Reals.Switch swi9 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{480,-640},{500,-620}}))); @@ -437,15 +437,15 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-740},{220,-720}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi10 + Buildings.Controls.OBC.CDL.Reals.Switch swi10 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{440,-740},{460,-720}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-1) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" annotation (Placement(transformation(extent={{280,-700},{300,-680}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi11 + Buildings.Controls.OBC.CDL.Reals.Switch swi11 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{400,-820},{420,-800}}))); @@ -453,21 +453,21 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-820},{220,-800}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=-2) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" annotation (Placement(transformation(extent={{280,-780},{300,-760}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi12 + Buildings.Controls.OBC.CDL.Reals.Switch swi12 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{360,-900},{380,-880}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=-3) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" annotation (Placement(transformation(extent={{280,-860},{300,-840}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con9( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con9( final k=273.15 + 24) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off temperature" @@ -495,13 +495,13 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical not" annotation (Placement(transformation(extent={{-320,-680},{-300,-660}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con10( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con10( final k=0) if (eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 and not ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb) "Constant 0" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con11( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con11( final k=0) if not (ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb or ecoHigLimCon == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb) @@ -515,11 +515,11 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Logical and" annotation (Placement(transformation(extent={{220,270},{240,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Smaller input" annotation (Placement(transformation(extent={{220,310},{240,330}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi13 + Buildings.Controls.OBC.CDL.Reals.Switch swi13 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{300,270},{320,290}}))); @@ -527,16 +527,16 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Logical and" annotation (Placement(transformation(extent={{220,180},{240,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min2 + Buildings.Controls.OBC.CDL.Reals.Min min2 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Smaller input" annotation (Placement(transformation(extent={{220,220},{240,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con12( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con12( final k=273.15 + 21) if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off temperature" annotation (Placement(transformation(extent={{20,250},{40,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi14 + Buildings.Controls.OBC.CDL.Reals.Switch swi14 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{260,180},{280,200}}))); @@ -557,11 +557,11 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-990},{220,-970}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi15 + Buildings.Controls.OBC.CDL.Reals.Switch swi15 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{480,-990},{500,-970}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min3 + Buildings.Controls.OBC.CDL.Reals.Min min3 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Smaller input" annotation (Placement(transformation(extent={{360,-960},{380,-940}}))); @@ -569,11 +569,11 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-1060},{220,-1040}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min4 + Buildings.Controls.OBC.CDL.Reals.Min min4 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Smaller input" annotation (Placement(transformation(extent={{360,-1030},{380,-1010}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi16 + Buildings.Controls.OBC.CDL.Reals.Switch swi16 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{440,-1060},{460,-1040}}))); @@ -581,19 +581,19 @@ block AirEconomizerHighLimits "Specify the economizer high liimits" if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Logical and" annotation (Placement(transformation(extent={{200,-1130},{220,-1110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi17 + Buildings.Controls.OBC.CDL.Reals.Switch swi17 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{440,-1130},{460,-1110}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min5 + Buildings.Controls.OBC.CDL.Reals.Min min5 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Smaller input" annotation (Placement(transformation(extent={{360,-1100},{380,-1080}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi18 + Buildings.Controls.OBC.CDL.Reals.Switch swi18 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Cut off outdoor air temperature" annotation (Placement(transformation(extent={{440,-1200},{460,-1180}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min6 + Buildings.Controls.OBC.CDL.Reals.Min min6 if eneStd == Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24 "Smaller input" annotation (Placement(transformation(extent={{360,-1170},{380,-1150}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TimeSuppression.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TimeSuppression.mo index 925c36e1046..cf04741000d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TimeSuppression.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TimeSuppression.mo @@ -39,7 +39,7 @@ block TimeSuppression annotation (Placement(transformation(extent={{180,-120},{220,-80}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Min supTim + Buildings.Controls.OBC.CDL.Reals.Min supTim "Calculated suppression time due to the setpoint change" annotation (Placement(transformation(extent={{80,0},{100,20}}))); @@ -52,7 +52,7 @@ protected final samplePeriod=samplePeriod) "Delay value to record input value" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Absolute change of the setpoint temperature" annotation (Placement(transformation(extent={{100,100},{120,120}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam @@ -70,40 +70,40 @@ protected Buildings.Controls.OBC.CDL.Logical.Timer tim "Time when the setpoint is being changed" annotation (Placement(transformation(extent={{-40,-160},{-20,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1 + Buildings.Controls.OBC.CDL.Reals.Greater gre1 "Check if current model time is greater than the initial period equaling the sample time" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if there is setpoint change" annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.ModelTime modTim + Buildings.Controls.OBC.CDL.Reals.Sources.ModelTime modTim "Time of the model" annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=chaRat) "Setpoint change rate" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference of previous and current setpoints" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=samplePeriod) "Sample period time" annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSupTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSupTim( final k=maxTim) "Maximum suppression time " annotation (Placement(transformation(extent={{20,-20},{40,0}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con5( final k=true) "Constant true" annotation (Placement(transformation(extent={{80,-130},{100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Use setpoint different value when sample period time has passed" annotation (Placement(transformation(extent={{40,100},{60,120}}))); Buildings.Controls.OBC.CDL.Logical.TrueHoldWithReset truHol( @@ -113,16 +113,16 @@ protected Buildings.Controls.OBC.CDL.Logical.Switch pasSupTim "Check if suppression time has passed" annotation (Placement(transformation(extent={{140,-110},{160,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater pasSup + Buildings.Controls.OBC.CDL.Reals.Greater pasSup "Check if the change has been suppressed by sufficient time" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract temDif + Buildings.Controls.OBC.CDL.Reals.Subtract temDif "Difference between setpoint and zone temperature" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1 "Zone temperature at the moment when there is setpoint change" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2 + Buildings.Controls.OBC.CDL.Reals.Abs abs2 "Absolute temperature difference" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo index bf24f783e0e..7bce941eedf 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/TrimAndRespond.mo @@ -35,89 +35,89 @@ block TrimAndRespond "Block to inplement trim and respond logic" final delayOnInit=true) "Send an on signal after some delay time" annotation (Placement(transformation(extent={{-200,160},{-180,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr "Check if the real requests is more than ignored requests setting" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch netRes "Net setpoint reset value" + Buildings.Controls.OBC.CDL.Reals.Switch netRes "Net setpoint reset value" annotation (Placement(transformation(extent={{160,-20},{180,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant resAmoCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resAmoCon( final k=resAmo) "Respond amount constant" annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Products of net requests and respond amount value" annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 "Product of trim and respond amount" + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Product of trim and respond amount" annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 "Product of respond and maximum amount" + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Product of respond and maximum amount" annotation (Placement(transformation(extent={{-160,-180},{-140,-160}}))); Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel( final samplePeriod=samplePeriod, final y_start=iniSet) "Output the input signal with a unit delay" annotation (Placement(transformation(extent={{-100,96},{-80,116}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between initial setpoint and reseted setpoint" annotation (Placement(transformation(extent={{160,180},{180,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Before instant (device ON + delTim + samplePeriod), the setpoint should not be trimmed" annotation (Placement(transformation(extent={{120,0},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Reinitialize setpoint to initial setting when device become OFF" annotation (Placement(transformation(extent={{100,130},{120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Logical switch" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Logical switch" annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); Buildings.Controls.OBC.CDL.Discrete.Sampler sampler( final samplePeriod=samplePeriod) "Sample number of requests" annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1 + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1 "Check if trim and response amount have same sign" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 "Check if trim and response amount have opposite sign" annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if response amount have positive sign" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=-1) "Convert results back to negative" annotation (Placement(transformation(extent={{80,-190},{100,-170}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant iniSetCon(k=iniSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant iniSetCon(k=iniSet) "Initial setpoint" annotation (Placement(transformation(extent={{-100,180},{-80,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant numIgnReqCon(k=numIgnReq) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant numIgnReqCon(k=numIgnReq) "Number of ignored requests" annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant triAmoCon(k=triAmo) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant triAmoCon(k=triAmo) "Trim amount constant" annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxResCon(k=maxRes) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxResCon(k=maxRes) "Maximum response per time interval" annotation (Placement(transformation(extent={{-200,-210},{-180,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSetCon(k=maxSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSetCon(k=maxSet) "Maximum setpoint constant" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerTri(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerTri(k=0) "Zero reset amount during time range from (device ON) to (device ON + delTim + timSet)" annotation (Placement(transformation(extent={{60,-20},{80,0}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Convert integer input to real output" annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difReqIgnReq + Buildings.Controls.OBC.CDL.Reals.Subtract difReqIgnReq "Difference between ignored request number and the real request number" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Increase setpoint by amount of value defined from reset logic" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Net reset value" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Net reset value" annotation (Placement(transformation(extent={{120,-96},{140,-76}}))); - Buildings.Controls.OBC.CDL.Continuous.Min minInp + Buildings.Controls.OBC.CDL.Reals.Min minInp "Total response should not be more than maximum response" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Reset setpoint should not be higher than the maximum setpoint" annotation (Placement(transformation(extent={{0,90},{20,110}}))); Buildings.Controls.OBC.CDL.Logical.And and2 @@ -125,10 +125,10 @@ protected annotation (Placement(transformation(extent={{120,-40},{140,-20}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical Not" annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSetCon(k=minSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSetCon(k=minSet) "Minimum setpoint constant" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxInp + Buildings.Controls.OBC.CDL.Reals.Max maxInp "Reset setpoint should not be lower than the minimum setpoint" annotation (Placement(transformation(extent={{40,90},{60,110}}))); Buildings.Controls.OBC.CDL.Utilities.Assert assMes( @@ -139,9 +139,9 @@ protected final message="Respond amount 'resAmo' and maximum respond amount 'maxRes' must have same sign.") "Generate alarm message" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs "Absolute value of real input" + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute value of real input" annotation (Placement(transformation(extent={{-120,-140},{-100,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 "Absolute value of real input" + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Absolute value of real input" annotation (Placement(transformation(extent={{-120,-210},{-100,-190}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/AirEconomizerHighLimits.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/AirEconomizerHighLimits.mo index 9745147134f..85b8eb634a3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/AirEconomizerHighLimits.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/AirEconomizerHighLimits.mo @@ -92,12 +92,12 @@ model AirEconomizerHighLimits final tit24CliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_1) "Title 24 standard, with fixed enthalpy and fixed dry bulb device" annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retAirEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retAirEnt( final height=5000, final duration=10, final offset=65000) "Return air enthalpy" annotation (Placement(transformation(extent={{-90,-6},{-70,14}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp retAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp retAirTem( final height=5, final duration=10, final offset=295.15) "Return air temperature" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TimeSuppression.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TimeSuppression.mo index a85bf3134cd..053c3de3aed 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TimeSuppression.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TimeSuppression.mo @@ -9,13 +9,13 @@ model TimeSuppression final chaRat=1080, final maxTim=7200) "Time suppression for temperature alarm" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin zonTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin zonTem( final amplitude=2, final freqHz=1/7200, final offset=298.15) "Zone temperature" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooSet( final height=5, final duration=600, final offset=295.15, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TrimAndRespond.mo b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TrimAndRespond.mo index ff9ca1be4fc..a75746d76f3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TrimAndRespond.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/Generic/Validation/TrimAndRespond.mo @@ -36,18 +36,18 @@ model TrimAndRespond "Model validates the trim and respond block" Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( final k=true) "Logic true indicating device ON" annotation (Placement(transformation(extent={{20,80},{40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final amplitude=6, final freqHz=1/5400) "Block generates sine signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-52,40},{-32,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final amplitude=6, freqHz=1/5400) "Block generates sine signal" annotation (Placement(transformation(extent={{-88,-90},{-68,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( @@ -56,18 +56,18 @@ model TrimAndRespond "Model validates the trim and respond block" annotation (Placement(transformation(extent={{-88,-20},{-68,0}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{20,-20},{40,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Switch between two Real signals" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between two Real signals" annotation (Placement(transformation(extent={{-48,-50},{-28,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) "Zero request when device is OFF" annotation (Placement(transformation(extent={{-88,-50},{-68,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/ActiveAirFlow.mo index 72dbcd9081b..0e2a4a932d0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/ActiveAirFlow.mo @@ -47,7 +47,7 @@ block ActiveAirFlow final realTrue=1) "Convert boolean to real" annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply actMin + Buildings.Controls.OBC.CDL.Reals.Multiply actMin "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Alarms.mo index db6a133141f..fbfec19a8b7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Alarms.mo @@ -67,11 +67,11 @@ block Alarms "Generate alarms of cooling only terminal unit" annotation (Placement(transformation(extent={{240,-190},{280,-150}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,130},{-160,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); @@ -79,16 +79,16 @@ block Alarms "Generate alarms of cooling only terminal unit" final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,50},{-160,70}}))); @@ -113,11 +113,11 @@ block Alarms "Generate alarms of cooling only terminal unit" final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -146,11 +146,11 @@ block Alarms "Generate alarms of cooling only terminal unit" final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,40},{120,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,-70},{-180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); @@ -161,7 +161,7 @@ block Alarms "Generate alarms of cooling only terminal unit" final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); @@ -183,7 +183,7 @@ block Alarms "Generate alarms of cooling only terminal unit" final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-180},{40,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo index 1986fdae95b..9971cc5579b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Dampers.mo @@ -93,26 +93,26 @@ block Dampers annotation (Placement(transformation(extent={{260,-280},{300,-240}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-220,210},{-200,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-180,210},{-160,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Map cooling loop output to the active airflow setpoint" annotation (Placement(transformation(extent={{-120,180},{-100,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=dTHys) "Check if supplyair temperature from the air handler is greater than room temperature" annotation (Placement(transformation(extent={{-160,250},{-140,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Select active airfow setpoint based on difference between supply and zone temperature" annotation (Placement(transformation(extent={{-60,250},{-40,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch actFlo + Buildings.Controls.OBC.CDL.Reals.Switch actFlo "Specify active flow setpoint based on the zone status" annotation (Placement(transformation(extent={{-20,150},{0,170}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( final controllerType=damCon, final k=kDam, final Ti=TiDam, @@ -126,14 +126,14 @@ block Dampers Buildings.Controls.OBC.CDL.Integers.Equal cooSta "Check if zone is in cooling state" annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow( final k=VCooMax_flow) "Nominal volume flow rate" annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{100,-160},{120,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{100,-200},{120,-180}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( @@ -169,13 +169,13 @@ block Dampers final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 @@ -202,13 +202,13 @@ block Dampers final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{0,-270},{20,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{60,-250},{80,-230}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{60,-290},{80,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{220,-270},{240,-250}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/SystemRequests.mo index 2fa15bbb889..35e9c60bc6c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/SystemRequests.mo @@ -101,26 +101,26 @@ block SystemRequests iconTransformation(extent={{100,-80},{140,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -131,18 +131,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-180},{60,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,-120},{-80,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -194,10 +194,10 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); Buildings.Controls.OBC.CDL.Logical.And and5 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/ActiveAirFlow.mo index 72461278496..883f212c280 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/ActiveAirFlow.mo @@ -4,12 +4,12 @@ model ActiveAirFlow Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.CoolingOnly.Subsequences.ActiveAirFlow actAirSet(final VCooMax_flow=0.5) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -18,7 +18,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Alarms.mo index 273ea7c4bc7..fc950c404f1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Alarms.mo @@ -7,17 +7,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirRate( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -28,7 +28,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Dampers.mo index 75cbb87021b..f5ed272b09c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/Dampers.mo @@ -8,35 +8,35 @@ model Dampers final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-80},{100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=1, final duration=3600, final offset=0, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis_flow( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp zonSta( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp zonSta( final offset=3, final height=-2, final duration=1000, @@ -45,11 +45,11 @@ model Dampers Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, startTime=1000) "Override flow setpoint" @@ -57,10 +57,10 @@ model Dampers Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -68,7 +68,7 @@ model Dampers Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-140},{0,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/SystemRequests.mo index e9421713ff7..07579ef47fd 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Subsequences/Validation/SystemRequests.mo @@ -7,7 +7,7 @@ model SystemRequests final looHys=0.01, final damPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); @@ -15,27 +15,27 @@ model SystemRequests final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,30},{0,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=0.9, final duration=7200, final offset=0.1) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirRate( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Validation/Controller.mo index cd7239319f6..718c952243c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/CoolingOnly/Validation/Controller.mo @@ -15,13 +15,13 @@ model Controller final VOccMin_flow=0, final VAreMin_flow=0) "Cooling only unit controller" annotation (Placement(transformation(extent={{100,-10},{120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -34,11 +34,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); @@ -47,7 +47,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -57,27 +57,27 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp supAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp supAirTem( final height=2, final duration=43200, final offset=273.15 + 14) "Supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -86,11 +86,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -98,7 +98,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); @@ -107,7 +107,7 @@ model Controller final period=73200, final shift=18800) "Supply fan status" annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Controller.mo index deca4ffde2f..f27772275fa 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Controller.mo @@ -410,18 +410,18 @@ block Controller "Controller for dual-duct terminal unit with cold-duct minimum final dTHys=dTHys) "Specify suppresion time due to the zone heating setpoint change and check if it has passed the suppresion period" annotation (Placement(transformation(extent={{-200,240},{-180,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{-40,280},{-20,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{-80,250},{-60,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Sum of minimum flow and cooling maximum flow" annotation (Placement(transformation(extent={{-40,230},{-20,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if cooling maximum is greater than the sum of minimum and heating maximum flow" annotation (Placement(transformation(extent={{20,280},{40,300}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/ActiveAirFlow.mo index 588663d1066..55123eec788 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/ActiveAirFlow.mo @@ -70,7 +70,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{40,90},{60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{100,80},{120,100}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo( @@ -103,22 +103,22 @@ protected Buildings.Controls.OBC.CDL.Logical.Or3 or1 "Check if it is in occupied, warm-up, or setback mode" annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Sum of minimum flow and cooling maximum flow" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); Buildings.Controls.OBC.CDL.Utilities.Assert assMes( final message="Warning: the sum of minimum flow and heating maximum flow is greater than the cooling maximum flow.") "Generate warning when the cooling maximum is less than the sum of heating maximum and the minimum flow" annotation (Placement(transformation(extent={{100,0},{120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if cooling maximum is greater than the sum of minimum and heating maximum flow" annotation (Placement(transformation(extent={{60,0},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{0,0},{20,20}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Alarms.mo index 68327fb1d43..326329cfd84 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Alarms.mo @@ -97,11 +97,11 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum annotation (Placement(transformation(extent={{240,-330},{280,-290}}), iconTransformation(extent={{100,-90},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,280},{-160,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,310},{-100,330}}))); @@ -109,16 +109,16 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,310},{-60,330}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,230},{-160,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,180},{-100,200}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,200},{-160,220}}))); @@ -143,11 +143,11 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,230},{100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,140},{-100,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -176,10 +176,10 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,190},{120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,20},{-160,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); @@ -190,7 +190,7 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); @@ -212,7 +212,7 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-180,-130},{-160,-110}}))); @@ -230,11 +230,11 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{160,-90},{180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxFlo( final k=VHeaMax_flow) "Heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,-210},{-160,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); Buildings.Controls.OBC.CDL.Logical.Not not6 @@ -244,7 +244,7 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-190},{40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-80,-190},{-60,-170}}))); @@ -266,7 +266,7 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{60,-320},{80,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam1( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" @@ -285,7 +285,7 @@ block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{160,-320},{180,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow" annotation (Placement(transformation(extent={{-200,80},{-180,100}}))); Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel6( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Dampers.mo index 63c0fdc8c1a..16a7f3be152 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Dampers.mo @@ -157,60 +157,60 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,160},{-40,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,210},{-140,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cold duct airflow setpoint" annotation (Placement(transformation(extent={{80,200},{100,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,230},{40,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,240},{-260,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,240},{-200,260}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,180},{-260,200}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow setpoint" annotation (Placement(transformation(extent={{260,250},{280,270}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Cooing or heating state" annotation (Placement(transformation(extent={{-200,70},{-180,90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,-190},{-260,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 + Buildings.Controls.OBC.CDL.Reals.Line lin1 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-200,-130},{-180,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-140,-130},{-120,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is less than room temperature" @@ -218,20 +218,20 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{140,160},{160,180}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -241,19 +241,19 @@ block Dampers final y_reset=0) "Cooling damper position controller" annotation (Placement(transformation(extent={{220,160},{240,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{140,100},{160,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos + Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos "Output cooling damper position" annotation (Placement(transformation(extent={{280,-10},{300,10}}))); Buildings.Controls.OBC.CDL.Logical.Not not3 "Not proven on" annotation (Placement(transformation(extent={{180,20},{200,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor1 "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{120,-90},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -263,10 +263,10 @@ block Dampers final y_reset=0) "Heating damper position controller" annotation (Placement(transformation(extent={{200,-90},{220,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor1 "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos + Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos "Output heating damper position" annotation (Placement(transformation(extent={{280,-280},{300,-260}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -277,18 +277,18 @@ block Dampers final realFalse=1) "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{20,-260},{40,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{240,-240},{260,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{20,160},{40,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{20,120},{40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 "Nominal flow" + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{80,140},{100,160}}))); equation connect(uCoo, lin.u) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Overrides.mo index efadf0bc5bc..63c868ee8e1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Overrides.mo @@ -97,11 +97,11 @@ block Overrides "Software switches to override setpoints" final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{28,150},{48,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{62,190},{82,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Airflow setpoint after considering override" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{100,30},{120,50}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); @@ -127,12 +127,12 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5( @@ -146,7 +146,7 @@ block Overrides "Software switches to override setpoints" final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add up two inputs" annotation (Placement(transformation(extent={{-6,110},{14,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -174,13 +174,13 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add up inputs" annotation (Placement(transformation(extent={{20,-170},{40,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-210},{20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-210},{100,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/SystemRequests.mo index 8f6206c654a..ebd906bdc92 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/SystemRequests.mo @@ -144,27 +144,27 @@ block SystemRequests "Output system requests for dual-duct unit with cold-duct m iconTransformation(extent={{100,-200},{140,-160}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,330},{-60,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,290},{-60,310}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,240},{-60,260}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -175,18 +175,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,290},{-100,310}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -236,35 +236,35 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr7( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr7( final t=thrTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr8( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr8( final t=twoTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr9( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr9( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-180,-340},{-160,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr10( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr10( final t=0.95, final h=looHys) "Check if heating loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr11( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr11( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -275,18 +275,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,-340},{40,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-160,-240},{-140,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-160,-280},{-140,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); Buildings.Controls.OBC.CDL.Logical.And and6 @@ -341,23 +341,23 @@ protected final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,-320},{-60,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu2(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,-240},{-60,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu3(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,-280},{-60,-260}}))); Buildings.Controls.OBC.CDL.Logical.And and10 "Logical and" annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr12( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr12( final t=0.15, final h=looHys) "Check if heating loop signal is greater than 0.15" annotation (Placement(transformation(extent={{-80,-400},{-60,-380}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold the true input" annotation (Placement(transformation(extent={{0,-400},{20,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.01, final h=looHys) "Check if the heating loop output is less than threshold" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/ActiveAirFlow.mo index aa03cb3b950..dab887353a0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/ActiveAirFlow.mo @@ -6,12 +6,12 @@ model ActiveAirFlow final VHeaMax_flow=0.4, final floHys=0.01) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -20,7 +20,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Alarms.mo index a961b8a2a89..756e14adb08 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Alarms.mo @@ -8,17 +8,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDisAir( final duration=7200, final offset=0.1, final height=0.3) "Cooling duct discharge airflow rate" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -30,14 +30,14 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{0,10},{20,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse colDammSta( final width=0.5, final period=7500) "Cooling duct damper open and close status" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos1( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -50,7 +50,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Damper position" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaDammSta( @@ -58,7 +58,7 @@ model Alarms "Validation of model that generates alarms" final period=7500) "Heating duct damper open and close status" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDisAir( final duration=7200, final offset=0.1, final height=0.3) "Heating duct discharge airflow rate" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Dampers.mo index 63747075a38..a9ad19308d1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Dampers.mo @@ -7,29 +7,29 @@ model Dampers final VHeaMax_flow=0.06, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) @@ -40,18 +40,18 @@ model Dampers final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup( final k=273.15 + 25) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.07) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); @@ -61,7 +61,7 @@ model Dampers final shift=5000) "Hot air handling unit status" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Overrides.mo index ff7cbfbbcfd..f1f68de7d3c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/Overrides.mo @@ -6,17 +6,17 @@ model Overrides "Validation of model that overrides control" final VCooMax_flow=0.9, final VHeaMax_flow=0.8) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDamPos( final duration=3600, final height=0.5, final offset=0.5) "Cooling damper position setpoint" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, startTime=1000) "Override flow setpoint" @@ -24,11 +24,11 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -36,16 +36,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDamPos( final duration=3600, final height=0.5, final offset=0.5) "Heating damper position setpoint" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -53,7 +53,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/SystemRequests.mo index 4895e42849f..e82950c8b75 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Subsequences/Validation/SystemRequests.mo @@ -7,7 +7,7 @@ model SystemRequests final looHys=0.01, final damPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-22},{80,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -15,30 +15,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,100},{0,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Cold-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDamPos( final duration=3000, final height=-0.7, final offset=0.7) "Cold-duct damper position" @@ -50,7 +50,7 @@ model SystemRequests annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final freqHz=1/7200, final offset=293.15) "Generate data for setpoint" @@ -66,25 +66,25 @@ model SystemRequests annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=0.9, final duration=3600, final startTime=3600) "Heating loop signal" annotation (Placement(transformation(extent={{-20,-100},{0,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Hot-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-20,-140},{0,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDamPos( final duration=3600, final height=0.7, startTime=3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Validation/Controller.mo index 4c3a4929bab..02c85cb8fae 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctColdDuctMin/Validation/Controller.mo @@ -17,13 +17,13 @@ model Controller final VAreMin_flow=0) "Dual duct unit controller" annotation (Placement(transformation(extent={{100,40},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -36,11 +36,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); @@ -49,7 +49,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -59,27 +59,27 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colSupAirTem( final height=2, final duration=43200, final offset=273.15 + 14) "Cold-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -88,11 +88,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveColDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveColDam( final height=2, final duration=5000, startTime=60000) "Override cold-duct damper position" @@ -100,7 +100,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); @@ -110,7 +110,7 @@ model Controller final shift=18800) "Cooling supply fan status" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveHotDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveHotDam( final height=2, final duration=5000, final startTime=60000) "Override hot-duct damper position" @@ -118,7 +118,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); @@ -127,18 +127,18 @@ model Controller final period=73200, final shift=18800) "Heating supply fan status" annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotSupAirTem( final height=2, final duration=43200, final offset=273.15 + 24) "Hot-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set( final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/ActiveAirFlow.mo index 0a83f9de27c..4f8980fd91b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/ActiveAirFlow.mo @@ -67,7 +67,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{100,70},{120,90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Alarms.mo index c1a058e6030..3b651fe8e62 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Alarms.mo @@ -78,11 +78,11 @@ block Alarms annotation (Placement(transformation(extent={{240,-200},{280,-160}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,170},{-160,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); @@ -90,16 +90,16 @@ block Alarms final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,200},{-60,220}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,120},{-160,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,90},{-160,110}}))); @@ -124,11 +124,11 @@ block Alarms final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,120},{100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -157,24 +157,24 @@ block Alarms final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,80},{120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam1( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-260},{-180,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo1( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,-60},{-160,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,-60},{-120,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre3( + Buildings.Controls.OBC.CDL.Reals.Greater gre3( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Dampers.mo index 4e72d54bba1..1b690b25e49 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Dampers.mo @@ -146,51 +146,51 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,240},{-140,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cold duct airflow setpoint" annotation (Placement(transformation(extent={{80,230},{100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,260},{40,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,270},{-260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,270},{-200,290}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,210},{-260,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,160},{-140,180}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Cooing or heating state" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-280,-240},{-260,-220}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "In deadband state" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Active cold duct airflow setpoint when it is in deadband state" annotation (Placement(transformation(extent={{20,100},{40,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is less than room temperature" @@ -198,20 +198,20 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate flow rate difference between minimum flow setpoint and measured discharge flow" annotation (Placement(transformation(extent={{120,-60},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Ensure positive flow" annotation (Placement(transformation(extent={{180,-30},{200,-10}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2( @@ -219,13 +219,13 @@ block Dampers final realFalse=0) "Convert boolean to real" annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul3 + Buildings.Controls.OBC.CDL.Reals.Multiply mul3 "Cold duct flow setpoint when in heating state" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{140,190},{160,210}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -235,19 +235,19 @@ block Dampers final y_reset=0) "Cooling damper position controller" annotation (Placement(transformation(extent={{220,190},{240,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{140,140},{160,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos + Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos "Output cooling damper position" annotation (Placement(transformation(extent={{280,20},{300,40}}))); Buildings.Controls.OBC.CDL.Logical.Not not3 "Not proven on" annotation (Placement(transformation(extent={{180,50},{200,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor1 "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{120,-180},{140,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaDam( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=kHeaMaxDam, final yMax=1, @@ -255,10 +255,10 @@ block Dampers final y_reset=0) "Heating damper position controller" annotation (Placement(transformation(extent={{200,-180},{220,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor1 "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{120,-220},{140,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos + Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos "Output heating damper position" annotation (Placement(transformation(extent={{280,-330},{300,-310}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -269,32 +269,32 @@ block Dampers final realFalse=1) "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{20,-310},{40,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{240,-290},{260,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 + Buildings.Controls.OBC.CDL.Reals.Line lin1 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-60,-210},{-40,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow setpoint" annotation (Placement(transformation(extent={{280,280},{300,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{20,190},{40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{20,150},{40,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{80,170},{100,190}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Overrides.mo index 87b93453380..69c45422b60 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Overrides.mo @@ -97,11 +97,11 @@ block Overrides "Software switches to override setpoints" final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{28,150},{48,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{62,190},{82,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Airflow setpoint after considering override" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{100,30},{120,50}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); @@ -127,12 +127,12 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5( @@ -146,7 +146,7 @@ block Overrides "Software switches to override setpoints" final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add up two inputs" annotation (Placement(transformation(extent={{-6,110},{14,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -174,13 +174,13 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add up inputs" annotation (Placement(transformation(extent={{20,-170},{40,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-210},{20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-210},{100,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/SystemRequests.mo index 353099a9c01..80b4a042791 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/SystemRequests.mo @@ -130,27 +130,27 @@ block SystemRequests iconTransformation(extent={{100,-200},{140,-160}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,370},{-60,390}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,330},{-60,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-160,-100},{-140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,280},{-60,300}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -161,18 +161,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,370},{-100,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -222,31 +222,31 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr7( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr7( final t=thrTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,180},{-60,200}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr8( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr8( final t=twoTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr9( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr9( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-180,-350},{-160,-330}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr10( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr10( final t=0.95, final h=looHys) "Check if heating loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); @@ -256,10 +256,10 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,-350},{40,-330}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-140,180},{-120,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); Buildings.Controls.OBC.CDL.Logical.And and6 @@ -317,14 +317,14 @@ protected Buildings.Controls.OBC.CDL.Logical.And and10 "Logical and" annotation (Placement(transformation(extent={{-100,-220},{-80,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr12( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr12( final t=0.15, final h=looHys) "Check if heating loop signal is greater than 0.15" annotation (Placement(transformation(extent={{-80,-430},{-60,-410}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold the true input" annotation (Placement(transformation(extent={{0,-430},{20,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.01, final h=looHys) "Check if the heating loop output is less than threshold" @@ -332,17 +332,17 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt6 "Heating fan request" annotation (Placement(transformation(extent={{80,-430},{100,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-80,-380},{-60,-360}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-160,-170},{-140,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr13( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr13( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/ActiveAirFlow.mo index e3fc726eb3d..52708aaf111 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/ActiveAirFlow.mo @@ -6,12 +6,12 @@ model ActiveAirFlow final VHeaMax_flow=0.4) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -20,7 +20,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Alarms.mo index 3b84b210b89..4c39caa1d67 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Alarms.mo @@ -7,17 +7,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -29,14 +29,14 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{0,10},{20,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse colDammSta( final width=0.5, final period=7500) "Cooling duct damper open and close status" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos1( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -49,7 +49,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Damper position" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaDammSta( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Dampers.mo index 5a3adb90d24..29255f5af23 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Dampers.mo @@ -7,29 +7,29 @@ model Dampers final VHeaMax_flow=0.06, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) "Discharge airflow rate" @@ -39,18 +39,18 @@ model Dampers final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup( final k=273.15 + 25) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.07) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Overrides.mo index d43e5c9af13..65e0a908025 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/Overrides.mo @@ -6,17 +6,17 @@ model Overrides "Validation of model that overrides control" final VCooMax_flow=0.9, final VHeaMax_flow=0.8) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDamPos( final duration=3600, final height=0.5, final offset=0.5) "Cooling damper position setpoint" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, startTime=1000) "Override flow setpoint" @@ -24,11 +24,11 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -36,16 +36,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDamPos( final duration=3600, final height=0.5, final offset=0.5) "Heating damper position setpoint" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -53,7 +53,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/SystemRequests.mo index 2b90f1684a1..68bd58194bf 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Subsequences/Validation/SystemRequests.mo @@ -7,7 +7,7 @@ model SystemRequests final looHys=0.01, final damPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-22},{80,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -15,30 +15,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,100},{0,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirRate( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDamPos( final duration=3000, final height=-0.7, final offset=0.7) "Cold-duct damper position" @@ -50,7 +50,7 @@ model SystemRequests annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final freqHz=1/7200, final offset=293.15) "Generate data for setpoint" @@ -66,13 +66,13 @@ model SystemRequests annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=0.9, final duration=3600, final startTime=3600) "Heating loop signal" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDamPos( final duration=3600, final height=0.7, startTime=3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Validation/Controller.mo index 91bce9fba44..69d3508c3e2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConDischargeSensor/Validation/Controller.mo @@ -17,13 +17,13 @@ model Controller final VAreMin_flow=0) "Dual duct unit controller" annotation (Placement(transformation(extent={{100,40},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -36,11 +36,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); @@ -49,7 +49,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -59,27 +59,27 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colSupAirTem( final height=2, final duration=43200, final offset=273.15 + 14) "Cold-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -88,11 +88,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveColDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveColDam( final height=2, final duration=5000, startTime=60000) "Override cold-duct damper position" @@ -100,7 +100,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); @@ -110,7 +110,7 @@ model Controller final shift=18800) "Cooling supply fan status" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveHotDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveHotDam( final height=2, final duration=5000, final startTime=60000) "Override hot-duct damper position" @@ -118,7 +118,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); @@ -127,13 +127,13 @@ model Controller final period=73200, final shift=18800) "Heating supply fan status" annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotSupAirTem( final height=2, final duration=43200, final offset=273.15 + 24) "Hot-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/ActiveAirFlow.mo index 0b9e624a08b..39b691a9737 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/ActiveAirFlow.mo @@ -67,7 +67,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{100,70},{120,90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Alarms.mo index 4a9550de010..c1816958e6f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Alarms.mo @@ -97,11 +97,11 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi annotation (Placement(transformation(extent={{240,-330},{280,-290}}), iconTransformation(extent={{100,-90},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,280},{-160,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,310},{-100,330}}))); @@ -109,16 +109,16 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,310},{-60,330}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,230},{-160,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,180},{-100,200}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,200},{-160,220}}))); @@ -143,11 +143,11 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,230},{100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,140},{-100,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -176,10 +176,10 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,190},{120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,20},{-160,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); @@ -190,7 +190,7 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); @@ -212,7 +212,7 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{60,-90},{80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-180,-130},{-160,-110}}))); @@ -230,11 +230,11 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{160,-90},{180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxFlo( final k=VHeaMax_flow) "Heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,-210},{-160,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); Buildings.Controls.OBC.CDL.Logical.Not not6 @@ -244,7 +244,7 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-190},{40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-80,-190},{-60,-170}}))); @@ -266,7 +266,7 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{60,-320},{80,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam1( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" @@ -285,7 +285,7 @@ block Alarms "Generate alarms of dual-duct terminal unit using mixing control wi final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{160,-320},{180,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow" annotation (Placement(transformation(extent={{-200,80},{-180,100}}))); Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel6( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Dampers.mo index 5b6546cefab..46759277692 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Dampers.mo @@ -156,41 +156,41 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,240},{-140,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cold duct airflow setpoint" annotation (Placement(transformation(extent={{80,230},{100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,260},{40,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,270},{-260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,270},{-200,290}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,210},{-260,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,160},{-140,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow setpoint" annotation (Placement(transformation(extent={{260,280},{280,300}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Cooing or heating state" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" @@ -198,24 +198,24 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.Not not1 "In deadband state" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Active cold duct airflow setpoint when it is in deadband state" annotation (Placement(transformation(extent={{20,100},{40,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 + Buildings.Controls.OBC.CDL.Reals.Line lin1 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-60,-210},{-40,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-200,-180},{-180,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-140,-180},{-120,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is less than room temperature" @@ -223,20 +223,20 @@ block Dampers Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate flow rate difference between minimum flow setpoint and the heating setpoint" annotation (Placement(transformation(extent={{120,-80},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Ensure positive flow" annotation (Placement(transformation(extent={{180,-50},{200,-30}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2( @@ -244,13 +244,13 @@ block Dampers final realFalse=0) "Convert boolean to real" annotation (Placement(transformation(extent={{-200,10},{-180,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul3 + Buildings.Controls.OBC.CDL.Reals.Multiply mul3 "Cold duct flow setpoint when in heating state" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{140,190},{160,210}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -260,19 +260,19 @@ block Dampers final y_reset=0) "Cooling damper position controller" annotation (Placement(transformation(extent={{220,190},{240,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{140,130},{160,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos + Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos "Output cooling damper position" annotation (Placement(transformation(extent={{280,20},{300,40}}))); Buildings.Controls.OBC.CDL.Logical.Not not3 "Not proven on" annotation (Placement(transformation(extent={{180,50},{200,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor1 "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{120,-140},{140,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -282,10 +282,10 @@ block Dampers final y_reset=0) "Heating damper position controller" annotation (Placement(transformation(extent={{200,-140},{220,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor1 "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{120,-210},{140,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos + Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos "Output heating damper position" annotation (Placement(transformation(extent={{280,-330},{300,-310}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -296,18 +296,18 @@ block Dampers final realFalse=1) "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{20,-310},{40,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Ensure heating damper is closed when it is in cooling or deadband state" annotation (Placement(transformation(extent={{240,-290},{260,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{20,190},{40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{20,150},{40,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{80,170},{100,190}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Overrides.mo index 10fa0e460a2..0d31fbf1fe1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Overrides.mo @@ -97,11 +97,11 @@ block Overrides "Software switches to override setpoints" final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{28,150},{48,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{62,190},{82,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Airflow setpoint after considering override" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{100,30},{120,50}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); @@ -127,12 +127,12 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5( @@ -146,7 +146,7 @@ block Overrides "Software switches to override setpoints" final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add up two inputs" annotation (Placement(transformation(extent={{-6,110},{14,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -174,13 +174,13 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add up inputs" annotation (Placement(transformation(extent={{20,-170},{40,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-210},{20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-210},{100,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/SystemRequests.mo index 87c255f6bc0..633a1d356d6 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/SystemRequests.mo @@ -144,27 +144,27 @@ block SystemRequests "Output system requests for dual-duct unit using mixing con iconTransformation(extent={{100,-200},{140,-160}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,330},{-60,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,290},{-60,310}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,240},{-60,260}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -175,18 +175,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,290},{-100,310}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -236,35 +236,35 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr7( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr7( final t=thrTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr8( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr8( final t=twoTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr9( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr9( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-180,-340},{-160,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr10( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr10( final t=0.95, final h=looHys) "Check if heating loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr11( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr11( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -275,18 +275,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,-340},{40,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-160,-240},{-140,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-160,-280},{-140,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); Buildings.Controls.OBC.CDL.Logical.And and6 @@ -341,23 +341,23 @@ protected final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,-320},{-60,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu2(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,-240},{-60,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu3(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,-280},{-60,-260}}))); Buildings.Controls.OBC.CDL.Logical.And and10 "Logical and" annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr12( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr12( final t=0.15, final h=looHys) "Check if heating loop signal is greater than 0.15" annotation (Placement(transformation(extent={{-80,-400},{-60,-380}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold the true input" annotation (Placement(transformation(extent={{0,-400},{20,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.01, final h=looHys) "Check if the heating loop output is less than threshold" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/ActiveAirFlow.mo index 4f8a0e83e7f..7b0f443d1eb 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/ActiveAirFlow.mo @@ -6,12 +6,12 @@ model ActiveAirFlow final VHeaMax_flow=0.4) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -20,7 +20,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Alarms.mo index 862131e8c1e..8e721693a1d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Alarms.mo @@ -8,17 +8,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDisAir( final duration=7200, final offset=0.1, final height=0.3) "Cooling duct discharge airflow rate" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -30,14 +30,14 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{0,10},{20,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse colDammSta( final width=0.5, final period=7500) "Cooling duct damper open and close status" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos1( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -50,7 +50,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean input to real output" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Damper position" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaDammSta( @@ -58,7 +58,7 @@ model Alarms "Validation of model that generates alarms" final period=7500) "Heating duct damper open and close status" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDisAir( final duration=7200, final offset=0.1, final height=0.3) "Heating duct discharge airflow rate" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Dampers.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Dampers.mo index 05ab0892948..831f7e6f705 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Dampers.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Dampers.mo @@ -7,29 +7,29 @@ model Dampers final VHeaMax_flow=0.06, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) @@ -40,18 +40,18 @@ model Dampers final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup( final k=273.15 + 25) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.07) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); @@ -61,7 +61,7 @@ model Dampers final shift=5000) "Hot air handling unit status" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Overrides.mo index 6bdbb557c4d..495c1ed8422 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/Overrides.mo @@ -6,17 +6,17 @@ model Overrides "Validation of model that overrides control" final VCooMax_flow=0.9, final VHeaMax_flow=0.8) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDamPos( final duration=3600, final height=0.5, final offset=0.5) "Cooling damper position setpoint" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, startTime=1000) "Override flow setpoint" @@ -24,11 +24,11 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -36,16 +36,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDamPos( final duration=3600, final height=0.5, final offset=0.5) "Heating damper position setpoint" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -53,7 +53,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/SystemRequests.mo index c397e709e64..df82c772f7b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Subsequences/Validation/SystemRequests.mo @@ -7,7 +7,7 @@ model SystemRequests final looHys=0.01, final damPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-22},{80,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -15,30 +15,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,100},{0,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Cold-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDamPos( final duration=3000, final height=-0.7, final offset=0.7) "Cold-duct damper position" @@ -50,7 +50,7 @@ model SystemRequests annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final freqHz=1/7200, final offset=293.15) "Generate data for setpoint" @@ -66,25 +66,25 @@ model SystemRequests annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=0.9, final duration=3600, final startTime=3600) "Heating loop signal" annotation (Placement(transformation(extent={{-20,-100},{0,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Hot-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-20,-140},{0,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDamPos( final duration=3600, final height=0.7, startTime=3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Validation/Controller.mo index 1fed38e793a..9c32412855b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctMixConInletSensor/Validation/Controller.mo @@ -17,13 +17,13 @@ model Controller final VAreMin_flow=0) "Dual duct unit controller" annotation (Placement(transformation(extent={{100,40},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -36,11 +36,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); @@ -49,7 +49,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -59,27 +59,27 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colSupAirTem( final height=2, final duration=43200, final offset=273.15 + 14) "Cold-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -88,11 +88,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveColDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveColDam( final height=2, final duration=5000, startTime=60000) "Override cold-duct damper position" @@ -100,7 +100,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); @@ -109,7 +109,7 @@ model Controller final period=73200, final shift=18800) "Cooling supply fan status" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveHotDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveHotDam( final height=2, final duration=5000, final startTime=60000) "Override hot-duct damper position" @@ -117,7 +117,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); @@ -126,18 +126,18 @@ model Controller final period=73200, final shift=18800) "Heating supply fan status" annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotSupAirTem( final height=2, final duration=43200, final offset=273.15 + 24) "Hot-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/ActiveAirFlow.mo index 2ddb0f3561b..e8c06760ef2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/ActiveAirFlow.mo @@ -67,7 +67,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{100,70},{120,90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Alarms.mo index 4612747cef2..ab6cefff068 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Alarms.mo @@ -116,11 +116,11 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" annotation (Placement(transformation(extent={{240,-440},{280,-400}}), iconTransformation(extent={{100,-190},{140,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,380},{-160,400}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,410},{-100,430}}))); @@ -128,16 +128,16 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,410},{-60,430}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,330},{-160,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,280},{-100,300}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,300},{-160,320}}))); @@ -162,11 +162,11 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,330},{100,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,240},{-100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,240},{-60,260}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -195,10 +195,10 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,290},{120,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) if have_duaSen "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) if have_duaSen "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); @@ -209,7 +209,7 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final delayTime=fanOffTim) if have_duaSen "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) if have_duaSen "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); @@ -232,7 +232,7 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final delayTime=leaFloTim) if have_duaSen "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-200},{40,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); @@ -251,11 +251,11 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final integerTrue=4) if have_duaSen "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-200},{160,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxFlo( final k=VHeaMax_flow) if have_duaSen "Heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,-320},{-180,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(final k=0.1) if have_duaSen "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,-320},{-140,-300}}))); @@ -266,7 +266,7 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final delayTime=fanOffTim) if have_duaSen "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-300},{40,-280}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=floHys) if have_duaSen "Check if measured airflow is greater than threshold" @@ -290,7 +290,7 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final delayTime=leaFloTim) if have_duaSen "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{20,-430},{40,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam1( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" @@ -310,16 +310,16 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final integerTrue=4) if have_duaSen "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-430},{160,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo1( final k=VCooMax_flow) if not have_duaSen "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-180,140},{-160,160}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=0.1) if not have_duaSen "Percentage of the setpoint" annotation (Placement(transformation(extent={{-140,140},{-120,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre3( + Buildings.Controls.OBC.CDL.Reals.Greater gre3( final h=floHys) if not have_duaSen "Check if measured airflow is greater than threshold" @@ -371,7 +371,7 @@ block Alarms "Generate alarms of snap-acting controlled dual-duct terminal unit" final integerTrue=4) if not have_duaSen "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,20},{160,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 if have_duaSen + Buildings.Controls.OBC.CDL.Reals.Add add2 if have_duaSen "Total discharge airflow" annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel8( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersDualSensors.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersDualSensors.mo index 1ceb90b3494..d7bfad56a61 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersDualSensors.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersDualSensors.mo @@ -162,10 +162,10 @@ block DampersDualSensors Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,240},{-140,260}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -175,67 +175,67 @@ block DampersDualSensors final y_reset=0) "Cooling damper position controller" annotation (Placement(transformation(extent={{280,190},{300,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cold duct airflow setpoint" annotation (Placement(transformation(extent={{100,230},{120,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{40,260},{60,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,270},{-260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,270},{-200,290}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,210},{-260,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,160},{-140,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos + Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos "Output cooling damper position" annotation (Placement(transformation(extent={{280,20},{300,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{240,120},{260,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{240,190},{260,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,-170},{-260,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-280,-230},{-260,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,-170},{-200,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 + Buildings.Controls.OBC.CDL.Reals.Line lin1 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-160,-200},{-140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,-130},{-140,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is less than room temperature" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 @@ -261,12 +261,12 @@ block DampersDualSensors final samplePeriod=samplePeriod) "Sample the cooling loop output" annotation (Placement(transformation(extent={{-220,40},{-200,60}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-180,-50},{-160,-30}}))); @@ -276,20 +276,20 @@ block DampersDualSensors Buildings.Controls.OBC.CDL.Logical.Latch lat1 "Changing from heating state to deadband" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Cold duct airflow setpoint when it is in deadband state" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer2( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Hot duct airflow setpoint when it is in deadband state" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Output active hot duct airflow setpoint" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -299,16 +299,16 @@ block DampersDualSensors final y_reset=0) "Heating damper position controller" annotation (Placement(transformation(extent={{280,-110},{300,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos + Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos "Output heating damper position" annotation (Placement(transformation(extent={{280,-280},{300,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor1 "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{240,-180},{260,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor1 + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor1 "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{240,-110},{260,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{80,0},{100,20}}))); @@ -317,7 +317,7 @@ block DampersDualSensors Buildings.Controls.OBC.CDL.Logical.Not not3 "Not proven on" annotation (Placement(transformation(extent={{180,-10},{200,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Make sure heating damper is closed when it is in cooling state" annotation (Placement(transformation(extent={{180,-80},{200,-60}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( @@ -325,7 +325,7 @@ block DampersDualSensors final realFalse=1) "Ensure heating damper closed when it is in cooling state" annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Make sure heating damper is closed when it is in cooling state" annotation (Placement(transformation(extent={{220,-250},{240,-230}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( @@ -333,24 +333,24 @@ block DampersDualSensors final realFalse=1) "Ensure cooling damper closed when it is in heating state" annotation (Placement(transformation(extent={{40,140},{60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul2 + Buildings.Controls.OBC.CDL.Reals.Multiply mul2 "Make sure cooling damper is closed when it is in heating state" annotation (Placement(transformation(extent={{160,220},{180,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul3 + Buildings.Controls.OBC.CDL.Reals.Multiply mul3 "Make sure cooling damper is closed when it is in heating state" annotation (Placement(transformation(extent={{180,50},{200,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Total discharge airflow setpoint" annotation (Placement(transformation(extent={{260,280},{280,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{140,140},{160,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{140,180},{160,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{180,160},{200,180}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersSingleSensors.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersSingleSensors.mo index 243d8a98e1b..3f3d11e1029 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersSingleSensors.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/DampersSingleSensors.mo @@ -122,10 +122,10 @@ block DampersSingleSensors annotation (Placement(transformation(extent={{320,-220},{360,-180}}), iconTransformation(extent={{100,-200},{140,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,200},{-140,220}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -135,39 +135,39 @@ block DampersSingleSensors final y_reset=0) "Cooling damper position controller" annotation (Placement(transformation(extent={{110,90},{130,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,230},{-260,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,230},{-200,250}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,170},{-260,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch damPos "Output damper position" + Buildings.Controls.OBC.CDL.Reals.Switch damPos "Output damper position" annotation (Placement(transformation(extent={{160,0},{180,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{20,90},{40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,80},{-260,100}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-280,20},{-260,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,80},{-200,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 + Buildings.Controls.OBC.CDL.Reals.Line lin1 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-160,50},{-140,70}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 @@ -193,12 +193,12 @@ block DampersSingleSensors final samplePeriod=samplePeriod) "Sample the cooling loop output" annotation (Placement(transformation(extent={{-220,-140},{-200,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-160,-140},{-140,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-160,-250},{-140,-230}}))); @@ -208,30 +208,30 @@ block DampersSingleSensors Buildings.Controls.OBC.CDL.Logical.Latch lat1 "Changing from heating state to deadband" annotation (Placement(transformation(extent={{-40,-230},{-20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooFloSet + Buildings.Controls.OBC.CDL.Reals.Switch cooFloSet "Flow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{-40,170},{-20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaFloSet + Buildings.Controls.OBC.CDL.Reals.Switch heaFloSet "Flow setpoint when it is in heating state" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 "Check if any air handler is proven on" annotation (Placement(transformation(extent={{80,0},{100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{80,-170},{100,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or3 "Check if it is in cooling state or in deadband that switched from cooling state" annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos "Cooling damper position" + Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos "Cooling damper position" annotation (Placement(transformation(extent={{280,-110},{300,-90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( final realTrue=0, final realFalse=1) "Ensure cooling damper closed when the cooling air handler is not proven on" annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Make sure cooling damper is closed when the cooling air handler is not proven on" annotation (Placement(transformation(extent={{220,-80},{240,-60}}))); Buildings.Controls.OBC.CDL.Logical.Or or4 @@ -242,10 +242,10 @@ block DampersSingleSensors final realFalse=1) "Ensure heating damper closed when the heating air handler is not proven on" annotation (Placement(transformation(extent={{80,-270},{100,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul2 + Buildings.Controls.OBC.CDL.Reals.Multiply mul2 "Make sure heating damper is closed when the heating air handler is not proven on" annotation (Placement(transformation(extent={{220,-180},{240,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos + Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos "Heating damper position" annotation (Placement(transformation(extent={{280,-210},{300,-190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -254,15 +254,15 @@ block DampersSingleSensors Buildings.Controls.OBC.CDL.Logical.And and4 "Check if heating damper is opening" annotation (Placement(transformation(extent={{280,-150},{300,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Overrides.mo index 162ef726b47..5f4762d9031 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Overrides.mo @@ -95,11 +95,11 @@ block Overrides "Software switches to override setpoints" final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-40,130},{-20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{28,150},{48,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{62,190},{82,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Airflow setpoint after considering override" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{100,30},{120,50}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{-20,50},{0,70}}))); @@ -125,12 +125,12 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5( @@ -144,7 +144,7 @@ block Overrides "Software switches to override setpoints" final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add up two inputs" annotation (Placement(transformation(extent={{-6,110},{14,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 @@ -172,13 +172,13 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add up inputs" annotation (Placement(transformation(extent={{20,-170},{40,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,-210},{20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,-210},{100,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/SystemRequests.mo index 78d0f4f0f83..88374ab8c02 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/SystemRequests.mo @@ -156,27 +156,27 @@ block SystemRequests "Output system requests for VAV terminal unit with reheat" iconTransformation(extent={{100,-200},{140,-160}}))); protected - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,330},{-60,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-80,290},{-60,310}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,240},{-60,260}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -187,18 +187,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-120,290},{-100,310}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -248,35 +248,35 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr7( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr7( final t=thrTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr8( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr8( final t=twoTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr9( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr9( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-180,-340},{-160,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr10( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr10( final t=0.95, final h=looHys) "Check if heating loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr11( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr11( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -287,18 +287,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5 "Convert boolean to integer" annotation (Placement(transformation(extent={{20,-340},{40,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-160,-240},{-140,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-160,-280},{-140,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate difference between zone temperature and heating setpoint" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); Buildings.Controls.OBC.CDL.Logical.And and6 @@ -353,23 +353,23 @@ protected final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-80,-320},{-60,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu2(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-80,-240},{-60,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu3(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-80,-280},{-60,-260}}))); Buildings.Controls.OBC.CDL.Logical.And and10 "Logical and" annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr12( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr12( final t=0.15, final h=looHys) "Check if heating loop signal is greater than 0.15" annotation (Placement(transformation(extent={{-80,-400},{-60,-380}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold the true input" annotation (Placement(transformation(extent={{0,-400},{20,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=0.01, final h=looHys) "Check if the heating loop output is less than threshold" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/ActiveAirFlow.mo index cc379d945d4..c2b5b39bbfb 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/ActiveAirFlow.mo @@ -6,12 +6,12 @@ model ActiveAirFlow final VHeaMax_flow=0.4) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -20,7 +20,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Alarms.mo index f4cc246f3b0..7d6ca262bf3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Alarms.mo @@ -17,17 +17,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,-60},{100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDisAir( final duration=7200, final offset=0.1, final height=0.3) "Cooling duct discharge airflow rate" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -39,14 +39,14 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse colDammSta( final width=0.5, final period=7500) "Cooling duct damper open and close status" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos1( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -59,7 +59,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Damper position" annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaDammSta( @@ -67,7 +67,7 @@ model Alarms "Validation of model that generates alarms" final period=7500) "Heating duct damper open and close status" annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDisAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDisAir( final duration=7200, final offset=0.1, final height=0.3) "Heating duct discharge airflow rate" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersDualSensors.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersDualSensors.mo index 238cb1fc1e0..a80410dbec2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersDualSensors.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersDualSensors.mo @@ -8,29 +8,29 @@ model DampersDualSensors final kDam=1, final samplePeriod=120) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) @@ -41,18 +41,18 @@ model DampersDualSensors final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup( final k=273.15 + 25) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.07) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); @@ -62,7 +62,7 @@ model DampersDualSensors final shift=5000) "Hot air handling unit status" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDuc( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDuc( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersSingleSensors.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersSingleSensors.mo index d27d664a53c..35cd6f2c34d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersSingleSensors.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/DampersSingleSensors.mo @@ -8,21 +8,21 @@ model DampersSingleSensors final kDam=1, final samplePeriod=120) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis( final offset=0.015, final amplitude=0.002, final freqHz=1/3600) "Discharge airflow rate" @@ -32,14 +32,14 @@ model DampersSingleSensors final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.07) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Overrides.mo index 6bc02eaaf7d..099b3f9098e 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/Overrides.mo @@ -6,17 +6,17 @@ model Overrides "Validation of model that overrides control" final VCooMax_flow=0.9, final VHeaMax_flow=0.8) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp cooDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDamPos( final duration=3600, final height=0.5, final offset=0.5) "Cooling damper position setpoint" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, startTime=1000) "Override flow setpoint" @@ -24,11 +24,11 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -36,16 +36,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDamPos( final duration=3600, final height=0.5, final offset=0.5) "Heating damper position setpoint" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, startTime=1000) "Override damper position" @@ -53,7 +53,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/SystemRequests.mo index b37dc23174b..0d7a64e585a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Subsequences/Validation/SystemRequests.mo @@ -8,7 +8,7 @@ model SystemRequests final looHys=0.01, final damPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-20},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -16,30 +16,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,120},{0,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Cold-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-20,30},{0,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDamPos( final duration=3000, final height=-0.7, final offset=0.7) "Cold-duct damper position" @@ -51,7 +51,7 @@ model SystemRequests annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-20,150},{0,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final freqHz=1/7200, final offset=293.15) "Generate data for setpoint" @@ -67,34 +67,34 @@ model SystemRequests annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=0.9, final duration=3600, final startTime=3600) "Heating loop signal" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirSet( final height=0.9, final duration=7200, final offset=0.1) "Hot-duct airflow rate setpoint" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDucAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirRate( final duration=7200, final offset=0.1, final height=0.3) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-20,-130},{0,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDamPos( final duration=3600, final height=0.7, startTime=3600) "Hot-duct damper position" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(final t=0.01) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(final t=0.01) "Check if damper is open" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1(final t=0.01) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1(final t=0.01) "Check if damper is open" annotation (Placement(transformation(extent={{-20,-170},{0,-150}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Validation/Controller.mo index 80223cea7ef..31faa3305a0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/DualDuctSnapActing/Validation/Controller.mo @@ -18,13 +18,13 @@ model Controller final VAreMin_flow=0) "Dual duct unit controller" annotation (Placement(transformation(extent={{100,40},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -37,11 +37,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,190},{-60,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); @@ -50,7 +50,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -60,27 +60,27 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp colSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colSupAirTem( final height=2, final duration=43200, final offset=273.15 + 14) "Cold-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VColDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Cold duct airflow rate" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -89,11 +89,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveColDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveColDam( final height=2, final duration=5000, startTime=60000) "Override cold-duct damper position" @@ -101,7 +101,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-150},{-60,-130}}))); @@ -110,7 +110,7 @@ model Controller final period=73200, final shift=18800) "Cooling supply fan status" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveHotDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveHotDam( final height=2, final duration=5000, final startTime=60000) "Override hot-duct damper position" @@ -118,7 +118,7 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-180},{-20,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); @@ -127,18 +127,18 @@ model Controller final period=73200, final shift=18800) "Heating supply fan status" annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VHotDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDis_flow( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Hot duct airflow rate" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp hotSupAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotSupAirTem( final height=2, final duration=43200, final offset=273.15 + 24) "Hot-duct supply air temperature from air handling unit" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set( final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/ActiveAirFlow.mo index 428a91c5e80..eb2e8d4f502 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/ActiveAirFlow.mo @@ -55,7 +55,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{20,0},{40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); Buildings.Controls.OBC.CDL.Integers.Equal ifOcc diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Alarms.mo index 696a4d2ee7e..6bb5f5f34f2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Alarms.mo @@ -149,11 +149,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan annotation (Placement(transformation(extent={{240,-390},{280,-350}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,370},{-160,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,400},{-100,420}}))); @@ -161,16 +161,16 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,400},{-60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,320},{-160,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,270},{-100,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); @@ -194,11 +194,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,320},{100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,230},{-60,250}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -227,11 +227,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,280},{120,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,170},{-180,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); @@ -242,7 +242,7 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{0,190},{20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); @@ -264,7 +264,7 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-120},{-180,-100}}))); @@ -281,19 +281,19 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-320},{-100,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-17) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-360},{-160,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les2( + Buildings.Controls.OBC.CDL.Reals.Less les2( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-390},{-100,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=-8) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-430},{-160,-410}}))); @@ -344,11 +344,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan if have_hotWatCoi "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,-430},{120,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt3( final k=hotWatRes) if have_hotWatCoi "Importance multiplier for hot water reset control" annotation (Placement(transformation(extent={{-120,-460},{-100,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 if have_hotWatCoi "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-460},{-60,-440}}))); @@ -363,16 +363,16 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with constan final delayTime=valCloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloVal( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloVal( final t=valPosHys, final h=0.5*valPosHys) "Check if valve position is near zero" annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=3) "AHU supply temperature plus 3 degree" annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=dTHys) "Discharge temperature greate than AHU supply temperature by a threshold" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/DamperValves.mo index d35449704f5..29de162a19a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/DamperValves.mo @@ -178,55 +178,55 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{100,160},{120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,190},{40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,200},{-260,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,200},{-200,220}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-220,140},{-200,160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-260,-140},{-240,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-260,-30},{-240,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-260,-100},{-240,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-180,-100},{-160,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -237,7 +237,7 @@ block DamperValves u_m(final unit="K", displayUnit="degC")) "Hot water valve controller" annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Hot water valve position, close the valve when the zone is not in heating state" annotation (Placement(transformation(extent={{100,-140},{120,-120}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant unOcc( @@ -247,19 +247,19 @@ block DamperValves Buildings.Controls.OBC.CDL.Integers.Equal isUno "Output true if the operation mode is unoccupied" annotation (Placement(transformation(extent={{100,-200},{120,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Hot water valve position" annotation (Placement(transformation(extent={{280,-120},{300,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow(final k= VCooMax_flow) "Nominal volume flow rate" annotation (Placement(transformation(extent={{160,110},{180,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{220,140},{240,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{220,80},{240,100}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -269,11 +269,11 @@ block DamperValves final y_reset=0) "Damper position controller" annotation (Placement(transformation(extent={{260,140},{280,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Air damper position" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Air damper position" annotation (Placement(transformation(extent={{280,-10},{300,10}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Not in unoccupied mode" annotation (Placement(transformation(extent={{180,30},{200,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if the discharge airflow rate is less than minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-260,-310},{-240,-290}}))); @@ -283,10 +283,10 @@ block DamperValves annotation (Placement(transformation(extent={{-200,-310},{-180,-290}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold fan On status" annotation (Placement(transformation(extent={{-100,-310},{-80,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=1.1) "Gain factor" annotation (Placement(transformation(extent={{-260,-380},{-240,-360}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Check if the discharge airflow rate is greater than minimum outdoor airflow setpoint by 10%" annotation (Placement(transformation(extent={{-200,-350},{-180,-330}}))); Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( @@ -334,11 +334,11 @@ block DamperValves final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-20,270},{0,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{60,290},{80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{100,330},{120,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{160,240},{180,260}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Overrides.mo index 6ea4eb3891e..6ce27b0bf64 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Overrides.mo @@ -65,15 +65,15 @@ block Overrides "Software switches to override setpoints" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam( final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,110},{40,130}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,70},{100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Valve position setpoint after considering override" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo index 5e1aa0c03e4..d28e4337955 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/SystemRequests.mo @@ -151,34 +151,34 @@ block SystemRequests "Output system requests for parallel fan-powered terminal u iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -189,18 +189,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,210},{-80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -251,20 +251,20 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=thrTDis_1) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=thrTDis_2) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); @@ -292,7 +292,7 @@ protected final delayTime=durTimDisAir) if have_hotWatCoi "Check if it is more than threshold time" annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=valPosHys) if have_hotWatCoi "Check if valve position is greater than 0.95" @@ -301,7 +301,7 @@ protected if have_hotWatCoi "Convert boolean to integer" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=0.95, final h=0.85) if have_hotWatCoi "Check if valve position is greater than 0.95" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/ActiveAirFlow.mo index feb8c3d2e46..c83ebf25041 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/ActiveAirFlow.mo @@ -5,12 +5,12 @@ model ActiveAirFlow final VCooMax_flow=0.5) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -19,7 +19,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Alarms.mo index 0847d7abc8e..8540a72299d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Alarms.mo @@ -9,17 +9,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -31,7 +31,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( @@ -42,7 +42,7 @@ model Alarms "Validation of model that generates alarms" final width=0.9, final period=7500) "Hot water plant status" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" @@ -57,17 +57,17 @@ model Alarms "Validation of model that generates alarms" final period=7500, shift=1000) "Terminal fan status" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, final startTime=3600) "Valve position" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/DamperValves.mo index 5ac0002310e..d1af0da27cf 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/DamperValves.mo @@ -7,20 +7,20 @@ model DamperValves final VCooMax_flow=0.09, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); @@ -29,43 +29,43 @@ model DamperValves final period=7200) "Cold air handling unit status" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.01, final height=0.06) "Discharge airflow rate" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/3600) "Supply air temperature" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSet( final k=273.15 + 20) "Zone heating setpoint" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( final offset=273.15 + 13, final amplitude=1.2, final freqHz=1/3600) "Measured discharge air temperature" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOAMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOAMin_flow( final k=0.005) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=3, final duration=90000) "Operation mode" @@ -73,14 +73,14 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, final startTime=1000) "Override flow setpoint" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Overrides.mo index 436613f6c42..7557b5b3c78 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/Overrides.mo @@ -4,12 +4,12 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanCVF.Subsequences.Overrides ove "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3600, final height=0.5, final offset=0.5) "Damper position setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -17,16 +17,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaValPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaValPos( final duration=3600, final height=0.5, final offset=0.5) "Heating valve position" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -34,7 +34,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/SystemRequests.mo index 5a2786a321f..b639174bf5f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Subsequences/Validation/SystemRequests.mo @@ -9,7 +9,7 @@ model SystemRequests final damPosHys=0.01, final valPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -17,30 +17,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3000, final height=-0.7, final offset=0.7) "Damper position" @@ -50,17 +50,17 @@ model SystemRequests final period=7200) "After suppression" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Validation/Controller.mo index 19b6b78b126..964f49922e9 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanCVF/Validation/Controller.mo @@ -19,13 +19,13 @@ model Controller final VAreMin_flow=0) "Paralle-fan powered unit controller" annotation (Placement(transformation(extent={{100,70},{120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -38,11 +38,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); @@ -51,7 +51,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -61,21 +61,21 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Parallel fan flow" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -84,11 +84,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -96,11 +96,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveTerFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveTerFan( final height=2, final duration=5000, final startTime=60000) "Override terminal fan control" @@ -108,11 +108,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/28800) "Supply air temperature from air handling unit" @@ -139,16 +139,16 @@ model Controller final period=7500) "AHU supply fan status" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( final offset=1.3, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo index 66456d63807..835a99d90d3 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Controller.mo @@ -508,7 +508,7 @@ block Controller Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" annotation (Placement(transformation(extent={{160,210},{180,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Paralle fan airflow setpoint" annotation (Placement(transformation(extent={{200,230},{220,250}}))); Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.Title24.Setpoints minFlo( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/ActiveAirFlow.mo index f827b000eff..6dc82c5b156 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/ActiveAirFlow.mo @@ -56,7 +56,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{20,0},{40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); Buildings.Controls.OBC.CDL.Integers.Equal ifOcc diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Alarms.mo index 52d1bacb098..a19e413c620 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Alarms.mo @@ -149,11 +149,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl annotation (Placement(transformation(extent={{240,-390},{280,-350}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,370},{-160,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,400},{-100,420}}))); @@ -161,16 +161,16 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,400},{-60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,320},{-160,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,270},{-100,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); @@ -194,11 +194,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,320},{100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,230},{-60,250}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -227,11 +227,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,280},{120,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,170},{-180,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); @@ -242,7 +242,7 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{0,190},{20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); @@ -264,7 +264,7 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-120},{-180,-100}}))); @@ -281,19 +281,19 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-320},{-100,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-17) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-360},{-160,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les2( + Buildings.Controls.OBC.CDL.Reals.Less les2( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-390},{-100,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1(final p=-8.3) + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1(final p=-8.3) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-430},{-160,-410}}))); @@ -344,11 +344,11 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl if have_hotWatCoi "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,-430},{120,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt3( final k=hotWatRes) if have_hotWatCoi "Importance multiplier for hot water reset control" annotation (Placement(transformation(extent={{-120,-460},{-100,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 if have_hotWatCoi "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-460},{-60,-440}}))); @@ -363,16 +363,16 @@ block Alarms "Generate alarms of parallel fan-powered terminal unit with variabl final delayTime=valCloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloVal( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloVal( final t=valPosHys, final h=0.5*valPosHys) "Check if valve position is near zero" annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=3) "AHU supply temperature plus 3 degree" annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=dTHys) "Discharge temperature greate than AHU supply temperature by a threshold" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo index 77e033bd19d..f89bf52ea66 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/DamperValves.mo @@ -189,47 +189,47 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-80,250},{-60,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-180,300},{-160,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{60,290},{80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{0,320},{20,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-300,330},{-280,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-240,330},{-220,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-240,270},{-220,290}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-200,190},{-180,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-240,190},{-220,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Hot water valve position" annotation (Placement(transformation(extent={{300,10},{320,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow(final k= VCooMax_flow) "Nominal volume flow rate" annotation (Placement(transformation(extent={{60,240},{80,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{200,270},{220,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{200,210},{220,230}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -239,25 +239,25 @@ block DamperValves final y_reset=0) "Damper position controller" annotation (Placement(transformation(extent={{240,270},{260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Air damper position" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Air damper position" annotation (Placement(transformation(extent={{300,120},{320,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-280,30},{-260,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-280,-10},{-260,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -268,26 +268,26 @@ block DamperValves u_m(final unit="K", displayUnit="degC")) "Hot water valve controller" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3(final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,100},{-260,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Hot water valve position, close the valve when the zone is not in heating state" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occ( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "Constant signal for occupied mode" annotation (Placement(transformation(extent={{-280,-190},{-260,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFan( final k=minRat) "Minimum fan rate" annotation (Placement(transformation(extent={{-280,-80},{-260,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "Gain factor" annotation (Placement(transformation(extent={{-240,-80},{-220,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Minimum outdoor airflow setpoint minus the half of minimum fan rate" annotation (Placement(transformation(extent={{-180,-60},{-160,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if primary discharge airflow rate is below threshold" annotation (Placement(transformation(extent={{-60,-100},{-40,-80}}))); @@ -300,62 +300,62 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and1 "It is in occupied mode and the zone is in cooling state" annotation (Placement(transformation(extent={{-60,-220},{-40,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if primary discharge airflow rate is above threshold" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Parallel fan flow rate setpoint" annotation (Placement(transformation(extent={{260,-220},{280,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Fan flow rate setpoint" annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 "Ensure positive value" + Buildings.Controls.OBC.CDL.Reals.Max max1 "Ensure positive value" annotation (Placement(transformation(extent={{100,-140},{120,-120}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean to real" annotation (Placement(transformation(extent={{100,-100},{120,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Parallel fan rate when the zone state is cooling" annotation (Placement(transformation(extent={{200,-120},{220,-100}}))); Buildings.Controls.OBC.CDL.Logical.Or cooHea "Cooling or heating state" annotation (Placement(transformation(extent={{-60,-310},{-40,-290}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "In deadband state" annotation (Placement(transformation(extent={{40,-310},{60,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "Parallel fan flow rate setpoint when the zone is in deadband state" annotation (Placement(transformation(extent={{220,-310},{240,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=floHys) "Check if primary discharge airflow rate setpoint is below threshold" annotation (Placement(transformation(extent={{-60,-270},{-40,-250}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" annotation (Placement(transformation(extent={{40,-270},{60,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Fan rate when zone is in deadband state" annotation (Placement(transformation(extent={{160,-280},{180,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Line heaFanRat + Buildings.Controls.OBC.CDL.Reals.Line heaFanRat "Parallel fan airflow setpoint when zone is in heating state" annotation (Placement(transformation(extent={{40,-420},{60,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Ensure the fan flow rate setpoint is greater than minimum value" annotation (Placement(transformation(extent={{-180,-390},{-160,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal1( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-60,-390},{-40,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal2( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-180,-450},{-160,-430}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxFan( final k=maxRat) "Maximum fan rate" annotation (Placement(transformation(extent={{-60,-450},{-40,-430}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2 "Convert boolean to real" annotation (Placement(transformation(extent={{40,-360},{60,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul2 + Buildings.Controls.OBC.CDL.Reals.Multiply mul2 "Ensure zero rate when it is not in heating state" annotation (Placement(transformation(extent={{160,-380},{180,-360}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant uno( @@ -365,13 +365,13 @@ block DamperValves Buildings.Controls.OBC.CDL.Integers.Equal isUno "Output true if the operation mode is unoccupied" annotation (Placement(transformation(extent={{-180,-510},{-160,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 + Buildings.Controls.OBC.CDL.Reals.Switch swi7 "Parallel fan flow rate setpoint" annotation (Placement(transformation(extent={{320,-250},{340,-230}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Not in unoccupied mode" annotation (Placement(transformation(extent={{200,150},{220,170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=floHys, final h=floHys/2) "Terminal fan command on status" @@ -409,11 +409,11 @@ block DamperValves final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-80,410},{-60,430}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{0,430},{20,450}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{40,470},{60,490}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{100,380},{120,400}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Overrides.mo index a43795d7dc5..d4a67916d68 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Overrides.mo @@ -65,15 +65,15 @@ block Overrides "Software switches to override setpoints" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam( final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,120},{40,140}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Valve position setpoint after considering override" annotation (Placement(transformation(extent={{80,0},{100,20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo index 1d02b142803..39efbdf54c0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/SystemRequests.mo @@ -152,34 +152,34 @@ block SystemRequests iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -190,18 +190,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,210},{-80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -252,20 +252,20 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=thrTDis_1) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=thrTDis_2) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); @@ -293,7 +293,7 @@ protected final delayTime=durTimDisAir) if have_hotWatCoi "Check if it is more than threshold time" annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=valPosHys) if have_hotWatCoi "Check if valve position is greater than 0.95" @@ -302,7 +302,7 @@ protected if have_hotWatCoi "Convert boolean to integer" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=0.95, final h=0.85) if have_hotWatCoi "Check if valve position is greater than 0.95" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/ActiveAirFlow.mo index c79ceb34b8d..fcbd3f06e1a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/ActiveAirFlow.mo @@ -5,12 +5,12 @@ model ActiveAirFlow final VCooMax_flow=0.5) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -19,7 +19,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Alarms.mo index d9844483be7..8414b6b0908 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Alarms.mo @@ -9,17 +9,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -31,7 +31,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( @@ -42,7 +42,7 @@ model Alarms "Validation of model that generates alarms" final width=0.9, final period=7500) "Hot water plant status" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" @@ -57,17 +57,17 @@ model Alarms "Validation of model that generates alarms" final period=7500, shift=1000) "Terminal fan status" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, final startTime=3600) "Valve position" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/DamperValves.mo index 24c4c2a99d2..99b874322aa 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/DamperValves.mo @@ -9,58 +9,58 @@ model DamperValves final maxRat=0.1, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-90},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.01, final height=0.06) "Discharge airflow rate" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/3600) "Supply air temperature" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSet( final k=273.15 + 20) "Zone heating setpoint" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( final offset=273.15 + 13, final amplitude=1.2, final freqHz=1/3600) "Measured discharge air temperature" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOAMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOAMin_flow( final k=0.005) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=3, final duration=90000) "Operation mode" @@ -68,16 +68,16 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, final startTime=1000) "Override flow setpoint" annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-20,130},{0,150}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Overrides.mo index 93d426e5d64..c52f84ae70c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/Overrides.mo @@ -4,12 +4,12 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.Overrides ove "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3600, final height=0.5, final offset=0.5) "Damper position setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -17,16 +17,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaValPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaValPos( final duration=3600, final height=0.5, final offset=0.5) "Heating valve position" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -34,7 +34,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/SystemRequests.mo index c661aab9ff5..64d9e68fe65 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Subsequences/Validation/SystemRequests.mo @@ -9,7 +9,7 @@ model SystemRequests final damPosHys=0.01, final valPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -17,30 +17,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3000, final height=-0.7, final offset=0.7) "Damper position" @@ -50,17 +50,17 @@ model SystemRequests final period=7200) "After suppression" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Validation/Controller.mo index dfd1120c8a7..01d6f871b3b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/ParallelFanVVF/Validation/Controller.mo @@ -21,13 +21,13 @@ model Controller final VAreMin_flow=0) "Paralle-fan powered unit controller" annotation (Placement(transformation(extent={{100,70},{120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -40,11 +40,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); @@ -53,7 +53,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -63,21 +63,21 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Parallel fan flow" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -86,11 +86,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -98,11 +98,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveTerFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveTerFan( final height=2, final duration=5000, final startTime=60000) "Override terminal fan control" @@ -110,11 +110,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/28800) "Supply air temperature from air handling unit" @@ -141,16 +141,16 @@ model Controller final period=7500) "AHU supply fan status" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( final offset=1.3, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/ActiveAirFlow.mo index 8f213d1d4e3..37b8fdb7c70 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/ActiveAirFlow.mo @@ -85,10 +85,10 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{-20,120},{0,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{140,110},{160,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum of inputs" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMinFlo( @@ -103,32 +103,32 @@ protected final realTrue=VCooMax_flow) "Cooling maximum flow when input is true" annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 + Buildings.Controls.OBC.CDL.Reals.Max max2 "Maximum of inputs" annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Product of inputs" annotation (Placement(transformation(extent={{40,60},{60,80}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if it is warm-up or setback" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up inputs" annotation (Placement(transformation(extent={{100,-30},{120,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Active heating minimu flow setpoint" annotation (Placement(transformation(extent={{160,10},{180,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Product of inputs" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo1( final realTrue=VHeaMax_flow) "Heating maximum flow when input is true" annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{100,-170},{120,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Active heating maximum flow setpoint" annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant setBacMod( @@ -154,11 +154,11 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal ifSetBac "Check if current operation mode is setback mode" annotation (Placement(transformation(extent={{-120,-200},{-100,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxAir( final k=VHeaMax_flow) "Heating maximum airflow" annotation (Placement(transformation(extent={{-100,-160},{-80,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMinAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMinAir( final k=VHeaMin_flow) "Heating minimum airflow" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Alarms.mo index d96998d0a3f..63c28ab639b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Alarms.mo @@ -133,11 +133,11 @@ block Alarms "Generate alarms of terminal unit with reheat" annotation (Placement(transformation(extent={{240,-320},{280,-280}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,300},{-160,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); @@ -145,15 +145,15 @@ block Alarms "Generate alarms of terminal unit with reheat" final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,330},{-60,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=floHys, + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,250},{-160,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,220},{-160,240}}))); @@ -178,11 +178,11 @@ block Alarms "Generate alarms of terminal unit with reheat" final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,250},{100,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,160},{-100,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -211,11 +211,11 @@ block Alarms "Generate alarms of terminal unit with reheat" final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,210},{120,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); @@ -226,7 +226,7 @@ block Alarms "Generate alarms of terminal unit with reheat" final delayTime=fanOffTim) "Check if the supply fan has been OFF more than threshold time" annotation (Placement(transformation(extent={{0,120},{20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,120},{-80,140}}))); @@ -248,7 +248,7 @@ block Alarms "Generate alarms of terminal unit with reheat" final delayTime=leaFloTim) "Check if the air flow is above threshold by more than threshold time" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); @@ -265,19 +265,19 @@ block Alarms "Generate alarms of terminal unit with reheat" final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-10},{160,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-250},{-100,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-17) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-290},{-160,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les2( + Buildings.Controls.OBC.CDL.Reals.Less les2( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-320},{-100,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=-8) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-360},{-160,-340}}))); @@ -328,11 +328,11 @@ block Alarms "Generate alarms of terminal unit with reheat" if have_hotWatCoi "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,-360},{120,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt3( final k=hotWatRes) if have_hotWatCoi "Importance multiplier for hot water reset control" annotation (Placement(transformation(extent={{-120,-390},{-100,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 if have_hotWatCoi "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-390},{-60,-370}}))); @@ -347,16 +347,16 @@ block Alarms "Generate alarms of terminal unit with reheat" final delayTime=valCloTim) "Check if valve position is closed for more than threshold time" annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloVal( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloVal( final t=valPosHys, final h=0.5*valPosHys) "Check if valve position is near zero" annotation (Placement(transformation(extent={{-200,-100},{-180,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=3) "AHU supply temperature plus 3 degree" annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=dTHys) "Discharge temperature greate than AHU supply temperature by a threshold" annotation (Placement(transformation(extent={{-140,-140},{-120,-120}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/DamperValves.mo index 065ede4782e..47e2124ca52 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/DamperValves.mo @@ -188,10 +188,10 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,140},{-40,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -201,10 +201,10 @@ block DamperValves final y_reset=0) "Damper position controller" annotation (Placement(transformation(extent={{280,140},{300,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{120,180},{140,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,210},{40,230}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 @@ -216,29 +216,29 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and2 "Check if current zone state is deadband" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Airflow setpoint when it is in deadband state" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin3 + Buildings.Controls.OBC.CDL.Reals.Line lin3 "Airflow setpoint when it is in heating state" annotation (Placement(transformation(extent={{-100,-360},{-80,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Acitive heating airflow rate" annotation (Placement(transformation(extent={{20,-330},{40,-310}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=dTHys) "Check if the discharge air temperature is greater than zone temperature by a threshold" annotation (Placement(transformation(extent={{-180,-290},{-160,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-100,-170},{-80,-150}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Enable heating coil when it is in heating state, or the discharge air temperature is lower than minimum" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Discharge airflow setpoint when heating coil is enabled" annotation (Placement(transformation(extent={{-40,-220},{-20,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -252,78 +252,78 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and1 "Occupied mode and discharge temperature is low" annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,220},{-260,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,220},{-200,240}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-280,160},{-260,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch watValPosUno "Output hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch watValPosUno "Output hot water valve position" annotation (Placement(transformation(extent={{280,-110},{300,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch damPosUno "Output damper position" + Buildings.Controls.OBC.CDL.Reals.Switch damPosUno "Output damper position" annotation (Placement(transformation(extent={{280,-30},{300,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{240,70},{260,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{240,140},{260,160}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lowMin( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lowMin( final t=TDisMin, final h=dTHys) "Check if discharge air temperature is less than lowest discharge air temperature" annotation (Placement(transformation(extent={{-260,-40},{-240,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer2( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.8*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-260,-250},{-240,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal1( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-280,-410},{-260,-390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne2( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-200,-410},{-180,-390}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=3) "Zone temperature plus threshold difference" annotation (Placement(transformation(extent={{-240,-310},{-220,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-180,-200},{-160,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-260,-140},{-240,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-260,-200},{-240,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant lowDisAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant lowDisAirTem( final k=TDisMin) "Lowest allowed discharge air temperature" annotation (Placement(transformation(extent={{-180,-250},{-160,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Output hot water valve position in case of low discharge air temperature" annotation (Placement(transformation(extent={{100,-150},{120,-130}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( @@ -340,7 +340,7 @@ block DamperValves Buildings.Controls.OBC.CDL.Integers.Equal isUno "Output true if the operation mode is unoccupied" annotation (Placement(transformation(extent={{100,-450},{120,-430}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Ensure the discharge temperature being higher than the minimum" annotation (Placement(transformation(extent={{-100,-250},{-80,-230}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(final k=1) @@ -373,13 +373,13 @@ block DamperValves final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-60,370},{-40,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{60,390},{80,410}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{120,430},{140,450}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{180,270},{200,290}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or3 @@ -396,21 +396,21 @@ block DamperValves final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow" annotation (Placement(transformation(extent={{-60,330},{-40,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add up two inputs" annotation (Placement(transformation(extent={{0,350},{20,370}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{0,270},{20,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow" annotation (Placement(transformation(extent={{120,140},{140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow" annotation (Placement(transformation(extent={{120,100},{140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max2 "Nominal flow" + Buildings.Controls.OBC.CDL.Reals.Max max2 "Nominal flow" annotation (Placement(transformation(extent={{200,120},{220,140}}))); Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( final trueHoldDuration=600, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Overrides.mo index 759cbc93acb..56b66eadc81 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Overrides.mo @@ -53,15 +53,15 @@ block Overrides "Software switches to override setpoints" final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,60},{40,80}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,20},{100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Valve position setpoint after considering override" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo index c0288d15b87..c6addc9da30 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/SystemRequests.mo @@ -152,34 +152,34 @@ block SystemRequests "Output system requests for VAV terminal unit with reheat" iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -190,18 +190,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,210},{-80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -252,22 +252,22 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu( + Buildings.Controls.OBC.CDL.Reals.Greater greEqu( final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1( + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1( final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=thrTDis_1) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=thrTDis_2) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); @@ -295,7 +295,7 @@ protected final delayTime=durTimDisAir) if have_hotWatCoi "Check if it is more than threshold time" annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=valPosHys) if have_hotWatCoi "Check if valve position is greater than 0.95" @@ -304,7 +304,7 @@ protected if have_hotWatCoi "Convert boolean to integer" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=0.95, final h=0.85) if have_hotWatCoi "Check if valve position is greater than 0.95" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/ActiveAirFlow.mo index cad3d100fa1..94b651e7a28 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/ActiveAirFlow.mo @@ -7,12 +7,12 @@ model ActiveAirFlow final VHeaMax_flow=0.4) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -21,7 +21,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Alarms.mo index 0bf3c6cae14..d7c9c9fc4a5 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Alarms.mo @@ -9,17 +9,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -31,7 +31,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( @@ -42,22 +42,22 @@ model Alarms "Validation of model that generates alarms" final width=0.9, final period=7500) "Hot water plant status" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, final startTime=3600) "Valve position" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/DamperValves.mo index 79c76ab69fa..1c91dc2b644 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/DamperValves.mo @@ -8,54 +8,54 @@ model DamperValves final VHeaMax_flow=0.08, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-110},{100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.01, final height=0.06) "Discharge airflow rate" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/3600) "Supply air temperature" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSet( final k=273.15 + 20) "Zone heating setpoint" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( final offset=273.15 + 13, final amplitude=1.2, final freqHz=1/3600) "Measured discharge air temperature" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=3, final duration=90000) "Operation mode" @@ -63,22 +63,22 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-160},{0,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMin_flow( final k=0.015) "Active cooling minimum flow" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMin_flow( final k=0.015) "Active heating minimum flow" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow( final k=0.06) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, final startTime=1000) "Override flow setpoint" @@ -86,7 +86,7 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,150},{0,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Overrides.mo index bd2a46d1f47..8ed30bb9249 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/Overrides.mo @@ -4,12 +4,12 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.Reheat.Subsequences.Overrides ove "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3600, final height=0.5, final offset=0.5) "Damper position setpoint" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -17,11 +17,11 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaValPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaValPos( final duration=3600, final height=0.5, final offset=0.5) "Heating valve position" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/SystemRequests.mo index 85a21bd3b4a..64ea6763ca2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Subsequences/Validation/SystemRequests.mo @@ -9,7 +9,7 @@ model SystemRequests final damPosHys=0.01, final valPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -17,30 +17,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3000, final height=-0.7, final offset=0.7) "Damper position" @@ -50,17 +50,17 @@ model SystemRequests final period=7200) "After suppression" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Validation/Controller.mo index a77a38ecf3b..0383198bd93 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/Reheat/Validation/Controller.mo @@ -21,13 +21,13 @@ model Controller final VAreMin_flow=0) "Reheat unit controller" annotation (Placement(transformation(extent={{100,70},{120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -40,11 +40,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); @@ -53,7 +53,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -63,21 +63,21 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Parallel fan flow" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -86,11 +86,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -98,11 +98,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/28800) "Supply air temperature from air handling unit" @@ -125,16 +125,16 @@ model Controller final period=7500) "AHU supply fan status" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( final offset=1.3, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set( final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,80},{-100,100}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/ActiveAirFlow.mo index ca238ed6bbc..64dee967a67 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/ActiveAirFlow.mo @@ -56,7 +56,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{20,0},{40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); Buildings.Controls.OBC.CDL.Integers.Equal ifOcc diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Alarms.mo index 0b3ef7768a3..03bc2491bc7 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Alarms.mo @@ -148,11 +148,11 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta annotation (Placement(transformation(extent={{240,-390},{280,-350}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,370},{-160,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,400},{-100,420}}))); @@ -160,16 +160,16 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,400},{-60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,320},{-160,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,270},{-100,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); @@ -193,11 +193,11 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,320},{100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,230},{-60,250}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -226,11 +226,11 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,280},{120,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,170},{-180,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); @@ -241,7 +241,7 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{0,190},{20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); @@ -263,7 +263,7 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-120},{-180,-100}}))); @@ -280,19 +280,19 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-320},{-100,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-17) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-360},{-160,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les2( + Buildings.Controls.OBC.CDL.Reals.Less les2( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-390},{-100,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1(final p=-8.3) + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1(final p=-8.3) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-430},{-160,-410}}))); @@ -343,11 +343,11 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta if have_hotWatCoi "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,-430},{120,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt3( final k=hotWatRes) if have_hotWatCoi "Importance multiplier for hot water reset control" annotation (Placement(transformation(extent={{-120,-460},{-100,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 if have_hotWatCoi "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-460},{-60,-440}}))); @@ -362,16 +362,16 @@ block Alarms "Generate alarms of parallerl fan-powered terminal unit with consta final delayTime=valCloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloVal( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloVal( final t=valPosHys, final h=0.5*valPosHys) "Check if valve position is near zero" annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=3) "AHU supply temperature plus 3 degree" annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=dTHys) "Discharge temperature greate than AHU supply temperature by a threshold" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/DamperValves.mo index 7f2473f4250..833dcafdf08 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/DamperValves.mo @@ -197,55 +197,55 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{80,180},{100,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{20,210},{40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,220},{-260,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,220},{-200,240}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-220,160},{-200,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,80},{-100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-260,-120},{-240,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-260,-10},{-240,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-260,-80},{-240,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-180,-80},{-160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -256,7 +256,7 @@ block DamperValves u_m(final unit="K", displayUnit="degC")) "Hot water valve controller" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Hot water valve position, close the valve when the zone is not in heating state" annotation (Placement(transformation(extent={{100,-120},{120,-100}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant unOcc( @@ -266,19 +266,19 @@ block DamperValves Buildings.Controls.OBC.CDL.Integers.Equal isUno "Output true if the operation mode is unoccupied" annotation (Placement(transformation(extent={{100,-180},{120,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Hot water valve position" annotation (Placement(transformation(extent={{280,-100},{300,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow(final k= VCooMax_flow) "Nominal volume flow rate" annotation (Placement(transformation(extent={{160,130},{180,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{220,160},{240,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{220,100},{240,120}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -288,14 +288,14 @@ block DamperValves final y_reset=0) "Damper position controller" annotation (Placement(transformation(extent={{260,160},{280,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Air damper position" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Air damper position" annotation (Placement(transformation(extent={{240,10},{260,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Not in unoccupied mode" annotation (Placement(transformation(extent={{180,50},{200,70}}))); Buildings.Controls.OBC.CDL.Logical.Latch lat "Close damper" annotation (Placement(transformation(extent={{100,-280},{120,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=damPosHys/2) "Check if the damper is fully closed before turning on fan" @@ -322,7 +322,7 @@ block DamperValves final realFalse=1) "Boolean to real" annotation (Placement(transformation(extent={{180,-280},{200,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Ensure damper is fully closed before turning on the fan" annotation (Placement(transformation(extent={{280,-10},{300,10}}))); Buildings.Controls.OBC.CDL.Logical.And and2 @@ -363,11 +363,11 @@ block DamperValves final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-60,290},{-40,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{20,310},{40,330}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{80,350},{100,370}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{140,260},{160,280}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or1 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Overrides.mo index ada5ccb0c2a..12534430577 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Overrides.mo @@ -63,15 +63,15 @@ block Overrides "Software switches to override setpoints" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam( final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,120},{40,140}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Valve position setpoint after considering override" annotation (Placement(transformation(extent={{80,0},{100,20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo index 57639d5356e..d39ee177f30 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/SystemRequests.mo @@ -131,34 +131,34 @@ block SystemRequests "Output system requests for parallel fan-powered terminal u iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -169,18 +169,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,210},{-80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -231,20 +231,20 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=thrTDis_1) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=thrTDis_2) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); @@ -272,7 +272,7 @@ protected final delayTime=durTimDisAir) if have_hotWatCoi "Check if it is more than threshold time" annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=valPosHys) if have_hotWatCoi "Check if valve position is greater than 0.95" @@ -281,7 +281,7 @@ protected if have_hotWatCoi "Convert boolean to integer" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=0.95, final h=0.85) if have_hotWatCoi "Check if valve position is greater than 0.95" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/ActiveAirFlow.mo index 74c7d40a0bc..b30bf163efe 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/ActiveAirFlow.mo @@ -5,12 +5,12 @@ model ActiveAirFlow final VCooMax_flow=0.5) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -19,7 +19,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Alarms.mo index 46b028730f2..2ebc1eada6c 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Alarms.mo @@ -9,17 +9,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -31,7 +31,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( @@ -42,7 +42,7 @@ model Alarms "Validation of model that generates alarms" final width=0.9, final period=7500) "Hot water plant status" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" @@ -57,17 +57,17 @@ model Alarms "Validation of model that generates alarms" final period=7500, shift=1000) "Terminal fan status" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, final startTime=3600) "Valve position" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/DamperValves.mo index f62063c34cd..d67d9295440 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/DamperValves.mo @@ -7,20 +7,20 @@ model DamperValves final VCooMax_flow=0.09, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-110},{100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); @@ -28,38 +28,38 @@ model DamperValves final width=0.75, final period=7200) "Terminal fan status" annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.01, final height=0.06) "Discharge airflow rate" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/3600) "Supply air temperature" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSet( final k=273.15 + 20) "Zone heating setpoint" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( final offset=273.15 + 13, final amplitude=1.2, final freqHz=1/3600) "Measured discharge air temperature" annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=3, final duration=90000) "Operation mode" @@ -67,17 +67,17 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final height=1, final duration=3600, final offset=0, final startTime=5500) "Damper position" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, final startTime=1000) "Override flow setpoint" @@ -85,7 +85,7 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,140},{0,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,140},{-40,160}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Overrides.mo index 4aa26c9b60c..db1d27f4189 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/Overrides.mo @@ -4,12 +4,12 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.SeriesFanCVF.Subsequences.Overrides ove "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3600, final height=0.5, final offset=0.5) "Damper position setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -17,16 +17,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaValPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaValPos( final duration=3600, final height=0.5, final offset=0.5) "Heating valve position" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -34,7 +34,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/SystemRequests.mo index 58b699e3fa2..784552a021b 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Subsequences/Validation/SystemRequests.mo @@ -9,7 +9,7 @@ model SystemRequests final damPosHys=0.01, final valPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -17,30 +17,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3000, final height=-0.7, final offset=0.7) "Damper position" @@ -50,17 +50,17 @@ model SystemRequests final period=7200) "After suppression" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Validation/Controller.mo index 64e45f18a42..2a8f3755231 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanCVF/Validation/Controller.mo @@ -19,13 +19,13 @@ model Controller final VAreMin_flow=0) "Series-fan powered unit controller" annotation (Placement(transformation(extent={{100,70},{120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -38,11 +38,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); @@ -51,7 +51,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -61,21 +61,21 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Parallel fan flow" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -84,11 +84,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -96,11 +96,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveTerFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveTerFan( final height=2, final duration=5000, final startTime=60000) "Override terminal fan control" @@ -108,11 +108,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/28800) "Supply air temperature from air handling unit" @@ -139,16 +139,16 @@ model Controller final period=7500) "AHU supply fan status" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( final offset=1.3, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Controller.mo index b5befd46a28..216acd01092 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Controller.mo @@ -491,7 +491,7 @@ block Controller Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real" annotation (Placement(transformation(extent={{160,210},{180,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Paralle fan airflow setpoint" annotation (Placement(transformation(extent={{200,230},{220,250}}))); Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.Title24.Setpoints minFlo( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/ActiveAirFlow.mo index 118ff94b148..c3d5269abbe 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/ActiveAirFlow.mo @@ -56,7 +56,7 @@ protected final realTrue=1) "If in occupied mode, output 1" annotation (Placement(transformation(extent={{20,0},{40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Active cooling minimum, minimum airflow setpoint" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); Buildings.Controls.OBC.CDL.Integers.Equal ifOcc diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Alarms.mo index 328c438e9a5..4a0ae7b5468 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Alarms.mo @@ -147,11 +147,11 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- annotation (Placement(transformation(extent={{240,-390},{280,-350}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,370},{-160,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,400},{-100,420}}))); @@ -159,16 +159,16 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time" annotation (Placement(transformation(extent={{-80,400},{-60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=floHys, final h=0.5*floHys) "Check if setpoint airflow is greater than zero" annotation (Placement(transformation(extent={{-180,320},{-160,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre( + Buildings.Controls.OBC.CDL.Reals.Greater gre( final h=floHys) "Check if measured airflow is less than threshold" annotation (Placement(transformation(extent={{-120,270},{-100,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); @@ -192,11 +192,11 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final integerTrue=3) "Convert boolean true to level 3 alarm" annotation (Placement(transformation(extent={{80,320},{100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,230},{-60,250}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 @@ -225,11 +225,11 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,280},{120,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-200,170},{-180,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); @@ -240,7 +240,7 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final delayTime=fanOffTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{0,190},{20,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1( + Buildings.Controls.OBC.CDL.Reals.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); @@ -262,7 +262,7 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final delayTime=leaFloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero" annotation (Placement(transformation(extent={{-200,-120},{-180,-100}}))); @@ -279,19 +279,19 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final integerTrue=4) "Convert boolean true to level 4 alarm" annotation (Placement(transformation(extent={{140,-80},{160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-320},{-100,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-17) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-360},{-160,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les2( + Buildings.Controls.OBC.CDL.Reals.Less les2( final h=dTHys) if have_hotWatCoi "Discharge temperature lower than setpoint by a threshold" annotation (Placement(transformation(extent={{-120,-390},{-100,-370}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1(final p=-8.3) + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1(final p=-8.3) if have_hotWatCoi "Setpoint temperature minus a threshold" annotation (Placement(transformation(extent={{-180,-430},{-160,-410}}))); @@ -342,11 +342,11 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- if have_hotWatCoi "Level 3 low airflow alarm" annotation (Placement(transformation(extent={{100,-430},{120,-410}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt3( final k=hotWatRes) if have_hotWatCoi "Importance multiplier for hot water reset control" annotation (Placement(transformation(extent={{-120,-460},{-100,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 if have_hotWatCoi "Check if the multiplier is greater than zero" annotation (Placement(transformation(extent={{-80,-460},{-60,-440}}))); @@ -361,16 +361,16 @@ block Alarms "Generate alarms of series fan-powered terminal unit with variable- final delayTime=valCloTim) "Check if the input has been true for more than threshold time" annotation (Placement(transformation(extent={{40,-190},{60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloVal( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloVal( final t=valPosHys, final h=0.5*valPosHys) "Check if valve position is near zero" annotation (Placement(transformation(extent={{-200,-170},{-180,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=3) "AHU supply temperature plus 3 degree" annotation (Placement(transformation(extent={{-200,-240},{-180,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2( + Buildings.Controls.OBC.CDL.Reals.Greater gre2( final h=dTHys) "Discharge temperature greate than AHU supply temperature by a threshold" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/DamperValves.mo index 824951bbab1..f4657b72d1f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/DamperValves.mo @@ -215,47 +215,47 @@ block DamperValves Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-80,250},{-60,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-180,300},{-160,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{60,290},{80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Airflow setpoint when it is in cooling state" annotation (Placement(transformation(extent={{0,320},{20,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-300,330},{-280,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-240,330},{-220,350}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state" annotation (Placement(transformation(extent={{-240,270},{-220,290}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-200,190},{-180,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-240,190},{-220,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Hot water valve position" annotation (Placement(transformation(extent={{300,10},{320,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow(final k= VCooMax_flow) "Nominal volume flow rate" annotation (Placement(transformation(extent={{100,240},{120,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{200,270},{220,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VPri_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VPri_flowNor "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{200,210},{220,230}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -265,25 +265,25 @@ block DamperValves final y_reset=0) "Damper position controller" annotation (Placement(transformation(extent={{240,270},{260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Air damper position" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Air damper position" annotation (Placement(transformation(extent={{260,120},{280,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-280,30},{-260,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is heating state" annotation (Placement(transformation(extent={{-280,-10},{-260,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -294,24 +294,24 @@ block DamperValves u_m(final unit="K", displayUnit="degC")) "Hot water valve controller" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3(final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,100},{-260,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Hot water valve position, close the valve when the zone is not in heating state" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line heaFanRat + Buildings.Controls.OBC.CDL.Reals.Line heaFanRat "Parallel fan airflow setpoint when zone is in heating state" annotation (Placement(transformation(extent={{40,-260},{60,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal1( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-20,-230},{0,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal2( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-180,-290},{-160,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxFan( final k=maxRat) "Maximum fan rate" annotation (Placement(transformation(extent={{-20,-290},{0,-270}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant uno( @@ -325,13 +325,13 @@ block DamperValves "Not in unoccupied mode" annotation (Placement(transformation(extent={{200,150},{220,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Fan setpoint when it is in cooling state and the supply air temperture is high" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Larger of minimum outdoor airflow setpoint and primary discharge airflow setpoint" annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "Fan setpoint when it is in cooling state" annotation (Placement(transformation(extent={{240,-130},{260,-110}}))); Buildings.Controls.OBC.CDL.Logical.Or cooHea @@ -339,13 +339,13 @@ block DamperValves annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "In deadband state" annotation (Placement(transformation(extent={{60,-190},{80,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 + Buildings.Controls.OBC.CDL.Reals.Switch swi7 "Fan setpoint when it is in deadband state" annotation (Placement(transformation(extent={{180,-170},{200,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Fan setpoint when it is in heating state" annotation (Placement(transformation(extent={{100,-310},{120,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( + Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam( final t=damPosHys, final h=damPosHys/2) "Check if the damper is fully closed before turning on fan" @@ -382,13 +382,13 @@ block DamperValves final realFalse=1) "Boolean to real" annotation (Placement(transformation(extent={{160,-380},{180,-360}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Ensure damper is fully closed before turning on the fan" annotation (Placement(transformation(extent={{320,100},{340,120}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Boolean to real" annotation (Placement(transformation(extent={{160,-422},{180,-402}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 + Buildings.Controls.OBC.CDL.Reals.Multiply mul1 "Ensure damper is fully closed before turning on the fan" annotation (Placement(transformation(extent={{320,-190},{340,-170}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(final k=1) @@ -418,15 +418,15 @@ block DamperValves final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow" annotation (Placement(transformation(extent={{-80,390},{-60,410}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{0,410},{20,430}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add up inputs" annotation (Placement(transformation(extent={{60,450},{80,470}}))); Buildings.Controls.OBC.CDL.Logical.Or3 or1 "Check if the airflow setpoint should be overrided" annotation (Placement(transformation(extent={{40,360},{60,380}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 + Buildings.Controls.OBC.CDL.Reals.Switch swi9 "Airflow setpoint after considering override" annotation (Placement(transformation(extent={{120,360},{140,380}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2(final k=3) diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Overrides.mo index 7ea786fd2e5..2f0aa1264fd 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Overrides.mo @@ -63,15 +63,15 @@ block Overrides "Software switches to override setpoints" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam( final realTrue=1) "Full open damper position" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add up inputs" annotation (Placement(transformation(extent={{20,120},{40,140}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Damper setpoint position after considering override" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Valve position setpoint after considering override" annotation (Placement(transformation(extent={{80,0},{100,20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo index ee3b2ed4670..e28474054ab 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/SystemRequests.mo @@ -152,34 +152,34 @@ block SystemRequests iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less les( + Buildings.Controls.OBC.CDL.Reals.Less les( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-150},{-40,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les1( + Buildings.Controls.OBC.CDL.Reals.Less les1( final h=dTHys) if have_hotWatCoi "Check if discharge temperature is less than setpoint by a threshold" annotation (Placement(transformation(extent={{-60,-190},{-40,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,120},{-40,140}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0" @@ -190,18 +190,18 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,40},{-80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,210},{-80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); Buildings.Controls.OBC.CDL.Logical.And and1 @@ -252,20 +252,20 @@ protected Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) + Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=thrTDis_1) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=thrTDis_2) if have_hotWatCoi "Discharge temperature plus threshold" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); @@ -293,7 +293,7 @@ protected final delayTime=durTimDisAir) if have_hotWatCoi "Check if it is more than threshold time" annotation (Placement(transformation(extent={{0,-190},{20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr5( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr5( final t=0.95, final h=valPosHys) if have_hotWatCoi "Check if valve position is greater than 0.95" @@ -302,7 +302,7 @@ protected if have_hotWatCoi "Convert boolean to integer" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr6( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr6( final t=0.95, final h=0.85) if have_hotWatCoi "Check if valve position is greater than 0.95" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/ActiveAirFlow.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/ActiveAirFlow.mo index f0dc0bc4a9c..1c35dea6044 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/ActiveAirFlow.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/ActiveAirFlow.mo @@ -5,12 +5,12 @@ model ActiveAirFlow final VCooMax_flow=0.5) "Output the active airflow setpoint for terminal unit" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin minFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin minFlo( final amplitude=0.3, final freqHz=1/3600, final offset=0.2) "Occupied zone minimum flow" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=5, final duration=3600) @@ -19,7 +19,7 @@ model ActiveAirFlow Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Alarms.mo index 7ef31e2281b..e5026b49439 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Alarms.mo @@ -9,17 +9,17 @@ model Alarms "Validation of model that generates alarms" final floHys=0.01, final damPosHys=0.01) "Block outputs system alarms" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=7200, final height=0.7, final offset=0.3) "Damper position" @@ -31,7 +31,7 @@ model Alarms "Validation of model that generates alarms" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert boolean input to real output" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Damper position" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse damSta( @@ -42,7 +42,7 @@ model Alarms "Validation of model that generates alarms" final width=0.9, final period=7500) "Hot water plant status" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" @@ -57,17 +57,17 @@ model Alarms "Validation of model that generates alarms" final period=7500, shift=1000) "Terminal fan status" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, final startTime=3600) "Valve position" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup( final k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/DamperValves.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/DamperValves.mo index fc7f32ebb67..152c42645c8 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/DamperValves.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/DamperValves.mo @@ -8,20 +8,20 @@ model DamperValves final VCooMax_flow=0.09, final kDam=1) "Output signal for controlling damper position" annotation (Placement(transformation(extent={{80,-120},{100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=3600, final offset=1, final startTime=900) "Cooling control signal" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( final k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow( final k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow( final k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); @@ -29,38 +29,38 @@ model DamperValves final width=0.75, final period=7200) "Terminal fan status" annotation (Placement(transformation(extent={{-100,-150},{-80,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( final height=1, final duration=3600, final offset=0, final startTime=5500) "Heating control signal" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.01, final height=0.06) "Discharge airflow rate" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/3600) "Supply air temperature" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSet( final k=273.15 + 20) "Zone heating setpoint" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( final offset=273.15 + 13, final amplitude=1.2, final freqHz=1/3600) "Measured discharge air temperature" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=3, final duration=90000) "Operation mode" @@ -68,21 +68,21 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-120},{0,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final height=1, final duration=3600, final offset=0, final startTime=5500) "Damper position" annotation (Placement(transformation(extent={{-60,-170},{-40,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VMinOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VMinOut_flow( final k=0.005) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=3, final duration=2000, final startTime=1000) "Override flow setpoint" @@ -90,7 +90,7 @@ model DamperValves Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,150},{0,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-60,150},{-40,170}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Overrides.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Overrides.mo index 493ff26cb11..23515ce5429 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Overrides.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/Overrides.mo @@ -4,12 +4,12 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.SeriesFanVVF.Subsequences.Overrides ove "Block outputs system requests" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3600, final height=0.5, final offset=0.5) "Damper position setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -17,16 +17,16 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp heaValPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaValPos( final duration=3600, final height=0.5, final offset=0.5) "Heating valve position" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1( final height=2, final duration=2000, final startTime=1000) "Override damper position" @@ -34,7 +34,7 @@ model Overrides "Validation of model that overrides control" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/SystemRequests.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/SystemRequests.mo index 9e15417756b..e107db067fe 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/SystemRequests.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Subsequences/Validation/SystemRequests.mo @@ -9,7 +9,7 @@ model SystemRequests final damPosHys=0.01, final valPosHys=0.01) "Block outputs system requests" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final freqHz=1/7200, final offset=296.15) "Generate data for setpoint" @@ -17,30 +17,30 @@ model SystemRequests Buildings.Controls.OBC.CDL.Discrete.UnitDelay TCooSet( final samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/7200, final amplitude=2, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( final height=-1, final duration=2000, final offset=1, final startTime=1000) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( final height=0.9, final duration=7200, final offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAir( final duration=7200, final offset=0.1, final height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-20},{0,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( final duration=3000, final height=-0.7, final offset=0.7) "Damper position" @@ -50,17 +50,17 @@ model SystemRequests final period=7200) "After suppression" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( final duration=3600, final offset=273.15 + 20, final height=-5) "Discharge air temperature" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDisSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDisSet( final k=273.15 + 30) "Discharge airflow temperature setpoint" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( final duration=2000, final height=-0.7, final offset=0.7, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Validation/Controller.mo b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Validation/Controller.mo index 83de6281874..f91fe9a7362 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Validation/Controller.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/TerminalUnits/SeriesFanVVF/Validation/Controller.mo @@ -20,13 +20,13 @@ model Controller final VAreMin_flow=0) "Series-fan powered unit controller" annotation (Placement(transformation(extent={{100,70},{120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( final freqHz=1/86400, final amplitude=4, final offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,230},{-100,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirTem( final height=2, final duration=43200, final offset=273.15 + 15, @@ -39,11 +39,11 @@ model Controller final shift=43200) "Window opening status" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet( final k=273.15 + 24) "Zone cooling setpoint temperature" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet( final k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); @@ -52,7 +52,7 @@ model Controller final period=43200, final shift=28800) "Occupancy status" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( final offset=1, final height=2, final duration=28800, @@ -62,21 +62,21 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=400, final freqHz=1/28800, final offset=600) "CO2 concentration" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final offset=1.2, final amplitude=0.6, final freqHz=1/28800) "Parallel fan flow" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo( final height=2, final duration=10000, final startTime=35000) @@ -85,11 +85,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam( final height=2, final duration=5000, startTime=60000) "Override damper position" @@ -97,11 +97,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp oveTerFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveTerFan( final height=2, final duration=5000, final startTime=60000) "Override terminal fan control" @@ -109,11 +109,11 @@ model Controller Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt4 "Convert real to integer" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4( + Buildings.Controls.OBC.CDL.Reals.Round round4( final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( final offset=273.15 + 13, final amplitude=1, final freqHz=1/28800) "Supply air temperature from air handling unit" @@ -140,16 +140,16 @@ model Controller final period=7500) "AHU supply fan status" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( final k=273.15 + 13) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( final offset=1.3, final amplitude=0.6, final freqHz=1/28800) "Discharge airflow rate" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set(final k=894) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set(final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Alarms.mo index fde821e21e3..8c176f6e6ad 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Alarms.mo @@ -68,28 +68,28 @@ block Alarms "Zone level alarms" annotation (Placement(transformation(extent={{240,-200},{280,-160}}), iconTransformation(extent={{100,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract lowTem + Buildings.Controls.OBC.CDL.Reals.Subtract lowTem "Zone temperature below the heating setpoint" annotation (Placement(transformation(extent={{-170,90},{-150,110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold twoDegLow( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold twoDegLow( final t=2, final h=dTHys) "Check if the zone temperature is 2 degC lower than the heating setpoint" annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold thrDegLow( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold thrDegLow( final t=3, final h=dTHys) "Check if the zone temperature is 3 degC lower than the heating setpoint" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract higTem + Buildings.Controls.OBC.CDL.Reals.Subtract higTem "Zone temperature above the cooling setpoint" annotation (Placement(transformation(extent={{-170,210},{-150,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold twoDegHig( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold twoDegHig( final t=2, final h=dTHys) "Check if the zone temperature is 2 degC higher than the cooling setpoint" annotation (Placement(transformation(extent={{-120,210},{-100,230}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold thrDegHig( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold thrDegHig( final t=3, final h=dTHys) "Check if the zone temperature is 3 degC higher than the cooling setpoint" @@ -159,12 +159,12 @@ block Alarms "Zone level alarms" Buildings.Controls.OBC.CDL.Integers.Equal levTwoLow "Check if generating level 2 low temperature alarm" annotation (Placement(transformation(extent={{120,50},{140,70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr( final t=300, final h=ppmHys) if have_CO2Sen "Check if the CO2 concentration is less than threshold" annotation (Placement(transformation(extent={{-40,-190},{-20,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=600, final h=ppmHys) if have_CO2Sen "Check if the CO2 concentration is greater than threshold" @@ -178,7 +178,7 @@ block Alarms "Zone level alarms" annotation (Placement(transformation(extent={{200,-130},{220,-110}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 if have_CO2Sen "Logical not" annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( final t=1.1*CO2Set, final h=ppmHys) if have_CO2Sen "Check if the CO2 concentration exceeds setpoint plus 10%" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ControlLoops.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ControlLoops.mo index 1688c236e64..3b8fe79e14d 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ControlLoops.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ControlLoops.mo @@ -53,14 +53,14 @@ block ControlLoops "Heating and cooling control loops" final unit="1") "Heating control signal" annotation (Placement(transformation(extent={{160,-90},{200,-50}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCoo( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCoo( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, final k=kCooCon, final Ti=TiCooCon, final reverseActing=false) "Cooling controller" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHea( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHea( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, final k=kHeaCon, final Ti=TiHeaCon) @@ -68,11 +68,11 @@ block ControlLoops "Heating and cooling control loops" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Less enaHeaLoo( + Buildings.Controls.OBC.CDL.Reals.Less enaHeaLoo( final h=dTHys) "Check if heating control loop should be enabled" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Less enaCooLoo( + Buildings.Controls.OBC.CDL.Reals.Less enaCooLoo( final h=dTHys) "Check if cooling control loop should be enabled" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); @@ -88,7 +88,7 @@ protected final realFalse=1) "Output zero control signal when the cooling loop should be disabled" annotation (Placement(transformation(extent={{80,50},{100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply cooConSig + Buildings.Controls.OBC.CDL.Reals.Multiply cooConSig "Cooling control loop signal" annotation (Placement(transformation(extent={{120,60},{140,80}}))); Buildings.Controls.OBC.CDL.Logical.Not holZon @@ -103,14 +103,14 @@ protected final realFalse=1) "Output zero control signal when the heating loop should be disabled" annotation (Placement(transformation(extent={{80,-90},{100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply heaConSig + Buildings.Controls.OBC.CDL.Reals.Multiply heaConSig "Heating control loop signal" annotation (Placement(transformation(extent={{120,-80},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold zerCon( + Buildings.Controls.OBC.CDL.Reals.LessThreshold zerCon( final t=looHys, final h=0.8*looHys) "Check if the controller output is near zero" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold zerCon1( + Buildings.Controls.OBC.CDL.Reals.LessThreshold zerCon1( final t=looHys, final h=0.8*looHys) "Check if the controller output is near zero" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Setpoints.mo index bb10227c14e..462bf702894 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Setpoints.mo @@ -179,28 +179,28 @@ block Setpoints annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logic not" annotation (Placement(transformation(extent={{0,140},{20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar3( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar3( final p=incTSetDem_3) "Increase cooling setpoint when at demand limit level 3" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=incTSetDem_2) "Increase cooling setpoint when at demand limit level 2" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=incTSetDem_1) "Increase cooling setpoint when at demand limit level 1" annotation (Placement(transformation(extent={{40,100},{60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro6 + Buildings.Controls.OBC.CDL.Reals.Multiply pro6 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,140},{100,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Output product of the two inputs" annotation (Placement(transformation(extent={{80,100},{100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,60},{100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,20},{100,40}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler heaSetFre @@ -210,28 +210,28 @@ block Setpoints annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro7 + Buildings.Controls.OBC.CDL.Reals.Multiply pro7 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar6( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar6( final p=-decTSetDem_1) "Decrease heating setpoint when at demand limit level 1" annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar5( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar5( final p=-decTSetDem_2) "Decrease heating setpoint when at demand limit level 2" annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar4( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar4( final p=-decTSetDem_3) "Decrease heating setpoint when at demand limit level 3" annotation (Placement(transformation(extent={{40,-200},{60,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro5 + Buildings.Controls.OBC.CDL.Reals.Multiply pro5 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-200},{100,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro4 + Buildings.Controls.OBC.CDL.Reals.Multiply pro4 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-160},{100,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro3 + Buildings.Controls.OBC.CDL.Reals.Multiply pro3 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-120},{100,-100}}))); Buildings.Controls.OBC.CDL.Logical.Timer tim( @@ -245,11 +245,11 @@ block Setpoints Buildings.Controls.OBC.CDL.Logical.Edge edg1 "Instant when the zone becomes more than 5 minutes" annotation (Placement(transformation(extent={{-40,-280},{-20,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter heaSetDec( + Buildings.Controls.OBC.CDL.Reals.AddParameter heaSetDec( final p=-0.5) "Heating setpoint decrease due to continuously unpopulated under occupied mode" annotation (Placement(transformation(extent={{100,-320},{120,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter cooSetInc( + Buildings.Controls.OBC.CDL.Reals.AddParameter cooSetInc( final p=0.5) "Cooling setpoint increase due to continuously unpopulated under occupied mode" annotation (Placement(transformation(extent={{100,-280},{120,-260}}))); @@ -259,21 +259,21 @@ block Setpoints Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler heaSetSam "Sample current heating setpoint when zone becomes unpopulated by 5 minutes" annotation (Placement(transformation(extent={{40,-320},{60,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Adjusted heating setpoint" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Adjusted heating setpoint" annotation (Placement(transformation(extent={{140,240},{160,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Adjusted cooling setpoint" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Adjusted cooling setpoint" annotation (Placement(transformation(extent={{-200,340},{-180,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter cooSetLim( + Buildings.Controls.OBC.CDL.Reals.Limiter cooSetLim( final uMax=TActCoo_max, final uMin=TActCoo_min) "Limit occupied zone cooling setpoint" annotation (Placement(transformation(extent={{-240,-530},{-220,-510}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter heaSetLim( + Buildings.Controls.OBC.CDL.Reals.Limiter heaSetLim( final uMax=TActHea_max, final uMin=TActHea_min) "Limit occupied zone heating setpoint" annotation (Placement(transformation(extent={{-240,-590},{-220,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-0.5) "Cooling setpoint minus the minimum difference between cooling and heating setpoints" annotation (Placement(transformation(extent={{160,-590},{180,-570}}))); @@ -307,14 +307,14 @@ protected final k=have_locAdj) "Cooling setpoint adjustable" annotation (Placement(transformation(extent={{-340,320},{-320,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-340,280},{-320,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=0) if not have_locAdj "Zero adjustment" annotation (Placement(transformation(extent={{-340,360},{-320,380}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=0) if not have_locAdj "Zero adjustment" annotation (Placement(transformation(extent={{-60,280},{-40,300}}))); @@ -322,7 +322,7 @@ protected final k=have_locAdj) "Heating setpoint adjustable" annotation (Placement(transformation(extent={{-60,240},{-40,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( @@ -345,19 +345,19 @@ protected final k=have_occSen) "Check if there is occupancy sensor" annotation (Placement(transformation(extent={{160,-360},{180,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetWinOpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSetWinOpe( final k=TWinOpeCooSet) "Cooling setpoint when window is open" annotation (Placement(transformation(extent={{-240,-480},{-220,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetWinOpe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSetWinOpe( final k=TWinOpeHeaSet) "Heating setpoint when window is open" annotation (Placement(transformation(extent={{-120,-480},{-100,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant alaZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant alaZer( final k=-0.2) "Alarm level 0" annotation (Placement(transformation(extent={{-180,-400},{-160,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant alaFou( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant alaFou( final k=3.8) "Alarm level 4" annotation (Placement(transformation(extent={{-140,-400},{-120,-380}}))); @@ -393,79 +393,79 @@ protected annotation (Placement(transformation(extent={{-220,-420},{-200,-400}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 "Other than occupied mode" annotation (Placement(transformation(extent={{-280,-400},{-260,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les + Buildings.Controls.OBC.CDL.Reals.Less les "Check if occupied cooling setpoint is less than unoccupied one" annotation (Placement(transformation(extent={{20,-550},{40,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Check if occupied heating setpoint is greater than unoccupied one" annotation (Placement(transformation(extent={{20,-610},{40,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2 + Buildings.Controls.OBC.CDL.Reals.Greater gre2 "Check if the difference between cooling and heating setpoints is less than the minimum value" annotation (Placement(transformation(extent={{220,-590},{240,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-300,520},{-280,540}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch between occupied and unoccupied heating setpoint" annotation (Placement(transformation(extent={{-300,440},{-280,460}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Adjustment shall only affect occupied set point" annotation (Placement(transformation(extent={{-120,360},{-100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Setpoint can only be adjusted in occupied mode" annotation (Placement(transformation(extent={{220,260},{240,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If there is no cooling adjustment, zero adjust" annotation (Placement(transformation(extent={{-280,320},{-260,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "If there is no heating adjustment, zero adjust" annotation (Placement(transformation(extent={{80,240},{100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 + Buildings.Controls.OBC.CDL.Reals.Switch swi7 "Ensure heating setpoint being not higher than cooling setpoint minus 0.5 degC" annotation (Placement(transformation(extent={{280,-590},{300,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Ensure unoccupied heating setppint being lower than occupied one" annotation (Placement(transformation(extent={{100,-610},{120,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 + Buildings.Controls.OBC.CDL.Reals.Switch swi9 "Ensure unoccupied cooling setppint being higher than occupied one" annotation (Placement(transformation(extent={{100,-550},{120,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi10 + Buildings.Controls.OBC.CDL.Reals.Switch swi10 "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{220,80},{240,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi11 + Buildings.Controls.OBC.CDL.Reals.Switch swi11 "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{220,-140},{240,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi12 + Buildings.Controls.OBC.CDL.Reals.Switch swi12 "Increase cooling setpoint when the zone is continuously unpopulated" annotation (Placement(transformation(extent={{160,-280},{180,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi13 + Buildings.Controls.OBC.CDL.Reals.Switch swi13 "Decrease heating setpoint when the zone is continuously unpopulated" annotation (Placement(transformation(extent={{160,-320},{180,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi14 + Buildings.Controls.OBC.CDL.Reals.Switch swi14 "Switch to TWinOpeCooSet when window is open" annotation (Placement(transformation(extent={{-180,-460},{-160,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi15 + Buildings.Controls.OBC.CDL.Reals.Switch swi15 "Switch to TWinOpeHeaSet when window is open" annotation (Placement(transformation(extent={{-60,-460},{-40,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi16 + Buildings.Controls.OBC.CDL.Reals.Switch swi16 "Generate level 4 alarm when window is open during modes other than occupied" annotation (Placement(transformation(extent={{-100,-420},{-80,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi17 + Buildings.Controls.OBC.CDL.Reals.Switch swi17 "If it is occupied mode, cooling setpoint should be limited" annotation (Placement(transformation(extent={{-180,-550},{-160,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi18 + Buildings.Controls.OBC.CDL.Reals.Switch swi18 "If it is occupied mode, heating setpoint should be limited" annotation (Placement(transformation(extent={{-180,-610},{-160,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi19 + Buildings.Controls.OBC.CDL.Reals.Switch swi19 "If there is occupancy sensor, update heating setpoint according to the occupancy" annotation (Placement(transformation(extent={{220,-320},{240,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi20 + Buildings.Controls.OBC.CDL.Reals.Switch swi20 "If there is occupancy sensor, update cooling setpoint according to the occupancy" annotation (Placement(transformation(extent={{220,-280},{240,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi21 + Buildings.Controls.OBC.CDL.Reals.Switch swi21 "If there is window status sensor, update heating setpoint according to the window status" annotation (Placement(transformation(extent={{160,-480},{180,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi22 + Buildings.Controls.OBC.CDL.Reals.Switch swi22 "If there is window status sensor, update cooling setpoint according to the window status" annotation (Placement(transformation(extent={{100,-460},{120,-440}}))); Buildings.Controls.OBC.CDL.Integers.Equal intEqu7 @@ -521,17 +521,17 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal intEqu5 "Check if the cooling demand limit level is level 3" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real inputs" annotation (Placement(transformation(extent={{120,118},{140,138}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add real inputs" annotation (Placement(transformation(extent={{120,40},{140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add real inputs" annotation (Placement(transformation(extent={{160,80},{180,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add6 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add6 "Add real inputs" annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add7 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add7 "Add real inputs" annotation (Placement(transformation(extent={{120,-180},{140,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add8 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add8 "Add real inputs" annotation (Placement(transformation(extent={{160,-140},{180,-120}}))); Buildings.Controls.OBC.CDL.Logical.Not winOpe if have_winSen "Window is open" annotation (Placement(transformation(extent={{-380,-420},{-360,-400}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Alarms.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Alarms.mo index 3e80c9ad76a..1c2acbef392 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Alarms.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Alarms.mo @@ -5,10 +5,10 @@ model Alarms "Validate block for generating alarms" final have_CO2Sen=true) "Block that generates alarms" annotation (Placement(transformation(extent={{100,20},{120,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=7200) "Generate ramp output" annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.75) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.75) "Check if input is greater than 0.75" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt( @@ -18,15 +18,15 @@ model Alarms "Validate block for generating alarms" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=295.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin zonTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin zonTem( final amplitude=8, final freqHz=1/7200, final offset=273.15 + 15) "Zone temperature" @@ -36,7 +36,7 @@ model Alarms "Validate block for generating alarms" final width=0.05) "Generate signal indicating suppressing status" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin CO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin CO2( final amplitude=500, final freqHz=1/7200, final offset=600) "CO2 concentration" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ControlLoops.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ControlLoops.mo index bb7aaf2648b..33a4a1f48a0 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ControlLoops.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ControlLoops.mo @@ -4,15 +4,15 @@ model ControlLoops Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops conLoo "Heating and cooling loop" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin zonTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin zonTem( final amplitude=8, final freqHz=1/7200, final offset=273.15 + 18) "Zone temperature" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Setpoints.mo index 4422af0b942..4f0bf29dea1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/Setpoints.mo @@ -6,26 +6,26 @@ model Setpoints "Validate block for zone set point" final have_winSen=true) "Block that determines the thermal zone setpoints" annotation (Placement(transformation(extent={{110,40},{130,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetUno( final k=287.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin cooSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooSetAdj( final freqHz=1/28800) "Cooling setpoint adjustment" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin heaSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin heaSetAdj( final freqHz=1/28800, final amplitude=0.5) "Heating setpoint adjustment" @@ -38,11 +38,11 @@ model Setpoints "Validate block for zone set point" final k=0) "Heating demand limit level" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=28800) "Generate ramp output" annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.75) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.75) "Check if input is greater than 0.75" annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt( @@ -61,13 +61,13 @@ model Setpoints "Validate block for zone set point" annotation (Placement(transformation(extent={{60,10},{80,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerAdj( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ZoneStates.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ZoneStates.mo index 8499623fc82..b24d1ee9a81 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ZoneStates.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/Validation/ZoneStates.mo @@ -2,13 +2,13 @@ within Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.Validation; model ZoneStates "Validation models of determining zone state" Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ZoneStates zonSta "Zone state" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uCoo( final period=2, final shift=1, final offset=0, final amplitude=1) "Cooling control signal" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uHea( final period=2, final shift=2, final offset=0, diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ZoneStates.mo b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ZoneStates.mo index e0e9532c23b..98a7f4f54c8 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ZoneStates.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ThermalZones/ZoneStates.mo @@ -40,22 +40,22 @@ protected annotation (Placement(transformation(extent={{70,-80},{90,-60}}))); Buildings.Controls.OBC.CDL.Logical.And isHea "In heating state if both conditions are true" annotation (Placement(transformation(extent={{-72,30},{-52,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUHea( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysUHea( final uLow=uLow, final uHigh=uHigh) "Check if it is in heating state" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUCoo( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysUCoo( final uLow=uLow, final uHigh=uHigh) "Check if it is in cooling state" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract uHeaMinUCoo + Buildings.Controls.OBC.CDL.Reals.Subtract uHeaMinUCoo "Difference between uHea and uCoo" annotation (Placement(transformation(extent={{-130,0},{-110,20}}))); Buildings.Controls.OBC.CDL.Logical.And isCoo "In cooling state if both inputs are true" annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysU( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysU( final uLow=-uLow, final uHigh=uLow) "Check if heating control signal is bigger than cooling control signal" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Setpoints.mo index 5e4d0e11d9c..70d16027469 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Setpoints.mo @@ -139,17 +139,17 @@ protected final realFalse=zonDisEff_heat) "Air distribution effectiveness" annotation (Placement(transformation(extent={{-180,-320},{-160,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Line lin if have_CO2Sen "CO2 control loop" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) if have_CO2Sen "Constant zero" annotation (Placement(transformation(extent={{-280,-100},{-260,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) if have_CO2Sen "Constant one" annotation (Placement(transformation(extent={{-220,-100},{-200,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-200) if have_CO2Sen "Lower threshold of CO2 setpoint" annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); @@ -159,30 +159,30 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea if have_CO2Sen "Convert boolean to real" annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply co2Con if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Multiply co2Con if have_CO2Sen "Corrected CO2 control loop output" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line occMinAirSet if have_CO2Sen and not have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Line occMinAirSet if have_CO2Sen and not have_SZVAV "Modified occupied minimum airflow setpoint" annotation (Placement(transformation(extent={{-20,-130},{0,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonMinFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonMinFlo( final k=VMin_flow) if not have_SZVAV "Zone minimum airflow setpoint Vmin" annotation (Placement(transformation(extent={{-280,60},{-260,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonCooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonCooMaxFlo( final k=VCooMax_flow) if have_CO2Sen and not have_SZVAV "Maximum cooling airflow setpoint" annotation (Placement(transformation(extent={{-280,-160},{-260,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Line popBreOutAir if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Line popBreOutAir if have_CO2Sen "Modified population componenet of the required breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-20,-190},{0,-170}}))); Buildings.Controls.OBC.CDL.Integers.Equal inCooSta if have_CO2Sen and have_parFanPowUni "Check if it is in cooling state" annotation (Placement(transformation(extent={{-220,-230},{-200,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch maxFloCO2 if have_CO2Sen and have_parFanPowUni + Buildings.Controls.OBC.CDL.Reals.Switch maxFloCO2 if have_CO2Sen and have_parFanPowUni "Maximum airflow set point for CO2" annotation (Placement(transformation(extent={{-160,-230},{-140,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difCooMax if have_CO2Sen and have_parFanPowUni + Buildings.Controls.OBC.CDL.Reals.Subtract difCooMax if have_CO2Sen and have_parFanPowUni "Maximum cooling airflw set point minus parallel fan airflow" annotation (Placement(transformation(extent={{-220,-270},{-200,-250}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 @@ -198,22 +198,22 @@ protected final k=permit_occStandby) if have_occSen "Permit occupied-standby mode" annotation (Placement(transformation(extent={{-260,120},{-240,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-20,270},{0,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch modPopBreAir + Buildings.Controls.OBC.CDL.Reals.Switch modPopBreAir "Modified popuplation component of the breathing zone airflow" annotation (Placement(transformation(extent={{180,280},{200,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch modAreBreAir + Buildings.Controls.OBC.CDL.Reals.Switch modAreBreAir "Modified area component of the breathing zone airflow" annotation (Placement(transformation(extent={{140,250},{160,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch occMinAir if not + Buildings.Controls.OBC.CDL.Reals.Switch occMinAir if not have_SZVAV "Occupied minimum airflow setpoint" annotation (Placement(transformation(extent={{80,220},{100,240}}))); Buildings.Controls.OBC.CDL.Logical.Not notOcc if have_occSen "Not occupied" annotation (Placement(transformation(extent={{-280,160},{-260,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch unpPopBreAir + Buildings.Controls.OBC.CDL.Reals.Switch unpPopBreAir "Population component of the required breathing zone outdoor airflow when it is unpopulated" annotation (Placement(transformation(extent={{140,160},{160,180}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( @@ -221,34 +221,34 @@ protected final realFalse=1) if have_occSen "Convert boolean to real" annotation (Placement(transformation(extent={{-220,120},{-200,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply unPopAreBreAir if have_occSen + Buildings.Controls.OBC.CDL.Reals.Multiply unPopAreBreAir if have_occSen "Area component of the required breathing zone outdoor airflow when it is unpopulated" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply unpMinZonFlo if have_occSen and not have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Multiply unpMinZonFlo if have_occSen and not have_SZVAV "Minimum zone airflow when it is unpopulated" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch unpAreBreAir + Buildings.Controls.OBC.CDL.Reals.Switch unpAreBreAir "Area component of the required breathing zone outdoor airflow when it is unpopulated" annotation (Placement(transformation(extent={{80,130},{100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch unpMinZonAir if not have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Switch unpMinZonAir if not have_SZVAV "Minimum zone airflow when it is unpopulated" annotation (Placement(transformation(extent={{20,100},{40,120}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( final k=false) if not have_occSen "Constant false" annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1) if not have_CO2Sen and not have_SZVAV "Dummy gain for conditional input" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=1) if not have_CO2Sen "Dummy gain for conditional input" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add reqBreAir + Buildings.Controls.OBC.CDL.Reals.Add reqBreAir "Required breathing zone outdoor airflow" annotation (Placement(transformation(extent={{220,260},{240,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide minOA "Minimum outdoor airflow setpoint" + Buildings.Controls.OBC.CDL.Reals.Divide minOA "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{260,0},{280,20}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) @@ -259,28 +259,28 @@ protected if have_CO2Sen and have_parFanPowUni "Cooling state" annotation (Placement(transformation(extent={{-280,-250},{-260,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2( final k=0) if not have_occSen "Constant zero" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer3( final k=0) if not have_occSen or have_SZVAV "Constant zero" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater cooSup( + Buildings.Controls.OBC.CDL.Reals.Greater cooSup( final h=dTHys) "Check if it is supplying cooling" annotation (Placement(transformation(extent={{-220,-320},{-200,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2( final k=1) if have_CO2Sen and not have_SZVAV and not have_parFanPowUni "Dummy gain for conditional input" annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desAreAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desAreAir( final k=VAreBreZon_flow) "Design area component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-180,250},{-160,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desPopAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desPopAir( final k=VPopBreZon_flow) "Design population component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-180,290},{-160,310}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Validation/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Validation/Setpoints.mo index 44a306dc1f5..7878e44c25a 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Validation/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/ASHRAE62_1/Validation/Setpoints.mo @@ -48,11 +48,11 @@ model Setpoints "Validate the outdoor airflow setpoint according to the ASHRAE 6 final VMin_flow=0.018) "Setpoints of a zone with CO2 sensor and single zone VAV AHU" annotation (Placement(transformation(extent={{180,-20},{200,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=7200) "Generate ramp output" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.75) "Check if input is greater than 0.75" annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); @@ -63,12 +63,12 @@ model Setpoints "Validate the outdoor airflow setpoint according to the ASHRAE 6 final integerFalse=2) "Convert boolean input to integer output" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin zonTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin zonTem( final amplitude=8, final freqHz=1/7200, final offset=273.15 + 15) "Zone temperature" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disTem( final amplitude=-5, final freqHz=1/7200, final offset=273.15 + 20) "Discharge air temperature" @@ -82,12 +82,12 @@ model Setpoints "Validate the outdoor airflow setpoint according to the ASHRAE 6 final width=0.8) "Occupancy status" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp co2Con( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp co2Con( final height=300, final duration=7200, offset=800) "CO2 concentration" annotation (Placement(transformation(extent={{-80,-140},{-60,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( final height=2.6, final duration=7200, offset=0.6) "Generate ramp output" @@ -95,12 +95,12 @@ model Setpoints "Validate the outdoor airflow setpoint according to the ASHRAE 6 Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real input to integer output" annotation (Placement(transformation(extent={{80,120},{100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final amplitude=0.01, final freqHz=1/7200, final offset=0.008) "Parallel fan flow rate" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set( final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Setpoints.mo index 633cdb4bb57..5c8870313e1 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Setpoints.mo @@ -98,50 +98,50 @@ block Setpoints iconTransformation(extent={{100,-110},{140,-70}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=0.25) "Gain factor" annotation (Placement(transformation(extent={{-100,220},{-80,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Find the larger input value" annotation (Placement(transformation(extent={{-180,80},{-160,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonOccOAMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonOccOAMin( final k=VOccMin_flow) "Zone minimum outdoor airflow for occupants" annotation (Placement(transformation(extent={{-280,320},{-260,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonAreOAMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonAreOAMin( final k=VAreMin_flow) "Zone minimum outdoor airflow for building area" annotation (Placement(transformation(extent={{-280,270},{-260,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonAbsMin + Buildings.Controls.OBC.CDL.Reals.Switch zonAbsMin "Zone absolute outdoor air minimum flow" annotation (Placement(transformation(extent={{40,240},{60,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-100,270},{-80,290}}))); Buildings.Controls.OBC.CDL.Logical.Not notOcc "Not occupied" annotation (Placement(transformation(extent={{-180,200},{-160,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonAbsMin1 + Buildings.Controls.OBC.CDL.Reals.Switch zonAbsMin1 "Zone absolute outdoor air minimum flow" annotation (Placement(transformation(extent={{-20,200},{0,220}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant havCO2Sen( final k=have_CO2Sen) "Check if the zone has CO2 sensor" annotation (Placement(transformation(extent={{-260,160},{-240,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonAbsMin2 + Buildings.Controls.OBC.CDL.Reals.Switch zonAbsMin2 "Zone absolute outdoor air minimum flow" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonDesMin + Buildings.Controls.OBC.CDL.Reals.Switch zonDesMin "Zone design outdoor air minimum flow" annotation (Placement(transformation(extent={{40,120},{60,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonDesMin1 + Buildings.Controls.OBC.CDL.Reals.Switch zonDesMin1 "Zone design outdoor air minimum flow" annotation (Placement(transformation(extent={{-20,100},{0,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonOccMin if not have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Switch zonOccMin if not have_SZVAV "Zone occupied minimum flow" annotation (Placement(transformation(extent={{240,50},{260,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch zonOccMin1 if not have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Switch zonOccMin1 if not have_SZVAV "Zone occupied minimum flow" annotation (Placement(transformation(extent={{180,30},{200,50}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( @@ -152,39 +152,39 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal inOccMod if have_CO2Sen "Check if it is in occupied mode" annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar(final p=-200) + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar(final p=-200) if have_CO2Sen "Lower threshold of CO2 setpoint" annotation (Placement(transformation(extent={{-220,-60},{-200,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Line lin if have_CO2Sen "CO2 control loop" annotation (Placement(transformation(extent={{-160,-80},{-140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,-110},{-260,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,-110},{-200,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply co2Con if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Multiply co2Con if have_CO2Sen "Corrected CO2 control loop output" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea if have_CO2Sen "Convert boolean to real" annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line zonOccMin2 + Buildings.Controls.OBC.CDL.Reals.Line zonOccMin2 if have_CO2Sen and have_typTerUni "Zone occupied minimum flow when the system has typical terminal units" annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonMinFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonMinFlo( final k=VMin_flow) "Zone minimum airflow" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonCooMaxFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonCooMaxFlo( final k=VCooMax_flow) if have_CO2Sen and (have_typTerUni or have_parFanPowUni) "Zone cooling maximum airflow" annotation (Placement(transformation(extent={{-280,-158},{-260,-138}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal( final k=0.5) if have_CO2Sen and (have_typTerUni or have_parFanPowUni) "Constant value" annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); @@ -197,19 +197,19 @@ protected if have_CO2Sen and have_parFanPowUni "Check if it is in cooling state" annotation (Placement(transformation(extent={{-220,-220},{-200,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difCooMax + Buildings.Controls.OBC.CDL.Reals.Subtract difCooMax if have_CO2Sen and have_parFanPowUni "Maximum cooling airflw set point minus parallel fan airflow" annotation (Placement(transformation(extent={{-220,-260},{-200,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch maxFloCO2 + Buildings.Controls.OBC.CDL.Reals.Switch maxFloCO2 if have_CO2Sen and have_parFanPowUni "Maximum airflow set point for CO2" annotation (Placement(transformation(extent={{-160,-220},{-140,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Line zonOccMin3 + Buildings.Controls.OBC.CDL.Reals.Line zonOccMin3 if have_CO2Sen and have_parFanPowUni "Zone occupied minimum flow when the system has parallel fan-powered terminal unit" annotation (Placement(transformation(extent={{120,-200},{140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Line zonOccMin4 if have_SZVAV + Buildings.Controls.OBC.CDL.Reals.Line zonOccMin4 if have_SZVAV "Zone minimum outdoor flow when it is the single zone VAV system" annotation (Placement(transformation(extent={{120,-310},{140,-290}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( @@ -221,15 +221,15 @@ protected final k=true) if not have_occSen "Constant true" annotation (Placement(transformation(extent={{-280,220},{-260,240}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=1) if not have_CO2Sen "Dummy gain for conditional input" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one2(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one2(final k=1) if not have_CO2Sen "Constant one" annotation (Placement(transformation(extent={{-80,-270},{-60,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer3(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer3(final k=0) if not have_CO2Sen "Constant zero" annotation (Placement(transformation(extent={{200,-90},{220,-70}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Validation/Setpoints.mo b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Validation/Setpoints.mo index 314ae985830..c0a283c12c5 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Validation/Setpoints.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/VentilationZones/Title24/Validation/Setpoints.mo @@ -48,11 +48,11 @@ model Setpoints "Validate the outdoor airflow setpoint according to the Title 24 final VMin_flow=0.018) "Setpoints of a zone with CO2 sensor and single zone VAV AHU" annotation (Placement(transformation(extent={{180,-20},{200,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=7200) "Generate ramp output" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.75) "Check if input is greater than 0.75" annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); @@ -72,12 +72,12 @@ model Setpoints "Validate the outdoor airflow setpoint according to the Title 24 final width=0.8) "Occupancy status" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp co2Con( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp co2Con( final height=300, final duration=7200, offset=800) "CO2 concentration" annotation (Placement(transformation(extent={{-80,-140},{-60,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( final height=2.6, final duration=7200, offset=0.6) "Generate ramp output" @@ -85,12 +85,12 @@ model Setpoints "Validate the outdoor airflow setpoint according to the Title 24 Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real input to integer output" annotation (Placement(transformation(extent={{80,120},{100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin parFanFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin parFanFlo( final amplitude=0.01, final freqHz=1/7200, final offset=0.008) "Parallel fan flow rate" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant CO2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant CO2Set( final k=894) "CO2 concentration setpoint" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo index b6e345e9de9..369e216cc49 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/GroupStatus.mo @@ -166,11 +166,11 @@ block GroupStatus "Block that outputs the zone group status" Buildings.Controls.OBC.CDL.Logical.Not not1[nGroZon] "Logical not" annotation (Placement(transformation(extent={{-60,-310},{-40,-290}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MultiMax cooDowTim( + Buildings.Controls.OBC.CDL.Reals.MultiMax cooDowTim( final nin=nGroZon) "Longest cooldown time" annotation (Placement(transformation(extent={{60,170},{80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax warUpTim( + Buildings.Controls.OBC.CDL.Reals.MultiMax warUpTim( final nin=nGroZon) "Longest warm up time" annotation (Placement(transformation(extent={{60,130},{80,150}}))); @@ -182,11 +182,11 @@ protected final nin=nGroZon) "Check if there is any zone that the zone temperature is higher than its occupied cooling setpoint" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax maxTem( + Buildings.Controls.OBC.CDL.Reals.MultiMax maxTem( final nin=nGroZon) "Maximum zone temperature in the zone group" annotation (Placement(transformation(extent={{20,-230},{40,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin minTem( + Buildings.Controls.OBC.CDL.Reals.MultiMin minTem( final nin=nGroZon) "Minimum zone temperature in the zone group" annotation (Placement(transformation(extent={{20,-270},{40,-250}}))); @@ -210,44 +210,44 @@ protected final nin=nGroZon) "Check if all zones have ended the setup mode" annotation (Placement(transformation(extent={{18,-190},{38,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumUnoHea( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumUnoHea( final nin=nGroZon) "Sum of all zones unoccupied heating setpoint" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difUnoHea + Buildings.Controls.OBC.CDL.Reals.Subtract difUnoHea "Difference between unoccupied heating setpoint and zone temperature" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 "Average difference" + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Average difference" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant totZon( final k=nBuiZon) "Total number of zones" annotation (Placement(transformation(extent={{-60,110},{-40,130}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Convert integer to real" annotation (Placement(transformation(extent={{-20,110},{0,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumUnoCoo( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumUnoCoo( final nin=nGroZon) "Sum of all zones unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumTem( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumTem( final nin=nGroZon) "Sum of all zones temperature" annotation (Placement(transformation(extent={{-60,-210},{-40,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difUnoCoo + Buildings.Controls.OBC.CDL.Reals.Subtract difUnoCoo "Difference between unoccupied cooling setpoint and zone temperature" annotation (Placement(transformation(extent={{-10,-130},{10,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div2 "Average difference" + Buildings.Controls.OBC.CDL.Reals.Divide div2 "Average difference" annotation (Placement(transformation(extent={{40,-140},{60,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the group should run in setback mode" annotation (Placement(transformation(extent={{80,-30},{100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the group should run in setup mode" annotation (Placement(transformation(extent={{80,-140},{100,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin minToNexOcc( + Buildings.Controls.OBC.CDL.Reals.MultiMin minToNexOcc( final nin=nGroZon) "Minimum time to next occupied period" annotation (Placement(transformation(extent={{-40,210},{-20,230}}))); @@ -274,7 +274,7 @@ protected final realFalse=1) "When any zone becomes occpuied, output zero" annotation (Placement(transformation(extent={{20,230},{40,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "When it is occupied, output zero" annotation (Placement(transformation(extent={{80,210},{100,230}}))); Buildings.Controls.OBC.CDL.Routing.BooleanVectorFilter zonOccFil( diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo index f70f933665c..2c186397ac5 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/OperationMode.mo @@ -89,16 +89,16 @@ block OperationMode "Block that outputs the operation mode" iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant occModInd( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occModInd( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "Occupied mode " annotation (Placement(transformation(extent={{100,340},{120,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant unoPerInd(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant unoPerInd(final k=0.0) "Index to indicate unoccupied period" annotation (Placement(transformation(extent={{0,340},{20,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch corCooDowTim "Corrected cool down period" + Buildings.Controls.OBC.CDL.Reals.Switch corCooDowTim "Corrected cool down period" annotation (Placement(transformation(extent={{-220,240},{-200,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch corWarUpTim "Corrected warm-up period" + Buildings.Controls.OBC.CDL.Reals.Switch corWarUpTim "Corrected warm-up period" annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( final t=4) "Check if the number of cold zones is not less than than 5" @@ -112,49 +112,49 @@ protected Buildings.Controls.OBC.CDL.Logical.Latch lat2 "If all zone temperature are lower than unoccupied cooling setpoint by a given limit, then the setup mode should be off" annotation (Placement(transformation(extent={{-100,-200},{-80,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final pre_y_start=true, final uHigh=0, final uLow=-60) "Hysteresis that outputs if the maximum cool-down time is more than the allowed cool-down time" annotation (Placement(transformation(extent={{-260,240},{-240,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final pre_y_start=true, final uHigh=0, final uLow=-60) "Hysteresis that outputs if the maximum warm-up time is more than allowed warm-up time" annotation (Placement(transformation(extent={{-260,140},{-240,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub5 + Buildings.Controls.OBC.CDL.Reals.Subtract sub5 "Calculate differential between time-to-next-occupancy and the cool-down time" annotation (Placement(transformation(extent={{-160,240},{-140,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final pre_y_start=false, final uHigh=0, final uLow=-60) "Hysteresis to check if the cooldown mode could be activated" annotation (Placement(transformation(extent={{-120,240},{-100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys5( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys5( final pre_y_start=false, final uHigh=0, final uLow=-60) "Hysteresis to activate the warm-up model" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub6 + Buildings.Controls.OBC.CDL.Reals.Subtract sub6 "Calculate differential between time-to-next-occupancy and the warm-up time" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys9( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys9( final pre_y_start=false, final uLow=-0.1, final uHigh=0.1) "Hysteresis that outputs if any zone temperature is lower than freeze protection threshold temperature" annotation (Placement(transformation(extent={{-180,-100},{-160,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys10( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys10( final pre_y_start=false, final uLow=-0.1, final uHigh=0.1) "Hysteresis that outputs if all zone temperature are higher than threshold temperature of ending freeze protection" annotation (Placement(transformation(extent={{-180,-140},{-160,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxWarCooTime( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxWarCooTime( final k=preWarCooTim) "Allowed maximum warm-up or cool-down time" annotation (Placement(transformation(extent={{-340,190},{-320,210}}))); @@ -249,16 +249,16 @@ protected Buildings.Controls.OBC.CDL.Logical.Or or6 "Check if it is in any of the 6 modes except unoccupied mode" annotation (Placement(transformation(extent={{40,-370},{60,-350}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between occupied mode index and unoccupied period index" annotation (Placement(transformation(extent={{160,310},{180,330}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "If the Cool-down, warm-up, or Occupied mode is on, then setback mode should not be activated." annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If the Cool-down, warm-up, or Occupied mode is on, then freeze protection setback mode should not be activated." annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "If the Cool-down, warm-up, or Occupied mode is on, then setup mode should not be activated." annotation (Placement(transformation(extent={{60,-200},{80,-180}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 "Logical not" @@ -276,13 +276,13 @@ protected final message="Level 4 alarm: window open during modes other than occupied mode") "Generate alarm message when window open during modes other than occupied mode" annotation (Placement(transformation(extent={{240,80},{260,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "If occupied mode is on, then cool down mode should not be activated" annotation (Placement(transformation(extent={{140,270},{160,290}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger setBacMod1 "Convert Real number to Integer number" annotation (Placement(transformation(extent={{180,270},{200,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "If occupied mode is on, then warm-up mode should not be activated." annotation (Placement(transformation(extent={{140,180},{160,200}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger setBacMod2 @@ -302,18 +302,18 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal allHot "Check if all zones are hot zone" annotation (Placement(transformation(extent={{-280,-230},{-260,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant actFreProTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant actFreProTem( final k=TZonFreProOn) "Threshold temperature to activate the freeze protection mode" annotation (Placement(transformation(extent={{-280,-110},{-260,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant endFreProTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant endFreProTem( final k=TZonFreProOff) "Threshold temperature to end the freeze protection mode" annotation (Placement(transformation(extent={{-280,-150},{-260,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate differential between minimum zone temperature and freeze protection threshold temperature" annotation (Placement(transformation(extent={{-220,-100},{-200,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate differential between maximum zone temperature and threshold temperature of ending freeze protection" annotation (Placement(transformation(extent={{-220,-140},{-200,-120}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 @@ -322,10 +322,10 @@ protected Buildings.Controls.OBC.CDL.Logical.Or or7 "Enough hot zone or the high average zone temperature" annotation (Placement(transformation(extent={{-160,-200},{-140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate the difference between maximum cool down time and the allowed maximum cool down time" annotation (Placement(transformation(extent={{-300,240},{-280,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate the differential between maximum warm-up time and the allowed maximum warm-up time" annotation (Placement(transformation(extent={{-300,140},{-280,160}}))); Buildings.Controls.OBC.CDL.Logical.Edge endSetBac diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/GroupStatus.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/GroupStatus.mo index 00207ff0a3b..36a7df02bf2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/GroupStatus.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/GroupStatus.mo @@ -7,11 +7,11 @@ model GroupStatus final nGroZon=2, final zonGroMsk={true,false,true}) "Calculate zone group status" annotation (Placement(transformation(extent={{120,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim[3]( final k={1800,1700,1900}) "Warm-up time" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim[3]( final k={1600,1700,1800}) "Cooling down time" annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); @@ -21,19 +21,19 @@ model GroupStatus final shift={150,130,120}) "Window status" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-50,-300}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( final offset=0, final height=6.2831852, final duration=24*3600) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-140,-220},{-120,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin2 + Buildings.Controls.OBC.CDL.Reals.Sin sin2 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-100,-220},{-80,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=6) "Current zone temperature" annotation (Placement(transformation(extent={{-60,-220},{-40,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=273.15 + 22.5) "Current zone temperature" annotation (Placement(transformation(extent={{-20,-220},{0,-200}}))); @@ -60,10 +60,10 @@ model GroupStatus annotation (Placement(transformation(extent={{-20,130},{0,150}}))); Buildings.Controls.OBC.CDL.Logical.Timer tim3 "Time after input becomes true" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addPar1 + Buildings.Controls.OBC.CDL.Reals.Subtract addPar1 "Time to occupied period" annotation (Placement(transformation(extent={{20,130},{40,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addPar3 + Buildings.Controls.OBC.CDL.Reals.Subtract addPar3 "Time to occupied period" annotation (Placement(transformation(extent={{20,10},{40,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lowOccHea[3]( @@ -84,7 +84,7 @@ model GroupStatus final period=fill(3600, 3)) "Lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-130,-80}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetOff[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSetOff[3]( final k={285.15,282.15,283.15}) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); @@ -97,7 +97,7 @@ model GroupStatus final k=fill(false, 3)) "HIgher than unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-90,-140}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetOff[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSetOff[3]( final k={303.15,304.15,305.15}) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); @@ -105,12 +105,12 @@ model GroupStatus final k=fill(false,3)) "End setup mode" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-90,-180}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse zonTem3( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse zonTem3( final amplitude=7, final period=600, final offset=273.15 + 19) "Zone 3 temperature" annotation (Placement(transformation(extent={{-80,-280},{-60,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonTem2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonTem2( final k=273.15 + 20) "Zone 2 temperature" annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); @@ -121,14 +121,14 @@ model GroupStatus Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant tNexOcc2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant tNexOcc2( final k=0) "Zone 2 next occupancy time" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=1800) "Constant" annotation (Placement(transformation(extent={{-20,170},{0,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=2100) "Constant" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/OperationMode.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/OperationMode.mo index 9a31abb9c1f..62a4e58f06f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/OperationMode.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/OperationMode.mo @@ -5,73 +5,73 @@ model OperationMode "Validate block for selecting operation mode" opeModSel(final nZon=1) "Operation mode selection" annotation (Placement(transformation(extent={{120,80},{140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( final height=6.2831852, final duration=172800) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=295.65) "Zone temperarure" annotation (Placement(transformation(extent={{-48,40},{-28,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetUno( final k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-160,120},{-140,140}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant cloWin( final k=0) "No window is open" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-150,0}))); - Buildings.Controls.OBC.CDL.Continuous.Greater lowThaHeaSet + Buildings.Controls.OBC.CDL.Reals.Greater lowThaHeaSet "True when the zone temperature is lower than the occupied heating setpoint" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater higThaCooSet + Buildings.Controls.OBC.CDL.Reals.Greater higThaCooSet "True when the zone temperature is higher than the occupied cooling setpoint" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2 + Buildings.Controls.OBC.CDL.Reals.Greater greEqu2 "True when the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3 + Buildings.Controls.OBC.CDL.Reals.Greater greEqu3 "True when the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); Buildings.Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule" annotation (Placement(transformation(extent={{-120,140},{-100,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dif2 + Buildings.Controls.OBC.CDL.Reals.Subtract dif2 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uLow=-0.5, final uHigh=0.5) "Hysteresis that outputs if the zone temperature is higher than its unoccupied heating setpoint by a given limit" annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dif1 + Buildings.Controls.OBC.CDL.Reals.Subtract dif1 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( final uLow=-0.5, final uHigh=0.5) "Hysteresis that outputs if the zone temperature is lower than its unoccupied cooling setpoint by a given limit" annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=14.5) "Gain factor" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); equation diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatus.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatus.mo index 64e3356305d..78638701e46 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatus.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatus.mo @@ -10,10 +10,10 @@ model ZoneStatus final have_winSen=true) "Status of zone when there is window operation sensor" annotation (Placement(transformation(extent={{80,-20},{100,8}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse uWinSta( @@ -22,34 +22,34 @@ model ZoneStatus final shift=1800) "Window on/off status" annotation (Placement(transformation(extent={{-10,-10},{10,10}},origin={-70,-10}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( final offset=0, final height=6.2831852, final duration=24*3600) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-110,10},{-90,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin2 + Buildings.Controls.OBC.CDL.Reals.Sin sin2 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-70,10},{-50,30}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=273.15 + 22.5) "Current zone temperature" annotation (Placement(transformation(extent={{-10,10},{10,30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=12.5) "Gain factor" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSetUno( final k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatusDuplicator.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatusDuplicator.mo index 0c512adfdb5..f27b765c839 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatusDuplicator.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/Validation/ZoneStatusDuplicator.mo @@ -5,7 +5,7 @@ model ZoneStatusDuplicator Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatusDuplicator zonStaDup( final nZon=5, final nZonGro=2) "Zone status duplicator" annotation (Placement(transformation(extent={{0,-40},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant reaInp[6,5]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant reaInp[6,5]( final k=fill({1,2,3,4,5}, 6)) "Real inputs" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneGroupSystem.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneGroupSystem.mo index a62fea43f03..dedc80239d2 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneGroupSystem.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneGroupSystem.mo @@ -12,7 +12,7 @@ block ZoneGroupSystem Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea[nGro] "Convert integer to real" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin(nin=nGro) + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin(nin=nGro) "Find the highest priotity operating mode" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger ahuMod diff --git a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneStatus.mo b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneStatus.mo index 7e32edd1081..8b995a51f21 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneStatus.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/ZoneGroups/ZoneStatus.mo @@ -104,42 +104,42 @@ block ZoneStatus "Block that outputs zone temperature status" iconTransformation(extent={{100,-150},{140,-110}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Decide if the cool down time of one zone should be ignored: if window is open, then output zero, otherwise, output cool-down time from optimal cool-down block" annotation (Placement(transformation(extent={{120,210},{140,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Decide if the warm-up time of one zone should be ignored: if window is open, then output zero, otherwise, output warm-up time from optimal warm-up block" annotation (Placement(transformation(extent={{120,170},{140,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Calculate difference between zone temperature and the occupied heating setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the system should run in warm-up mode" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and the occupied cooling setpoint" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the system should run in cool-down mode" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub5 + Buildings.Controls.OBC.CDL.Reals.Subtract sub5 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-40,-200},{-20,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys5( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys5( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the zone temperature is higher than unoccupied cooling setpoint" @@ -152,18 +152,18 @@ protected final k=false) if not have_winSen "Constant false" annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uLow=0, final uHigh=bouLim) "Hysteresis that outputs if the zone temperature is higher than its unoccupied heating setpoint by a given limit" annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-40,-240},{-20,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final uLow=0, final uHigh=bouLim) "Hysteresis that outputs if the zone temperature is lower than its unoccupied cooling setpoint by a given limit" diff --git a/Buildings/Controls/OBC/ASHRAE/G36/package.mo b/Buildings/Controls/OBC/ASHRAE/G36/package.mo index 97f98fd3eaf..1e777dafa1f 100644 --- a/Buildings/Controls/OBC/ASHRAE/G36/package.mo +++ b/Buildings/Controls/OBC/ASHRAE/G36/package.mo @@ -39,8 +39,8 @@ actuator signals for the terminal unit dampers.

      Implementation of PID controllers

      For the PID controllers, the implementation in - -Buildings.Controls.OBC.CDL.Continuous.PID + +Buildings.Controls.OBC.CDL.Reals.PID is used. Hence, the PID controllers are in the standard form

      diff --git a/Buildings/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo b/Buildings/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo index 78e15cdb4e8..453ebd5ded9 100644 --- a/Buildings/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo +++ b/Buildings/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo @@ -4,13 +4,13 @@ model IntegerToReal Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Block that converts Integer to Real signal" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo b/Buildings/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo index 59820bf8d36..0ad4bd5b034 100644 --- a/Buildings/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo +++ b/Buildings/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo @@ -4,7 +4,7 @@ model RealToInteger Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Block that converts Real to Integer signal" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo index 29763d814f6..73b47e0d3df 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo @@ -5,13 +5,13 @@ model FirstOrderHold samplePeriod=0.2) "Block that first order hold of a sampled-data system" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Cos cos1 + Buildings.Controls.OBC.CDL.Reals.Cos cos1 "Block that outputs the cosine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo index e709c312833..853c987c01e 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo @@ -5,13 +5,13 @@ model Sampler samplePeriod=0.2) "Ideal sampler of a continuous signal" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo index 542dbfd73b8..237eed24174 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo @@ -4,13 +4,13 @@ model TriggeredMax Buildings.Controls.OBC.CDL.Discrete.TriggeredMax triggeredMax "Output the maximum, absolute value of a continuous signal at trigger instants" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo index 43f4a860adb..02c6b52f522 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo @@ -1,7 +1,7 @@ within Buildings.Controls.OBC.CDL.Discrete.Examples; model TriggeredMovingMean "Validation model for the TriggeredMovingMean block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( freqHz=1/8, phase=0.5235987755983, startTime=-0.5) diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo index 2d8756bbe92..26f4db7c507 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo @@ -1,13 +1,13 @@ within Buildings.Controls.OBC.CDL.Discrete.Examples; model TriggeredSampler "Example model for the TriggeredSampler block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo index 50e915656f2..9e8fb3b0492 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo @@ -5,13 +5,13 @@ model UnitDelay samplePeriod=0.2) "Sample period of component" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo b/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo index bdfb0d5074c..784553d085e 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo @@ -5,13 +5,13 @@ model ZeroOrderHold samplePeriod=0.2) "Output the input signal with a zero order hold" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Cos cos1 + Buildings.Controls.OBC.CDL.Reals.Cos cos1 "Block that outputs the cosine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Abs.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Abs.mo index 3a0e7eeef3e..92608e2a937 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Abs.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Abs.mo @@ -4,13 +4,13 @@ model Abs Buildings.Controls.OBC.CDL.Integers.Abs abs1 "Block that outputs the absolute value of the input" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Add.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Add.mo index a222930fe47..1c0a812ce97 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Add.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Add.mo @@ -4,26 +4,26 @@ model Add Buildings.Controls.OBC.CDL.Integers.Add add1 "Block that outputs the sum of the two inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-0.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/AddParameter.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/AddParameter.mo index aadc5c5d529..1c7fb962b8e 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/AddParameter.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/AddParameter.mo @@ -4,13 +4,13 @@ model AddParameter "Validation model for the AddParameter block" "Block that outputs the sum of an input plus a parameter" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Change.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Change.mo index 2c15d8d88ae..f364ed1e606 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Change.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Change.mo @@ -4,7 +4,7 @@ model Change Buildings.Controls.OBC.CDL.Integers.Change cha "Check if the integer input changes value" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( offset=0, height=20, duration=1) @@ -16,7 +16,7 @@ model Change Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,-1; diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Equal.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Equal.mo index e1e6fe65b1b..9e61eea8653 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Equal.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Equal.mo @@ -10,7 +10,7 @@ model Equal Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; @@ -20,7 +20,7 @@ model Equal 1,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin1( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Greater.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Greater.mo index 897404f2596..cd3eb2fbd88 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Greater.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Greater.mo @@ -1,13 +1,13 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model Greater "Validation model for the Greater block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1.5, height=5.0) @@ -16,14 +16,14 @@ model Greater Buildings.Controls.OBC.CDL.Integers.Greater intGre "Block output true if input 1 is greater than input 2" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo index 5c6bcd06131..667984a13d3 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo @@ -10,7 +10,7 @@ model GreaterEqual Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,-1; @@ -20,7 +20,7 @@ model GreaterEqual 1,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin1( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo index c7ca7486082..59690b3a36d 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo @@ -1,7 +1,7 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model GreaterEqualThreshold "Validation model for the GreaterEqualThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) @@ -11,7 +11,7 @@ model GreaterEqualThreshold t=2) "Block output true if input is greater or equal to threshold value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo index 788bd5e7e82..b5234d81abf 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo @@ -1,7 +1,7 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model GreaterThreshold "Validation model for the GreaterThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) @@ -11,7 +11,7 @@ model GreaterThreshold t=2) "Block output true if input is greater than threshold value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Less.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Less.mo index b685323626f..9171c806996 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Less.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Less.mo @@ -10,7 +10,7 @@ model Less Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,-1; @@ -20,7 +20,7 @@ model Less 1,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin1( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqual.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqual.mo index 62c2bad4ed4..5a2a0068097 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqual.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqual.mo @@ -1,13 +1,13 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model LessEqual "Validation model for the LessEqual block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1.5, height=5.0) @@ -16,14 +16,14 @@ model LessEqual Buildings.Controls.OBC.CDL.Integers.LessEqual intLesEqu "Block output true if input 1 is less or equal to input 2" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo index 1b02d11e3f1..39e38575395 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo @@ -1,7 +1,7 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model LessEqualThreshold "Validation model for the LessEqualThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) @@ -11,7 +11,7 @@ model LessEqualThreshold t=2) "Block output true if input is less or equal to threshold value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo index dfe6762a628..7d253b9ca91 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo @@ -1,7 +1,7 @@ within Buildings.Controls.OBC.CDL.Integers.Validation; model LessThreshold "Validation model for the LessThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) @@ -11,7 +11,7 @@ model LessThreshold t=2) "Block output true if input is less than threshold value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Max.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Max.mo index ced0a21b652..3191477bef3 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Max.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Max.mo @@ -4,26 +4,26 @@ model Max Buildings.Controls.OBC.CDL.Integers.Max max1 "Block that outputs the largest inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1.5, height=5.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Min.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Min.mo index 496606ebba7..0d0c31a1915 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Min.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Min.mo @@ -4,26 +4,26 @@ model Min Buildings.Controls.OBC.CDL.Integers.Min min1 "Block that outputs the smallest inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=10.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1.5, height=5.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/MultiSum.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/MultiSum.mo index 06d7d4ca57d..79298f4ec7c 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/MultiSum.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/MultiSum.mo @@ -5,39 +5,39 @@ model MultiSum nin=3) "Block that outputs the sum of the inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-0.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( duration=1, height=7.0, offset=-1.5) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,30},{20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Multiply.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Multiply.mo index 89a60ec9f54..b47c8e793bf 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Multiply.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Multiply.mo @@ -9,7 +9,7 @@ model Multiply "Validation model for the Multiply block" Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,-1; @@ -19,7 +19,7 @@ model Multiply "Validation model for the Multiply block" 1,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin1( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Stage.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Stage.mo index 07ea92da8d6..7d29190738e 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Stage.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Stage.mo @@ -23,13 +23,13 @@ model Stage "Total number of enabled stages, with a hold duration of 1 second" annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( final duration=10, final height=1, final startTime=1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( final amplitude=0.5, final freqHz=1/5, final offset=0.5) diff --git a/Buildings/Controls/OBC/CDL/Integers/Validation/Subtract.mo b/Buildings/Controls/OBC/CDL/Integers/Validation/Subtract.mo index 683595ae54c..3f5c6fc5dbf 100644 --- a/Buildings/Controls/OBC/CDL/Integers/Validation/Subtract.mo +++ b/Buildings/Controls/OBC/CDL/Integers/Validation/Subtract.mo @@ -4,25 +4,25 @@ model Subtract "Validation model for the Subtract block" "Block that outputs the difference of the two inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-0.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 diff --git a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo index 4e99228f833..c8a7fbab3ce 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo @@ -5,7 +5,7 @@ model SampleTrigger period=0.5) "Block that generates sample trigger signal" annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( duration=5, offset=0, height=20) diff --git a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo index 20d65e9787a..7b57f15cfb4 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo @@ -5,7 +5,7 @@ model SampleTriggerNegativeStartTime period=0.5) "Block that generates sample trigger signal" annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( duration=5, offset=0, height=20, diff --git a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo index ca4364bd077..ffee36e43f7 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo @@ -5,7 +5,7 @@ model SampleTriggerPositiveStartTime period=0.5) "Block that generates sample trigger signal" annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( duration=5, offset=0, height=20, diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/Change.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/Change.mo index f25df1b4ee7..7355c3666bc 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/Change.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/Change.mo @@ -9,7 +9,7 @@ model Change Buildings.Controls.OBC.CDL.Logical.Change change "Outputs true if the input changes" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=5, offset=0, height=20) diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/Edge.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/Edge.mo index 20e65b90bb0..20c1aa79d01 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/Edge.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/Edge.mo @@ -9,7 +9,7 @@ model Edge Buildings.Controls.OBC.CDL.Logical.Edge edge1 "Outputs true if the input has a rising edge" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=5, offset=0, height=20) diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo index 496785b2901..6868effbe92 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo @@ -9,7 +9,7 @@ model FallingEdge Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg "Output true when input changes from true to false" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=5, offset=0, height=20) diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/OnOffController.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/OnOffController.mo index 0cd46b8b221..2171d1e786d 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/OnOffController.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/OnOffController.mo @@ -1,16 +1,16 @@ within Buildings.Controls.OBC.CDL.Logical.Validation; model OnOffController "Validation model for the OnOffController block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=5, offset=0, height=31.415926) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-76,-16},{-56,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-32,-16},{-12,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cons2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cons2( k=0.7) "Constant as source term" annotation (Placement(transformation(extent={{-32,18},{-12,38}}))); diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo index 8809d76e6e8..14159457a50 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo @@ -25,32 +25,32 @@ model VariablePulse period=900) "Variable pulse with width input changing between different positive values" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse conPul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse conPul( amplitude=0.65, width=0.8, period=4000) "Continuous pulse signal" annotation (Placement(transformation(extent={{20,50},{40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( k=0.75) "Constant" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( k=0) "Constant value" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse conPul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse conPul1( amplitude=0.65, width=0.85, period=3600, shift=360) "Continuous pulse signal" annotation (Placement(transformation(extent={{20,10},{40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( k=1) "Constant value" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse conPul2( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse conPul2( amplitude=0.5, width=0.5, period=3600, @@ -62,7 +62,7 @@ model VariablePulse period=900) "Variable pulse with constantly changing pulse width " annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=0.8, duration=900, startTime=300) diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo index 9769802a449..81dc19537a8 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo @@ -7,7 +7,7 @@ model VariablePulseMinHold minTruFalHol=1) "Variable pulse with constantly changing pulse width " annotation (Placement(transformation(extent={{10,-10},{30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse conPul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse conPul1( amplitude=0.4, width=0.4, period=4, diff --git a/Buildings/Controls/OBC/CDL/Logical/Validation/ZeroCrossing.mo b/Buildings/Controls/OBC/CDL/Logical/Validation/ZeroCrossing.mo index b8d4069c603..a5e34c7b5ed 100644 --- a/Buildings/Controls/OBC/CDL/Logical/Validation/ZeroCrossing.mo +++ b/Buildings/Controls/OBC/CDL/Logical/Validation/ZeroCrossing.mo @@ -1,13 +1,13 @@ within Buildings.Controls.OBC.CDL.Logical.Validation; model ZeroCrossing "Validation model for the zero crossing block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=5, offset=0, height=31.415926) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-82,-10},{-62,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-38,-10},{-18,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( @@ -18,7 +18,7 @@ model ZeroCrossing Buildings.Controls.OBC.CDL.Logical.ZeroCrossing zeroCrossing "Zero crossing block" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=5, offset=0, height=31.415926) diff --git a/Buildings/Controls/OBC/CDL/Logical/VariablePulse.mo b/Buildings/Controls/OBC/CDL/Logical/VariablePulse.mo index a3d87e55261..ff40dd040d3 100644 --- a/Buildings/Controls/OBC/CDL/Logical/VariablePulse.mo +++ b/Buildings/Controls/OBC/CDL/Logical/VariablePulse.mo @@ -38,13 +38,13 @@ protected Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam "Sample the input when there is value change" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Output the difference before and after sampling" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Output the absolute value change" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=deltaU, final h=0) "Check if there is a sufficiently large change in input value" diff --git a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo index b86064ec5b9..a9d3687e0fc 100644 --- a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo +++ b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo @@ -7,23 +7,23 @@ model DewPoint_TDryBulPhi Buildings.Controls.OBC.CDL.Psychrometrics.DewPoint_TDryBulPhi dewBulPhi1 "Model for dew point temperature" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=1, offset=0.001) "Relative humidity" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( k=273.15+29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDryBul2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDryBul2( duration=1, height=35, offset=273.15+2.0) "Dry bulb temperature" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant phi2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant phi2( k=0.4) "Relative humidity" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); diff --git a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo index 35f82b8659e..62e2c9678ed 100644 --- a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo +++ b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo @@ -4,13 +4,13 @@ model SpecificEnthalpy_TDryBulPhi Buildings.Controls.OBC.CDL.Psychrometrics.SpecificEnthalpy_TDryBulPhi hBulPhi "Model for specific enthalpy computation" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=1, offset=0.001) "Relative humidity" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( k=273.15+29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-64,24},{-44,44}}))); diff --git a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo index 6e713881510..850951a87a1 100644 --- a/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo +++ b/Buildings/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo @@ -8,20 +8,20 @@ model WetBulb_TDryBulPhi Buildings.Controls.OBC.CDL.Psychrometrics.WetBulb_TDryBulPhi wetBulPhi1 "Model for wet bulb temperature" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=0.95, offset=0.05) "Relative humidity" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( k=273.15+29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDryBul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDryBul1( duration=1, height=40, offset=273.15) "Dry bulb temperature" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant phi2(k=0.6) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant phi2(k=0.6) "Relative humidity" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); diff --git a/Buildings/Controls/OBC/CDL/Continuous/Abs.mo b/Buildings/Controls/OBC/CDL/Reals/Abs.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Abs.mo rename to Buildings/Controls/OBC/CDL/Reals/Abs.mo index c83f446aca1..ce1a9cd8f98 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Abs.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Abs.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Abs "Output the absolute value of the input" Interfaces.RealInput u diff --git a/Buildings/Controls/OBC/CDL/Continuous/Acos.mo b/Buildings/Controls/OBC/CDL/Reals/Acos.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Acos.mo rename to Buildings/Controls/OBC/CDL/Reals/Acos.mo index 871fe77f8cc..76b2657afbf 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Acos.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Acos.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Acos "Output the arc cosine of the input" Interfaces.RealInput u "Connector of Real input signal" @@ -52,7 +52,7 @@ Documentation(info=" Block that outputs y = acos(u), where u is an input.

      -\"acos.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Add.mo b/Buildings/Controls/OBC/CDL/Reals/Add.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Add.mo rename to Buildings/Controls/OBC/CDL/Reals/Add.mo index 89e21032f5a..8d06ccfa3c8 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Add.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Add.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Add "Output the sum of the two inputs" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/AddParameter.mo b/Buildings/Controls/OBC/CDL/Reals/AddParameter.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/AddParameter.mo rename to Buildings/Controls/OBC/CDL/Reals/AddParameter.mo index 0ad84aba366..55d72c8402f 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/AddParameter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/AddParameter.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block AddParameter "Output the sum of an input plus a parameter" parameter Real p diff --git a/Buildings/Controls/OBC/CDL/Continuous/Asin.mo b/Buildings/Controls/OBC/CDL/Reals/Asin.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Asin.mo rename to Buildings/Controls/OBC/CDL/Reals/Asin.mo index 48b30b9bdf4..8d7c6f14cfd 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Asin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Asin.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Asin "Output the arc sine of the input" Interfaces.RealInput u "Connector of Real input signal" @@ -52,7 +52,7 @@ Documentation(info=" Block that outputs y = asin(u), where u is an input.

      -\"asin.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Atan.mo b/Buildings/Controls/OBC/CDL/Reals/Atan.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Atan.mo rename to Buildings/Controls/OBC/CDL/Reals/Atan.mo index 19398619d37..d4717d7345e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Atan.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Atan.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Atan "Output the arc tangent of the input" Interfaces.RealInput u @@ -61,7 +61,7 @@ equation Block that outputs y = atan(u), where u is an input.

      -\"atan.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Atan2.mo b/Buildings/Controls/OBC/CDL/Reals/Atan2.mo similarity index 94% rename from Buildings/Controls/OBC/CDL/Continuous/Atan2.mo rename to Buildings/Controls/OBC/CDL/Reals/Atan2.mo index bbf29b76cf9..df3c3e227ca 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Atan2.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Atan2.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Atan2 "Output atan(u1/u2) of the inputs u1 and u2" Interfaces.RealInput u1 @@ -28,14 +28,14 @@ of the input u1 divided by the input u2. Atan2 uses the sign of u1 and u2 in order to construct the solution in the range -π ≤ y ≤ π, whereas - -Buildings.Controls.OBC.CDL.Continuous.Atan + +Buildings.Controls.OBC.CDL.Reals.Atan gives a solution in the range -π/2 ≤ y ≤ π/2.

      -\"atan2.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Average.mo b/Buildings/Controls/OBC/CDL/Reals/Average.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Average.mo rename to Buildings/Controls/OBC/CDL/Reals/Average.mo index 643c403b66c..65da68559a9 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Average.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Average.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Average "Output the average of its two inputs" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Cos.mo b/Buildings/Controls/OBC/CDL/Reals/Cos.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Cos.mo rename to Buildings/Controls/OBC/CDL/Reals/Cos.mo index 9673cc4d461..a755ce9b6d2 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Cos.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Cos.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Cos "Output the cosine of the input" Interfaces.RealInput u(unit="rad") @@ -64,7 +64,7 @@ where

      -\"cos.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Derivative.mo b/Buildings/Controls/OBC/CDL/Reals/Derivative.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Derivative.mo rename to Buildings/Controls/OBC/CDL/Reals/Derivative.mo index 5ac07e449ba..eb2efdc5ad8 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Derivative.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Derivative.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Derivative "Block that approximates the derivative of the input" parameter Real y_start=0 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Divide.mo b/Buildings/Controls/OBC/CDL/Reals/Divide.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Divide.mo rename to Buildings/Controls/OBC/CDL/Reals/Divide.mo index 1165ee65155..c1712cc2298 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Divide.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Divide.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Divide "Output first input divided by second input" Interfaces.RealInput u1 "Connector for dividend" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Exp.mo b/Buildings/Controls/OBC/CDL/Reals/Exp.mo similarity index 96% rename from Buildings/Controls/OBC/CDL/Continuous/Exp.mo rename to Buildings/Controls/OBC/CDL/Reals/Exp.mo index 1a96cfb81a5..a547924b093 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Exp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Exp.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Exp "Output the exponential (base e) of the input" Interfaces.RealInput u @@ -54,7 +54,7 @@ base-e exponential function.

      -\"exp.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Greater.mo b/Buildings/Controls/OBC/CDL/Reals/Greater.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/Greater.mo rename to Buildings/Controls/OBC/CDL/Reals/Greater.mo index 93eaf88b024..ffa00faf6f7 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Greater.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Greater.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Greater "Output y is true, if input u1 is greater than input u2" parameter Real h( diff --git a/Buildings/Controls/OBC/CDL/Continuous/GreaterThreshold.mo b/Buildings/Controls/OBC/CDL/Reals/GreaterThreshold.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/GreaterThreshold.mo rename to Buildings/Controls/OBC/CDL/Reals/GreaterThreshold.mo index b9518f722ae..bc239f17f49 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/GreaterThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Reals/GreaterThreshold.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block GreaterThreshold "Output y is true, if input u is greater than threshold" parameter Real t=0 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Hysteresis.mo b/Buildings/Controls/OBC/CDL/Reals/Hysteresis.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Hysteresis.mo rename to Buildings/Controls/OBC/CDL/Reals/Hysteresis.mo index f4833ce890f..fc8ba95c9bc 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Hysteresis.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Hysteresis.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Hysteresis "Transform Real to Boolean signal with Hysteresis" parameter Real uLow @@ -127,7 +127,7 @@ The start value of the output is defined via parameter The default value of this parameter is false.

      -\"Hysteresis.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/IntegratorWithReset.mo b/Buildings/Controls/OBC/CDL/Reals/IntegratorWithReset.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/IntegratorWithReset.mo rename to Buildings/Controls/OBC/CDL/Reals/IntegratorWithReset.mo index 4de131bec78..df436b6a0bf 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/IntegratorWithReset.mo +++ b/Buildings/Controls/OBC/CDL/Reals/IntegratorWithReset.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block IntegratorWithReset "Output the integral of the input signal" parameter Real k=1 @@ -48,7 +48,7 @@ equation horizontalAlignment=TextAlignment.Left), Bitmap( extent={{-54,-50},{60,50}}, - fileName="modelica://Buildings/Resources/Images/Controls/OBC/CDL/Continuous/int.png"), + fileName="modelica://Buildings/Resources/Images/Controls/OBC/CDL/Reals/int.png"), Text( extent={{-88,56},{206,92}}, textColor={0,0,0}, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Less.mo b/Buildings/Controls/OBC/CDL/Reals/Less.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/Less.mo rename to Buildings/Controls/OBC/CDL/Reals/Less.mo index 9ecce953384..29553c0eb6a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Less.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Less.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Less "Output y is true, if input u1 is less than input u2" parameter Real h( diff --git a/Buildings/Controls/OBC/CDL/Continuous/LessThreshold.mo b/Buildings/Controls/OBC/CDL/Reals/LessThreshold.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/LessThreshold.mo rename to Buildings/Controls/OBC/CDL/Reals/LessThreshold.mo index 2be98a0caeb..6e94a5320b8 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/LessThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Reals/LessThreshold.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block LessThreshold "Output y is true, if input u is less than threshold" parameter Real t=0 diff --git a/Buildings/Controls/OBC/CDL/Continuous/LimitSlewRate.mo b/Buildings/Controls/OBC/CDL/Reals/LimitSlewRate.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/LimitSlewRate.mo rename to Buildings/Controls/OBC/CDL/Reals/LimitSlewRate.mo index 0d44c5c2ba4..2786b55475c 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/LimitSlewRate.mo +++ b/Buildings/Controls/OBC/CDL/Reals/LimitSlewRate.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block LimitSlewRate "Limit the increase or decrease rate of input" parameter Real raisingSlewRate( min=Constants.small, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Limiter.mo b/Buildings/Controls/OBC/CDL/Reals/Limiter.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Limiter.mo rename to Buildings/Controls/OBC/CDL/Reals/Limiter.mo index 816fd0317ba..6cb9e0a5170 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Limiter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Limiter.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Limiter "Limit the range of a signal" parameter Real uMax diff --git a/Buildings/Controls/OBC/CDL/Continuous/Line.mo b/Buildings/Controls/OBC/CDL/Reals/Line.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/Line.mo rename to Buildings/Controls/OBC/CDL/Reals/Line.mo index 13c6fff06dc..12e8e87a267 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Line.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Line.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Line "Output the value of the input x along a line specified by two points" parameter Boolean limitBelow=true diff --git a/Buildings/Controls/OBC/CDL/Continuous/Log.mo b/Buildings/Controls/OBC/CDL/Reals/Log.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Log.mo rename to Buildings/Controls/OBC/CDL/Reals/Log.mo index 2d5a733a68e..8212bd9196a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Log.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Log.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Log "Output the natural (base e) logarithm of the input (input > 0 required)" Interfaces.RealInput u @@ -64,7 +64,7 @@ zero or negative.

      -\"log.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Log10.mo b/Buildings/Controls/OBC/CDL/Reals/Log10.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Log10.mo rename to Buildings/Controls/OBC/CDL/Reals/Log10.mo index 90a3fdb1015..acb5333c3e2 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Log10.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Log10.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Log10 "Output the base 10 logarithm of the input (input > 0 required)" Interfaces.RealInput u @@ -64,7 +64,7 @@ zero or negative.

      -\"log10.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/MatrixGain.mo b/Buildings/Controls/OBC/CDL/Reals/MatrixGain.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/MatrixGain.mo rename to Buildings/Controls/OBC/CDL/Reals/MatrixGain.mo index 07c385ab928..3aa8e689cc3 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MatrixGain.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MatrixGain.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MatrixGain "Output the product of a gain matrix with the input signal vector" parameter Real K[:,:]=[ diff --git a/Buildings/Controls/OBC/CDL/Continuous/MatrixMax.mo b/Buildings/Controls/OBC/CDL/Reals/MatrixMax.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/MatrixMax.mo rename to Buildings/Controls/OBC/CDL/Reals/MatrixMax.mo index f054c138fe4..d6f6b1560c2 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MatrixMax.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MatrixMax.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MatrixMax "Output vector of row- or column-wise maximum of the input matrix" parameter Boolean rowMax=true diff --git a/Buildings/Controls/OBC/CDL/Continuous/MatrixMin.mo b/Buildings/Controls/OBC/CDL/Reals/MatrixMin.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/MatrixMin.mo rename to Buildings/Controls/OBC/CDL/Reals/MatrixMin.mo index ddf75f2eb04..cfe998dce73 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MatrixMin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MatrixMin.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MatrixMin "Output vector of row- or column-wise minimum values" parameter Boolean rowMin=true diff --git a/Buildings/Controls/OBC/CDL/Continuous/Max.mo b/Buildings/Controls/OBC/CDL/Reals/Max.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Max.mo rename to Buildings/Controls/OBC/CDL/Reals/Max.mo index 9c170523dcc..87d65efb369 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Max.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Max.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Max "Pass through the largest signal" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Min.mo b/Buildings/Controls/OBC/CDL/Reals/Min.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Min.mo rename to Buildings/Controls/OBC/CDL/Reals/Min.mo index f74ea7ee9d6..ad1ac1690d4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Min.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Min.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Min "Pass through the smallest signal" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Modulo.mo b/Buildings/Controls/OBC/CDL/Reals/Modulo.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Modulo.mo rename to Buildings/Controls/OBC/CDL/Reals/Modulo.mo index 62a73624004..d6e2d8d59cb 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Modulo.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Modulo.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Modulo "Output the remainder of first input divided by second input (~=0)" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/MovingAverage.mo b/Buildings/Controls/OBC/CDL/Reals/MovingAverage.mo similarity index 93% rename from Buildings/Controls/OBC/CDL/Continuous/MovingAverage.mo rename to Buildings/Controls/OBC/CDL/Reals/MovingAverage.mo index a6b5d203a38..a24d2632c44 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MovingAverage.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MovingAverage.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MovingAverage "Block to output moving average" parameter Real delta( final quantity="Time", @@ -125,11 +125,11 @@ average of a noisy measurement signal.

      See - -Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage + +Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage and - -Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage_nonZeroStart + +Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart for example.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/MultiMax.mo b/Buildings/Controls/OBC/CDL/Reals/MultiMax.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/MultiMax.mo rename to Buildings/Controls/OBC/CDL/Reals/MultiMax.mo index 015c1bc4bf7..78cf8fcaf63 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MultiMax.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MultiMax.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MultiMax "Output the maximum element of the input vector" parameter Integer nin( diff --git a/Buildings/Controls/OBC/CDL/Continuous/MultiMin.mo b/Buildings/Controls/OBC/CDL/Reals/MultiMin.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/MultiMin.mo rename to Buildings/Controls/OBC/CDL/Reals/MultiMin.mo index d9537dff603..8205c09f9b0 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MultiMin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MultiMin.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MultiMin "Output the minimum element of the input vector" parameter Integer nin( diff --git a/Buildings/Controls/OBC/CDL/Continuous/MultiSum.mo b/Buildings/Controls/OBC/CDL/Reals/MultiSum.mo similarity index 93% rename from Buildings/Controls/OBC/CDL/Continuous/MultiSum.mo rename to Buildings/Controls/OBC/CDL/Reals/MultiSum.mo index ff37016f8db..a52c7817e52 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MultiSum.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MultiSum.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MultiSum "Sum of Reals, y = k[1]*u[1] + k[2]*u[2] + ... + k[n]*u[n]" parameter Integer nin( @@ -77,8 +77,8 @@ the output is y=0.

      See - -Buildings.Controls.OBC.CDL.Continuous.Validation.MultiSum + +Buildings.Controls.OBC.CDL.Reals.Validation.MultiSum for an example.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Multiply.mo b/Buildings/Controls/OBC/CDL/Reals/Multiply.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Multiply.mo rename to Buildings/Controls/OBC/CDL/Reals/Multiply.mo index 6a32ee81789..76b7e6a6b39 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Multiply.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Multiply.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Multiply "Output product of the two inputs" Interfaces.RealInput u1 "Connector of Real input signal 1" diff --git a/Buildings/Controls/OBC/CDL/Continuous/MultiplyByParameter.mo b/Buildings/Controls/OBC/CDL/Reals/MultiplyByParameter.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/MultiplyByParameter.mo rename to Buildings/Controls/OBC/CDL/Reals/MultiplyByParameter.mo index 189f652c755..795b6e2e43b 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/MultiplyByParameter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/MultiplyByParameter.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block MultiplyByParameter "Output the product of a gain value with the input signal" parameter Real k diff --git a/Buildings/Controls/OBC/CDL/Continuous/PID.mo b/Buildings/Controls/OBC/CDL/Reals/PID.mo similarity index 94% rename from Buildings/Controls/OBC/CDL/Continuous/PID.mo rename to Buildings/Controls/OBC/CDL/Reals/PID.mo index 8c1f9c14c61..a4c9131963a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/PID.mo +++ b/Buildings/Controls/OBC/CDL/Reals/PID.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block PID "P, PI, PD, and PID controller" parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI @@ -53,33 +53,33 @@ block PID Buildings.Controls.OBC.CDL.Interfaces.RealOutput y "Connector of actuator output signal" annotation (Placement(transformation(extent={{220,-20},{260,20}}),iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract controlError "Control error (set point - measurement)" + Buildings.Controls.OBC.CDL.Reals.Subtract controlError "Control error (set point - measurement)" annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter P(final k=k) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter P(final k=k) "Gain for proportional control action" annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset I( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset I( final k=k/Ti, final y_start=xi_start) if with_I "Integral term" annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Derivative D( + Buildings.Controls.OBC.CDL.Reals.Derivative D( final y_start=yd_start) if with_D "Derivative term" annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errP + Buildings.Controls.OBC.CDL.Reals.Subtract errP "P error" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errD if with_D + Buildings.Controls.OBC.CDL.Reals.Subtract errD if with_D "D error" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI1 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI1 if with_I "I error (before anti-windup compensation)" annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI2 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI2 if with_I "I error (after anti-windup compensation)" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=yMax, final uMin=yMin) "Limiter" @@ -104,27 +104,27 @@ protected Sources.Constant TDer(k=Td/Nd) if with_D "Time constant for approximation in derivative block" annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Dzero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Dzero( final k=0) if not with_D "Zero input signal" annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, {-30,110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uS_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uMea_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPD + Buildings.Controls.OBC.CDL.Reals.Add addPD "Outputs P and D gains added" annotation (Placement(transformation(extent={{20,124},{40,144}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPID + Buildings.Controls.OBC.CDL.Reals.Add addPID "Outputs P, I and D gains added" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract antWinErr if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I "Error for anti-windup compensation" annotation (Placement(transformation(extent={{160,50},{180,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter antWinGai(k=1/(k*Ni)) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai(k=1/(k*Ni)) if with_I "Gain for anti-windup compensation" annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( @@ -136,11 +136,11 @@ protected "Assertion on yMin and yMax" annotation (Placement(transformation(extent={{160,-160},{180,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Izero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Izero( final k=0) if not with_I "Zero input signal" annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) if with_I "Constant zero" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); @@ -413,8 +413,8 @@ where the equipment control input should continuously increase as the equipment switched on, such as a light dimmer that may slowly increase the luminance, or a variable speed drive of a motor that should continuously increase the speed. In this case, the controller - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset that can reset the output should be used.

      Approximation of the derivative term

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/PIDWithReset.mo b/Buildings/Controls/OBC/CDL/Reals/PIDWithReset.mo similarity index 95% rename from Buildings/Controls/OBC/CDL/Continuous/PIDWithReset.mo rename to Buildings/Controls/OBC/CDL/Reals/PIDWithReset.mo index a22df2df714..d8dbc5384e1 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/PIDWithReset.mo +++ b/Buildings/Controls/OBC/CDL/Reals/PIDWithReset.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block PIDWithReset "P, PI, PD, and PID controller with output reset" parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI @@ -59,33 +59,33 @@ block PIDWithReset Buildings.Controls.OBC.CDL.Interfaces.BooleanInput trigger "Resets the controller output when trigger becomes true" annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={-160,-220}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={-60,-120}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract controlError + Buildings.Controls.OBC.CDL.Reals.Subtract controlError "Control error (set point - measurement)" annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter P(final k=k) "Proportional action" + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter P(final k=k) "Proportional action" annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset I( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset I( final k=k/Ti, final y_start=xi_start) if with_I "Integral term" annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Derivative D( + Buildings.Controls.OBC.CDL.Reals.Derivative D( final y_start=yd_start) if with_D "Derivative term" annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errP + Buildings.Controls.OBC.CDL.Reals.Subtract errP "P error" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errD if with_D + Buildings.Controls.OBC.CDL.Reals.Subtract errD if with_D "D error" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI1 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI1 if with_I "I error (before anti-windup compensation)" annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI2 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI2 if with_I "I error (after anti-windup compensation)" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=yMax, final uMin=yMin) "Limiter" @@ -109,41 +109,41 @@ protected Sources.Constant TDer(k=Td/Nd) if with_D "Time constant for approximation in derivative block" annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Dzero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Dzero( final k=0) if not with_D "Zero input signal" annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, {-30,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Izero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Izero( final k=0) if not with_I "Zero input signal" annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uS_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uMea_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPD + Buildings.Controls.OBC.CDL.Reals.Add addPD "Outputs P and D gains added" annotation (Placement(transformation(extent={{20,124},{40,144}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPID + Buildings.Controls.OBC.CDL.Reals.Add addPID "Outputs P, I and D gains added" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract antWinErr if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I "Error for anti-windup compensation" annotation (Placement(transformation(extent={{160,50},{180,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter antWinGai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai( k=1/(k*Ni)) if with_I "Gain for anti-windup compensation" annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yResSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yResSig( final k=y_reset) if with_I "Signal for y_reset" annotation (Placement(transformation(extent={{-140,-84},{-120,-64}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addRes if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract addRes if with_I "Adder for integrator reset" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( diff --git a/Buildings/Controls/OBC/CDL/Continuous/Ramp.mo b/Buildings/Controls/OBC/CDL/Reals/Ramp.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Ramp.mo rename to Buildings/Controls/OBC/CDL/Reals/Ramp.mo index 90be1c02351..a18dff2b141 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Ramp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Ramp.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Ramp "Limit the changing rate of the input" parameter Real raisingSlewRate( diff --git a/Buildings/Controls/OBC/CDL/Continuous/Round.mo b/Buildings/Controls/OBC/CDL/Reals/Round.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Round.mo rename to Buildings/Controls/OBC/CDL/Reals/Round.mo index df3ca483e12..7fa2ff02887 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Round.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Round.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Round "Round real number to given digits" parameter Integer n diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sin.mo b/Buildings/Controls/OBC/CDL/Reals/Sin.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Sin.mo rename to Buildings/Controls/OBC/CDL/Reals/Sin.mo index c3d0a4a8937..b1ce423a2df 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sin.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Sin "Output the sine of the input" Interfaces.RealInput u(unit="rad") @@ -64,7 +64,7 @@ where

      -\"sin.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sort.mo b/Buildings/Controls/OBC/CDL/Reals/Sort.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Sort.mo rename to Buildings/Controls/OBC/CDL/Reals/Sort.mo index b908d1cb617..371d9802bf5 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sort.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sort.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Sort "Sort elements of input vector in ascending or descending order" parameter Integer nin( diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/CalendarTime.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/CalendarTime.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo index adae91da1cb..902254b2dc3 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/CalendarTime.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; model CalendarTime "Computes the unix time stamp and calendar time from the simulation time" parameter Buildings.Controls.OBC.CDL.Types.ZeroTime zerTim diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Constant.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Constant.mo similarity index 96% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Constant.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Constant.mo index 5751ce88762..1c936f09c7a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Constant.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Constant.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block Constant "Output constant signal of type Real" parameter Real k @@ -60,7 +60,7 @@ Block that outputs a constant signal y = k, where k is a real-valued parameter.

      -\"Constant.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/ModelTime.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/ModelTime.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/ModelTime.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/ModelTime.mo index 3548814653b..9e0362e3ea4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/ModelTime.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/ModelTime.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block ModelTime "Standard time" Interfaces.RealOutput y( diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Pulse.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Pulse.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Pulse.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Pulse.mo index 2ab28514710..e60cee12bf4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Pulse.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Pulse.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block Pulse "Generate pulse signal of type Real" parameter Real amplitude=1.0 @@ -123,7 +123,7 @@ equation Block that outputs a pulse signal as shown below.

      -\"Pulse.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Ramp.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Ramp.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Ramp.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Ramp.mo index d45db5eed63..4288ffefb1c 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Ramp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Ramp.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block Ramp "Generate ramp signal" parameter Real height=1 @@ -80,7 +80,7 @@ The Real output y is a ramp signal:

      -\"Ramp.png\"

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Sin.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Sin.mo similarity index 94% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Sin.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Sin.mo index 5fd0fd4c9f8..4b34abb3df5 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Sin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Sin.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block Sin "Generate sine signal" parameter Real amplitude=1 @@ -81,7 +81,7 @@ equation Block that outputs a sine.

      -\"Sin.png\"/

      ", @@ -91,8 +91,8 @@ Block that outputs a sine. April 13, 2023, by Michael Wetter:
      Renamed block from Sine to Sin to use consistent naming with - -Buildings.Controls.OBC.CDL.Continuous.Sin.
      + +Buildings.Controls.OBC.CDL.Reals.Sin.
      This is for #3339
    3. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/TimeTable.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/TimeTable.mo similarity index 99% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/TimeTable.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/TimeTable.mo index e3bbb13da96..f9ea8c44bc1 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/TimeTable.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/TimeTable.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; block TimeTable "Table look-up with respect to time and linear or periodic extrapolation" parameter Real table[:,:] diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo index d83fcc29ab8..4ee7ecb6a48 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model CalendarTimeMonths "Validation model for the calendar time model" - Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime calTim( + Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime calTim( zerTim=Buildings.Controls.OBC.CDL.Types.ZeroTime.NY2017) "Computes date and time assuming time=0 corresponds to new year 2017" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); @@ -11,13 +11,13 @@ model CalendarTimeMonths Tolerance=1e-6, StopTime=345600), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos" "Simulate and plot"), Documentation( info="

      This model validates the use of the - -Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime + +Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime block for a period of a couple of months. This shorter simulation time has been selected to store the reference results that are used in the regression tests diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo similarity index 52% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo index 785d5e33d21..d701939ae7e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo @@ -1,23 +1,23 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model CalendarTimeMonthsMinus "Validation model for the calendar time model with start time slightly below the full hour" - extends Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths; + extends Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths; annotation ( experiment( StartTime=172799, Tolerance=1e-6, StopTime=345599), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos" "Simulate and plot"), Documentation( info="

      This model validates the use of the - -Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime. + +Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime. It is identical to - -Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths + +Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths except that the start and end time are different.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo similarity index 52% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo index 5e65c91efb8..4377a5d2bf6 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo @@ -1,23 +1,23 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model CalendarTimeMonthsPlus "Validation model for the calendar time model with start time slightly higher than the full hour" - extends Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths; + extends Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths; annotation ( experiment( StartTime=172801, Tolerance=1e-6, StopTime=345601), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos" "Simulate and plot"), Documentation( info="

      This model validates the use of the - -Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime. + +Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime. It is identical to - -Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths + +Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths except that the start and end time are different.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo similarity index 73% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo index 6c6e890ba5b..d4b183212b5 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model Constant "Validate the Constant block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( k=2.5) "Block output real constant value" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); @@ -10,13 +10,13 @@ model Constant StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos" "Simulate and plot"), Documentation( info="

      Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant. + +Buildings.Controls.OBC.CDL.Reals.Sources.Constant.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo similarity index 75% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo index e9d15830a03..62f9fe7750b 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model Pulse "Validation model for the Pulse block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse( amplitude=2.0, width=0.5, offset=0.2, @@ -13,13 +13,13 @@ model Pulse StopTime=5.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos" "Simulate and plot"), Documentation( info="

      Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse. + +Buildings.Controls.OBC.CDL.Reals.Sources.Pulse.

      ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo similarity index 75% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo index 1602ce96816..d0b2e0c7c37 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model Ramp "Validation model for the Ramp" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=2, duration=3, offset=0.5, @@ -13,13 +13,13 @@ model Ramp StopTime=5.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos" "Simulate and plot"), Documentation( info="

      Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp. + +Buildings.Controls.OBC.CDL.Reals.Sources.Ramp.

      ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo similarity index 75% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo index 5c765f53e86..d7b2a6016a0 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model Sin "Validation model for Sin" - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=5, freqHz=1/60, phase=0, @@ -14,13 +14,13 @@ model Sin StopTime=130.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos" "Simulate and plot"), Documentation( info="

      Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp. + +Buildings.Controls.OBC.CDL.Reals.Sources.Ramp.

      ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mo similarity index 82% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mo index 1c4e876176b..5a52c94f1b2 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model StandardTime "Test model for the StandardTime block" - Buildings.Controls.OBC.CDL.Continuous.Sources.ModelTime staTim + Buildings.Controls.OBC.CDL.Reals.Sources.ModelTime staTim "Standard time" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); annotation ( @@ -10,7 +10,7 @@ model StandardTime Tolerance=1e-6, StopTime=1), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mos" "Simulate and plot"), Documentation( info="

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo similarity index 88% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo index 33c0cb1e2d6..bcb0f45ef17 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model TimeTable "Validation model for TimeTable block" - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, table=[ 0,0; @@ -10,7 +10,7 @@ model TimeTable 24*3600,0]) "Time table with smoothness method of linear segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinHol( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinHol( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, table=[ @@ -20,7 +20,7 @@ model TimeTable 24*3600,0]) "Time table with smoothness method of linear segments, hold first and last value" annotation (Placement(transformation(extent={{-10,10},{10,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinDer( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinDer( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.LastTwoPoints, table=[ @@ -30,7 +30,7 @@ model TimeTable 24*3600,0]) "Time table with smoothness method of linear segments, extrapolate with der" annotation (Placement(transformation(extent={{50,10},{70,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabCon( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabCon( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; @@ -39,7 +39,7 @@ model TimeTable 24*3600,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinCon( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinCon( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, table=[ 0,0; @@ -54,7 +54,7 @@ model TimeTable Tolerance=1e-6, StopTime=172800), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos" "Simulate and plot"), Documentation( info="

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo similarity index 76% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo index 68f646c4d30..70cbd025eab 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo @@ -1,7 +1,7 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources.Validation; +within Buildings.Controls.OBC.CDL.Reals.Sources.Validation; model TimeTableNegativeStartTime "Validation model for TimeTable block with negative start time" - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLin( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, table=[ 0,0; @@ -10,7 +10,7 @@ model TimeTableNegativeStartTime 24*3600,0]) "Time table with smoothness method of linear segments" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinHol( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinHol( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, table=[ @@ -20,7 +20,7 @@ model TimeTableNegativeStartTime 24*3600,0]) "Time table with smoothness method of linear segments, hold first and last value" annotation (Placement(transformation(extent={{-10,10},{10,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinDer( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinDer( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.LastTwoPoints, table=[ @@ -30,7 +30,7 @@ model TimeTableNegativeStartTime 24*3600,0]) "Time table with smoothness method of linear segments, extrapolate with der" annotation (Placement(transformation(extent={{50,10},{70,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabCon( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabCon( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[ 0,0; @@ -39,7 +39,7 @@ model TimeTableNegativeStartTime 24*3600,0]) "Time table with smoothness method of constant segments" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTabLinCon( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinCon( smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, table=[ 0,0; @@ -55,16 +55,16 @@ model TimeTableNegativeStartTime StartTime=-129600.0, StopTime=172800), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos" "Simulate and plot"), Documentation( info="

      This model validates the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable. + +Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable. The model is identical to - -Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable + +Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable except that the start time is negative, and not a multiple of a full day. ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/package.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/package.mo similarity index 86% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/package.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/package.mo index bd14db929d3..f443805244a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/package.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/package.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous.Sources; +within Buildings.Controls.OBC.CDL.Reals.Sources; package Validation "Collection of models that validate the continuous sources blocks of the CDL" annotation ( preferredView="info", @@ -6,8 +6,8 @@ package Validation "Collection of models that validate the continuous sources bl info="

      This package contains models that validate the blocks in - -Buildings.Controls.OBC.CDL.Continuous.Sources. + +Buildings.Controls.OBC.CDL.Reals.Sources.

      The examples plot various outputs, which have been verified against diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/package.order b/Buildings/Controls/OBC/CDL/Reals/Sources/Validation/package.order similarity index 100% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/Validation/package.order rename to Buildings/Controls/OBC/CDL/Reals/Sources/Validation/package.order diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/package.mo b/Buildings/Controls/OBC/CDL/Reals/Sources/package.mo similarity index 95% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/package.mo rename to Buildings/Controls/OBC/CDL/Reals/Sources/package.mo index 8b2bb520f36..b15b5c7478e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sources/package.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sources/package.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; package Sources "Package with blocks that generate source signals" annotation ( Documentation( diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sources/package.order b/Buildings/Controls/OBC/CDL/Reals/Sources/package.order similarity index 100% rename from Buildings/Controls/OBC/CDL/Continuous/Sources/package.order rename to Buildings/Controls/OBC/CDL/Reals/Sources/package.order diff --git a/Buildings/Controls/OBC/CDL/Continuous/Sqrt.mo b/Buildings/Controls/OBC/CDL/Reals/Sqrt.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Sqrt.mo rename to Buildings/Controls/OBC/CDL/Reals/Sqrt.mo index d386eebfd75..f7b94c0be9d 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Sqrt.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Sqrt.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Sqrt "Output the square root of the input (input >= 0 required)" Interfaces.RealInput u diff --git a/Buildings/Controls/OBC/CDL/Continuous/Subtract.mo b/Buildings/Controls/OBC/CDL/Reals/Subtract.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Subtract.mo rename to Buildings/Controls/OBC/CDL/Reals/Subtract.mo index 7ecdf9e11a2..b30a2853a57 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Subtract.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Subtract.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Subtract "Output the difference of the two inputs" Interfaces.RealInput u1 "Connector of Real input signal 1" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Switch.mo b/Buildings/Controls/OBC/CDL/Reals/Switch.mo similarity index 98% rename from Buildings/Controls/OBC/CDL/Continuous/Switch.mo rename to Buildings/Controls/OBC/CDL/Reals/Switch.mo index 379621e19c7..5a6be85162c 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Switch.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Switch.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Switch "Switch between two Real signals" Interfaces.RealInput u1 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Tan.mo b/Buildings/Controls/OBC/CDL/Reals/Tan.mo similarity index 97% rename from Buildings/Controls/OBC/CDL/Continuous/Tan.mo rename to Buildings/Controls/OBC/CDL/Reals/Tan.mo index 770c480460b..d124116616e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Tan.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Tan.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; block Tan "Output the tangent of the input" Interfaces.RealInput u(unit="rad") @@ -64,7 +64,7 @@ where

      -\"tan.png\"

      diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Abs.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Abs.mo similarity index 77% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Abs.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Abs.mo index afd0955c7e3..ad9b16f29ff 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Abs.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Abs.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Abs "Validation model for the absolute block" - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Block that outputs the absolute value of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( height=2, duration=1, offset=-1) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Abs.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos" "Simulate and plot"), Documentation( info="

      Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Abs. + +Buildings.Controls.OBC.CDL.Reals.Abs. The input varies from -1 to +1.

      ", @@ -33,8 +33,8 @@ The input varies from -1 to +1.
        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Acos.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Acos.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Acos.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Acos.mo index a453591b3c5..eb7df348e34 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Acos.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Acos.mo @@ -1,9 +1,9 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Acos "Validation model for the Acos block" - Buildings.Controls.OBC.CDL.Continuous.Acos arcCos + Buildings.Controls.OBC.CDL.Reals.Acos arcCos "Block that outputs the arc tangent of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-1, height=2) @@ -17,12 +17,12 @@ equation annotation ( experiment(StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Acos.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos" "Simulate and plot"), Documentation(info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Acos. + +Buildings.Controls.OBC.CDL.Reals.Acos.

        The input u varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Add.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Add.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Add.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Add.mo index dd5f41b7b4a..b8edbf52fad 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Add.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Add.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Add "Validation model for the add block" - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Block that outputs the sum of the two inputs" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=-1) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Add.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Add. + +Buildings.Controls.OBC.CDL.Reals.Add.

        The input u1 varies from -2 to +2, input u2 varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/AddParameter.mo similarity index 77% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/AddParameter.mo index bdade25e3c4..44dbc020be5 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/AddParameter.mo @@ -1,11 +1,11 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model AddParameter "Validation model for the AddParameter block" - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( p=0.5) "Block that outputs the sum of an input plus a parameter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) @@ -20,13 +20,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/AddParameter.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.AddParameter. + +Buildings.Controls.OBC.CDL.Reals.AddParameter.

        The input u varies from -2 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Asin.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Asin.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Asin.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Asin.mo index 20a565dc3a6..79a3d0a2037 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Asin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Asin.mo @@ -1,9 +1,9 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Asin "Validation model for the Asin block" - Buildings.Controls.OBC.CDL.Continuous.Asin arcSin + Buildings.Controls.OBC.CDL.Reals.Asin arcSin "Block that outputs the arc tangent of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-1, height=2) @@ -17,12 +17,12 @@ equation annotation ( experiment(StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Asin.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos" "Simulate and plot"), Documentation(info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Asin. + +Buildings.Controls.OBC.CDL.Reals.Asin.

        The input u varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Atan.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Atan.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Atan.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Atan.mo index e36afd6b1fb..53375211f71 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Atan.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Atan.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Atan "Validation model for the Atan block" - Buildings.Controls.OBC.CDL.Continuous.Atan atan1 + Buildings.Controls.OBC.CDL.Reals.Atan atan1 "Block that outputs the arc tangent of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Atan. + +Buildings.Controls.OBC.CDL.Reals.Atan.

        The input u varies from -2 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Atan2.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Atan2.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Atan2.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Atan2.mo index e2346e09f81..5121c4eb993 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Atan2.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Atan2.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Atan2 "Validation model for the Atan2 block" - Buildings.Controls.OBC.CDL.Continuous.Atan2 atan2_1 + Buildings.Controls.OBC.CDL.Reals.Atan2 atan2_1 "Block that outputs atan(u1/u2) of the inputs u1 and u2" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=1, height=2) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan2.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Atan2. + +Buildings.Controls.OBC.CDL.Reals.Atan2.

        The input u1 varies from -2 to +2, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Average.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Average.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Average.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Average.mo index 9513d5c57d3..beee6aed1fc 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Average.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Average.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Average "Validation model for the Average block" - Buildings.Controls.OBC.CDL.Continuous.Average avg1 + Buildings.Controls.OBC.CDL.Reals.Average avg1 "Block that outputs the average of its two inputs" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=6) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=1.5, height=3.0) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Average.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Average. + +Buildings.Controls.OBC.CDL.Reals.Average.

        The input u1 varies from -2.0 to +6.0, input u2 varies from +1.5 to +4.5 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Cos.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Cos.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Cos.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Cos.mo index 74552530624..74a1436650e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Cos.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Cos.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Cos "Validation model for the Cos block" - Buildings.Controls.OBC.CDL.Continuous.Cos cos1 + Buildings.Controls.OBC.CDL.Reals.Cos cos1 "Block that outputs the cosine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.283) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Cos.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Cos. + +Buildings.Controls.OBC.CDL.Reals.Cos.

        The input u varies from 0.0 to +6.283. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Derivative.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Derivative.mo similarity index 83% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Derivative.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Derivative.mo index d24a80a9712..461dbd4ba1e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Derivative.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Derivative.mo @@ -1,45 +1,45 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Derivative "Test model for the derivative block" - Buildings.Controls.OBC.CDL.Continuous.Derivative der1(y_start=1) + Buildings.Controls.OBC.CDL.Reals.Derivative der1(y_start=1) "Derivative block with input gains" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Sources.Constant con(k=1) "Outputs 1" + Reals.Sources.Constant con(k=1) "Outputs 1" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Sources.Ramp ram( + Reals.Sources.Ramp ram( height=0.09, duration=10, offset=0.01, startTime=5) "Ramp for time constant used in approximating derivative" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Sources.ModelTime modTim "Model time" + Reals.Sources.ModelTime modTim "Model time" annotation (Placement(transformation(extent={{-110,0},{-90,20}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes(y_start=1) + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes(y_start=1) "Integration of input" annotation (Placement(transformation(extent={{0,0},{20,20}}))); Logical.Sources.Constant booSig(k=false) "Contant boolean signal" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Cos cos "Cosine of model time" + Buildings.Controls.OBC.CDL.Reals.Cos cos "Cosine of model time" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Derivative der2(y_start=0) + Buildings.Controls.OBC.CDL.Reals.Derivative der2(y_start=0) "Derivative block with input gains" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Sources.Constant con2(k=2) "Outputs 2" + Reals.Sources.Constant con2(k=2) "Outputs 2" annotation (Placement(transformation(extent={{-40,-72},{-20,-52}}))); - Sources.Constant T(k=0.1) "Time constant for derivative approximation" + Reals.Sources.Constant T(k=0.1) "Time constant for derivative approximation" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); Utilities.Assert assMes(message="Differentiated value differs more than threshold") "Issue an error if results differ more than a threshold" annotation (Placement(transformation(extent={{170,26},{190,46}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between original signal, and differentiated integral of that signal" annotation (Placement(transformation(extent={{80,26},{100,46}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs "Absolute difference" + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute difference" annotation (Placement(transformation(extent={{110,26},{130,46}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr(t=0.1, h=0.01) + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr(t=0.1, h=0.01) "Output true if difference is within expected accuracy" annotation (Placement(transformation(extent={{140,26},{160,46}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=1) "Dummy gain to avoid unit difference error" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); equation @@ -80,13 +80,13 @@ equation StopTime=10.0, Tolerance=1e-07), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Derivative.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Derivative. + +Buildings.Controls.OBC.CDL.Reals.Derivative. The model integrates a time varying signal, and the differentiates this integrated signal. Hence, the output der1.y matches the non-integrated signal intWitRes.u, within a small approximation tolerance. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Divide.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Divide.mo similarity index 81% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Divide.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Divide.mo index fb3feaa85e4..1d56b223c56 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Divide.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Divide.mo @@ -1,15 +1,15 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Divide "Validation model for the Divide block" - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Block that outputs first input divided by second input: u1/u2" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=1) @@ -26,13 +26,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Divide.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Divide. + +Buildings.Controls.OBC.CDL.Reals.Divide.

        The input u1 varies from -2 to +2, input u2 varies from +1 to +3. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Exp.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Exp.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Exp.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Exp.mo index 1ae0ccced9d..fb18ddff3ac 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Exp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Exp.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Exp "Validation model for the Exp block" - Buildings.Controls.OBC.CDL.Continuous.Exp Exp1 + Buildings.Controls.OBC.CDL.Reals.Exp Exp1 "Block that outputs the exponential (base e) of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=2) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Exp.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Exp. + +Buildings.Controls.OBC.CDL.Reals.Exp.

        The input u varies from 0.0 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Greater.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Greater.mo similarity index 82% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Greater.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Greater.mo index 2b49bb1b027..e31590b58c0 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Greater.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Greater.mo @@ -1,18 +1,18 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Greater "Validation model for the Greater block" - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Greater block, without hysteresis" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greHys(h=1) + Buildings.Controls.OBC.CDL.Reals.Greater greHys(h=1) "Greater block, with hysteresis" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( height=5, duration=10, offset=-1.5) "Ramp source" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=3, freqHz=1/10, offset=-2, @@ -33,13 +33,13 @@ equation StopTime=10.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Greater.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Greater. + +Buildings.Controls.OBC.CDL.Reals.Greater. The instance gre has no hysteresis, and the instance greHys has a hysteresis.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo index f884c1d672d..9d013a911c4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo @@ -1,13 +1,13 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model GreaterThreshold "Validation model for the GreaterThreshold block" - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold gre(t=2) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold gre(t=2) "Greater block, without hysteresis" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greHys(t=2, h=1) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greHys(t=2, h=1) "Greater block, with hysteresis" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=8, freqHz=1/10, offset=-2, @@ -24,13 +24,13 @@ equation StopTime=10.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold. + +Buildings.Controls.OBC.CDL.Reals.GreaterThreshold. The instance gre has no hysteresis, and the instance greHys has a hysteresis.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo index 046ef4e15f9..3fe5e9479bd 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo @@ -1,43 +1,43 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Hysteresis "Validation model for the Hysteresis block" - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysteresis( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysteresis( final uLow=0, final uHigh=1) "Transform Real to Boolean signal with Hysteresis" annotation (Placement(transformation(extent={{50,30},{70,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysteresis1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysteresis1( final uLow=0, final uHigh=1, final pre_y_start=true) "Transform Real to Boolean signal with Hysteresis" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysteresis2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysteresis2( final uLow=0+0.01, final uHigh=1-0.01) "Transform Real to Boolean signal with Hysteresis" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( final duration=1, final offset=0, final height=6.2831852) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-74,30},{-54,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gain1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gain1( final k=2.5) "Block that outputs the product of a gain value with the input signal" annotation (Placement(transformation(extent={{10,30},{30,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( final amplitude=1, final freqHz=10) "Sine signal" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin2( final amplitude=1, final freqHz=5) "Sine signal" @@ -59,13 +59,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Hysteresis. + +Buildings.Controls.OBC.CDL.Reals.Hysteresis.

        ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo similarity index 84% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo index cdf9f65e577..79fe3d9798b 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo @@ -1,21 +1,21 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model IntegratorWithReset "Test model for integrator with reset" - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intDef(final + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intDef(final y_start=-2) "Integrator with default values" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes1(final + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1(final y_start=-2, final k=0.5) "Integrator with reset" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes2( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes2( final y_start=-5, final k=0.5) "Integrator with reset and y_reset = 2" annotation (Placement(transformation(extent={{0,-20},{20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cons( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cons( final k=10) "Constant as source term" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); @@ -28,7 +28,7 @@ model IntegratorWithReset final period=0.2) "Sample trigger" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( final height=-1, final duration=1, final offset=-2) @@ -59,13 +59,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos" "Simulate and plot"), Documentation( info="

        This model tests the implementation of - -Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset + +Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset with and without reset, and with different start values and reset values.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Less.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Less.mo similarity index 83% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Less.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Less.mo index d27be2354aa..e19a3b8c4fe 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Less.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Less.mo @@ -1,21 +1,21 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Less "Validation model for the Less block" - Buildings.Controls.OBC.CDL.Continuous.Less les + Buildings.Controls.OBC.CDL.Reals.Less les "Less block, without hysteresis" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Less lesHys( + Buildings.Controls.OBC.CDL.Reals.Less lesHys( h=1) "Less block, with hysteresis" annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=3, freqHz=1/10, offset=-2, startTime=1) "Sine source" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( height=5, duration=10, offset=-2) @@ -35,13 +35,13 @@ equation StopTime=10.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Less.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Less. + +Buildings.Controls.OBC.CDL.Reals.Less. The instance les has no hysteresis, and the instance lesHys has a hysteresis.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo index 380b6c5d4a1..2f71d0f905d 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo @@ -1,13 +1,13 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model LessThreshold "Validation model for the LessThreshold block" - Buildings.Controls.OBC.CDL.Continuous.LessThreshold les(t=2) + Buildings.Controls.OBC.CDL.Reals.LessThreshold les(t=2) "Less block, without hysteresis" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesHys(t=2, h=1) + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesHys(t=2, h=1) "Less block, with hysteresis" annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=8, freqHz=1/10, offset=-2, @@ -24,13 +24,13 @@ equation StopTime=10.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.LessThreshold. + +Buildings.Controls.OBC.CDL.Reals.LessThreshold. The instance les has no hysteresis, and the instance lesHys has a hysteresis.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo similarity index 82% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo index 093ac4ae952..81de9b81625 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo @@ -1,84 +1,84 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model LimitSlewRate "Validation model for the LimitSlewRate block" - Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate sleRatLim( + Buildings.Controls.OBC.CDL.Reals.LimitSlewRate sleRatLim( raisingSlewRate=1/30) "Block that limit the increase or decrease rate of input" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( offset=0, height=1.5, duration=20, startTime=10) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( offset=0, height=-1.5, startTime=60, duration=20) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add + Buildings.Controls.OBC.CDL.Reals.Add add "Signal adder" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( offset=0, height=-1.5, duration=30, startTime=120+60) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp4( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( offset=0, height=1.5, duration=30, startTime=120) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp5( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( offset=0, height=-1.5, startTime=240+60, duration=40) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp6( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp6( offset=0, height=1.5, startTime=240, duration=40) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Signal adder" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Signal adder" annotation (Placement(transformation(extent={{-40,-48},{-20,-28}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp7( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp7( offset=0, height=-1.5, duration=50, startTime=360+60) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp8( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp8( offset=0, height=1.5, duration=50, startTime=360) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 + Buildings.Controls.OBC.CDL.Reals.Add add3 "Signal adder" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 + Buildings.Controls.OBC.CDL.Reals.Add add4 "Signal adder" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 + Buildings.Controls.OBC.CDL.Reals.Add add5 "Signal adder" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add6 + Buildings.Controls.OBC.CDL.Reals.Add add6 "Signal adder" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); @@ -118,13 +118,13 @@ equation StopTime=480, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate. + +Buildings.Controls.OBC.CDL.Reals.LimitSlewRate.

        The input ramp1.u varies from 0 to +1.5, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Limiter.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Limiter.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Limiter.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Limiter.mo index 32ab24e6a26..34505e45652 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Limiter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Limiter.mo @@ -1,12 +1,12 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Limiter "Validation model for the Limiter block" - Buildings.Controls.OBC.CDL.Continuous.Limiter limiter1( + Buildings.Controls.OBC.CDL.Reals.Limiter limiter1( uMax=2.5, uMin=1.2) "Block that limit the range of a signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=4) @@ -21,13 +21,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Limiter.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Limiter. + +Buildings.Controls.OBC.CDL.Reals.Limiter.

        The input u varies from 0.0 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Line.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Line.mo similarity index 86% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Line.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Line.mo index 07375f2beef..2a7f37fe601 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Line.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Line.mo @@ -1,38 +1,38 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Line "Validation model for the Line block" - Buildings.Controls.OBC.CDL.Continuous.Line line1 + Buildings.Controls.OBC.CDL.Reals.Line line1 "Block that out the value of the input x along a line specified by two points" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x1( k=1.0) "Block that generate x1" annotation (Placement(transformation(extent={{-60,52},{-40,72}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f1( k=0.5) "Block that generate f(x1)" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x2( k=2.0) "Block that generate x2" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f2( k=1.5) "Block that generate f(x2)" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( offset=0, duration=0.5, startTime=0.25, height=3) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line line2( + Buildings.Controls.OBC.CDL.Reals.Line line2( limitAbove=true, limitBelow=false) "Block that out the value of the input x along a line specified by two points" annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line line3( + Buildings.Controls.OBC.CDL.Reals.Line line3( limitBelow=true, limitAbove=false) "Block that out the value of the input x along a line specified by two points" @@ -74,13 +74,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Line.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Line. + +Buildings.Controls.OBC.CDL.Reals.Line.

        The input u varies from 0.0 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Log.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Log.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Log.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Log.mo index 6c21c46e3b1..0ebc96b1ae5 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Log.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Log.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Log "Validation model for the Log block" - Buildings.Controls.OBC.CDL.Continuous.Log log1 + Buildings.Controls.OBC.CDL.Reals.Log log1 "Block that outputs the natural (base e) logarithm of the input (input > 0 required)" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=1, height=5) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Log. + +Buildings.Controls.OBC.CDL.Reals.Log.

        The input u varies from +1 to +6. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Log10.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Log10.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Log10.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Log10.mo index 2f5d8f66544..3f936a9f524 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Log10.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Log10.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Log10 "Validation model for the Log10 block" - Buildings.Controls.OBC.CDL.Continuous.Log10 log10_1 + Buildings.Controls.OBC.CDL.Reals.Log10 log10_1 "Block that outputs the base 10 logarithm of the input (input > 0 required)" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=1, height=9) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log10.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Log10. + +Buildings.Controls.OBC.CDL.Reals.Log10.

        The input u varies from +1 to +10. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo similarity index 82% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo index 0881cc6f432..b1a169f1e45 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo @@ -1,32 +1,32 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MatrixGain "Validation model for the MatrixGain block" - Buildings.Controls.OBC.CDL.Continuous.MatrixGain matGai( + Buildings.Controls.OBC.CDL.Reals.MatrixGain matGai( K=[ 1,0; 1,1; 1,2]) "Block that outputs the product of a matrix gain value with the input signal" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixGain matGai1( + Buildings.Controls.OBC.CDL.Reals.MatrixGain matGai1( K=[ 1,2; 3,4]) "Block that outputs the product of a matrix gain value with the input signal" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp( duration=1, offset=0, height=2) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Sources.Ramp ramp1( + Reals.Sources.Ramp ramp1( duration=1, offset=0, height=1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Sources.Ramp ramp2( + Reals.Sources.Ramp ramp2( duration=1, offset=0, height=2) @@ -47,13 +47,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MatrixGain. + +Buildings.Controls.OBC.CDL.Reals.MatrixGain.

        The input vector output two identical values u[1] and diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo index 18c0e9f8f6d..957ce1c895c 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo @@ -1,30 +1,30 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MatrixMax "Validation model for the MatrixMax block" - Sources.Constant con[3,3]( + Reals.Sources.Constant con[3,3]( k={{1,2,3},{6,4,2},{3,9,6}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Sources.Constant con1[2,3]( + Reals.Sources.Constant con1[2,3]( k={{1,4,3},{2,2,6}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Sources.Constant con2[2,3]( + Reals.Sources.Constant con2[2,3]( k={{1,2,3},{6,4,2}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMax matMax( + Buildings.Controls.OBC.CDL.Reals.MatrixMax matMax( rowMax=false, nRow=3, nCol=3) "Matrix maximum" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMax matMax1( + Buildings.Controls.OBC.CDL.Reals.MatrixMax matMax1( nCol=3, nRow=2) "Matrix maximum" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMax matMax2( + Buildings.Controls.OBC.CDL.Reals.MatrixMax matMax2( nCol=3, nRow=2) "Matrix maximum" @@ -42,13 +42,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MatrixMax. + +Buildings.Controls.OBC.CDL.Reals.MatrixMax.

        ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo index 7a6011fe650..afb9fbfdba1 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo @@ -1,31 +1,31 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MatrixMin "Validation model for the MatrixMin block" - Sources.Constant con[3,3]( + Reals.Sources.Constant con[3,3]( k={{-1,-2,-3},{-6,-4,-2},{-3,-9,-6}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Sources.Constant con1[2,3]( + Reals.Sources.Constant con1[2,3]( k={{-1,-4,-3},{-2,-2,-6}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Sources.Constant con2[2,3]( + Reals.Sources.Constant con2[2,3]( k={{-1,-2,-3},{-6,-4,-2}}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMin matMin( + Buildings.Controls.OBC.CDL.Reals.MatrixMin matMin( nRow=3, nCol=3, rowMin=false) "Matrix minimum" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMin matMin1( + Buildings.Controls.OBC.CDL.Reals.MatrixMin matMin1( nCol=3, rowMin=false, nRow=2) "Matrix minimum" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MatrixMin matMin2( + Buildings.Controls.OBC.CDL.Reals.MatrixMin matMin2( nCol=3, rowMin=true, nRow=2) @@ -44,13 +44,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MatrixMin. + +Buildings.Controls.OBC.CDL.Reals.MatrixMin.

        ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Max.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Max.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Max.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Max.mo index 872cea2419f..91126f92f5a 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Max.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Max.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Max "Validation model for the Max block" - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Block that pass through the largest signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=2) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Max.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Max. + +Buildings.Controls.OBC.CDL.Reals.Max.

        The input u1 varies from -2 to +2, input u2 varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Min.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Min.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Min.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Min.mo index c357278cb38..432e9a38835 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Min.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Min.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Min "Validation model for the Min block" - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Block that pass through the smallest signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=2) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Min.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Min. + +Buildings.Controls.OBC.CDL.Reals.Min.

        The input u1 varies from -2 to +2, input u2 varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Modulo.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Modulo.mo similarity index 80% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Modulo.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Modulo.mo index 672d8b45315..1572419004b 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Modulo.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Modulo.mo @@ -1,16 +1,16 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Modulo "Validation model for the Modulo block" - Buildings.Controls.OBC.CDL.Continuous.Modulo mod1 + Buildings.Controls.OBC.CDL.Reals.Modulo mod1 "Block that outputs the remainder of first input divided by second input (~=0)" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=6) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=1.5, height=3.0) @@ -27,13 +27,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Modulo.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Modulo. + +Buildings.Controls.OBC.CDL.Reals.Modulo.

        The input u1 varies from -2.0 to +6.0, input u2 varies from +1.5 to +4.5 diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo index 64911e2a851..4509eab2828 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo @@ -1,43 +1,43 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MovingAverage "Validation model for the MovingAverage block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sinInpNoDel( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sinInpNoDel( freqHz=1/80) "Start from zero second" annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve1(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve1(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve2(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve2(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve3(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve3(delta=300) "Moving average with 300 s sliding window" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve4(delta=400) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve4(delta=400) "Moving average with 400 s sliding window" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve5(delta=500) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve5(delta=500) "Moving average with 500 s sliding window" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sinInp50sDel( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sinInp50sDel( freqHz=1/80, startTime=50) "Start from 50 seconds" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve6(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve6(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve7(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve7(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sinInp100sDel( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sinInp100sDel( freqHz=1/80, startTime=100) "Start from 100 seconds" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve8(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve8(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve9(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve9(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); @@ -65,13 +65,13 @@ equation StopTime=900.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MovingAverage. + +Buildings.Controls.OBC.CDL.Reals.MovingAverage.

        The input sinInpNoDel, sinInp50sDel, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo similarity index 81% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo index 56709f6b2f9..33d47f0fb31 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo @@ -1,39 +1,39 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MovingAverage_nonZeroStart "Validation model for the MovingAverage block" Modelica.Blocks.Sources.Sine sinInpNoDel(f=1/80) "Start from zero second" annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve1(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve1(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve2(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve2(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve3(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve3(delta=300) "Moving average with 300 s sliding window" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve4(delta=400) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve4(delta=400) "Moving average with 400 s sliding window" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve5(delta=500) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve5(delta=500) "Moving average with 500 s sliding window" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); Modelica.Blocks.Sources.Sine sinInp50sDel(f=1/80, startTime=50) "Start from 50 seconds" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve6(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve6(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve7(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve7(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{60,20},{80,40}}))); Modelica.Blocks.Sources.Sine sinInp100sDel(f=1/80, startTime=100) "Start from 100 seconds" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve8(delta=100) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve8(delta=100) "Moving average with 100 s sliding window" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve9(delta=200) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve9(delta=200) "Moving average with 200 s sliding window" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); @@ -62,13 +62,13 @@ equation StopTime=900.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MovingAverage. + +Buildings.Controls.OBC.CDL.Reals.MovingAverage.

        The inputs sinInpNoDel, sinInp50sDel and diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMax.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiMax.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMax.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MultiMax.mo index 224cadf4d61..65f5b5bc81e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMax.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiMax.mo @@ -1,13 +1,13 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MultiMax "Validation model for the MultiMax block" parameter Integer sizOfVec=5 "Size of the input vector"; - Buildings.Controls.OBC.CDL.Continuous.MultiMax maxVal( + Buildings.Controls.OBC.CDL.Reals.MultiMax maxVal( nin=sizOfVec) "Block that outputs the maximum element of the input vector" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con[sizOfVec]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con[sizOfVec]( k={1,2,3,4,5}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); @@ -20,13 +20,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMax.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MultiMax. + +Buildings.Controls.OBC.CDL.Reals.MultiMax.

        The input vectorcon has size 5 and its element values are {1,2,3,4,5}. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMin.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiMin.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMin.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MultiMin.mo index ae6fc88be95..fa6ff9817c3 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiMin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiMin.mo @@ -1,13 +1,13 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MultiMin "Validation model for the MultiMin block" parameter Integer sizOfVec=5 "Size of the input vector"; - Buildings.Controls.OBC.CDL.Continuous.MultiMin minVal( + Buildings.Controls.OBC.CDL.Reals.MultiMin minVal( nin=sizOfVec) "Block that outputs the minimum element of the input vector" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con[sizOfVec]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con[sizOfVec]( k={1,2,3,4,5}) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); @@ -22,13 +22,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMin.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MultiMin. + +Buildings.Controls.OBC.CDL.Reals.MultiMin.

        The input vectorcon has size 5 and its element values are {1,2,3,4,5}. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiSum.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiSum.mo similarity index 83% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MultiSum.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MultiSum.mo index 94bd35b3adf..82833fb64d4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiSum.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiSum.mo @@ -1,52 +1,52 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MultiSum "Model to validate the application of MultiSum block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=-1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( height=3, duration=1, offset=-1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp4( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( height=3, duration=1, offset=-2) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp5( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( height=3, duration=1, offset=-3) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum_5( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum_5( nin=5, k={1,0.5,0.1,1,2}) "Sum of Reals, y = k[1]*u[1] + k[2]*u[2] + ... + k[5]*u[5]" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum_2( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum_2( nin=2, k={1,0.5}) "Sum of Reals, y = k[1]*u[1] + k[2]*u[2]" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum_1( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum_1( nin=1, k={1}) "Sum of Reals, y = k[1]*u[1]" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum_3( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum_3( nin=3) "Sum of Reals, y = k[1]*u[1] + k[2]*u[2]" annotation (Placement(transformation(extent={{40,-92},{60,-72}}))); @@ -79,13 +79,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiSum.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MultiSum. + +Buildings.Controls.OBC.CDL.Reals.MultiSum.

        The inputs and gains are configured as follows: diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Multiply.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Multiply.mo similarity index 81% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Multiply.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Multiply.mo index 956a059430c..86219c0c570 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Multiply.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Multiply.mo @@ -1,15 +1,15 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Multiply "Validation model for the Multiply block" - Buildings.Controls.OBC.CDL.Continuous.Multiply product1 + Buildings.Controls.OBC.CDL.Reals.Multiply product1 "Block that outputs product of the two inputs" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=3) @@ -26,13 +26,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Multiply.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Multiply. + +Buildings.Controls.OBC.CDL.Reals.Multiply.

        The input u1 varies from -2 to +2, input u2 varies from -1 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo index a42771e9f05..ecf6c877eb3 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo @@ -1,9 +1,9 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model MultiplyByParameter "Validation model for the Gain block" - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gain1(k=2.5) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gain1(k=2.5) "Block that outputs the product of a gain value with the input signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=2) @@ -18,13 +18,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter. + +Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter.

        The input u varies from 0.0 to +2. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PID.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PID.mo similarity index 86% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PID.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PID.mo index 05944ed26a7..d915e30f44d 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PID.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PID.mo @@ -1,43 +1,43 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PID "Test model for PID controller" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse( period=0.25) "Setpoint" annotation (Placement(transformation(extent={{-90,14},{-70,34}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPID( + Buildings.Controls.OBC.CDL.Reals.PID limPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, Ti=1, Td=1, yMin=-1) "PID controller" annotation (Placement(transformation(extent={{-30,40},{-10,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const( k=0.5) "Measurement data" annotation (Placement(transformation(extent={{-90,-22},{-70,-2}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPI( + Buildings.Controls.OBC.CDL.Reals.PID limPI( Ti=1, Td=1, yMin=-1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI) "PI controller" annotation (Placement(transformation(extent={{-30,2},{-10,22}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPD( + Buildings.Controls.OBC.CDL.Reals.PID limPD( Ti=1, Td=1, yMin=-1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PD) "PD controller" annotation (Placement(transformation(extent={{-30,-30},{-10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limP( + Buildings.Controls.OBC.CDL.Reals.PID limP( Ti=1, Td=1, yMin=-1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P) "P controller" annotation (Placement(transformation(extent={{-30,-60},{-10,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID noLimPID( + Buildings.Controls.OBC.CDL.Reals.PID noLimPID( Ti=1, Td=1, yMax=1e15, @@ -72,13 +72,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PID.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID. This tests the different settings for the controller types.

        ", diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo index 5c2f29a92fb..8e88e63e3ff 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo @@ -1,21 +1,21 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PIDInitialDerivativeOutput "Test model for LimPID controller with initial output of the derivative term specified" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant ySet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant ySet( k=0.75) "Set point" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yMea( k=0.75) "Measured value" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPID( + Buildings.Controls.OBC.CDL.Reals.PID limPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=3, yd_start=0.2) "PID controller" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPD( + Buildings.Controls.OBC.CDL.Reals.PID limPD( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PD, k=3, yd_start=0.2) @@ -36,20 +36,20 @@ equation StopTime=0.2, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID.

        This model validates setting the initial output of the controller to a specified value. Note that the control error must be zero for the initial output to be at the specified value. See the description of - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID.

        ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo similarity index 85% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo index 7e4508a76ad..91530807185 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo @@ -1,21 +1,21 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PIDInitialState "Test model for LimPID controller with initial state specified" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant ySet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant ySet( k=0.75) "Set point" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yMea( k=0.5) "Measured value" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPID( + Buildings.Controls.OBC.CDL.Reals.PID limPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=3, xi_start=0.25) "PID controller" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID limPI( + Buildings.Controls.OBC.CDL.Reals.PID limPI( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=3, xi_start=0.25) @@ -36,13 +36,13 @@ equation StopTime=1, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID.

        This model validates setting the initial state of the controller to a specified value. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDScale.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDScale.mo similarity index 85% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PIDScale.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PIDScale.mo index 35cb4586fe1..4002dc34016 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDScale.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDScale.mo @@ -1,12 +1,12 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PIDScale "Test model for PID controller with scaling of the control error" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse( amplitude=1000, period=50) "Setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.PID pidSca( + Buildings.Controls.OBC.CDL.Reals.PID pidSca( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=2, Ti=1, @@ -15,11 +15,11 @@ model PIDScale yMin=-1) "PID controller with scaling of control input" annotation (Placement(transformation(extent={{0,40},{20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset pla1( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset pla1( k=1000) "Plant model" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Sources.Constant resVal( + Reals.Sources.Constant resVal( k=0) "Reset value" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); @@ -27,7 +27,7 @@ model PIDScale k=false) "Reset signal" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID pidNoSca( + Buildings.Controls.OBC.CDL.Reals.PID pidNoSca( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=2, Ti=1, @@ -35,13 +35,13 @@ model PIDScale yMin=-1) "PID controller without scaling of control input" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=1/1000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=1/1000) "Gain to scale setpoint" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(k=1/1000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=1/1000) "Gain to scale measured value" annotation (Placement(transformation(extent={{52,-90},{32,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset pla2( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset pla2( k=1000) "Plant model" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); @@ -76,13 +76,13 @@ equation StopTime=100.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDScale.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PID + +Buildings.Controls.OBC.CDL.Reals.PID with and without setting of the parameter that scales the control error.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo similarity index 86% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo index 41b31a7f19d..aa924551b70 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo @@ -1,17 +1,17 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PIDWithReset "Test model for LimPID controller with reset trigger" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal setPoi "Set point" annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.ModelTime modTim + Buildings.Controls.OBC.CDL.Reals.Sources.ModelTime modTim "Model time" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greEquThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr( t=1) "Outputs true after t=1" annotation (Placement(transformation(extent={{-52,-70},{-32,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset limPIDPar( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset limPIDPar( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=1, Ti=1, @@ -20,10 +20,10 @@ model PIDWithReset y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes1 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,60},{80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset limPIDInp( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset limPIDInp( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=1, Ti=1, @@ -32,14 +32,14 @@ model PIDWithReset y_reset=0.75) "Controller, reset to input value" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes2 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes2 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant resVal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resVal( k=0) "Reset value" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset limPIPar( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset limPIPar( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=1, Ti=1, @@ -48,10 +48,10 @@ model PIDWithReset y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes3 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes3 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset limPIInp( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset limPIInp( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=1, Ti=1, @@ -60,7 +60,7 @@ model PIDWithReset y_reset=0.75) "Controller, reset to input value" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes4 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes4 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( @@ -126,13 +126,13 @@ equation StopTime=10, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID.

        This model validates the controller for different settings of the control output reset. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo similarity index 85% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo index aa2bc1b02eb..718e7b1ee29 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo @@ -1,12 +1,12 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model PIDWithResetScale "Test model for PID controller with reset and scaling of the control error" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse( amplitude=1000, period=50) "Setpoint" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset pidSca( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset pidSca( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=2, Ti=1, @@ -16,11 +16,11 @@ model PIDWithResetScale y_reset=0) "PID controller with scaling of control input" annotation (Placement(transformation(extent={{0,40},{20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset pla1( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset pla1( k=1000) "Plant model" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Sources.Constant resVal( + Reals.Sources.Constant resVal( k=0) "Reset value" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); @@ -28,7 +28,7 @@ model PIDWithResetScale k=false) "Reset signal" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset pidNoSca( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset pidNoSca( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=2, Ti=1, @@ -37,13 +37,13 @@ model PIDWithResetScale y_reset=0) "PID controller without scaling of control input" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=1/1000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=1/1000) "Gain to scale setpoint" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(k=1/1000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=1/1000) "Gain to scale measured value" annotation (Placement(transformation(extent={{52,-90},{32,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset pla2( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset pla2( k=1000) "Plant model" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); @@ -86,13 +86,13 @@ equation StopTime=100.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset with and without setting of the parameter that scales the control error.

        diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Ramp.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Ramp.mo similarity index 87% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Ramp.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Ramp.mo index 8d71199a269..4837799c1f3 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Ramp.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Ramp.mo @@ -1,19 +1,19 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Ramp "Validation model for the Ramp block" - Buildings.Controls.OBC.CDL.Continuous.Ramp ramUp( + Buildings.Controls.OBC.CDL.Reals.Ramp ramUp( final raisingSlewRate=1/20) "Ramp the input increasing" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Ramp ramUp1( + Buildings.Controls.OBC.CDL.Reals.Ramp ramUp1( final raisingSlewRate=1/10) "Ramp the input increasing in different speed" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Ramp ramUpDow( + Buildings.Controls.OBC.CDL.Reals.Ramp ramUpDow( final raisingSlewRate=1/5) "Limit the increase and decrease of the input if the active is true" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Ramp ramUpDow1( + Buildings.Controls.OBC.CDL.Reals.Ramp ramUpDow1( final raisingSlewRate=1/5, final fallingSlewRate=-1/2) "Different increase and decrease slew rate limits" @@ -25,7 +25,7 @@ model Ramp "Validation model for the Ramp block" final shift=1) "Boolean pulse" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul( final width=0.8, final period=12.0, final shift=2.0) @@ -37,13 +37,13 @@ model Ramp "Validation model for the Ramp block" final shift=2) "Boolean pulse" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul1( final width=0.2, final period=12.0, final shift=1.5) "Boolean pulse" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul2( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul2( final width=0.3, final period=12.0, final shift=3.0) @@ -78,13 +78,13 @@ equation StopTime=10.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Ramp.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos" "Simulate and plot"), Documentation( info="

        Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Ramp. + +Buildings.Controls.OBC.CDL.Reals.Ramp.

        • diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Round.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Round.mo similarity index 77% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Round.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Round.mo index 453afaf7345..ca73e0e6bf0 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Round.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Round.mo @@ -1,27 +1,27 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Round "Validation model for the Round block" - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{40,40},{60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=1) "Round real number to given digits" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3( + Buildings.Controls.OBC.CDL.Reals.Round round3( n=-1) "Round real number to given digits" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=0.1) "Gain" + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=0.1) "Gain" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(k=10) "Gain" + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=10) "Gain" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); equation @@ -40,13 +40,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Round.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Round. + +Buildings.Controls.OBC.CDL.Reals.Round.

          The input u varies from -3.5 to +3.5. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sin.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Sin.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Sin.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Sin.mo index 01b5b35f1ef..09f170c61d1 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sin.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Sin.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Sin "Validation model for the Sin block" - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=6.2831852) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sin.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sin. + +Buildings.Controls.OBC.CDL.Reals.Sin.

          The input u varies from 0.0 to +2π. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sort.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Sort.mo similarity index 84% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Sort.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Sort.mo index c2703b63dce..3209e8921b4 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sort.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Sort.mo @@ -1,41 +1,41 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Sort "Validation model for the Sort block" - Buildings.Controls.OBC.CDL.Continuous.Sort sorAsc( + Buildings.Controls.OBC.CDL.Reals.Sort sorAsc( nin=5) "Block that sorts signals in ascending order" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,56},{-40,76}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=3) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,22},{-40,42}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( duration=1, offset=2, height=-4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp4( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( duration=1, offset=3, height=-1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-42},{-40,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp5( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( duration=1, offset=0, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-74},{-40,-54}}))); - Buildings.Controls.OBC.CDL.Continuous.Sort sorDes( + Buildings.Controls.OBC.CDL.Reals.Sort sorDes( nin=5, ascending=false) "Block that sorts signals in ascending order" @@ -67,13 +67,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sort.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sort. + +Buildings.Controls.OBC.CDL.Reals.Sort.

          The input u1 varies from -2 to +2, input u2 varies from -1 to +2, diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sqrt.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Sqrt.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Sqrt.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Sqrt.mo index 252e32356fa..8e69518744c 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Sqrt.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Sqrt.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Sqrt "Validation model for the Sqrt block" - Buildings.Controls.OBC.CDL.Continuous.Sqrt sqrt1 + Buildings.Controls.OBC.CDL.Reals.Sqrt sqrt1 "Block that outputs the square root of the input (input >= 0 required)" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=0, height=9) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sqrt.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Sqrt. + +Buildings.Controls.OBC.CDL.Reals.Sqrt.

          The input u varies from 0.0 to +9.0. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Subtract.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Subtract.mo similarity index 79% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Subtract.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Subtract.mo index 8c091df1d31..9616fb0e615 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Subtract.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Subtract.mo @@ -1,15 +1,15 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Subtract "Validation model for the Subtract block" - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Block that outputs the difference of the two inputs" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=-0.5) @@ -26,13 +26,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Subtract.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Subtract. + +Buildings.Controls.OBC.CDL.Reals.Subtract.

          The input u1 varies from -2 to +2, input u2 varies from -1 to +1. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Switch.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Switch.mo similarity index 81% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Switch.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Switch.mo index bfaa032c1d8..3b273f0e8ec 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Switch.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Switch.mo @@ -1,12 +1,12 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Switch "Validation model for the Switch block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=5, offset=-1, height=6) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-26,22},{-6,42}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=5, offset=-1, height=2) @@ -17,7 +17,7 @@ model Switch "Validation model for the Switch block" period=2) "Block that outputs cyclic on and off" annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch1 + Buildings.Controls.OBC.CDL.Reals.Switch switch1 "Switch between two real inputs" annotation (Placement(transformation(extent={{26,-10},{46,10}}))); @@ -33,13 +33,13 @@ equation StopTime=5.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Switch.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Switch. + +Buildings.Controls.OBC.CDL.Reals.Switch.

          ", revisions=" diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/Tan.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/Tan.mo similarity index 78% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/Tan.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/Tan.mo index fe1e4c88d4b..bc180870c27 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/Tan.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/Tan.mo @@ -1,10 +1,10 @@ -within Buildings.Controls.OBC.CDL.Continuous.Validation; +within Buildings.Controls.OBC.CDL.Reals.Validation; model Tan "Validation model for the Tan block" - Buildings.Controls.OBC.CDL.Continuous.Tan tan1 + Buildings.Controls.OBC.CDL.Reals.Tan tan1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-1.5, height=3.0) @@ -19,13 +19,13 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Tan.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos" "Simulate and plot"), Documentation( info="

          Validation test for the block - -Buildings.Controls.OBC.CDL.Continuous.Tan. + +Buildings.Controls.OBC.CDL.Reals.Tan.

          The input u varies from -1.5 to +1.5. diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/package.mo b/Buildings/Controls/OBC/CDL/Reals/Validation/package.mo similarity index 88% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/package.mo rename to Buildings/Controls/OBC/CDL/Reals/Validation/package.mo index e1c64175451..759d72c354e 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/Validation/package.mo +++ b/Buildings/Controls/OBC/CDL/Reals/Validation/package.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Continuous; +within Buildings.Controls.OBC.CDL.Reals; package Validation "Collection of models that validate the continuous blocks of the CDL" annotation ( preferredView="info", @@ -6,8 +6,8 @@ package Validation "Collection of models that validate the continuous blocks of info="

          This package contains models that validate the blocks in - -Buildings.Controls.OBC.CDL.Continuous. + +Buildings.Controls.OBC.CDL.Reals.

          The examples plot various outputs, which have been verified against diff --git a/Buildings/Controls/OBC/CDL/Continuous/Validation/package.order b/Buildings/Controls/OBC/CDL/Reals/Validation/package.order similarity index 100% rename from Buildings/Controls/OBC/CDL/Continuous/Validation/package.order rename to Buildings/Controls/OBC/CDL/Reals/Validation/package.order diff --git a/Buildings/Controls/OBC/CDL/Continuous/package.mo b/Buildings/Controls/OBC/CDL/Reals/package.mo similarity index 91% rename from Buildings/Controls/OBC/CDL/Continuous/package.mo rename to Buildings/Controls/OBC/CDL/Reals/package.mo index 9753ddab43b..819e15a5ede 100644 --- a/Buildings/Controls/OBC/CDL/Continuous/package.mo +++ b/Buildings/Controls/OBC/CDL/Reals/package.mo @@ -1,5 +1,5 @@ within Buildings.Controls.OBC.CDL; -package Continuous "Package with blocks for continuous variables" +package Reals "Package with blocks for continuous variables" annotation ( Documentation( info=" @@ -34,4 +34,4 @@ Firt implementation, based on the blocks from the Modelica Standard Library. lineColor={128,128,128}, extent={{-100.0,-100.0},{100.0,100.0}}, radius=25.0)})); -end Continuous; +end Reals; diff --git a/Buildings/Controls/OBC/CDL/Continuous/package.order b/Buildings/Controls/OBC/CDL/Reals/package.order similarity index 100% rename from Buildings/Controls/OBC/CDL/Continuous/package.order rename to Buildings/Controls/OBC/CDL/Reals/package.order diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo index 9f0cb8c4345..9726469b283 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo @@ -5,7 +5,7 @@ model IntegerScalarReplicator nout=3) "Block that outputs the array replicating input value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=5, duration=1, offset=-2) diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo index 1e40363c832..b47d8e8ae9f 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo @@ -5,7 +5,7 @@ model IntegerVectorReplicator intRep(nin=2, nout=3) "Block that outputs the vector replicating input value" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram[2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram[2]( height=fill(5,2), duration=fill(1,2), offset=fill(-2,2)) "Block that outputs ramp signal" diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo index 1e868bb9bc4..c0712f00fda 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo @@ -13,30 +13,30 @@ model RealExtractSignal final extract={1,2,5,3,4,2}) "Block that extracts signals from an input signal vector" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final height=5, final duration=1, final offset=-2) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( final duration=1, final height=4, final offset=-1) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( final duration=1, final height=3, final offset=-2) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul( final amplitude=0.5, final period=0.2) "Generate pulse signal of type Real" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul1( final period=0.2, final amplitude=1.5, final offset=-0.2) diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo index bf7ffc14372..31bcf087564 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo @@ -21,30 +21,30 @@ model RealExtractor "Extracts signal from an input signal vector when the extract index changes from out of range to within range" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final height=5, final duration=1, final offset=-2) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( final duration=1, final height=4, final offset=-1) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( final duration=1, final height=3, final offset=-2) "Block that outputs ramp signal" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul( final amplitude=0.5, final period=0.2) "Generate pulse signal of type Real" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul1( final period=0.2, final amplitude=1.5, final offset=-0.2) diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo index ad395d9f3c1..e4270289996 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo @@ -5,7 +5,7 @@ model RealScalarReplicator nout=3) "Block that outputs the array replicating input value" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=5, duration=1, offset=-2) diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo index e3c25ecbdc9..c6b64668dde 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo @@ -6,7 +6,7 @@ model RealVectorFilter "Block that filter the input vector" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Continuous.Sources.Constant ReaInp[3](k={1,2,3}) "Real inputs" + Reals.Sources.Constant ReaInp[3](k={1,2,3}) "Real inputs" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); equation connect(ReaInp.y, reaFil.u) diff --git a/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo b/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo index b59d0b6a604..ea1bccd8051 100644 --- a/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo +++ b/Buildings/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo @@ -5,7 +5,7 @@ model RealVectorReplicator reaRep(nin=2, nout=3) "Block that outputs the vector replicating input value" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram[2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram[2]( height=fill(5,2), duration=fill(1,2), offset=fill(-2,2)) "Block that outputs ramp signal" diff --git a/Buildings/Controls/OBC/CDL/Types/ZeroTime.mo b/Buildings/Controls/OBC/CDL/Types/ZeroTime.mo index e4c9b3b95ec..cba6da4bf7c 100644 --- a/Buildings/Controls/OBC/CDL/Types/ZeroTime.mo +++ b/Buildings/Controls/OBC/CDL/Types/ZeroTime.mo @@ -32,8 +32,8 @@ type ZeroTime = enumeration( annotation (Documentation(info="

          Type for choosing how to set the reference time in - -Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime. + +Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime.

          For example, CDL.Types.TimeReference.NY2016 diff --git a/Buildings/Controls/OBC/CDL/package.order b/Buildings/Controls/OBC/CDL/package.order index 0972d301d5b..2a8aa443645 100644 --- a/Buildings/Controls/OBC/CDL/package.order +++ b/Buildings/Controls/OBC/CDL/package.order @@ -1,10 +1,10 @@ Constants -Continuous Conversions Discrete Integers Logical Psychrometrics +Reals Routing Utilities Types diff --git a/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TRoomRelHum.mo b/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TRoomRelHum.mo index ea0a001efd9..cd075e715e5 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TRoomRelHum.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TRoomRelHum.mo @@ -85,12 +85,12 @@ block HighMassSupplyTemperature_TRoomRelHum CDL.Psychrometrics.DewPoint_TDryBulPhi dewPoi "Dew point temperature, used to avoid condensation" annotation (Placement(transformation(extent={{20,-20},{40,0}}))); - CDL.Continuous.Hysteresis hysCoo( + CDL.Reals.Hysteresis hysCoo( uLow=0.1, uHigh=0.2) "Hysteresis to switch system on and off" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); - CDL.Continuous.PID conCoo( + CDL.Reals.PID conCoo( final controllerType=controllerType, final k=k, final Ti = Ti, @@ -102,14 +102,14 @@ block HighMassSupplyTemperature_TRoomRelHum annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); protected - CDL.Continuous.Sources.Constant TSupMin( + CDL.Reals.Sources.Constant TSupMin( final k( final unit="K", displayUnit="degC") = TSupSet_min, y(final unit="K", displayUnit="degC")) "Minimum cooling supply water temperature" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - CDL.Continuous.Sources.Constant TSupMax( + CDL.Reals.Sources.Constant TSupMax( final k( final unit="K", displayUnit="degC") = TSupSet_max, @@ -117,18 +117,18 @@ protected "Maximum cooling supply water temperature" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - CDL.Continuous.Sources.Constant one(final k=1) "Outputs one" + CDL.Reals.Sources.Constant one(final k=1) "Outputs one" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - CDL.Continuous.Sources.Constant zero(final k=0) "Outputs zero" + CDL.Reals.Sources.Constant zero(final k=0) "Outputs zero" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - CDL.Continuous.Line TSupNoDewPoi( + CDL.Reals.Line TSupNoDewPoi( limitBelow=false, limitAbove=false, y(final unit="K", displayUnit="degC")) "Set point for supply water temperature without consideration of dew point" annotation (Placement(transformation(extent={{20,10},{40,30}}))); - CDL.Continuous.Max TSupCoo + CDL.Reals.Max TSupCoo "Cooling water supply temperature" annotation (Placement(transformation(extent={{60,14},{80,34}}))); CDL.Conversions.BooleanToReal booToRea( diff --git a/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TSurRelHum.mo b/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TSurRelHum.mo index e90043279de..d075df4eb3a 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TSurRelHum.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Cooling/HighMassSupplyTemperature_TSurRelHum.mo @@ -92,12 +92,12 @@ block HighMassSupplyTemperature_TSurRelHum CDL.Psychrometrics.DewPoint_TDryBulPhi dewPoi "Dew point temperature, used to avoid condensation" annotation (Placement(transformation(extent={{-80,-56},{-60,-36}}))); - CDL.Continuous.Hysteresis hysCoo( + CDL.Reals.Hysteresis hysCoo( uLow=0.1, uHigh=0.2) "Hysteresis to switch system on and off" annotation (Placement(transformation(extent={{30,-90},{50,-70}}))); - CDL.Continuous.PID conCoo( + CDL.Reals.PID conCoo( final controllerType=controllerType, final k=k, final Ti = Ti, @@ -109,14 +109,14 @@ block HighMassSupplyTemperature_TSurRelHum annotation (Placement(transformation(extent={{-50,10},{-30,30}}))); protected - CDL.Continuous.Sources.Constant TSupMin( + CDL.Reals.Sources.Constant TSupMin( final k( final unit="K", displayUnit="degC") = TSupSet_min, y(final unit="K", displayUnit="degC")) "Minimum cooling supply water temperature" annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); - CDL.Continuous.Sources.Constant TSupMax( + CDL.Reals.Sources.Constant TSupMax( final k( final unit="K", displayUnit="degC") = TSupSet_max, @@ -124,18 +124,18 @@ protected "Maximum cooling supply water temperature" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - CDL.Continuous.Sources.Constant one(final k=1) "Outputs one" + CDL.Reals.Sources.Constant one(final k=1) "Outputs one" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - CDL.Continuous.Sources.Constant zero(final k=0) "Outputs zero" + CDL.Reals.Sources.Constant zero(final k=0) "Outputs zero" annotation (Placement(transformation(extent={{-10,60},{10,80}}))); - CDL.Continuous.Line TSupNoDewPoi( + CDL.Reals.Line TSupNoDewPoi( limitBelow=false, limitAbove=false, y(final unit="K", displayUnit="degC")) "Set point for supply water temperature without consideration of dew point" annotation (Placement(transformation(extent={{30,10},{50,30}}))); - CDL.Continuous.Max TSupCoo + CDL.Reals.Max TSupCoo "Cooling water supply temperature" annotation (Placement(transformation(extent={{60,4},{80,24}}))); CDL.Conversions.BooleanToReal booToRea( @@ -144,7 +144,7 @@ protected "Pump control signal as a Real number (either 0 or 1)" annotation (Placement(transformation(extent={{70,-90},{90,-70}}))); - CDL.Continuous.Max TSurConMin + CDL.Reals.Max TSurConMin "Minimum allowed supply air temperature to avoid condensation" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); equation diff --git a/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TRoomRelHum.mo b/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TRoomRelHum.mo index c981743b9a8..8614f8391fe 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TRoomRelHum.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TRoomRelHum.mo @@ -3,7 +3,7 @@ model HighMassSupplyTemperature_TRoomRelHum "Validation model for the room temperature controller that takes the room temperature set point as an input" extends Modelica.Icons.Example; - Controls.OBC.CDL.Continuous.Sources.TimeTable TPhiRooMea( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TPhiRooMea( table=[0.0, 18, 0.5; 0.5, 28, 0.5; 1.0, 18, 0.5; @@ -19,7 +19,7 @@ model HighMassSupplyTemperature_TRoomRelHum TSupSet_min=291.15) "Controller" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TRooSet(final k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooSet(final k( final unit="K", displayUnit="degC") = 297.15) "Set point temperature for room" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); diff --git a/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TSurRelHum.mo b/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TSurRelHum.mo index 995ee352727..9ad73e70fe4 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TSurRelHum.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Cooling/Validation/HighMassSupplyTemperature_TSurRelHum.mo @@ -3,7 +3,7 @@ model HighMassSupplyTemperature_TSurRelHum "Validation model for the room temperature controller that takes the surface temperature set point as an input" extends Modelica.Icons.Example; - Controls.OBC.CDL.Continuous.Sources.TimeTable TPhiRooMea( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TPhiRooMea( table=[0.0, 18, 0.5; 0.5, 28, 0.5; 1.0, 18, 0.5; @@ -20,14 +20,14 @@ model HighMassSupplyTemperature_TSurRelHum TSupSet_min=291.15) "Controller" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSurSet(final k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSurSet(final k( final unit="K", displayUnit="degC") = 293.15) "Set point temperature for surface" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); CDL.Psychrometrics.DewPoint_TDryBulPhi dewPoi "Dew point temperature" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - CDL.Continuous.Sources.Ramp TSur( + CDL.Reals.Sources.Ramp TSur( height=1, duration=1800, offset=293.15) "Measured surface temperature" diff --git a/Buildings/Controls/OBC/RadiantSystems/Heating/HighMassSupplyTemperature_TRoom.mo b/Buildings/Controls/OBC/RadiantSystems/Heating/HighMassSupplyTemperature_TRoom.mo index 4db2da0372e..783fac6db4c 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Heating/HighMassSupplyTemperature_TRoom.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Heating/HighMassSupplyTemperature_TRoom.mo @@ -69,7 +69,7 @@ block HighMassSupplyTemperature_TRoom annotation (Placement(transformation(extent={{100,-100},{140,-60}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Controls.OBC.CDL.Continuous.PID conHea( + Buildings.Controls.OBC.CDL.Reals.PID conHea( final controllerType=controllerType, final k=k, final Ti = Ti, @@ -79,31 +79,31 @@ block HighMassSupplyTemperature_TRoom final reverseActing=true) "Controller for heating supply set point signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Controls.OBC.CDL.Continuous.Hysteresis hysHea( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysHea( uLow=0.1, uHigh=0.2) "Hysteresis to switch system on and off" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); protected - Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "Outputs one" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Outputs one" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant zero(final k=0) "Outputs zero" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(final k=0) "Outputs zero" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Controls.OBC.CDL.Continuous.Sources.Constant THeaSup_minimum(final k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup_minimum(final k( final unit="K", displayUnit="degC") = TSupSet_min) "Negative value of minimum heating supply water temperature" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Controls.OBC.CDL.Continuous.Sources.Constant THeaSup_maximum( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup_maximum( final k( final unit="K", displayUnit="degC") = TSupSet_max) "Maximum heating supply water temperature" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Controls.OBC.CDL.Continuous.Line TSup( + Buildings.Controls.OBC.CDL.Reals.Line TSup( limitBelow=false, limitAbove=false, y(final unit="K", diff --git a/Buildings/Controls/OBC/RadiantSystems/Heating/Validation/HighMassSupplyTemperature_TRoom.mo b/Buildings/Controls/OBC/RadiantSystems/Heating/Validation/HighMassSupplyTemperature_TRoom.mo index 2d666781948..5597000a91d 100644 --- a/Buildings/Controls/OBC/RadiantSystems/Heating/Validation/HighMassSupplyTemperature_TRoom.mo +++ b/Buildings/Controls/OBC/RadiantSystems/Heating/Validation/HighMassSupplyTemperature_TRoom.mo @@ -3,7 +3,7 @@ model HighMassSupplyTemperature_TRoom "Validation model for the room temperature controller" extends Modelica.Icons.Example; - Controls.OBC.CDL.Continuous.Sources.TimeTable TRooMea( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TRooMea( table=[0,18; 1,22; 2,18], extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, offset={273.15}, @@ -14,7 +14,7 @@ model HighMassSupplyTemperature_TRoom annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); protected - Controls.OBC.CDL.Continuous.Sources.Constant TRooSet(final k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooSet(final k( final unit="K", displayUnit="degC") = 293.15) "Set point temperature for room" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); diff --git a/Buildings/Controls/OBC/Shade/Shade_H.mo b/Buildings/Controls/OBC/Shade/Shade_H.mo index 4740ffa9914..cb733976615 100644 --- a/Buildings/Controls/OBC/Shade/Shade_H.mo +++ b/Buildings/Controls/OBC/Shade/Shade_H.mo @@ -21,7 +21,7 @@ block Shade_H annotation (Placement(transformation(extent={{100,-20},{140,20}}))); protected - CDL.Continuous.Hysteresis hys( + CDL.Reals.Hysteresis hys( final uLow=HLow, final uHigh=HHigh) "Hysteresis block" diff --git a/Buildings/Controls/OBC/Shade/Shade_T.mo b/Buildings/Controls/OBC/Shade/Shade_T.mo index f6b7adf0b55..269171213b1 100644 --- a/Buildings/Controls/OBC/Shade/Shade_T.mo +++ b/Buildings/Controls/OBC/Shade/Shade_T.mo @@ -23,7 +23,7 @@ block Shade_T annotation (Placement(transformation(extent={{100,-20},{140,20}}))); protected - CDL.Continuous.Hysteresis hys( + CDL.Reals.Hysteresis hys( final uLow=TLow, final uHigh=THigh) "Temperature hysteresis" diff --git a/Buildings/Controls/OBC/Shade/Validation/Shade_H.mo b/Buildings/Controls/OBC/Shade/Validation/Shade_H.mo index 1c477faf1d4..6b15d182ac1 100644 --- a/Buildings/Controls/OBC/Shade/Validation/Shade_H.mo +++ b/Buildings/Controls/OBC/Shade/Validation/Shade_H.mo @@ -6,7 +6,7 @@ model Shade_H HLow=400) "Shade controller" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - CDL.Continuous.Sources.Sin H( + CDL.Reals.Sources.Sin H( final amplitude=500, final freqHz=1/(2*1800), final offset=250) diff --git a/Buildings/Controls/OBC/Shade/Validation/Shade_T.mo b/Buildings/Controls/OBC/Shade/Validation/Shade_T.mo index a3eef5a62a8..4ae96d5c890 100644 --- a/Buildings/Controls/OBC/Shade/Validation/Shade_T.mo +++ b/Buildings/Controls/OBC/Shade/Validation/Shade_T.mo @@ -6,7 +6,7 @@ model Shade_T TLow=295.15) "Shade controller" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - CDL.Continuous.Sources.Sin T( + CDL.Reals.Sources.Sin T( final amplitude=10, final freqHz=1/(2*1800), final offset=293.15) diff --git a/Buildings/Controls/OBC/UnitConversions/From_Btu.mo b/Buildings/Controls/OBC/UnitConversions/From_Btu.mo index 2af296214a9..93bc290bdf2 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_Btu.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_Btu.mo @@ -15,7 +15,7 @@ block From_Btu "Block that converts energy from British thermal units to joule" protected constant Real k = 1055.056 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_BtuPerHour.mo b/Buildings/Controls/OBC/UnitConversions/From_BtuPerHour.mo index bd950fe7f71..7d2e64f41f8 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_BtuPerHour.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_BtuPerHour.mo @@ -15,7 +15,7 @@ block From_BtuPerHour "Block that converts power from British thermal units per protected constant Real k = 0.2930711 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_bar.mo b/Buildings/Controls/OBC/UnitConversions/From_bar.mo index ae8aca30e24..02c0fb3d107 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_bar.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_bar.mo @@ -16,7 +16,7 @@ block From_bar "Block that converts pressure from bar to pascal" protected constant Real k = 100000. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_cfm.mo b/Buildings/Controls/OBC/UnitConversions/From_cfm.mo index d20817133d1..9bf6763d7fc 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_cfm.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_cfm.mo @@ -15,7 +15,7 @@ block From_cfm "Block that converts volume flow from cubic feet per minute to cu protected constant Real k = 0.000471947 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_degC.mo b/Buildings/Controls/OBC/UnitConversions/From_degC.mo index beb3ec33d3f..71adf2efe14 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_degC.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_degC.mo @@ -17,11 +17,11 @@ protected constant Real k = 1. "Multiplier"; constant Real p = 273.15 "Adder"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k = k) "Gain factor" annotation (Placement(transformation(extent={{-68,-10},{-48,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter conv( + Buildings.Controls.OBC.CDL.Reals.AddParameter conv( final p = p) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_degF.mo b/Buildings/Controls/OBC/UnitConversions/From_degF.mo index b421a60b6ba..e9b986f86b0 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_degF.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_degF.mo @@ -17,11 +17,11 @@ protected constant Real k = 5./9. "Multiplier"; constant Real p = -32. * (5./9.) + 273.15 "Adder"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k = k) "Gain factor" annotation (Placement(transformation(extent={{-68,-10},{-48,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter conv( + Buildings.Controls.OBC.CDL.Reals.AddParameter conv( final p = p) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_gal.mo b/Buildings/Controls/OBC/UnitConversions/From_gal.mo index cac4ba57917..2b90f81834d 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_gal.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_gal.mo @@ -15,7 +15,7 @@ block From_gal "Block that converts volume from gallon to cubic meter" protected constant Real k = 0.003785412 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_hp.mo b/Buildings/Controls/OBC/UnitConversions/From_hp.mo index 7443bf1fa30..3a28d1ece43 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_hp.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_hp.mo @@ -15,7 +15,7 @@ block From_hp "Block that converts power from horsepower to watt" protected constant Real k = 0.7457 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_inH2O.mo b/Buildings/Controls/OBC/UnitConversions/From_inH2O.mo index b0d617f831c..e24471c0624 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_inH2O.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_inH2O.mo @@ -15,7 +15,7 @@ block From_inH2O "Block that converts pressure from inch of water gauge (at 60 d protected constant Real k = 248.84 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_psi.mo b/Buildings/Controls/OBC/UnitConversions/From_psi.mo index bcd2ba5b089..4dc290e20e0 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_psi.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_psi.mo @@ -15,7 +15,7 @@ block From_psi "Block that converts pressure from pound-force per square inch to protected constant Real k = 6895. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_quad.mo b/Buildings/Controls/OBC/UnitConversions/From_quad.mo index 3d45180a9e5..f5bd6490e54 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_quad.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_quad.mo @@ -15,7 +15,7 @@ block From_quad "Block that converts energy from quads to joule" protected constant Real k = 1055.56e15 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/From_ton.mo b/Buildings/Controls/OBC/UnitConversions/From_ton.mo index 01dc1fcc85c..338536e8c29 100644 --- a/Buildings/Controls/OBC/UnitConversions/From_ton.mo +++ b/Buildings/Controls/OBC/UnitConversions/From_ton.mo @@ -15,7 +15,7 @@ block From_ton "Block that converts power from ton of refrigeration to watt" protected constant Real k = 3517. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_Btu.mo b/Buildings/Controls/OBC/UnitConversions/To_Btu.mo index 23528a6a0fe..9d8cbf0a8a6 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_Btu.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_Btu.mo @@ -15,7 +15,7 @@ block To_Btu "Block that converts energy from joule to British thermal units" protected constant Real k = 1./1055.056 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_BtuPerHour.mo b/Buildings/Controls/OBC/UnitConversions/To_BtuPerHour.mo index a7e1fab1a9b..31c1d878755 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_BtuPerHour.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_BtuPerHour.mo @@ -15,7 +15,7 @@ block To_BtuPerHour "Block that converts power from watt to British thermal unit protected constant Real k = 1./0.2930711 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_bar.mo b/Buildings/Controls/OBC/UnitConversions/To_bar.mo index e15ea6908f1..ece4f0ab49e 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_bar.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_bar.mo @@ -16,7 +16,7 @@ block To_bar "Block that converts pressure from pascal to bar" protected constant Real k = 1./100000. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_cfm.mo b/Buildings/Controls/OBC/UnitConversions/To_cfm.mo index 21546378ef4..8ea6e1422fa 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_cfm.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_cfm.mo @@ -15,7 +15,7 @@ block To_cfm "Block that converts volume flow from cubic meters per second to cu protected constant Real k = 1./0.000471947 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_degC.mo b/Buildings/Controls/OBC/UnitConversions/To_degC.mo index 2184e7f6270..6cd5674c719 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_degC.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_degC.mo @@ -17,11 +17,11 @@ protected constant Real k = 1. "Multiplier"; constant Real p = -273.15 "Adder"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k = k) "Gain factor" annotation (Placement(transformation(extent={{-68,-10},{-48,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter conv( + Buildings.Controls.OBC.CDL.Reals.AddParameter conv( final p = p) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_degF.mo b/Buildings/Controls/OBC/UnitConversions/To_degF.mo index 443fc6da798..47871a9c951 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_degF.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_degF.mo @@ -17,11 +17,11 @@ protected constant Real k = 9./5. "Multiplier"; constant Real p = (-9./5.) * 273.15 + 32 "Adder"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k = k) "Gain factor" annotation (Placement(transformation(extent={{-68,-10},{-48,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter conv( + Buildings.Controls.OBC.CDL.Reals.AddParameter conv( final p = p) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_gal.mo b/Buildings/Controls/OBC/UnitConversions/To_gal.mo index eda3ccdfa86..348cdacb58c 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_gal.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_gal.mo @@ -15,7 +15,7 @@ block To_gal "Block that converts volume from cubic meter to gallon" protected constant Real k = 1./0.003785412 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_hp.mo b/Buildings/Controls/OBC/UnitConversions/To_hp.mo index 6bba5f9e53c..dcdf6bb96a7 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_hp.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_hp.mo @@ -15,7 +15,7 @@ block To_hp "Block that converts power from watt to horsepower" protected constant Real k = 1./0.7457 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_inH2O.mo b/Buildings/Controls/OBC/UnitConversions/To_inH2O.mo index 143bb8739be..c8015cd88d7 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_inH2O.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_inH2O.mo @@ -15,7 +15,7 @@ block To_inH2O "Block that converts pressure from pascal to inch of water gauge protected constant Real k = 1./248.84 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_psi.mo b/Buildings/Controls/OBC/UnitConversions/To_psi.mo index 47f97359d9b..58fb47e6fb8 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_psi.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_psi.mo @@ -15,7 +15,7 @@ block To_psi "Block that converts pressure from pascal to pound-force per square protected constant Real k = 1./6895. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_quad.mo b/Buildings/Controls/OBC/UnitConversions/To_quad.mo index 7a8e3f4af56..02f58ea4a71 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_quad.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_quad.mo @@ -15,7 +15,7 @@ block To_quad "Block that converts energy from joule to quads" protected constant Real k = 1./1055.56e15 "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/To_ton.mo b/Buildings/Controls/OBC/UnitConversions/To_ton.mo index b20d82e526d..e2af052ec34 100644 --- a/Buildings/Controls/OBC/UnitConversions/To_ton.mo +++ b/Buildings/Controls/OBC/UnitConversions/To_ton.mo @@ -15,7 +15,7 @@ block To_ton "Block that converts power from watt to ton of refrigeration" protected constant Real k = 1./3517. "Multiplier"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv( final k = k) "Unit converter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_Btu.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_Btu.mo index 7f7a6575636..f251ff7f064 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_Btu.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_Btu.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_Btu "Validation model for unit conversion from British thermal units to joule" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from British thermal units to joule " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_BtuPerHour.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_BtuPerHour.mo index 3e4c9a0e2c1..12f36877dc6 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_BtuPerHour.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_BtuPerHour.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_BtuPerHour "Validation model for unit conversion from British thermal units per hour to watt" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from British thermal units per hour to watt " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_bar.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_bar.mo index 9fa2e89ed18..5b19747fbc7 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_bar.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_bar.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_bar "Validation model for unit conversion from bar to pascal" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from bar to pascal " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_cfm.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_cfm.mo index b6a14f3d360..0ea5be7a169 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_cfm.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_cfm.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_cfm "Validation model for unit conversion from cubic feet per minute to cubic meters per second" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from cubic feet per minute to cubic meters per second " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_degC.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_degC.mo index fe0fd7e4188..bea110bf76a 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_degC.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_degC.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_degC "Validation model for unit conversion from degree Celsius to kelvin" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from degree Celsius to kelvin " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_degF.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_degF.mo index d2ee7f36ff6..bc34158622b 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_degF.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_degF.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_degF "Validation model for unit conversion from degree Fahrenheit to kelvin" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from degree Fahrenheit to kelvin " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_gal.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_gal.mo index eec9cb6c6d0..81024e1deaa 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_gal.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_gal.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_gal "Validation model for unit conversion from gallon to cubic meter" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from gallon to cubic meter " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_hp.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_hp.mo index 9a7a0cc73fb..fb077d12014 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_hp.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_hp.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_hp "Validation model for unit conversion from horsepower to watt" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from horsepower to watt " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_inH2O.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_inH2O.mo index 6eef4441e60..f0f501dacf5 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_inH2O.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_inH2O.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_inH2O "Validation model for unit conversion from inch of water gauge (at 60 degF) to pascal" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from inch of water gauge (at 60 degF) to pascal " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_psi.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_psi.mo index 20402022830..1ee9c5a5640 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_psi.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_psi.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_psi "Validation model for unit conversion from pound-force per square inch to pascal" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from pound-force per square inch to pascal " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_quad.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_quad.mo index 283c06ce8fb..a808f7e0a2f 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_quad.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_quad.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_quad "Validation model for unit conversion from quads to joule" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from quads to joule " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/From_ton.mo b/Buildings/Controls/OBC/UnitConversions/Validation/From_ton.mo index c2b439e8cff..0d13bb8eb74 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/From_ton.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/From_ton.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model From_ton "Validation model for unit conversion from ton of refrigeration to watt" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from ton of refrigeration to watt " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_Btu.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_Btu.mo index 12f0d992789..11922c0a837 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_Btu.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_Btu.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_Btu "Validation model for unit conversion from joule to British thermal units" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from joule to British thermal units " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_BtuPerHour.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_BtuPerHour.mo index 2e8cb977b88..24aa05ff688 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_BtuPerHour.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_BtuPerHour.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_BtuPerHour "Validation model for unit conversion from watt to British thermal units per hour" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from watt to British thermal units per hour " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_bar.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_bar.mo index c6fa02f2977..c95c57990ea 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_bar.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_bar.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_bar "Validation model for unit conversion from pascal to bar" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from pascal to bar " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_cfm.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_cfm.mo index cc0c59d82a3..a800a84901e 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_cfm.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_cfm.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_cfm "Validation model for unit conversion from cubic meters per second to cubic feet per minute" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from cubic meters per second to cubic feet per minute " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_degC.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_degC.mo index 2f86254c577..3539f859267 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_degC.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_degC.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_degC "Validation model for unit conversion from kelvin to degree Celsius" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from kelvin to degree Celsius " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_degF.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_degF.mo index 7ad17526d9d..faac7ecd419 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_degF.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_degF.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_degF "Validation model for unit conversion from kelvin to degree Fahrenheit" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from kelvin to degree Fahrenheit " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_gal.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_gal.mo index 4d302d385dc..7e0fba09627 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_gal.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_gal.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_gal "Validation model for unit conversion from cubic meter to gallon" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from cubic meter to gallon " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_hp.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_hp.mo index db57330d342..f735614e993 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_hp.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_hp.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_hp "Validation model for unit conversion from watt to horsepower" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from watt to horsepower " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_inH2O.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_inH2O.mo index 78c1b474e2e..82023c0a14c 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_inH2O.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_inH2O.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_inH2O "Validation model for unit conversion from pascal to inch of water gauge (at 60 degF)" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from pascal to inch of water gauge (at 60 degF) " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_psi.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_psi.mo index 8a12dd243de..e9028e919d0 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_psi.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_psi.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_psi "Validation model for unit conversion from pascal to pound-force per square inch" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from pascal to pound-force per square inch " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_quad.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_quad.mo index 0d101814414..2d1df32c80c 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_quad.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_quad.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_quad "Validation model for unit conversion from joule to quads" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from joule to quads " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/UnitConversions/Validation/To_ton.mo b/Buildings/Controls/OBC/UnitConversions/Validation/To_ton.mo index 48b6d08fb5f..0f21cb1bf21 100644 --- a/Buildings/Controls/OBC/UnitConversions/Validation/To_ton.mo +++ b/Buildings/Controls/OBC/UnitConversions/Validation/To_ton.mo @@ -2,10 +2,10 @@ within Buildings.Controls.OBC.UnitConversions.Validation; model To_ton "Validation model for unit conversion from watt to ton of refrigeration" extends Modelica.Icons.Example; - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between the calculated and expected conversion output" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); @@ -22,19 +22,19 @@ protected "Unit converter from watt to ton of refrigeration " annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value( final k=kin) "Value to convert" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1( final k=kin1) "Value to convert" annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result( final k=kout) "Expected converted value" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1( final k=kout1) "Expected converted value" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); diff --git a/Buildings/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo b/Buildings/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo index 8da09624b70..7c3b2d0ed36 100644 --- a/Buildings/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo +++ b/Buildings/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo @@ -75,15 +75,15 @@ protected Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler dTHVACOn "Get the temperature difference when the HVAC system starts" annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0) "Deadband case" annotation (Placement(transformation(extent={{40,50},{60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant timReaMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant timReaMin( final k=tReaMin) "Minimum time to reach set point (used to avoid division by zero)" annotation (Placement(transformation(extent={{-80,-42},{-60,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant defTemSlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant defTemSlo( final k=temSloDef) "Default temperature slope in case of zero division" annotation (Placement(transformation(extent={{88,-40},{108,-20}}))); @@ -93,18 +93,18 @@ protected Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg "The instant when the zone temperature reaches setpoint" annotation (Placement(transformation(extent={{-148,-30},{-128,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHigh) "Comparing zone temperature with zone setpoint" annotation (Placement(transformation(extent={{-260,64},{-240,84}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOpt( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOpt( final pre_y_start=false, final uHigh=0, final uLow=-60) "Hysteresis to activate the optimal start" annotation (Placement(transformation(extent={{320,-90},{340,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxStaTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxStaTim( final k=tOptMax) "Maximum optimal start time" annotation (Placement(transformation(extent={{210,-40},{230,-20}}))); @@ -112,19 +112,19 @@ protected final duration=tOptMax+11*3600) "Hold the start time for timer" annotation (Placement(transformation(extent={{-240,0},{-220,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide temSlo + Buildings.Controls.OBC.CDL.Reals.Divide temSlo "Calculate temperature slope" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); Buildings.Controls.OBC.CDL.Logical.Pre pre "Break algebraic loops" annotation (Placement(transformation(extent={{390,-16},{410,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate the time duration to reach the setpoint" annotation (Placement(transformation(extent={{-88,-10},{-68,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate differential between time-to-next-occupancy and the cool-down time" annotation (Placement(transformation(extent={{280,-90},{300,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min + Buildings.Controls.OBC.CDL.Reals.Min min "Get the final optimal start time" annotation (Placement(transformation(extent={{240,-16},{260,4}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam @@ -142,29 +142,29 @@ protected Buildings.Controls.OBC.CDL.Logical.Not not1 "Becomes true when the setpoint is reached" annotation (Placement(transformation(extent={{-220,64},{-200,84}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide tOptCal + Buildings.Controls.OBC.CDL.Reals.Divide tOptCal "Calculate optimal start time using the averaged previous temperature slope" annotation (Placement(transformation(extent={{160,-10},{180,10}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler samTimOpt "Get the sampled optimal start time at the same time each day" annotation (Placement(transformation(extent={{190,-10},{210,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=thrOptOn) "The threshold for optOn signal becomes true" annotation (Placement(transformation(extent={{320,-16},{340,4}}))); Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and" annotation (Placement(transformation(extent={{360,-16},{380,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Max timRea + Buildings.Controls.OBC.CDL.Reals.Max timRea "Time required to reach the set point" annotation (Placement(transformation(extent={{-40,-16},{-20,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Max temSloAve + Buildings.Controls.OBC.CDL.Reals.Max temSloAve "Temperature slope during heat up or cool down over the past sampled days" annotation (Placement(transformation(extent={{120,-16},{140,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch dTUse + Buildings.Controls.OBC.CDL.Reals.Switch dTUse "dT used in the calculations (to avoid negative dT)" annotation (Placement(transformation(extent={{80,70},{100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold reqStaUp( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold reqStaUp( final t=0, final h=0) "Output true if optimal startup is needed" diff --git a/Buildings/Controls/OBC/Utilities/OptimalStart.mo b/Buildings/Controls/OBC/Utilities/OptimalStart.mo index 45003994452..c14447494df 100644 --- a/Buildings/Controls/OBC/Utilities/OptimalStart.mo +++ b/Buildings/Controls/OBC/Utilities/OptimalStart.mo @@ -92,37 +92,37 @@ block OptimalStart final uHigh=uHigh) if computeCooling "Optimal start time for cooling system" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold hysSta( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold hysSta( t=60, h=60) "Hysteresis to activate the optimal start boolean output" annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Max max + Buildings.Controls.OBC.CDL.Reals.Max max "Get the maximum optimal start time " annotation (Placement(transformation(extent={{100,30},{120,50}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( p=-tOptMax) "Maximum optimal start time" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Get the optimal start boolean output" annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTHea if computeHeating + Buildings.Controls.OBC.CDL.Reals.Subtract dTHea if computeHeating "Temperature difference between heating setpoint and zone temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTCoo if computeCooling + Buildings.Controls.OBC.CDL.Reals.Subtract dTCoo if computeCooling "Temperature difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg "Stop calculation" annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( final k=0) if not computeHeating "Becomes effective when optimal start is only for heating" annotation (Placement(transformation(extent={{60,40},{80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=0) if not computeCooling "Becomes effective when optimal start is only for cooling" annotation (Placement(transformation(extent={{60,10},{80,30}}))); diff --git a/Buildings/Controls/OBC/Utilities/PIDWithInputGains.mo b/Buildings/Controls/OBC/Utilities/PIDWithInputGains.mo index 1d4f3764688..bca4ad76a99 100644 --- a/Buildings/Controls/OBC/Utilities/PIDWithInputGains.mo +++ b/Buildings/Controls/OBC/Utilities/PIDWithInputGains.mo @@ -62,50 +62,50 @@ block PIDWithInputGains Buildings.Controls.OBC.CDL.Interfaces.BooleanInput trigger "Resets the controller output when trigger becomes true" annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={-160,-220}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={-60,-120}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract controlError + Buildings.Controls.OBC.CDL.Reals.Subtract controlError "Control error (set point - measurement)" annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply P + Buildings.Controls.OBC.CDL.Reals.Multiply P "Proportional action" annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset I( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset I( final k=1, final y_start=xi_start) if with_I "Integral term" annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Derivative D( + Buildings.Controls.OBC.CDL.Reals.Derivative D( final y_start=yd_start) if with_D "Derivative term" annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errP + Buildings.Controls.OBC.CDL.Reals.Subtract errP "P error" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errD if with_D + Buildings.Controls.OBC.CDL.Reals.Subtract errD if with_D "D error" annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI1 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI1 if with_I "I error (before anti-windup compensation)" annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errI2 if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract errI2 if with_I "I error (after anti-windup compensation)" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=yMax, final uMin=yMin) "Limiter" annotation (Placement(transformation(extent={{120,80},{140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide antWinGai2 if with_I + Buildings.Controls.OBC.CDL.Reals.Divide antWinGai2 if with_I "Outputs of anti-windup compensation" annotation (Placement(transformation(extent={{100,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide gaiI if with_I "Gain of the integral term" + Buildings.Controls.OBC.CDL.Reals.Divide gaiI if with_I "Gain of the integral term" annotation (Placement(transformation(extent={{-200,116},{-180,136}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply errIWithGai if with_I + Buildings.Controls.OBC.CDL.Reals.Multiply errIWithGai if with_I "I error (after multiplying with the gain of the integral term)" annotation (Placement(transformation(extent={{-84,28},{-64,48}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulkTd if with_D + Buildings.Controls.OBC.CDL.Reals.Multiply mulkTd if with_D "Product of k and Td" annotation (Placement(transformation(extent={{-200,150},{-180,170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThrkTd( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThrkTd( t=1E-6, h=1E-6/2) if with_D @@ -125,39 +125,39 @@ protected final parameter Boolean with_D=controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PD or controllerType == Buildings.Controls.OBC.CDL.Types.SimpleController.PID "Boolean flag to enable derivative action" annotation (Evaluate=true,HideResult=true); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Dzero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Dzero( final k=0) if not with_D "Zero input signal" annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, {-30,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Izero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Izero( final k=0) if not with_I "Zero input signal" annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uS_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uMea_revAct( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( final k=revAct/r) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPD + Buildings.Controls.OBC.CDL.Reals.Add addPD "Outputs P and D gains added" annotation (Placement(transformation(extent={{20,124},{40,144}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPID + Buildings.Controls.OBC.CDL.Reals.Add addPID "Outputs P, I and D gains added" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract antWinErr if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I "Error for anti-windup compensation" annotation (Placement(transformation(extent={{160,50},{180,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter antWinGai1(k=1/Ni) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai1(k=1/Ni) if with_I "Gain for anti-windup compensation without the proportional gain" annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yResSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yResSig( final k=y_reset) if with_I "Signal for y_reset" annotation (Placement(transformation(extent={{-140,-84},{-120,-64}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addRes if with_I + Buildings.Controls.OBC.CDL.Reals.Subtract addRes if with_I "Adder for integrator reset" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( @@ -171,7 +171,7 @@ protected if with_D "Assertion on k and Td" annotation (Placement(transformation(extent={{180,160},{200,180}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiT(final k=1/Nd) if with_D + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiT(final k=1/Nd) if with_D "Gain to compute time constant for derivative action" annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); @@ -408,8 +408,8 @@ where ymin and ymax are limits for the contr

          This block is identical to - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset, + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset, except that the controller gains k, Ti and Td are inputs rather than parameters.

          diff --git a/Buildings/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo b/Buildings/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo index 77e9719964a..99492c2bd27 100644 --- a/Buildings/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo +++ b/Buildings/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo @@ -62,132 +62,132 @@ block SupplyReturnTemperatureReset annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); protected - CDL.Continuous.Sources.Constant dTOutHeaBal_nominal( + CDL.Reals.Sources.Constant dTOutHeaBal_nominal( final k=dTOutHeaBal, y(final quantity="TemperatureDifference", final unit="K")) "Offset of outdoor temperature to take into account heat gain" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - CDL.Continuous.Sources.Constant TSup_nom( + CDL.Reals.Sources.Constant TSup_nom( final k=TSup_nominal, y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Heating supply water temperature at nominal condition" annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); - CDL.Continuous.Sources.Constant TZon_nom( + CDL.Reals.Sources.Constant TZon_nom( final k=TZon_nominal, y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Zone temperature at design condition" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - CDL.Continuous.Sources.Constant zer( + CDL.Reals.Sources.Constant zer( final k=1E-100) "Small positive constant to avoid log(0)" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - CDL.Continuous.Sources.Constant TRet_nom( + CDL.Reals.Sources.Constant TRet_nom( final k=TRet_nominal, y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Heating return water temperature at nominal condition" annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); - CDL.Continuous.Sources.Constant TOut_nom( + CDL.Reals.Sources.Constant TOut_nom( final k=TOut_nominal, y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Outside temperature at design condition" annotation (Placement(transformation(extent={{-80,38},{-60,58}}))); - CDL.Continuous.Sources.Constant expM( + CDL.Reals.Sources.Constant expM( final k=m) "Exponent of heat transfer" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); - CDL.Continuous.Sources.Constant one( + CDL.Reals.Sources.Constant one( final k=1) "Outputs 1" annotation (Placement(transformation(extent={{-80,-140},{-60,-120}}))); - CDL.Continuous.Add TOutOffSet( + CDL.Reals.Add TOutOffSet( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Effective outside temperature for heat transfer (takes into account zone heat gains)" annotation (Placement(transformation(extent={{-80,-58},{-60,-38}}))); - CDL.Continuous.Subtract qRelDen( + CDL.Reals.Subtract qRelDen( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Denominator for relative heating load calculation" annotation (Placement(transformation(extent={{-40,74},{-20,94}}))); - CDL.Continuous.Subtract qRelNum( + CDL.Reals.Subtract qRelNum( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Numerator for relative heating load calculation" annotation (Placement(transformation(extent={{-40,-52},{-20,-32}}))); - CDL.Continuous.Divide qRel "Relative heating load = Q_flow/Q_flow_nominal" + CDL.Reals.Divide qRel "Relative heating load = Q_flow/Q_flow_nominal" annotation (Placement(transformation(extent={{0,24},{20,44}}))); - CDL.Continuous.Subtract dTFlu2_nom + CDL.Reals.Subtract dTFlu2_nom "Heating supply minus return water temperature at nominal condition" annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); - CDL.Continuous.Average TFluAve_nominal( + CDL.Reals.Average TFluAve_nominal( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Average heating water temperature at nominal condition" annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); - CDL.Continuous.Subtract dTFluAve_nominal( + CDL.Reals.Subtract dTFluAve_nominal( y(final quantity="TemperatureDifference", final unit="K")) "Average heating water temperature minus room temperature at nominal condition" annotation (Placement(transformation(extent={{36,110},{56,130}}))); - CDL.Continuous.Divide mInv "Inverse of heat transfer exponent, y = 1/m" + CDL.Reals.Divide mInv "Inverse of heat transfer exponent, y = 1/m" annotation (Placement(transformation(extent={{-40,-160},{-20,-140}}))); - CDL.Continuous.Add TAve( + CDL.Reals.Add TAve( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Average of supply and return temperature" annotation (Placement(transformation(extent={{-40,276},{-20,296}}))); - CDL.Continuous.Add TSupCur( + CDL.Reals.Add TSupCur( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Current supply water temperature" annotation (Placement(transformation(extent={{42,270},{62,290}}))); - CDL.Continuous.Subtract TRetCur( + CDL.Reals.Subtract TRetCur( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Current return water temperature" annotation (Placement(transformation(extent={{40,238},{60,258}}))); - CDL.Continuous.Max qRel0 + CDL.Reals.Max qRel0 "Relative heating load, but always non-zero value" annotation (Placement(transformation(extent={{32,30},{52,50}}))); - CDL.Continuous.Multiply pro "Product used to compute q^(1/m)" + CDL.Reals.Multiply pro "Product used to compute q^(1/m)" annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - CDL.Continuous.Exp qRaiInvM + CDL.Reals.Exp qRaiInvM "Outputs qRel^(1/m)" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); - CDL.Continuous.Log log1 + CDL.Reals.Log log1 "Logarithm used for evaluation of qRel^(1/m)" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - CDL.Continuous.Multiply dTQ(y( + CDL.Reals.Multiply dTQ(y( final quantity="TemperatureDifference", final unit="K")) "Temperature contribution due to qRel^(1/m)" annotation (Placement(transformation(extent={{-80,220},{-60,240}}))); - CDL.Continuous.Multiply dTFlu(y( + CDL.Reals.Multiply dTFlu(y( final quantity="TemperatureDifference", final unit="K")) "Supply minus return water temperature" annotation (Placement(transformation(extent={{0,220},{20,240}}))); - CDL.Continuous.Add TOutOffSet_nominal( + CDL.Reals.Add TOutOffSet_nominal( y(final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC")) "Effective outside temperature for heat transfer at nominal condition (takes into account zone heat gains)" annotation (Placement(transformation(extent={{-44,32},{-24,52}}))); - CDL.Continuous.MultiplyByParameter gai( + CDL.Reals.MultiplyByParameter gai( final k=0.5, y(final quantity="TemperatureDifference", final unit="K")) "Gain factor" diff --git a/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo b/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo index b4754364586..4c13c61e508 100644 --- a/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo +++ b/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo @@ -8,7 +8,7 @@ model SupplyReturnTemperatureReset TOut_nominal=263.15) "Compute the supply and return set point of heating systems with varying outdoor temperature" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TOut( height=40, duration=1, offset=263.15, @@ -23,7 +23,7 @@ model SupplyReturnTemperatureReset TOut_nominal=263.15) "Compute the supply and return set point of heating systems with changing room setpoint temperature" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse TRoo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse TRoo1( offset=273.15+20, shift=0.5, amplitude=-5, @@ -31,12 +31,12 @@ model SupplyReturnTemperatureReset y(unit="K")) "Night set back from 20 degC to 15 degC" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut1( k=273.15-10, y(unit="K")) "Constant outdoor air temperature" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRoo( k=273.15+20, y(unit="K")) "Room temperature 20 degC" diff --git a/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo b/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo index 27db1c60e5f..3289cd7a12a 100644 --- a/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo +++ b/Buildings/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo @@ -8,14 +8,14 @@ model SupplyReturnTemperatureResetExponent TOut_nominal=263.15) "Compute the supply and return set point of heating systems with varying outdoor temperature and m=1" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TOut( height=30, duration=1, offset=258.15, y(unit="K")) "Outdoor temperature varying from -10 degC to 30 degC" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRoo( k=273.15+20, y(unit="K")) "Room temperature 20 degC" diff --git a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo index b784b799555..efa2a255e26 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo @@ -11,11 +11,11 @@ model OptimalStartCoolingNegativeStartTime y_start=24+273.15) "Room air temperature" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( k=24+273.15) "Zone cooling setpoint during occupancy" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( amplitude=5, freqHz=1/86400, offset=28+273.15, @@ -23,26 +23,26 @@ model OptimalStartCoolingNegativeStartTime displayUnit="s")=-691200) "Outdoor dry bulb temperature to test cooling system" annotation (Placement(transformation(extent={{-194,50},{-174,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter UA(k=100) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=100) "Overall heat loss coefficient" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Temperature difference between zone and outdoor" annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add dTdt + Buildings.Controls.OBC.CDL.Reals.Add dTdt "Temperature derivative" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QCoo(k=-2000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-2000) "Heat extraction in the zone" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( realTrue=-6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{60,0},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add + Buildings.Controls.OBC.CDL.Reals.Add add "Reset setpoint from unoccupied to occupied during optimal start period" annotation (Placement(transformation(extent={{120,0},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=1, reverseActing=false) diff --git a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo index e07364664ce..cb9668bbd3e 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo @@ -11,11 +11,11 @@ model OptimalStartCoolingPositiveStartTime y_start=24+273.15) "Room air temperature" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( k=24+273.15) "Zone cooling setpoint during occupancy" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( amplitude=5, freqHz=1/86400, offset=28+273.15, @@ -23,26 +23,26 @@ model OptimalStartCoolingPositiveStartTime displayUnit="s")=0) "Outdoor dry bulb temperature to test cooling system" annotation (Placement(transformation(extent={{-194,40},{-174,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter UA(k=100) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=100) "Overall heat loss coefficient" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Temperature difference between zone and outdoor" annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add dTdt + Buildings.Controls.OBC.CDL.Reals.Add dTdt "Temperature derivative" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QCoo(k=-2000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-2000) "Heat extraction in the zone" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( realTrue=-6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{60,0},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add + Buildings.Controls.OBC.CDL.Reals.Add add "Reset setpoint from unoccupied to occupied during optimal start period" annotation (Placement(transformation(extent={{120,0},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=1, reverseActing=false) diff --git a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo index 3a4f5453611..26c15653781 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo @@ -11,7 +11,7 @@ model OptimalStartHeating y_start=21+273.15) "Room air temperature" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetHeaOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOcc( k=21+273.15) "Zone heating setpoint during occupancy" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); @@ -20,23 +20,23 @@ model OptimalStartHeating period=24*3600) "Daily schedule" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter UA(k=10) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=10) "Overall heat loss coefficient" annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Temperature difference between zone and outdoor" annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add dTdt + Buildings.Controls.OBC.CDL.Reals.Add dTdt "Temperature derivative" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QHea(k=500) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=500) "Heat injection in the zone" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( realTrue=6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{60,0},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( amplitude=10, freqHz=1/86400, phase=3.1415926535898, @@ -45,12 +45,12 @@ model OptimalStartHeating displayUnit="d")=-172800) "Outdoor dry bulb temperature to test heating system" annotation (Placement(transformation(extent={{-194,40},{-174,60}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=1.5) "PI control for space heating" annotation (Placement(transformation(extent={{160,0},{180,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add + Buildings.Controls.OBC.CDL.Reals.Add add "Reset temperature from unoccupied to occupied for optimal start period" annotation (Placement(transformation(extent={{120,0},{140,20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal TSetHea( diff --git a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo index 020b3f0dda1..cfeb20b3773 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo @@ -11,11 +11,11 @@ model OptimalStartHeatingCooling y_start=19+273.15) "Room air temperature" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( k=24+273.15) "Zone cooling setpoint during occupancy" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOutBase( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOutBase( amplitude=5, freqHz=1/86400, offset=15+273.15, @@ -23,23 +23,23 @@ model OptimalStartHeatingCooling displayUnit="h")=0) "Outdoor dry bulb temperature, base component" annotation (Placement(transformation(extent={{-212,70},{-192,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter UA(k=25) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=25) "Overall heat loss coefficient" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Temperature difference between zone and outdoor" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QCoo(k=-4000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-4000) "Heat extraction in the zone" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( realTrue=-6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{80,0},{100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Reset temperature from unoccupied to occupied for optimal start period" annotation (Placement(transformation(extent={{140,0},{160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID1( + Buildings.Controls.OBC.CDL.Reals.PID conPID1( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=3, reverseActing=false) @@ -50,11 +50,11 @@ model OptimalStartHeatingCooling period=24*3600) "Daily schedule" annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( nin=3) "Sum heat gains" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetHeaOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOcc( k=21+273.15) "Zone heating setpoint during occupancy" annotation (Placement(transformation(extent={{-20,100},{0,120}}))); @@ -62,21 +62,21 @@ model OptimalStartHeatingCooling realTrue=6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Reset temperature from unoccupied to occupied for optimal start period" annotation (Placement(transformation(extent={{140,40},{160,60}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=3) "PI control for space heating" annotation (Placement(transformation(extent={{180,40},{200,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QHea(k=2000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=2000) "Heat injection in the zone" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Add TOut + Buildings.Controls.OBC.CDL.Reals.Add TOut "Outdoor dry bulb temperature" annotation (Placement(transformation(extent={{-174,50},{-154,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul( shift( displayUnit="d")=604800, amplitude=15, diff --git a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo index 708aa336353..4ca3eafa5b7 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo @@ -11,7 +11,7 @@ model OptimalStartNoHeatingNoCooling y_start=19+273.15) "Room air temperature" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOutBase( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOutBase( amplitude=5, freqHz=1/86400, offset=15+273.15, @@ -19,23 +19,23 @@ model OptimalStartNoHeatingNoCooling displayUnit="h")=0) "Outdoor dry bulb temperature, base component" annotation (Placement(transformation(extent={{-212,70},{-192,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter UA(k=25) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=25) "Overall heat loss coefficient" annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Temperature difference between zone and outdoor" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QCoo(k=-4000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-4000) "Heat extraction in the zone" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( realTrue=-6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{80,0},{100,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Reset temperature from unoccupied to occupied for optimal start period" annotation (Placement(transformation(extent={{140,0},{160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID1( + Buildings.Controls.OBC.CDL.Reals.PID conPID1( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=3, reverseActing=false) @@ -46,7 +46,7 @@ model OptimalStartNoHeatingNoCooling period=24*3600) "Daily schedule" annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( nin=3) "Sum heat gains" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); @@ -54,21 +54,21 @@ model OptimalStartNoHeatingNoCooling realTrue=6) "Convert Boolean to Real signal" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "Reset temperature from unoccupied to occupied for optimal start period" annotation (Placement(transformation(extent={{140,40},{160,60}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=3) "PI control for space heating" annotation (Placement(transformation(extent={{180,40},{200,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter QHea(k=2000) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=2000) "Heat injection in the zone" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Add TOut + Buildings.Controls.OBC.CDL.Reals.Add TOut "Outdoor dry bulb temperature" annotation (Placement(transformation(extent={{-174,50},{-154,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul( shift( displayUnit="d")=604800, amplitude=15, diff --git a/Buildings/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo b/Buildings/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo index 09edd6b26fb..a7c58f30640 100644 --- a/Buildings/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo +++ b/Buildings/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo @@ -1,11 +1,11 @@ within Buildings.Controls.OBC.Utilities.Validation; model PIDWithInputGains "Test model for PIDWithInputGains" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse( period=0.25) "Setpoint" annotation (Placement(transformation(extent={{-30,14},{-10,34}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const( k=0.5) "Measured value" annotation (Placement(transformation(extent={{-30,-22},{-10,-2}}))); @@ -13,7 +13,7 @@ model PIDWithInputGains controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID) "PID controller with input gains" annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset PID( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset PID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID, k=1, Ti=0.5, @@ -23,7 +23,7 @@ model PIDWithInputGains Buildings.Controls.OBC.CDL.Logical.Sources.Pulse resSig(period=1) "Reset signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse k( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse k( amplitude=0.2, width=0.4, period=1, @@ -31,7 +31,7 @@ model PIDWithInputGains offset=1) "Control gain signal" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse Ti( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse Ti( amplitude=0.2, width=0.4, period=1, @@ -39,7 +39,7 @@ model PIDWithInputGains offset=0.5) "Time constant signal for the integral term" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse Td( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse Td( amplitude=0.1, width=0.4, period=1, @@ -48,20 +48,20 @@ model PIDWithInputGains "Time constant signal for the derivative term" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - CDL.Continuous.Abs abs1 "Absolute value of controller output" + CDL.Reals.Abs abs1 "Absolute value of controller output" annotation (Placement(transformation(extent={{110,-10},{130,10}}))); - CDL.Continuous.Subtract sub "Difference in controller output" + CDL.Reals.Subtract sub "Difference in controller output" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); - CDL.Continuous.LessThreshold lesThr(t=1E-5, h=1E-4) + CDL.Reals.LessThreshold lesThr(t=1E-5, h=1E-4) "Output true if outputs are bigger than threshold" annotation (Placement(transformation(extent={{140,-10},{160,10}}))); CDL.Utilities.Assert assMes(message="Control outputs differ more than expected") "Make sure outputs are within expected tolerance" annotation (Placement(transformation(extent={{200,20},{220,40}}))); - CDL.Continuous.Sources.ModelTime modTim + CDL.Reals.Sources.ModelTime modTim "Model time" annotation (Placement(transformation(extent={{80,40},{100,60}}))); - CDL.Continuous.GreaterThreshold greThr(t=0.59) + CDL.Reals.GreaterThreshold greThr(t=0.59) "Output true if model time is below 0.6" annotation (Placement(transformation(extent={{140,40},{160,60}}))); CDL.Logical.Or or2 @@ -119,8 +119,8 @@ Buildings.Controls.OBC.Utilities.PIDWithInputGains. For t ∈ [0, 0.6] both PID controllers have the same gains. During this time, they generate the same output. Afterwards, the gains, and hence also their outputs, differ. - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset. + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset.

          ", revisions=" diff --git a/Buildings/Examples/DualFanDualDuct/ClosedLoop.mo b/Buildings/Examples/DualFanDualDuct/ClosedLoop.mo index baa7461ffe4..d7f60c6be64 100644 --- a/Buildings/Examples/DualFanDualDuct/ClosedLoop.mo +++ b/Buildings/Examples/DualFanDualDuct/ClosedLoop.mo @@ -542,7 +542,7 @@ model ClosedLoop "Closed loop model of a dual-fan dual-duct system" Controls.MixedAirTemperatureSetpoint TMixSet "Mixed air temperature set point" annotation (Placement(transformation(extent={{-190,110},{-170,130}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTMix( + Buildings.Controls.OBC.CDL.Reals.PID conTMix( k=0.05, Ti=1200, reverseActing=false) "Controller for mixed air temperature" diff --git a/Buildings/Examples/DualFanDualDuct/Controls/RoomMixingBox.mo b/Buildings/Examples/DualFanDualDuct/Controls/RoomMixingBox.mo index 1c04067a922..42ebfc691fa 100644 --- a/Buildings/Examples/DualFanDualDuct/Controls/RoomMixingBox.mo +++ b/Buildings/Examples/DualFanDualDuct/Controls/RoomMixingBox.mo @@ -3,13 +3,13 @@ block RoomMixingBox "Controller for room mixing box" extends Modelica.Blocks.Icons.Block; parameter Modelica.Units.SI.MassFlowRate m_flow_min "Minimum mass flow rate"; - Buildings.Controls.OBC.CDL.Continuous.PID conHea( + Buildings.Controls.OBC.CDL.Reals.PID conHea( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Td=60, k=0.1, Ti=120) "Controller for heating" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conCoo( + Buildings.Controls.OBC.CDL.Reals.PID conCoo( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, reverseActing=false, Td=60, @@ -34,7 +34,7 @@ block RoomMixingBox "Controller for room mixing box" "Fan operation, true if fan is running" annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), iconTransformation(extent={{-140,-100},{-100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conFloRat( + Buildings.Controls.OBC.CDL.Reals.PID conFloRat( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Td=60, k=0.1, @@ -44,7 +44,7 @@ block RoomMixingBox "Controller for room mixing box" Modelica.Blocks.Sources.Constant mAirSet(k=m_flow_min) "Set point for minimum air flow rate" annotation (Placement(transformation(extent={{-72,30},{-52,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max + Buildings.Controls.OBC.CDL.Reals.Max max "Adds control signal for minimum flow rate of zone" annotation (Placement(transformation(extent={{38,38},{58,58}}))); Modelica.Blocks.Interfaces.RealInput TRooSetHea(unit="K") @@ -60,26 +60,26 @@ block RoomMixingBox "Controller for room mixing box" annotation (Placement(transformation(extent={{8,12},{28,32}}))); Modelica.Blocks.Math.Product product1 annotation (Placement(transformation(extent={{8,-44},{28,-24}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxCoo + Buildings.Controls.OBC.CDL.Reals.Max maxCoo "Adds control signal for minimum flow rate of zone" annotation (Placement(transformation(extent={{40,-26},{60,-6}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTSet + Buildings.Controls.OBC.CDL.Reals.Subtract dTSet "Difference in set point" annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTRooHea + Buildings.Controls.OBC.CDL.Reals.Subtract dTRooHea "Difference in room air temperature compared to heating setpoint" annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter gaiCoo(uMax=1, uMin=0) + Buildings.Controls.OBC.CDL.Reals.Limiter gaiCoo(uMax=1, uMin=0) "Gain of cooling" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide gaiCooUnl + Buildings.Controls.OBC.CDL.Reals.Divide gaiCooUnl "Gain of cooling, unlimited" annotation (Placement(transformation(extent={{-28,-80},{-8,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiHot "Switch for heating" + Buildings.Controls.OBC.CDL.Reals.Switch swiHot "Switch for heating" annotation (Placement(transformation(extent={{74,30},{94,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiCoo "Switch for cooling" + Buildings.Controls.OBC.CDL.Reals.Switch swiCoo "Switch for cooling" annotation (Placement(transformation(extent={{72,-60},{92,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) "Zero signal" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Zero signal" annotation (Placement(transformation(extent={{34,-68},{54,-48}}))); equation connect(mAir_flow, conFloRat.u_m) annotation (Line( diff --git a/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo b/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo index f171f6579a7..df6138b2b8f 100644 --- a/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo +++ b/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo @@ -161,7 +161,7 @@ model TwoRoomsWithStorage annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo2 annotation (Placement(transformation(extent={{480,216},{500,236}}))); - Controls.OBC.CDL.Continuous.PIDWithReset conPum( + Controls.OBC.CDL.Reals.PIDWithReset conPum( yMax=1, Td=60, yMin=0.05, @@ -181,7 +181,7 @@ model TwoRoomsWithStorage from_dp=true, use_inputFilter=false) "Radiator valve" annotation (Placement(transformation(extent={{360,120},{380,140}}))); - Controls.OBC.CDL.Continuous.PID conRoo2( + Controls.OBC.CDL.Reals.PID conRoo2( yMax=1, yMin=0, Ti=60, @@ -199,7 +199,7 @@ model TwoRoomsWithStorage from_dp=true, use_inputFilter=false) "Radiator valve" annotation (Placement(transformation(extent={{360,390},{380,410}}))); - Controls.OBC.CDL.Continuous.PID conRoo1( + Controls.OBC.CDL.Reals.PID conRoo1( yMax=1, yMin=0, Ti=60, @@ -234,7 +234,7 @@ model TwoRoomsWithStorage extent={{-10,-10},{10,10}}, rotation=90, origin={220,-40}))); - Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Controls.OBC.CDL.Reals.PIDWithReset conVal( yMax=1, yMin=0, xi_start=1, @@ -259,12 +259,12 @@ model TwoRoomsWithStorage Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemTop "Tank temperature" annotation (Placement(transformation(extent={{284,-180},{304,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=TSup_nominal + 5) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=TSup_nominal + 5) "Check for temperature at the bottom of the tank" annotation (Placement(transformation(extent={{400,-240},{420,-220}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaPum "Signal converter for pump" annotation (Placement(transformation(extent={{420,-130},{400,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater lesThr + Buildings.Controls.OBC.CDL.Reals.Greater lesThr "Check for temperature at the top of the tank" annotation (Placement(transformation(extent={{400,-178},{420,-158}}))); Buildings.Fluid.Sensors.TemperatureTwoPort temSup( @@ -289,29 +289,29 @@ model TwoRoomsWithStorage Controls.SetPoints.OccupancySchedule occSch1(occupancy=3600*{7,8,10,11,11.5, 15,19,21}) "Occupancy schedule" annotation (Placement(transformation(extent={{300,556},{320,576}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch1 + Buildings.Controls.OBC.CDL.Reals.Switch switch1 annotation (Placement(transformation(extent={{340,550},{360,570}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) "Outputs zero" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Outputs zero" annotation (Placement(transformation(extent={{260,540},{280,560}}))); Controls.SetPoints.OccupancySchedule occSch2( firstEntryOccupied=false, occupancy=3600*{7,10,12,22}) "Occupancy schedule" annotation (Placement(transformation(extent={{300,276},{320,296}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch2 + Buildings.Controls.OBC.CDL.Reals.Switch switch2 annotation (Placement(transformation(extent={{340,270},{360,290}}))); Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule" annotation (Placement(transformation(extent={{480,358},{500,378}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Switch to select set point" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch to select set point" annotation (Placement(transformation(extent={{640,370},{660,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooNig(k=273.15 + 16) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooNig(k=273.15 + 16) "Room temperature set point at night" annotation (Placement(transformation(extent={{480,330},{500,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooSet(k=273.15 + 21) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooSet(k=273.15 + 21) annotation (Placement(transformation(extent={{480,390},{500,410}}))); - Controls.OBC.CDL.Continuous.MultiMax mulMax(nin=2) + Controls.OBC.CDL.Reals.MultiMax mulMax(nin=2) "Maximum radiator valve position" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Controls.OBC.CDL.Continuous.Hysteresis hysPum( + Controls.OBC.CDL.Reals.Hysteresis hysPum( uLow=0.01, uHigh=0.5) "Hysteresis for pump" annotation (Placement(transformation(extent={{40,60},{60,80}}))); @@ -361,7 +361,7 @@ model TwoRoomsWithStorage nominalValuesDefineDefaultPressureCurve=true, use_inputFilter=false) "Supply air fan" annotation (Placement(transformation(extent={{70,490},{90,510}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant m_flow_out(k=2*VRoo*1.2*0.37/3600) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant m_flow_out(k=2*VRoo*1.2*0.37/3600) "Outside air mass flow rate" annotation (Placement(transformation(extent={{0,500},{20,520}}))); Buildings.Fluid.Movers.FlowControlled_m_flow fanRet( @@ -388,18 +388,18 @@ model TwoRoomsWithStorage Modelica.Blocks.Math.MatrixGain gai2(K=[35; 70; 30]) "Gain to convert from occupancy (per person) to radiant, convective and latent heat in [W/m2] " annotation (Placement(transformation(extent={{380,270},{400,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dTThr(k=1) "Threshold to switch boiler off" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTThr(k=1) "Threshold to switch boiler off" annotation (Placement(transformation(extent={{310,-210},{330,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 annotation (Placement(transformation(extent={{350,-186},{370,-166}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooOff(k=273.15 - 5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooOff(k=273.15 - 5) "Low room temperature set point to switch heating off" annotation (Placement(transformation(extent={{600,300},{620,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Switch to select set point" + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch to select set point" annotation (Placement(transformation(extent={{540,380},{560,400}}))); Modelica.Blocks.Logical.OnOffController onOff(bandwidth=2) "On/off switch" annotation (Placement(transformation(extent={{580,334},{600,354}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutSwi(k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutSwi(k( final unit="K", displayUnit="degC") = 289.15, y(final unit="K", @@ -409,7 +409,7 @@ model TwoRoomsWithStorage Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1, redeclare package Medium = MediumW) "Fixed boundary condition, needed to provide a pressure in the system" annotation (Placement(transformation(extent={{-82,-180},{-62,-160}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gain(k=1/dp_nominal) + Controls.OBC.CDL.Reals.MultiplyByParameter gain(k=1/dp_nominal) "Gain used to normalize pressure measurement signal" annotation (Placement(transformation(extent={{160,0},{140,20}}))); Buildings.Fluid.FixedResistances.Junction splVal( @@ -593,13 +593,13 @@ Changed controller to output setpoint for supply air temperature for cooling coi Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Conversion from boolean to real signal" annotation (Placement(transformation(extent={{80,60},{100,80}}))); - Controls.OBC.CDL.Continuous.Sources.Constant occ1(k=1/6/4) + Controls.OBC.CDL.Reals.Sources.Constant occ1(k=1/6/4) "Heat gain if occupied in room 1" annotation (Placement(transformation(extent={{300,590},{320,610}}))); - Controls.OBC.CDL.Continuous.Sources.Constant occ2(k=1/6/4) + Controls.OBC.CDL.Reals.Sources.Constant occ2(k=1/6/4) "Heat gain if occupied in room 2" annotation (Placement(transformation(extent={{300,310},{320,330}}))); - Controls.OBC.CDL.Continuous.MovingAverage aveTOut(delta=24*3600) + Controls.OBC.CDL.Reals.MovingAverage aveTOut(delta=24*3600) "Time averaged outdoor air temperature" annotation (Placement(transformation(extent={{540,300},{560,320}}))); equation diff --git a/Buildings/Examples/ScalableBenchmarks/BuildingVAV/ThermalZones/ThermalZone.mo b/Buildings/Examples/ScalableBenchmarks/BuildingVAV/ThermalZones/ThermalZone.mo index 07f044fdae5..59d3dea6786 100644 --- a/Buildings/Examples/ScalableBenchmarks/BuildingVAV/ThermalZones/ThermalZone.mo +++ b/Buildings/Examples/ScalableBenchmarks/BuildingVAV/ThermalZones/ThermalZone.mo @@ -219,11 +219,11 @@ protected redeclare package Medium = MediumA, m_flow_nominal=0.2) "Return air sensible enthalpy flow rate" annotation (Placement(transformation(extent={{-32,6},{-46,20}}))); - Controls.OBC.CDL.Continuous.Max PHea "Heating power" + Controls.OBC.CDL.Reals.Max PHea "Heating power" annotation (Placement(transformation(extent={{80,94},{92,106}}))); - Controls.OBC.CDL.Continuous.Min PCoo "Cooling power" + Controls.OBC.CDL.Reals.Min PCoo "Cooling power" annotation (Placement(transformation(extent={{80,54},{92,66}}))); - Controls.OBC.CDL.Continuous.Sources.Constant con0(k=0) + Controls.OBC.CDL.Reals.Sources.Constant con0(k=0) "Outputs 0 to compute heating or cooling power" annotation (Placement(transformation(extent={{60,74},{72,86}}))); Modelica.Blocks.Continuous.Integrator intEHea(initType=Modelica.Blocks.Types.Init.InitialState) diff --git a/Buildings/Examples/Tutorial/Boiler/System1.mo b/Buildings/Examples/Tutorial/Boiler/System1.mo index 3362f156339..4d7d77e7388 100644 --- a/Buildings/Examples/Tutorial/Boiler/System1.mo +++ b/Buildings/Examples/Tutorial/Boiler/System1.mo @@ -28,7 +28,7 @@ model System1 Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006) "Heat capacity for furniture and walls" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic, smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[-6, 0; @@ -169,13 +169,13 @@ input signal, which is obtained from a time table.
        • To define a time-dependent heat gain, we instantiated the block - -Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable + +Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable and set its name to timTab. We set the table parameters to

          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          @@ -192,8 +192,8 @@ The first time stamp is -6 hours in order to create
           a table that has a periodicity of one day.
           We also set the interpolation of the data to using
           piece-wise constant segments.
          -See the documentation of 
          -Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable for the various options
          +See the documentation of 
          +Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable for the various options
           of this time table.
           

        • diff --git a/Buildings/Examples/Tutorial/Boiler/System2.mo b/Buildings/Examples/Tutorial/Boiler/System2.mo index c44cee36e9e..df8da60fd76 100644 --- a/Buildings/Examples/Tutorial/Boiler/System2.mo +++ b/Buildings/Examples/Tutorial/Boiler/System2.mo @@ -45,7 +45,7 @@ model System2 Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006) "Heat capacity for furniture and walls" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic, smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[-6, 0; @@ -102,7 +102,7 @@ Buildings.Fluid.Movers.FlowControlled_m_flow pumRad( origin={-50,-110}))); //--------------------------Step 6: Pump control--------------------------// - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum( uLow=273.15 + 19, uHigh=273.15 + 21) "Pump hysteresis" @@ -312,12 +312,12 @@ we implemented the control blocks as shown in the figure below.

          In this control sequence, the first block is a hysteresis element, which is modeled by - -Buildings.Controls.OBC.CDL.Continuous.Hysteresis. + +Buildings.Controls.OBC.CDL.Reals.Hysteresis. It is configured as

          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum(
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum(
               uLow=273.15 + 19,
               uHigh=273.15 + 21)
               \"Pump hysteresis\";
          diff --git a/Buildings/Examples/Tutorial/Boiler/System3.mo b/Buildings/Examples/Tutorial/Boiler/System3.mo
          index 1556b168eb9..3d6fcbe95a7 100644
          --- a/Buildings/Examples/Tutorial/Boiler/System3.mo
          +++ b/Buildings/Examples/Tutorial/Boiler/System3.mo
          @@ -55,7 +55,7 @@ model System3
             Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006)
               "Heat capacity for furniture and walls"
               annotation (Placement(transformation(extent={{60,50},{80,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          @@ -200,16 +200,16 @@ model System3
                   extent={{-10,-10},{10,10}},
                   rotation=90,
                   origin={-50,-250})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=1)
               "Constant control signal for valves"
               annotation (Placement(transformation(extent={{-120,-160},{-100,-140}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conBoi(k=mBoi_flow_nominal)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant conBoi(k=mBoi_flow_nominal)
               "Constant mass flow rate for boiler pump"
               annotation (Placement(transformation(extent={{-100,-290},{-80,-270}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const1(k=0.5)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant const1(k=0.5)
               "Constant control signal for valves"
               annotation (Placement(transformation(extent={{0,-290},{20,-270}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum(
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum(
               uLow=273.15 + 19,
               uHigh=273.15 + 21)
               "Pump hysteresis"
          @@ -544,8 +544,8 @@ we properly defined the mixing points in the system.
           Next, we connected all fluid ports, and we set open-loop control signals
           for the valves, pumps and boilers.
           This is implemented using the block
          -
          -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant.
          +
          +Buildings.Controls.OBC.CDL.Reals.Sources.Constant.
           Using open-loop signals allows testing the model prior to
           adding the complexity of closed loop control.
           To avoid that the boiler overheats, we set its control input to
          diff --git a/Buildings/Examples/Tutorial/Boiler/System4.mo b/Buildings/Examples/Tutorial/Boiler/System4.mo
          index 5ecb2613e2a..f569c4122c0 100644
          --- a/Buildings/Examples/Tutorial/Boiler/System4.mo
          +++ b/Buildings/Examples/Tutorial/Boiler/System4.mo
          @@ -55,7 +55,7 @@ model System4
             Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006)
               "Heat capacity for furniture and walls"
               annotation (Placement(transformation(extent={{60,50},{80,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          @@ -200,12 +200,12 @@ model System4
                   extent={{-10,-10},{10,10}},
                   rotation=90,
                   origin={-50,-250})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=1)
               "Constant control signal for valves"
               annotation (Placement(transformation(extent={{-140,-160},{-120,-140}})));
           
           //---------------------Step 2: Outdoor temperature sensor and control------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17)
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17)
               "Hysteresis for on/off based on outside temperature"
               annotation (Placement(transformation(extent={{-260,-200},{-240,-180}})));
             Buildings.Controls.OBC.CDL.Logical.Not not2
          @@ -217,7 +217,7 @@ model System4
           //------------------------------------------------------------------------------------//
           
           //-------------------------------Step 4: Boiler hysteresis----------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTBoi(uHigh=273.15 + 90,
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTBoi(uHigh=273.15 + 90,
                                                        uLow=273.15 + 70)
               "Hysteresis for on/off of boiler"
               annotation (Placement(transformation(extent={{-260,-348},{-240,-328}})));
          @@ -241,7 +241,7 @@ model System4
               annotation (Placement(transformation(extent={{-100,-340},{-80,-320}})));
           //------------------------------------------------------------------------------------//
           
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum(
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum(
               uLow=273.15 + 19,
               uHigh=273.15 + 21)
               "Pump hysteresis"
          @@ -493,7 +493,7 @@ Next, for the boiler on/off control, we use again a hysteresis block
           (instance hysTBoi), which we configured as
           

          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTBoi(uLow=273.15 + 70,
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTBoi(uLow=273.15 + 70,
                                                                      uHigh=273.15 + 90)
               \"Hysteresis for on/off of boiler\";
           
          diff --git a/Buildings/Examples/Tutorial/Boiler/System5.mo b/Buildings/Examples/Tutorial/Boiler/System5.mo index 3dca4150127..21003835fed 100644 --- a/Buildings/Examples/Tutorial/Boiler/System5.mo +++ b/Buildings/Examples/Tutorial/Boiler/System5.mo @@ -55,7 +55,7 @@ model System5 Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006) "Heat capacity for furniture and walls" annotation (Placement(transformation(extent={{60,50},{80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic, smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, table=[-6, 0; @@ -202,7 +202,7 @@ model System5 origin={-50,-230}))); //---------------------Step 2: Outdoor temperature sensor and control------------------// - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17) + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17) "Hysteresis for on/off based on outside temperature" annotation (Placement(transformation(extent={{-260,-200},{-240,-180}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 @@ -214,7 +214,7 @@ model System5 //------------------------------------------------------------------------------------// //-------------------------------Step 4: Boiler hysteresis----------------------------// - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTBoi(uHigh=273.15 + 90, + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTBoi(uHigh=273.15 + 90, uLow=273.15 + 70) "Hysteresis for on/off of boiler" annotation (Placement(transformation(extent={{-260,-348},{-240,-328}}))); @@ -238,7 +238,7 @@ model System5 annotation (Placement(transformation(extent={{-100,-340},{-80,-320}}))); //------------------------------------------------------------------------------------// - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum( uLow=273.15 + 19, uHigh=273.15 + 21) "Pump hysteresis" @@ -250,10 +250,10 @@ model System5 annotation (Placement(transformation(extent={{-220,-160},{-200,-140}}))); //------------------------Step 2: Boiler loop valve control-----------------------// - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetBoiRet(k=TBoiRet_min) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetBoiRet(k=TBoiRet_min) "Temperature setpoint for boiler return" annotation (Placement(transformation(extent={{120,-270},{140,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPIDBoi( + Buildings.Controls.OBC.CDL.Reals.PID conPIDBoi( Td=1, Ti=120, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -263,23 +263,23 @@ model System5 //--------------------------------------------------------------------------------// //----------------------Step 3: Radiator loop valve control-----------------------// - Buildings.Controls.OBC.CDL.Continuous.PID conPIDRad( + Buildings.Controls.OBC.CDL.Reals.PID conPIDRad( Td=1, Ti=120, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=0.1) "Controller for valve in radiator loop" annotation (Placement(transformation(extent={{-180,-20},{-160,0}}))); //--------------------------------------------------------------------------------// - Buildings.Controls.OBC.CDL.Continuous.Line TSetSup + Buildings.Controls.OBC.CDL.Reals.Line TSetSup "Setpoint for supply water temperature" annotation (Placement(transformation(extent={{-220,-90},{-200,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMin(k=273.15 + 21) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMin(k=273.15 + 21) "Minimum heating supply temperature" annotation (Placement(transformation(extent={{-260,-120},{-240,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMax(k=273.15 + 50) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMax(k=273.15 + 50) "Maximum heating supply temperature" annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooMin(k=273.15 + 19) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooMin(k=273.15 + 19) "Minimum room air temperature" annotation (Placement(transformation(extent={{-260,-20},{-240,0}}))); equation @@ -525,15 +525,15 @@ shown in the figure below.

          This is implemented using the constant block - -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant for the set point, + +Buildings.Controls.OBC.CDL.Reals.Sources.Constant for the set point, the PID controller with output limitation - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID. We configured the controller as

          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDBoi(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDBoi(
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P,
               k=0.1,
               Ti=120,
          @@ -564,8 +564,8 @@ can open.
           The valve control for the radiator loop is implemented similar to
           the boiler loop, with the exception that the setpoint is computed
           using the model
          -
          -Buildings.Controls.OBC.CDL.Continuous.Line to implement
          +
          +Buildings.Controls.OBC.CDL.Reals.Line to implement
           a set point that shifts as a function of the room temperature.
           This instance is called TSetSup in the
           control sequence shown in the figure below, and takes as an input
          diff --git a/Buildings/Examples/Tutorial/Boiler/System6.mo b/Buildings/Examples/Tutorial/Boiler/System6.mo
          index 4cfa89be297..2b182bce699 100644
          --- a/Buildings/Examples/Tutorial/Boiler/System6.mo
          +++ b/Buildings/Examples/Tutorial/Boiler/System6.mo
          @@ -50,7 +50,7 @@ model System6
             Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006)
               "Heat capacity for furniture and walls"
               annotation (Placement(transformation(extent={{60,50},{80,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          @@ -196,7 +196,7 @@ model System6
                   origin={-50,-230})));
           
           //--------------------------------------------------------------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17)
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTOut(uLow=273.15 + 16, uHigh=273.15 + 17)
               "Hysteresis for on/off based on outside temperature"
               annotation (Placement(transformation(extent={{-260,-200},{-240,-180}})));
             Buildings.Controls.OBC.CDL.Logical.Not not2
          @@ -206,7 +206,7 @@ model System6
               "Outdoor temperature sensor"
               annotation (Placement(transformation(extent={{-318,20},{-298,40}})));
           //--------------------------------------------------------------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTBoi(uHigh=273.15 + 90,
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTBoi(uHigh=273.15 + 90,
                                                        uLow=273.15 + 70)
               "Hysteresis for on/off of boiler"
               annotation (Placement(transformation(extent={{-260,-348},{-240,-328}})));
          @@ -229,7 +229,7 @@ model System6
               annotation (Placement(transformation(extent={{-100,-340},{-80,-320}})));
           
           //--------------------------------------------------------------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPum(
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPum(
               uLow=273.15 + 19,
               uHigh=273.15 + 21)
               "Pump hysteresis"
          @@ -239,11 +239,11 @@ model System6
               annotation (Placement(transformation(extent={{-140,-140},{-120,-120}})));
             Buildings.Controls.OBC.CDL.Logical.Not not1 "Negate output of hysteresis"
               annotation (Placement(transformation(extent={{-220,-160},{-200,-140}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetBoiRet(k=TBoiRet_min)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetBoiRet(k=TBoiRet_min)
               "Temperature setpoint for boiler return"
               annotation (Placement(transformation(extent={{120,-270},{140,-250}})));
           
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDBoi(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDBoi(
               Td=1,
               Ti=120,
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
          @@ -252,23 +252,23 @@ model System6
               annotation (Placement(transformation(extent={{160,-270},{180,-250}})));
           //--------------------------------------------------------------------------------//
           
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDRad(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDRad(
               Td=1,
               Ti=120,
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
               k=0.1) "Controller for valve in radiator loop"
               annotation (Placement(transformation(extent={{-180,-20},{-160,0}})));
           //------------------------------------------------------------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.Line TSetSup
          +  Buildings.Controls.OBC.CDL.Reals.Line TSetSup
               "Setpoint for supply water temperature"
               annotation (Placement(transformation(extent={{-220,-90},{-200,-70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMin(k=273.15 + 21)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMin(k=273.15 + 21)
               "Minimum heating supply temperature"
               annotation (Placement(transformation(extent={{-260,-120},{-240,-100}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMax(k=273.15 + 50)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMax(k=273.15 + 50)
               "Maximum heating supply temperature"
               annotation (Placement(transformation(extent={{-260,-60},{-240,-40}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooMin(k=273.15 + 19)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooMin(k=273.15 + 19)
               "Minimum room air temperature"
               annotation (Placement(transformation(extent={{-260,-20},{-240,0}})));
           //--- Weather data -------------------------------------------------------------//
          diff --git a/Buildings/Examples/Tutorial/Boiler/System7.mo b/Buildings/Examples/Tutorial/Boiler/System7.mo
          index b17896e1a05..249681ee073 100644
          --- a/Buildings/Examples/Tutorial/Boiler/System7.mo
          +++ b/Buildings/Examples/Tutorial/Boiler/System7.mo
          @@ -50,7 +50,7 @@ model System7
             Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006)
               "Heat capacity for furniture and walls"
               annotation (Placement(transformation(extent={{60,50},{80,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          @@ -209,32 +209,32 @@ model System7
             Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToReaRad(realTrue=mRad_flow_nominal)
               "Radiator pump signal"
               annotation (Placement(transformation(extent={{-120,-80},{-100,-60}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetBoiRet(k=TBoiRet_min)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetBoiRet(k=TBoiRet_min)
               "Temperature setpoint for boiler return"
               annotation (Placement(transformation(extent={{120,-270},{140,-250}})));
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDBoi(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDBoi(
               Td=1,
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
               k=0.1,
               Ti=120,
               reverseActing=false) "Controller for valve in boiler loop"
               annotation (Placement(transformation(extent={{160,-270},{180,-250}})));
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDRad(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDRad(
               Td=1,
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
               k=0.1,
               Ti=120) "Controller for valve in radiator loop"
               annotation (Placement(transformation(extent={{-180,-20},{-160,0}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Line TSetSup
          +  Buildings.Controls.OBC.CDL.Reals.Line TSetSup
               "Setpoint for supply water temperature"
               annotation (Placement(transformation(extent={{-220,-70},{-200,-50}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMin(k=273.15 + 21)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMin(k=273.15 + 21)
               "Minimum heating supply temperature"
               annotation (Placement(transformation(extent={{-260,-100},{-240,-80}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMax(k=273.15 + 50)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMax(k=273.15 + 50)
               "Maximum heating supply temperature"
               annotation (Placement(transformation(extent={{-260,-40},{-240,-20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooMin(k=273.15 + 19)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooMin(k=273.15 + 19)
               "Minimum room air temperature"
               annotation (Placement(transformation(extent={{-260,0},{-240,20}})));
           
          @@ -267,7 +267,7 @@ model System7
               annotation (Placement(transformation(extent={{-228,-200},{-208,-180}})));
             Modelica.StateGraph.TransitionWithSignal T2 "Transition to boiler on"
               annotation (Placement(transformation(extent={{-258,-200},{-238,-180}})));
          -  Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThrBoi(t=273.15 +
          +  Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThrBoi(t=273.15 +
                   90) "Threshold for boiler control"
               annotation (Placement(transformation(extent={{-420,-320},{-400,-300}})));
             Modelica.StateGraph.TransitionWithSignal T3(
          @@ -279,21 +279,21 @@ model System7
             Modelica.StateGraph.Step pumpsOn(nIn=1, nOut=1) "Pumps are on"
               annotation (Placement(transformation(extent={{-320,-180},{-300,-160}})));
           //--------------------------------------------------------------------------------------//
          -  Buildings.Controls.OBC.CDL.Continuous.LessThreshold lessThreshold(t=273.15 +
          +  Buildings.Controls.OBC.CDL.Reals.LessThreshold lessThreshold(t=273.15 +
                   19)
               annotation (Placement(transformation(extent={{-420,-210},{-400,-190}})));
          -  Buildings.Controls.OBC.CDL.Continuous.LessThreshold lessThreshold1(t=273.15
          +  Buildings.Controls.OBC.CDL.Reals.LessThreshold lessThreshold1(t=273.15
                    + 16)
               annotation (Placement(transformation(extent={{-420,-240},{-400,-220}})));
             Buildings.Controls.OBC.CDL.Logical.And and3
               annotation (Placement(transformation(extent={{-380,-232},{-360,-212}})));
          -  Buildings.Controls.OBC.CDL.Continuous.LessThreshold lessThreshold2(t=273.15
          +  Buildings.Controls.OBC.CDL.Reals.LessThreshold lessThreshold2(t=273.15
                    + 70) "Threshold for boiler control"
               annotation (Placement(transformation(extent={{-420,-290},{-400,-270}})));
          -  Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThrTRoo(t=273.15 +
          +  Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThrTRoo(t=273.15 +
                   21) "Threshold for room temperature"
               annotation (Placement(transformation(extent={{-420,-130},{-400,-110}})));
          -  Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThrTROut(t=273.15
          +  Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThrTROut(t=273.15
                    + 17) "Threshold for room temperature"
               annotation (Placement(transformation(extent={{-420,-160},{-400,-140}})));
             Controls.OBC.CDL.Logical.Or or1
          diff --git a/Buildings/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo b/Buildings/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo
          index 2faa51d04c7..352277764b9 100644
          --- a/Buildings/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo
          +++ b/Buildings/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo
          @@ -46,7 +46,7 @@ partial model PartialOpenLoop "Partial model with open loop system"
             Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006)
               "Heat capacity for furniture and walls"
               annotation (Placement(transformation(extent={{60,50},{80,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable timTab(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable timTab(
                 extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic,
                 smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments,
                 table=[-6, 0;
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/BoilerReturn.mo b/Buildings/Examples/Tutorial/CDL/Controls/BoilerReturn.mo
          index d7a30f157bb..db0bb5deaa9 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/BoilerReturn.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/BoilerReturn.mo
          @@ -15,11 +15,11 @@ block BoilerReturn "Control for boiler return"
               final unit="1")
               "Valve control signal"
               annotation (Placement(transformation(extent={{100,-20},{140,20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant T(
               final k=TSet)
               "Set point temperature"
               annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPID(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPID(
               final k=k,
               final Ti=Ti,
               reverseActing=false) "Controller for valve in boiler loop"
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo b/Buildings/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo
          index 5433741bb94..3b22065e75a 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo
          @@ -20,7 +20,7 @@ block EquipmentOnOff "Controller for equipment on/off control"
             Buildings.Controls.OBC.CDL.Logical.Not not1
               "Negation of output signal, because boiler should be off if temperature exceed uHigh"
               annotation (Placement(transformation(extent={{-20,50},{0,70}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys(
          +  Buildings.Controls.OBC.CDL.Reals.Hysteresis hys(
             uHigh=273.15 + 90,
             uLow=273.15  + 70) "Hysteresis for on/off of boiler"
               annotation (Placement(transformation(extent={{-60,50},{-40,70}})));
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo b/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo
          index c07590bd991..e0c2e2340a3 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo
          @@ -9,7 +9,7 @@ block OpenLoopBoilerReturn "Open loop controller for boiler return"
               final unit="1")
               "Valve control signal"
               annotation (Placement(transformation(extent={{100,-20},{140,20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=1)
               "Constant valve control signal"
               annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
           equation
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo b/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo
          index 95f7c064f84..910b7e59a1a 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo
          @@ -17,7 +17,7 @@ block OpenLoopRadiatorSupply
               final unit="1")
               "Valve control signal"
               annotation (Placement(transformation(extent={{100,-20},{140,20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=1)
               "Constant valve control signal"
               annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
           equation
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo b/Buildings/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo
          index 97a545e7156..39bb5ef7f52 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo
          @@ -33,7 +33,7 @@ block RadiatorSupply "Controller for mixing valve in radiator loop"
               final unit="1")
               "Valve control signal"
               annotation (Placement(transformation(extent={{100,-20},{140,20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.PID conPIDRad(
          +  Buildings.Controls.OBC.CDL.Reals.PID conPIDRad(
               final k=k,
               final Ti=Ti,
               final yMax=1,
          @@ -41,18 +41,18 @@ block RadiatorSupply "Controller for mixing valve in radiator loop"
               controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI)
               "Controller for valve in radiator loop"
               annotation (Placement(transformation(extent={{40,-10},{60,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Line TSetSup
          +  Buildings.Controls.OBC.CDL.Reals.Line TSetSup
               "Setpoint for supply water temperature"
               annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMinSup(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMinSup(
               final k=TSupMin)
               "Minimum heating supply temperature"
               annotation (Placement(transformation(extent={{-50,-40},{-30,-20}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMaxSup(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMaxSup(
               final k=TSupMax)
               "Maximum heating supply temperature"
               annotation (Placement(transformation(extent={{-50,20},{-30,40}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMinRoo(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMinRoo(
               final k=TRooMin)
               "Minimum room air temperature"
               annotation (Placement(transformation(extent={{-50,60},{-30,80}})));
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/SystemOnOff.mo b/Buildings/Examples/Tutorial/CDL/Controls/SystemOnOff.mo
          index 61d9292e8d5..cd7f873a554 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/SystemOnOff.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/SystemOnOff.mo
          @@ -30,13 +30,13 @@ block SystemOnOff "Controller for system on/off"
             Buildings.Controls.OBC.CDL.Logical.OnOffController onTOut(bandwidth=1)
               "On/off control based on outside air temperature"
               annotation (Placement(transformation(extent={{-40,56},{-20,76}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetOut(k=TOutLow + 0.5)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetOut(k=TOutLow + 0.5)
               "Set point for outdoor air temperature plus half the dead band"
               annotation (Placement(transformation(extent={{-80,70},{-60,90}})));
             Buildings.Controls.OBC.CDL.Logical.OnOffController onTRoo(bandwidth=1)
               "On/off control based on room air temperature"
               annotation (Placement(transformation(extent={{-40,-64},{-20,-44}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRoo(k=TRooSet)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRoo(k=TRooSet)
                            "Set point for room air temperature plus half the dead band"
               annotation (Placement(transformation(extent={{-80,-40},{-60,-20}})));
             Buildings.Controls.OBC.CDL.Logical.And and1
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo b/Buildings/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo
          index 29b43ba1fda..77e542d8902 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo
          @@ -6,7 +6,7 @@ model BoilerReturn
             Buildings.Examples.Tutorial.CDL.Controls.BoilerReturn conBoiRet
               "Controller for boiler return water temperature"
               annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TRet(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TRet(
               height=50,
               duration=3600,
               offset=293.15) "Return water temperature"
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo b/Buildings/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo
          index 74250ade03f..147440f51ac 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo
          @@ -3,7 +3,7 @@ model EquipmentOnOff
             "Validation model for the equipment on/off controller"
               extends Modelica.Icons.Example;
           
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TBoi(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TBoi(
               height=40,
               duration=3600,
               offset=333.15) "Boiler temperature"
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo b/Buildings/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo
          index 3fa054a29fd..ba8c6196021 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo
          @@ -3,7 +3,7 @@ model RadiatorSupply
             "Validation model for the valve of the radiator supply"
               extends Modelica.Icons.Example;
           
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TRoo(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TRoo(
               height=-4,
               duration=3600,
               offset=297.15) "Room air temperature"
          @@ -11,7 +11,7 @@ model RadiatorSupply
             Buildings.Examples.Tutorial.CDL.Controls.RadiatorSupply
               conRadSup "Controller for radiator supply water temperature"
                         annotation (Placement(transformation(extent={{10,-10},{30,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup(
               amplitude=20,
               freqHz=1/720,
               offset=303.15) "Measured supply water temperature"
          diff --git a/Buildings/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo b/Buildings/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo
          index f859eddc08b..8cf53244373 100644
          --- a/Buildings/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo
          +++ b/Buildings/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo
          @@ -6,12 +6,12 @@ model SystemOnOff
             Buildings.Examples.Tutorial.CDL.Controls.SystemOnOff
               conSysSta "Controller for system on/off"
                         annotation (Placement(transformation(extent={{0,-10},{20,10}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut(
               amplitude=5,
               freqHz=1/720,
               offset=290.15) "Outside air temperature"
               annotation (Placement(transformation(extent={{-60,10},{-40,30}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TRoo(
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Sin TRoo(
               amplitude=4,
               freqHz=1/720,
               phase=1.5707963267949,
          diff --git a/Buildings/Examples/Tutorial/CDL/System1.mo b/Buildings/Examples/Tutorial/CDL/System1.mo
          index ec5b4298b7b..64631b2fc4e 100644
          --- a/Buildings/Examples/Tutorial/CDL/System1.mo
          +++ b/Buildings/Examples/Tutorial/CDL/System1.mo
          @@ -2,21 +2,21 @@ within Buildings.Examples.Tutorial.CDL;
           model System1 "Open loop model"
             extends Buildings.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop;
           
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant y1(k=mRad_flow_nominal)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant y1(k=mRad_flow_nominal)
               "Control signal of 1"
               annotation (Placement(transformation(extent={{-120,-80},{-100,-60}})));
           
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant y2(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant y2(k=1)
               "Control signal of 1"
               annotation (Placement(transformation(extent={{100,-210},{120,-190}})));
           
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant y3(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant y3(k=1)
               "Constant control signal of 1"
               annotation (Placement(transformation(extent={{-120,-260},{-100,-240}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant y4(k=1)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant y4(k=1)
               "Control signal of 1"
               annotation (Placement(transformation(extent={{-120,-160},{-100,-140}})));
          -  Buildings.Controls.OBC.CDL.Continuous.Sources.Constant y5(k=mBoi_flow_nominal)
          +  Buildings.Controls.OBC.CDL.Reals.Sources.Constant y5(k=mBoi_flow_nominal)
               "Control signal of 1"
               annotation (Placement(transformation(extent={{-120,-290},{-100,-270}})));
           equation
          @@ -42,8 +42,8 @@ as a first order response.
           

          Implementation

          To set control inputs, we instantiated - -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant + +Buildings.Controls.OBC.CDL.Reals.Sources.Constant and connected them to the pumps, the boiler and the valves.

          Exercise

          diff --git a/Buildings/Examples/Tutorial/CDL/System2.mo b/Buildings/Examples/Tutorial/CDL/System2.mo index e7c8d0e3581..5fe61eed7af 100644 --- a/Buildings/Examples/Tutorial/CDL/System2.mo +++ b/Buildings/Examples/Tutorial/CDL/System2.mo @@ -133,8 +133,8 @@ for the valve control signal, which we called yVal.

          To output the valve control signal, which we set for now to a constant value of 1, we used an instance of - -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant, + +Buildings.Controls.OBC.CDL.Reals.Sources.Constant, set its parameter to 1, and connected it to the output.

          diff --git a/Buildings/Examples/Tutorial/CDL/System3.mo b/Buildings/Examples/Tutorial/CDL/System3.mo index f87e068f6fb..382c4abe045 100644 --- a/Buildings/Examples/Tutorial/CDL/System3.mo +++ b/Buildings/Examples/Tutorial/CDL/System3.mo @@ -81,11 +81,11 @@ Buildings.Examples.Tutorial.CDL.Controls.BoilerReturn.

        • In this new block, we used a constant output signal - -Buildings.Controls.OBC.CDL.Continuous.Sources.Constant + +Buildings.Controls.OBC.CDL.Reals.Sources.Constant and a PID controller - -Buildings.Controls.OBC.CDL.Continuous.PID, + +Buildings.Controls.OBC.CDL.Reals.PID, which we configured as a PI-controller.

          diff --git a/Buildings/Examples/Tutorial/CDL/System4.mo b/Buildings/Examples/Tutorial/CDL/System4.mo index 9ca527f75d7..8bd8e7007da 100644 --- a/Buildings/Examples/Tutorial/CDL/System4.mo +++ b/Buildings/Examples/Tutorial/CDL/System4.mo @@ -81,8 +81,8 @@ Buildings.Examples.Tutorial.CDL.Controls.EquipmentOnOff.

        • In this new block, we used a hysteresis block - -Buildings.Controls.OBC.CDL.Continuous.Hysteresis to switch the boiler, + +Buildings.Controls.OBC.CDL.Reals.Hysteresis to switch the boiler, and negated its output because the boiler needs to be off if the temperature exceeds the value uHigh of this hysteresis. We also used an instance of diff --git a/Buildings/Examples/Tutorial/CDL/System6.mo b/Buildings/Examples/Tutorial/CDL/System6.mo index 0c76a451e15..e22e8210650 100644 --- a/Buildings/Examples/Tutorial/CDL/System6.mo +++ b/Buildings/Examples/Tutorial/CDL/System6.mo @@ -82,11 +82,11 @@ Buildings.Examples.Tutorial.CDL.Controls.RadiatorSupply.

        • In this new block, we used - -Buildings.Controls.OBC.CDL.Continuous.Line to compute the set point for the supply water temperature + +Buildings.Controls.OBC.CDL.Reals.Line to compute the set point for the supply water temperature based on the room air temperature. This set point is then used in a PI controller - -Buildings.Controls.OBC.CDL.Continuous.PID to modulate the mixing valve position + +Buildings.Controls.OBC.CDL.Reals.PID to modulate the mixing valve position in order to track the supply water temperature set point.

        • diff --git a/Buildings/Examples/Tutorial/SpaceCooling/System2.mo b/Buildings/Examples/Tutorial/SpaceCooling/System2.mo index 11e5a958915..f2bbc632a4c 100644 --- a/Buildings/Examples/Tutorial/SpaceCooling/System2.mo +++ b/Buildings/Examples/Tutorial/SpaceCooling/System2.mo @@ -120,10 +120,10 @@ model System2 annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); BoundaryConditions.WeatherData.Bus weaBus annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mAir_flow(k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mAir_flow(k= mA_flow_nominal) "Fan air flow rate" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mWat_flow(k=mW_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mWat_flow(k=mW_flow_nominal) "Water flow rate" annotation (Placement(transformation(extent={{-80,-114},{-60,-94}}))); Buildings.Fluid.Sensors.TemperatureTwoPort senTemHXOut(redeclare package Medium = diff --git a/Buildings/Examples/Tutorial/SpaceCooling/System3.mo b/Buildings/Examples/Tutorial/SpaceCooling/System3.mo index 98bff805e91..07e7184458d 100644 --- a/Buildings/Examples/Tutorial/SpaceCooling/System3.mo +++ b/Buildings/Examples/Tutorial/SpaceCooling/System3.mo @@ -120,7 +120,7 @@ model System3 annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); BoundaryConditions.WeatherData.Bus weaBus annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mAir_flow(k=mA_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mAir_flow(k=mA_flow_nominal) "Fan air flow rate" annotation (Placement(transformation(extent={{0,0},{20,20}}))); Buildings.Fluid.Sensors.TemperatureTwoPort senTemHXOut(redeclare package Medium = @@ -134,7 +134,7 @@ model System3 Buildings.Controls.OBC.CDL.Logical.OnOffController con(bandwidth=1) "Controller for coil water flow rate" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRooSetPoi(k=TRooSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRooSetPoi(k=TRooSet) "Room temperature set point" annotation (Placement(transformation(extent={{-170,-90},{-150,-70}}))); Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemRoo @@ -354,8 +354,8 @@ When simulating the model, the response shown below should be seen.

          Notes

          To add a continuous controller for the coil water flow rate, we could have used the model - -Buildings.Controls.OBC.CDL.Continuous.PID. + +Buildings.Controls.OBC.CDL.Reals.PID.

          ", revisions="
            diff --git a/Buildings/Examples/VAVCO2/VAVSystemCTControl.mo b/Buildings/Examples/VAVCO2/VAVSystemCTControl.mo index a91390298ee..d816ff635fb 100644 --- a/Buildings/Examples/VAVCO2/VAVSystemCTControl.mo +++ b/Buildings/Examples/VAVCO2/VAVSystemCTControl.mo @@ -119,7 +119,7 @@ parameter Real scaDpFanRet_nominal = 1 Controls.OBC.CDL.Conversions.BooleanToReal booToRea(realTrue=120) "Boolean to real conversion, outputs static pressure set point" annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); - Controls.OBC.CDL.Continuous.LimitSlewRate ramLim(raisingSlewRate=1/120) + Controls.OBC.CDL.Reals.LimitSlewRate ramLim(raisingSlewRate=1/120) "Ramp limiter for fan control signal" annotation (Placement(transformation(extent={{50,100},{70,120}}))); equation diff --git a/Buildings/Examples/VAVReheat/BaseClasses/ASHRAE2006.mo b/Buildings/Examples/VAVReheat/BaseClasses/ASHRAE2006.mo index c8b559d8ed9..98d6816e7b8 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/ASHRAE2006.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/ASHRAE2006.mo @@ -64,16 +64,16 @@ model ASHRAE2006 Controls.SystemHysteresis sysHysCoo "Hysteresis and delay to switch cooling on and off" annotation (Placement(transformation(extent={{40,-250},{60,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaPum + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaPum "Switch for freeze stat of pump" annotation (Placement(transformation(extent={{40,-130},{60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaVal + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaVal "Switch for freeze stat of valve" annotation (Placement(transformation(extent={{40,-170},{60,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFreHeaCoi(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFreHeaCoi(final k=1.0) "Flow rate signal for heating coil when freeze stat is on" annotation (Placement(transformation(extent={{-140,-130},{-120,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin TRooMin( + Buildings.Controls.OBC.CDL.Reals.MultiMin TRooMin( final nin=numZon, u(each final unit="K", each displayUnit="degC"), diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Economizer.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Economizer.mo index b9218917ebc..59d9d10de1e 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Economizer.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Economizer.mo @@ -52,7 +52,7 @@ block Economizer "Controller for economizer" iconTransformation(extent={{200,60},{240,100}}))); Modelica.Blocks.Math.Gain gain(k=1/VOut_flow_min) "Normalize mass flow rate" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conV_flow( + Buildings.Controls.OBC.CDL.Reals.PID conV_flow( controllerType=controllerType, k=k, Ti=Ti, @@ -65,7 +65,7 @@ block Economizer "Controller for economizer" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); Modelica.Blocks.Sources.Constant closed(k=0) "Signal to close OA damper" annotation (Placement(transformation(extent={{30,30},{50,50}}))); - Buildings.Controls.OBC.CDL.Continuous.PID yOATFre( + Buildings.Controls.OBC.CDL.Reals.PID yOATFre( controllerType=controllerType, k=k, Ti=Ti, @@ -75,13 +75,13 @@ block Economizer "Controller for economizer" reverseActing=false) if have_frePro "Controller of outdoor damper to track freeze temperature setpoint" annotation (Placement(transformation(extent={{-30,70},{-10,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Min minFrePro + Buildings.Controls.OBC.CDL.Reals.Min minFrePro "Takes lower signal (limits damper opening for freeze protection)" annotation (Placement(transformation(extent={{80,4},{100,24}}))); Modelica.Blocks.Sources.Constant TFre(k=TFreSet) "Setpoint for freeze protection" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract invSig + Buildings.Controls.OBC.CDL.Reals.Subtract invSig "Invert control signal for interlocked damper" annotation (Placement(transformation(extent={{170,-10},{190,10}}))); Modelica.Blocks.Logical.Hysteresis hysLoc(final uLow=0, final uHigh=dTLock) @@ -89,19 +89,19 @@ block Economizer "Controller for economizer" annotation (Placement(transformation(extent={{-30,110},{-10,130}}))); Modelica.Blocks.Math.Feedback feedback annotation (Placement(transformation(extent={{-90,110},{-70,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOA + Buildings.Controls.OBC.CDL.Reals.Switch swiOA "Switch to close outdoor air damper" annotation (Placement(transformation(extent={{90,110},{110,130}}))); Modelica.Blocks.Sources.Constant one(k=1) if not have_frePro "Fill value in case freeze protection is disabled" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiModClo + Buildings.Controls.OBC.CDL.Reals.Switch swiModClo "Switch between modulating or closing outdoor air damper" annotation (Placement(transformation(extent={{130,-10},{150,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxOutDam + Buildings.Controls.OBC.CDL.Reals.Max maxOutDam "Select larger of the outdoor damper signals" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant 1" annotation (Placement(transformation(extent={{100,70},{120,90}}))); diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/RoomVAV.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/RoomVAV.mo index b1931d56945..aaf6e9991ab 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/RoomVAV.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/RoomVAV.mo @@ -9,25 +9,25 @@ model RoomVAV "Test model for the room VAV controller" V_flow_nominal=1.5) "VAV terminal unit single maximum controller, for units with the exponential damper" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSet(k=273.15 + 21) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSet(k=273.15 + 21) "Heating setpoint" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSet(k=273.15 + 22) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSet(k=273.15 + 22) "Cooling setpoint" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=4, duration=3600, offset=-4) "Ramp source" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( amplitude=1, freqHz=1/3600, offset=273.15 + 23.5) "Sine source" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add rooTem "Room temperature" + Buildings.Controls.OBC.CDL.Reals.Add rooTem "Room temperature" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin disFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin disFlo( amplitude=0.1, freqHz=1/3600, offset=0.2) "Discharge airflow rate" diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SupplyAirTemperature.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SupplyAirTemperature.mo index 329781affe0..10a0debc7a1 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SupplyAirTemperature.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SupplyAirTemperature.mo @@ -9,12 +9,12 @@ model SupplyAirTemperature Buildings.Controls.OBC.CDL.Logical.Sources.Pulse uEna(period=2800) "Enable signal" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet( y(final unit="K", displayUnit="degC"), k=13 + 273.15) "Set point" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( phase=3.1415926535898, y(final unit="K", displayUnit="degC"), amplitude=5, diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SystemHysteresis.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SystemHysteresis.mo index 5a60f9fdb8a..46196c74daa 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SystemHysteresis.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/Examples/SystemHysteresis.mo @@ -5,10 +5,10 @@ model SystemHysteresis "Test model for the system hysteresis" annotation (Placement(transformation(extent={{-10,20},{10,40}}))); Buildings.Examples.VAVReheat.BaseClasses.Controls.SystemHysteresis sysHys1 annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul(width=1/60, period=3600) + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul(width=1/60, period=3600) "Pulse source" annotation (Placement(transformation(extent={{-68,20},{-48,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pul1(width=1/10, period( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pul1(width=1/10, period( displayUnit="min") = 60) "Pulse source" annotation (Placement(transformation(extent={{-68,-40},{-48,-20}}))); protected diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/FanVFD.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/FanVFD.mo index 5f51aad4b9d..dea4b98c1d7 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/FanVFD.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/FanVFD.mo @@ -2,7 +2,7 @@ within Buildings.Examples.VAVReheat.BaseClasses.Controls; block FanVFD "Controller for fan revolution" extends Modelica.Blocks.Interfaces.SISO; import Buildings.Examples.VAVReheat.BaseClasses.Controls.OperationModes; - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset con( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset con( r=xSet_nominal, yMax=1, Td=60, @@ -35,7 +35,7 @@ block FanVFD "Controller for fan revolution" parameter Modelica.Units.SI.Time Ti=15 "Time constant of integrator block" annotation (Dialog(group="Setpoint tracking")); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi annotation (Placement(transformation(extent={{40,-10},{60,10}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan "Set to true to enable the fan on" diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/FreezeStat.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/FreezeStat.mo index f8ce52d2a7f..48f83d12b39 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/FreezeStat.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/FreezeStat.mo @@ -28,7 +28,7 @@ model FreezeStat "Freeze thermostat with timed lockout" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); Buildings.Controls.OBC.CDL.Logical.Not freStaSig "Signal for freeze stat" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=TSet, final h=0.5) "Greater comparison" diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/RoomVAV.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/RoomVAV.mo index e596a632374..ea2d3613d43 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/RoomVAV.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/RoomVAV.mo @@ -87,7 +87,7 @@ block RoomVAV "Controller for room VAV box" annotation (Placement(transformation(extent={{120,-70},{160,-30}}), iconTransformation(extent={{100,-70},{140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conHea( + Buildings.Controls.OBC.CDL.Reals.PID conHea( yMax=yMax, Td=TdHea, yMin=yMin, @@ -96,7 +96,7 @@ block RoomVAV "Controller for room VAV box" controllerType=heaController, Ni=10) "Controller for heating" annotation (Placement(transformation(extent={{50,-60},{70,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conCoo( + Buildings.Controls.OBC.CDL.Reals.PID conCoo( yMax=yMax, Td=TdCoo, k=kCoo, @@ -105,46 +105,46 @@ block RoomVAV "Controller for room VAV box" yMin=yMin, reverseActing=false) "Controller for cooling (acts on damper)" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line reqFlo "Required flow rate" + Buildings.Controls.OBC.CDL.Reals.Line reqFlo "Required flow rate" annotation (Placement(transformation(extent={{30,10},{50,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax(k=1) "Cooling maximum flow" annotation (Placement(transformation(extent={{-30,-30},{-10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFloCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFloCoo( final k=ratVFloMin) "Minimum air flow set point" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne(k=1) "Constant 1" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer(k=0) "Constant 0" annotation (Placement(transformation(extent={{-32,40},{-12,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysWitHol( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysWitHol( final uLow=-dTHys, final uHigh=0) "Output true if room temperature below heating set point" annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTHea + Buildings.Controls.OBC.CDL.Reals.Subtract dTHea "Heating loop control error" annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFloHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFloHea( final k=ratVFloHea) "Minimum air flow set point in heating mode" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between heating and deadband air flow rate" annotation (Placement(transformation(extent={{-30,70},{-10,90}}))); Buildings.Controls.OBC.CDL.Utilities.Assert assMes(message= "The difference between cooling and heating set points must be greater than dTHys") "Assert message" annotation (Placement(transformation(extent={{10,-110},{30,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTSet + Buildings.Controls.OBC.CDL.Reals.Subtract dTSet "Difference between cooling and heating set points" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=dTHys) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=dTHys) "Test for overlap of heating and cooling set points " annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conDam( + Buildings.Controls.OBC.CDL.Reals.PID conDam( final yMax=yMax, final Td=TdDam, final yMin=yMin, @@ -154,15 +154,15 @@ block RoomVAV "Controller for room VAV box" Ni=10) if not have_preIndDam "Damper position setpoint" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor if not have_preIndDam "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{10,-150},{30,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant norFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant norFlo( final k=V_flow_nominal) if not have_preIndDam "Norminal airflow rate" annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=1) if have_preIndDam "Dummy block to enable or disable connection" annotation (Placement(transformation(extent={{80,50},{100,70}}))); diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperature.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperature.mo index 9407df0336a..a4dac5c65ab 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperature.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperature.mo @@ -46,7 +46,7 @@ block SupplyAirTemperature "Control signal for cooling coil valve" annotation (Placement(transformation(extent={{120,-100},{160,-60}}), iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset con( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset con( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -62,44 +62,44 @@ block SupplyAirTemperature displayUnit="degC")) "Supply temperature controller" annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapHea if have_heating + Buildings.Controls.OBC.CDL.Reals.Line mapHea if have_heating "Mapping function for actuating the heating coil valve " annotation (Placement(transformation(extent={{10,70},{30,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapOA + Buildings.Controls.OBC.CDL.Reals.Line mapOA "Mapping function for actuating the outdoor air damper" annotation (Placement(transformation(extent={{10,-10},{30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapCoo + Buildings.Controls.OBC.CDL.Reals.Line mapCoo "Mapping function for actuating the cooling coil valve" annotation (Placement(transformation(extent={{10,-90},{30,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limInfHea(k=-1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limInfHea(k=-1) "Inferior limit of the control signal for heating coil control " annotation (Placement(transformation(extent={{-50,110},{-30,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limSupHea(k=-0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limSupHea(k=-0.5) "Superior limit of the control signal for heating coil control " annotation (Placement(transformation(extent={{-50,70},{-30,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limInfOA(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limInfOA(k=0) "Inferior limit of the control signal for outdoor air damper control " annotation (Placement(transformation(extent={{-50,30},{-30,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limSupOA(k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limSupOA(k=0.5) "Superior limit of the control signal for outdoor air damper control " annotation (Placement(transformation(extent={{-50,-30},{-30,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limSupCoo(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limSupCoo(k=1) "Superior limit of the control signal for cooling coil control " annotation (Placement(transformation(extent={{-50,-130},{-30,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zero(k=0) "Zero" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero(k=0) "Zero" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(k=1) "one" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "one" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiHea if have_heating + Buildings.Controls.OBC.CDL.Reals.Switch swiHea if have_heating "Switch to close heating coil valve" annotation (Placement(transformation(extent={{70,70},{90,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiCoo + Buildings.Controls.OBC.CDL.Reals.Switch swiCoo "Switch to close cooling coil valve" annotation (Placement(transformation(extent={{70,-90},{90,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOA + Buildings.Controls.OBC.CDL.Reals.Switch swiOA "Switch to close outdoor air damper" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limInfCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limInfCoo( k=limSupOA.k) "Inferior limit of the control signal for cooling coil control " annotation (Placement(transformation(extent={{-50,-90},{-30,-70}}))); diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperatureSetpoint.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperatureSetpoint.mo index 80f1e744fd6..09135859cd6 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperatureSetpoint.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SupplyAirTemperatureSetpoint.mo @@ -9,7 +9,7 @@ block SupplyAirTemperatureSetpoint displayUnit="degC") "Supply air temperature set point" annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetVal[6](k={12,12,35, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetVal[6](k={12,12,35, 35,12,7} .+ 273.15) "Set point values for each operating mode" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); Modelica.Blocks.Routing.IntegerPassThrough mode diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SystemHysteresis.mo b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SystemHysteresis.mo index 9c3d4727afa..282849c1314 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Controls/SystemHysteresis.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Controls/SystemHysteresis.mo @@ -12,14 +12,14 @@ model SystemHysteresis "Control signal for pump" annotation (Placement(transformation(extent={{100, -90},{140,-50}}), iconTransformation(extent={{100,-90},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( t=0.1, h=0.09) "Threshold to switch on system" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Switch for control signal" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch for control signal" annotation (Placement(transformation(extent={{30,-2},{50,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0) "Zero output signal" annotation (Placement(transformation(extent={{-30,-88},{-10,-68}}))); @@ -34,10 +34,10 @@ model SystemHysteresis Buildings.Controls.OBC.CDL.Interfaces.BooleanInput sysOn "System on signal, set for example to true if fan is on" annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiSysOff + Buildings.Controls.OBC.CDL.Reals.Switch swiSysOff "Switch to overide if system is off" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiSysOff1 + Buildings.Controls.OBC.CDL.Reals.Switch swiSysOff1 "Switch to overide if system is off" annotation (Placement(transformation(extent={{68,-80},{88,-60}}))); Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel(final delayTime=30) diff --git a/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo b/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo index 505cb591e8e..cd0620c197f 100644 --- a/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo +++ b/Buildings/Examples/VAVReheat/BaseClasses/Guideline36.mo @@ -14,14 +14,14 @@ model Guideline36 parameter Modelica.Units.SI.PressureDifference dpDisRetMax(displayUnit="Pa")= 40 "Maximum return fan discharge static pressure setpoint"; - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaPum + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaPum "Switch for freeze stat of pump" annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFreHeaCoi(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFreHeaCoi(final k=1.0) "Flow rate signal for heating coil when freeze stat is on" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warCooTim[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warCooTim[numZon]( final k=fill(1800, numZon)) "Warm up and cool down time" annotation (Placement(transformation(extent={{-300,370},{-280,390}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant falSta[numZon]( @@ -44,7 +44,7 @@ model Guideline36 Buildings.Examples.VAVReheat.BaseClasses.Controls.SystemHysteresis sysHysCoo "Hysteresis and delay to switch cooling on and off" annotation (Placement(transformation(extent={{20,-260},{40,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaVal + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaVal "Switch for freeze stat of valve" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); Buildings.Examples.VAVReheat.BaseClasses.Controls.FreezeStat freSta(lockoutTime=3600) @@ -57,12 +57,12 @@ model Guideline36 Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator tZonNexOcc(nout= numZon) "Next occupancy for each zone" annotation (Placement(transformation(extent={{-340,372},{-320,392}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccHeaSet[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccHeaSet[numZon]( each k( unit="K", displayUnit="degC") = 293.15) "Occupied heating setpoint for zone air" annotation (Placement(transformation(extent={{-340,470},{-320,490}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOccCooSet[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccCooSet[numZon]( each k( unit="K", displayUnit="degC") = 297.15) "Occupied cooling setpoint for zone air" @@ -103,12 +103,12 @@ model Guideline36 final have_winSen=fill(false, numZon), final have_locAdj=fill(false, numZon)) "Zone setpoint temperature" annotation (Placement(transformation(extent={{80,240},{100,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoHeaSet[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoHeaSet[numZon]( each k( unit="K", displayUnit="degC") = 285.15) "Unoccupied heating setpoint for zone air" annotation (Placement(transformation(extent={{-340,560},{-320,580}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TUnoCooSet[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoCooSet[numZon]( each k( unit="K", displayUnit="degC") = 303.15) "Unoccupied cooling setpoint for zone air" diff --git a/Buildings/Examples/VAVReheat/Validation/Guideline36SteadyState.mo b/Buildings/Examples/VAVReheat/Validation/Guideline36SteadyState.mo index 691507403d7..88c4f9117ed 100644 --- a/Buildings/Examples/VAVReheat/Validation/Guideline36SteadyState.mo +++ b/Buildings/Examples/VAVReheat/Validation/Guideline36SteadyState.mo @@ -22,7 +22,7 @@ model Guideline36SteadyState winDirSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HInfHorSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HSou=Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant solRad(k=0) "Solar radiation" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant solRad(k=0) "Solar radiation" annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=180, origin={-70,-20}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo index 70684183167..1b1d0f068cf 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialDirect.mo @@ -142,7 +142,7 @@ model PartialDirect final k=1) "Integration" annotation (Placement(transformation(extent={{260,-170},{280,-150}}))); - Controls.OBC.CDL.Continuous.PID con( + Controls.OBC.CDL.Reals.PID con( final controllerType=controllerType, final k=k, final Ti=Ti, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo index e9237d14e70..806d5d666da 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/PartialIndirect.mo @@ -147,7 +147,7 @@ model PartialIndirect final m_flow_nominal=mBui_flow_nominal) "Building supply temperature sensor" annotation (Placement(transformation(extent={{-16,-214},{-36,-194}}))); - Controls.OBC.CDL.Continuous.PID con( + Controls.OBC.CDL.Reals.PID con( final controllerType=controllerType, final k=k, final Ti=Ti, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/Validation/CollectorDistributor.mo b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/Validation/CollectorDistributor.mo index d5b9a31ba97..20f7d25e8c9 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/Validation/CollectorDistributor.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/BaseClasses/Validation/CollectorDistributor.mo @@ -30,13 +30,13 @@ model CollectorDistributor nPorts=2) "Boundary pressure" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-190,320}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp m1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m1( height=1.1, duration=1000, startTime=0) "Primary flow" annotation (Placement(transformation(extent={{-240,370},{-220,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T1( k=40+273.15) "Primary supply temperature" annotation (Placement(transformation(extent={{-240,270},{-220,290}}))); @@ -87,11 +87,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,290},{80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_1Ret( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret( k=30+273.15) "First secondary return temperature" annotation (Placement(transformation(extent={{60,370},{80,390}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat1( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat1( k=0.1, Ti=10, yMax=1, @@ -100,7 +100,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,370},{110,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp m2_1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_1( height=0.5, duration=1000, offset=0.5, @@ -149,11 +149,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,150},{80,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_2Ret( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret( k=35+273.15) "Second secondary return temperature" annotation (Placement(transformation(extent={{60,230},{80,250}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat2( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat2( k=0.1, Ti=10, yMax=1, @@ -162,7 +162,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,230},{110,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant m2_2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_2( k=0.5) "Second secondary mass flow rate signal" annotation (Placement(transformation(extent={{220,230},{200,250}}))); @@ -190,7 +190,7 @@ model CollectorDistributor nPorts=2) "Boundary pressure" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-190,40}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2( k=40+273.15) "Primary supply temperature" annotation (Placement(transformation(extent={{-240,-10},{-220,10}}))); @@ -241,11 +241,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,10},{80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_1Ret1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret1( k=30+273.15) "First secondary return temperature" annotation (Placement(transformation(extent={{60,90},{80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat3( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat3( k=0.1, Ti=10, yMax=1, @@ -254,7 +254,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,90},{110,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp m2_3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_3( height=0.5, duration=1000, offset=0.5, @@ -294,11 +294,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,-130},{80,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_2Ret1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret1( k=35+273.15) "Second secondary return temperature" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat4( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat4( k=0.1, Ti=10, yMax=1, @@ -307,7 +307,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,-50},{110,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant m2_4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_4( k=0.5) "Second secondary mass flow rate signal" annotation (Placement(transformation(extent={{220,-50},{200,-30}}))); @@ -348,7 +348,7 @@ model CollectorDistributor nPorts=2) "Boundary pressure" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-190,-240}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T3( k=40+273.15) "Primary supply temperature" annotation (Placement(transformation(extent={{-240,-290},{-220,-270}}))); @@ -399,11 +399,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,-270},{80,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_1Ret2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret2( k=30+273.15) "First secondary return temperature" annotation (Placement(transformation(extent={{60,-190},{80,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat5( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat5( k=0.1, Ti=10, yMax=1, @@ -412,7 +412,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,-190},{110,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp m2_5( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_5( height=0.5, duration=1000, offset=0.5, @@ -461,11 +461,11 @@ model CollectorDistributor Q_flow_nominal=-1E5) "Heat exchange with water stream" annotation (Placement(transformation(extent={{100,-410},{80,-390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2_2Ret2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret2( k=35+273.15) "Second secondary return temperature" annotation (Placement(transformation(extent={{60,-330},{80,-310}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTChiWat6( + Buildings.Controls.OBC.CDL.Reals.PID conTChiWat6( k=0.1, Ti=10, yMax=1, @@ -474,7 +474,7 @@ model CollectorDistributor reverseActing=false) "PI controller for chilled water supply" annotation (Placement(transformation(extent={{90,-330},{110,-310}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant m2_6( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_6( k=0.5) "Second secondary mass flow rate signal" annotation (Placement(transformation(extent={{220,-330},{200,-310}}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/BaseClasses/PartialParallel.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/BaseClasses/PartialParallel.mo index 1847343a19f..b03419cf79b 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/BaseClasses/PartialParallel.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/BaseClasses/PartialParallel.mo @@ -183,15 +183,15 @@ model PartialParallel extent={{20,-10},{-20,10}}, rotation=180, origin={0,-106}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( nin=1) "Total pump power" annotation (Placement(transformation(extent={{260,-70},{280,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPHea( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPHea( nin=1) "Total power drawn by heating system" annotation (Placement(transformation(extent={{260,50},{280,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPCoo( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPCoo( nin=1) "Total power drawn by cooling system" annotation (Placement(transformation(extent={{260,10},{280,30}}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/ChillerBorefield.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/ChillerBorefield.mo index 30153aef0cc..982f61d0bd7 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/ChillerBorefield.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/ChillerBorefield.mo @@ -173,11 +173,11 @@ model ChillerBorefield "ETS model for 5GDHC systems with heat recovery chiller a "Borefield" annotation (Dialog(group="Borefield",enable=have_borFie), Placement(transformation(extent={{-80,-230},{-60,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerPPum( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerPPum( final k=0) if not have_borFie "Zero power" annotation (Placement(transformation(extent={{220,-90},{240,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerPHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerPHea( final k=0) "Zero power" annotation (Placement(transformation(extent={{220,50},{240,70}}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Borefield.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Borefield.mo index 310bcbc6725..a7043a1dfce 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Borefield.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Borefield.mo @@ -31,7 +31,7 @@ model Borefield "Borefield water entering temperature" annotation (Placement(transformation(extent={{-140,-120},{-100,-80}}), iconTransformation(extent={{-140,-80},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conMix( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conMix( final yMin=0, final yMax=1, final reverseActing=true, @@ -42,55 +42,55 @@ model Borefield displayUnit="s")=120) "Mixing valve controller" annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTBorWatEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTBorWatEnt( y(final unit="K", displayUnit="degC"), final k=TBorWatEntMax) "Maximum value of borefield water entering temperature" annotation (Placement(transformation(extent={{-50,-90},{-30,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold opeVal( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold opeVal( final t=0.9, final h=0.1) "True if at least one isolation valve is open" annotation (Placement(transformation(extent={{-50,-58},{-30,-38}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax multiMax1( + Buildings.Controls.OBC.CDL.Reals.MultiMax multiMax1( final nin=2) "Maximum opening" annotation (Placement(transformation(extent={{-90,-50},{-70,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold enaSup( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold enaSup( final t=0.05, final h=0.025) "Borefield enabled from supervisory" annotation (Placement(transformation(extent={{-50,-30},{-30,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch runBor + Buildings.Controls.OBC.CDL.Reals.Switch runBor "Enable borefield system pump" annotation (Placement(transformation(extent={{70,50},{90,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant limVal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant limVal( final k=0.3) "Control signal value for full opening of the valve" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speMin( final k=spePumBorMin) "Minimum pump speed" annotation (Placement(transformation(extent={{-40,74},{-20,94}}))); Buildings.Controls.OBC.CDL.Logical.And enaBor "Borefield enable signal" annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapSpe + Buildings.Controls.OBC.CDL.Reals.Line mapSpe "Mapping function for pump speed" annotation (Placement(transformation(extent={{20,70},{40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "One" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Zero" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapVal + Buildings.Controls.OBC.CDL.Reals.Line mapVal "Mapping function for valve opening" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Minimum" annotation (Placement(transformation(extent={{70,-70},{90,-50}}))); equation diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Chiller.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Chiller.mo index c9db4ad6a52..abb7822d164 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Chiller.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Chiller.mo @@ -63,13 +63,13 @@ model Chiller final reverseActing=false) "Condenser three-way valve control" annotation (Placement(transformation(extent={{50,-70},{70,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTEvaWatEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTEvaWatEnt( y(final unit="K", displayUnit="degC"), final k=TEvaWatEntMax) "Maximum value of evaporator water entering temperature" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTConWatEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTConWatEnt( y(final unit="K", displayUnit="degC"), final k=TConWatEntMin) diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/HeatExchanger.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/HeatExchanger.mo index 3da24545176..16fa058df18 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/HeatExchanger.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/HeatExchanger.mo @@ -30,20 +30,20 @@ model HeatExchanger final unit="1") "District heat exchanger secondary valve control signal" annotation (Placement(transformation(extent={{220,-80},{260,-40}}),iconTransformation(extent={{100,-80},{140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum between control signal and minimum speed or opening" annotation (Placement(transformation(extent={{90,-70},{110,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOff1 + Buildings.Controls.OBC.CDL.Reals.Switch swiOff1 "Output zero if not enabled" annotation (Placement(transformation(extent={{160,-70},{180,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant min1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant min1( final k=if have_val1 then 0 else spePum1Min) "Minimum pump speed or actuator opening" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); Buildings.Controls.OBC.CDL.Interfaces.RealInput u "Control signal for secondary side (from supervisory)" annotation (Placement(transformation(extent={{-260,20},{-220,60}}), iconTransformation(extent={{-140,30},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.01, final h=0.005) "Check for heat or cold rejection demand" @@ -51,12 +51,12 @@ model HeatExchanger Buildings.Controls.OBC.CDL.Logical.And and2 "At least one valve is open and HX circuit is enabled" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold heaRej( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold heaRej( final t=0.9, final h=0.1) "Heat rejection if condenser isolation valve is open" annotation (Placement(transformation(extent={{-170,-10},{-150,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cooRej( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cooRej( final t=0.9, final h=0.1) "Cold rejection if evaporator isolation valve is open" @@ -64,29 +64,29 @@ model HeatExchanger Buildings.Controls.OBC.CDL.Logical.Or or1 "At least one valve is open " annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant speMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant speMin( final k=spePum2Min) "Minimum pump speed" annotation (Placement(transformation(extent={{-10,70},{10,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOff2 + Buildings.Controls.OBC.CDL.Reals.Switch swiOff2 "Output zero if not enabled" annotation (Placement(transformation(extent={{160,50},{180,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapSpe + Buildings.Controls.OBC.CDL.Reals.Line mapSpe "Mapping function for pump speed" annotation (Placement(transformation(extent={{90,50},{110,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "One" annotation (Placement(transformation(extent={{40,10},{60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Zero" annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hal( final k=0.3) "Control signal value for full opening of the valve" annotation (Placement(transformation(extent={{-10,10},{10,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapVal + Buildings.Controls.OBC.CDL.Reals.Line mapVal "Mapping function for valve opening" annotation (Placement(transformation(extent={{90,10},{110,30}}))); protected diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo index c5f7e6727f5..63909fe9203 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PIDWithEnable.mo @@ -40,7 +40,7 @@ block PIDWithEnable Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEna "Enable signal" annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={-60,-120}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={-40,-120}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conPID( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( final k=k, final Ti=Ti, final Td=Td, @@ -51,11 +51,11 @@ block PIDWithEnable final reverseActing=reverseActing, final y_reset=y_reset) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 annotation (Placement(transformation(extent={{72,-10},{92,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant valDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant valDis( final k=y_neutral) "Value when disabled" annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); @@ -92,15 +92,15 @@ equation info="

            This is an update of - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset with an additional Boolean input representing an enable signal.

            • When enabled, the controller output is identical to - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset (and the controller integral term is reset to yMin at enabling time).
            • diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PrimaryVariableFlow.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PrimaryVariableFlow.mo index 1a9ca881e28..913a88705d3 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PrimaryVariableFlow.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/PrimaryVariableFlow.mo @@ -26,16 +26,16 @@ block PrimaryVariableFlow "Mass flow rate" annotation (Placement(transformation(extent={{100,-20},{140,20}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant masFloMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant masFloMin( final k=ratFloMin*m_flow_nominal) "Minimum mass flow rate" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter masFlo_dT(final k=1 + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter masFlo_dT(final k=1 /cp/dT_nominal) "Mass flow rate for constant DeltaT" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Max masFlo "Mass flow rate" + Buildings.Controls.OBC.CDL.Reals.Max masFlo "Mass flow rate" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 "Absolute value" + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Absolute value" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); equation connect(loa, masFlo_dT.u) diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Reset.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Reset.mo index edad4b2a6f6..086b397a0d3 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Reset.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Reset.mo @@ -20,14 +20,14 @@ model Reset "Heating water supply temperature set point after reset" annotation (Placement(transformation(extent={{100,-20},{140,20}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSet( k=THeaWatSupSetMin) "Minimum value of HW set point" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiHea + Buildings.Controls.OBC.CDL.Reals.Switch swiHea "Switch" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate ramLimHea(raisingSlewRate + Buildings.Controls.OBC.CDL.Reals.LimitSlewRate ramLimHea(raisingSlewRate =0.1) "Limit the rate of change" annotation (Placement(transformation(extent={{50,-10},{70,10}}))); equation diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideCold.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideCold.mo index 20d92473ddf..a87f673ab1d 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideCold.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideCold.mo @@ -29,10 +29,10 @@ model SideCold "Chilled water supply temperature set point" annotation (Placement(transformation(extent={{180,60},{220,100}}), iconTransformation(extent={{100,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapFun[nSouAmb] + Buildings.Controls.OBC.CDL.Reals.Line mapFun[nSouAmb] "Mapping functions for ambient source control" annotation (Placement(transformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x1[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x1[nSouAmb]( final k={(i-1) for i in 1:nSouAmb}) "x1" annotation (Placement(transformation(extent={{40,10},{60,30}}))); @@ -40,15 +40,15 @@ model SideCold final nout=nSouAmb) "Replicate control signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f1[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f1[nSouAmb]( each final k=0) "f1" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f2[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f2[nSouAmb]( each final k=1) "f2" annotation (Placement(transformation(extent={{-10,110},{10,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x2[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x2[nSouAmb]( final k={(i) for i in 1:nSouAmb}) "x2" annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); @@ -61,38 +61,38 @@ model SideCold final reverseActing=false) "Controller for CHWST" annotation (Placement(transformation(extent={{-150,-30},{-130,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapFunTChiSupSet + Buildings.Controls.OBC.CDL.Reals.Line mapFunTChiSupSet "Mapping function for CHWST reset" annotation (Placement(transformation(extent={{100,70},{120,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTChiWatSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTChiWatSup( y(final unit="K", displayUnit="degC"), final k=TChiWatSupSetMin) "Minimum value of chilled water supply temperature" annotation (Placement(transformation(extent={{62,50},{82,70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( p=nSouAmb) "One minus control loop output" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( k=-nSouAmb) "Gain factor" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "CHWST reset signal" annotation (Placement(transformation(extent={{-30,70},{-10,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( k=0) "Zero" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter subNumSou( + Buildings.Controls.OBC.CDL.Reals.AddParameter subNumSou( p=-nSouAmb) "Control signal minus nSouAmb" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Ambient source control signal" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate ramLimHea( + Buildings.Controls.OBC.CDL.Reals.LimitSlewRate ramLimHea( raisingSlewRate=0.1) "Limit the rate of change" annotation (Placement(transformation(extent={{140,70},{160,90}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHeaCoo @@ -124,7 +124,7 @@ model SideCold Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert DO to AO signal" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( t=0.01) "Control signal is non zero (with 1% tolerance)" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideHot.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideHot.mo index ded312aad8d..50b09c42f3d 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideHot.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/SideHot.mo @@ -34,7 +34,7 @@ block SideHot "Control signal for cold side" annotation (Placement(transformation(extent={{180,-60},{220,-20}}), iconTransformation(extent={{100,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.01) "Control signal is non zero (with 1% tolerance)" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); @@ -50,10 +50,10 @@ block SideHot final reverseActing=false) "Controller for heat rejection" annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line mapFun[nSouAmb] + Buildings.Controls.OBC.CDL.Reals.Line mapFun[nSouAmb] "Mapping functions for controlled systems" annotation (Placement(transformation(extent={{100,50},{120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x1[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x1[nSouAmb]( final k={(i-1) for i in 1:nSouAmb}) "x1" annotation (Placement(transformation(extent={{60,70},{80,90}}))); @@ -61,15 +61,15 @@ block SideHot final nout=nSouAmb) "Replicate control signal" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={0,60}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f1[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f1[nSouAmb]( each final k=0) "f1" annotation (Placement(transformation(extent={{20,70},{40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant f2[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant f2[nSouAmb]( each final k=1) "f2" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant x2[nSouAmb]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant x2[nSouAmb]( final k={(i) for i in 1:nSouAmb}) "x2" annotation (Placement(transformation(extent={{20,30},{40,50}}))); @@ -109,12 +109,12 @@ block SideHot "Return position of evaporator to ambient loop isolation valve" annotation (Placement(transformation(extent={{-220,-140},{-180,-100}}), iconTransformation(extent={{-140,-100},{-100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold isValIsoConClo( + Buildings.Controls.OBC.CDL.Reals.LessThreshold isValIsoConClo( final t=1E-6, h=0.5E-6) "Check if isolation valve is closed" annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold isValIsoEvaClo( + Buildings.Controls.OBC.CDL.Reals.LessThreshold isValIsoEvaClo( final t=1E-6, h=0.5E-6) "At least one signal is non zero" @@ -122,18 +122,18 @@ block SideHot Buildings.Controls.OBC.CDL.Logical.MultiAnd mulAnd( nin=3) annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addDea( + Buildings.Controls.OBC.CDL.Reals.AddParameter addDea( p=dTDea) "Add dead band" annotation (Placement(transformation(extent={{-130,-10},{-110,10}}))); Modelica.Blocks.Discrete.ZeroOrderHold zeroOrderHold( samplePeriod=60) annotation (Placement(transformation(extent={{120,-10},{140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addLoc( + Buildings.Controls.OBC.CDL.Reals.AddParameter addLoc( p=dTLoc) "Add temperature difference for lockout" annotation (Placement(transformation(extent={{-130,30},{-110,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Less isBelLoc( + Buildings.Controls.OBC.CDL.Reals.Less isBelLoc( h=0.1) "Check if temperature is below cold rejection lockout" annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Supervisory.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Supervisory.mo index 3a79bf2b263..2d30cfea98c 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Supervisory.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/Supervisory.mo @@ -50,7 +50,7 @@ model Supervisory final TChiWatSupSetMin=TChiWatSupSetMin) "Cold side controller" annotation (Placement(transformation(extent={{0,-42},{20,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1[nSouAmb] + Buildings.Controls.OBC.CDL.Reals.Max max1[nSouAmb] "Maximum of output control signals" annotation (Placement(transformation(extent={{50,-10},{70,10}}))); Reset resTSup( diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/WatersideEconomizer.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/WatersideEconomizer.mo index 46c010ca695..448fd2b3ed9 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/WatersideEconomizer.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Controls/WatersideEconomizer.mo @@ -50,7 +50,7 @@ model WatersideEconomizer "Secondary valve control signal" annotation (Placement(transformation(extent={{180,-60},{220,-20}}), iconTransformation(extent={{100,-70},{140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addDelTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter addDelTem( final p=dTEna) "Add threshold for enabling WSE" annotation (Placement(transformation(extent={{-90,-50},{-70,-30}}))); @@ -64,9 +64,9 @@ model WatersideEconomizer annotation (Placement(transformation(extent={{50,30},{70,50}}))); Modelica.StateGraph.TransitionWithSignal dis "Transition to disabled state" annotation (Placement(transformation(extent={{90,30},{110,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delT1 "Add delta-T" + Buildings.Controls.OBC.CDL.Reals.Subtract delT1 "Add delta-T" annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold delTemDis(t=dTDis) + Buildings.Controls.OBC.CDL.Reals.LessThreshold delTemDis(t=dTDis) "Compare to threshold for disabling WSE" annotation (Placement(transformation(extent={{-50,-110},{-30,-90}}))); PredictLeavingTemperature calTemLvg( @@ -74,7 +74,7 @@ model WatersideEconomizer final m2_flow_nominal=m2_flow_nominal) "Compute predicted leaving water temperature" annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Less delTemDis1 + Buildings.Controls.OBC.CDL.Reals.Less delTemDis1 "Compare to threshold for enabling WSE" annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( @@ -84,17 +84,17 @@ model WatersideEconomizer annotation (Placement(transformation(extent={{140,-50},{160,-30}}))); inner Modelica.StateGraph.StateGraphRoot stateGraphRoot "Root of state graph" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant min1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant min1( final k=y1Min) "Minimum signal" annotation (Placement(transformation(extent={{-10,130},{10,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Linear variation bounded by minimum and 1" annotation (Placement(transformation(extent={{60,90},{80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOff1 + Buildings.Controls.OBC.CDL.Reals.Switch swiOff1 "Output zero if cooling not enabled or isolation valve open (cold rejection)" annotation (Placement(transformation(extent={{100,150},{120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) "Zero" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero" annotation (Placement(transformation(extent={{60,130},{80,150}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uCoo "Cooling enable signal" @@ -122,7 +122,7 @@ model WatersideEconomizer Buildings.Controls.OBC.CDL.Logical.And and2 "Cooling disabled or temperature criterion verified" annotation (Placement(transformation(extent={{70,-102},{90,-82}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold isValIsoEvaClo( + Buildings.Controls.OBC.CDL.Reals.LessThreshold isValIsoEvaClo( final t=1E-6, h=0.5E-6) "True if valve closed" annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); @@ -134,13 +134,13 @@ model WatersideEconomizer annotation (Placement(transformation(extent={{-50,-150},{-30,-130}}))); Buildings.Controls.OBC.CDL.Logical.And and1 "Cooling disabled or temperature criterion verified" annotation (Placement(transformation(extent={{-90,150},{-70,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter nor2( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter nor2( k=1/m2_flow_nominal) "Normalize" annotation (Placement(transformation(extent={{-140,90},{-120,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiOff2 + Buildings.Controls.OBC.CDL.Reals.Switch swiOff2 "Switch between enabled and disabled mode" annotation (Placement(transformation(extent={{140,90},{160,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "One" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "One" annotation (Placement(transformation(extent={{-10,70},{10,90}}))); equation connect(T2WatEnt, delT1.u1) diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Examples/ChillerOnly.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Examples/ChillerOnly.mo index 07c3fbddc45..94d500cbd59 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Examples/ChillerOnly.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Examples/ChillerOnly.mo @@ -31,14 +31,14 @@ model ChillerOnly filNam=Modelica.Utilities.Files.loadResource(filNam))); parameter String filNam="modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos" "File name with thermal loads as time series"; - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter loaNorHea( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaNorHea( final k=1/ets.QHeaWat_flow_nominal) "Normalize by nominal" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-278,60}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter loaNorCoo( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaNorCoo( final k=1/ets.QChiWat_flow_nominal) "Normalize by nominal" annotation (Placement( transformation( extent={{10,-10},{-10,10}}, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/HeatPumpHeatExchanger.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/HeatPumpHeatExchanger.mo index 234bd85b714..2683a019d29 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/HeatPumpHeatExchanger.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/HeatPumpHeatExchanger.mo @@ -238,7 +238,7 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor final allowFlowReversal=allowFlowReversalBui) "Chilled water mass flow rate" annotation (Placement(transformation(extent={{-250,-130},{-230,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k= m1HexChi_flow_nominal) annotation (Placement(transformation(extent={{-108,-210},{-88,-190}}))); Buildings.Experimental.DHC.EnergyTransferStations.Combined.Controls.PIDWithEnable conTChiWat( @@ -249,7 +249,7 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor reverseActing=false, yMin=0) "PI controller for district HX primary side" annotation (Placement(transformation(extent={{-150,-210},{-130,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PPumHeaTot(final nin=2) + Buildings.Controls.OBC.CDL.Reals.MultiSum PPumHeaTot(final nin=2) "Total pump power for heating applications" annotation (Placement(transformation(extent={{190,410},{210,430}}))); Buildings.Fluid.Sources.Boundary_pT bouHeaWat( @@ -264,10 +264,10 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor nPorts=1) "Pressure boundary condition representing the expansion vessel" annotation (Placement(transformation(extent={{-162,-290},{-142,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PPumCooTot(nin=1) + Buildings.Controls.OBC.CDL.Reals.MultiSum PPumCooTot(nin=1) "Total pump power for space cooling" annotation (Placement(transformation(extent={{190,370},{210,390}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PPumTot(nin=2) + Buildings.Controls.OBC.CDL.Reals.MultiSum PPumTot(nin=2) "Total pump power" annotation (Placement(transformation(extent={{220,390},{240,410}}))); Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatSup( @@ -363,13 +363,13 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor nPorts=1) if have_hotWat "Source for cold water" annotation (Placement(transformation(extent={{-48,-50},{-28,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 if have_hotWat + Buildings.Controls.OBC.CDL.Reals.Divide div1 if have_hotWat "Compute mass flow rate from load" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k= cpBui_default) if have_hotWat "Times Cp" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum masFloHeaTot(final nin=2) + Buildings.Controls.OBC.CDL.Reals.MultiSum masFloHeaTot(final nin=2) "Compute district water mass flow rate used for heating service" annotation (Placement(transformation(extent={{270,-150},{290,-130}}))); Modelica.Blocks.Sources.Constant zer(final k=0) if not have_hotWat @@ -391,7 +391,7 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor extent={{-10,-10},{10,10}}, rotation=0, origin={40,-120}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delT if have_hotWat + Buildings.Controls.OBC.CDL.Reals.Subtract delT if have_hotWat "Compute DeltaT needed on condenser side" annotation (Placement(transformation(extent={{-150,-10},{-130,10}}))); Fluid.Sensors.MassFlowRate senMasFloHeaWatPri(redeclare final package Medium = @@ -404,26 +404,26 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor Modelica.Blocks.Sources.Constant zer1(k=0) if not have_hotWat "Replacement variable" annotation (Placement(transformation(extent={{-40,-250},{-20,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Add masFloHea + Buildings.Controls.OBC.CDL.Reals.Add masFloHea "Service water mass flow rate for heating applications" annotation ( Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={0,-264}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PHeaTot(final nin=2) + Buildings.Controls.OBC.CDL.Reals.MultiSum PHeaTot(final nin=2) "Total power used for heating and hot water production" annotation (Placement(transformation(extent={{270,70},{290,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Add heaFloEvaSHW if have_hotWat and have_varFloEva + Buildings.Controls.OBC.CDL.Reals.Add heaFloEvaSHW if have_hotWat and have_varFloEva "Heat flow rate at evaporator" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTHHW + Buildings.Controls.OBC.CDL.Reals.Subtract dTHHW "Heating hot water DeltaT" annotation (Placement(transformation(extent={{0,310},{-20,330}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter capFloHHW( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter capFloHHW( final k=cpBui_default) if have_varFloEva or have_varFloCon "Capacity flow rate" annotation (Placement(transformation(extent={{-220,310},{-200,330}}))); - Buildings.Controls.OBC.CDL.Continuous.Add heaFloEvaHHW if have_varFloEva + Buildings.Controls.OBC.CDL.Reals.Add heaFloEvaHHW if have_varFloEva "Heat flow rate at evaporator" annotation (Placement(transformation(extent={{-100,230},{-80,250}}))); Buildings.Experimental.DHC.EnergyTransferStations.Combined.Controls.PrimaryVariableFlow conFloEvaSHW( @@ -447,17 +447,17 @@ model HeatPumpHeatExchanger "Model of a substation with heat pump and compressor final cp=cpSer_default) if have_varFloEva "Mass flow rate control" annotation (Placement(transformation(extent={{-60,230},{-40,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Max priOve if have_varFloCon + Buildings.Controls.OBC.CDL.Reals.Max priOve if have_varFloCon "Ensure primary overflow" annotation (Placement(transformation(extent={{-60,270},{-40,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply loaHHW + Buildings.Controls.OBC.CDL.Reals.Multiply loaHHW if have_varFloEva or have_varFloCon "Heating load" annotation (Placement(transformation(extent={{-140,270},{-120,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter toSub(final k=-1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter toSub(final k=-1) if have_hotWat "Convert to subtraction" annotation (Placement(transformation(extent={{-80,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter toSub1(final k=-1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter toSub1(final k=-1) if have_hotWat "Convert to subtraction" annotation (Placement(transformation(extent={{-80,216},{-100,236}}))); equation diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Borefield.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Borefield.mo index f828fc81ba5..e0b0ea13fd1 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Borefield.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Borefield.mo @@ -95,7 +95,7 @@ model Borefield final unit="W") "Pump power" annotation (Placement(transformation(extent={{100,20},{140,60}}),iconTransformation(extent={{100,20},{140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k= m_flow_nominal) "Scale to nominal mass flow rate" annotation (Placement( transformation( extent={{10,-10},{-10,10}}, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Chiller.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Chiller.mo index 250d283fdfe..2af2a78cf6d 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Chiller.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Chiller.mo @@ -217,14 +217,14 @@ model Chiller Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Constant speed primary pumps control signal" annotation (Placement(transformation(extent={{-60,170},{-80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 annotation (Placement(transformation(extent={{160,-150},{180,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k=dat.mCon_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k=dat.mCon_flow_nominal) "Scale to nominal mass flow rate" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, origin={-100,114}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k=dat.mEva_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k=dat.mEva_flow_nominal) "Scale to nominal mass flow rate" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatExchanger.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatExchanger.mo index d15471cb6d6..b1b6d19fe8e 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatExchanger.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatExchanger.mo @@ -132,7 +132,7 @@ model HeatExchanger extent={{10,-10},{-10,10}}, rotation=90, origin={-20,-20}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k= m2_flow_nominal) "Scale to nominal mass flow rate" annotation ( Placement(transformation( extent={{-10,-10},{10,10}}, @@ -147,10 +147,10 @@ model HeatExchanger final dpFixed_nominal=dp1Hex_nominal) if have_val1 "Heat exchanger primary control valve" annotation (Placement(transformation(extent={{70,70},{90,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k= m1_flow_nominal) if not have_val1 "Scale to nominal mass flow rate" annotation (Placement(transformation(extent={{-12,110},{-32,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( final nin= if have_val1 then 1 diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatPump.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatPump.mo index b92de205deb..d1b307c7872 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatPump.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/HeatPump.mo @@ -150,13 +150,13 @@ model HeatPump "Base subsystem with water-to-water heat pump" dp_nominal=dp1_nominal) if have_pumCon "Heat pump condenser water pump" annotation (Placement(transformation(extent={{-70,-60},{-50,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floConNom( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floConNom( final k=m1_flow_nominal) if not have_varFloCon "Nominal flow rate" annotation (Placement(transformation(extent={{-100,80},{-120,100}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floEvaNom( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floEvaNom( final k=m2_flow_nominal) if not have_varFloEva "Nominal flow rate" annotation (Placement(transformation(extent={{0,80},{-20,100}}))); @@ -179,16 +179,16 @@ model HeatPump "Base subsystem with water-to-water heat pump" extent={{-10,-10},{10,10}}, rotation=90, origin={-40,-20}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaHeaPum( + Buildings.Controls.OBC.CDL.Reals.Switch enaHeaPum( u2(start=false)) "Enable heat pump by switching to actual set point" annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Adder" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Adder" annotation (Placement(transformation(extent={{140,-10},{160,10}}))); Modelica.Blocks.Sources.Constant zer(final k=0) if not have_pumCon "Replacement variable" annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold staPum[2]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold staPum[2]( y(each start=false), t=1e-2 .* {m1_flow_nominal,m2_flow_nominal}, h=0.5e-2 .* {m1_flow_nominal, m2_flow_nominal}) @@ -200,10 +200,10 @@ model HeatPump "Base subsystem with water-to-water heat pump" Modelica.Blocks.Sources.Constant one(final k=1) if not have_pumCon "Replacement variable" annotation (Placement(transformation(extent={{60,-110},{40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply floCon if have_pumCon + Buildings.Controls.OBC.CDL.Reals.Multiply floCon if have_pumCon "Zero flow rate if not enabled" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply floEva + Buildings.Controls.OBC.CDL.Reals.Multiply floEva "Zero flow rate if not enabled" annotation (Placement(transformation(extent={{-20,110},{0,130}}))); protected diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Borefield.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Borefield.mo index a44845b802b..9b1072ba1f9 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Borefield.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Borefield.mo @@ -56,11 +56,11 @@ model Borefield offset=273.15) "Inlet temperature values" annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( k=0) "Zero" annotation (Placement(transformation(extent={{-110,30},{-90,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp u( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp u( duration=1000, startTime=2500) "Control signal" diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Chiller.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Chiller.mo index 8dc6a5fec72..eeaa23aef2c 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Chiller.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/Chiller.mo @@ -43,7 +43,7 @@ model Chiller nPorts=2) "Condenser water boundary conditions" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-110,-62}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet( k=7+273.15, y(final unit="K", displayUnit="degC")) diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/HeatExchanger.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/HeatExchanger.mo index 44cbd36ef0c..74e5414fc92 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/HeatExchanger.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/HeatExchanger.mo @@ -41,7 +41,7 @@ model HeatExchanger T_b2_nominal=279.15) "Heat exchanger with primary pump" annotation (Placement(transformation(extent={{30,-90},{50,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch secondary temperature value depending on heat/cold rejection mode" annotation (Placement(transformation(extent={{-120,-90},{-100,-70}}))); Buildings.Fluid.Sensors.TemperatureTwoPort senT1OutPum(redeclare final @@ -139,15 +139,15 @@ model HeatExchanger 0) "Evaporator loop isolation valve opening" annotation (Placement(transformation(extent={{-190,30},{-170,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1( amplitude=0.5, freqHz=1e-3, offset=0.5) "Control signal" annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Activate heat/cold rejection" + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Activate heat/cold rejection" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( k=0) "Zero" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); Modelica.Blocks.Sources.TimeTable TColVal( diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/SwitchBox.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/SwitchBox.mo index fad93fd7c14..6fe314a78ac 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/SwitchBox.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/SwitchBox.mo @@ -43,7 +43,7 @@ model SwitchBox "Validation of flow switch box" Fluid.Sensors.MassFlowRate senMasFlo( redeclare final package Medium = Medium) "District water mass flow rate" annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={0,-100}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setMasFlo1(k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setMasFlo1(k=0.5) "Set point for mass flow rate (normalized)" annotation (Placement(transformation(extent={{-90,30},{-70,50}}))); Fluid.Sources.Boundary_pT disWatBou(redeclare package Medium = Medium, @@ -59,10 +59,10 @@ model SwitchBox "Validation of flow switch box" columns={2}, timeScale=1000) "Set point for mass flow rate (normalized)" annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k= m_flow_nominal) "Scale with nominal mass flow rate" annotation (Placement(transformation(extent={{-46,70},{-26,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k= m_flow_nominal) "Scale with nominal mass flow rate" annotation (Placement(transformation(extent={{-46,30},{-26,50}}))); equation diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/WatersideEconomizer.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/WatersideEconomizer.mo index 89c86ba110d..acdbdd0aa0e 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/WatersideEconomizer.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/Validation/WatersideEconomizer.mo @@ -153,7 +153,7 @@ model WatersideEconomizer m_flow_nominal=hexPum.m2_flow_nominal, dp_nominal=20E4) "Pipe flow resistance" annotation (Placement(transformation(extent={{-100,-50},{-120,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpSet( height=15E4, duration=1000, offset=10E4, diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/WatersideEconomizer.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/WatersideEconomizer.mo index d682cb78c3b..2ec9609b83f 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/WatersideEconomizer.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Subsystems/WatersideEconomizer.mo @@ -127,7 +127,7 @@ model WatersideEconomizer use_inputFilter=false) if have_val1 "Heat exchanger primary control valve" annotation (Placement(transformation(extent={{70,70},{90,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k= m1_flow_nominal) if not have_val1 "Scale to nominal mass flow rate" annotation (Placement(transformation(extent={{10,100},{-10,120}}))); Buildings.Fluid.Actuators.Valves.ThreeWayLinear val2( diff --git a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Validation/BaseClasses/PartialChillerBorefield.mo b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Validation/BaseClasses/PartialChillerBorefield.mo index 711459f9308..bc8a2595885 100644 --- a/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Validation/BaseClasses/PartialChillerBorefield.mo +++ b/Buildings/Experimental/DHC/EnergyTransferStations/Combined/Validation/BaseClasses/PartialChillerBorefield.mo @@ -34,13 +34,13 @@ partial model PartialChillerBorefield TConEntMin=298.15, TConEntMax=328.15) "Chiller performance data" annotation (Placement(transformation(extent={{20,180},{40,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet( k=45+273.15, y(final unit="K", displayUnit="degC")) "Heating water supply temperature set point" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet( k=7+273.15, y(final unit="K", displayUnit="degC")) @@ -105,10 +105,10 @@ partial model PartialChillerBorefield final m_flow_nominal=mChiWat_flow_nominal, dp_nominal=100E3) "Chilled water distribution pump" annotation (Placement(transformation(extent={{110,30},{130,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k= mChiWat_flow_nominal) "Scale to nominal mass flow rate" annotation (Placement(transformation(extent={{90,90},{110,110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k= mHeaWat_flow_nominal) "Scale to nominal mass flow rate" annotation (Placement(transformation(extent={{40,90},{20,110}}))); DHC.EnergyTransferStations.BaseClasses.Pump_m_flow pumHeaWat( @@ -129,7 +129,7 @@ partial model PartialChillerBorefield extent={{-10,10},{10,-10}}, rotation=-90, origin={-111,0}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=-ets.QHeaWat_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(final k=-ets.QHeaWat_flow_nominal) "Scale to nominal heat flow rate" annotation (Placement(transformation(extent={{-180,50},{-160,70}}))); Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaHea @@ -148,18 +148,18 @@ partial model PartialChillerBorefield extent={{-10,-10},{10,10}}, rotation=-90, origin={149,0}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4(final k=-ets.QChiWat_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4(final k=-ets.QChiWat_flow_nominal) "Scale to nominal heat flow rate" annotation (Placement(transformation(extent={{220,50},{200,70}}))); Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaCoo "Cooling load as prescribed heat flow rate" annotation (Placement(transformation(extent={{182,50},{162,70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold uHea( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold uHea( final t=0.01, final h=0.005) "Enable heating" annotation (Placement(transformation(extent={{-200,-30},{-180,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold uCoo( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold uCoo( final t=0.01, final h=0.005) "Enable cooling" diff --git a/Buildings/Experimental/DHC/Examples/Combined/BaseClasses/PartialSeries.mo b/Buildings/Experimental/DHC/Examples/Combined/BaseClasses/PartialSeries.mo index f138c1d3280..46d4bf4e83c 100644 --- a/Buildings/Experimental/DHC/Examples/Combined/BaseClasses/PartialSeries.mo +++ b/Buildings/Experimental/DHC/Examples/Combined/BaseClasses/PartialSeries.mo @@ -143,19 +143,19 @@ partial model PartialSeries "Partial model for series network" Modelica.Blocks.Sources.Constant TSewWat(k=273.15 + 17) "Sewage water temperature" annotation (Placement(transformation(extent={{-280,30},{-260,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupMaxSet[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupMaxSet[nBui]( k=bui.THeaWatSup_nominal) "Heating water supply temperature set point - Maximum value" annotation (Placement(transformation(extent={{-250,210},{-230,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet[nBui]( k=bui.TChiWatSup_nominal) "Chilled water supply temperature set point" annotation (Placement(transformation(extent={{-220,190},{-200,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupMinSet[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupMinSet[nBui]( each k=28 + 273.15) "Heating water supply temperature set point - Minimum value" annotation (Placement(transformation(extent={{-280,230},{-260,250}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PPumETS( + Buildings.Controls.OBC.CDL.Reals.MultiSum PPumETS( final nin=nBui) "ETS pump power" annotation (Placement(transformation(extent={{140,190},{160,210}}))); @@ -174,10 +174,10 @@ partial model PartialSeries "Partial model for series network" Modelica.Blocks.Continuous.Integrator EPumPla(initType=Modelica.Blocks.Types.Init.InitialState) "Plant pump electric energy" annotation (Placement(transformation(extent={{220,30},{240,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum EPum(nin=4) + Buildings.Controls.OBC.CDL.Reals.MultiSum EPum(nin=4) "Total pump electric energy" annotation (Placement(transformation(extent={{280,110},{300,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum PHeaPump( + Buildings.Controls.OBC.CDL.Reals.MultiSum PHeaPump( final nin=nBui) "Heat pump power" annotation (Placement(transformation(extent={{140,150},{160,170}}))); @@ -185,7 +185,7 @@ partial model PartialSeries "Partial model for series network" initType=Modelica.Blocks.Types.Init.InitialState) "Heat pump electric energy" annotation (Placement(transformation(extent={{220,150},{240,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum ETot(nin=2) "Total electric energy" + Buildings.Controls.OBC.CDL.Reals.MultiSum ETot(nin=2) "Total electric energy" annotation (Placement(transformation(extent={{320,150},{340,170}}))); Buildings.Experimental.DHC.Loads.BaseClasses.ConstraintViolation conVio( final uMin(final unit="K", displayUnit="degC")=datDes.TLooMin, diff --git a/Buildings/Experimental/DHC/Examples/Combined/SeriesConstantFlow.mo b/Buildings/Experimental/DHC/Examples/Combined/SeriesConstantFlow.mo index 6410bb0f674..4083b86d241 100644 --- a/Buildings/Experimental/DHC/Examples/Combined/SeriesConstantFlow.mo +++ b/Buildings/Experimental/DHC/Examples/Combined/SeriesConstantFlow.mo @@ -21,11 +21,11 @@ model SeriesConstantFlow k=datDes.mPla_flow_nominal) "District water flow rate to plant" annotation (Placement(transformation(extent={{-250,10},{-230,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THotWatSupSet[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THotWatSupSet[nBui]( k=fill(63 + 273.15, nBui)) "Hot water supply temperature set point" annotation (Placement(transformation(extent={{-190,170},{-170,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TColWat[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TColWat[nBui]( k=fill(15 + 273.15, nBui)) "Cold water temperature" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); diff --git a/Buildings/Experimental/DHC/Examples/Combined/SeriesVariableFlow.mo b/Buildings/Experimental/DHC/Examples/Combined/SeriesVariableFlow.mo index 1fdc92c8e2f..28174095a31 100644 --- a/Buildings/Experimental/DHC/Examples/Combined/SeriesVariableFlow.mo +++ b/Buildings/Experimental/DHC/Examples/Combined/SeriesVariableFlow.mo @@ -17,11 +17,11 @@ model SeriesVariableFlow k=datDes.mPla_flow_nominal) "District water flow rate to plant" annotation (Placement(transformation(extent={{-250,10},{-230,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THotWatSupSet[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THotWatSupSet[nBui]( k=fill(63 + 273.15, nBui)) "Hot water supply temperature set point" annotation (Placement(transformation(extent={{-190,170},{-170,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TColWat[nBui]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TColWat[nBui]( k=fill(15 + 273.15, nBui)) "Cold water temperature" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); @@ -32,7 +32,7 @@ model SeriesVariableFlow TMax=290.15, use_temperatureShift=false) "Main pump controller" annotation (Placement(transformation(extent={{-280,-70},{-260,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=datDes.mPumDis_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=datDes.mPumDis_flow_nominal) "Scale with nominal mass flow rate" annotation (Placement(transformation(extent={{-240,-70},{-220,-50}}))); equation diff --git a/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo b/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo index 0ad960aeef3..1c268d5527c 100644 --- a/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo +++ b/Buildings/Experimental/DHC/Examples/Cooling/ElectricChillersDirectETS.mo @@ -118,7 +118,7 @@ model ElectricChillersDirectETS "Example model for district cooling system with Modelica.Blocks.Math.Sum QTotCoo_flow(nin=nLoa) "Total cooling flow rate for all buildings " annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold offCoo(t=1e-4) + Buildings.Controls.OBC.CDL.Reals.LessThreshold offCoo(t=1e-4) "Threshold comparison to disable the plant" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); Modelica.Blocks.Math.Gain norQFlo(k=1/sum(QCoo_flow_nominal)) diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/MixingValveControl.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/MixingValveControl.mo index b5e8cd6c5be..ddfd73e6190 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/MixingValveControl.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/MixingValveControl.mo @@ -32,7 +32,7 @@ block MixingValveControl "Valve control signal" annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=0,origin={120,0}),iconTransformation(extent={{-10,-10},{10,10}},rotation=0,origin={110,0}))); // COMPONENTS - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( k=0) "Zero constant" annotation (Placement(transformation(extent={{-70,10},{-50,30}}))); @@ -40,7 +40,7 @@ block MixingValveControl threshold=2) if typDis == Type_dis.ChangeOver "Conversion to boolean (true if cooling mode)" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset resConTSup( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset resConTSup( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, final k=k, final Ti=Ti, @@ -50,7 +50,7 @@ block MixingValveControl final y_reset=0) if typDis == Type_dis.ChangeOver "PI controller tracking supply temperature" annotation (Placement(transformation(extent={{-70,-70},{-50,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conTSup( + Buildings.Controls.OBC.CDL.Reals.PID conTSup( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, final k=k, final Ti=Ti, @@ -59,16 +59,16 @@ block MixingValveControl final reverseActing=true) if typDis <> Type_dis.ChangeOver "PI controller tracking supply temperature" annotation (Placement(transformation(extent={{-70,-30},{-50,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Min negPar + Buildings.Controls.OBC.CDL.Reals.Min negPar "Negative part of control signal" annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Max posPar + Buildings.Controls.OBC.CDL.Reals.Max posPar "Positive part of control signal" annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter opp(k=-1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter opp(k=-1) "Opposite value" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); Modelica.Blocks.Sources.BooleanExpression fixMod( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/Validation/MixingValveControl.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/Validation/MixingValveControl.mo index c81ffaeeffc..da49be036b0 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/Validation/MixingValveControl.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Controls/Validation/MixingValveControl.mo @@ -23,34 +23,34 @@ model MixingValveControl nPorts=1) "Primary supply stream" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-10,20}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TPriHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TPriHea( k=313.15, y(final unit="K", displayUnit="degC")) "Heating water primary supply temperature" annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TPriChi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TPriChi( k=280.15, y(final unit="K", displayUnit="degC")) "Chilled water primary supply temperature" annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TPri( + Buildings.Controls.OBC.CDL.Reals.Switch TPri( y(final unit="K", displayUnit="degC")) "Actual primary supply temperature" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSecHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSecHea( k=303.15, y(final unit="K", displayUnit="degC")) "Heating water secondary supply temperature set point" annotation (Placement(transformation(extent={{-140,-70},{-120,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSecChi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSecChi( k=291.15) "Chilled water secondary supply temperature set point" annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TSetSecAct( + Buildings.Controls.OBC.CDL.Reals.Switch TSetSecAct( y(final unit="K", displayUnit="degC")) "Actual secondary supply temperature set point" @@ -67,7 +67,7 @@ model MixingValveControl nPorts=1) "Sink for secondary stream" annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={110,100}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dTSecHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTSecHea( k=-5) "Secondary temperature difference between supply and return" annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); @@ -86,13 +86,13 @@ model MixingValveControl nPorts=1) "Sink for primary stream" annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={110,20}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse mSec_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse mSec_flow( amplitude=m_flow_nominal, period=200, offset=0) "Secondary mass flow rate" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add + Buildings.Controls.OBC.CDL.Reals.Add add "Computation of secondary return temperature" annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); Buildings.Fluid.Sensors.TemperatureTwoPort senTPriSup( @@ -100,12 +100,12 @@ model MixingValveControl m_flow_nominal=m_flow_nominal) "Primary supply temperature (measured)" annotation (Placement(transformation(extent={{8,10},{28,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch dTSec( + Buildings.Controls.OBC.CDL.Reals.Switch dTSec( y(final unit="K", displayUnit="degC")) "Actual secondary delta T" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dTSecCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTSecCoo( k=5) "Secondary temperature difference between supply and return" annotation (Placement(transformation(extent={{-20,-150},{0,-130}}))); diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ1Valve.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ1Valve.mo index 2efc79dab80..7ee7aa50325 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ1Valve.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ1Valve.mo @@ -136,19 +136,19 @@ model BuildingRCZ1Valve k=20*14) "Outdoor coefficient of heat transfer for windows" annotation (Placement(transformation(extent={{4,-4},{-4,4}},rotation=90,origin={6,116}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) "Minimum temperature set point" annotation (Placement(transformation(extent={{-280,250},{-260,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet( k=297.15, y(final unit="K", displayUnit="degC")) "Maximum temperature set point" annotation (Placement(transformation(extent={{-280,210},{-260,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( nin=2) annotation (Placement(transformation(extent={{240,70},{260,90}}))); Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.FanCoil4Pipe terUni( @@ -187,13 +187,13 @@ model BuildingRCZ1Valve nPorts_b1=1) "Chilled water distribution system" annotation (Placement(transformation(extent={{-100,-270},{-80,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSecHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSecHea( k=308.15, y(final unit="K", displayUnit="degC")) "Heating water secondary supply temperature set point" annotation (Placement(transformation(extent={{-260,-190},{-240,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSecChi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSecChi( k=289.15, y(final unit="K", displayUnit="degC")) diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ6.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ6.mo index 712f9c0c40e..d8439e73bb8 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ6.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingRCZ6.mo @@ -27,7 +27,7 @@ model BuildingRCZ6 fill(-10000, nZon - 1), {-50000}) ./ facMulTerUni "Design cooling heat flow rate (<=0)" annotation (Dialog(group="Nominal condition")); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet[nZon]( k=fill( 293.15, nZon), @@ -35,7 +35,7 @@ model BuildingRCZ6 each displayUnit="degC")) "Minimum temperature set point" annotation (Placement(transformation(extent={{-290,230},{-270,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet[nZon]( k=fill( 297.15, nZon), @@ -55,7 +55,7 @@ model BuildingRCZ6 annotation (Placement(transformation(extent={{60,-20},{80,0}}))); Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.GeojsonExportRC.OfficeBuilding.ICT iCT annotation (Placement(transformation(extent={{100,-20},{120,0}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( nin=2) annotation (Placement(transformation(extent={{240,70},{260,90}}))); Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.FanCoil4PipeHeatPorts terUni[nZon]( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ1.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ1.mo index ab718dd0701..5646bffddc5 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ1.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ1.mo @@ -47,13 +47,13 @@ model BuildingSpawnZ1 weaName)) "Building model" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) "Minimum temperature set point" annotation (Placement(transformation(extent={{-280,250},{-260,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet( k=297.15, y(final unit="K", displayUnit="degC")) diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ6.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ6.mo index 05b4d4164e4..143e66fc7d0 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ6.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingSpawnZ6.mo @@ -32,7 +32,7 @@ model BuildingSpawnZ6 "Name of the weather file"; parameter String weaName="modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos" "Name of the weather file"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet[nZon]( k=fill( 293.15, nZon), @@ -40,7 +40,7 @@ model BuildingSpawnZ6 each displayUnit="degC")) "Minimum temperature set point" annotation (Placement(transformation(extent={{-280,250},{-260,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet[nZon]( k=fill( 297.15, nZon), @@ -106,10 +106,10 @@ model BuildingSpawnZ6 weaName)) "Building outer component" annotation (Placement(transformation(extent={{30,138},{52,158}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( final nin=nZon) annotation (Placement(transformation(extent={{230,110},{250,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum3( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum3( nin=2) annotation (Placement(transformation(extent={{230,70},{250,90}}))); Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.FanCoil4Pipe terUni[nZon]( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingTimeSeries.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingTimeSeries.mo index f4df272ff4d..8ed50bca637 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingTimeSeries.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/BuildingTimeSeries.mo @@ -153,14 +153,14 @@ model BuildingTimeSeries smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1) "Reader for thermal loads (y[1] is cooling load, y[2] is space heating load, y[3] is domestic water heat load)" annotation (Placement(transformation(extent={{-280,-10},{-260,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) if have_heaWat "Minimum temperature set point" annotation (Placement(transformation(extent={{-280,170},{-260,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet( k=297.15, y(final unit="K", displayUnit="degC")) @@ -227,28 +227,28 @@ model BuildingTimeSeries final T_aLoaCoo_nominal=T_aLoaCoo_nominal, final w_aLoaCoo_nominal=w_aLoaCoo_nominal) "Cooling terminal unit" annotation (Placement(transformation(extent={{70,36},{90,56}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPPum + Buildings.Controls.OBC.CDL.Reals.Add addPPum "Sum pump power" annotation (Placement(transformation(extent={{240,70},{260,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noCoo( k=0) if not have_chiWat "No cooling system" annotation (Placement(transformation(extent={{130,70},{150,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noHea( k=0) if not have_heaWat "No heating system" annotation (Placement(transformation(extent={{130,110},{150,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPFan + Buildings.Controls.OBC.CDL.Reals.Add addPFan "Sum fan power" annotation (Placement(transformation(extent={{240,110},{260,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQReqHea_flow( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQReqHea_flow( u(final unit="W"), final k=facMul) if have_heaLoa "Scaling" annotation (Placement(transformation(extent={{272,30},{292,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQReqCoo_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQReqCoo_flow(u( final unit="W"), final k=facMul) if have_cooLoa "Scaling" annotation (Placement(transformation(extent={{272,-10},{292,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQReqHot_flow(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQReqHot_flow(u(final unit="W"), final k=facMul) if have_heaLoa "Scaling" annotation (Placement(transformation(extent={{270,-130},{290,-110}}))); protected diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/FanCoil4PipeHeatPorts.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/FanCoil4PipeHeatPorts.mo index 8c9a3bf0eab..6cf2f590f64 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/FanCoil4PipeHeatPorts.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/FanCoil4PipeHeatPorts.mo @@ -29,7 +29,7 @@ model FanCoil4PipeHeatPorts HeatTransfer.Sources.PrescribedHeatFlow heaFloCooRad "Radiative heat flow rate to load" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={110,-80}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zero( k=0) "Zero" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/PartialFanCoil4Pipe.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/PartialFanCoil4Pipe.mo index b9239c0684a..85797e5d8ca 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/PartialFanCoil4Pipe.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/BaseClasses/PartialFanCoil4Pipe.mo @@ -24,7 +24,7 @@ partial model PartialFanCoil4Pipe "Heating heat exchanger configuration"; final parameter hexConfiguration hexConCoo=hexConfiguration.CounterFlow "Cooling heat exchanger configuration"; - Buildings.Controls.OBC.CDL.Continuous.PID conHea( + Buildings.Controls.OBC.CDL.Reals.PID conHea( Ti=10, yMax=1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -57,7 +57,7 @@ partial model PartialFanCoil4Pipe final allowFlowReversal1=allowFlowReversal, final allowFlowReversal2=allowFlowReversalLoa) annotation (Placement(transformation(extent={{-80,4},{-60,-16}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFloNom(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFloNom(k= mHeaWat_flow_nominal) annotation (Placement(transformation(extent={{40,210},{60,230}}))); Modelica.Blocks.Sources.RealExpression Q_flowHea( @@ -81,10 +81,10 @@ partial model PartialFanCoil4Pipe annotation (Placement(transformation(extent={{0,4},{20,-16}}))); Modelica.Blocks.Sources.RealExpression Q_flowCoo(y=hexWetNtu.Q2_flow) annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiFloNom2(k=max({ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiFloNom2(k=max({ mLoaHea_flow_nominal,mLoaCoo_flow_nominal})) annotation (Placement(transformation(extent={{40,130},{60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conCoo( + Buildings.Controls.OBC.CDL.Reals.PID conCoo( Ti=10, yMax=1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -92,7 +92,7 @@ partial model PartialFanCoil4Pipe yMin=0) "PI controller for cooling" annotation (Placement(transformation(extent={{-10,170},{10,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiCooFloNom(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiCooFloNom(k= mChiWat_flow_nominal) "Scaling" annotation (Placement(transformation(extent={{40,170},{60,190}}))); Utilities.Math.SmoothMax smoothMax( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeries.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeries.mo index 0f902ef70df..a47aa48c0f8 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeries.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeries.mo @@ -60,16 +60,16 @@ model CouplingTimeSeries y(unit="J")) "Actual energy used for cooling" annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveHeaReq_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveHeaReq_flow(y(unit= "W"), final delta=perAve) "Time average of heating load" annotation (Placement(transformation(extent={{60,110},{80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveHeaAct_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveHeaAct_flow(y(unit= "W"), final delta=perAve) "Time average of heating heat flow rate" annotation (Placement(transformation(extent={{100,110},{120,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveCooReq_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveCooReq_flow(y(unit= "W"), final delta=perAve) "Time average of cooling load" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveCooAct_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveCooAct_flow(y(unit= "W"), final delta=perAve) "Time average of cooling heat flow rate" annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); equation diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeriesSingleLoop.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeriesSingleLoop.mo index 1376863409f..8ea1a82bc5e 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeriesSingleLoop.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Examples/CouplingTimeSeriesSingleLoop.mo @@ -32,10 +32,10 @@ model CouplingTimeSeriesSingleLoop y(unit="J")) "Time integral of cooling load" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveCooReq_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveCooReq_flow(y(unit= "W"), final delta=perAve) "Time average of cooling load" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveCooAct_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveCooAct_flow(y(unit= "W"), final delta=perAve) "Time average of cooling heat flow rate" annotation (Placement(transformation(extent={{80,20},{100,40}}))); Modelica.Blocks.Continuous.Integrator ECooAct( @@ -66,7 +66,7 @@ model CouplingTimeSeriesSingleLoop nPorts=1) "Sink for heating water" annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={110,-12}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveHeaReq_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveHeaReq_flow(y(unit= "W"), final delta=perAve) "Time average of heating load" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); Modelica.Blocks.Continuous.Integrator EHeaReq( @@ -77,7 +77,7 @@ model CouplingTimeSeriesSingleLoop y(unit="J")) "Actual energy used for heating" annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage QAveHeaAct_flow(y(unit= + Buildings.Controls.OBC.CDL.Reals.MovingAverage QAveHeaAct_flow(y(unit= "W"), final delta=perAve) "Time average of heating heat flow rate" annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); equation diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/FlowDistribution.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/FlowDistribution.mo index 99c705a62a8..c75092d6ef3 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/FlowDistribution.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/FlowDistribution.mo @@ -137,7 +137,7 @@ model FlowDistribution annotation (Placement(transformation(extent={{100,60},{140,100}}), iconTransformation(extent={{100,-90},{120,-70}}))); // COMPONENTS - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumMasFloReq( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumMasFloReq( final k=fill( 1, nUni), @@ -156,7 +156,7 @@ model FlowDistribution final nPorts=nUni) "Sink for terminal units return flow rate" annotation (Placement(transformation(extent={{-60,190},{-80,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum Q_flowSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum Q_flowSum( final nin=nUni) "Total heat flow rate" annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo index 34636628d7f..b34bf925dc9 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuilding.mo @@ -166,22 +166,22 @@ partial model PartialBuilding each final allowFlowReversal=allowFlowReversal) if have_chiWat "Mass flow rate multiplier" annotation (Placement(transformation(extent={{260,-270},{280,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQHea_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQHea_flow(u( final unit="W"), final k=facMul) if have_heaLoa "Scaling" annotation (Placement(transformation(extent={{270,270},{290,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQCoo_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQCoo_flow(u( final unit="W"), final k=facMul) if have_cooLoa "Scaling" annotation (Placement(transformation(extent={{270,230},{290,250}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPHea(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPHea(u(final unit="W"), final k=facMul) if have_eleHea "Scaling" annotation (Placement(transformation(extent={{270,190},{290,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPCoo(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPCoo(u(final unit="W"), final k=facMul) if have_eleCoo "Scaling" annotation (Placement(transformation(extent={{270,150},{290,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPFan(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPFan(u(final unit="W"), final k=facMul) if have_fan "Scaling" annotation (Placement(transformation(extent={{270,110},{290,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPPum(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPPum(u(final unit="W"), final k=facMul) if have_pum "Scaling" annotation (Placement(transformation(extent={{270,70},{290,90}}))); protected diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo index 5d4183c81fd..aa7b18a3969 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialBuildingWithPartialETS.mo @@ -220,42 +220,42 @@ partial model PartialBuildingWithPartialETS final allowFlowReversalBui=allowFlowReversalBui) "Energy transfer station model" annotation (Placement(transformation(extent={{-30,-86},{30,-26}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPHea( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPHea( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_eleHea,ets.have_eleHea})) "Total power drawn by heating system" annotation (Placement(transformation(extent={{242,192},{262,212}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPCoo( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPCoo( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_eleCoo,ets.have_eleCoo})) "Total power drawn by cooling system" annotation (Placement(transformation(extent={{240,150},{260,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPFan( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPFan( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_fan,ets.have_fan})) "Total power drawn by fan motors" annotation (Placement(transformation(extent={{240,110},{260,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( final nin=Modelica.Math.BooleanVectors.countTrue( {bui.have_pum,ets.have_pum})) if have_pum "Total power drawn by pump motors" annotation (Placement(transformation(extent={{240,70},{260,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQHea_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQHea_flow(u( final unit="W"), final k=facMul) if bui.have_heaLoa "Scaling" annotation (Placement(transformation(extent={{270,270},{290,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQCoo_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQCoo_flow(u( final unit="W"), final k=facMul) if bui.have_cooLoa "Scaling" annotation (Placement(transformation(extent={{270,230},{290,250}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPHea(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPHea(u(final unit="W"), final k=facMul) if have_eleHea "Scaling" annotation (Placement(transformation(extent={{270,192},{290,212}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPCoo(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPCoo(u(final unit="W"), final k=facMul) if have_eleCoo "Scaling" annotation (Placement(transformation(extent={{270,150},{290,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPFan(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPFan(u(final unit="W"), final k=facMul) if have_fan "Scaling" annotation (Placement(transformation(extent={{270,110},{290,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPPum(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPPum(u(final unit="W"), final k=facMul) if have_pum "Scaling" annotation (Placement(transformation(extent={{270,70},{290,90}}))); Fluid.BaseClasses.MassFlowRateMultiplier mulSerAmbInl( @@ -300,7 +300,7 @@ partial model PartialBuildingWithPartialETS typ == TypDisSys.CombinedGeneration2to4 or typ == TypDisSys.Cooling "Mass flow rate multiplier" annotation (Placement(transformation(extent={{260,-290},{280,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQFue_flow[nFue]( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQFue_flow[nFue]( u(each final unit="W"), each final k=facMul) if nFue > 0 "Scaling" annotation (Placement(transformation(extent={{270,30},{290,50}}))); initial equation diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialTerminalUnit.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialTerminalUnit.mo index 42fbe55157b..a9e2fcce411 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/PartialTerminalUnit.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/PartialTerminalUnit.mo @@ -285,38 +285,38 @@ partial model PartialTerminalUnit "Chilled water outlet port" annotation (Placement(transformation(extent={{210,-190},{190,-170}}),iconTransformation(extent={{130,-90},{110,-70}}))); // COMPONENTS - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQReqHea_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQReqHea_flow(u( final unit="W"), final k=1/facMul) if have_QReq_flow and (have_heaWat or have_chaOve or have_eleHea) "Scaling" annotation (Placement(transformation(extent={{-180,90},{-160,110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQReqCoo_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQReqCoo_flow(u( final unit="W"), final k=1/facMul) if have_QReq_flow and (have_chiWat or have_eleCoo) "Scaling" annotation (Placement(transformation(extent={{-180,50},{-160,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQActHea_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQActHea_flow(u( final unit="W"), final k=facMul*facMulZon) if have_heaWat or have_chaOve or have_eleHea "Scaling" annotation (Placement(transformation(extent={{160,210},{180,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulQActCoo_flow(u( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulQActCoo_flow(u( final unit="W"), final k=facMul*facMulZon) if have_chiWat or have_eleCoo "Scaling" annotation (Placement(transformation(extent={{160,190},{180,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPHea(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPHea(u(final unit="W"), final k=facMul*facMulZon) if have_eleHea "Scaling" annotation (Placement(transformation(extent={{160,170},{180,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPCoo(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPCoo(u(final unit="W"), final k=facMul*facMulZon) if have_eleCoo "Scaling" annotation (Placement(transformation(extent={{160,150},{180,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPFan(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPFan(u(final unit="W"), final k=facMul*facMulZon) if have_fan "Scaling" annotation (Placement(transformation(extent={{160,130},{180,150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPPum(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPPum(u(final unit="W"), final k=facMul*facMulZon) if have_pum "Scaling" annotation (Placement(transformation(extent={{160,110},{180,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulMasFloReqHeaWat( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulMasFloReqHeaWat( u(final unit="kg/s"), final k=facMul*facMulZon) if have_heaWat "Scaling" annotation (Placement(transformation(extent={{160,90},{180,110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulMasFloReqChiWat( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulMasFloReqChiWat( u(final unit="kg/s"), final k=facMul*facMulZon) if have_chiWat "Scaling" annotation (Placement(transformation(extent={{160,70},{180,90}}))); Fluid.BaseClasses.MassFlowRateMultiplier mulHeaWatFloInl( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/Building.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/Building.mo index 5c0877b0d60..1d257170de3 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/Building.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/Building.mo @@ -10,16 +10,16 @@ model Building annotation (Dialog(group="Nominal condition", enable=have_heaWat)); parameter Modelica.Units.SI.MassFlowRate m_flow_nominal "Nominal mass flow rate"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPHea( k=1) annotation (Placement(transformation(extent={{240,190},{260,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPCoo( k=1) annotation (Placement(transformation(extent={{240,150},{260,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPFan( k=1) annotation (Placement(transformation(extent={{240,110},{260,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPPum( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPPum( k=1) annotation (Placement(transformation(extent={{240,70},{260,90}}))); Fluid.HeatExchangers.HeaterCooler_u loaHea( @@ -38,13 +38,13 @@ model Building dp_nominal=0) if have_chiWat "Cooling load" annotation (Placement(transformation(extent={{-10,-270},{10,-250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(k=1) "One" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "One" annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( k=-1) if have_heaWat "Opposite" annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( k=-1) if have_chiWat "Opposite" annotation (Placement(transformation(extent={{30,-250},{50,-230}}))); diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/ETS.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/ETS.mo index 13746ed5823..a5273788b12 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/ETS.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/ETS.mo @@ -5,16 +5,16 @@ model ETS Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.PartialETS; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal "Nominal mass flow rate"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPHea( k=1) annotation (Placement(transformation(extent={{260,50},{280,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPCoo( k=1) annotation (Placement(transformation(extent={{260,10},{280,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPFan( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPFan( k=1) annotation (Placement(transformation(extent={{260,-30},{280,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant souPPum( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant souPPum( k=1) annotation (Placement(transformation(extent={{260,-70},{280,-50}}))); Fluid.Sources.Boundary_pT sinSerAmbSup( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeCooling.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeCooling.mo index dc88af05f44..52b56f0332d 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeCooling.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeCooling.mo @@ -42,7 +42,7 @@ model FanCoil2PipeCooling "Design temperature difference at which envelope heat loss is QEnv_flow_nominal" annotation (Dialog(group="Nominal condition")); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset con( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset con( final k=k, final Ti=Ti, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -77,13 +77,13 @@ model FanCoil2PipeCooling final w_a2_nominal=w_aLoaCoo_nominal) "Cooling coil" annotation (Placement(transformation(extent={{-80,4},{-60,-16}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiMasFlo(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiMasFlo(k= mChiWat_flow_nominal) "Scale water flow rate" annotation (Placement(transformation(extent={{40,210},{60,230}}))); Modelica.Blocks.Sources.RealExpression Q_flowCoo( final y=hexWetNtu.Q2_flow) annotation (Placement(transformation(extent={{120,190},{140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiFloNom2(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiFloNom2(k= mLoaCoo_flow_nominal) "Scale air flow rate" annotation (Placement(transformation(extent={{52,170},{72,190}}))); Fluid.Sources.Boundary_pT sinAir( @@ -103,15 +103,15 @@ model FanCoil2PipeCooling TAir_start=297.15, final QEnv_flow_nominal=QEnv_flow_nominal) "Predicted room air temperature" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo(k=1/ QCoo_flow_nominal) annotation (Placement(transformation(extent={{-88,210},{-68,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo1(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo1(k=1/ QCoo_flow_nominal) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=90, origin={0,190}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( t=1E-4, h=0.5E-4) "Reset when demand rises from zero" @@ -123,12 +123,12 @@ model FanCoil2PipeCooling final dp_nominal=dpLoa_nominal) "Load side pressure drop" annotation (Placement(transformation(extent={{80,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "One constant" annotation (Placement(transformation(extent={{-10,130},{10,150}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(k=have_speVar) annotation (Placement(transformation(extent={{-50,150},{-30,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" annotation (Placement(transformation(extent={{26,170},{46,190}}))); equation diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeating.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeating.mo index f07e732caa4..cc75c37404d 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeating.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeating.mo @@ -46,7 +46,7 @@ model FanCoil2PipeHeating final dp_nominal=dpLoa_nominal) "Fan" annotation (Placement(transformation(extent={{50,-10},{30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset con( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset con( final k=k, final Ti=Ti, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -68,13 +68,13 @@ model FanCoil2PipeHeating final allowFlowReversal2=allowFlowReversalLoa) "Heating coil" annotation (Placement(transformation(extent={{-80,4},{-60,-16}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiMasFlo(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiMasFlo(k= mHeaWat_flow_nominal) "Scale water flow rate" annotation (Placement(transformation(extent={{40,210},{60,230}}))); Modelica.Blocks.Sources.RealExpression Q_flowHea( y=hex.Q2_flow) annotation (Placement(transformation(extent={{120,210},{140,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiFloNom2(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiFloNom2(k= mLoaHea_flow_nominal) "Scale air flow rate" annotation (Placement(transformation(extent={{56,170},{76,190}}))); Fluid.Sources.Boundary_pT sinAir( @@ -95,25 +95,25 @@ model FanCoil2PipeHeating TAir_start=293.15, QEnv_flow_nominal=QHea_flow_nominal) "Predicted room air temperature" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo(k=1/ QHea_flow_nominal) annotation (Placement(transformation(extent={{-88,210},{-68,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo1(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo1(k=1/ QHea_flow_nominal) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=90, origin={0,190}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" annotation (Placement(transformation(extent={{30,170},{50,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( k=1) "One constant" annotation (Placement(transformation(extent={{0,130},{20,150}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( k=have_speVar) annotation (Placement(transformation(extent={{-50,160},{-30,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( t=1E-4, h=0.5E-4) "Reset when demand rises from zero" diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeatingValve.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeatingValve.mo index 7d5de9da23a..f52dfdde37c 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeatingValve.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BaseClasses/FanCoil2PipeHeatingValve.mo @@ -42,7 +42,7 @@ model FanCoil2PipeHeatingValve final dp_nominal=dpLoa_nominal) "Fan" annotation (Placement(transformation(extent={{70,-10},{50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PID con( + Buildings.Controls.OBC.CDL.Reals.PID con( Ti=10, yMax=1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, @@ -68,7 +68,7 @@ model FanCoil2PipeHeatingValve Modelica.Blocks.Sources.RealExpression Q_flowHea( y=hex.Q2_flow) annotation (Placement(transformation(extent={{120,210},{140,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiFloNom2(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiFloNom2(k= mLoaHea_flow_nominal) annotation (Placement(transformation(extent={{56,170},{76,190}}))); Fluid.Sources.Boundary_pT sinAir( @@ -100,22 +100,22 @@ model FanCoil2PipeHeatingValve redeclare final package Medium=Medium1, final allowFlowReversal=allowFlowReversal) annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=-90,origin={-40,-120}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo(k=1/ QHea_flow_nominal) annotation (Placement(transformation(extent={{-40,210},{-20,230}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHeaFlo1(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHeaFlo1(k=1/ QHea_flow_nominal) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=90, origin={0,190}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( k=1) "One constant" annotation (Placement(transformation(extent={{-10,130},{10,150}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( k=have_speVar) annotation (Placement(transformation(extent={{-60,160},{-40,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch" annotation (Placement(transformation(extent={{30,170},{50,190}}))); Fluid.FixedResistances.PressureDrop resLoa( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution1.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution1.mo index 88b828e5577..82bf3040132 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution1.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution1.mo @@ -73,7 +73,7 @@ model BenchmarkFlowDistribution1 smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1) "Reader for thermal loads (y[1] is cooling load, y[2] is heating load)" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) @@ -99,7 +99,7 @@ model BenchmarkFlowDistribution1 nPorts=1) "Sink for heating water" annotation (Placement(transformation(extent={{10,-10},{-10,10}},rotation=0,origin={90,-80}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSup( k=max( ter.T_aHeaWat_nominal)) "Supply temperature" diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution2.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution2.mo index cc7b019f552..2c3dc4c6837 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution2.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/BenchmarkFlowDistribution2.mo @@ -66,7 +66,7 @@ model BenchmarkFlowDistribution2 smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1) "Reader for thermal loads (y[1] is cooling load, y[2] is heating load)" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) @@ -117,11 +117,11 @@ model BenchmarkFlowDistribution2 nPorts=2) "Volume for fluid stream" annotation (Placement(transformation(extent={{-31,-80},{-11,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpPum( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpPum( k=dp_nominal) "Prescribed head" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSup( k=max( ter.T_aHeaWat_nominal)) "Supply temperature" diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/FlowDistributionPumpControl.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/FlowDistributionPumpControl.mo index 5956b802b20..68ca93c79fc 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/FlowDistributionPumpControl.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/FlowDistributionPumpControl.mo @@ -76,7 +76,7 @@ model FlowDistributionPumpControl smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1) "Reader for thermal loads (y[1] is cooling load, y[2] is heating load)" annotation (Placement(transformation(extent={{-180,20},{-160,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=20+273.15, y(final unit="K", displayUnit="degC")) @@ -170,7 +170,7 @@ model FlowDistributionPumpControl final control_dp=false) "Fictitious pipe used to prescribe pump flow rate" annotation (Placement(transformation(extent={{-8,170},{12,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one1( k=1) "Constant one" annotation (Placement(transformation(extent={{-180,190},{-160,210}}))); @@ -199,7 +199,7 @@ model FlowDistributionPumpControl nPorts_b1=5) "Distribution system with pump controlled at constant speed" annotation (Placement(transformation(extent={{-10,70},{10,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSup( k=T_aHeaWat_nominal) "Heating water supply temperature" annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); @@ -209,7 +209,7 @@ model FlowDistributionPumpControl nPorts=2) "Heating water source" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-130,-180}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setDp( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setDp( k=dpSet) "Pressure difference set-point" annotation (Placement(transformation(extent={{-180,-140},{-160,-120}}))); diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/SimpleRoomODE.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/SimpleRoomODE.mo index e4d0bd8f1da..15ac5044319 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/SimpleRoomODE.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/SimpleRoomODE.mo @@ -30,13 +30,13 @@ model SimpleRoomODE controllerType=Modelica.Blocks.Types.SimpleController.PI, Ti=10) annotation (Placement(transformation(extent={{30,110},{50,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minTSet( k=293.15, y(final unit="K", displayUnit="degC")) "Minimum temperature set point" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k= QHea_flow_nominal) "Scaling" annotation (Placement(transformation(extent={{60,110},{80,130}}))); HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow @@ -45,7 +45,7 @@ model SimpleRoomODE Buildings.Experimental.DHC.Loads.BaseClasses.Examples.BaseClasses.GeojsonExportRC.OfficeBuilding.Office romHeaUnm "ROM where the heating load is not met" annotation (Placement(transformation(extent={{-10,50},{10,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(k=0.7) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=0.7) "Scaling " annotation (Placement(transformation(extent={{92,90},{112,110}}))); HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow1 @@ -58,7 +58,7 @@ model SimpleRoomODE tau=tau) "ODE heated room model" annotation (Placement(transformation(extent={{-10,10},{10,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxTSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxTSet( k=297.15, y(final unit="K", displayUnit="degC")) @@ -70,7 +70,7 @@ model SimpleRoomODE reverseActing=false) "PI controller tracking the room maximum temperature" annotation (Placement(transformation(extent={{30,-110},{50,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(k= QCoo_flow_nominal) "Scaling" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); Buildings.Experimental.DHC.Loads.BaseClasses.SimpleRoomODE rooOdeCoo( @@ -80,7 +80,7 @@ model SimpleRoomODE tau=tau) "ODE cooled room model" annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(k=0.8) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(k=0.8) "Scaling" annotation (Placement(transformation(extent={{92,-90},{112,-70}}))); BoundaryConditions.WeatherData.ReaderTMY3 weaDat1( diff --git a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/TerminalUnitScaling.mo b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/TerminalUnitScaling.mo index 989e7165b0a..d12c1ee69ea 100644 --- a/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/TerminalUnitScaling.mo +++ b/Buildings/Experimental/DHC/Loads/BaseClasses/Validation/TerminalUnitScaling.mo @@ -69,7 +69,7 @@ model TerminalUnitScaling final T_aLoaHea_nominal=T_aLoaHea_nominal) "Terminal unit with no multiplier" annotation (Placement(transformation(extent={{8,78},{32,102}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSet(k=293.15, y( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSet(k=293.15, y( final unit="K", displayUnit="degC")) "Temperature set point" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); Buildings.Experimental.DHC.Loads.BaseClasses.Validation.BaseClasses.FanCoil2PipeHeating terUniMul( @@ -92,7 +92,7 @@ model TerminalUnitScaling nPorts=1) "Heating water supply" annotation (Placement(transformation(extent={{-10,-10},{10,10}},rotation=0,origin={-50,-20}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( height=1.2*QHea_flow_nominal, duration=500) "Required heat flow rate" diff --git a/Buildings/Experimental/DHC/Loads/Combined/BaseClasses/PartialBuildingWithETS.mo b/Buildings/Experimental/DHC/Loads/Combined/BaseClasses/PartialBuildingWithETS.mo index 08a11791231..64898a225e3 100644 --- a/Buildings/Experimental/DHC/Loads/Combined/BaseClasses/PartialBuildingWithETS.mo +++ b/Buildings/Experimental/DHC/Loads/Combined/BaseClasses/PartialBuildingWithETS.mo @@ -72,16 +72,16 @@ model PartialBuildingWithETS rotation=0, origin={-120,90}))); // COMPONENTS - Buildings.Controls.OBC.CDL.Continuous.Line resTHeaWatSup + Buildings.Controls.OBC.CDL.Reals.Line resTHeaWatSup "HW supply temperature reset" annotation (Placement(transformation(extent={{-110,-50},{-90,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Zero" annotation (Placement(transformation(extent={{-180,-30},{-160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "One" annotation (Placement(transformation(extent={{-180,-70},{-160,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter mulPPumETS(u(final + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter mulPPumETS(u(final unit="W"), final k=facMul) if have_pum "Scaling" annotation (Placement(transformation(extent={{270,-10},{290,10}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput PPumETS( diff --git a/Buildings/Experimental/DHC/Loads/Combined/BuildingTimeSeriesWithETS.mo b/Buildings/Experimental/DHC/Loads/Combined/BuildingTimeSeriesWithETS.mo index 2bfa7a16542..60e44e1372d 100644 --- a/Buildings/Experimental/DHC/Loads/Combined/BuildingTimeSeriesWithETS.mo +++ b/Buildings/Experimental/DHC/Loads/Combined/BuildingTimeSeriesWithETS.mo @@ -56,17 +56,17 @@ model BuildingTimeSeriesWithETS extent={{-20,-20},{20,20}}, rotation=90, origin={-80,-120}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter loaHeaNor( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaHeaNor( k=1/QHea_flow_nominal) "Normalized heating load" annotation (Placement(transformation(extent={{-200,-110},{-180,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold enaHeaCoo[2](each t=1e-4) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold enaHeaCoo[2](each t=1e-4) "Threshold comparison to enable heating and cooling" annotation (Placement(transformation(extent={{-110,-130},{-90,-110}}))); Modelica.Blocks.Sources.BooleanConstant enaSHW( final k=true) if have_hotWat "SHW production enable signal" annotation (Placement(transformation(extent={{0,-130},{-20,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter loaCooNor(k=1/ + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaCooNor(k=1/ QCoo_flow_nominal) "Normalized cooling load" annotation (Placement(transformation(extent={{-200,-150},{-180,-130}}))); equation diff --git a/Buildings/Experimental/DHC/Loads/Combined/Examples/BuildingTimeSeriesWithETS.mo b/Buildings/Experimental/DHC/Loads/Combined/Examples/BuildingTimeSeriesWithETS.mo index bfb8b719b4d..16a9419f989 100644 --- a/Buildings/Experimental/DHC/Loads/Combined/Examples/BuildingTimeSeriesWithETS.mo +++ b/Buildings/Experimental/DHC/Loads/Combined/Examples/BuildingTimeSeriesWithETS.mo @@ -31,19 +31,19 @@ model BuildingTimeSeriesWithETS allowFlowReversalSer=true, filNam="modelica://Buildings/Resources/Data/Experimental/DHC/Loads/Examples/SwissOffice_20190916.mos") annotation (Placement(transformation(extent={{40,-20},{60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TColWat(k=bui.ets.TColWat_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TColWat(k=bui.ets.TColWat_nominal) "Cold water temperature" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THotWatSupSet(k=bui.ets.THotWatSup_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THotWatSupSet(k=bui.ets.THotWatSup_nominal) "Hot water supply temperature set point" annotation (Placement(transformation(extent={{-90,20},{-70,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(k=bui.TChiWatSup_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(k=bui.TChiWatSup_nominal) "Chilled water supply temperature set point" annotation (Placement(transformation(extent={{-90,60},{-70,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupMaxSet(k=bui.THeaWatSup_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupMaxSet(k=bui.THeaWatSup_nominal) "Heating water supply temperature set point - Maximum value" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupMinSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupMinSet( k(final unit="K", displayUnit="degC") = 301.15) "Heating water supply temperature set point - Minimum value" diff --git a/Buildings/Experimental/DHC/Loads/Steam/BaseClasses/ValveSelfActing.mo b/Buildings/Experimental/DHC/Loads/Steam/BaseClasses/ValveSelfActing.mo index c4d1633e28f..b33b8a24bb0 100644 --- a/Buildings/Experimental/DHC/Loads/Steam/BaseClasses/ValveSelfActing.mo +++ b/Buildings/Experimental/DHC/Loads/Steam/BaseClasses/ValveSelfActing.mo @@ -33,9 +33,9 @@ protected "Downstream pressure setpoint" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) "Zero" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dpReq "Calculating dp required" + Buildings.Controls.OBC.CDL.Reals.Subtract dpReq "Calculating dp required" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); equation diff --git a/Buildings/Experimental/DHC/Networks/BaseClasses/DifferenceEnthalpyFlowRate.mo b/Buildings/Experimental/DHC/Networks/BaseClasses/DifferenceEnthalpyFlowRate.mo index 13a2455e971..359730e1c10 100644 --- a/Buildings/Experimental/DHC/Networks/BaseClasses/DifferenceEnthalpyFlowRate.mo +++ b/Buildings/Experimental/DHC/Networks/BaseClasses/DifferenceEnthalpyFlowRate.mo @@ -68,7 +68,7 @@ model DifferenceEnthalpyFlowRate final h_out_start=h2_out_start) "Enthalpy flow rate of fluid stream 2" annotation (Placement(transformation(extent={{10,-70},{-10,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dif + Buildings.Controls.OBC.CDL.Reals.Subtract dif "Compute the difference" annotation (Placement(transformation(extent={{40,10},{60,30}}))); Modelica.Blocks.Continuous.Integrator int( diff --git a/Buildings/Experimental/DHC/Networks/Controls/MainPump.mo b/Buildings/Experimental/DHC/Networks/Controls/MainPump.mo index 8a11be152f3..fce51de6cf0 100644 --- a/Buildings/Experimental/DHC/Networks/Controls/MainPump.mo +++ b/Buildings/Experimental/DHC/Networks/Controls/MainPump.mo @@ -41,29 +41,29 @@ model MainPump "Main pump controller" Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(min=0, max=1, unit="1") "Pump control signal" annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin TMixMin( + Buildings.Controls.OBC.CDL.Reals.MultiMin TMixMin( final nin=nMix, y(final unit="K", displayUnit="degC")) "Minimum temperature at mixing points" annotation (Placement(transformation(extent={{-70,-30},{-50,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax TMixMax( + Buildings.Controls.OBC.CDL.Reals.MultiMax TMixMax( final nin=nMix, y(final unit="K", displayUnit="degC")) "Maximum temperature at mixing points" annotation (Placement(transformation(extent={{-70,10},{-50,30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum( + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum( nin=nSou, k=fill(1, nSou)) annotation (Placement(transformation(extent={{-50,-130},{-30,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTSou[nSou] + Buildings.Controls.OBC.CDL.Reals.Subtract dTSou[nSou] "Temperature differences over source" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter dTSou_nor(k=1/( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dTSou_nor(k=1/( sum(dTSou_nominal))) "Normalization of temperature difference over source" annotation (Placement(transformation(extent={{-20,-130},{0,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conShi( + Buildings.Controls.OBC.CDL.Reals.PID conShi( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, final k=k, Ti(displayUnit="min") = Ti, @@ -71,53 +71,53 @@ model MainPump "Main pump controller" final yMin=-1) "Controller to shift the min/max slopes" annotation (Placement(transformation(extent={{10,-110},{30,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Set point for source dT" annotation (Placement(transformation(extent={{-50,-90},{-30,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line uppCur "Upper curve" + Buildings.Controls.OBC.CDL.Reals.Line uppCur "Upper curve" annotation (Placement(transformation(extent={{30,10},{50,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(k=1) "Constant 1" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(k=1) "Constant 1" annotation (Placement(transformation(extent={{-70,70},{-50,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yMin(k=yPumMin) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yMin(k=yPumMin) "Minimum pump speed" annotation (Placement(transformation(extent={{-70,40},{-50,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMax_nominal(k=TMax) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMax_nominal(k=TMax) "Maximum temperature" annotation (Placement(transformation(extent={{-70,150},{-50,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Add TMax_upper( + Buildings.Controls.OBC.CDL.Reals.Add TMax_upper( y(final unit="K", displayUnit="degC")) "Upper value of upper slope after shifting it" annotation (Placement(transformation(extent={{-30,150},{-10,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Max sPos "Positive shift" + Buildings.Controls.OBC.CDL.Reals.Max sPos "Positive shift" annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Min sNeg "Negative shift" + Buildings.Controls.OBC.CDL.Reals.Min sNeg "Negative shift" annotation (Placement(transformation(extent={{60,-150},{80,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter TMax_lower( + Buildings.Controls.OBC.CDL.Reals.AddParameter TMax_lower( final p=-dTSlo, y(final unit="K", displayUnit="degC")) "Minimum temperatuer value of upper slope after shifting it" annotation (Placement(transformation(extent={{10,149},{30,171}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lowCur "Lower curve" + Buildings.Controls.OBC.CDL.Reals.Line lowCur "Lower curve" annotation (Placement(transformation(extent={{30,-30},{50,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMin_nominal(k=TMin) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMin_nominal(k=TMin) "Minimum temperature" annotation (Placement(transformation(extent={{-70,110},{-50,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Add TMin_lower( + Buildings.Controls.OBC.CDL.Reals.Add TMin_lower( y(unit="K", displayUnit="degC")) "Lower value of lower slope after shifting it" annotation (Placement(transformation(extent={{-30,110},{-10,130}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter TMin_upper( + Buildings.Controls.OBC.CDL.Reals.AddParameter TMin_upper( final p=dTSlo, y(final unit="K", displayUnit="degC")) "Maximum temperatuer value of lower slope after shifting it" annotation (Placement(transformation(extent={{10,110},{30,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Max ySetPum "Change in pump signal" + Buildings.Controls.OBC.CDL.Reals.Max ySetPum "Change in pump signal" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=-delta) "Gain factor" annotation (Placement(transformation(extent={{60,70},{80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=-delta) "Gain factor" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo index 176e1231fd7..e4dd0ccd5af 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/CoolingTowerLoop.mo @@ -94,19 +94,19 @@ block CoolingTowerLoop "Cooling tower loop control" "Cooling tower Start command" annotation (Placement(transformation(extent={{180, -140},{220,-100}}), iconTransformation(extent={{100,-80},{140, -40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTemCon "Compute CW deltaT" + Buildings.Controls.OBC.CDL.Reals.Subtract delTemCon "Compute CW deltaT" annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage mea(delta=5*60) + Buildings.Controls.OBC.CDL.Reals.MovingAverage mea(delta=5*60) "Moving mean" annotation (Placement(transformation(extent={{-130,30},{-110,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTem1 "Compute deltaT" + Buildings.Controls.OBC.CDL.Reals.Subtract delTem1 "Compute deltaT" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add lifPlu "Add target lift" + Buildings.Controls.OBC.CDL.Reals.Add lifPlu "Add target lift" annotation (Placement(transformation(extent={{-130,90},{-110,110}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter subApp(final p=- + Buildings.Controls.OBC.CDL.Reals.AddParameter subApp(final p=- dTHexCoo_nominal) "Substract HX approach" annotation (Placement(transformation(extent={{-70,60},{-50,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TSupSetUnb(y(unit="K", + Buildings.Controls.OBC.CDL.Reals.Switch TSupSetUnb(y(unit="K", displayUnit="degC")) "Compute tower supply temperature setpoint, unbounded" annotation ( Placement(transformation( @@ -119,22 +119,22 @@ block CoolingTowerLoop "Cooling tower loop control" annotation (Placement(transformation(extent={{-150,230},{-130,250}}))); Buildings.Controls.OBC.CDL.Integers.Equal isModRej "Heat rejection mode" annotation (Placement(transformation(extent={{-110,250},{-90,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setOth[2](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setOth[2](final k= TTanSet[:, 1] .- dTHexCoo_nominal) "Target setpoint in any mode other than heat rejection" annotation (Placement(transformation(extent={{-110,190},{-90,210}}))); Buildings.Controls.OBC.CDL.Routing.RealExtractor extSet(final nin=2) "Extract setpoint value based on current mode" annotation (Placement(transformation(extent={{-70,230},{-50,250}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratDes(final k=abs(1 + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter ratDes(final k=abs(1 /QChiWat_flow_nominal)) "Ratio to design capacity" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lif "Compute target chiller lift" + Buildings.Controls.OBC.CDL.Reals.Line lif "Compute target chiller lift" annotation (Placement(transformation(extent={{-110,130},{-90,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xLif[2](k={0.1,1}) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xLif[2](k={0.1,1}) "x-value for lift reset" annotation (Placement(transformation(extent={{-160,180},{-140,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yLif[2](final k={ + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yLif[2](final k={ dTLifChi_min,dTLifChi_nominal}) "y-value for lift reset" annotation (Placement(transformation(extent={{-160,120},{-140,140}}))); StagingPump staPum( @@ -144,7 +144,7 @@ block CoolingTowerLoop "Cooling tower loop control" yUp=0.8) "Stage pumps" annotation (Placement(transformation(extent={{100,50},{120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpFlo(t=0.025* + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cmpFlo(t=0.025* mConWatHexCoo_flow_nominal, h=0.025*mConWatHexCoo_flow_nominal/2) "Flow criterion to enable lead pump" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); @@ -154,7 +154,7 @@ block CoolingTowerLoop "Cooling tower loop control" Buildings.Controls.OBC.CDL.Logical.Timer timFlo1(t=5*60) "Timer for flow exceeding triggering limit" annotation (Placement(transformation(extent={{-130,-50},{-110,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmpOpe(t=0.99, h=0.005) + Buildings.Controls.OBC.CDL.Reals.LessThreshold cmpOpe(t=0.99, h=0.005) "Valve opening criterion to enable lead pump" annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); Buildings.Controls.OBC.CDL.Logical.Timer timOpe(t=60) @@ -172,14 +172,14 @@ block CoolingTowerLoop "Cooling tower loop control" annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); Buildings.Controls.OBC.CDL.Logical.Latch enaLea "Enable lead pump" annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTem2 "Compute deltaT" + Buildings.Controls.OBC.CDL.Reals.Subtract delTem2 "Compute deltaT" annotation (Placement(transformation(extent={{-160,-250},{-140,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTem3 "Compute deltaT" + Buildings.Controls.OBC.CDL.Reals.Subtract delTem3 "Compute deltaT" annotation (Placement(transformation(extent={{-160,-210},{-140,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(final p=-1) + Buildings.Controls.OBC.CDL.Reals.AddParameter addOff(final p=-1) "Add offset" annotation (Placement(transformation(extent={{-130,-250},{-110,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addApp(final p= + Buildings.Controls.OBC.CDL.Reals.AddParameter addApp(final p= dTHexCoo_nominal) "Add HX approach" annotation (Placement(transformation(extent={{-40,-210},{-20,-190}}))); EnergyTransferStations.Combined.Controls.PIDWithEnable ctlPum1( @@ -193,17 +193,17 @@ block CoolingTowerLoop "Cooling tower loop control" final reverseActing=false) "Pump control loop #1" annotation (Placement(transformation(extent={{-10,-250},{10,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Min minCtlPum "Minimum loop output" + Buildings.Controls.OBC.CDL.Reals.Min minCtlPum "Minimum loop output" annotation (Placement(transformation(extent={{30,-230},{50,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line pum "Pump speed command" + Buildings.Controls.OBC.CDL.Reals.Line pum "Pump speed command" annotation (Placement(transformation(extent={{120,-230},{140,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xPum[2](k={0,1}) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xPum[2](k={0,1}) "x-value for pump speed reset" annotation (Placement(transformation(extent={{90,-210},{110,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant" annotation (Placement(transformation(extent={{90,-260},{110,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yPumMin[nPumConWatCoo]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yPumMin[nPumConWatCoo]( final k=yPumConWatCoo_min) "Minimum pump speed" annotation (Placement(transformation(extent={{30,-260},{50,-240}}))); Buildings.Controls.OBC.CDL.Routing.RealExtractor extYPumMin(final nin= @@ -213,12 +213,12 @@ block CoolingTowerLoop "Cooling tower loop control" Modelica.Blocks.Sources.IntegerExpression nPumBou(y=max(1, staPum.nPumEna)) "Number of pumps commanded on, bounded by 1" annotation (Placement(transformation(extent={{30,-284},{50,-264}}))); - Buildings.Controls.OBC.CDL.Continuous.Line fanMax "Compute maximum fan speed" + Buildings.Controls.OBC.CDL.Reals.Line fanMax "Compute maximum fan speed" annotation (Placement(transformation(extent={{70,150},{90,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFan[2](k={0,0.5}) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFan[2](k={0,0.5}) "x-value for maximum fan speed reset" annotation (Placement(transformation(extent={{30,180},{50,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFan[2](final k={0.7,1.0}) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFan[2](final k={0.7,1.0}) "y-value for maximum fan speed reset" annotation (Placement(transformation(extent={{30,120},{50,140}}))); EnergyTransferStations.Combined.Controls.PIDWithEnable ctlFan( @@ -231,20 +231,20 @@ block CoolingTowerLoop "Cooling tower loop control" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={-60,-150}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setMax(k=25 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setMax(k=25 + 273.15) "Maximum setpoint" annotation (Placement(transformation(extent={{-70,190},{-50,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Min TSupSet( + Buildings.Controls.OBC.CDL.Reals.Min TSupSet( y(unit="K", displayUnit="degC")) "Compute tower supply temperature setpoint" annotation (Placement(transformation(extent={{-30,190},{-10,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line fan "Compute fan speed" + Buildings.Controls.OBC.CDL.Reals.Line fan "Compute fan speed" annotation (Placement(transformation(extent={{150,-70},{170,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFan1 + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFan1 [2](k={0,1}) "x-value for fan speed reset" annotation (Placement(transformation(extent={{110,-50},{130,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFan1(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFan1(final k=0) "y-value for fan speed reset" annotation (Placement(transformation(extent={{110,-90},{130,-70}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo index 9685fe6194a..1cd733cbc7e 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/DirectHeatRecovery.mo @@ -82,32 +82,32 @@ block DirectHeatRecovery each final y_neutral=y_neutral) "CHW supply temperature control" annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line chiFloRes[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line chiFloRes[nChiHea] "Chiller evaporator flow reset" annotation (Placement(transformation(extent={{40,70},{60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin min(nin=nChiHea) + Buildings.Controls.OBC.CDL.Reals.MultiMin min(nin=nChiHea) "Minimum evaporator flow setpoint" annotation (Placement(transformation(extent={{90,70},{110,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo[nChiHea,2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFlo[nChiHea,2]( final k=fill({0,0.33}, nChiHea)) "x-value for flow reset" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo[nChiHea,2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFlo[nChiHea,2]( final k=fill(1.2 .* {mChiWatChi_flow_min,mChiWatChi_flow_nominal}, nChiHea)) "y-value for flow reset" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line chiHeaFloRes[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line chiHeaFloRes[nChiHea] "HRC evaporator flow reset" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin min1(nin=nChiHea) + Buildings.Controls.OBC.CDL.Reals.MultiMin min1(nin=nChiHea) "Minimum evaporator flow setpoint" annotation (Placement(transformation(extent={{90,-10},{110,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo1 + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFlo1 [nChiHea, 2](final k= fill({0.33,0.67}, nChiHea)) "x-value for flow reset" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo1 + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFlo1 [nChiHea, 2](final k= fill(1.2 .* {mChiWatChiHea_flow_nominal,mChiWatChiHea_flow_min}, nChiHea)) "y-value for flow reset" @@ -116,19 +116,19 @@ block DirectHeatRecovery unit="kg/s") "HRC evaporator flow setpoint" annotation (Placement( transformation(extent={{140,-20},{180,20}}), iconTransformation(extent={{100,-20}, {140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line chiHeaConTemRes[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line chiHeaConTemRes[nChiHea] "HRC condenser entering temperature reset" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo2 + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFlo2 [nChiHea, 2](final k= fill({0.67,1.0}, nChiHea)) "x-value for flow reset" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(final p=0.5) + Buildings.Controls.OBC.CDL.Reals.AddParameter addOff(final p=0.5) "Add offset" annotation (Placement(transformation(extent={{-90,-90},{-70,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff1(final p=-15) + Buildings.Controls.OBC.CDL.Reals.AddParameter addOff1(final p=-15) "Add offset" annotation (Placement(transformation(extent={{-90,-130},{-70,-110}}))); Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep1(final nout= @@ -144,7 +144,7 @@ block DirectHeatRecovery i].y then i else 1 for i in 1:nChiHea})) "Highest index of HRC in direct HR (defaulted to 1 if all false)" annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage mea(delta=5*60) + Buildings.Controls.OBC.CDL.Reals.MovingAverage mea(delta=5*60) "Moving average" annotation (Placement(transformation(extent={{-130,-90},{-110,-70}}))); equation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo index 07425bba1bf..7d7be080c35 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ModeCondenserLoop.mo @@ -58,7 +58,7 @@ block ModeCondenserLoop Modelica.Blocks.Sources.RealExpression ratFraChaTanVal[5](final y=ratFraChaTan) "Rate of change of tank charge fraction" annotation (Placement(transformation(extent={{-150,-50},{-130,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr[5]( + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr[5]( final t=ratFraChaTanLim, each h=1E-4) "Compare rate of change to threshold" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); @@ -71,13 +71,13 @@ block ModeCondenserLoop Modelica.Blocks.Sources.RealExpression varCriWarUp(y=1 - fraChaTan.y) "Compute variable used to evaluate warmup criterion" annotation (Placement(transformation(extent={{-150,-90},{-130,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater criWarUp(h=1e-3) + Buildings.Controls.OBC.CDL.Reals.Greater criWarUp(h=1e-3) "Enable criterion based on time to warmup" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); Buildings.Controls.OBC.CDL.Logical.And criWarUpAndChaLow "Both enable criteria met" annotation (Placement(transformation(extent={{-70,-90},{-50,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold criChaLow(t=0.97, h=1e-3) + Buildings.Controls.OBC.CDL.Reals.LessThreshold criChaLow(t=0.97, h=1e-3) "Low charge fraction criterion" annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); Buildings.Controls.OBC.CDL.Logical.Not enaFal[6] @@ -89,11 +89,11 @@ block ModeCondenserLoop Buildings.Controls.OBC.CDL.Logical.Timer tim2(t=15*60) "None of the enabling conditions is true for given time" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criFlo(t=1E-3* + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold criFlo(t=1E-3* mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) "Disable criterion based on flow rate" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criTem(t=max(TTanSet) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold criTem(t=max(TTanSet) - 2, h=1e-3) "Disable criterion based on temperature" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); @@ -127,7 +127,7 @@ block ModeCondenserLoop "CW mass flow rate through secondary (plant) side of HX" annotation (Placement(transformation(extent={{-240,100},{-200,140}}), iconTransformation(extent={{-140,60},{-100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold criFlo1(t=-1E-3* + Buildings.Controls.OBC.CDL.Reals.LessThreshold criFlo1(t=-1E-3* mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); Buildings.Controls.OBC.CDL.Logical.Timer timCriFlo1(t=60) @@ -167,7 +167,7 @@ block ModeCondenserLoop annotation (Placement(transformation(extent={{50,100},{70,120}}))); Buildings.Controls.OBC.CDL.Logical.Not notDis1 "Not disabled" annotation (Placement(transformation(extent={{10,84},{30,104}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage fraChaTan(delta=5*60) + Buildings.Controls.OBC.CDL.Reals.MovingAverage fraChaTan(delta=5*60) "Moving mean of tank charge fraction used for control logic" annotation (Placement(transformation(extent={{-150,-130},{-130,-110}}))); Modelica.Blocks.Sources.RealExpression fraChaTanVal(y=fraChaTanIns) @@ -189,28 +189,28 @@ block ModeCondenserLoop displayUnit="degC") "CWC return temperature" annotation (Placement(transformation(extent={{-240,-220},{-200,-180}}), iconTransformation(extent={{-140,-100},{-100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTem "Compute Delta-T" + Buildings.Controls.OBC.CDL.Reals.Subtract delTem "Compute Delta-T" annotation (Placement(transformation(extent={{-170,-200},{-150,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply floOutHeaPum + Buildings.Controls.OBC.CDL.Reals.Multiply floOutHeaPum "Compute HP heat flow rate output " annotation (Placement(transformation(extent={{-130,-190},{-110,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter floCap(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter floCap(final k= cp_default) "Compute capacity flow rate" annotation (Placement(transformation(extent={{-188,-170},{-168,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract delTem1 "Compute Delta-T" + Buildings.Controls.OBC.CDL.Reals.Subtract delTem1 "Compute Delta-T" annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter floCap1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter floCap1(final k= cp_default) "Compute capacity flow rate" annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply floChaTan + Buildings.Controls.OBC.CDL.Reals.Multiply floChaTan "Compute tank charge rate" annotation (Placement(transformation(extent={{-150,-10},{-130,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract ratHeaRec + Buildings.Controls.OBC.CDL.Reals.Subtract ratHeaRec "Compute heat recovery rate" annotation (Placement(transformation(extent={{-90,-190},{-70,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criRatHeaRec(final t= + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold criRatHeaRec(final t= 1E-4*(mConWatHexCoo_flow_nominal*(TTanSet[1, 2] - TTanSet[1, 1])*4184 - QHeaPum_flow_nominal), final h=1E-4*(mConWatHexCoo_flow_nominal*( TTanSet[1, 2] - TTanSet[1, 1])*4184 - QHeaPum_flow_nominal)/2) diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo index 377c8958d66..c58daa98591 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPlant.mo @@ -129,19 +129,19 @@ block StagingPlant rotation=0, origin={120,-140}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve(delta=300) "Moving average" annotation (Placement(transformation(extent={{-150,110},{-130,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply loaChiWat + Buildings.Controls.OBC.CDL.Reals.Multiply loaChiWat "Compute total chiller load (>0)" annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTChiWatPos + Buildings.Controls.OBC.CDL.Reals.Subtract dTChiWatPos "Compute deltaT (>0)" annotation (Placement(transformation(extent={{-210,70},{-190,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply loaHeaWat + Buildings.Controls.OBC.CDL.Reals.Multiply loaHeaWat "Compute total chiller load" annotation (Placement(transformation(extent={{-180,-130},{-160,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTHeaWat "Compute deltaT" + Buildings.Controls.OBC.CDL.Reals.Subtract dTHeaWat "Compute deltaT" annotation (Placement(transformation(extent={{-220,-150},{-200,-130}}))); Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep(final nout= nChi) "Replicate" @@ -150,13 +150,13 @@ block StagingPlant t={i for i in 1:nChi}) "Compute chiller On/Off command from number of units to be commanded On" annotation (Placement(transformation(extent={{210,110},{230,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter timCp(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter timCp(final k= cp_default) "Scale" annotation (Placement(transformation(extent={{-210,130},{-190,150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter timCp1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter timCp1(final k= cp_default) "Scale" annotation (Placement(transformation(extent={{-220,-90},{-200,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve1(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve1(delta=300) "Moving average" annotation (Placement(transformation(extent={{-150,-130},{-130,-110}}))); Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep5(final nout= @@ -197,16 +197,16 @@ block StagingPlant rotation=0, origin={-30,-40}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errTChiWatSup + Buildings.Controls.OBC.CDL.Reals.Subtract errTChiWatSup "Compute tracking error" annotation (Placement(transformation(extent={{-200,200},{-180,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errDpChiWat + Buildings.Controls.OBC.CDL.Reals.Subtract errDpChiWat "Compute tracking error" annotation (Placement(transformation(extent={{-200,250},{-180,270}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmpErrLim(t=-1, h=1E-4) + Buildings.Controls.OBC.CDL.Reals.LessThreshold cmpErrLim(t=-1, h=1E-4) "Check tracking error limit" annotation (Placement(transformation(extent={{-170,200},{-150,220}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpErrLim1(t=1.5E4, h=1E-1) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cmpErrLim1(t=1.5E4, h=1E-1) "Check tracking error limit" annotation (Placement(transformation(extent={{-170,250},{-150,270}}))); Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim(t=15*60) @@ -231,7 +231,7 @@ block StagingPlant - nChi)/nChiHea*QChiWatCasCoo_flow_nominal))) "Total capacity at current stage (>0) times stage-up PLR limit " annotation (Placement(transformation(extent={{-120,90},{-100,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater cmpOPLRLimUp(h=-1E-4*( + Buildings.Controls.OBC.CDL.Reals.Greater cmpOPLRLimUp(h=-1E-4*( QChiWatChi_flow_nominal + QChiWatCasCoo_flow_nominal_approx)/2) "Check OPLR limit" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); @@ -254,7 +254,7 @@ block StagingPlant /nChiHea*QHeaWat_flow_nominal) "Total capacity at current stage times stage-up PLR limit " annotation (Placement(transformation(extent={{-120,-150},{-100,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater cmpOPLRLimUp1(h=1E-1) + Buildings.Controls.OBC.CDL.Reals.Greater cmpOPLRLimUp1(h=1E-1) "Check OPLR limit" annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim1(t=15*60) @@ -266,7 +266,7 @@ block StagingPlant staHea.preIdxSta - 1)/nChiHea*QHeaWat_flow_nominal) "Total capacity at next lower stage times stage-down PLR limit " annotation (Placement(transformation(extent={{-120,-178},{-100,-158}}))); - Buildings.Controls.OBC.CDL.Continuous.Less cmpOPLRLimDow(h=1E-1) + Buildings.Controls.OBC.CDL.Reals.Less cmpOPLRLimDow(h=1E-1) "Check OPLR limit" annotation (Placement(transformation(extent={{-80,-170},{-60,-150}}))); Buildings.Controls.OBC.CDL.Logical.Timer timOPLRExcLim2(t=15*60) @@ -277,7 +277,7 @@ block StagingPlant 0, staCoo.preIdxSta - 1 - nChi)/nChiHea*QChiWatCasCoo_flow_nominal))) "Total capacity at next lower stage (>0) times stage-down PLR limit " annotation (Placement(transformation(extent={{-120,62},{-100,82}}))); - Buildings.Controls.OBC.CDL.Continuous.Less cmpOPLRLimDow1(h=-1E-4*( + Buildings.Controls.OBC.CDL.Reals.Less cmpOPLRLimDow1(h=-1E-4*( QChiWatChi_flow_nominal + QChiWatCasCoo_flow_nominal_approx)/2) "Check OPLR limit" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); @@ -290,17 +290,17 @@ block StagingPlant Buildings.Controls.OBC.CDL.Logical.And dowAndNotFail "No stage up failsafe condition and efficiency condition to stage down" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errTChiWatSup1 + Buildings.Controls.OBC.CDL.Reals.Subtract errTChiWatSup1 "Compute tracking error" annotation (Placement(transformation(extent={{-200,-230},{-180,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract errDpHeaWat + Buildings.Controls.OBC.CDL.Reals.Subtract errDpHeaWat "Compute tracking error" annotation (Placement(transformation(extent={{-200,-290},{-180,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cmpErrLim2(t=+1, h=1E-4) "Check tracking error limit" annotation (Placement(transformation(extent={{-170,-230},{-150,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmpErrLim3(t=1.5E4, h=1E-1) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cmpErrLim3(t=1.5E4, h=1E-1) "Check tracking error limit" annotation (Placement(transformation(extent={{-170,-290},{-150,-270}}))); Buildings.Controls.OBC.CDL.Logical.Timer timErrExcLim2(t=15*60) diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo index 32f55d9d736..21727bc49e8 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/StagingPump.mo @@ -37,21 +37,21 @@ block StagingPump "Pump staging" transformation(extent={{200,-20},{240,20}}), iconTransformation(extent={{100,40}, {140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold cmp(final t=yUp, h=1e-3) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold cmp(final t=yUp, h=1e-3) "Compare" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); Buildings.Controls.OBC.CDL.Logical.Timer timSpe(t=5*60) "True delay" annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratFlo( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter ratFlo( final k=1/m_flow_nominal) if have_flowCriterion "Ratio of current flow rate to design value" annotation (Placement(transformation(extent={{-148,70},{-128,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater cmp2(h=1e-3) + Buildings.Controls.OBC.CDL.Reals.Greater cmp2(h=1e-3) if have_flowCriterion "Compare" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addOff(p=-0.03) + Buildings.Controls.OBC.CDL.Reals.AddParameter addOff(p=-0.03) if have_flowCriterion "Add offset" annotation (Placement(transformation(extent={{-80,130},{-100,150}}))); @@ -62,7 +62,7 @@ block StagingPump "Pump staging" Buildings.Controls.OBC.CDL.Logical.Or up "Check if flow or speed criterion passed for staging up" annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Less cmp3(h=1e-3) + Buildings.Controls.OBC.CDL.Reals.Less cmp3(h=1e-3) if have_flowCriterion "Compare" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); @@ -70,7 +70,7 @@ block StagingPump "Pump staging" if have_flowCriterion "Check if true for a given time" annotation (Placement(transformation(extent={{-72,50},{-52,70}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold cmp4(final t=yDow, h=1e-3) + Buildings.Controls.OBC.CDL.Reals.LessThreshold cmp4(final t=yDow, h=1e-3) "Compare" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); Buildings.Controls.OBC.CDL.Logical.Timer timSpe1(t=5*60) "True delay" @@ -78,7 +78,7 @@ block StagingPump "Pump staging" Buildings.Controls.OBC.CDL.Logical.Or dow "Check if flow or speed criterion passed for staging down" annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter ratOpeDsg( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter ratOpeDsg( final k=1/nPum) "Ratio of number of operating pumps to number of operating pumps at design conditions" annotation (Placement(transformation(extent={{-40,130},{-60,150}}))); @@ -95,7 +95,7 @@ block StagingPump "Pump staging" annotation (Placement(transformation(extent={{30,-10},{50,10}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal cvtInt "Convert" annotation (Placement(transformation(extent={{50,130},{30,150}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addOffLowSta( + Buildings.Controls.OBC.CDL.Reals.AddParameter addOffLowSta( final p=-1/nPum) if have_flowCriterion "Add offset for lower stage" annotation (Placement(transformation(extent={{-150,30},{-130,50}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo index 22f5b1dea22..e80a6af558a 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/TankCycle.mo @@ -29,18 +29,18 @@ block TankCycle "Block that determines the tank cycle flag" annotation (Placement(transformation(extent={{160,-20},{200,20}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criTem1[nTTan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold criTem1[nTTan]( each t=sum(TTanSet[2])/2, each h=1E-4) "Temperature criterion for first tank cycle" annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); Buildings.Controls.OBC.CDL.Logical.MultiAnd allCriTem1(final nin=nTTan) "All temperature criteria met" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold criFlo1(final t=1E-3* + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold criFlo1(final t=1E-3* mConWatHexCoo_flow_nominal, h=1E-3*mConWatHexCoo_flow_nominal/2) "Flow criterion for first tank cycle" annotation (Placement(transformation(extent={{-150,110},{-130,130}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold criTem2[nTTan](each t=sum(TTanSet[1])/2, each h=1E-4) + Buildings.Controls.OBC.CDL.Reals.LessThreshold criTem2[nTTan](each t=sum(TTanSet[1])/2, each h=1E-4) "Temperature criterion for first tank cycle" annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); Buildings.Controls.OBC.CDL.Logical.MultiAnd allCriTem2(final nin=nTTan) diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo index 34f299cac48..f5cd54c4c52 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPlant.mo @@ -43,7 +43,7 @@ model StagingPlant "Validation of plant staging block" QChiWatCasCoo_flow_nominal_approx=QChiWatCasCoo_flow_nominal, final QHeaWat_flow_nominal=QHeaWat_flow_nominal) "Chiller staging block" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ratFlo(table=[0,0,0; 1, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(table=[0,0,0; 1, 0,0; 4,0.3,0.1; 5,1,0.1; 10,0.1,0.1; 13,1,0.3; 16,0.3,1;20,0.1,0.1; 24,0.1,0.3; 25, 0.1,1; 30,0,0], timeScale=1000) "Source signal" @@ -51,25 +51,25 @@ model StagingPlant "Validation of plant staging block" Modelica.Blocks.Sources.BooleanExpression u1(y=time > 0) "Enable signal" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(k=7 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(k=7 + 273.15) "Source signal" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatPriRet(k=12 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatPriRet(k=12 + 273.15) "Source signal" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(k=60 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(k=60 + 273.15) "Source signal" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatPriRet(k=50 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatPriRet(k=50 + 273.15) "Source signal" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter sca(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter sca(final k= mChiWat_flow_nominal) "Scale signal" annotation (Placement(transformation(extent={{12,30},{32,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter sca1(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter sca1(final k= mHeaWat_flow_nominal) "Scale signal" annotation (Placement(transformation(extent={{12,-10},{32,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpSet(k=20E4) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpSet(k=20E4) "Source signal" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); equation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo index e8237bfecae..73c5bd8ff98 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/Validation/StagingPump.mo @@ -15,7 +15,7 @@ model StagingPump "Validation of pump staging block" parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1 annotation(Dialog(group="Nominal condition")); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable floSpe( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable floSpe( table=[ 0,0,0; 1,0,0; @@ -31,10 +31,10 @@ model StagingPump "Validation of pump staging block" final m_flow_nominal=m_flow_nominal) "Pump staging block - Detailed version" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yVal(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yVal(k=1) "Source signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe(t=0.1, + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe(t=0.1, h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); equation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo index b6ab7a2c2a1..2515e8a6f23 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/BaseClasses/ValveCondenserEvaporator.mo @@ -447,16 +447,16 @@ block ValveCondenserEvaporator extent={{-10,-10},{10,10}}, rotation=0, origin={-110,-200}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe[nChiHea](each t=0.1, + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe[nChiHea](each t=0.1, each h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{190,-90},{170,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe1[nChiHea](each t= + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe1[nChiHea](each t= 0.1, each h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{190,-130},{170,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe2[nChi](each t=0.1, + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe2[nChi](each t=0.1, each h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{190,-30},{170,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe3[nChi](each t=0.1, + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe3[nChi](each t=0.1, each h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{150,-50},{130,-30}}))); Buildings.Controls.OBC.CDL.Logical.And cooOrDirAndOnAndOpe[nChiHea] @@ -567,17 +567,17 @@ block ValveCondenserEvaporator Modelica.Blocks.Sources.IntegerExpression idxChiHea[nChiHea](final y={i for i in 1:nChiHea}) "HRC index" annotation (Placement(transformation(extent={{-50,-386},{-30,-366}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch selCtl[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch selCtl[nChiHea] "Select control signal" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={70,-400}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer[nChiHea](each final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer[nChiHea](each final k=0) "Constant" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={30,-420}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Max max1[nChiHea] "Take into account entering CW temperature control in direct HR mode" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -605,7 +605,7 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Routing.RealExtractor TConWatEvaLvgSet(final nin=2) "Extract value at given index" annotation (Placement(transformation(extent={{-170,50},{-150,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaLvgSetCst[2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatEvaLvgSetCst[2]( final k=TTanSet[:, 1]) "HRC evaporator leaving CW temperature setpoint" annotation (Placement(transformation( @@ -616,27 +616,27 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep6(final nout= nChiHea) "Replicate" annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line valConWatEvaMix[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line valConWatEvaMix[nChiHea] "Mixing valve opening reset: 1 means no bypass flow" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xVal[nChiHea,2](final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xVal[nChiHea,2](final k=fill({0,0.5}, nChiHea)) "x-value for mixing valve opening reset" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yVal[nChiHea,2](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yVal[nChiHea,2](final k= fill({0,1}, nChiHea)) "y-value for mixing valve opening reset: 1 means no bypass flow" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Line floEva[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line floEva[nChiHea] "HRC evaporator flow reset when On AND cascading heating" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFlo[nChiHea,2](final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFlo[nChiHea,2](final k=fill({0.5,1}, nChiHea)) "x-value for evaporator flow reset" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFlo[nChiHea,2](final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFlo[nChiHea,2](final k=fill({mChiWatChiHea_flow_min,mChiWatChiHea_flow_nominal}, nChiHea)) "y-value for evaporator flow reset" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch selFloSet[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch selFloSet[nChiHea] "Select HRC evaporator flow setpoint based on operating mode" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); EnergyTransferStations.Combined.Controls.PIDWithEnable ctlTConWatEvaEnt( @@ -657,19 +657,19 @@ block ValveCondenserEvaporator extent={{-10,-10},{10,10}}, rotation=0, origin={-50,-500}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaEntSet(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatEvaEntSet(final k= max(TTanSet)) "HRC evaporator entering CW temperature setpoint" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-50,-460}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin mulMin(nin=nChiHea+1) + Buildings.Controls.OBC.CDL.Reals.MultiMin mulMin(nin=nChiHea+1) "Combine outputs from evaporator entering and leaving temperature control" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={210,-440}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatConRetSetCst[2](final + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatConRetSetCst[2](final k=TTanSet[:, 2]) "CW condenser loop return temperature setpoint" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -696,23 +696,23 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Integers.Sources.Constant chaAss(final k=Buildings.Experimental.DHC.Plants.Combined.Controls.ModeCondenserLoop.chargeAssist) "Charge assist mode index" annotation (Placement(transformation(extent={{-210,150},{-190,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Line floCon[nChi + nChiHea] + Buildings.Controls.OBC.CDL.Reals.Line floCon[nChi + nChiHea] "Condenser flow reset (normalized output)" annotation (Placement(transformation(extent={{130,190},{150,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant xFloCon[nChi + nChiHea, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant xFloCon[nChi + nChiHea, 2](final k=fill({0,1}, nChi + nChiHea)) "x-value for flow reset" annotation (Placement(transformation(extent={{60,210},{80,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFloCon[nChi + nChiHea, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFloCon[nChi + nChiHea, 2](final k=fill({0.1,1}, nChi + nChiHea)) "y-value for condenser flow reset" annotation (Placement(transformation(extent={{60,170},{80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaFloConChi[nChi]( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter scaFloConChi[nChi]( each final k=mConWatChi_flow_nominal) "Scale flow reset signal" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={50,360}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaFloConChiHea[nChiHea]( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter scaFloConChiHea[nChiHea]( each final k=mConWatChiHea_flow_nominal) "Scale flow reset signal" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -747,19 +747,19 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep11(final nout=nChi + nChiHea) "Replicate" annotation (Placement(transformation(extent={{-50,170},{-30,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one[nChi + nChiHea]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one[nChi + nChiHea]( each final k=1) "Constant" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-40,220}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFloSet[nChi + nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch swiFloSet[nChi + nChiHea] "Switch condenser flow setpoint based on condenser loop operating mode" annotation (Placement(transformation(extent={{30,190},{50,210}}))); Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep12(final nout=nChi + nChiHea) "Replicate" annotation (Placement(transformation(extent={{-10,190},{10,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFloSet1[nChi + nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch swiFloSet1[nChi + nChiHea] "Switch condenser flow setpoint based on condenser loop operating mode" annotation (Placement(transformation(extent={{-10,230},{10,250}}))); EnergyTransferStations.Combined.Controls.PIDWithEnable valChiWatMinByp[nChi + @@ -781,32 +781,32 @@ block ValveCondenserEvaporator each final y_reset=0, each final y_neutral=0) "HW minimum flow bypass valve control" annotation (Placement(transformation(extent={{170,410},{190,430}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floChiWatMin[nChi + + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floChiWatMin[nChi + nChiHea](final k=1.1*cat( 1, fill(mChiWatChi_flow_min, nChi), fill(mChiWatChiHea_flow_min, nChiHea))) "Minimum flow setpoint" annotation (Placement(transformation(extent={{100,450},{120,470}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floHeaWatMin[nChiHea](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floHeaWatMin[nChiHea](final k= 1.1*fill(mHeaWatChiHea_flow_min, nChiHea)) "Minimum flow setpoint" annotation (Placement(transformation(extent={{100,410},{120,430}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax max2(nin=nChi + nChiHea) + Buildings.Controls.OBC.CDL.Reals.MultiMax max2(nin=nChi + nChiHea) "Maximum control signal" annotation (Placement(transformation(extent={{200,450},{220,470}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax max3(nin=nChiHea) + Buildings.Controls.OBC.CDL.Reals.MultiMax max3(nin=nChiHea) "Maximum control signal" annotation (Placement(transformation(extent={{200,410},{220,430}}))); Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator rep7(final nout=nChi) "Replicate" annotation (Placement(transformation(extent={{-150,370},{-130,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi[nChi] + Buildings.Controls.OBC.CDL.Reals.Switch swi[nChi] "Condition to enable evaporator flow control loop" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={0,500}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1[nChi](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1[nChi](final k= fill(0, nChi)) "Constant" annotation (Placement(transformation(extent={{-70,490},{-50,510}}))); Buildings.Controls.OBC.CDL.Logical.Not noHeaAndCooAndOn @@ -825,25 +825,25 @@ block ValveCondenserEvaporator rep8(final nout=nChi) "Replicate" annotation (Placement(transformation(extent={{-150,450},{-130,470}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1[nChi] + Buildings.Controls.OBC.CDL.Reals.Switch swi1[nChi] "Condition to enable evaporator flow control loop" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-60,470}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yBalChi[nChi](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yBalChi[nChi](final k= fill(yBalEvaChi, nChi)) "Constant" annotation (Placement(transformation(extent={{-150,490},{-130,510}}))); Buildings.Controls.OBC.CDL.Logical.Not fulOpe[nChi] "Condition to switch to fixed full opening" annotation (Placement(transformation(extent={{-110,430},{-90,450}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2[nChi] + Buildings.Controls.OBC.CDL.Reals.Switch swi2[nChi] "Condition to enable evaporator flow control loop" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-60,440}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one1[nChi](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one1[nChi](final k= fill(1, nChi)) "Constant" annotation (Placement(transformation(extent={{-110,490},{-90,510}}))); Buildings.Controls.OBC.CDL.Logical.And cooAndOn[nChiHea] @@ -852,10 +852,10 @@ block ValveCondenserEvaporator extent={{-10,-10},{10,10}}, rotation=0, origin={-170,-60}))); - Buildings.Controls.OBC.CDL.Continuous.Switch selValPos[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch selValPos[nChiHea] "Select HRC evaporator isolation valve command signal" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yBalChiHea[nChiHea]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yBalChiHea[nChiHea]( final k=fill(yBalEvaChiHea, nChiHea)) "Constant" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); Buildings.Controls.OBC.CDL.Logical.MultiOr anyCooOrDirAndOn(nin=nChiHea) @@ -870,7 +870,7 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nChiHea] "Convert" annotation (Placement(transformation(extent={{20,-110},{40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max4[nChiHea] "Convert" + Buildings.Controls.OBC.CDL.Reals.Max max4[nChiHea] "Convert" annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput yValConWatByp(final unit="1") "CW chiller bypass valve control signal" annotation (Placement( @@ -885,15 +885,15 @@ block ValveCondenserEvaporator Buildings.Controls.OBC.CDL.Logical.MultiAnd allCloAndChaAndEna(nin=nChi+2) "Check if all valves closed AND Charge Assist mode is active" annotation (Placement(transformation(extent={{40,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaCtlValConWatByp + Buildings.Controls.OBC.CDL.Reals.Switch enaCtlValConWatByp "Enable CW bypass valve control" annotation (Placement(transformation(extent={{170,90},{190,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer2(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer2(final k=0) "Constant" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={140,80}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe4(t=0.1, h=5E-2) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe4(t=0.1, h=5E-2) "Check if valve open" annotation (Placement(transformation(extent={{190,130},{170,150}}))); Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooOrHea diff --git a/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo b/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo index 2913fa12c58..80d71654e5d 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Controls/Controller.mo @@ -8,7 +8,7 @@ block Controller "Plant controller" Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cvtValBypTan "Convert DO to AO" annotation (Placement(transformation(extent={{-40,-290},{-20,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TChiHeaSupSet[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch TChiHeaSupSet[nChiHea] "Switch supply temperature setpoint" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); BaseClasses.StagingPump staPumChiWat( @@ -63,10 +63,10 @@ block Controller "Plant controller" final m_flow_nominal=mConWatEva_flow_nominal) "CW pump staging" annotation (Placement(transformation(extent={{120,-190},{140,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpConNom(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpConNom(final k= dpConWatConSet_max) "Constant" annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpEvaNom(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpEvaNom(final k= dpConWatEvaSet_max) "Constant" annotation (Placement(transformation(extent={{160,-190},{180,-170}}))); BaseClasses.StagingPlant staPla( @@ -108,7 +108,7 @@ block Controller "Plant controller" Buildings.Controls.OBC.CDL.Logical.And assAndPum "Charge assist mode and any CW pump On" annotation (Placement(transformation(extent={{186,-210},{206,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaPumSetVal[2]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaPumSetVal[2]( final k={max(TTanSet[i]) + 3 for i in 1:2}) "HP supply temperature setpoint for each tank cycle" annotation (Placement(transformation(extent={{-170,-230},{-150,-210}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo b/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo index a956a3e72a0..b69b583cc96 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Examples/AllElectricCWStorage.mo @@ -100,19 +100,19 @@ model AllElectricCWStorage "CHW and HW plant" annotation (Placement(transformation(extent={{-30,-30},{30,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, y(final unit="K", displayUnit="degC")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, y(final unit="K", displayUnit="degC")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-190,-10},{-170,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpHeaWatSet_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpHeaWatSet_max( k=pla.dpHeaWatSet_max, y(final unit="Pa")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-190,-70},{-170,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpChiWatSet_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet_max( k=pla.dpChiWatSet_max, y(final unit="Pa")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); @@ -125,7 +125,7 @@ model AllElectricCWStorage rotation=0, origin={-210,120}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet[2](each k=pla.TChiWatRet_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRet[2](each k=pla.TChiWatRet_nominal) "Source signal for CHW return temperature" annotation (Placement(transformation(extent={{-190,-110},{-170,-90}}))); Loads.Heating.BuildingTimeSeriesWithETS loaHea[2]( @@ -139,7 +139,7 @@ model AllElectricCWStorage each bui(w_aLoaCoo_nominal=0.015)) "Building cooling load" annotation (Placement(transformation(extent={{10,-130},{-10,-110}}))); // dpCheVal_nominal to avoid freezing in building waterr supply due to problem of temperature drop in Dymola - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet[2](each k=pla.THeaWatRet_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatRet[2](each k=pla.THeaWatRet_nominal) "Source signal for HW return temperature" annotation (Placement(transformation(extent={{-190,40},{-170,60}}))); Buildings.Controls.OBC.CDL.Logical.Not @@ -148,7 +148,7 @@ model AllElectricCWStorage Buildings.Controls.OBC.CDL.Logical.Timer tim(t=3600) annotation (Placement(transformation(extent={{-104,154},{-84,174}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold offHea(t=1e-4) + Buildings.Controls.OBC.CDL.Reals.LessThreshold offHea(t=1e-4) "Threshold comparison to disable the plant" annotation (Placement(transformation(extent={{-144,154},{-124,174}}))); Modelica.Blocks.Math.Gain norQFloHea(k=1/sum(loaHea.QHea_flow_nominal)) @@ -161,7 +161,7 @@ model AllElectricCWStorage Buildings.Controls.OBC.CDL.Logical.Timer tim1(t=3600) annotation (Placement(transformation(extent={{-66,-190},{-46,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold offCoo1(t=1e-4) + Buildings.Controls.OBC.CDL.Reals.LessThreshold offCoo1(t=1e-4) "Threshold comparison to disable the plant" annotation (Placement(transformation(extent={{-106,-190},{-86,-170}}))); Modelica.Blocks.Math.Gain norQFloCoo(k=1/sum(loaCoo.QCoo_flow_nominal)) diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo index 759a76f67c2..b8c9638ff0e 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/MultipleCommands.mo @@ -26,16 +26,16 @@ block MultipleCommands Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nUni] "Convert to real" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum(nin=nUni) + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum(nin=nUni) "Total" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.5) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.5) "Returns true if at least one unit is commanded on" annotation (Placement(transformation(extent={{70,50},{90,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max1 + Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum value" annotation (Placement(transformation(extent={{70,-70},{90,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one" annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo index 0fd70808ea1..003dad5d50d 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/BaseClasses/PartialMultiplePumps.mo @@ -110,17 +110,17 @@ partial model PartialMultiplePumps annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=0, origin={10,100}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mul "Compute total power" + Buildings.Controls.OBC.CDL.Reals.Multiply mul "Compute total power" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply inp + Buildings.Controls.OBC.CDL.Reals.Multiply inp "Compute pump input signal" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, origin={0,40}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cst + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cst if not have_var "Constant setpoint" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold isOpe(t=1E-2, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold isOpe(t=1E-2, h=0.5E-2) "Evaluate if pump is operating" annotation (Placement(transformation(extent={{30,-70},{50,-50}}))); Fluid.FixedResistances.CheckValve cheVal( diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo index 40c41ca52fb..2fe18aac864 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerGroup.mo @@ -230,7 +230,7 @@ model ChillerGroup final show_T=show_T) "Chiller condenser isolation valves" annotation (Placement(transformation(extent={{70,50},{90,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power" annotation (Placement(transformation(extent={{70,30},{90,10}}))); Fluid.Sensors.TemperatureTwoPort temConLvg( redeclare final package Medium = Medium1, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo index 01521cecad0..764aaf1f206 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/ChillerHeatRecoveryGroup.mo @@ -374,7 +374,7 @@ model ChillerHeatRecoveryGroup extent={{-10,10},{10,-10}}, rotation=90, origin={20,20}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum mulSum(nin=nUni) + Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum(nin=nUni) "Sum up power of all units" annotation (Placement(transformation(extent={{70,110},{90,130}}))); Fluid.Sensors.MassFlowRate floEva[nUni]( diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo index 7762d4f196c..db8f8f8126c 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/CoolingTowerGroup.mo @@ -96,7 +96,7 @@ model CoolingTowerGroup "Model of multiple identical cooling towers in parallel" BaseClasses.MultipleCommands com(final nUni=nUni) "Convert command signals" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power" annotation (Placement(transformation(extent={{60,90},{80,70}}))); Fluid.HeatExchangers.CoolingTowers.Merkel coo( @@ -124,7 +124,7 @@ model CoolingTowerGroup "Model of multiple identical cooling towers in parallel" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={-14,80}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply inp + Buildings.Controls.OBC.CDL.Reals.Multiply inp "Compute pump input signal" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo index d5ddeb5a49e..4e830ac8dea 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/HeatPumpGroup.mo @@ -111,7 +111,7 @@ model HeatPumpGroup BaseClasses.MultipleCommands com(final nUni=nUni) "Convert command signals" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulP "Scale power" + Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power" annotation (Placement(transformation(extent={{70,110},{90,90}}))); Fluid.HeatPumps.EquationFitReversible heaPum( redeclare final package Medium1=Medium, @@ -148,13 +148,13 @@ model HeatPumpGroup final nPorts=1) "Air flow sink" annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter comFan( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter comFan( final k=mAirUni_flow_nominal) "Convert On/Off command to air flow setpoint" annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=-90, origin={46,30}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulP1 "Scale power" + Buildings.Controls.OBC.CDL.Reals.Multiply mulP1 "Scale power" annotation (Placement(transformation(extent={{70,70},{90,50}}))); Buildings.Controls.OBC.CDL.Logical.Pre preY1[nUni] @@ -165,12 +165,12 @@ model HeatPumpGroup annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={-20,80}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply inp + Buildings.Controls.OBC.CDL.Reals.Multiply inp "Compute pump input signal" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, origin={-40,30}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cst(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cst(final k=1) "Constant" annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo index d85f8851647..89ab72f9789 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/MultiplePumpsFlow.mo @@ -20,7 +20,7 @@ model MultiplePumpsFlow annotation ( Placement(transformation(extent={{-140,40},{-100,80}}), iconTransformation(extent={{-140,20},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Divide total flow setpoint by number of pumps commanded On" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); equation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo index b240b946dd4..1e087d26948 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/BaseClasses/PartialMultiplePumps.mo @@ -52,7 +52,7 @@ partial model PartialMultiplePumps extent={{10,-10},{-10,10}}, rotation=90, origin={20,30}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ope( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ope( height=0.8, duration=300, offset=0.2, @@ -122,12 +122,12 @@ partial model PartialMultiplePumps extent={{10,-10},{-10,10}}, rotation=90, origin={60,-100}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply inp1 + Buildings.Controls.OBC.CDL.Reals.Multiply inp1 "Compute pump input signal" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, origin={120,2}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply inp2 + Buildings.Controls.OBC.CDL.Reals.Multiply inp2 "Compute pump input signal" annotation (Placement(transformation( extent={{10,-10},{-10,10}}, rotation=90, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo index 70d15d82f5a..1afe54b64b0 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerGroup.mo @@ -62,7 +62,7 @@ model ChillerGroup "Validation of chiller group model" extent={{10,-10},{-10,10}}, rotation=-90, origin={-20,-102}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TChiWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TChiWatSupSet( y(displayUnit="degC", unit="K"), height=+5, duration=1000, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo index 339882608a4..94189087a8b 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/ChillerHeatRecoveryGroup.mo @@ -69,7 +69,7 @@ model ChillerHeatRecoveryGroup period=2000) "Direct heat recovery switchover command" annotation (Placement(transformation(extent={{-240,50},{-220,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSet[nChiHea]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSet[nChiHea]( each final k=chi.TChiWatSup_nominal, y(each final unit="K", each displayUnit="degC")) "Supply temperature setpoint" annotation (Placement(transformation(extent={{-240,-190},{-220,-170}}))); @@ -167,10 +167,10 @@ model ChillerHeatRecoveryGroup extent={{-10,-10},{10,10}}, rotation=0, origin={-30,-60}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TChiHeaSupSet[nChiHea] + Buildings.Controls.OBC.CDL.Reals.Switch TChiHeaSupSet[nChiHea] "Switch supply temperature setpoint" annotation (Placement(transformation(extent={{-168,-210},{-148,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSet[nChiHea]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSet[nChiHea]( each final k=chi.THeaWatSup_nominal, y(each final unit="K", each displayUnit="degC")) "Supply temperature setpoint" annotation (Placement(transformation(extent={{-240,-230},{-220,-210}}))); @@ -271,16 +271,16 @@ model ChillerHeatRecoveryGroup T_start=chi.TCasCooEnt_nominal) "Distribution system approximated by prescribed temperature" annotation (Placement(transformation(extent={{100,150},{80,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatRet( final k=chi.THeaWatSup_nominal - 12, y(final unit="K", displayUnit="degC")) "Return temperature" annotation (Placement(transformation(extent={{220,90},{200,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatConSup(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatConSup(final k= chi.TCasCooEnt_nominal, y(final unit="K", displayUnit="degC")) "Supply temperature" annotation (Placement(transformation(extent={{220,170},{200,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TConWatEvaSup(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TConWatEvaSup(final k= chi.TCasHeaEnt_nominal, y(final unit="K", displayUnit="degC")) "Supply temperature" annotation (Placement(transformation(extent={{220,-30},{200,-10}}))); @@ -293,7 +293,7 @@ model ChillerHeatRecoveryGroup T_start=chi.TChiWatSup_nominal) "Distribution system approximated by prescribed temperature" annotation (Placement(transformation(extent={{80,-150},{100,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRet( final k=chi.TChiWatSup_nominal + 6, y(final unit="K", displayUnit="degC")) "Return temperature" annotation (Placement(transformation(extent={{220,-130},{200,-110}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo index 08fe8edfd66..1b53f070580 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/CoolingTowerGroup.mo @@ -32,7 +32,7 @@ model CoolingTowerGroup "Validation of cooling tower group model" rotation=-90, origin={0,-70}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TConWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TConWatSupSet( height=+3, duration=500, offset=coo.TConWatSup_nominal, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo index c0816965a0a..ad1d8f207c8 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/HeatPumpGroup.mo @@ -54,7 +54,7 @@ model HeatPumpGroup "Validation of heat pump group model" rotation=-90, origin={2,-90}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet( k=dat.hea.TRefLoa+ 10, y(displayUnit="degC", unit="K")) "HW supply temperature setpoint" annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); @@ -74,7 +74,7 @@ model HeatPumpGroup "Validation of heat pump group model" extent={{-10,-10},{10,10}}, rotation=0, origin={-100,20}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp THeaWatRetBou( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp THeaWatRetBou( y(displayUnit="degC", unit="K"), height=+5, duration=1000, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo index 0fc836cd6e6..b16c5eca11e 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsDp.mo @@ -10,7 +10,7 @@ model MultiplePumpsDp final m_flow_nominal=mPum_flow_nominal, final dp_nominal=dpPum_nominal)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpSet( height=dpPum_nominal, duration=500) "Differential pressure setpoint" annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo index 6743d600ef8..03fa28557cd 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsFlow.mo @@ -10,10 +10,10 @@ model MultiplePumpsFlow final m_flow_nominal=mPum_flow_nominal, final dp_nominal=dpPum_nominal)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp floSet(height= + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp floSet(height= mPum_flow_nominal, duration=500) "Mass flow rate setpoint (each pump)" annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add floTotSet + Buildings.Controls.OBC.CDL.Reals.Add floTotSet "Compute total flow rate setpoint (all pumps)" annotation (Placement( transformation( extent={{10,-10},{-10,10}}, diff --git a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo index 67f863383eb..3717dc9aa07 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Subsystems/Validation/MultiplePumpsSpeed.mo @@ -6,7 +6,7 @@ model MultiplePumpsSpeed redeclare final Fluid.Movers.SpeedControlled_y pum1, redeclare final Fluid.Movers.SpeedControlled_y pum2); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp spe(duration=500) + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp spe(duration=500) "Pump speed signal" annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); equation diff --git a/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo b/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo index 88723a2637b..d4dfa00567d 100644 --- a/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo +++ b/Buildings/Experimental/DHC/Plants/Combined/Validation/AllElectricCWStorage.mo @@ -93,19 +93,19 @@ model AllElectricCWStorage "Validation of all-electric plant model" "CHW and HW plant" annotation (Placement(transformation(extent={{-30,-30},{30,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(final k=pla.TChiWatSup_nominal, y(final unit="K", displayUnit="degC")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-220,10},{-200,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(final k=pla.THeaWatSup_nominal, y(final unit="K", displayUnit="degC")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-190,-10},{-170,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpHeaWatSet_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpHeaWatSet_max( k=pla.dpHeaWatSet_max, y(final unit="Pa")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-190,-70},{-170,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpChiWatSet_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpChiWatSet_max( k=pla.dpChiWatSet_max, y(final unit="Pa")) "Source signal for setpoint" annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); @@ -135,11 +135,11 @@ model AllElectricCWStorage "Validation of all-electric plant model" "Distribution system approximated by prescribed return temperature" annotation (Placement(transformation(extent={{10,-150},{-10,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatRet(k=pla.THeaWatRet_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatRet(k=pla.THeaWatRet_nominal, y(final unit="K", displayUnit="degC")) "Source signal for HW return temperature" annotation (Placement(transformation(extent={{-190,70},{-170,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatRet(k=pla.TChiWatRet_nominal, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatRet(k=pla.TChiWatRet_nominal, y(final unit="K", displayUnit="degC")) "Source signal for CHW return temperature" annotation (Placement(transformation(extent={{-220,-110},{-200,-90}}))); @@ -162,7 +162,7 @@ model AllElectricCWStorage "Validation of all-electric plant model" dpFixed_nominal=pla.dpChiWatSet_max - valDisChiWat.dpValve_nominal) "Distribution system approximated by variable flow resistance" annotation (Placement(transformation(extent={{-30,-150},{-50,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ratFlo(table=[0,0,0; + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(table=[0,0,0; 6,0,0; 10,0.3,0.1; 15,1,0.1; 24,0.1,0.1; 30,0.1,1; 39,1,0.3; 48,0.1,0.1; 54,0.1,1; 63,0.1,0.3; 72,0,0; 78,0,1; 96,0,0], timeScale=3600) diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterBypass.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterBypass.mo index 0e6ece05fb7..9162b6877f5 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterBypass.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterBypass.mo @@ -26,7 +26,7 @@ model ChilledWaterBypass "Bypass valve opening ratio" annotation (Placement(transformation(extent={{100,-10},{120,10}}), iconTransformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + Buildings.Controls.OBC.CDL.Reals.PIDWithReset bypValCon( controllerType=controllerType, final k=k, diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterPumpSpeed.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterPumpSpeed.mo index 8b0ca7afddb..483d584aee7 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterPumpSpeed.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChilledWaterPumpSpeed.mo @@ -66,7 +66,7 @@ model ChilledWaterPumpSpeed final deaBanSpe=deaBanSpe) "Chilled water pump staging control" annotation (Placement(transformation(extent={{10,-10},{30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conPID( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( final controllerType=controllerType, final Ti=Ti, final k=k, diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChillerStage.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChillerStage.mo index e623a82b35a..8d5e9466253 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChillerStage.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/ChillerStage.mo @@ -71,7 +71,7 @@ model ChillerStage "Condition of transition from one chiller to off" annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=90,origin={40,60}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis thrOneToTwo(uLow=-staDowThr/ + Buildings.Controls.OBC.CDL.Reals.Hysteresis thrOneToTwo(uLow=-staDowThr/ QChi_nominal, uHigh=-staUpThr/QChi_nominal) "Threshold of turning two chillers on" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo index 2aadc504143..ee8c17eec8a 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/FlowControl.mo @@ -104,7 +104,7 @@ block FlowControl "Alternative: Tank charging or plant outputting CHW" annotation (Placement(transformation(extent={{-8,-200},{646,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiSecPum + Buildings.Controls.OBC.CDL.Reals.Switch swiSecPum "Switch for secondary pump flow" annotation (Placement(transformation(extent={{740,-20},{760,0}}))); Modelica.Blocks.Sources.Constant zer(final k=0) "Constant zero" diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo index 9a1521c2b8d..9d82969b67a 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/TankStatus.mo @@ -21,11 +21,11 @@ block TankStatus "Returns the tank status from its temperature sensors" extent={{-10,-10},{10,10}}, rotation=0, origin={-110,0}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysCha( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysCha( final uLow=TLow, final uHigh=TLow + dTHys) "Hysteresis, tank charged" annotation (Placement(visible = true, transformation(origin = {0, 50}, extent = {{-40, -60}, {-20, -40}}, rotation = 0))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysEmp( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysEmp( final uHigh=THig, final uLow=THig - dTHys) "Hysteresis, tank empty" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); @@ -35,15 +35,15 @@ block TankStatus "Returns the tank status from its temperature sensors" "Tank status - y[1]=true is empty; y[2] = true is charged; both false means partially charged" annotation (Placement(transformation(extent={{100,-10},{120,10}}), iconTransformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanTopChe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TTanTopChe( final k(final unit="K", displayUnit="degC") = THig) "Set point for top temperatuer of tank" annotation( Placement(visible = true, transformation(origin = {-70, -30}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TTanBotChe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TTanBotChe( final k(final unit="K", displayUnit="degC") = TLow) "Set point for bottom temperature of tank" annotation( Placement(visible = true, transformation(origin = {-70, -70}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Test for temperature set points" annotation( Placement(visible = true, transformation(origin = {-30, -50}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo index 0b6d1af89ab..3c7e395cada 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Controls/Validation/TankStatus.mo @@ -6,11 +6,11 @@ model TankStatus "Validation model for tank status controller" THig=286.15, dTHys=1) "Tank status" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanBot( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TTanBot( table=[0,273.15 + 11; 0.25,273.15 + 13.5; 0.5,273.15 + 12.5; 0.75,273.15 + 13.5; 1,273.15 + 11]) "Temperature at tank bottom" annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TTanTop( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TTanTop( table=[0,273.15 + 9; 0.25,273.15 + 6.5; 0.5,273.15 + 7.5; 0.75,273.15 + 6.5; 1,273.15 + 9]) "Temperature at tank top" diff --git a/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo b/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo index f06bc64890d..429b4f2e989 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/ElectricChillerParallel.mo @@ -219,15 +219,15 @@ model ElectricChillerParallel Buildings.Controls.OBC.CDL.Conversions.BooleanToReal chiOn[numChi] "Convert chiller on signal from boolean to real" annotation (Placement(transformation(extent={{-120,200},{-100,220}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPPum( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( nin=4) "Total pump power" annotation (Placement(transformation(extent={{340,150},{360,170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPFan( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPFan( nin=2) "Total fan power" annotation (Placement(transformation(extent={{340,190},{360,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum totPCoo( + Buildings.Controls.OBC.CDL.Reals.MultiSum totPCoo( nin=2) "Total cooling power" annotation (Placement(transformation(extent={{340,230},{360,250}}))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo index 7c11ce6196f..eb7225d174d 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Examples/StoragePlantDualSource.mo @@ -222,7 +222,7 @@ model StoragePlantDualSource Modelica.Blocks.Routing.Multiplex muxDp(n=3) "Multiplexer block for routing" annotation (Placement(transformation(extent={{238,140},{258,160}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax mulMax_yVal_actual(nin=3) + Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax_yVal_actual(nin=3) "Position of the most open user control valve" annotation (Placement(transformation(extent={{200,-220},{220,-200}}))); Modelica.Blocks.Sources.IntegerTable com(table=[0,2; 200,1; 3000,2; 4000,3; @@ -232,7 +232,7 @@ model StoragePlantDualSource Modelica.Blocks.Sources.BooleanTable chiEnaSta(table={0,6000}, startValue= false) "Chiller enable status, true if chiller is enabled" annotation (Placement(transformation(extent={{-138,-60},{-118,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys_yVal_actual(uLow=0.05, + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys_yVal_actual(uLow=0.05, uHigh=0.5) "Hysteresis for user control valve position" annotation (Placement(transformation(extent={{240,-220},{260,-200}}))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/CoolingTowersWithBypass.mo b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/CoolingTowersWithBypass.mo index a55a03f36a2..3f3b841dd9d 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/CoolingTowersWithBypass.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/CoolingTowersWithBypass.mo @@ -110,11 +110,11 @@ model CoolingTowersWithBypass final T_start=Medium.T_default) "Temperature sensor" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetByp( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetByp( final k=TMin) "Bypass loop temperature setpoint" annotation (Placement(transformation(extent={{-90,-60},{-70,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset bypValCon( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset bypValCon( u_s( final unit="K", displayUnit="degC"), @@ -127,7 +127,7 @@ model CoolingTowersWithBypass final y_reset=0) "Bypass valve controller" annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PID cooTowSpeCon( + Buildings.Controls.OBC.CDL.Reals.PID cooTowSpeCon( u_s( final unit="K", displayUnit="degC"), @@ -140,15 +140,15 @@ model CoolingTowersWithBypass final Ti=Ti) "Cooling tower fan speed controller" annotation (Placement(transformation(extent={{-10,40},{10,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output the input of higher value" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( uLow=TMin-0.1, uHigh=TMin+0.1) "Compare if (TWetBul+dTApp) is greater than TMin" annotation (Placement(transformation(extent={{-70,40},{-50,60}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( p=dTApp) "Add approach temperature on top of wetbulb temperature" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/BaseClasses/PartialCoolingTowersSubsystem.mo b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/BaseClasses/PartialCoolingTowersSubsystem.mo index 7deba2de025..dae490231bc 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/BaseClasses/PartialCoolingTowersSubsystem.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/BaseClasses/PartialCoolingTowersSubsystem.mo @@ -42,17 +42,17 @@ partial model PartialCoolingTowersSubsystem "On/off controller" annotation (Placement(transformation(extent={{-20,-200},{0,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Control switch for chilled water pump" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Control switch for chilled water pump" annotation (Placement(transformation(extent={{20,-200},{40,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSwi(k=273.15 + 22) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSwi(k=273.15 + 22) "Switch temperature for switching tower pump on" annotation (Placement(transformation(extent={{-80,-206},{-60,-186}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) "Zero flow rate" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Zero flow rate" annotation (Placement(transformation(extent={{-20,-230},{0,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant m_flow(k=m_flow_nominal) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant m_flow(k=m_flow_nominal) "Water flow rate" annotation (Placement(transformation(extent={{-20,-168},{0,-148}}))); diff --git a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/CoolingTowersParallel.mo b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/CoolingTowersParallel.mo index b8bd8ef014f..997e98fc0f0 100644 --- a/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/CoolingTowersParallel.mo +++ b/Buildings/Experimental/DHC/Plants/Cooling/Subsystems/Examples/CoolingTowersParallel.mo @@ -13,11 +13,11 @@ model CoolingTowersParallel use_inputFilter=false), weaDat(final computeWetBulbTemperature=true)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetLea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetLea( k=273.15+18) "Setpoint for leaving temperature" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conFan( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conFan( k=1, Ti=60, Td=10, diff --git a/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo b/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo index df5de431f91..863e708473a 100644 --- a/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo +++ b/Buildings/Experimental/DHC/Plants/Heating/SewageHeatRecovery.mo @@ -114,7 +114,7 @@ model SewageHeatRecovery extent={{-10,-10},{10,10}}, rotation=-90, origin={0,-16}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumPPum(nin=2) "Sum pump power" + Buildings.Controls.OBC.CDL.Reals.MultiSum sumPPum(nin=2) "Sum pump power" annotation (Placement(transformation(extent={{260,150},{280,170}}))); equation connect(senTSewOut.port_b, souSew.ports[1]) diff --git a/Buildings/Fluid/CHPs/BaseClasses/AssertFuelFlow.mo b/Buildings/Fluid/CHPs/BaseClasses/AssertFuelFlow.mo index 6455ee1abb7..b7b222ab6ea 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/AssertFuelFlow.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/AssertFuelFlow.mo @@ -18,7 +18,7 @@ protected Buildings.Controls.OBC.CDL.Logical.Not not1 "Check if fuel flow rate is changing slowly" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=0.99*dmFueMax_flow, final uHigh=1.01*dmFueMax_flow + 1e-6) "Check if fuel mass flow rate is changing too much" @@ -27,7 +27,7 @@ protected final initType=Modelica.Blocks.Types.Init.InitialOutput) "Rate at which fuel mass flow rate changes" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 "Absolute value" + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Absolute value" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); equation diff --git a/Buildings/Fluid/CHPs/BaseClasses/AssertPower.mo b/Buildings/Fluid/CHPs/BaseClasses/AssertPower.mo index 0fdc3fb8bfb..f8443795578 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/AssertPower.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/AssertPower.mo @@ -33,18 +33,18 @@ protected final initType=Modelica.Blocks.Types.Init.InitialOutput) if use_powerRateLimit "Power demand rate" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 if use_powerRateLimit "Absolute value" + Buildings.Controls.OBC.CDL.Reals.Abs abs1 if use_powerRateLimit "Absolute value" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold maxRat(final t= + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold maxRat(final t= dPEleMax) if use_powerRateLimit "Check if demand rate is more than the maximum rate" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis maxPow( + Buildings.Controls.OBC.CDL.Reals.Hysteresis maxPow( final uLow=0.99*PEleMax, final uHigh=1.01*PEleMax + 1e-6) "Check if the electric power demand is more than the maximum power production" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis minPow( + Buildings.Controls.OBC.CDL.Reals.Hysteresis minPow( final uLow=0.99*PEleMin - 1e-6, final uHigh=1.01*PEleMin) "Check if the electric power demand is larger than the minimum power production" diff --git a/Buildings/Fluid/CHPs/BaseClasses/AssertWaterFlow.mo b/Buildings/Fluid/CHPs/BaseClasses/AssertWaterFlow.mo index ec3fa621142..94aa1b26083 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/AssertWaterFlow.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/AssertWaterFlow.mo @@ -22,7 +22,7 @@ model AssertWaterFlow "Assert if water flow is outside boundaries" protected Buildings.Controls.OBC.CDL.Logical.Nand nand "Logical Nand" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=0.99*mWatMin_flow - 1e-6, final uHigh=1.01*mWatMin_flow) "Check if water flow rate is larger than minimum rate" diff --git a/Buildings/Fluid/CHPs/BaseClasses/AssertWaterTemperature.mo b/Buildings/Fluid/CHPs/BaseClasses/AssertWaterTemperature.mo index cb77113fb45..6c7902c873b 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/AssertWaterTemperature.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/AssertWaterTemperature.mo @@ -20,7 +20,7 @@ model AssertWaterTemperature annotation (Placement(transformation(extent={{60,-10},{80,10}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=TWatMax -THys, final uHigh=TWatMax + THys) "Check if water temperature is larger than the maximum temperature" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Controller.mo b/Buildings/Fluid/CHPs/BaseClasses/Controller.mo index 49f16bece59..c82885ea15d 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Controller.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Controller.mo @@ -57,19 +57,19 @@ model Controller "Define current operation mode" annotation (Placement(transformation(extent={{160,-90},{180,-70}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minWatFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minWatFlo( final k=per.mWatMin_flow) "Minimum water mass flow rate" annotation (Placement(transformation(extent={{-220,190},{-200,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=0.001) "Constant value" annotation (Placement(transformation(extent={{-220,150},{-200,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max + Buildings.Controls.OBC.CDL.Reals.Max max "Maximum between minimum flow rate and 0.001" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Mass flow rate difference between actual and minimum value" annotation (Placement(transformation(extent={{-100,170},{-80,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=0.01*per.mWatMin_flow - 1e-6, final uHigh=0.015*per.mWatMin_flow) "Check if actual mass flow rate is larger than the minimum value" diff --git a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo index 823621cf917..5f9dbfacd1c 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversion.mo @@ -66,10 +66,10 @@ protected Buildings.Fluid.CHPs.BaseClasses.EnergyConversionWarmUp opeModWarUpEngTem( final per=per) if not per.warmUpByTimeDelay "Warm-up by engine temperature" annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0) "Zero constant" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch + Buildings.Controls.OBC.CDL.Reals.Switch switch "Switch to zero power output if not in (normal or warm-up mode)" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); Modelica.Blocks.Sources.BooleanExpression booExp( @@ -77,19 +77,19 @@ protected opeMod ==CHPs.BaseClasses.Types.Mode.Normal) "True if active mode is (warm-up or normal)" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch2 + Buildings.Controls.OBC.CDL.Reals.Switch switch2 "Switch between warm-up and normal value" annotation (Placement(transformation(extent={{80,70},{100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch3 + Buildings.Controls.OBC.CDL.Reals.Switch switch3 "Switch between warm-up and normal value" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch4 + Buildings.Controls.OBC.CDL.Reals.Switch switch4 "Switch between warm-up and normal value" annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch5 + Buildings.Controls.OBC.CDL.Reals.Switch switch5 "Switch between warm-up and normal value" annotation (Placement(transformation(extent={{80,-110},{100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant PEleTimeDel(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant PEleTimeDel(final k=0) if per.warmUpByTimeDelay "Zero power output in case of warm-up by time delay" annotation (Placement(transformation(extent={{-20,90},{0,110}}))); @@ -106,7 +106,7 @@ protected Buildings.Controls.OBC.CDL.Logical.And and1 "True if warm-up mode and warm-up based on engine temperature" annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dumTimDel( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dumTimDel( final k=0) if per.warmUpByTimeDelay "Set dummy value in case of warm-up by time delay" annotation (Placement(transformation(extent={{-20,30},{0,50}}))); diff --git a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionNormal.mo b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionNormal.mo index b8e4d24a8fc..78f94483a58 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionNormal.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionNormal.mo @@ -45,16 +45,16 @@ protected final a=per.coeEtaQ) "Part load thermal efficiency" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide groHea + Buildings.Controls.OBC.CDL.Reals.Divide groHea "Gross heat input into the system" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply heaGen + Buildings.Controls.OBC.CDL.Reals.Multiply heaGen "Heat generation within the engine" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); Buildings.Utilities.Math.Polynomial masFloAir(final a=per.coeMasAir) "Air mass flow rate computation" annotation (Placement(transformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter masFloFue( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter masFloFue( final k=1/per.LHVFue) "Fuel mass flow rate computation" annotation (Placement(transformation(extent={{40,30},{60,50}}))); equation diff --git a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionWarmUp.mo b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionWarmUp.mo index 90fff278a86..91aae436eda 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionWarmUp.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/EnergyConversionWarmUp.mo @@ -55,7 +55,7 @@ protected final deltaX=0.5) "Prevent zero in denominator" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis temChe( + Buildings.Controls.OBC.CDL.Reals.Hysteresis temChe( final uLow=4.8, final uHigh=5.2) "Check if room temperature is not close to the nominal engine temperature by less than 5 Kelvin" @@ -63,70 +63,70 @@ protected Buildings.Fluid.CHPs.BaseClasses.EfficiencyCurve etaE( final a=per.coeEtaE) "Part load electrical efficiency" annotation (Placement(transformation(extent={{-20,230},{0,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide QGroMax + Buildings.Controls.OBC.CDL.Reals.Divide QGroMax "Gross heat input into the system" annotation (Placement(transformation(extent={{40,250},{60,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant PEleMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant PEleMax( final k=per.PEleMax) "Maximum power" annotation (Placement(transformation(extent={{-80,290},{-60,310}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter maxFueFlo( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter maxFueFlo( final k=per.rFue) "Maximum fuel mass flow rate" annotation (Placement(transformation(extent={{320,250},{340,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Min fueFlo "Fuel flow" + Buildings.Controls.OBC.CDL.Reals.Min fueFlo "Fuel flow" annotation (Placement(transformation(extent={{380,130},{400,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide division + Buildings.Controls.OBC.CDL.Reals.Divide division "First input divided by second input" annotation (Placement(transformation(extent={{140,30},{160,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TEngNom( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TEngNom( y(final unit="K", displayUnit="degC"), final k=per.TEngNom) "Nominal engine temperature" annotation (Placement(transformation(extent={{-80,90},{-60,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Difference between nominal engine temperature and room temperature" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant min1(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant min1(final k=1) "Prevent negative value if room temperature exceeds engine nominal temperature" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gain(final k=per.kF) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gain(final k=per.kF) "Gain by factor of warm-up fuel coefficient" annotation (Placement(transformation(extent={{200,30},{220,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add up two inputs" annotation (Placement(transformation(extent={{260,-10},{280,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply unlFueFloWarUp + Buildings.Controls.OBC.CDL.Reals.Multiply unlFueFloWarUp "Unlimited fuel mass flow rate during warm-up" annotation (Placement(transformation(extent={{320,30},{340,50}}))); Buildings.Fluid.CHPs.BaseClasses.EfficiencyCurve etaQ( final a=per.coeEtaQ) "Part load thermal efficiency" annotation (Placement(transformation(extent={{-20,180},{0,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply heaGen + Buildings.Controls.OBC.CDL.Reals.Multiply heaGen "Heat generation within the engine" annotation (Placement(transformation(extent={{500,150},{520,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide division1 + Buildings.Controls.OBC.CDL.Reals.Divide division1 "First input divided by second input" annotation (Placement(transformation(extent={{200,80},{220,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant powCoe( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant powCoe( final k=per.kP) "Warm-up power coefficient" annotation (Placement(transformation(extent={{140,110},{160,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply PEleNet1 + Buildings.Controls.OBC.CDL.Reals.Multiply PEleNet1 "Generated electrical power" annotation (Placement(transformation(extent={{260,330},{280,350}}))); Buildings.Utilities.Math.Polynomial masFloAir(final a=per.coeMasAir) "Air mass flow rate" annotation (Placement(transformation(extent={{500,230},{520,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant min2(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant min2(final k=1) "Prevent zero in denominator" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Buildings.Controls.OBC.CDL.Utilities.Assert assMes( final message="Room temperature is too close to the nominal engine temperature, simulation should be aborted") "Assert function for checking room temperature" annotation (Placement(transformation(extent={{80,130},{100,150}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter masFloFue(final k=1 + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter masFloFue(final k=1 /per.LHVFue) "Fuel mass flow rate computation" annotation (Placement(transformation(extent={{80,250},{100,270}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter heaGro(final k=per.LHVFue) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter heaGro(final k=per.LHVFue) "Gross heat input into the system" annotation (Placement(transformation(extent={{440,130},{460,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Difference between room temperature and engine temperature" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); diff --git a/Buildings/Fluid/CHPs/BaseClasses/FilterPower.mo b/Buildings/Fluid/CHPs/BaseClasses/FilterPower.mo index 9daae6b4505..3e7c2c007e2 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/FilterPower.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/FilterPower.mo @@ -28,18 +28,18 @@ model FilterPower "Constraints for electric power" protected Modelica.Blocks.Nonlinear.VariableLimiter PLim "Power limiter" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant PMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant PMax( final k=PEleMax) "Maximum power" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant PMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant PMin( final k=PEleMin) "Minimum power" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.LimitSlewRate dPLim( + Buildings.Controls.OBC.CDL.Reals.LimitSlewRate dPLim( final raisingSlewRate(unit="W/s") = dPEleMax, final fallingSlewRate(unit="W/s") = -dPEleMax, final Td=1) "Power rate limiter" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch + Buildings.Controls.OBC.CDL.Reals.Switch switch annotation (Placement(transformation(extent={{70,-10},{90,10}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant limDp( final k=use_powerRateLimit) diff --git a/Buildings/Fluid/CHPs/BaseClasses/PowerConsumption.mo b/Buildings/Fluid/CHPs/BaseClasses/PowerConsumption.mo index a22bb2a7019..4f8dfc670f6 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/PowerConsumption.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/PowerConsumption.mo @@ -26,19 +26,19 @@ protected opeMod == Buildings.Fluid.CHPs.BaseClasses.Types.Mode.CoolDown) "Check if stand-by mode or cool-down mode" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant staByCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant staByCon( final k=PStaBy) "Stand-by mode power consumption " annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch + Buildings.Controls.OBC.CDL.Reals.Switch switch "Power consumption during stand-by or cool-down mode" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch1 "Cool-down power consumption" + Buildings.Controls.OBC.CDL.Reals.Switch switch1 "Cool-down power consumption" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0) "Zero power consumption" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowCon( final k=PCooDow) "Cool-down mode power consumption " annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertFuelFlow.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertFuelFlow.mo index 5688ff69bef..a005dd2e9d2 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertFuelFlow.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertFuelFlow.mo @@ -10,7 +10,7 @@ model AssertFuelFlow "Validate model AssertFuelFlow" "Assert if fuel mass flow rate is outside boundaries" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mFue_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mFue_flow( final table=[0,0; 300,1; 600,3.5; 900,0], final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) "Fuel mass flow rate" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertPower.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertPower.mo index 4fa1f05daa8..85329758918 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertPower.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertPower.mo @@ -12,7 +12,7 @@ model AssertPower "Validate model AssertPower" dPEleMax=per.dPEleMax) "Assert if electric power is outside boundaries" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable PEleDem( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable PEleDem( table=[0,0; 300,500; 600,2000; 900,3001; 1200,0; 1500,6000; 2000,6000], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterFlow.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterFlow.mo index b6cebc51cf8..f2ef74cfe94 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterFlow.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterFlow.mo @@ -8,7 +8,7 @@ model AssertWaterFlow "Validate model AssertWaterFlow" Buildings.Fluid.CHPs.BaseClasses.AssertWaterFlow assWatMas(mWatMin_flow=per.mWatMin_flow) "Assert if water mass flow is outside boundaries" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mWat_flow( table=[0,0; 300,0.05; 360,0.5; 600,0.05; 900,0.05], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterTemperature.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterTemperature.mo index da3b79e540c..76e017482dd 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterTemperature.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/AssertWaterTemperature.mo @@ -9,7 +9,7 @@ model AssertWaterTemperature "Validate model AssertWaterTemperature" Buildings.Fluid.CHPs.BaseClasses.AssertWaterTemperature assWatTem(TWatMax=per.TWatMax) "Assert if water temperature is outside boundaries" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable TWat( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable TWat( table=[0,273.15 + 20; 300,273.15 + 80; 600,273.15 + 100; 900,273.15 + 100], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/Controller.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/Controller.mo index fc098f75738..9e37c6754fb 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/Controller.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/Controller.mo @@ -18,7 +18,7 @@ model Controller "Validate model Controller" final startValue=false, table={300,600,900}) "Plant availability signal" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mWat_flow( table=[0,0; 900,0.4; 1320,0; 1500,0.4; 1900,0; 1960,0.4; 2200,0; 3000,0], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversion.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversion.mo index eb53b899f23..99180c905cc 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversion.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversion.mo @@ -18,7 +18,7 @@ model EnergyConversion "Validate model EnergyConversion" "Energy conversion volume: warm-up by time delay" annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mWat_flow( table=[0,0; 300,0.4; 2700,0; 3000,0], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) "Cooling water flow rate" @@ -31,13 +31,13 @@ model EnergyConversion "Validate model EnergyConversion" Modelica.Blocks.Sources.BooleanTable avaSig(startValue=true, table={3500}) "Plant availability signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEng( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEng( final height=90, final duration=600, final offset=273.15 + 15, final startTime=360) "Engine temperature" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TWatIn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWatIn( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Cooling water inlet temperature" annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); @@ -45,7 +45,7 @@ model EnergyConversion "Validate model EnergyConversion" table=[0,0; 299,0; 300,2500; 2699,2500;2700,0; 3000,0]) "Electric power demand" annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TRoo( + Controls.OBC.CDL.Reals.Sources.Constant TRoo( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Room temperature" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionNormal.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionNormal.mo index 61ab2cca005..089f3b12a4a 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionNormal.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionNormal.mo @@ -9,16 +9,16 @@ model EnergyConversionNormal "Validate model EnergyConversionNormal" Buildings.Fluid.CHPs.BaseClasses.EnergyConversionNormal opeModBas( final per=per) "Energy conversion for a typical CHP operation" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp PEle( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp PEle( final height=5000, final duration=360, final offset=0, final startTime=600) "Electric power" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mWat_flow( final k=0.05) "Water mass flow rate" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TWatIn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWatIn( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Water inlet temperature" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionWarmUp.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionWarmUp.mo index 544473f0c22..1bdd2680fc4 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionWarmUp.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/EnergyConversionWarmUp.mo @@ -9,23 +9,23 @@ model EnergyConversionWarmUp "Validate model EnergyConversionWarmUp" Buildings.Fluid.CHPs.BaseClasses.EnergyConversionWarmUp opeModWarUpEngTem( final per=per) "Energy conversion during warm-up by engine temperature" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEng( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEng( y(final unit="K", displayUnit="degC"), final height=90, final duration=360, final offset=273.15 + 15, final startTime=600) "Engine temperature" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mWat_flow( final k=0.05) "Water mass flow rate" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TWatIn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWatIn( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Water inlet temperature" annotation (Placement(transformation(extent={{-60,2},{-40,22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRoo( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Room temperature" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/EngineTemperature.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/EngineTemperature.mo index d36d5ae0472..61917b6f1eb 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/EngineTemperature.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/EngineTemperature.mo @@ -12,18 +12,18 @@ model EngineTemperature "Validate model EngineTemperature" final capEng=per.capEng, final TEngIni=273.15 + 20) "Heat exchange within the engine control volume" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp QGen( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp QGen( final height=5000, final duration=360, final offset=0, final startTime=600) "Heat generation within the engine" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TRoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TRoo( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Room temperature" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TWat( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWat( y(final unit="K", displayUnit="degC"), final k=273.15 + 60) "Water temperature" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/FilterPower.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/FilterPower.mo index 567641921cc..62c77fbf1d0 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/FilterPower.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/FilterPower.mo @@ -6,7 +6,7 @@ model FilterPower "Validate model FilterPower" "CHP performance data" annotation (Placement(transformation(extent={{60,60},{80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable PEleDem( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable PEleDem( table=[0,0; 300,500; 600,2000; 900,3000; 1200,0; 1500,6000; 1800,6000], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/PowerConsumption.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/PowerConsumption.mo index 2e473eb8fac..8bce4ac4263 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/PowerConsumption.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/PowerConsumption.mo @@ -6,7 +6,7 @@ model PowerConsumption "Validate model PowerConsumption" "CHP performance data" annotation (Placement(transformation(extent={{60,60},{80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mWat_flow( table=[0,0; 300,0.4; 2700,0; 3000,0], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) "Water mass flow rate" diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/StandBy.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/StandBy.mo index 14840d3c45f..c3ca321fb75 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/StandBy.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/StandBy.mo @@ -6,7 +6,7 @@ model StandBy "Validate model StandBy" "CHP performance data" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mWat_flow( final k=0.5) "Water mass flow rate" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); Buildings.Fluid.CHPs.BaseClasses.Types.Mode actMod "Mode indicator"; @@ -42,11 +42,11 @@ protected annotation (Placement(transformation(extent={{70,70},{90,90}}))); Modelica.StateGraph.TransitionWithSignal transition4 "Standby to off mode" annotation (Placement(transformation(extent={{-30,30},{-50,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minWatFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minWatFlo( final k=per.mWatMin_flow) "Minimum water mass flow rate" annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater cheMinFlo + Buildings.Controls.OBC.CDL.Reals.Greater cheMinFlo "Check if water mass flow rate is higher than the minimum" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/WarmUpTemperature.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/WarmUpTemperature.mo index 739247e001f..f2eedd4449d 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/WarmUpTemperature.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/WarmUpTemperature.mo @@ -7,7 +7,7 @@ model WarmUpTemperature "CHP performance data" annotation (Placement(transformation(extent={{60,80},{80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEng( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEng( final height=200, final duration=360, final offset=273.15, @@ -29,7 +29,7 @@ model WarmUpTemperature Modelica.StateGraph.StepWithSignal warUp(nIn=2, nOut=2) "Plant is in warm-up mode" annotation (Placement(transformation(extent={{-20,40},{0,20}}))); - Controls.OBC.CDL.Continuous.Sources.Constant PEle[2](k={1,2}) + Controls.OBC.CDL.Reals.Sources.Constant PEle[2](k={1,2}) "Power output and demand" annotation (Placement(transformation(extent={{-50,70},{-30,90}}))); protected diff --git a/Buildings/Fluid/CHPs/BaseClasses/Validation/WaterFlowControl.mo b/Buildings/Fluid/CHPs/BaseClasses/Validation/WaterFlowControl.mo index 64f1b9b4287..9ea8fdda8d1 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/Validation/WaterFlowControl.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/Validation/WaterFlowControl.mo @@ -11,7 +11,7 @@ model WaterFlowControl "Validate model WaterFlowControl" protected inner Modelica.StateGraph.StateGraphRoot stateGraphRoot annotation (Placement(transformation(extent={{60,59},{80,79}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable mWat_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable mWat_flow( table=[0,0; 300,0.4; 2700,0; 3000,0], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) "Water mass flow rate" @@ -29,19 +29,19 @@ protected final table={3500}) "Plant availability signal" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEng( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEng( y(final unit="K", displayUnit="degC"), final height=90, final duration=300, final offset=273.15 + 15, final startTime=360) "Engine temperature" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TWatIn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TWatIn( y(final unit="K", displayUnit="degC"), final k=273.15 + 15) "Water inlet temperature" annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable PEle( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable PEle( final table=[0,0; 300,2500; 2700,0; 3000,0], final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments) "Electric power demand" diff --git a/Buildings/Fluid/CHPs/BaseClasses/WarmUpLeaving.mo b/Buildings/Fluid/CHPs/BaseClasses/WarmUpLeaving.mo index 473d1593aed..a9e3d2c7eb4 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/WarmUpLeaving.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/WarmUpLeaving.mo @@ -40,25 +40,25 @@ protected final t=timeDelayStart) if warmUpByTimeDelay "Check the time since the warm-up mode is activated" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTem( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTem( final uLow=-0.5, final uHigh=0) if not warmUpByTimeDelay "Check if actual engine temperature is higher than the nominal value" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub if not warmUpByTimeDelay "Difference between actual engine temperature and the nominal value" annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant temEngNom( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant temEngNom( y(final unit="K", displayUnit="degC"), final k=TEngNom) "Nominal engine temperature" annotation (Placement(transformation(extent={{-88,-30},{-68,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 if not warmUpByTimeDelay "Difference between actual power output and demand" annotation (Placement(transformation(extent={{-50,-70},{-30,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysPow( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysPow( final uLow=-0.01*PEleMax - 1e-6, final uHigh=0) if not warmUpByTimeDelay "Check if actual power output is higher than demand" diff --git a/Buildings/Fluid/CHPs/BaseClasses/WaterFlowControl.mo b/Buildings/Fluid/CHPs/BaseClasses/WaterFlowControl.mo index 3c794d29315..682b6954e55 100644 --- a/Buildings/Fluid/CHPs/BaseClasses/WaterFlowControl.mo +++ b/Buildings/Fluid/CHPs/BaseClasses/WaterFlowControl.mo @@ -31,9 +31,9 @@ protected Buildings.Utilities.Math.Biquadratic mWatIntCon( final a=per.coeMasWat) "Internal control of water flow rate " annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch watFloSet "Water flow setpoint" + Buildings.Controls.OBC.CDL.Reals.Switch watFloSet "Water flow setpoint" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(final k=0) "Zero flow rate" annotation (Placement(transformation(extent={{0,30},{20,50}}))); Buildings.Controls.OBC.UnitConversions.To_degC to_degC diff --git a/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo b/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo index df4ff5f1490..30f81d7c99f 100644 --- a/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo +++ b/Buildings/Fluid/CHPs/ThermalElectricalFollowing.mo @@ -102,7 +102,7 @@ model ThermalElectricalFollowing "CHP model that can be thermal or electrical lo annotation (Placement(transformation(extent={{50,150},{70,170}}))); Buildings.Controls.OBC.CDL.Logical.And runSig "Run if avaFlag and PEleDem non zero" annotation (Placement(transformation(extent={{-20,120},{0,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=per.PEleMax/2*10^(-3), final uHigh=per.PEleMax*10^(-3)) "Determine if demand larger than zero" annotation (Placement(transformation(extent={{-60,100},{-40,120}}))); @@ -143,7 +143,7 @@ model ThermalElectricalFollowing "CHP model that can be thermal or electrical lo "Heat transfer to the surrounding" annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=180, origin={-60,-140}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooWatCon( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset cooWatCon( final controllerType=watOutCon, final k=k, final Ti=Ti, @@ -152,21 +152,21 @@ model ThermalElectricalFollowing "CHP model that can be thermal or electrical lo final yMin=0) if switchThermalElectricalFollowing "Cooling water outlet controller" annotation (Placement(transformation(extent={{-60,340},{-40,360}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter elePowDem( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter elePowDem( final k=per.PEleMax) if switchThermalElectricalFollowing "Electric power demand if thermal following" annotation (Placement(transformation(extent={{0,340},{20,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between thermal and electrical following" annotation (Placement(transformation(extent={{100,250},{120,270}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant optFol( final k=false) if not switchThermalElectricalFollowing "Feed false to switch block if no optional following" annotation (Placement(transformation(extent={{40,230},{60,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( final k=0) if not switchThermalElectricalFollowing "Constant zero" annotation (Placement(transformation(extent={{40,270},{60,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=-1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=-1) "Heat transfer to the water control volume" annotation (Placement(transformation(extent={{120,-110},{140,-90}}))); inner Modelica.StateGraph.StateGraphRoot stateGraphRoot diff --git a/Buildings/Fluid/CHPs/Validation/ElectricalFollowing.mo b/Buildings/Fluid/CHPs/Validation/ElectricalFollowing.mo index af150a90156..0a5a8a24867 100644 --- a/Buildings/Fluid/CHPs/Validation/ElectricalFollowing.mo +++ b/Buildings/Fluid/CHPs/Validation/ElectricalFollowing.mo @@ -30,21 +30,21 @@ model ElectricalFollowing "Validate model ElectricalFollowing" use_T_in=true, nPorts=1) "Cooling water source" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dPEleNet + Buildings.Controls.OBC.CDL.Reals.Subtract dPEleNet "Absolute error for electric power generaton" annotation (Placement(transformation(extent={{140,0},{160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQGen "Absolute error for heat generaton" + Buildings.Controls.OBC.CDL.Reals.Subtract dQGen "Absolute error for heat generaton" annotation (Placement(transformation(extent={{140,-30},{160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQWat + Buildings.Controls.OBC.CDL.Reals.Subtract dQWat "Absolute error for heat transfer to water control volume" annotation (Placement(transformation(extent={{140,-60},{160,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQLos + Buildings.Controls.OBC.CDL.Reals.Subtract dQLos "Absolute error for heat loss to the surroundings" annotation (Placement(transformation(extent={{140,-90},{160,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTWatOut + Buildings.Controls.OBC.CDL.Reals.Subtract dTWatOut "Absolute error for water outlet temperature" annotation (Placement(transformation(extent={{140,60},{160,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTEng + Buildings.Controls.OBC.CDL.Reals.Subtract dTEng "Absolute error for engine temperature" annotation (Placement(transformation(extent={{140,30},{160,50}}))); Modelica.Blocks.Sources.RealExpression PEleNet( diff --git a/Buildings/Fluid/CHPs/Validation/ThermalFollowing.mo b/Buildings/Fluid/CHPs/Validation/ThermalFollowing.mo index d29e9a1a002..5440e525986 100644 --- a/Buildings/Fluid/CHPs/Validation/ThermalFollowing.mo +++ b/Buildings/Fluid/CHPs/Validation/ThermalFollowing.mo @@ -29,13 +29,13 @@ model ThermalFollowing "Validate model ThermalElectricalFollowing" use_T_in=true, nPorts=1) "Cooling water source" annotation (Placement(transformation(extent={{-68,0},{-48,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dPEleNet + Buildings.Controls.OBC.CDL.Reals.Subtract dPEleNet "Absolute error for electric power generaton" annotation (Placement(transformation(extent={{140,0},{160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQWat + Buildings.Controls.OBC.CDL.Reals.Subtract dQWat "Absolute error for heat transfer to water control volume" annotation (Placement(transformation(extent={{140,-60},{160,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTWatOut + Buildings.Controls.OBC.CDL.Reals.Subtract dTWatOut "Absolute error for water outlet temperature" annotation (Placement(transformation(extent={{140,60},{160,80}}))); Modelica.Blocks.Sources.RealExpression PEleNet( @@ -52,21 +52,21 @@ model ThermalFollowing "Validate model ThermalElectricalFollowing" HeatTransfer.Sources.PrescribedTemperature preTem "Variable temperature boundary condition in Kelvin" annotation (Placement(transformation(extent={{-70,-60},{-50,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dTEng + Buildings.Controls.OBC.CDL.Reals.Subtract dTEng "Absolute error for engine temperature" annotation (Placement(transformation(extent={{140,30},{160,50}}))); Modelica.Blocks.Sources.RealExpression TEng( final y=theFol.eng.TEng) "Engine temperature" annotation (Placement(transformation(extent={{100,30},{120,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQLos + Buildings.Controls.OBC.CDL.Reals.Subtract dQLos "Absolute error for heat loss to the surroundings" annotation (Placement(transformation(extent={{140,-90},{160,-70}}))); Modelica.Blocks.Sources.RealExpression QLos( final y=theFol.QLos.Q_flow) "Heat loss to the surrounding" annotation (Placement(transformation(extent={{100,-90},{120,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dQGen + Buildings.Controls.OBC.CDL.Reals.Subtract dQGen "Absolute error for heat generaton" annotation (Placement(transformation(extent={{140,-30},{160,-10}}))); Modelica.Blocks.Sources.RealExpression QGen( @@ -114,7 +114,7 @@ model ThermalFollowing "Validate model ThermalElectricalFollowing" waitTime=0) "CHP unit with the thermal demand priority and negative water mass flow rate" annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant mWat_flow_negative( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant mWat_flow_negative( final k=-1) "Negative water mass flow rate for validation only" annotation (Placement(transformation(extent={{-170,-90},{-150,-70}}))); diff --git a/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteam.mo b/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteam.mo index ac42de98ece..0b779dafe2a 100644 --- a/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteam.mo +++ b/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteam.mo @@ -53,14 +53,14 @@ model AbsorptionIndirectSteam extent={{-10,-10},{10,10}}, rotation=180, origin={50,-30}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TConEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TConEnt( height=5, duration(displayUnit="h") = 14400, offset=20 + 273.15, startTime=0) "Condenser entering water temperature" annotation (Placement(transformation(extent={{-96,56},{-76,76}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEvaEnt( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEvaEnt( height=4, duration(displayUnit="h") = 14400, offset=12 + 273.15, @@ -77,7 +77,7 @@ model AbsorptionIndirectSteam nPorts=1) "Volume for cooling load" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TEvaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TEvaSet( height=4, duration(displayUnit="h") = 14400, offset=6 + 273.15, diff --git a/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteamVaryingLoad.mo b/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteamVaryingLoad.mo index 02100bbf2be..005a2e7958f 100644 --- a/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteamVaryingLoad.mo +++ b/Buildings/Fluid/Chillers/Examples/AbsorptionIndirectSteamVaryingLoad.mo @@ -68,23 +68,23 @@ model AbsorptionIndirectSteamVaryingLoad redeclare package Medium = Medium, use_T_in=true) "Cooling load" annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSet(k=273.15 + 10) "Set point" + Controls.OBC.CDL.Reals.Sources.Constant TSet(k=273.15 + 10) "Set point" annotation (Placement(transformation(extent={{-130,-12},{-110,8}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp mPum_flow( + Controls.OBC.CDL.Reals.Sources.Ramp mPum_flow( height=per.mEva_flow_nominal, duration=86400, offset=0) "Pump flow rate" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Controls.OBC.CDL.Continuous.Divide QEva_QGen + Controls.OBC.CDL.Reals.Divide QEva_QGen "Ratio of cooling provided over required steam" annotation (Placement(transformation(extent={{90,0},{110,20}}))); - Controls.OBC.CDL.Continuous.Divide QEva_P + Controls.OBC.CDL.Reals.Divide QEva_P "Ratio of cooling provided over pump energy" annotation (Placement(transformation(extent={{90,-30},{110,-10}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=-1) + Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=-1) "Gain to switch sign" annotation (Placement(transformation(extent={{52,-50},{72,-30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TEnt(k=273.15 + 15) + Controls.OBC.CDL.Reals.Sources.Constant TEnt(k=273.15 + 15) "Entering evaporator temperature" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); equation diff --git a/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/PLRToPulse.mo b/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/PLRToPulse.mo index bda011a5937..b0f8e630daa 100644 --- a/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/PLRToPulse.mo +++ b/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/PLRToPulse.mo @@ -16,7 +16,7 @@ block PLRToPulse iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=tPer) "Calculate runtime from PLR signal" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); @@ -35,7 +35,7 @@ protected "Outputs true signals for 1e-6 second duration at required timestep interval" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les + Buildings.Controls.OBC.CDL.Reals.Less les "Check if component runtime has exceeded required runtime from PLR" annotation (Placement(transformation(extent={{20,40},{40,60}}))); diff --git a/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/Validation/PLRToPulse.mo b/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/Validation/PLRToPulse.mo index 9e2faa89bf6..843c9a5754e 100644 --- a/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/Validation/PLRToPulse.mo +++ b/Buildings/Fluid/DXSystems/Heating/AirSource/Validation/BaseClasses/Validation/PLRToPulse.mo @@ -12,13 +12,13 @@ model PLRToPulse "Time for which the enable signal is true" annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiTim( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiTim( final k=15*60) "Calculate time for which component needs to be enabled" annotation (Placement(transformation(extent={{40,30},{60,50}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp plr( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plr( final height=1, final duration(displayUnit="min")= 15*5*60) "Part-load ratio signal" diff --git a/Buildings/Fluid/DXSystems/Heating/BaseClasses/CoilDefrostTimeCalculations.mo b/Buildings/Fluid/DXSystems/Heating/BaseClasses/CoilDefrostTimeCalculations.mo index 2b47661fc2d..56264498b3c 100644 --- a/Buildings/Fluid/DXSystems/Heating/BaseClasses/CoilDefrostTimeCalculations.mo +++ b/Buildings/Fluid/DXSystems/Heating/BaseClasses/CoilDefrostTimeCalculations.mo @@ -65,7 +65,7 @@ block CoilDefrostTimeCalculations Buildings.Utilities.Psychrometrics.ToDryAir toDryAir "Convert outdoor air humidity ratio from total air to dry air"; - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysTOut( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysTOut( final uLow=-dTHys, final uHigh=dTHys) "Check if outdoor air temperature is below maximum limit for defrost operation"; diff --git a/Buildings/Fluid/HeatExchangers/CoolingTowers/Examples/Merkel.mo b/Buildings/Fluid/HeatExchangers/CoolingTowers/Examples/Merkel.mo index 02d04a46f17..964637815cf 100644 --- a/Buildings/Fluid/HeatExchangers/CoolingTowers/Examples/Merkel.mo +++ b/Buildings/Fluid/HeatExchangers/CoolingTowers/Examples/Merkel.mo @@ -18,7 +18,7 @@ model Merkel "Test model for cooling tower using the Merkel theory" "Setpoint for leaving temperature" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conFan( + Buildings.Controls.OBC.CDL.Reals.PID conFan( k=1, Ti=60, Td=10, diff --git a/Buildings/Fluid/HeatExchangers/Validation/WetCoilCounterFlowLowWaterFlowRate.mo b/Buildings/Fluid/HeatExchangers/Validation/WetCoilCounterFlowLowWaterFlowRate.mo index d145e54b7ac..b54b538ac1a 100644 --- a/Buildings/Fluid/HeatExchangers/Validation/WetCoilCounterFlowLowWaterFlowRate.mo +++ b/Buildings/Fluid/HeatExchangers/Validation/WetCoilCounterFlowLowWaterFlowRate.mo @@ -61,7 +61,7 @@ model WetCoilCounterFlowLowWaterFlowRate nPorts=1) "sink for air" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Controls.OBC.CDL.Reals.Sources.Ramp ram( height=-mWat_flow_nominal, duration=1800, offset=mWat_flow_nominal, diff --git a/Buildings/Fluid/HeatExchangers/Validation/WetCoilEffectivenessNTUHeating.mo b/Buildings/Fluid/HeatExchangers/Validation/WetCoilEffectivenessNTUHeating.mo index 6f75cd84b76..8bbbc48c803 100644 --- a/Buildings/Fluid/HeatExchangers/Validation/WetCoilEffectivenessNTUHeating.mo +++ b/Buildings/Fluid/HeatExchangers/Validation/WetCoilEffectivenessNTUHeating.mo @@ -164,7 +164,7 @@ model WetCoilEffectivenessNTUHeating nPorts=1) "Source for water" annotation (Placement(transformation(extent={{-180,-30},{-160,-10}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp T_a2( + Controls.OBC.CDL.Reals.Sources.Ramp T_a2( height=15, duration=1000, offset=273.15) "Air inlet temperature" diff --git a/Buildings/Fluid/HeatPumps/BaseClasses/Validation/EquationFitReversible.mo b/Buildings/Fluid/HeatPumps/BaseClasses/Validation/EquationFitReversible.mo index 0798adf1d0d..c822eb37916 100644 --- a/Buildings/Fluid/HeatPumps/BaseClasses/Validation/EquationFitReversible.mo +++ b/Buildings/Fluid/HeatPumps/BaseClasses/Validation/EquationFitReversible.mo @@ -26,19 +26,19 @@ model EquationFitReversible Modelica.Blocks.Sources.Sine Q_flow_set(amplitude=5000, f=1/2600) "Set point for heat flow rate" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Controls.OBC.CDL.Continuous.Sources.Constant mLoa_flow(k=1.89) + Controls.OBC.CDL.Reals.Sources.Constant mLoa_flow(k=1.89) "Mass flow rate entering load heat exchanger side" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Controls.OBC.CDL.Continuous.Sources.Sin TLoaEnt( + Controls.OBC.CDL.Reals.Sources.Sin TLoaEnt( amplitude=10, freqHz=1/2600, offset=25 + 273.15, startTime=0) "Load side entering water temperature" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant mSou_flow(k=1.89) + Controls.OBC.CDL.Reals.Sources.Constant mSou_flow(k=1.89) "Mass flow rate entering source heat exchanger side" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Controls.OBC.CDL.Continuous.Sources.Sin TSouEnt( + Controls.OBC.CDL.Reals.Sources.Sin TSouEnt( amplitude=5, freqHz=1/2600, offset=15 + 273.15, diff --git a/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible.mo b/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible.mo index 231a8308247..4addc1f8a66 100644 --- a/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible.mo +++ b/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible.mo @@ -53,13 +53,13 @@ model EquationFitReversible nPorts=1) "Volume for source side" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp THeaLoaSet( + Controls.OBC.CDL.Reals.Sources.Ramp THeaLoaSet( height=5, duration(displayUnit="h") = 14400, offset=55 + 273.15) "Heating load side setpoint water temperature" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TCooLoaSet( + Controls.OBC.CDL.Reals.Sources.Ramp TCooLoaSet( height=1, duration(displayUnit="h") = 14400, offset=6 + 273.15) "Cooling load setpoint water temperature" @@ -67,9 +67,9 @@ model EquationFitReversible Controls.OBC.CDL.Integers.GreaterThreshold intGreThr(t=-1) "Integer threshold" annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); - Controls.OBC.CDL.Continuous.Switch swi "Switch for set point temperature" + Controls.OBC.CDL.Reals.Switch swi "Switch for set point temperature" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TSouEntCoo( + Controls.OBC.CDL.Reals.Sources.Ramp TSouEntCoo( height=5, duration(displayUnit="h") = 14400, offset=28 + 273.15) @@ -80,25 +80,25 @@ model EquationFitReversible duration(displayUnit="h") = 14400, offset=-1) "Heat pump operates in heating mode" annotation (Placement(transformation(extent={{-118,0},{-98,20}}))); - Controls.OBC.CDL.Continuous.Switch swi1 + Controls.OBC.CDL.Reals.Switch swi1 "Switch for set point temperature" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Controls.OBC.CDL.Continuous.Switch swi2 + Controls.OBC.CDL.Reals.Switch swi2 "Switch for set point temperature" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TSouEntHea( + Controls.OBC.CDL.Reals.Sources.Ramp TSouEntHea( height=2, duration(displayUnit="h") = 14400, offset=12 + 273.15) "Source side entering water temperature in heating mode" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TLoaEntHea( + Controls.OBC.CDL.Reals.Sources.Ramp TLoaEntHea( height=5, duration(displayUnit="h") = 14400, offset=50 + 273.15) "Load side entering water temperature in heating mode" annotation (Placement(transformation(extent={{-20,80},{0,100}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TLoaEntCoo( + Controls.OBC.CDL.Reals.Sources.Ramp TLoaEntCoo( height=5, duration(displayUnit="h") = 14400, offset=10 + 273.15) diff --git a/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible_CoolingClosedLoop.mo b/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible_CoolingClosedLoop.mo index 0044d56171e..d9918ba1f1c 100644 --- a/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible_CoolingClosedLoop.mo +++ b/Buildings/Fluid/HeatPumps/Examples/EquationFitReversible_CoolingClosedLoop.mo @@ -37,14 +37,14 @@ model EquationFitReversible_CoolingClosedLoop nPorts=1) "Volume for source side" annotation (Placement(transformation(extent={{-70,-60},{-50,-40}}))); - Controls.OBC.CDL.Continuous.Sources.Pulse uMod( + Controls.OBC.CDL.Reals.Sources.Pulse uMod( amplitude=-1, width=0.7, period=200, offset=0) "heat pump operational mode input signal" annotation (Placement(transformation(extent={{-90,-30},{-70,-10}}))); - Controls.OBC.CDL.Continuous.Sources.Pulse pulse( + Controls.OBC.CDL.Reals.Sources.Pulse pulse( amplitude=1, width=0.7, period(displayUnit="s") = 200, @@ -81,14 +81,14 @@ model EquationFitReversible_CoolingClosedLoop extent={{-10,-10},{10,10}}, rotation=270, origin={80,-12}))); - Controls.OBC.CDL.Continuous.Sources.Pulse TSouEnt( + Controls.OBC.CDL.Reals.Sources.Pulse TSouEnt( amplitude=3, width=0.7, period=200, offset=25 + 273.15) "Source side entering water temperature" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); - Controls.OBC.CDL.Continuous.Sources.Pulse TLoaSet( + Controls.OBC.CDL.Reals.Sources.Pulse TLoaSet( y(final unit="K", displayUnit="degC"), amplitude=1, width=0.7, diff --git a/Buildings/Fluid/HeatPumps/Validation/EquationFitReversible_ScalingFactor.mo b/Buildings/Fluid/HeatPumps/Validation/EquationFitReversible_ScalingFactor.mo index 74ba41dbc22..319a0ac54cb 100644 --- a/Buildings/Fluid/HeatPumps/Validation/EquationFitReversible_ScalingFactor.mo +++ b/Buildings/Fluid/HeatPumps/Validation/EquationFitReversible_ScalingFactor.mo @@ -88,7 +88,7 @@ model EquationFitReversible_ScalingFactor Modelica.Blocks.Math.RealToInteger reaToInt "Real to integer conversion" annotation (Placement(transformation(extent={{-58,-90},{-38,-70}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp TLoaEntHea( + Controls.OBC.CDL.Reals.Sources.Ramp TLoaEntHea( height=4, duration(displayUnit="h") = 14400, offset=50 + 273.15, diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Decoupling.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Decoupling.mo index 7774dd89beb..b22ded96021 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Decoupling.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Decoupling.mo @@ -151,7 +151,7 @@ model Decoupling "Decoupling circuit with self-acting Delta-p control valve" redeclare final package Medium = Medium) "Pressure drop across bypass balancing valve" annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dp3Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dp3Set( y(final unit="Pa"), final k=dpBal3_nominal) "Pressure differential set point" diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/Load.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/Load.mo index a800ed59811..86c5920d56d 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/Load.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/Load.mo @@ -168,7 +168,7 @@ model Load "Model of a load on a hydronic circuit" "Controller for supply air temperature" annotation (Placement(transformation(extent={{50,50},{70,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Add TAirSupSet( + Buildings.Controls.OBC.CDL.Reals.Add TAirSupSet( y(final unit="K", displayUnit="degC")) "Compute set point as TAirEnt_nominal + u * (TAirLvg_nominal - TAirEnt_nominal)" annotation (Placement(transformation(extent={{14,50},{34,70}}))); @@ -243,7 +243,7 @@ model Load "Model of a load on a hydronic circuit" extent={{-10,10},{10,-10}}, rotation=0, origin={50,0}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Compute deltaT" annotation (Placement(transformation(extent={{70,-80},{90,-60}}))); Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow( @@ -276,20 +276,20 @@ model Load "Model of a load on a hydronic circuit" extent={{10,-10},{-10,10}}, rotation=0, origin={-50,-20}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Compute TAirLvg_nominal - TAirEnt_nominal" annotation (Placement( transformation( extent={{10,10},{-10,-10}}, rotation=90, origin={-30,102}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Compute u * (TAirLvg_nominal - TAirEnt_nominal)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-14,60}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirEntVal[3](final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TAirEntVal[3](final k= {TAirEnt_nominal,TAirEnt_nominal,TAirEntChg_nominal}) "Values of entering air temperature" annotation (Placement(transformation(extent={{-90,130},{-70,150}}))); @@ -301,7 +301,7 @@ model Load "Model of a load on a hydronic circuit" y(final unit="K", displayUnit="degC"), final nin=3) "Actual value of leaving air temperature" annotation (Placement(transformation(extent={{40,130},{20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirLvgVal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TAirLvgVal( final k=TAirLvgChg_nominal) "Values of leaving air temperature" annotation (Placement(transformation(extent={{90,130},{70,150}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialActivePrimary.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialActivePrimary.mo index 582d99e7097..0758465fe12 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialActivePrimary.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialActivePrimary.mo @@ -117,7 +117,7 @@ model PartialActivePrimary extent={{-10,10},{10,-10}}, rotation=0, origin={-60,-60}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT1(y(final unit="K")) + Buildings.Controls.OBC.CDL.Reals.Subtract dT1(y(final unit="K")) "Primary Delta-T" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialDecoupling.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialDecoupling.mo index 34a7c9a035d..b2bd22e9592 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialDecoupling.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialDecoupling.mo @@ -89,10 +89,10 @@ partial model PartialDecoupling extent={{-10,-10},{10,10}}, rotation=-90, origin={120,50}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dp2SetVal(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dp2SetVal(final k= dp2Set) "Pressure differential set point" annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset ctlPum2( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset ctlPum2( k=0.1, Ti=60, r=1e4, @@ -108,7 +108,7 @@ partial model PartialDecoupling extent={{-10,-10},{10,10}}, rotation=-90, origin={40,-70}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; 6, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6, 0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0,1; 22,0,0; 24,0,0], timeScale=3600) "Load modulating signal" annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); @@ -128,7 +128,7 @@ partial model PartialDecoupling annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={-100,60}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T1SetVal[3](final k={ + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T1SetVal[3](final k={ MediumLiq.T_default,TLiqSup_nominal,TLiqSupChg_nominal}) "Primary circuit temperature set point values" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialInjectionTwoWay.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialInjectionTwoWay.mo index 10390dc5480..819de36fef7 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialInjectionTwoWay.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/BaseClasses/PartialInjectionTwoWay.mo @@ -56,13 +56,13 @@ partial model PartialInjectionTwoWay extent={{-10,-10},{10,10}}, rotation=-90, origin={80,-70}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset ctlPum1( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset ctlPum1( k=0.1, Ti=60, r=1e4, y_reset=0) "Primary pump controller" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dp1SetVal(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dp1SetVal(final k= dp1Set) "Pressure differential set point" annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingMixing.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingMixing.mo index b06b8cb6024..dda2e487dbd 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingMixing.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingMixing.mo @@ -25,21 +25,21 @@ model DecouplingMixing reverseActing=false, y_reset=1) "PI controller for consumer circuit temperature reset" annotation (Placement(transformation(extent={{-104,180},{-84,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Line T2SetVar( + Buildings.Controls.OBC.CDL.Reals.Line T2SetVar( y(final unit="K", displayUnit="degC")) "Consumer circuit temperature set point (reset)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-50,190}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yValSet(k=0.9, y( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValSet(k=0.9, y( final unit="1")) "Valve opening set point" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-130,230}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1.0, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1.0, y( final unit="1")) "One" @@ -47,7 +47,7 @@ model DecouplingMixing extent={{-10,-10},{10,10}}, rotation=0, origin={-50,230}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(final k=0.0, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0.0, y( final unit="1")) "Zero" @@ -55,7 +55,7 @@ model DecouplingMixing extent={{-10,-10},{10,10}}, rotation=0, origin={-90,230}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2SetLim0(k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2SetLim0(k= TLiqEnt_nominal + 5, y(final unit="K", displayUnit="degC")) "Consumer circuit temperature limiting set point " @@ -64,7 +64,7 @@ model DecouplingMixing extent={{-10,-10},{10,10}}, rotation=0, origin={-130,190}))); - Buildings.Controls.OBC.CDL.Continuous.Max yValMax( + Buildings.Controls.OBC.CDL.Reals.Max yValMax( y(final unit="1")) "Maximum valve opening" annotation (Placement( @@ -72,7 +72,7 @@ model DecouplingMixing extent={{10,-10},{-10,10}}, rotation=0, origin={10,170}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2SetLim1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2SetLim1( final k=TLiqEnt_nominal, y(final unit="K", displayUnit="degC")) "Consumer circuit temperature design set point " diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingTemperature.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingTemperature.mo index 8ba8155b19a..e94337e8ba6 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingTemperature.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DecouplingTemperature.mo @@ -10,13 +10,13 @@ model DecouplingTemperature "Set to true to correct Delta-T set point for low load operation" annotation(Evaluate=true); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT( + Buildings.Controls.OBC.CDL.Reals.Subtract dT( y(final unit="K")) "Compute T1Ret-T2Ret" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={70,-40}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dTSetVal[3](final k={1, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dTSetVal[3](final k={1, if typ == Types.Control.Heating then 1 else -1,1}) "Delta-T set point values" annotation (Placement(transformation(extent={{100,-40},{120,-20}}))); @@ -35,7 +35,7 @@ model DecouplingTemperature final reverseActing=typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating) "Controller" annotation (Placement(transformation(extent={{130,-70},{150,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT2SupRet(y(final unit="K")) + Buildings.Controls.OBC.CDL.Reals.Subtract dT2SupRet(y(final unit="K")) "Compute T2Sup-T2Ret" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, @@ -46,13 +46,13 @@ model DecouplingTemperature Modelica.Blocks.Sources.RealExpression T2Sup(y=con.T2Sup.T) "Access T2Sup measurement from connection component" annotation (Placement(transformation(extent={{30,-124},{50,-104}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxDelT(y(final unit="K")) + Buildings.Controls.OBC.CDL.Reals.Max maxDelT(y(final unit="K")) "Compute max(T2Sup-T2Ret, dTSet) for cooling mode" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={110,-100}))); - Buildings.Controls.OBC.CDL.Continuous.Min minDelT(y(final unit="K")) + Buildings.Controls.OBC.CDL.Reals.Min minDelT(y(final unit="K")) "Compute min(T2Sup-T2Ret, dTSet) for heating mode" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DiversionOpenLoop.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DiversionOpenLoop.mo index 6a1b4db87ba..4d0fbb3c5de 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DiversionOpenLoop.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/DiversionOpenLoop.mo @@ -47,7 +47,7 @@ model DiversionOpenLoop "Model illustrating the operation of diversion circuits final TLiqEnt_nominal=TLiqEnt_nominal, final TLiqLvg_nominal=TLiqLvg_nominal, k=10) "Load" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - .Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fraLoa(k=1.0) + .Buildings.Controls.OBC.CDL.Reals.Sources.Constant fraLoa(k=1.0) "Load modulating signal" annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); ActiveNetworks.Diversion con1( @@ -87,7 +87,7 @@ model DiversionOpenLoop "Model illustrating the operation of diversion circuits redeclare final package Medium = MediumLiq) "Differential pressure" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - .Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ope( + .Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ope( table=[0,1,1; 1,0,1; 2,1,0; 3,0,0], extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, timeScale=100) "Valve opening signal" diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionThreeWay.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionThreeWay.mo index 78ce8238cb2..cc58e3bd0cd 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionThreeWay.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionThreeWay.mo @@ -41,7 +41,7 @@ model InjectionThreeWay final TLiqLvg_nominal=TLiqLvg_nominal) "Load" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6,0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0, 1; 22,0,0; 24,0,0], timeScale=3600) @@ -73,11 +73,11 @@ model InjectionThreeWay timeScale=3600, period=86400) "Operating mode (time schedule)" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable setOff(table=[0,0; 12, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable setOff(table=[0,0; 12, 0; 13,-5; 14,-7; 17,0; 24,0], timeScale=3600) "Offset applied to design supply temperature to compute set point" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter T2Set(final p= + Buildings.Controls.OBC.CDL.Reals.AddParameter T2Set(final p= TLiqEnt_nominal, y(final unit="K", displayUnit="degC")) "Consumer circuit temperature set point" annotation (Placement( transformation( diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayConstant.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayConstant.mo index 50f79ae284c..08a3577e560 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayConstant.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayConstant.mo @@ -55,7 +55,7 @@ model InjectionTwoWayConstant dp_nominal=dpPip_nominal) "Pipe pressure drop" annotation (Placement(transformation(extent={{70,50},{90,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2SetLim1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2SetLim1( final k=T2Set_nominal, y(final unit="K", displayUnit="degC")) "Consumer circuit temperature design set point " annotation (Placement( @@ -63,7 +63,7 @@ model InjectionTwoWayConstant extent={{-10,-10},{10,10}}, rotation=0, origin={-130,70}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; 6, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6, 0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0,1; 22,0,0; 24,0,0], timeScale=3600) "Load modulating signal" annotation (Placement(transformation(extent={{-140,170},{-120,190}}))); @@ -73,14 +73,14 @@ model InjectionTwoWayConstant reverseActing=false, y_reset=1) "PI controller for consumer circuit temperature reset" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Line T2SetVar( + Buildings.Controls.OBC.CDL.Reals.Line T2SetVar( y(final unit="K", displayUnit="degC")) if have_resT2 "Consumer circuit temperature set point (reset)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=0, origin={-50,110}))); - Buildings.Controls.OBC.CDL.Continuous.Max yValMax( + Buildings.Controls.OBC.CDL.Reals.Max yValMax( y(final unit="1")) "Maximum valve opening" annotation (Placement( @@ -88,7 +88,7 @@ model InjectionTwoWayConstant extent={{10,-10},{-10,10}}, rotation=0, origin={50,150}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yValSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yValSet( k=0.9, y(final unit="1")) "Valve opening set point" @@ -96,7 +96,7 @@ model InjectionTwoWayConstant extent={{-10,-10},{10,10}}, rotation=0, origin={-130,150}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1, y(final unit="1")) "One" @@ -104,7 +104,7 @@ model InjectionTwoWayConstant extent={{-10,-10},{10,10}}, rotation=0, origin={-50,150}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0, y(final unit="1")) "Zero" @@ -112,7 +112,7 @@ model InjectionTwoWayConstant extent={{-10,-10},{10,10}}, rotation=0, origin={-90,150}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2SetLim0( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2SetLim0( k=T2Set_nominal + (if con.typCtl == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then -10 else +5), y(final unit="K", displayUnit="degC")) "Consumer circuit temperature limiting set point " annotation (Placement( diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariable.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariable.mo index 9534ca6e328..25a3c1a91f2 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariable.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariable.mo @@ -30,7 +30,7 @@ model InjectionTwoWayVariable extent={{-10,-10},{10,10}}, rotation=-90, origin={140,40}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dp2SetVal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dp2SetVal( final k=dp2Set) "Pressure differential set point" annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); Controls.PIDWithOperatingMode ctlPum2( diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariableReturn.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariableReturn.mo index 264da102c02..7cfe925b572 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariableReturn.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/InjectionTwoWayVariableReturn.mo @@ -17,7 +17,7 @@ model InjectionTwoWayVariableReturn final TLiqEnt_nominal=TLiqEnt_nominal, final TLiqLvg_nominal=TLiqLvg_nominal) "Load with open loop control" annotation (Placement(transformation(extent={{210,-120},{230,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSupVal1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSupVal1( height=6, duration=16*3600, offset=TLiqEnt_nominal, @@ -56,7 +56,7 @@ model InjectionTwoWayVariableReturn extent={{-10,-10},{10,10}}, rotation=0, origin={250,-110}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fraLoa1(k=0.7) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fraLoa1(k=0.7) "Load modulating signal" annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant modOpe( diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/SingleMixing.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/SingleMixing.mo index db0f9e119df..af75552d7d3 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/SingleMixing.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/SingleMixing.mo @@ -37,7 +37,7 @@ model SingleMixing final TLiqLvg_nominal=TLiqLvg_nominal) "Load" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; 6, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6, 0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0,1; 22,0,0; 24,0,0], timeScale=3600) @@ -68,11 +68,11 @@ model SingleMixing timeScale=3600, period=86400) "Operating mode (time schedule)" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable setOff(table=[0,0; 9,0; + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable setOff(table=[0,0; 9,0; 15,-10; 16,-10; 17,0; 24,0], timeScale=3600) "Offset applied to design supply temperature to compute set point" annotation (Placement(transformation(extent={{-120,50},{-100,70}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter T2Set(final p= + Buildings.Controls.OBC.CDL.Reals.AddParameter T2Set(final p= TLiqEnt_nominal, y(final unit="K", displayUnit="degC")) "Consumer circuit temperature set point" annotation (Placement( transformation( diff --git a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/ThrottleOpenLoop.mo b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/ThrottleOpenLoop.mo index 36e255fe899..791af7a6e40 100644 --- a/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/ThrottleOpenLoop.mo +++ b/Buildings/Fluid/HydronicConfigurations/ActiveNetworks/Examples/ThrottleOpenLoop.mo @@ -54,7 +54,7 @@ model ThrottleOpenLoop final TLiqEnt_nominal=TLiqEnt_nominal, final TLiqLvg_nominal=TLiqLvg_nominal, k=10) "Load" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - .Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fraLoa(k=1) + .Buildings.Controls.OBC.CDL.Reals.Sources.Constant fraLoa(k=1) "Load modulating signal" annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); Throttle con1( @@ -91,19 +91,19 @@ model ThrottleOpenLoop redeclare final package Medium = MediumLiq) "Differential pressure" annotation (Placement(transformation(extent={{60,-30},{80,-50}}))); - .Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ope( + .Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ope( table=[0,1,1; 1,0,1; 2,1,0; 3,0,0], extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, timeScale=100) "Valve opening signal" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( k=1, Ti=1, r=1e4, xi_start=1) "Pump controller" annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpSetVal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpSetVal( final k=dp1Set) "Pressure differential set point" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/Components/Pump.mo b/Buildings/Fluid/HydronicConfigurations/Components/Pump.mo index b23004b3f0b..f55efe75b1a 100644 --- a/Buildings/Fluid/HydronicConfigurations/Components/Pump.mo +++ b/Buildings/Fluid/HydronicConfigurations/Components/Pump.mo @@ -184,21 +184,21 @@ model Pump "Container class for circulating pumps" final m_flow_nominal=m_flow_nominal) "Volume flow rate" annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaHea( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter scaHea( final k=dp_nominal) if typ<>Buildings.Fluid.HydronicConfigurations.Types.Pump.None "Scale control input to design head" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={-20,30}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaSpe( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter scaSpe( final k=per.speed_nominal) if typ<>Buildings.Fluid.HydronicConfigurations.Types.Pump.None "Scale control input to design speed" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={20,30}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter scaFlo( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter scaFlo( final k=m_flow_nominal) if typ<>Buildings.Fluid.HydronicConfigurations.Types.Pump.None "Scale control input to design flow rate" annotation ( @@ -206,16 +206,16 @@ model Pump "Container class for circulating pumps" extent={{-10,-10},{10,10}}, rotation=-90, origin={60,30}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0.0) "Zero" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi if typ<>Buildings.Fluid.HydronicConfigurations.Types.Pump.None "Switch on/off" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={0,60}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant One(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant One(final k=1.0) if typ==Buildings.Fluid.HydronicConfigurations.Types.Pump.NoVariableInput "one" annotation (Placement(transformation(extent={{60,70},{40,90}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/Controls/PIDWithOperatingMode.mo b/Buildings/Fluid/HydronicConfigurations/Controls/PIDWithOperatingMode.mo index 0186ed0dbd1..278f9a71625 100644 --- a/Buildings/Fluid/HydronicConfigurations/Controls/PIDWithOperatingMode.mo +++ b/Buildings/Fluid/HydronicConfigurations/Controls/PIDWithOperatingMode.mo @@ -68,7 +68,7 @@ block PIDWithOperatingMode "PID controller with operating mode input" extent={{-20,-20},{20,20}}, rotation=90, origin={-60,-120}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conPID( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conPID( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -87,28 +87,28 @@ block PIDWithOperatingMode "PID controller with operating mode input" Buildings.Controls.OBC.CDL.Integers.Change cha "Monitor change of signal value" annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulSet + Buildings.Controls.OBC.CDL.Reals.Multiply mulSet "Multiply input with mapping coefficient" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); Buildings.Controls.OBC.CDL.Routing.RealExtractor extIndSig(final nin=3) "Select mapping coefficient based on operating mode" annotation (Placement(transformation(extent={{-30,70},{-10,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant map_ms[3](k={0,1,-1}) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant map_ms[3](k={0,1,-1}) "Map set point and measured values depending on actual operating mode" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply mulMea + Buildings.Controls.OBC.CDL.Reals.Multiply mulMea "Multiply input with mapping coefficient" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=90, origin={20,-50}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi annotation (Placement(transformation(extent={{60,-10},{80,10}}))); Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold isDis(t=Controls.OperatingModes.disabled) "Returns true if disabled" annotation (Placement(transformation(extent={{10,20},{30,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disVal(k=y_neutral) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant disVal(k=y_neutral) "Value when disabled" annotation (Placement(transformation(extent={{10,70},{30,90}}))); Buildings.Controls.OBC.CDL.Integers.AddParameter addPar(final p=1) @@ -194,8 +194,8 @@ equation Documentation(info="

              This block adds the following features to - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset. + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset.

              • @@ -215,16 +215,16 @@ VFDs at minimum speed, etc.
              • When operated under the mode enabled the controller behaves exactly as - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset. + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset. Furthermore, the controller output is reset to y_reset at enable time.
              • When operated under the mode heating the controller behaves as - -Buildings.Controls.OBC.CDL.Continuous.PIDWithReset + +Buildings.Controls.OBC.CDL.Reals.PIDWithReset except that the sign of the measured and set point variables is reversed so that the controller may for instance provide a heating function if it was originally configured for a cooling function. diff --git a/Buildings/Fluid/HydronicConfigurations/Controls/Validation/PIDWithOperatingMode.mo b/Buildings/Fluid/HydronicConfigurations/Controls/Validation/PIDWithOperatingMode.mo index 77d1dec95da..1388a912252 100644 --- a/Buildings/Fluid/HydronicConfigurations/Controls/Validation/PIDWithOperatingMode.mo +++ b/Buildings/Fluid/HydronicConfigurations/Controls/Validation/PIDWithOperatingMode.mo @@ -9,10 +9,10 @@ model PIDWithOperatingMode "Test model for PID controller with operating mode" y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,30},{40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes1 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,30},{80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant resVal(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resVal(k=1) "Reset value" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); Buildings.Fluid.HydronicConfigurations.Controls.PIDWithOperatingMode limPIPar( @@ -23,7 +23,7 @@ model PIDWithOperatingMode "Test model for PID controller with operating mode" y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes3 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes3 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( diff --git a/Buildings/Fluid/HydronicConfigurations/Examples/TwoWayOpenLoop.mo b/Buildings/Fluid/HydronicConfigurations/Examples/TwoWayOpenLoop.mo index 6dc378806b4..20aa8d6c530 100644 --- a/Buildings/Fluid/HydronicConfigurations/Examples/TwoWayOpenLoop.mo +++ b/Buildings/Fluid/HydronicConfigurations/Examples/TwoWayOpenLoop.mo @@ -23,7 +23,7 @@ model TwoWayOpenLoop nPorts=7) "Pressure boundary condition at return" annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}))); - .Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ope(duration=100) + .Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ope(duration=100) "Valve opening signal" annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); FixedResistances.PressureDrop ter50( diff --git a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/BaseClasses/PartialPassivePrimary.mo b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/BaseClasses/PartialPassivePrimary.mo index f8dd76ac420..0bae6e2413c 100644 --- a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/BaseClasses/PartialPassivePrimary.mo +++ b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/BaseClasses/PartialPassivePrimary.mo @@ -84,7 +84,7 @@ model PartialPassivePrimary extent={{-10,10},{10,-10}}, rotation=0, origin={-60,-60}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT1(y(final unit="K")) + Buildings.Controls.OBC.CDL.Reals.Subtract dT1(y(final unit="K")) "Primary Delta-T" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, diff --git a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/DualMixing.mo b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/DualMixing.mo index 1e83946fac6..bd58395660b 100644 --- a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/DualMixing.mo +++ b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/DualMixing.mo @@ -59,15 +59,15 @@ model DualMixing timeScale=3600, period=86400) "Operating mode (time schedule)" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; 6, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6, 0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0,1; 22,0,0; 24,0,0], timeScale=3600) "Load modulating signal" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2Set( y(final unit="K", displayUnit="degC"), final k=TLiqEnt_nominal) "Consumer circuit temperature set point" annotation (Placement(transformation(extent={{-120,-40},{-100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T1Set( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T1Set( y(final unit="K", displayUnit="degC"), final k=TLiqSup_nominal) "Primary circuit temperature set point" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixing.mo b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixing.mo index a7aedc68bc6..55c9721a21b 100644 --- a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixing.mo +++ b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixing.mo @@ -71,15 +71,15 @@ model SingleMixing "Model illustrating the operation of single mixing circuits" timeScale=3600, period=86400) "Operating mode (time schedule)" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable fraLoa(table=[0,0,0; 6, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable fraLoa(table=[0,0,0; 6, 0,0; 6.1,1,1; 8,1,1; 9,1,0; 14,0.5,0; 14.5,0,0; 16,0,0; 17,0,1; 21,0,1; 22,0,0; 24,0,0], timeScale=3600) "Load modulating signal" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable setOff(table=[0,0; 10, + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable setOff(table=[0,0; 10, 0; 13,-8; 13,0; 18,0; 22,+5; 22,0; 24,0], timeScale=3600) "Offset applied to design supply temperature to compute set point" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Add T2Set(y(final unit="K", + Buildings.Controls.OBC.CDL.Reals.Add T2Set(y(final unit="K", displayUnit="degC")) "Consumer circuit temperature set point" annotation (Placement( transformation( @@ -93,11 +93,11 @@ model SingleMixing "Model illustrating the operation of single mixing circuits" extent={{-10,10},{10,-10}}, rotation=0, origin={-80,0}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T2SetVal[3](final k={ + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2SetVal[3](final k={ MediumLiq.T_default,TLiqEnt_nominal,TLiqEntChg_nominal}) "Consumer circuit temperature set point values" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant T1SetVal[3](final k={ + Buildings.Controls.OBC.CDL.Reals.Sources.Constant T1SetVal[3](final k={ MediumLiq.T_default,TLiqSup_nominal,TLiqSupChg_nominal}) "Primary circuit temperature set point values" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); diff --git a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixingOpenLoop.mo b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixingOpenLoop.mo index f0143dafef9..eff98ee362b 100644 --- a/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixingOpenLoop.mo +++ b/Buildings/Fluid/HydronicConfigurations/PassiveNetworks/Examples/SingleMixingOpenLoop.mo @@ -66,10 +66,10 @@ model SingleMixingOpenLoop Buildings.Controls.OBC.CDL.Integers.Sources.Constant mode(k=1) "Operating mode" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fraLoa(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fraLoa(k=1) "Load modulating signal" annotation (Placement(transformation(extent={{-120,110},{-100,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable ope( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ope( table=[0,1,1; 1,0,1], extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, timeScale=100) "Valve opening signal" diff --git a/Buildings/Fluid/SolarCollectors/Controls/CollectorPump.mo b/Buildings/Fluid/SolarCollectors/Controls/CollectorPump.mo index a40efbdd0e8..a7a931e0b37 100644 --- a/Buildings/Fluid/SolarCollectors/Controls/CollectorPump.mo +++ b/Buildings/Fluid/SolarCollectors/Controls/CollectorPump.mo @@ -47,19 +47,19 @@ model CollectorPump final azi=azi) "Direct solar irradiation on a tilted surface" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add HTotTil( + Buildings.Controls.OBC.CDL.Reals.Add HTotTil( u1(final unit="W/m2"), u2(final unit="W/m2"), y(final unit="W/m2")) "Total irradiation on tilted surface" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=0, final uHigh=delQ_flow) annotation (Placement(transformation(extent={{60,-10},{80,10}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference between incident solar and required incident to compensate thermal losses" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); equation diff --git a/Buildings/Fluid/Storage/Ice/BaseClasses/Examples/NormalizedHeatFlowRate.mo b/Buildings/Fluid/Storage/Ice/BaseClasses/Examples/NormalizedHeatFlowRate.mo index d6d58e0c22e..b2c9d10530e 100644 --- a/Buildings/Fluid/Storage/Ice/BaseClasses/Examples/NormalizedHeatFlowRate.mo +++ b/Buildings/Fluid/Storage/Ice/BaseClasses/Examples/NormalizedHeatFlowRate.mo @@ -23,7 +23,7 @@ model NormalizedHeatFlowRate "Example to calculate qStar" height=-0.5) "lmtd start" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.75) + Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.75) "Switch the change between charging and discharging mode" annotation (Placement(transformation(extent={{-10,30},{10,50}}))); Controls.OBC.CDL.Logical.Not not1 diff --git a/Buildings/Fluid/Storage/Ice/BaseClasses/NormalizedHeatFlowRate.mo b/Buildings/Fluid/Storage/Ice/BaseClasses/NormalizedHeatFlowRate.mo index 81131f5b4a8..389b2598054 100644 --- a/Buildings/Fluid/Storage/Ice/BaseClasses/NormalizedHeatFlowRate.mo +++ b/Buildings/Fluid/Storage/Ice/BaseClasses/NormalizedHeatFlowRate.mo @@ -42,7 +42,7 @@ protected final coeff=coeDisCha, final dt=dtDisCha) "q* for discharging mode" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract qSta + Buildings.Controls.OBC.CDL.Reals.Subtract qSta "Effective normalized heat flow rate" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); diff --git a/Buildings/Fluid/Storage/Ice/BaseClasses/Tank.mo b/Buildings/Fluid/Storage/Ice/BaseClasses/Tank.mo index 8ba1f8b7d08..e0dcfd76e45 100644 --- a/Buildings/Fluid/Storage/Ice/BaseClasses/Tank.mo +++ b/Buildings/Fluid/Storage/Ice/BaseClasses/Tank.mo @@ -47,12 +47,12 @@ model Tank "Block to compute the tank heat transfer" final E_nominal=E_nominal) "State of charge calculation" annotation (Placement(transformation(extent={{30,-80},{50,-60}}))); - Controls.OBC.CDL.Continuous.LessThreshold canFreeze( + Controls.OBC.CDL.Reals.LessThreshold canFreeze( final t=per.TFre - dTSmall, final h=dTSmall/2) "Outputs true if temperatures allow ice to be produced" annotation (Placement(transformation(extent={{-50,0},{-30,20}}))); - Controls.OBC.CDL.Continuous.GreaterThreshold canMelt( + Controls.OBC.CDL.Reals.GreaterThreshold canMelt( final t=per.TFre + dTSmall, final h=dTSmall/2) "Outputs true if temperature allows tank to be melted" diff --git a/Buildings/HeatTransfer/Windows/Validation/WindowSteadyState.mo b/Buildings/HeatTransfer/Windows/Validation/WindowSteadyState.mo index 8def70ba92c..402e579eff8 100644 --- a/Buildings/HeatTransfer/Windows/Validation/WindowSteadyState.mo +++ b/Buildings/HeatTransfer/Windows/Validation/WindowSteadyState.mo @@ -16,7 +16,7 @@ model WindowSteadyState winDirSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HInfHorSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HSou=Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor)); - Controls.OBC.CDL.Continuous.Sources.Constant HSol( + Controls.OBC.CDL.Reals.Sources.Constant HSol( k=0) "Solar irradiation" annotation (Placement(transformation(extent={{-92,-30},{-72,-10}}))); equation diff --git a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo index 8e25a846c1d..112b09cc73f 100644 --- a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo +++ b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/Guideline36.mo @@ -32,7 +32,7 @@ model Guideline36 yDam_VOutDes_maxSpe=0.04) "VAV controller" annotation (Placement(transformation(extent={{-120,-28},{-80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysChiPla( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysChiPla( uLow=-1, uHigh=0) "Hysteresis with delay to switch on cooling" @@ -48,7 +48,7 @@ model Guideline36 Buildings.Controls.OBC.CDL.Integers.Sources.Constant demLim(final k=0) "Cooling and heating demand imit level" annotation (Placement(transformation(extent={{-180,-50},{-160,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooWarTim(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooWarTim(final k=0) "Cooldown and warm-up time" annotation (Placement(transformation(extent={{-180,40},{-160,60}}))); diff --git a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo index 58ab5ccd079..92a7f0c427a 100644 --- a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo +++ b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/BaseClasses/ZoneWithAHUG36.mo @@ -79,7 +79,7 @@ block ZoneWithAHUG36 QCoo_flow_nominal=QCoo_flow_nominal, TSupChi_nominal=TSupChi_nominal) "HVAC system" annotation (Placement(transformation(extent={{20,-28},{60,12}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysChiPla1(uLow=-1, uHigh=0) + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysChiPla1(uLow=-1, uHigh=0) "Hysteresis with delay to switch on cooling" annotation (Placement(transformation(extent={{-50,-80},{-30,-60}}))); Modelica.Blocks.Math.Feedback errTRooCoo1 @@ -95,7 +95,7 @@ block ZoneWithAHUG36 annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSupChiConst( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSupChiConst( final k=TSupChi_nominal) "Set point for chiller temperature" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); diff --git a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo index a07be3485e5..ddec2675867 100644 --- a/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo +++ b/Buildings/Obsolete/Air/Systems/SingleZone/VAV/Examples/OptimalStart/Guideline36Spring.mo @@ -19,10 +19,10 @@ model Guideline36Spring Buildings.Controls.SetPoints.OccupancySchedule occSch(occupancy=3600*{8,18}) "Occupancy schedule" annotation (Placement(transformation(extent={{-60,-34},{-40,-14}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetHeaOn(k=20 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOn(k=20 + 273.15) "Zone heating setpoint during occupied period" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetCooOn(k=24 + 273.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOn(k=24 + 273.15) "Zone cooling setpoint during occupied time" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); Buildings.Controls.OBC.Utilities.OptimalStart optStaCoo( @@ -32,7 +32,7 @@ model Guideline36Spring thrOptOn(displayUnit="s")) "Optimal start for cooling" annotation (Placement(transformation(extent={{-20,20},{0,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=0) "No optimal start" annotation (Placement(transformation(extent={{-20,-78},{0,-58}}))); Buildings.Obsolete.Air.Systems.SingleZone.VAV.Examples.OptimalStart.BaseClasses.ZoneWithAHUG36 diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Controller.mo index 13abf355a97..e1cd387bd65 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Controller.mo @@ -579,7 +579,7 @@ block Controller annotation (Placement(transformation(extent={{200,-210},{240,-170}}), iconTransformation(extent={{200,-320},{240,-280}}))); - Buildings.Controls.OBC.CDL.Continuous.Average TZonSetPoiAve + Buildings.Controls.OBC.CDL.Reals.Average TZonSetPoiAve "Average of all zone set points" annotation (Placement(transformation(extent={{-160,270},{-140,290}}))); @@ -666,7 +666,7 @@ block Controller annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Divide VOut_flow_normalized( + Buildings.Controls.OBC.CDL.Reals.Divide VOut_flow_normalized( u1(final unit="m3/s"), u2(final unit="m3/s"), y(final unit="1")) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Controller.mo index 5a971ed83e0..16c75529bba 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Controller.mo @@ -239,19 +239,19 @@ block Controller "Multi zone VAV AHU economizer control sequence" annotation (Placement(transformation(extent={{80,-20},{100,0}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movAve(final delta=delta) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movAve(final delta=delta) "Moving average of outdoor air flow measurement, normalized by design minimum outdoor airflow rate" annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Min outDamMaxFre + Buildings.Controls.OBC.CDL.Reals.Min outDamMaxFre "Maximum control signal for outdoor air damper due to freeze protection" annotation (Placement(transformation(extent={{120,-50},{140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Max retDamMinFre + Buildings.Controls.OBC.CDL.Reals.Max retDamMinFre "Minimum position for return air damper due to freeze protection" annotation (Placement(transformation(extent={{120,30},{140,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix(k=0) if not use_TMix + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noTMix(k=0) if not use_TMix "Ignore max evaluation if there is no mixed air temperature sensor" annotation (Placement(transformation(extent={{76,36},{96,56}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix1(k=1) if not use_TMix + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noTMix1(k=1) if not use_TMix "Ignore min evaluation if there is no mixed air temperature sensor" annotation (Placement(transformation(extent={{80,-56},{100,-36}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo index ef5cb52899c..46cbe46b13c 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Enable.mo @@ -143,31 +143,31 @@ protected final k=false) if not use_enthalpy "Deactivates outdoor air enthalpy condition if there is no enthalpy sensor" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 if use_enthalpy "Add block determines difference between hOut and hOutCut" annotation (Placement(transformation(extent={{-140,160},{-120,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Add block determines difference between TOut and TOutCut" annotation (Placement(transformation(extent={{-140,240},{-120,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutTem( final uLow=TOutHigLimCutLow, final uHigh=TOutHigLimCutHig) "Outdoor air temperature hysteresis for both fixed and differential dry bulb temperature cutoff conditions" annotation (Placement(transformation(extent={{-100,240},{-80,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutEnt( final uLow=hOutHigLimCutLow, final uHigh=hOutHigLimCutHig) if use_enthalpy "Outdoor air enthalpy hysteresis for both fixed and differential enthalpy cutoff conditions" annotation (Placement(transformation(extent={{-100,160},{-80,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch outDamSwitch "Set maximum OA damper position to minimum at disable (after a given time delay)" annotation (Placement(transformation(extent={{62,-60},{82,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamSwitch "Set minimum RA damper position to maximum at disable" + Buildings.Controls.OBC.CDL.Reals.Switch retDamSwitch "Set minimum RA damper position to maximum at disable" annotation (Placement(transformation(extent={{-40,-162},{-20,-142}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch maxRetDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch maxRetDamSwitch "Keep maximum RA damper position at physical maximum for a short time period after disable signal" annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minRetDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch minRetDamSwitch "Keep minimum RA damper position at physical maximum for a short time period after disable" annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); Buildings.Controls.OBC.CDL.Logical.Nor nor1 "Logical nor" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits.mo index 827b26d13a6..1ffe272f255 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Limits.mo @@ -112,7 +112,7 @@ block Limits annotation (Placement(transformation(extent={{180,-110},{220,-70}}), iconTransformation(extent={{100,-100},{140,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset damLimCon( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset damLimCon( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -125,48 +125,48 @@ block Limits protected parameter Real yMin=0 "Lower limit of control loop signal"; parameter Real yMax=1 "Upper limit of control loop signal"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhyPosMin) "Physically fixed minimum position of the outdoor air damper. This is the initial position of the economizer damper" annotation (Placement(transformation(extent={{-160,70},{-140,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physically fixed maximum position of the outdoor air damper." annotation (Placement(transformation(extent={{-160,30},{-140,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMinSig( final k=retDamPhyPosMin) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhyPosMax) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-160,-50},{-140,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSigLim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSigLim( final k=yMin) "Equals minimum controller output signal" annotation (Placement(transformation(extent={{-100,200},{-80,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSigLim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSigLim( final k=yMax) "Equals maximum controller output signal" annotation (Placement(transformation(extent={{-20,200},{0,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sigFraForOutDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sigFraForOutDam( final k=uRetDamMin) "Equals the fraction of the control loop signal below which the outdoor air damper limit gets modulated and above which the return air damper limit gets modulated" annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minOutDam( + Buildings.Controls.OBC.CDL.Reals.Line minOutDam( final limitBelow=true, final limitAbove=true) "Linear mapping of the outdoor air damper position to the control signal" annotation (Placement(transformation(extent={{120,140},{140,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minRetDam( + Buildings.Controls.OBC.CDL.Reals.Line minRetDam( final limitBelow=true, final limitAbove=true) "Linear mapping of the return air damper position to the control signal" annotation (Placement(transformation(extent={{120,100},{140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwitch + Buildings.Controls.OBC.CDL.Reals.Switch retDamPosMinSwitch "A switch to deactivate the return air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDamPosMaxSwitch + Buildings.Controls.OBC.CDL.Reals.Switch outDamPosMaxSwitch "A switch to deactivate the outdoor air damper minimal outdoor airflow control" annotation (Placement(transformation(extent={{40,10},{60,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulation.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulation.mo index 2bd24d08145..341f38ff971 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulation.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Modulation.mo @@ -71,32 +71,32 @@ block Modulation iconTransformation(extent={{100,40},{140,80}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMinLimSig( final k=uMin) "Minimal control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-60,-32},{-40,-12}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMaxLimSig( final k=uOutDamMax) "Maximum control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-100,-60},{-80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamConMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamConMinLimSig( final k=uRetDamMin) "Minimal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-80,68},{-60,88}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamMaxLimSig( final k=uMax) "Maximal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line outDamPos( + Buildings.Controls.OBC.CDL.Reals.Line outDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( + Buildings.Controls.OBC.CDL.Reals.Line retDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min "Overwrite due to freeze protection" + Buildings.Controls.OBC.CDL.Reals.Min min "Overwrite due to freeze protection" annotation (Placement(transformation(extent={{60,-70},{80,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max "Overwrite due to freeze protection" + Buildings.Controls.OBC.CDL.Reals.Max max "Overwrite due to freeze protection" annotation (Placement(transformation(extent={{60,50},{80,70}}))); equation diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo index 7ad020746a5..ad4c19b52bb 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta.mo @@ -15,34 +15,34 @@ model Enable_FreProSta enaDis "Multi zone VAV AHU enable disable sequence" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "OA temperature high limit cutoff" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-120},{-90,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMax( final k=1) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMax( final k=0.8) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-60},{-90,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMin( final k=0) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-110,-90},{-90,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFanSta(k=true) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo index 970e7147832..c483001e783 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo @@ -2,10 +2,10 @@ within Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economi model Enable_TOut_hOut "Model validates economizer disable in case outdoor air conditions are above cutoff" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut1( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid TOut( @@ -43,33 +43,33 @@ protected final quantity="SpecificEnergy")=65100 "Outdoor air enthalpy high limit cutoff"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-240,80},{-220,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-240,118},{-220,138}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-80},{-220,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-120},{-220,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMax( final k=0.8) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-160},{-140,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMin( final k=0) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-200},{-140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMax( final k=1) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-160,-120},{-140,-100}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_LoopDisable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_LoopDisable.mo index 65c3db329a2..89a32939d4c 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_LoopDisable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_LoopDisable.mo @@ -2,15 +2,15 @@ within Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economi model Limits_LoopDisable "Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=VOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-200,20},{-180,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet1_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet1_flow( final k=VOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet2_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet2_flow( final k=VOutSet_flow) "Outdoor airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{80,20},{100,40}}))); @@ -31,19 +31,19 @@ model Limits_LoopDisable "Freeze protection stage is 2" annotation (Placement(transformation(extent={{80,-100},{100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-200,60},{-180,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut1_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut1_flow( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut2_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut2_flow( final duration=1800, final offset=minVOutSet_flow, final height=incVOutSet_flow) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_VOut_flow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_VOut_flow.mo index 4a819ae5092..b8eac457f63 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_VOut_flow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Limits_VOut_flow.mo @@ -2,11 +2,11 @@ within Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economi model Limits_VOut_flow "Validation model for the multi zone VAV AHU minimum outdoor air control - damper position limits" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( k=minVOutSet_flow) "Outdoor volumetric airflow rate setpoint, 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( duration=1800, offset=VOutMin_flow, height=incVOutSet_flow) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo index 14bb7de425c..1a049619be6 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo @@ -6,22 +6,22 @@ model Modulation_TSup mod "Economizer modulation sequence" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup( final duration=900, final height=2, final offset=-1) "Control signal for supply air temperature loop" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Outdoor air damper minimum position" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(final k=0.8) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax(final k=0.8) "Outdoor air damper maximum position" annotation (Placement(transformation(extent={{-80,16},{-60,36}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMin(final k=0.2) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMin(final k=0.2) "Return air damper minimum position" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMax(final k=0.6) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMax(final k=0.6) "Return air damper maximum position" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); @@ -29,10 +29,10 @@ model Modulation_TSup modFre "Economizer modulation sequence if the dampers positions prevent freezing at the mixed air" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMaxFre(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMaxFre(final k=0) "Outdoor damper if freeze protection is on" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPosMinFre(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPosMinFre(final k=1) "Return damper position if freeze protection is on" annotation (Placement(transformation(extent={{4,-10},{24,10}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo index 1c6d810121a..9a247769149 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Disable.mo @@ -72,33 +72,33 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 40000) "Outdoor air enthalpy is below the cutoff" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 30) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, example assumes 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final height=incVOutSet_flow, final offset=VOutMin_flow, final duration=1800) "Measured outdoor air volumetric airflow" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup( final duration=1800, final height=1, final offset=0) "Supply air temperature control signal" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1( amplitude=20, freqHz=1/1800, offset=272.15, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo index d1f4aff4fa7..fcc62e2b45b 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo @@ -50,32 +50,32 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 10000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 5) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "OA temperature high limit cutoff" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TMixMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TMixMea( final k=303.15) "Measured mixed air temperature above cutoff" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSet_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSet_flow( final k=minVOutSet_flow) "Outdoor airflow rate setpoint, example assumes 15cfm/occupant and 100 occupants" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( final offset=VOutMin_flow, final duration=900, final height=incVOutSet_flow) "Measured outdoor air volumetric airflow" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup( final duration=1800, final height=1, final offset=0) "Supply air temperature control signal" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ExhaustDamper.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ExhaustDamper.mo index 84c04974a48..46b3832c702 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ExhaustDamper.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ExhaustDamper.mo @@ -28,34 +28,34 @@ block ExhaustDamper annotation (Placement(transformation(extent={{80,-20},{120,20}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea(delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract conErr( + Buildings.Controls.OBC.CDL.Reals.Subtract conErr( u1(final unit="Pa", displayUnit="Pa"), u2(final unit="Pa", displayUnit="Pa"), y(final unit="Pa", displayUnit="Pa")) "Control error" annotation (Placement(transformation(extent={{-24,50},{-4,70}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, final r=dpBuiSet) "Building static pressure controller" annotation (Placement(transformation(extent={{20,50},{40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Check if exhaust damper should be activated" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerDam( final k=0) "Close damper when disabled" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi1( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1( final k=0) "Zero constant" annotation (Placement(transformation(extent={{0,10},{20,30}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/AHU.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/AHU.mo index 8587b896a8b..4942ca0e66a 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/AHU.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/AHU.mo @@ -112,52 +112,52 @@ block AHU "Output outdoor airflow related calculations at the AHU level" iconTransformation(extent={{100,-100},{140,-60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Divide outAirFra + Buildings.Controls.OBC.CDL.Reals.Divide outAirFra "System outdoor air fraction" annotation (Placement(transformation(extent={{-120,-20},{-100,0}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=1) "System outdoor air flow fraction plus 1" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sysVenEff + Buildings.Controls.OBC.CDL.Reals.Subtract sysVenEff "Current system ventilation efficiency" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide effMinOutAirInt + Buildings.Controls.OBC.CDL.Reals.Divide effMinOutAirInt "Effective minimum outdoor air setpoint" annotation (Placement(transformation(extent={{100,10},{120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide occDivFra + Buildings.Controls.OBC.CDL.Reals.Divide occDivFra "Occupant diversity fraction" annotation (Placement(transformation(extent={{-120,180},{-100,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Add unCorOutAirInk + Buildings.Controls.OBC.CDL.Reals.Add unCorOutAirInk "Uncorrected outdoor air intake" annotation (Placement(transformation(extent={{0,140},{20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro "Product of inputs" + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Product of inputs" annotation (Placement(transformation(extent={{-60,160},{-40,180}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter aveOutAirFra( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter aveOutAirFra( final k=1/VPriSysMax_flow) "Average outdoor air fraction" annotation (Placement(transformation(extent={{60,120},{80,140}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=1) "Average outdoor air flow fraction plus 1" annotation (Placement(transformation(extent={{120,120},{140,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide desOutAirInt + Buildings.Controls.OBC.CDL.Reals.Divide desOutAirInt "Design system outdoor air intake" annotation (Placement(transformation(extent={{60,70},{80,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min + Buildings.Controls.OBC.CDL.Reals.Min min "Minimum outdoor airflow rate should not be more than designed outdoor airflow rate" annotation (Placement(transformation(extent={{180,20},{200,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Min sysUncOutAir + Buildings.Controls.OBC.CDL.Reals.Min sysUncOutAir "Uncorrected outdoor air rate should not be higher than its design value" annotation (Placement(transformation(extent={{-180,0},{-160,20}}))); @@ -166,7 +166,7 @@ protected "Occupied mode index" annotation (Placement(transformation(extent={{-180,-230},{-160,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant peaSysPopulation( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant peaSysPopulation( final k=peaSysPop) "Peak system population" annotation (Placement(transformation(extent={{-180,210},{-160,230}}))); @@ -178,16 +178,16 @@ protected Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" annotation (Placement(transformation(extent={{120,-150},{140,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant smaSysEff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant smaSysEff( final k=1E-4) "Set system ventilation efficiency to small value to avoid division by zero" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide norVOutMin + Buildings.Controls.OBC.CDL.Reals.Divide norVOutMin "Normalization for minimum outdoor air flow rate" annotation (Placement(transformation(extent={{180,-60},{200,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Max sysVenEffNonZero + Buildings.Controls.OBC.CDL.Reals.Max sysVenEffNonZero "Current system ventilation efficiency, bounded away from zero" annotation (Placement(transformation(extent={{0,-20},{20,0}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/SumZone.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/SumZone.mo index 182d4d2f75f..ff44546cec7 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/SumZone.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/SumZone.mo @@ -122,41 +122,41 @@ block SumZone iconTransformation(extent={{100,-110},{140,-70}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MultiSum sysUncOutAir( + Buildings.Controls.OBC.CDL.Reals.MultiSum sysUncOutAir( final nin=numZon) "Uncorrected outdoor airflow" annotation (Placement(transformation(extent={{-10,-60},{10,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sysPriAirRate( + Buildings.Controls.OBC.CDL.Reals.MultiSum sysPriAirRate( final nin=numZon) "System primary airflow rate" annotation (Placement(transformation(extent={{-10,-130},{10,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesZonPop( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumDesZonPop( final nin=numZon) "Sum of the design zone population for all zones" annotation (Placement(transformation(extent={{-10,110},{10,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesBreZonPop( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumDesBreZonPop( final nin=numZon) "Sum of the design breathing zone flow rate for population component" annotation (Placement(transformation(extent={{-10,80},{10,100}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumDesBreZonAre( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumDesBreZonAre( final nin=numZon) "Sum of the design breathing zone flow rate for area component" annotation (Placement(transformation(extent={{-10,50},{10,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract zonVenEff[numZon] + Buildings.Controls.OBC.CDL.Reals.Subtract zonVenEff[numZon] "Zone ventilation efficiency" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin desSysVenEff( + Buildings.Controls.OBC.CDL.Reals.MultiMin desSysVenEff( final nin=numZon) "Design system ventilation efficiency" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax maxPriOutAirFra( + Buildings.Controls.OBC.CDL.Reals.MultiMax maxPriOutAirFra( final nin=numZon) "Maximum zone outdoor air fraction" annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Validation/OutdoorAirFlow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Validation/OutdoorAirFlow.mo index c74ae193de3..bb9f01d798a 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Validation/OutdoorAirFlow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Validation/OutdoorAirFlow.mo @@ -37,7 +37,7 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{140,-70},{160,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp numOfOcc2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp numOfOcc2( duration=3600, height=3) "Occupant number in zone 2" @@ -45,7 +45,7 @@ protected Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{-220,170},{-200,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp numOfOcc3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp numOfOcc3( duration=3600, height=3, startTime=900) "Occupant number in zone 3" @@ -59,7 +59,7 @@ protected Buildings.Controls.OBC.CDL.Logical.Sources.Pulse winSta1(period=3600) "Status of windows" annotation (Placement(transformation(extent={{-220,-140},{-200,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp numOfOcc4( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp numOfOcc4( duration=3600, startTime=900, height=2) "Occupant number" @@ -67,23 +67,23 @@ protected Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3 "Convert real to integer" annotation (Placement(transformation(extent={{-220,-90},{-200,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon( height=6, offset=280.15, duration=3600) "Measured zone temperature" annotation (Placement(transformation(extent={{-260,130},{-240,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( height=4, duration=3600, offset=281.15) "Terminal unit discharge air temperature" annotation (Placement(transformation(extent={{-220,110},{-200,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonPriFloRat(k=0.1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonPriFloRat(k=0.1) "Measured primary flow rate at VAV box" annotation (Placement(transformation(extent={{-260,80},{-240,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonPriFloRat1(k=0.12) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonPriFloRat1(k=0.12) "Measured primary flow rate at VAV box" annotation (Placement(transformation(extent={{-260,-40},{-240,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonPriFloRat2(k=0.09) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonPriFloRat2(k=0.09) "Measured primary flow rate at VAV box" annotation (Placement(transformation(extent={{-260,-170},{-240,-150}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Zone.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Zone.mo index d0c08c058d1..aff525f395d 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Zone.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/OutdoorAirFlow/Zone.mo @@ -161,45 +161,45 @@ protected "Type converter" annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add breZon "Breathing zone airflow" + Buildings.Controls.OBC.CDL.Reals.Add breZon "Breathing zone airflow" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=VOutPerPer_flow) if have_occSen "Outdoor air per person" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "If there is occupancy sensor, then using the real time occupancy; otherwise, using the default occupancy" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch between cooling or heating distribution effectiveness" annotation (Placement(transformation(extent={{-20,-160},{0,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide zonOutAirRate + Buildings.Controls.OBC.CDL.Reals.Divide zonOutAirRate "Required zone outdoor airflow rate" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide priOutAirFra + Buildings.Controls.OBC.CDL.Reals.Divide priOutAirFra "Primary outdoor air fraction" annotation (Placement(transformation(extent={{120,-170},{140,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Add desBreZon "Breathing zone design airflow" + Buildings.Controls.OBC.CDL.Reals.Add desBreZon "Breathing zone design airflow" annotation (Placement(transformation(extent={{20,190},{40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide desZonOutAirRate + Buildings.Controls.OBC.CDL.Reals.Divide desZonOutAirRate "Required design zone outdoor airflow rate" annotation (Placement(transformation(extent={{80,170},{100,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide desZonPriOutAirRate + Buildings.Controls.OBC.CDL.Reals.Divide desZonPriOutAirRate "Design zone primary outdoor air fraction" annotation (Placement(transformation(extent={{140,60},{160,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Zone space temperature minus supply air temperature" annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHig, final pre_y_start=true) @@ -211,32 +211,32 @@ protected "Boolean constant to indicate if there is occupancy sensor" annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desDisEff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desDisEff( final k = desZonDisEff) "Design zone air distribution effectiveness" annotation (Placement(transformation(extent={{20,150},{40,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minZonFlo( final k = minZonPriFlo) "Minimum expected zone primary flow rate" annotation (Placement(transformation(extent={{80,60},{100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant disEffHea( final k = zonDisEffHea) "Zone distribution effectiveness for heating" annotation (Placement(transformation(extent={{-80,-200},{-60,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant disEffCoo( final k = zonDisEffCoo) "Zone distribution effectiveness fo cooling" annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOutAir( final k=0) "Zero required outdoor airflow rate when window is open or when zone is not in occupied mode" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOcc( final k=0) if not have_occSen "Zero occupant when there is no occupancy sensor" annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); @@ -246,55 +246,55 @@ protected "Closed window status when there is no window sensor" annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If window is open, the required outdoor airflow rate should be zero" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "If supply fan is off or it is not in occupied mode, then outdoor airflow rate should be zero" annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Max max + Buildings.Controls.OBC.CDL.Reals.Max max "If supply fan is off, giving a small primary airflow rate to avoid division by zero" annotation (Placement(transformation(extent={{-20,-230},{0,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply breZonAre + Buildings.Controls.OBC.CDL.Reals.Multiply breZonAre "Area component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-80,130},{-60,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Product of flow rate per person and floor area" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floPerAre( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floPerAre( final k=VOutPerAre_flow) "Flow rate per unit area" annotation (Placement(transformation(extent={{-140,110},{-120,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floAre( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floAre( final k=AFlo) "Floor area" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant floPerPer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant floPerPer( final k=VOutPerPer_flow) "Flow rate per person" annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter breZonPop( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter breZonPop( final k=occDen) "Default population component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiDivZer( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiDivZer( final k=1E-3) "Gain, used to avoid division by zero if the flow rate is smaller than 0.1%" annotation (Placement(transformation(extent={{-80,-250},{-60,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desPeaOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desPeaOcc( final k=desZonPop) "Design zone population during peak occupancy" annotation (Placement(transformation(extent={{-140,230},{-120,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply desBreZonPer + Buildings.Controls.OBC.CDL.Reals.Multiply desBreZonPer "Population component of the breathing zone design outdoor airflow" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo index 86bdcd13ec0..4416d4fba6b 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/ReturnFanDirectPressure.mo @@ -47,49 +47,49 @@ block ReturnFanDirectPressure annotation (Placement(transformation(extent={{120,0},{160,40}}), iconTransformation(extent={{100,40},{140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage movMea(delta=300) + Buildings.Controls.OBC.CDL.Reals.MovingAverage movMea(delta=300) "Average building static pressure measurement" annotation (Placement(transformation(extent={{-130,70},{-110,90}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conP( + Buildings.Controls.OBC.CDL.Reals.PID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, r=dpBuiSet, reverseActing=false) "Building static pressure controller" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Line linExhAirDam + Buildings.Controls.OBC.CDL.Reals.Line linExhAirDam "Exhaust air damper position" annotation (Placement(transformation(extent={{60,100},{80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Line linRetFanStaPre + Buildings.Controls.OBC.CDL.Reals.Line linRetFanStaPre "Return fan static pressure setpoint" annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Exhaust air damper position" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Return fan discharge static pressure setpoint" annotation (Placement(transformation(extent={{80,-100},{100,-80}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanDisPreMin( final k=dpDisMin) "Return fan discharge static pressure minimum setpoint" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retFanDisPreMax( final k=dpDisMax) "Return fan discharge static pressure maximum setpoint" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero fan control signal" annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer1(final k=0) "Zero constant" annotation (Placement(transformation(extent={{-40,42},{-20,62}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0.5) "Constant 0.5" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one" annotation (Placement(transformation(extent={{0,26},{20,46}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo index 710267859c4..2470b832571 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyFan.mo @@ -118,7 +118,7 @@ block SupplyFan "Block to control multi zone VAV AHU supply fan" final maxRes=maxRes) "Static pressure setpoint reset using trim and respond logic" annotation (Placement(transformation(extent={{-130,-60},{-110,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conSpe( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conSpe( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -130,10 +130,10 @@ block SupplyFan "Block to control multi zone VAV AHU supply fan" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerSpe(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerSpe(k=0) "Zero fan speed when it becomes OFF" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "If fan is OFF, fan speed outputs to zero" annotation (Placement(transformation(extent={{80,-90},{100,-110}}))); Buildings.Controls.OBC.CDL.Logical.Or or1 diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo index fce6824de14..f7e7c042ba9 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplySignals.mo @@ -71,7 +71,7 @@ block SupplySignals "Multizone VAV AHU coil valve positions" iconTransformation(extent={{100,20},{140,60}}))); protected - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conTSup( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conTSup( final controllerType=controllerType, final k=kTSup, final Ti=TiTSup, @@ -82,32 +82,32 @@ protected final reverseActing=false) "Controller for supply air temperature control signal (to be used by heating coil, cooling coil and economizer)" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch to select supply temperature control signal based on status of supply fan" annotation (Placement(transformation(extent={{0,50},{20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHeaMaxCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uHeaMaxCon( final k=uHeaMax) "Constant signal to map control action" annotation (Placement(transformation(extent={{0,-20},{20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant negOne(final k=-1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant negOne(final k=-1) "Negative unity signal" annotation (Placement(transformation(extent={{0,18},{20,38}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCooMinCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uCooMinCon( final k=uCooMin) "Constant signal to map control action" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Zero control signal" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Unity signal" annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conSigCoo( + Buildings.Controls.OBC.CDL.Reals.Line conSigCoo( final limitBelow=true, final limitAbove=false) "Cooling control signal" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conSigHea( + Buildings.Controls.OBC.CDL.Reals.Line conSigHea( final limitBelow=false, final limitAbove=true) "Heating control signal" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo index b49474291a6..e9a662e993f 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/SupplyTemperature.mo @@ -140,17 +140,17 @@ protected "Minimum setpoint" annotation (Dialog(group="Trim and respond logic")); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Supply temperature distributes linearly between minimum and maximum supply air temperature, according to outdoor temperature" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutTem(k=TOutMin) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minOutTem(k=TOutMin) "Lower value of the outdoor air temperature reset range" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxOutTem(k=TOutMax) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxOutTem(k=TOutMax) "Higher value of the outdoor air temperature reset range" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSupTem(k=TSupSetMin) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSupTem(k=TSupSetMin) "Lowest cooling supply air temperature setpoint" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); Buildings.Controls.OBC.CDL.Logical.And and2 @@ -159,17 +159,17 @@ protected Buildings.Controls.OBC.CDL.Logical.And and1 "Check if it is in Warmup or Setback mode" annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemWarUpSetBac(k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant supTemWarUpSetBac(k= TSupWarUpSetBac) "Supply temperature setpoint under warm-up and setback mode" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "If operation mode is setup or cool-down, setpoint shall be 35 degC" annotation (Placement(transformation(extent={{80,-60},{100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "If operation mode is setup or cool-down, setpoint shall be TSupSetMin" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter TDea( + Buildings.Controls.OBC.CDL.Reals.Limiter TDea( uMax( final unit="K", displayUnit="degC") = 297.15, @@ -178,7 +178,7 @@ protected displayUnit="degC") = 294.15) "Limiter that outputs the dead band value for the supply air temperature" annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Check output regarding supply fan status" annotation (Placement(transformation(extent={{80,-10},{100,10}}))); Buildings.Controls.OBC.CDL.Integers.LessThreshold intLesThr(t=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ExhaustDamper.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ExhaustDamper.mo index 0e22e9b6443..2580a61aa39 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ExhaustDamper.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ExhaustDamper.mo @@ -8,7 +8,7 @@ model ExhaustDamper Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFan(k=true) "Supply fan status" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp meaBuiPre( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp meaBuiPre( height=8, duration=1200, offset=8, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo index 096d5ba22ba..646fc320cb5 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/ReturnFanDirectPressure.mo @@ -9,7 +9,7 @@ model ReturnFanDirectPressure Buildings.Controls.OBC.CDL.Logical.Sources.Pulse yFan(period=4000) "Supply fan status" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp dpBui( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp dpBui( height=40, offset=0, duration=1800) "Building static presure" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo index e3c3fd87bf8..5b13dc07d0e 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyFan.mo @@ -32,27 +32,27 @@ model SupplyFan "Validate SupplyFan" annotation (Placement(transformation(extent={{80,20},{100,40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( duration=28800, height=6) "Ramp signal for generating operation mode" annotation (Placement(transformation(extent={{-200,100},{-180,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( freqHz=1/14400, offset=3, amplitude=2) "Generate sine signal " annotation (Placement(transformation(extent={{-200,-10},{-180,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( freqHz=1/14400, offset=200, amplitude=150) "Generate sine signal" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,100},{-140,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-160,-10},{-140,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 @@ -61,7 +61,7 @@ protected Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals_Valve.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals_Valve.mo index e8cb01fc17f..62aa1cdeb76 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals_Valve.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplySignals_Valve.mo @@ -9,12 +9,12 @@ model SupplySignals_Valve Buildings.Controls.OBC.CDL.Logical.Sources.Pulse supFanSta(period=7200) "Supply fan status" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TSup( amplitude=2, offset=16 + 273.15, freqHz=1/7200) "Supply air temperature" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSupSet( height=3, duration=7200, offset=15 + 273.15) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo index 76c8bf2420b..d2d4d0dca66 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/SetPoints/Validation/SupplyTemperature.mo @@ -5,10 +5,10 @@ model SupplyTemperature Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature conTSupSet "Supply air temperature setpoint for multi zone system" annotation (Placement(transformation(extent={{70,-10},{90,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setZonTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setZonTem( k=22.5 + 273.15) "Average of heating and cooling setpoint" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin outTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin outTem( amplitude=5, freqHz=1/86400, offset=18 + 273.15) "Outdoor air temperature" @@ -16,28 +16,28 @@ model SupplyTemperature Buildings.Controls.OBC.CDL.Logical.Sources.Pulse supFanSta(period=43200) "Supply fan status" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp opeMod( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp opeMod( offset=1, height=1, duration=90000) "Operation mode" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( amplitude=6, freqHz=1/86400) "Block generates sine signal" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{32,-50},{52,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 "Convert real to integer" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Validation/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Validation/Controller.mo index f9991a0f6c4..940b4814cef 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Validation/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/MultiZone/VAV/Validation/Controller.mo @@ -5,65 +5,65 @@ model Controller "Validation controller model" VPriSysMax_flow=0.35, peaSysPop=6) "Multizone VAV AHU controller" annotation (Placement(transformation(extent={{100,-60},{180,68}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRooCooOn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRooCooOn( final k=273.15 + 24) "Cooling on setpoint" annotation (Placement(transformation(extent={{-160,189},{-140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHeaOn( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRooHeaOn( final k=273.15 + 20) "Heating on setpoint" annotation (Placement(transformation(extent={{-220,209},{-200,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=297.15) "Outdoor temperature high limit cutoff" annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( height=4, duration=3600, offset=273.15 + 14) "AHU supply air temperature" annotation (Placement(transformation(extent={{-180,-70},{-160,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOut_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOut_flow( duration=1800, offset=0.02, height=0.0168) "Measured outdoor airflow rate" annotation (Placement(transformation(extent={{-180,-110},{-160,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TMixMea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TMixMea( height=4, duration=1, offset=273.15 + 2, startTime=0) "Measured mixed air temperature" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TOut( amplitude=5, offset=18 + 273.15, freqHz=1/3600) "Outdoor air temperature" annotation (Placement(transformation(extent={{-220,170},{-200,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin ducStaPre( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin ducStaPre( offset=200, amplitude=150, freqHz=1/3600) "Duct static pressure" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine2( offset=3, amplitude=2, freqHz=1/9600) "Duct static pressure setpoint reset requests" annotation (Placement(transformation(extent={{-220,-210},{-200,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine3( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine3( amplitude=6, freqHz=1/9600) "Maximum supply temperature setpoint reset" annotation (Placement(transformation(extent={{-220,-170},{-200,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs2 + Buildings.Controls.OBC.CDL.Reals.Abs abs2 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs3 + Buildings.Controls.OBC.CDL.Reals.Abs abs3 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-140,-210},{-120,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round3(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round3(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-100,-170},{-80,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round4(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round4(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-100,-210},{-80,-190}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger ducPreResReq @@ -76,44 +76,44 @@ model Controller "Validation controller model" final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{-180,-150},{-160,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesZonPop( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesZonPop( final k=5) "Sum of design zone population" annotation (Placement(transformation(extent={{-220,119},{-200,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesPopBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesPopBreZon( final k=0.0125) "Sum of the population component design breathing zone flow rate" annotation (Placement(transformation(extent={{-160,101},{-140,122}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sumDesAreBreZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant sumDesAreBreZon( final k=0.03) "Sum of the area component design breathing zone flow rate" annotation (Placement(transformation(extent={{-220,79},{-200,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desSysVenEff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desSysVenEff( final k=1) "Design system ventilation efficiency" annotation (Placement(transformation(extent={{-160,51},{-140,72}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uncOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uncOutAir( amplitude=0.01, width=0.25, period=3600, offset=0.0375) "Sum of all zones required uncorrected outdoor airflow rate" annotation (Placement(transformation(extent={{-220,30},{-200,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo2( offset=1, height=0.5, duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-160,10},{-140,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp vavBoxFlo1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp vavBoxFlo1( height=1.5, offset=1, duration=3600) "Ramp signal for generating VAV box flow rate" annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 + Buildings.Controls.OBC.CDL.Reals.Add add2 "System primary airflow rate, equals to the sum of the measured discharged flow rate of all terminal units" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse uOutAirFra_max( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse uOutAirFra_max( amplitude=0.005, width=0.25, period=3600, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Controller.mo index 26c99ebe0c7..40a14bfe0db 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Controller.mo @@ -527,7 +527,7 @@ block Controller final yCooMax=yCooMax) "Supply air set point and fan signal for single zone VAV system" annotation (Placement(transformation(extent={{40,180},{60,200}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset cooPI( final reverseActing=false, final controllerType=controllerTypeCoo, final k=kCoo, @@ -535,14 +535,14 @@ block Controller final Td=TdCoo) "Zone cooling control signal" annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset heaPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset heaPI( final controllerType=controllerTypeHea, final k=kHea, final Ti=TiHea, final Td=TdHea) "Zone heating control signal" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Average ave + Buildings.Controls.OBC.CDL.Reals.Average ave "Average of zone heating and cooling setpoint" annotation (Placement(transformation(extent={{-40,190},{-20,210}}))); Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Economizers.Controller @@ -610,7 +610,7 @@ block Controller final k=false) if not have_winSen "Window status" annotation (Placement(transformation(extent={{-180,-140},{-160,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold havOcc( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold havOcc( final t=0.5) if have_occSen "Check if there is occupant" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/CoolingCoil.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/CoolingCoil.mo index f25ba0e3546..cca8e0b3c1c 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/CoolingCoil.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/CoolingCoil.mo @@ -39,7 +39,7 @@ model CoolingCoil "Controller for cooling coil valve" annotation (Placement(transformation(extent={{100,-10},{120,10}}), iconTransformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooCoiPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset cooCoiPI( final reverseActing=false, final controllerType=controllerTypeCooCoi, final k=kCooCoi, @@ -55,9 +55,9 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.cooling) "Cooling state value" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch "Switch to assign cooling coil control signal" + Buildings.Controls.OBC.CDL.Reals.Switch switch "Switch to assign cooling coil control signal" annotation (Placement(transformation(extent={{72,-10},{92,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=0) "Cooling off mode" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=0) "Cooling off mode" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); Buildings.Controls.OBC.CDL.Logical.And and2 "Conditions for cooling state" annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Controller.mo index 092db11f20d..6713a44035b 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Controller.mo @@ -309,16 +309,16 @@ block Controller "Single zone VAV AHU economizer control sequence" annotation (Placement(transformation(extent={{60,-20},{80,0}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Max retDamMinFre + Buildings.Controls.OBC.CDL.Reals.Max retDamMinFre "Minimum position for return air damper due to freeze protection" annotation (Placement(transformation(extent={{100,40},{120,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Min outDamMaxFre + Buildings.Controls.OBC.CDL.Reals.Min outDamMaxFre "Maximum control signal for outdoor air damper due to freeze protection" annotation (Placement(transformation(extent={{100,-60},{120,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix1(k=1) if not use_TMix + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noTMix1(k=1) if not use_TMix "Ignore min evaluation if there is no TMix sensor" annotation (Placement(transformation(extent={{60,-66},{80,-46}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix(k=0) if not use_TMix + Buildings.Controls.OBC.CDL.Reals.Sources.Constant noTMix(k=0) if not use_TMix "Ignore max evaluation if there is no TMix sensor" annotation (Placement(transformation(extent={{60,46},{80,66}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo index 9310373ca5f..d30044b6858 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Enable.mo @@ -142,33 +142,33 @@ protected final k=false) if not use_enthalpy "Deactivates outdoor air enthalpy condition if there is no enthalpy sensor" annotation (Placement(transformation(extent={{-60,170},{-40,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMinSig( final k=retDamPhyPosMin) "Physically fixed minimum position of the return air damper" annotation (Placement(transformation(extent={{-140,-258},{-120,-238}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhyPosMax) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper" annotation (Placement(transformation(extent={{-140,-220},{-120,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutTem( final uHigh=TOutHigLimCutHig, final uLow=TOutHigLimCutLow) "Outdoor air temperature hysteresis for fixed or differential dry bulb temperature cutoff conditions" annotation (Placement(transformation(extent={{-100,244},{-80,264}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutEnt( final uLow=hOutHigLimCutLow, final uHigh=hOutHigLimCutHig) if use_enthalpy "Outdoor air enthalpy hysteresis for fixed or differential enthalpy cutoff conditions" annotation (Placement(transformation(extent={{-98,150},{-78,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 if use_enthalpy + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 if use_enthalpy "Add block that determines the difference between hOut and hOutCut" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Add block that determines difference the between TOut and TOutCut" annotation (Placement(transformation(extent={{-140,244},{-120,264}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch outDamSwitch "Set maximum OA damper position to minimum at disable (after time delay)" + Buildings.Controls.OBC.CDL.Reals.Switch outDamSwitch "Set maximum OA damper position to minimum at disable (after time delay)" annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch minRetDamSwitch + Buildings.Controls.OBC.CDL.Reals.Switch minRetDamSwitch "Keep minimum RA damper position at physical maximum for a short time period after disable" annotation (Placement(transformation(extent={{40,-250},{60,-230}}))); Buildings.Controls.OBC.CDL.Logical.Nor nor1 "Logical nor" @@ -194,11 +194,11 @@ protected annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); Buildings.Controls.OBC.CDL.Logical.Not not3 "Negation for check of freeze protection status" annotation (Placement(transformation(extent={{-44,-10},{-24,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 if use_fixed_plus_differential_drybulb "Add block that determines difference the between TOut and TOutCut" annotation (Placement(transformation(extent={{-140,200},{-120,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysCutTem(final uHigh= + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysCutTem(final uHigh= TOutHigLimCutHig, final uLow=TOutHigLimCutLow) if use_fixed_plus_differential_drybulb "Outdoor air temperature hysteresis for both fixed and differential dry bulb temperature cutoff conditions" annotation (Placement(transformation(extent={{-100,200},{-80,220}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo index 954509c3297..dd06002f6f6 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Limits.mo @@ -101,63 +101,63 @@ block Limits "Single zone VAV AHU minimum outdoor air control - damper position iconTransformation(extent={{100,40},{140,80}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanMinSig( final k=yFanMin) "Minimum supply fan speed" annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMinSig( final k=outDamPhyPosMin) "Physically fixed minimum position of the outdoor air damper" annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physically fixed maximum position of the outdoor air damper" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanMaxSig( final k=yFanMax) "Maximum supply fan speed" annotation (Placement(transformation(extent={{-140,80},{-120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_minSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutMin_minSpeSig( final k=yDam_VOutMin_minSpe) "OA damper position to supply minimum outdoor airflow at minimum fan speed" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_minSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutDes_minSpeSig( final k=yDam_VOutDes_minSpe) "OA damper position to supply design outdoor airflow at minimum fan speed" annotation (Placement(transformation(extent={{-140,-30},{-120,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_maxSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutMin_maxSpeSig( final k=yDam_VOutMin_maxSpe) "OA damper position to supply minimum outdoor airflow at maximum fan speed" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_maxSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDam_VOutDes_maxSpeSig( final k=yDam_VOutDes_maxSpe) "OA damper position to supply design outdoor airflow at maximum fan speed" annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minVOutSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minVOutSig( final k=VOutMin_flow) "Minimum outdoor airflow rate" annotation (Placement(transformation(extent={{16,170},{36,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desVOutSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant desVOutSig( final k=VOutDes_flow) "Design outdoor airflow rate" annotation (Placement(transformation(extent={{16,90},{36,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutMin_curSpe( + Buildings.Controls.OBC.CDL.Reals.Line yDam_VOutMin_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow at current fan speed" annotation (Placement(transformation(extent={{16,130},{36,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutDes_curSpe( + Buildings.Controls.OBC.CDL.Reals.Line yDam_VOutDes_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply design outdoor airflow at current fan speed" annotation (Placement(transformation(extent={{16,40},{36,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Line minVOutSetCurFanSpePos( + Buildings.Controls.OBC.CDL.Reals.Line minVOutSetCurFanSpePos( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow setpoint at current fan speed" annotation (Placement(transformation(extent={{100,110},{120,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis + Buildings.Controls.OBC.CDL.Reals.Switch enaDis "Logical switch to enable damper position limit calculation or disable it (set min limit to physical minimum)" annotation (Placement(transformation(extent={{82,-120},{102,-100}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block" annotation (Placement(transformation(extent={{-20,-80},{0,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis1 + Buildings.Controls.OBC.CDL.Reals.Switch enaDis1 "Logical switch to enable damper position limit calculation or disable it (set max limit to physical minimum)" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo index d57fc93edaf..8076d11177a 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Modulation.mo @@ -95,7 +95,7 @@ block Modulation "Outdoor and return air damper position modulation sequence for annotation (Placement(transformation(extent={{120,-10},{140,10}}), iconTransformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset uTSup( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset uTSup( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -106,40 +106,40 @@ block Modulation "Outdoor and return air damper position modulation sequence for annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamMinLimSig( final k=uMin) "Minimal control loop signal for the outdoor air damper" annotation (Placement(transformation(extent={{-60,-88},{-40,-68}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant retDamMaxLimSig( final k=uMax) "Maximal control loop signal for the return air damper" annotation (Placement(transformation(extent={{-60,-34},{-40,-14}}))); - Buildings.Controls.OBC.CDL.Continuous.Line outDamPos( + Buildings.Controls.OBC.CDL.Reals.Line outDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{24,-50},{44,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( + Buildings.Controls.OBC.CDL.Reals.Line retDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{22,-10},{42,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line HeaCoi(final limitBelow=true, + Buildings.Controls.OBC.CDL.Reals.Line HeaCoi(final limitBelow=true, final limitAbove=true) "Heating coil signal is linearly proportional to the control signal between signal limits" annotation (Placement(transformation(extent={{22,30},{42,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMaxLimSig(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoiMaxLimSig(final k=1) "Maximal control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMinLimSig(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaCoiMinLimSig(final k=0) "Minimum control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uMaxHeaCoi(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uMaxHeaCoi(final k=1) "Maximal control loop signal for the heating coil" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch enaDis "Enable or disable the heating coil" + Buildings.Controls.OBC.CDL.Reals.Switch enaDis "Enable or disable the heating coil" annotation (Placement(transformation(extent={{76,30},{96,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Off( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Off( final k=0) "Off signal for heating coil" annotation (Placement(transformation(extent={{6,-90},{26,-70}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo index 24396ad19a5..070dadd6188 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_FreProSta_ZonSta.mo @@ -20,19 +20,19 @@ protected final quantity = "SpecificEnergy")=65100 "Outdoor air enthalpy high limit cutoff"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor temperature high limit cutoff" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( @@ -51,11 +51,11 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.deadband) "Zone state is deadband" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax( final k=0.9) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin( final k=0.1) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo index 696ce6bac6e..d58e150a21c 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Enable_TOut_hOut.mo @@ -2,10 +2,10 @@ within Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Econom model Enable_TOut_hOut "Model validates economizer disable in case outdoor air conditions are above cutoff" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut1( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); Buildings.Controls.OBC.CDL.Logical.TriggeredTrapezoid TOut( @@ -55,17 +55,17 @@ protected "Minimum outdoor air damper position"; final parameter Real outDamPosMax=0.9 "Minimum return air damper position"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-240,0},{-220,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor air temperature cutoff" annotation (Placement(transformation(extent={{0,40},{20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 1000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-240,40},{-220,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 2) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{54,40},{74,60}}))); @@ -73,11 +73,11 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.deadband) "Zone State is deadband" annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMaxSig( final k=outDamPosMax) "Maximal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-120},{-220,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMinSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMinSig( final k=outDamPosMin) "Minimal allowed economizer damper position" annotation (Placement(transformation(extent={{-240,-160},{-220,-140}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo index 8c9daac81dd..42e86e592b5 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_Disable.mo @@ -51,12 +51,12 @@ protected final quantity="VolumeFlowRate")=0.2 "Maximum increase in airflow volume during the example simulation"; - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=yFanMin, final height=yFanMax - yFanMin) "Supply fan speed signal" annotation (Placement(transformation(extent={{-160,20},{-140,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Constant minimum outdoor airflow setpoint" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo index 53a184b4201..7b6b41c0332 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Limits_FanSpe_VOut_flow.mo @@ -47,21 +47,21 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Operation mode - occupied" annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VOutMinSetSig( final k=VOutSet_flow) "Constant minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=yFanMin, final height=yFanMax - yFanMin) "Supply fan speed signal" annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig1( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Constant minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant SupFanSpeSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant SupFanSpeSig1( final k=fanSpe) "Supply fan speed signal" annotation (Placement(transformation(extent={{20,20},{40,40}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo index 5bb48b7d0ab..fb0286c0fcd 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Subsequences/Validation/Modulation_TSup.mo @@ -12,24 +12,24 @@ model Modulation_TSup mod "Economizer modulation sequence" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final duration=900, final height=4, final offset=TSupSet - 2) "Measured supply air temperature" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMin(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMin(final k=0.1) "Minimum outdoor air damper position" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPosMax(final k=0.9) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPosMax(final k=0.9) "Maximum outdoor air damper position" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant RetDamPosMin(final k=0.1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RetDamPosMin(final k=0.1) "Minimum return air damper position" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant RetDamPosMax(final k=0.9) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant RetDamPosMax(final k=0.9) "Maximum return air damper position" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo index 2f532ccaece..0c661287a3f 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Disable.mo @@ -79,44 +79,44 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 40000) "Outdoor air enthalpy is below the cutoff" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Heating supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta2( final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage2) "Freeze protection stage is 2" annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 30) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor temperature high limit cutoff" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final offset=TSupSet - 2, final duration=1800) "Supply air temperature" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=yFanMin, final height=yFanMax - yFanMin) "Supply fan speed signal" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1( amplitude=20, freqHz=1/1800, offset=272.15, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo index 6a663d84c12..bba248d2879 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Economizers/Validation/Controller_Mod_DamLim.mo @@ -73,37 +73,37 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutBelowCutoff( final k=hOutCutoff - 10000) "Outdoor air enthalpy is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,10},{-100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hOutCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant hOutCut( final k=hOutCutoff) "Outdoor air enthalpy cutoff" annotation (Placement(transformation(extent={{-120,-30},{-100,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutBelowCutoff( final k=TOutCutoff - 5) "Outdoor air temperature is slightly below the cutoff" annotation (Placement(transformation(extent={{-120,100},{-100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOutCut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOutCut1( final k=TOutCutoff) "Outdoor temperature high limit cutoff" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig( final k=TSupSet) "Heating supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSig( final k=TSup) "Measured supply air temperature" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSupSig1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSupSig1( final duration=900, final height=2, final offset=TSupSet - 1) "Measured supply air temperature" annotation (Placement(transformation(extent={{40,80},{60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp VOutMinSetSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp VOutMinSetSig( final duration=1800, final offset=VOutMin_flow, final height=VOutDes_flow - VOutMin_flow) "Minimum outdoor airflow setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp SupFanSpeSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp SupFanSpeSig( final duration=1800, final offset=yFanMin, final height=yFanMax - yFanMin) "Supply fan speed signal" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/ExhaustDamper.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/ExhaustDamper.mo index 0419dab1897..9f80867f0c1 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/ExhaustDamper.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/ExhaustDamper.mo @@ -42,13 +42,13 @@ block ExhaustDamper final unit="1") "Exhaust damper position" annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Line exhDamPos + Buildings.Controls.OBC.CDL.Reals.Line exhDamPos "Linearly map exhaust damper position to the outdoor air damper position" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Check if exhaust damper should be open" annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis greThr( + Buildings.Controls.OBC.CDL.Reals.Hysteresis greThr( final uLow=0.02, final uHigh=0.05) "Check if outdoor air damper is open" @@ -58,23 +58,23 @@ block ExhaustDamper annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerDam( final k=0) "Close damper when disabled" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minExhDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minExhDam( final k=minExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint while the system is at minPosMin" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxExhDam( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxExhDam( final k=maxExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minPosAtMinSpd( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minPosAtMinSpd( final k=minOutPosMin) "Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physical or at the comissioning fixed maximum position of the outdoor air damper" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/OutsideAirFlow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/OutsideAirFlow.mo index 7f51a35cb6b..279df3ce571 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/OutsideAirFlow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/OutsideAirFlow.mo @@ -74,31 +74,31 @@ block OutsideAirFlow iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Add breZon "Breathing zone airflow" + Buildings.Controls.OBC.CDL.Reals.Add breZon "Breathing zone airflow" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Zone space temperature minus supply air temperature" annotation (Placement(transformation(extent={{-160,-70},{-140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=VOutPerPer_flow) if have_occSen "Outdoor airflow rate per person" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch for enabling occupancy sensor input" annotation (Placement(transformation(extent={{-60,38},{-40,58}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch between cooling or heating distribution effectiveness" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide zonOutAirRate + Buildings.Controls.OBC.CDL.Reals.Divide zonOutAirRate "Required zone outdoor airflow rate" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "If window is open or it is not in occupied mode, the required outdoor airflow rate should be zero" annotation (Placement(transformation(extent={{80,20},{100,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "If supply fan is off, then outdoor airflow rate should be zero." annotation (Placement(transformation(extent={{140,0},{160,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHigh, final pre_y_start=true) @@ -108,23 +108,23 @@ protected final k=have_occSen) "Boolean constant to indicate if there is occupancy sensor" annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOutAir( final k=0) "Zero required outdoor airflow rate when window open or zone is not in occupied mode" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant disEffHea( final k=zonDisEffHea) "Zone distribution effectiveness during heating" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant disEffCoo( final k=zonDisEffCoo) "Zone distribution effectiveness for cooling" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant breZonAre( final k=VOutPerAre_flow*AFlo) "Area component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonPop( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant breZonPop( final k=VOutPerPer_flow*AFlo*occDen) "Population component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); @@ -138,7 +138,7 @@ protected annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-20,-130},{0,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerOcc(final k=0) if not have_occSen "Zero occupant when there is no occupancy sensor" annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Supply.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Supply.mo index 46f8c5fb9fb..e99a510b2b0 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Supply.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Supply.mo @@ -69,141 +69,141 @@ block Supply "Supply air set point for single zone VAV system" Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan "Supply fan status" annotation (Placement(transformation(extent={{-140,-160},{-100,-120}}), iconTransformation(extent={{-140,-120},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch switch "Switch to assign control signal" + Buildings.Controls.OBC.CDL.Reals.Switch switch "Switch to assign control signal" annotation (Placement(transformation(extent={{120,-70},{140,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fanOff(k=0) "Fan off status" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant fanOff(k=0) "Fan off status" annotation (Placement(transformation(extent={{80,10},{100,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Min yFanHeaCoo "Fan speed due to heating or cooling" + Buildings.Controls.OBC.CDL.Reals.Min yFanHeaCoo "Fan speed due to heating or cooling" annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "Maximum fan speed" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Maximum fan speed" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Line TSetCooHig + Buildings.Controls.OBC.CDL.Reals.Line TSetCooHig "Table to compute the setpoint for cooling for uCoo = 0...1" annotation (Placement(transformation(extent={{0,130},{20,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetHea + Buildings.Controls.OBC.CDL.Reals.Line offSetTSetHea "Table to compute the setpoint offset for heating for uCoo = 0...1" annotation (Placement(transformation(extent={{0,170},{20,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addTHe + Buildings.Controls.OBC.CDL.Reals.Add addTHe "Adder for heating setpoint calculation" annotation (Placement(transformation(extent={{60,190},{80,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetCoo + Buildings.Controls.OBC.CDL.Reals.Line offSetTSetCoo "Table to compute the setpoint offset for cooling for uHea = 0...1" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addTSupCoo + Buildings.Controls.OBC.CDL.Reals.Add addTSupCoo "Adder for cooling setpoint calculation" annotation (Placement(transformation(extent={{60,110},{80,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Difference zone minus outdoor temperature" annotation (Placement(transformation(extent={{-70,-130},{-50,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=(yMin - yCooMax)/(0.56 - 5.6)) "Gain factor" annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed( + Buildings.Controls.OBC.CDL.Reals.AddParameter yMed( final p=yCooMax - (yMin - yCooMax)/(0.56 - 5.6)*5.6) "Fan speed at medium cooling load" annotation (Placement(transformation(extent={{-8,-130},{12,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter yMedLim( + Buildings.Controls.OBC.CDL.Reals.Limiter yMedLim( final uMax=yCooMax, final uMin=yMin) "Limiter for yMed" annotation (Placement(transformation(extent={{28,-130},{48,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter TDea( + Buildings.Controls.OBC.CDL.Reals.Limiter TDea( final uMax=24 + 273.15, final uMin=21 + 273.15) "Limiter that outputs the dead band value for the supply air temperature" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Line TSetHeaHig + Buildings.Controls.OBC.CDL.Reals.Line TSetHeaHig "Block to compute the setpoint for heating for uHea = 0...1" annotation (Placement(transformation(extent={{2,210},{22,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con0( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con0( final k=0) "Contant that outputs zero" annotation (Placement(transformation(extent={{-80,210},{-60,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con25( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con25( final k=0.25) "Contant that outputs 0.25" annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con05( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con05( final k=0.5) "Contant that outputs 0.5" annotation (Placement(transformation(extent={{-80,140},{-60,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con75( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con75( final k=0.75) "Contant that outputs 0.75" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conTSupSetMax( final k=TSupSetMax) "Constant that outputs TSupSetMax" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conTSupSetMin( final k=TSupSetMin) "Constant that outputs TSupSetMin" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract TDeaTSupSetMin + Buildings.Controls.OBC.CDL.Reals.Subtract TDeaTSupSetMin "Outputs TDea-TSupSetMin" annotation (Placement(transformation(extent={{-20,0},{0,20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=-1) "Gain factor" annotation (Placement(transformation(extent={{10,0},{30,20}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addTDea( + Buildings.Controls.OBC.CDL.Reals.AddParameter addTDea( final p=-1.1) "Adds constant offset" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract TSupSetMaxTDea + Buildings.Controls.OBC.CDL.Reals.Subtract TSupSetMaxTDea "Outputs TSupSetMax-TDea" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Line yHea "Fan speed for heating" + Buildings.Controls.OBC.CDL.Reals.Line yHea "Fan speed for heating" annotation (Placement(transformation(extent={{4,-60},{24,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin050( + Buildings.Controls.OBC.CDL.Reals.Line lin050( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0 < yCoo < 0.75" annotation (Placement(transformation(extent={{-20,-202},{0,-182}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con025( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con025( final k=0.25) "Constant signal" annotation (Placement(transformation(extent={{-80,-176},{-60,-156}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=0.5) "Constant signal" annotation (Placement(transformation(extent={{-80,-232},{-60,-212}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( final k=1) "Constant signal" annotation (Placement(transformation(extent={{0,-320},{20,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3( final k=0) "Constant signal" annotation (Placement(transformation(extent={{-80,-206},{-60,-186}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4( final k=yCooMax - yMin) "Constant signal" annotation (Placement(transformation(extent={{-76,-288},{-56,-268}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dY075 + Buildings.Controls.OBC.CDL.Reals.Subtract dY075 "Change in control signal above yMedLim for y > 0.75" annotation (Placement(transformation(extent={{-36,-294},{-16,-274}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin075( + Buildings.Controls.OBC.CDL.Reals.Line lin075( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0.75 < yCoo" annotation (Placement(transformation(extent={{34,-294},{54,-274}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con5( final k=0.75) "Constant signal" annotation (Placement(transformation(extent={{0,-286},{20,-266}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con6( final k=0) "Constant signal" annotation (Placement(transformation(extent={{0,-350},{20,-330}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter yOffSet( + Buildings.Controls.OBC.CDL.Reals.AddParameter yOffSet( final p=-yMin) "Subtract yMin so that all control signals can be added" annotation (Placement(transformation(extent={{60,-130},{80,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addHeaCoo + Buildings.Controls.OBC.CDL.Reals.Add addHeaCoo "Add heating control signal and offset due to cooling" annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Add offCoo + Buildings.Controls.OBC.CDL.Reals.Add offCoo "Offset of control signal (relative to heating signal) for cooling" annotation (Placement(transformation(extent={{40,-202},{60,-182}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7(final k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con7(final k=0.5) "Contant that outputs 0.5" annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSpe(final k=yMin) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSpe(final k=yMin) "Contant that outputs minimum fan speed" annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne(final k=1) "Contant that outputs 1" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxHeaSpe(final k=yHeaMax) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxHeaSpe(final k=yHeaMax) "Contant that outputs maximum fan speed for heating" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ExhaustDamper.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ExhaustDamper.mo index 0a5f06fdf4c..e143a4a617c 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ExhaustDamper.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ExhaustDamper.mo @@ -8,7 +8,7 @@ model ExhaustDamper Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFan(k=true) "Supply fan status" annotation (Placement(transformation(extent={{-40,-52},{-20,-32}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp outDamPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp outDamPos( duration=1200, startTime=0, height=0.6, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo index ffd99956a74..1a956ffee91 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/ModeAndSetPoints.mo @@ -27,19 +27,19 @@ model ModeAndSetPoints Buildings.Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule" annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin heaSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin heaSetAdj( final freqHz=1/28800, final amplitude=0.5) "Heating setpoint adjustment" annotation (Placement(transformation(extent={{-46,-2},{-26,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin cooSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooSetAdj( final freqHz=1/28800) "Cooling setpoint adjustment" annotation (Placement(transformation(extent={{-46,38},{-26,58}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon1( final amplitude=5, final offset=18 + 273.15, final freqHz=1/86400) "Zone 1 temperature" annotation (Placement(transformation(extent={{-88,38},{-68,58}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon2( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon2( final offset=18 + 273.15, final freqHz=1/86400, final amplitude=7.5) "Zone 2 temperature" @@ -63,7 +63,7 @@ model ModeAndSetPoints Buildings.Controls.OBC.CDL.Integers.Sources.Constant demLimLev( final k=0) "Demand limit level" annotation (Placement(transformation(extent={{-66,-110},{-46,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warCooTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warCooTim( final k=1800) "Warm-up or cooldown time" annotation (Placement(transformation(extent={{-48,94},{-28,114}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/OutsideAirFlow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/OutsideAirFlow.mo index 235f6c90ffe..d906ede66d0 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/OutsideAirFlow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/OutsideAirFlow.mo @@ -6,7 +6,7 @@ model OutsideAirFlow outAirSet_SinZon(AFlo=40, have_occSen=true) "Block to output minimum outdoor airflow rate for system with single zone " annotation (Placement(transformation(extent={{20,0},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp numOfOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp numOfOcc( height=4, duration=3600) "Number of occupant detected in zone" @@ -23,12 +23,12 @@ protected Buildings.Controls.OBC.CDL.Logical.Sources.Constant supFan( k=true) "Supply fan status" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon( height=6, offset=273.15 + 17, duration=3600) "Measured zone temperature" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( height=4, duration=3600, offset=273.15 + 18) "Terminal unit discharge air temperature" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo index 7ff585ceb86..8fc4362d131 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_T.mo @@ -12,27 +12,27 @@ model Supply_T "Block that computes the setpoints for temperature and fan speed" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHea(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uHea(k=0) "Heating control signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCoo(k=0.6) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uCoo(k=0.6) "Cooling control signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TOut( duration=1, height=18, offset=273.15 + 10) "Outdoor air temperature" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract dT + Buildings.Controls.OBC.CDL.Reals.Subtract dT "Difference zone minus outdoor temperature" annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonSet( k=273.15 + 22) "Average zone set point" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanSta(k=true) "Fan is on" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo index 81db8e26335..29e1cffa1b6 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/SetPoints/Validation/Supply_u.mo @@ -28,31 +28,31 @@ model Supply_u "Validation model for temperature and fan speed" "Block that computes the setpoints for temperature and fan speed" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon(k=273.15 + 28) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon(k=273.15 + 28) "Zone air temperature" annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut(k=273.15 + 22) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut(k=273.15 + 22) "Outdoor temperature" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( duration=0.25, height=-1, offset=1) "Heating control signal" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( duration=0.25, startTime=0.75) "Cooling control signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonSet(k=273.15 + 23) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonSet(k=273.15 + 23) "Average zone set point" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon1(k=273.15 + 23) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon1(k=273.15 + 23) "Zone air temperature" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanSta(k=true) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/Controller.mo index 04974826f3a..cbc6b1ffa74 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/Controller.mo @@ -79,7 +79,7 @@ model Controller "Validation of the top-level controller" final VOutDes_flow=0.25) "Validate the cooling case" annotation (Placement(transformation(extent={{20,-108},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon( final duration=86400, final height=6, final offset=273.15 + 16, @@ -89,50 +89,50 @@ model Controller "Validation of the top-level controller" final occupancy=3600*{4,20}) "Occupancy schedule" annotation (Placement(transformation(extent={{-120,44},{-100,64}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TCut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCut( final k=289.15, y(unit="K")) "Fixed dry bulb temperature high limit cutoff for economizer" annotation (Placement(transformation(extent={{-120,14},{-100,34}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nOcc(final k=2) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nOcc(final k=2) "Number of occupants" annotation (Placement(transformation(extent={{-120,-34},{-100,-14}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant win(final k=false) "Window status" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut( final k=290.15, y(unit="K")) "Outdoor air dry bulb temperature" annotation (Placement(transformation(extent={{-180,110},{-160,130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut1( final k=301.15, y(unit="K")) "Outdoor air dry bulb temperature" annotation (Placement(transformation(extent={{-180,-6},{-160,14}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon1( final duration=86400, final height=-3, final offset=273.15 + 26, y(unit="K")) "Measured zone temperature" annotation (Placement(transformation(extent={{-180,-50},{-160,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut2( final k=295.15, y(unit="K")) "Outdoor air dry bulb temperature" annotation (Placement(transformation(extent={{-180,-110},{-160,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut3( final k=289.15, y(unit="K")) "Outdoor air dry bulb temperature" annotation (Placement(transformation(extent={{-180,-150},{-160,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=2, final duration=86400, final offset=273.15 + 22.5, y(unit="K")) "Terminal unit discharge air temperature" annotation (Placement(transformation(extent={{-180,30},{-160,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup1( final height=-3, final duration=86400, final offset=273.15 + 24, @@ -142,7 +142,7 @@ model Controller "Validation of the top-level controller" final k=0) "Cooling and heating demand imit level" annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooWarTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooWarTim( final k=0) "Cooldown and warm-up time" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/CoolingCoil.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/CoolingCoil.mo index 88ec5d48e43..a0806915a76 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/CoolingCoil.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/CoolingCoil.mo @@ -9,18 +9,18 @@ model CoolingCoil "Validation of cooling coil model" cooCoi(controllerTypeCooCoi=Buildings.Controls.OBC.CDL.Types.SimpleController.P, kCooCoi=1) "Cooling coil controller" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( final height=4, final offset=TSupSet - 2, final duration=3600*8) "Measured supply air temperature" annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupSetSig(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSetSig(final k= TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant fanStatus(k=true) "Fan is on" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse zonSta(offset=2, period= + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse zonSta(offset=2, period= 3600*2) "Zone state" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/ZoneState.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/ZoneState.mo index e83fe0ed291..5345e529699 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/ZoneState.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/Validation/ZoneState.mo @@ -3,7 +3,7 @@ model ZoneState "Validation models of determining zone state" Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState zonSta "Zone state" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable uHeaCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable uHeaCoo( table=[0,0,0; 1,0,1; 2,1,0], smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/ZoneState.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/ZoneState.mo index cf0d04f7076..4ca8ac99270 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/ZoneState.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/AHUs/SingleZone/VAV/ZoneState.mo @@ -35,22 +35,22 @@ protected annotation (Placement(transformation(extent={{70,-80},{90,-60}}))); Buildings.Controls.OBC.CDL.Logical.And isHea "In heating state if both conditions are true" annotation (Placement(transformation(extent={{-72,30},{-52,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUHea( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysUHea( final uLow=uLow, final uHigh=uHigh) "Check if it is in heating state" annotation (Placement(transformation(extent={{-120,60},{-100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUCoo( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysUCoo( final uLow=uLow, final uHigh=uHigh) "Check if it is in cooling state" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract uHeaMinUCoo + Buildings.Controls.OBC.CDL.Reals.Subtract uHeaMinUCoo "Difference between uHea and uCoo" annotation (Placement(transformation(extent={{-130,0},{-110,20}}))); Buildings.Controls.OBC.CDL.Logical.And isCoo "In cooling state if both inputs are true" annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysU( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysU( final uLow=-uLow, final uHigh=uLow) "Check if heating control signal is bigger than cooling control signal" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/FreezeProtectionMixedAir.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/FreezeProtectionMixedAir.mo index bd9a3054d33..1f455a81457 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/FreezeProtectionMixedAir.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/FreezeProtectionMixedAir.mo @@ -42,7 +42,7 @@ block FreezeProtectionMixedAir "Freeze protection based on mixed air temperature final max=1) "Inverse freeze protection control signal, 1 if no frost, 0 if TMix below TFreSet" annotation (Placement(transformation(extent={{100,10},{140,50}}))); - Buildings.Controls.OBC.CDL.Continuous.PID con( + Buildings.Controls.OBC.CDL.Reals.PID con( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -53,13 +53,13 @@ block FreezeProtectionMixedAir "Freeze protection based on mixed air temperature annotation (Placement(transformation(extent={{-20,20},{0,40}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setPoi(final k=TFreSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setPoi(final k=TFreSet) "Set point for freeze protection" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract yOut + Buildings.Controls.OBC.CDL.Reals.Subtract yOut "Freeze protection control signal inverter" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant one( final k=1) "Constant 1" annotation (Placement(transformation(extent={{20,60},{40,80}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/GroupStatus.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/GroupStatus.mo index 2ea37434536..21e1cf2bd08 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/GroupStatus.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/GroupStatus.mo @@ -156,11 +156,11 @@ block GroupStatus "Block that outputs the zone group status" annotation (Placement(transformation(extent={{100,-320},{140,-280}}), iconTransformation(extent={{100,-210},{140,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysSetBac(final uLow=uLow, + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysSetBac(final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the group should run in setback mode" annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysSetUp(final uLow=uLow, + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysSetUp(final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the group should run in setup mode" annotation (Placement(transformation(extent={{60,-140},{80,-120}}))); @@ -242,11 +242,11 @@ protected final msk=zonGroMsk) "Zone group filter" annotation (Placement(transformation(extent={{-120,-310},{-100,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax cooDowTim( + Buildings.Controls.OBC.CDL.Reals.MultiMax cooDowTim( final nin=numZonGro) "Longest cooldown time" annotation (Placement(transformation(extent={{40,170},{60,190}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax warUpTim( + Buildings.Controls.OBC.CDL.Reals.MultiMax warUpTim( final nin=numZonGro) "Longest warm up time" annotation (Placement(transformation(extent={{40,130},{60,150}}))); @@ -258,11 +258,11 @@ protected final nin=numZonGro) "Check if there is any zone that the zone temperature is higher than its occupied cooling setpoint" annotation (Placement(transformation(extent={{40,50},{60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMax maxTem( + Buildings.Controls.OBC.CDL.Reals.MultiMax maxTem( final nin=numZonGro) "Maximum zone temperature in the zone group" annotation (Placement(transformation(extent={{0,-230},{20,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin minTem( + Buildings.Controls.OBC.CDL.Reals.MultiMin minTem( final nin=numZonGro) "Minimum zone temperature in the zone group" annotation (Placement(transformation(extent={{0,-270},{20,-250}}))); @@ -286,34 +286,34 @@ protected final nin=numZonGro) "Check if all zones have ended the setup mode" annotation (Placement(transformation(extent={{-2,-190},{18,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumUnoHea( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumUnoHea( final nin=numZonGro) "Sum of all zones unoccupied heating setpoint" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difUnoHea + Buildings.Controls.OBC.CDL.Reals.Subtract difUnoHea "Difference between unoccupied heating setpoint and zone temperature" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div1 "Average difference" + Buildings.Controls.OBC.CDL.Reals.Divide div1 "Average difference" annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant totZon( final k=numZonGro) "Total number of zones" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Convert integer to real" annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumUnoCoo( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumUnoCoo( final nin=numZonGro) "Sum of all zones unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum sumTem( + Buildings.Controls.OBC.CDL.Reals.MultiSum sumTem( final nin=numZonGro) "Sum of all zones temperature" annotation (Placement(transformation(extent={{-80,-210},{-60,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difUnoCoo + Buildings.Controls.OBC.CDL.Reals.Subtract difUnoCoo "Difference between unoccupied cooling setpoint and zone temperature" annotation (Placement(transformation(extent={{-30,-130},{-10,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide div2 "Average difference" + Buildings.Controls.OBC.CDL.Reals.Divide div2 "Average difference" annotation (Placement(transformation(extent={{20,-140},{40,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiMin minToNexOcc( + Buildings.Controls.OBC.CDL.Reals.MultiMin minToNexOcc( final nin=numZonGro) "Minimum time to next occupied period" annotation (Placement(transformation(extent={{-60,210},{-40,230}}))); @@ -340,7 +340,7 @@ protected final realFalse=1) "When any zone becomes occpuied, output zero" annotation (Placement(transformation(extent={{0,230},{20,250}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply proOcc + Buildings.Controls.OBC.CDL.Reals.Multiply proOcc "When it is occupied, output zero" annotation (Placement(transformation(extent={{60,210},{80,230}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/OperationMode.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/OperationMode.mo index 77344bee051..7a6c255aeb9 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/OperationMode.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/OperationMode.mo @@ -86,16 +86,16 @@ block OperationMode "Block that outputs the operation mode" iconTransformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant occModInd( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occModInd( final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode " annotation (Placement(transformation(extent={{100,340},{120,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant unoPerInd(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant unoPerInd(final k=0.0) "Index to indicate unoccupied period" annotation (Placement(transformation(extent={{0,340},{20,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch corCooDowTim "Corrected cool down period" + Buildings.Controls.OBC.CDL.Reals.Switch corCooDowTim "Corrected cool down period" annotation (Placement(transformation(extent={{-220,240},{-200,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch corWarUpTim "Corrected warm-up period" + Buildings.Controls.OBC.CDL.Reals.Switch corWarUpTim "Corrected warm-up period" annotation (Placement(transformation(extent={{-200,140},{-180,160}}))); Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( final t=4) "Check if the number of cold zones is not less than than 5" @@ -109,49 +109,49 @@ protected Buildings.Controls.OBC.CDL.Logical.Latch lat2 "If all zone temperature are lower than unoccupied cooling setpoint by a given limit, then the setup mode should be off" annotation (Placement(transformation(extent={{-100,-200},{-80,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final pre_y_start=true, final uHigh=0, final uLow=-60) "Hysteresis that outputs if the maximum cool-down time is more than the allowed cool-down time" annotation (Placement(transformation(extent={{-260,240},{-240,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final pre_y_start=true, final uHigh=0, final uLow=-60) "Hysteresis that outputs if the maximum warm-up time is more than allowed warm-up time" annotation (Placement(transformation(extent={{-260,140},{-240,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub5 + Buildings.Controls.OBC.CDL.Reals.Subtract sub5 "Calculate differential between time-to-next-occupancy and the cool-down time" annotation (Placement(transformation(extent={{-160,240},{-140,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final pre_y_start=false, final uHigh=0, final uLow=-60) "Hysteresis to check if the cooldown mode could be activated" annotation (Placement(transformation(extent={{-120,240},{-100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys5( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys5( final pre_y_start=false, final uHigh=0, final uLow=-60) "Hysteresis to activate the warm-up model" annotation (Placement(transformation(extent={{-120,150},{-100,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub6 + Buildings.Controls.OBC.CDL.Reals.Subtract sub6 "Calculate differential between time-to-next-occupancy and the warm-up time" annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys9( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys9( final pre_y_start=false, final uLow=-0.1, final uHigh=0.1) "Hysteresis that outputs if any zone temperature is lower than freeze protection threshold temperature" annotation (Placement(transformation(extent={{-180,-100},{-160,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys10( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys10( final pre_y_start=false, final uLow=-0.1, final uHigh=0.1) "Hysteresis that outputs if all zone temperature are higher than threshold temperature of ending freeze protection" annotation (Placement(transformation(extent={{-180,-140},{-160,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxWarCooTime( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxWarCooTime( final k=preWarCooTim) "Allowed maximum warm-up or cool-down time" annotation (Placement(transformation(extent={{-340,190},{-320,210}}))); @@ -246,16 +246,16 @@ protected Buildings.Controls.OBC.CDL.Logical.Or or6 "Check if it is in any of the 6 modes except unoccupied mode" annotation (Placement(transformation(extent={{40,-370},{60,-350}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between occupied mode index and unoccupied period index" annotation (Placement(transformation(extent={{160,310},{180,330}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "If the Cool-down, warm-up, or Occupied mode is on, then setback mode should not be activated." annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If the Cool-down, warm-up, or Occupied mode is on, then freeze protection setback mode should not be activated." annotation (Placement(transformation(extent={{60,-100},{80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "If the Cool-down, warm-up, or Occupied mode is on, then setup mode should not be activated." annotation (Placement(transformation(extent={{60,-200},{80,-180}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 "Logical not" @@ -273,13 +273,13 @@ protected final message="Level 4 alarm: window open during modes other than occupied mode") "Generate alarm message when window open during modes other than occupied mode" annotation (Placement(transformation(extent={{240,80},{260,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "If occupied mode is on, then cool down mode should not be activated" annotation (Placement(transformation(extent={{140,270},{160,290}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger setBacMod1 "Convert Real number to Integer number" annotation (Placement(transformation(extent={{180,270},{200,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "If occupied mode is on, then warm-up mode should not be activated." annotation (Placement(transformation(extent={{140,180},{160,200}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger setBacMod2 @@ -299,18 +299,18 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal allHot "Check if all zones are hot zone" annotation (Placement(transformation(extent={{-280,-230},{-260,-210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant actFreProTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant actFreProTem( final k=TZonFreProOn) "Threshold temperature to activate the freeze protection mode" annotation (Placement(transformation(extent={{-280,-110},{-260,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant endFreProTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant endFreProTem( final k=TZonFreProOff) "Threshold temperature to end the freeze protection mode" annotation (Placement(transformation(extent={{-280,-150},{-260,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Calculate differential between minimum zone temperature and freeze protection threshold temperature" annotation (Placement(transformation(extent={{-220,-100},{-200,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate differential between maximum zone temperature and threshold temperature of ending freeze protection" annotation (Placement(transformation(extent={{-220,-140},{-200,-120}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 @@ -319,10 +319,10 @@ protected Buildings.Controls.OBC.CDL.Logical.Or or7 "Enough hot zone or the high average zone temperature" annotation (Placement(transformation(extent={{-160,-200},{-140,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate the difference between maximum cool down time and the allowed maximum cool down time" annotation (Placement(transformation(extent={{-300,240},{-280,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate the differential between maximum warm-up time and the allowed maximum warm-up time" annotation (Placement(transformation(extent={{-300,140},{-280,160}}))); Buildings.Controls.OBC.CDL.Logical.Edge endSetBac diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/TrimAndRespond.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/TrimAndRespond.mo index 7e91252d91f..230dc2cced4 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/TrimAndRespond.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/TrimAndRespond.mo @@ -36,22 +36,22 @@ block TrimAndRespond "Block to inplement trim and respond logic" final delayOnInit=true) "Send an on signal after some delay time" annotation (Placement(transformation(extent={{-200,160},{-180,180}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr "Check if the real requests is more than ignored requests setting" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch netRes "Net setpoint reset value" + Buildings.Controls.OBC.CDL.Reals.Switch netRes "Net setpoint reset value" annotation (Placement(transformation(extent={{160,-20},{180,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant resAmoCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resAmoCon( final k=resAmo) "Respond amount constant" annotation (Placement(transformation(extent={{-200,-140},{-180,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Products of net requests and respond amount value" annotation (Placement(transformation(extent={{-20,-110},{0,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Product of trim and respond amount" annotation (Placement(transformation(extent={{-160,-110},{-140,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Product of respond and maximum amount" annotation (Placement(transformation(extent={{-160,-180},{-140,-160}}))); Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel( @@ -59,68 +59,68 @@ block TrimAndRespond "Block to inplement trim and respond logic" final y_start=iniSet) "Output the input signal with a unit delay" annotation (Placement(transformation(extent={{-100,96},{-80,116}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between initial setpoint and reseted setpoint" annotation (Placement(transformation(extent={{160,180},{180,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Before instant (device ON + delTim + samplePeriod), the setpoint should not be trimmed" annotation (Placement(transformation(extent={{120,0},{140,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Reinitialize setpoint to initial setting when device become OFF" annotation (Placement(transformation(extent={{100,130},{120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Logical switch" + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Logical switch" annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); Buildings.Controls.OBC.CDL.Discrete.Sampler sampler( final samplePeriod=samplePeriod) "Sample number of requests" annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr1 + Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr1 "Check if trim and response amount have same sign" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2 "Check if trim and response amount have opposite sign" annotation (Placement(transformation(extent={{-120,-180},{-100,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if response amount have positive sign" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=-1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=-1) "Convert results back to negative" annotation (Placement(transformation(extent={{80,-190},{100,-170}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant iniSetCon(k=iniSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant iniSetCon(k=iniSet) "Initial setpoint" annotation (Placement(transformation(extent={{-100,180},{-80,200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant numIgnReqCon(k=numIgnReq) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant numIgnReqCon(k=numIgnReq) "Number of ignored requests" annotation (Placement(transformation(extent={{-160,-60},{-140,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant triAmoCon(k=triAmo) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant triAmoCon(k=triAmo) "Trim amount constant" annotation (Placement(transformation(extent={{-200,-90},{-180,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxResCon(k=maxRes) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxResCon(k=maxRes) "Maximum response per time interval" annotation (Placement(transformation(extent={{-200,-210},{-180,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSetCon(k=maxSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSetCon(k=maxSet) "Maximum setpoint constant" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerTri(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerTri(k=0) "Zero reset amount during time range from (device ON) to (device ON + delTim + timSet)" annotation (Placement(transformation(extent={{60,-20},{80,0}}))); Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Convert integer input to real output" annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract difReqIgnReq + Buildings.Controls.OBC.CDL.Reals.Subtract difReqIgnReq "Difference between ignored request number and the real request number" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 + Buildings.Controls.OBC.CDL.Reals.Add add1 "Increase setpoint by amount of value defined from reset logic" annotation (Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Net reset value" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Net reset value" annotation (Placement(transformation(extent={{120,-96},{140,-76}}))); - Buildings.Controls.OBC.CDL.Continuous.Min minInp + Buildings.Controls.OBC.CDL.Reals.Min minInp "Total response should not be more than maximum response" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min1 + Buildings.Controls.OBC.CDL.Reals.Min min1 "Reset setpoint should not be higher than the maximum setpoint" annotation (Placement(transformation(extent={{0,90},{20,110}}))); Buildings.Controls.OBC.CDL.Logical.And and2 @@ -128,10 +128,10 @@ protected annotation (Placement(transformation(extent={{120,-40},{140,-20}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical Not" annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSetCon(k=minSet) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minSetCon(k=minSet) "Minimum setpoint constant" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxInp + Buildings.Controls.OBC.CDL.Reals.Max maxInp "Reset setpoint should not be lower than the minimum setpoint" annotation (Placement(transformation(extent={{40,90},{60,110}}))); Buildings.Controls.OBC.CDL.Utilities.Assert assMes( @@ -142,9 +142,9 @@ protected final message="Respond amount 'resAmo' and maximum respond amount 'maxRes' must have same sign.") "Generate alarm message" annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs "Absolute value of real input" + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute value of real input" annotation (Placement(transformation(extent={{-120,-140},{-100,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 "Absolute value of real input" + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Absolute value of real input" annotation (Placement(transformation(extent={{-120,-210},{-100,-190}}))); equation diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/GroupStatus.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/GroupStatus.mo index ac28da3a69e..b980b443d18 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/GroupStatus.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/GroupStatus.mo @@ -7,11 +7,11 @@ model GroupStatus numZonGro=2, zonGroMsk={true,false,true}) "Calculate zone group status" annotation (Placement(transformation(extent={{120,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim[3]( final k={1800,1700,1900}) "Warm-up time" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim[3]( final k={1600,1700,1800}) "Cooling down time" annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); @@ -21,19 +21,19 @@ model GroupStatus final shift={150,130,120}) "Window status" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-50,-300}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( final offset=0, final height=6.2831852, final duration=24*3600) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-140,-220},{-120,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin2 + Buildings.Controls.OBC.CDL.Reals.Sin sin2 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-100,-220},{-80,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=6) "Current zone temperature" annotation (Placement(transformation(extent={{-60,-220},{-40,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=273.15 + 22.5) "Current zone temperature" annotation (Placement(transformation(extent={{-20,-220},{0,-200}}))); @@ -60,10 +60,10 @@ model GroupStatus annotation (Placement(transformation(extent={{-20,130},{0,150}}))); Buildings.Controls.OBC.CDL.Logical.Timer tim3 "Time after input becomes true" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addPar1 + Buildings.Controls.OBC.CDL.Reals.Subtract addPar1 "Time to occupied period" annotation (Placement(transformation(extent={{20,130},{40,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract addPar3 + Buildings.Controls.OBC.CDL.Reals.Subtract addPar3 "Time to occupied period" annotation (Placement(transformation(extent={{20,10},{40,30}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse lowOccHea[3]( @@ -84,7 +84,7 @@ model GroupStatus final period=fill(3600, 3)) "Lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-130,-80}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetOff[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSetOff[3]( final k={285.15,282.15,283.15}) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); @@ -97,7 +97,7 @@ model GroupStatus final k=fill(false, 3)) "HIgher than unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-90,-140}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetOff[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSetOff[3]( final k={303.15,304.15,305.15}) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-140,-170},{-120,-150}}))); @@ -105,12 +105,12 @@ model GroupStatus final k=fill(false,3)) "End setup mode" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-90,-180}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse zonTem3( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse zonTem3( final amplitude=7, final period=600, final offset=273.15 + 19) "Zone 3 temperature" annotation (Placement(transformation(extent={{-80,-280},{-60,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zonTem2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zonTem2( final k=273.15 + 20) "Zone 2 temperature" annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); @@ -121,14 +121,14 @@ model GroupStatus Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant tNexOcc2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant tNexOcc2( final k=0) "Zone 2 next occupancy time" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=1800) "Constant" annotation (Placement(transformation(extent={{-20,170},{0,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1( final k=2100) "Constant" annotation (Placement(transformation(extent={{-20,60},{0,80}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/OperationMode.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/OperationMode.mo index 89d7da594ff..5d521c46d21 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/OperationMode.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/OperationMode.mo @@ -5,71 +5,71 @@ model OperationMode "Validate block for selecting operation mode" opeModSel(final numZon=1) "Operation mode selection" annotation (Placement(transformation(extent={{120,84},{140,116}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( final height=6.2831852, final duration=172800) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-140,40},{-120,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin1 + Buildings.Controls.OBC.CDL.Reals.Sin sin1 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-110,40},{-90,60}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=295.65) "Zone temperarure" annotation (Placement(transformation(extent={{-50,40},{-30,60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=14.5) "Gain factor" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetUno( final k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-140,70},{-120,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-100,100},{-80,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-140,120},{-120,140}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant cloWin( final k=0) "No window is open" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, origin={-130,0}))); - Buildings.Controls.OBC.CDL.Continuous.Greater lowThaHeaSet + Buildings.Controls.OBC.CDL.Reals.Greater lowThaHeaSet "True when the zone temperature is lower than the occupied heating setpoint" annotation (Placement(transformation(extent={{0,70},{20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater higThaCooSet + Buildings.Controls.OBC.CDL.Reals.Greater higThaCooSet "True when the zone temperature is higher than the occupied cooling setpoint" annotation (Placement(transformation(extent={{0,20},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2 + Buildings.Controls.OBC.CDL.Reals.Greater greEqu2 "True when the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3 + Buildings.Controls.OBC.CDL.Reals.Greater greEqu3 "True when the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); Buildings.Controls.SetPoints.OccupancySchedule occSch "Occupancy schedule" annotation (Placement(transformation(extent={{-100,140},{-80,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uLow=-0.5, final uHigh=0.5) "Hysteresis that outputs if the zone temperature is higher than its unoccupied heating setpoint by a given limit" annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( final uLow=-0.5, final uHigh=0.5) "Hysteresis that outputs if the zone temperature is lower than its unoccupied cooling setpoint by a given limit" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/TrimAndRespond.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/TrimAndRespond.mo index 9d7de30c96e..23be21e43a5 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/TrimAndRespond.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/TrimAndRespond.mo @@ -39,18 +39,18 @@ model TrimAndRespond "Model validates the trim and respond block" Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( final k=true) "Logic true indicating device ON" annotation (Placement(transformation(extent={{20,80},{40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( final amplitude=6, final freqHz=1/5400) "Block generates sine signal" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs + Buildings.Controls.OBC.CDL.Reals.Abs abs "Block generates absolute value of input" annotation (Placement(transformation(extent={{-52,40},{-32,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( final amplitude=6, freqHz=1/5400) "Block generates sine signal" annotation (Placement(transformation(extent={{-88,-90},{-68,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs1 + Buildings.Controls.OBC.CDL.Reals.Abs abs1 "Block generates absolute value of input" annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul( @@ -59,18 +59,18 @@ model TrimAndRespond "Model validates the trim and respond block" annotation (Placement(transformation(extent={{-88,-20},{-68,0}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{20,-20},{40,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi "Switch between two Real signals" + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between two Real signals" annotation (Placement(transformation(extent={{-48,-50},{-28,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) "Zero request when device is OFF" annotation (Placement(transformation(extent={{-88,-50},{-68,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round2(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-20,40},{0,60}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 "Convert real to integer" annotation (Placement(transformation(extent={{20,40},{40,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(final n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(final n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatus.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatus.mo index 067b9ee0871..be9b4709432 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatus.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatus.mo @@ -9,10 +9,10 @@ model ZoneStatus Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.ZoneStatus witWinZonSta(final have_winSen=true) "Status of zone when there is window operation sensor" annotation (Placement(transformation(extent={{60,-20},{80,8}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warUpTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warUpTim( final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowTim( final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Pulse uWinSta( @@ -21,19 +21,19 @@ model ZoneStatus final shift=1800) "Window on/off status" annotation (Placement(transformation(extent={{-10,-10},{10,10}},origin={-10,-80}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( final offset=0, final height=6.2831852, final duration=24*3600) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sin sin2 + Buildings.Controls.OBC.CDL.Reals.Sin sin2 "Block that outputs the sine of the input" annotation (Placement(transformation(extent={{-70,-50},{-50,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=12.5) "Gain factor" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter zonTem( + Buildings.Controls.OBC.CDL.Reals.AddParameter zonTem( final p=273.15 + 22.5) "Current zone temperature" annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatusDuplicator.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatusDuplicator.mo index b9cb3896297..30370d83d2f 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatusDuplicator.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/Validation/ZoneStatusDuplicator.mo @@ -5,7 +5,7 @@ model ZoneStatusDuplicator Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.ZoneStatusDuplicator zonStaDup(final nZon=5, final nGro=2) "Zone status duplicator" annotation (Placement(transformation(extent={{0,-40},{20,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant reaInp[6,5]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant reaInp[6,5]( final k=fill({1,2,3,4,5}, 6)) "Real inputs" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/ZoneStatus.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/ZoneStatus.mo index 49029157bd2..af6446eccc3 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/ZoneStatus.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/SetPoints/ZoneStatus.mo @@ -119,40 +119,40 @@ block ZoneStatus "Block that outputs zone temperature status" iconTransformation(extent={{100,-150},{140,-110}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Multiply pro "Decide if the cool down time of one zone should be ignored: if window is open, + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Decide if the cool down time of one zone should be ignored: if window is open, then output zero, otherwise, output cool-down time from optimal cool-down block" annotation (Placement(transformation(extent={{120,210},{140,230}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 "Decide if the warm-up time of one zone should be ignored: if window is open, + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Decide if the warm-up time of one zone should be ignored: if window is open, then output zero, otherwise, output warm-up time from optimal warm-up block" annotation (Placement(transformation(extent={{120,170},{140,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Calculate difference between zone temperature and the occupied heating setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the system should run in warm-up mode" annotation (Placement(transformation(extent={{0,80},{20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference between zone temperature and the occupied cooling setpoint" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys1( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the system should run in cool-down mode" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the zone temperature is lower than unoccupied heating setpoint" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub5 + Buildings.Controls.OBC.CDL.Reals.Subtract sub5 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-40,-200},{-20,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys5( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys5( final uLow=uLow, final uHigh=uHigh) "Hysteresis that outputs if the zone temperature is higher than unoccupied cooling setpoint" @@ -165,34 +165,34 @@ protected final k=false) if not have_winSen "Constant false" annotation (Placement(transformation(extent={{-140,190},{-120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant occHeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occHeaSet( final k=THeaSetOcc) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-120,120},{-100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant unoHeaSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant unoHeaSet( final k=THeaSetUno) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant occCooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant occCooSet( final k=TCooSetOcc) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant unoCooSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant unoCooSet( final k=TCooSetUno) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-120,-170},{-100,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate zone temperature difference to unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uLow=0, final uHigh=bouLim) "Hysteresis that outputs if the zone temperature is higher than its unoccupied heating setpoint by a given limit" annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 + Buildings.Controls.OBC.CDL.Reals.Subtract sub4 "Calculate zone temperature difference to unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-40,-240},{-20,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final uLow=0, final uHigh=bouLim) "Hysteresis that outputs if the zone temperature is lower than its unoccupied cooling setpoint by a given limit" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/Validation/FreezeProtectionMixedAir.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/Validation/FreezeProtectionMixedAir.mo index afdff32d1e5..54dd641e0f2 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/Validation/FreezeProtectionMixedAir.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/Generic/Validation/FreezeProtectionMixedAir.mo @@ -13,7 +13,7 @@ model FreezeProtectionMixedAir "Freeze protection signal based on mixed air temperature" annotation (Placement(transformation(extent={{0,0},{20,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin1( amplitude=20, freqHz=1/1800, startTime=0, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Controller.mo index 2a2e3fd3db8..54771974727 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Controller.mo @@ -348,7 +348,7 @@ block Controller "Controller for room VAV box" final durTimFlo=durTimFlo, final durTimDisAir=durTimDisAir) "Number of system requests" annotation (Placement(transformation(extent={{80,-100},{100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaLoo( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaLoo( final controllerType=controllerTypeHea, final k=kHea, final Ti=TiHea, @@ -356,7 +356,7 @@ block Controller "Controller for room VAV box" final yMax=1, final yMin=0) "Heating loop signal" annotation (Placement(transformation(extent={{-110,150},{-90,170}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooLoo( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooLoo( final controllerType=controllerTypeCoo, final k=kCoo, final Ti=TiCoo, diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/DamperValves.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/DamperValves.mo index 3375fd55354..5ff4f7a68b7 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/DamperValves.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/DamperValves.mo @@ -200,16 +200,16 @@ block DamperValves annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin + Buildings.Controls.OBC.CDL.Reals.Line lin "Active airflow setpoint for cooling" annotation (Placement(transformation(extent={{-160,270},{-140,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Line conTDisHeaSet + Buildings.Controls.OBC.CDL.Reals.Line conTDisHeaSet "Discharge air temperature for heating" annotation (Placement(transformation(extent={{-120,-82},{-100,-62}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin3 + Buildings.Controls.OBC.CDL.Reals.Line lin3 "Active airflow setpoint for heating" annotation (Placement(transformation(extent={{-80,-310},{-60,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conVal( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conVal( final controllerType=controllerTypeVal, final k=kVal, final Ti=TiVal, @@ -220,7 +220,7 @@ block DamperValves u_m(final unit="K", displayUnit="degC")) "Hot water valve controller" annotation (Placement(transformation(extent={{34,-90},{54,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conDam( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset conDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, @@ -230,84 +230,84 @@ block DamperValves final y_reset=0) if not have_pressureIndependentDamper "Damper position controller" annotation (Placement(transformation(extent={{280,220},{300,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Output active cooling airflow according to cooling control signal" annotation (Placement(transformation(extent={{140,260},{160,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Output active airflow when it is in deadband state" + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Output active airflow when it is in deadband state" annotation (Placement(transformation(extent={{132,40},{152,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Acitive heating airflow rate" + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Acitive heating airflow rate" annotation (Placement(transformation(extent={{80,-260},{100,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Output active heating airflow according to heating control signal" annotation (Placement(transformation(extent={{140,-260},{160,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 "Output active cooling airflow " + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Output active cooling airflow " annotation (Placement(transformation(extent={{60,200},{80,220}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-280,300},{-260,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1( final k=0) "Constant zero" annotation (Placement(transformation(extent={{100,240},{120,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer2( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-80,-2},{-60,18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3( final k=0) "Constant zero" annotation (Placement(transformation(extent={{-260,-110},{-240,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer6( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer6( final k=0) "Constant zero" annotation (Placement(transformation(extent={{80,-310},{100,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne( final k=1) "Constant one" annotation (Placement(transformation(extent={{-220,300},{-200,320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne2( final k=1) "Constant real value" annotation (Placement(transformation(extent={{-180,-340},{-160,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-200,-110},{-180,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conHal1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conHal1( final k=0.5) "Constant real value" annotation (Placement(transformation(extent={{-260,-340},{-240,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=dTDisZonSetMax) "Maximum heating discharge temperature" annotation (Placement(transformation(extent={{-260,-70},{-240,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=2.8) "Zone temperature pluTZonSets 2.8 degC" annotation (Placement(transformation(extent={{-260,-260},{-240,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final uHigh=0.05, final uLow=0.01) "Check if cooling control signal is greater than zero" annotation (Placement(transformation(extent={{-280,220},{-260,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uHigh=0.05, final uLow=0.01) "Check if heating control signal is greater than 0" annotation (Placement(transformation(extent={{-260,-220},{-240,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final uLow=TDisMin - 0.1, final uHigh=TDisMin + 0.1) "Check if discharge air temperature is greater than lowest discharge air temperature" annotation (Placement(transformation(extent={{-240,120},{-220,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys6( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys6( final uLow=-0.1, final uHigh=0.1) "Check if supply air temperature is greater than room temperature" annotation (Placement(transformation(extent={{-120,190},{-100,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys7( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys7( final uLow=-0.1, final uHigh=0.1) "Check if discharge air temperature is greater than room temperature plus 2.8 degC" annotation (Placement(transformation(extent={{-80,-260},{-60,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate temperature difference between discharge air and room plus 2.8 degC" annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate temperature difference between AHU supply air and room " annotation (Placement(transformation(extent={{-160,190},{-140,210}}))); Buildings.Controls.OBC.CDL.Logical.TrueHoldWithReset truHol2(duration=600) @@ -325,24 +325,24 @@ protected final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.unoccupied) "Constant signal for unoccupied mode" annotation (Placement(transformation(extent={{170,-322},{190,-302}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch watValPosUno "Output hot water valve position" + Buildings.Controls.OBC.CDL.Reals.Switch watValPosUno "Output hot water valve position" annotation (Placement(transformation(extent={{280,-30},{300,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch damPosUno "Output damper position" + Buildings.Controls.OBC.CDL.Reals.Switch damPosUno "Output damper position" annotation (Placement(transformation(extent={{280,60},{300,80}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 "Negation of input signal" annotation (Placement(transformation(extent={{200,-260},{220,-240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant lowDisAirTem( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant lowDisAirTem( final k=TDisMin) "Lowest allowed discharge air temperature" annotation (Placement(transformation(extent={{-68,-108},{-48,-88}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "Output hot water valve position in case of low discharge air temperature" annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical not" annotation (Placement(transformation(extent={{-68,-64},{-48,-44}}))); Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not" annotation (Placement(transformation(extent={{-120,120},{-100,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Output hot water valve position in case of low discharge air temperature" annotation (Placement(transformation(extent={{104,-82},{124,-62}}))); Buildings.Controls.OBC.CDL.Logical.Not not6 "Negation of input signal" @@ -350,22 +350,22 @@ protected Buildings.Controls.OBC.CDL.Logical.And and1 "Check if it is not in heating mode and the discharge temperature is not too low" annotation (Placement(transformation(extent={{20,-56},{40,-36}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Active airflow setpoint" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Active airflow setpoint" annotation (Placement(transformation(extent={{200,250},{220,270}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 "Active airflow set point" + Buildings.Controls.OBC.CDL.Reals.Add add4 "Active airflow set point" annotation (Placement(transformation(extent={{180,40},{200,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor if not have_pressureIndependentDamper "Normalized discharge volume flow rate" annotation (Placement(transformation(extent={{240,150},{260,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant nomFlow( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant nomFlow( final k=V_flow_nominal) "Nominal volume flow rate" annotation (Placement(transformation(extent={{200,200},{220,220}}))); - Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor + Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate" annotation (Placement(transformation(extent={{240,220},{260,240}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=1) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=1) if have_pressureIndependentDamper "Block that can be disabled so remove the connection" annotation (Placement(transformation(extent={{240,120},{260,140}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/ActiveAirFlow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/ActiveAirFlow.mo index 3bb9d6a8a7d..15ba1110592 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/ActiveAirFlow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/ActiveAirFlow.mo @@ -100,34 +100,34 @@ block ActiveAirFlow annotation (Placement(transformation(extent={{280,10},{320,50}}), iconTransformation(extent={{100,-60},{140,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=VOutPerPer_flow) if have_occSen "Outdoor air per person" annotation (Placement(transformation(extent={{-140,-330},{-120,-310}}))); - Buildings.Controls.OBC.CDL.Continuous.Add breZon if have_occSen + Buildings.Controls.OBC.CDL.Reals.Add breZon if have_occSen "Breathing zone airflow" annotation (Placement(transformation(extent={{-80,-350},{-60,-330}}))); - Buildings.Controls.OBC.CDL.Continuous.Line co2ConLoo if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Line co2ConLoo if have_CO2Sen "Maintain CO2 concentration at setpoint, reset 0% at (setpoint-200) and 100% at setpoint" annotation (Placement(transformation(extent={{-140,-190},{-120,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Line lin1 if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Line lin1 if have_CO2Sen "Reset occupied minimum airflow setpoint from 0% at VDisSetMin_flow and 100% at VDisCooSetMax_flow" annotation (Placement(transformation(extent={{20,-130},{40,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Check if zone minimum airflow setpoint Vmin is less than the allowed controllable VDisConMin_flow" annotation (Placement(transformation(extent={{-20,-460},{0,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1 "Check if zone minimum airflow setpoint VDisSetMin_flow is non-zero" annotation (Placement(transformation(extent={{-80,-410},{-60,-390}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Reset occupied minimum airflow according to occupancy" annotation (Placement(transformation(extent={{80,-290},{100,-270}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Reset occupied minimum airflow according to window status" annotation (Placement(transformation(extent={{200,-510},{220,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Reset occupied minimum airflow setpoint according to minimum controllable airflow" annotation (Placement(transformation(extent={{140,-410},{160,-390}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 if have_CO2Sen + Buildings.Controls.OBC.CDL.Reals.Switch swi3 if have_CO2Sen "Switch between zero signal and CO2 control loop signal depending on the operation mode" annotation (Placement(transformation(extent={{-80,-100},{-60,-120}}))); Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and" @@ -136,42 +136,42 @@ block ActiveAirFlow annotation (Placement(transformation(extent={{80,-410},{100,-390}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 if have_winSen "Logical not" annotation (Placement(transformation(extent={{-240,-510},{-220,-490}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.75, final h=0.5) if have_occSen "Check if the zone becomes unpopulated" annotation (Placement(transformation(extent={{-140,-290},{-120,-270}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonAir1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minZonAir1( final k=VDisSetMin_flow) if not have_CO2Sen "Zone minimum airflow setpoint" annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxZonCooAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxZonCooAir( final k=VDisCooSetMax_flow) if have_CO2Sen "Zone maximum cooling airflow setpoint" annotation (Placement(transformation(extent={{-80,-190},{-60,-170}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant breZonAre( final k=VOutPerAre_flow*AFlo) if have_occSen "Area component of the breathing zone outdoor airflow" annotation (Placement(transformation(extent={{-140,-370},{-120,-350}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conVolMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conVolMin( final k=VDisConMin_flow) "VAV box controllable minimum" annotation (Placement(transformation(extent={{-80,-440},{-60,-420}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant minZonAir( final k=VDisSetMin_flow) "Zone minimum airflow setpoint" annotation (Placement(transformation(extent={{-240,-60},{-220,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setCO1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setCO1( final k=CO2Set - 200) if have_CO2Sen "CO2 setpoints minus 200" annotation (Placement(transformation(extent={{-240,-140},{-220,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setCO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setCO2( final k=CO2Set) if have_CO2Sen "CO2 setpoints" annotation (Placement(transformation(extent={{-240,-210},{-220,-190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerFlo(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerFlo(final k=0) "Zero airflow when window is open" annotation (Placement(transformation(extent={{140,-540},{160,-520}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( @@ -180,37 +180,37 @@ protected Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( final k=true) if not have_winSen "Constant true" annotation (Placement(transformation(extent={{40,-490},{60,-470}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCon( final k=0) "Output zero" annotation (Placement(transformation(extent={{-240,-170},{-220,-150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCon1( final k=0) if have_CO2Sen "Output zero" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCon2( final k=0) if have_CO2Sen "Output zero" annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCon3( final k=0) if not have_occSen "Output zero" annotation (Placement(transformation(extent={{0,-350},{20,-330}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneCon( final k=1) if have_CO2Sen "Output one" annotation (Placement(transformation(extent={{-240,-240},{-220,-220}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneCon1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneCon1( final k=1) if have_CO2Sen "Output one" annotation (Placement(transformation(extent={{-80,-160},{-60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxAir( final k=VDisCooSetMax_flow) "Cooling maximum airflow" annotation (Placement(transformation(extent={{-240,-20},{-220,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxAir( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxAir( final k=VDisHeaSetMax_flow) "Heat maximum airflow" annotation (Placement(transformation(extent={{-180,-20},{-160,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon6( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCon6( final k=0) "Output zero" annotation (Placement(transformation(extent={{-240,170},{-220,190}}))); @@ -249,60 +249,60 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Check if current operation mode is setback mode" annotation (Placement(transformation(extent={{40,220},{60,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Select cooling maximum based on operation mode" annotation (Placement(transformation(extent={{-100,290},{-80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Select heating maximum based on operation mode" annotation (Placement(transformation(extent={{-100,260},{-80,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 + Buildings.Controls.OBC.CDL.Reals.Switch swi9 "Select cooling maximum based on operation mode" annotation (Placement(transformation(extent={{-100,220},{-80,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi17 + Buildings.Controls.OBC.CDL.Reals.Switch swi17 "Select heating minimum based on operation mode" annotation (Placement(transformation(extent={{120,290},{140,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi18 + Buildings.Controls.OBC.CDL.Reals.Switch swi18 "Select heating maximum based on operation mode" annotation (Placement(transformation(extent={{120,260},{140,280}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi22 + Buildings.Controls.OBC.CDL.Reals.Switch swi22 "Select heating minimum based on operation mode" annotation (Placement(transformation(extent={{120,220},{140,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi23 + Buildings.Controls.OBC.CDL.Reals.Switch swi23 "Select heating maximum based on operation mode" annotation (Placement(transformation(extent={{120,190},{140,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi24 + Buildings.Controls.OBC.CDL.Reals.Switch swi24 "Select cooling maximum based on operation mode" annotation (Placement(transformation(extent={{-100,150},{-80,170}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi25 + Buildings.Controls.OBC.CDL.Reals.Switch swi25 "Select cooling minimum based on operation mode" annotation (Placement(transformation(extent={{-100,120},{-80,140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi26 + Buildings.Controls.OBC.CDL.Reals.Switch swi26 "Select minimum based on operation mode" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi27 + Buildings.Controls.OBC.CDL.Reals.Switch swi27 "Select heating minimum based on operation mode" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi28 + Buildings.Controls.OBC.CDL.Reals.Switch swi28 "Select heating maximum based on operation mode" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Max maxInp "Find greater input" + Buildings.Controls.OBC.CDL.Reals.Max maxInp "Find greater input" annotation (Placement(transformation(extent={{-100,-20},{-80,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add real input" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Add real input" annotation (Placement(transformation(extent={{200,170},{220,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Add actCooMaxAir + Buildings.Controls.OBC.CDL.Reals.Add actCooMaxAir "Active cooling maximum airflow" annotation (Placement(transformation(extent={{240,160},{260,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add real input" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Add real input" annotation (Placement(transformation(extent={{200,80},{220,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add actHeaMinAir + Buildings.Controls.OBC.CDL.Reals.Add actHeaMinAir "Active heating minimum airflow" annotation (Placement(transformation(extent={{240,60},{260,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add real input" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real input" annotation (Placement(transformation(extent={{180,40},{200,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add actHeaMaxAir1 + Buildings.Controls.OBC.CDL.Reals.Add actHeaMaxAir1 "Active heating maximum airflow" annotation (Placement(transformation(extent={{240,20},{260,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 "Add real input" + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add real input" annotation (Placement(transformation(extent={{180,0},{200,20}}))); equation diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/Validation/ActiveAirFlow.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/Validation/ActiveAirFlow.mo index d174f516982..a69d2edd9f8 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/Validation/ActiveAirFlow.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SetPoints/Validation/ActiveAirFlow.mo @@ -25,12 +25,12 @@ model ActiveAirFlow have_CO2Sen=true) "Output the active airflow setpoint for VAV reheat terminal unit" annotation (Placement(transformation(extent={{60,0},{80,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp coCon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp coCon( height=400, duration=86400, offset=500) "CO2 concentration" annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine( amplitude=2, freqHz=1/86400, offset=2) "occNum" @@ -45,7 +45,7 @@ model ActiveAirFlow annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(k=2) "Cool-down mode index" annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1(n=0) + Buildings.Controls.OBC.CDL.Reals.Round round1(n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SystemRequests.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SystemRequests.mo index d53e9655012..2ec4fb3ebab 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SystemRequests.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/SystemRequests.mo @@ -128,47 +128,47 @@ block SystemRequests "Heating plant request" annotation (Placement(transformation(extent={{180,-450},{220,-410}}), iconTransformation(extent={{100,-110},{140,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( final uLow=errTZonCoo_1 - 0.1, final uHigh=errTZonCoo_1 + 0.1) "Check if zone temperature is greater than cooling setpoint by errTZonCoo_1" annotation (Placement(transformation(extent={{-60,190},{-40,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys3( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys3( final uLow=errTZonCoo_2 - 0.1, final uHigh=errTZonCoo_2 + 0.1) "Check if zone temperature is greater than cooling setpoint by errTZonCoo_2" annotation (Placement(transformation(extent={{-60,130},{-40,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys4( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys4( final uLow=0.85, final uHigh=0.95) "Check if damper position is greater than 0.95" annotation (Placement(transformation(extent={{-60,-160},{-40,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys5( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys5( final uLow=0.85, final uHigh=0.95) "Check if cooling loop signal is greater than 0.95" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys7( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys7( final uHigh=0.01, final uLow=0.005) "Check if discharge airflow setpoint is greater than 0" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys8( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys8( final uLow=-0.1, final uHigh=0.1) if have_heaWatCoi "Check if discharge air temperature is errTDis_1 less than setpoint" annotation (Placement(transformation(extent={{-40,-250},{-20,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys9( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys9( final uLow=-0.1, final uHigh=0.1) if have_heaWatCoi "Check if discharge air temperature is errTDis_2 less than setpoint" annotation (Placement(transformation(extent={{-40,-310},{-20,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys10( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys10( final uLow=0.85, final uHigh=0.95) if have_heaWatCoi "Check if valve position is greater than 0.95" annotation (Placement(transformation(extent={{-140,-360},{-120,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys11( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys11( final uHigh=0.95, final uLow=0.1) if (have_heaWatCoi and have_heaPla) "Check if valve position is greater than 0.95" @@ -183,7 +183,7 @@ protected final samplePeriod=samplePeriod) "Delay value to record input value" annotation (Placement(transformation(extent={{-80,450},{-60,470}}))); - Buildings.Controls.OBC.CDL.Continuous.Abs abs "Absolute change of the setpoint temperature" + Buildings.Controls.OBC.CDL.Reals.Abs abs "Absolute change of the setpoint temperature" annotation (Placement(transformation(extent={{100,400},{120,420}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler triSam "Sample the setpoint changed value when there is change" @@ -196,47 +196,47 @@ protected annotation (Placement(transformation(extent={{60,260},{80,280}}))); Buildings.Controls.OBC.CDL.Logical.Timer tim "Calculate time" annotation (Placement(transformation(extent={{0,330},{20,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre1 + Buildings.Controls.OBC.CDL.Reals.Greater gre1 "Check if current model time is greater than the sample period" annotation (Placement(transformation(extent={{-80,400},{-60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys2( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hys2( final uLow=0.05, final uHigh=0.15) "Check if there is setpoint change" annotation (Placement(transformation(extent={{-120,330},{-100,350}}))); - Buildings.Controls.OBC.CDL.Continuous.Min supTim "Suppression time" + Buildings.Controls.OBC.CDL.Reals.Min supTim "Suppression time" annotation (Placement(transformation(extent={{0,270},{20,290}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.ModelTime modTim "Time of the model" + Buildings.Controls.OBC.CDL.Reals.Sources.ModelTime modTim "Time of the model" annotation (Placement(transformation(extent={{-140,400},{-120,420}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=540) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=540) "Convert change of degC to change of degF and find out suppression time (5 min/degF))" annotation (Placement(transformation(extent={{-80,270},{-60,290}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k=0.5) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(final k=0.5) "50% of setpoint" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k=0.7) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k=0.7) "70% of setpoint" annotation (Placement(transformation(extent={{-100,-98},{-80,-78}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Calculate difference of previous and current setpoints" annotation (Placement(transformation(extent={{-20,424},{0,444}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 + Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,190},{-80,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 + Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint" annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub6 if have_heaWatCoi + Buildings.Controls.OBC.CDL.Reals.Subtract sub6 if have_heaWatCoi "Calculate difference of discharge temperature (plus errTDis_1) and its setpoint" annotation (Placement(transformation(extent={{-80,-250},{-60,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub7 if have_heaWatCoi + Buildings.Controls.OBC.CDL.Reals.Subtract sub7 if have_heaWatCoi "Calculate difference of discharge temperature (plus errTDis_2) and its setpoint" annotation (Placement(transformation(extent={{-80,-310},{-60,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=errTDis_1) if have_heaWatCoi "Discharge temperature plus errTDis_1" annotation (Placement(transformation(extent={{-140,-272},{-120,-252}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=errTDis_2) if have_heaWatCoi "Discharge temperature plus errTDis_2" annotation (Placement(transformation(extent={{-140,-330},{-120,-310}}))); @@ -259,91 +259,91 @@ protected annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and" annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con( final k=samplePeriod) "Sample period time" annotation (Placement(transformation(extent={{-140,370},{-120,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer(final k=0.0) "Constant zero" annotation (Placement(transformation(extent={{-20,370},{0,390}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant thrCooResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant thrCooResReq(final k= 3.0) "Constant 3" annotation (Placement(transformation(extent={{40,220},{60,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant twoCooResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant twoCooResReq(final k= 2.0) "Constant 2" annotation (Placement(transformation(extent={{40,160},{60,180}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneCooResReq(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneCooResReq(final k=1.0) "Constant 1" annotation (Placement(transformation(extent={{40,100},{60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCooReq(final k=0.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerCooReq(final k=0.0) "Constant 0" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant thrPreResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant thrPreResReq(final k= 3.0) "Constant 3" annotation (Placement(transformation(extent={{40,-20},{60,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant twoPreResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant twoPreResReq(final k= 2.0) "Constant 2" annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerPreResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerPreResReq(final k= 0.0) "Constant 0" annotation (Placement(transformation(extent={{40,-180},{60,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant onePreResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant onePreResReq(final k= 1.0) "Constant 1" annotation (Placement(transformation(extent={{40,-140},{60,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant thrHeaResReq( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant thrHeaResReq( final k=3) if have_heaWatCoi "Constant 3" annotation (Placement(transformation(extent={{40,-220},{60,-200}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant twoHeaResReq( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant twoHeaResReq( final k=2) if have_heaWatCoi "Constant 2" annotation (Placement(transformation(extent={{40,-280},{60,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneHeaResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneHeaResReq(final k= 1.0) if have_heaWatCoi "Constant 1" annotation (Placement(transformation(extent={{40,-340},{60,-320}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerHeaResReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerHeaResReq(final k= 0.0) if have_heaWatCoi "Constant 0" annotation (Placement(transformation(extent={{40,-380},{60,-360}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerBoiPlaReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerBoiPlaReq(final k= 0.0) if (have_heaWatCoi and have_heaPla) "Constant 0" annotation (Placement(transformation(extent={{40,-460},{60,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneBoiPlaReq(final k= + Buildings.Controls.OBC.CDL.Reals.Sources.Constant oneBoiPlaReq(final k= 1.0) if (have_heaWatCoi and have_heaPla) "Constant 1" annotation (Placement(transformation(extent={{40,-420},{60,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSupTim(k=1800) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant maxSupTim(k=1800) "Maximum suppression time 30 minutes" annotation (Placement(transformation(extent={{-80,240},{-60,260}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant con5(k=true) "Constant true" annotation (Placement(transformation(extent={{60,290},{80,310}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Use setpoint different value when half sample period time has passed" annotation (Placement(transformation(extent={{40,400},{60,420}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Output 3 or other request " + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Output 3 or other request " annotation (Placement(transformation(extent={{100,190},{120,210}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Output 2 or other request " + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Output 2 or other request " annotation (Placement(transformation(extent={{100,130},{120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Output 0 or 1 request " + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Output 0 or 1 request " annotation (Placement(transformation(extent={{100,80},{120,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 "Output 3 or other request " + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "Output 3 or other request " annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 "Output 2 or other request " + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "Output 2 or other request " annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 "Output 0 or 1 request " + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "Output 0 or 1 request " annotation (Placement(transformation(extent={{100,-160},{120,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 if have_heaWatCoi + Buildings.Controls.OBC.CDL.Reals.Switch swi7 if have_heaWatCoi "Output 3 or other request " annotation (Placement(transformation(extent={{100,-250},{120,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 if have_heaWatCoi + Buildings.Controls.OBC.CDL.Reals.Switch swi8 if have_heaWatCoi "Output 2 or other request " annotation (Placement(transformation(extent={{100,-310},{120,-290}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 if have_heaWatCoi + Buildings.Controls.OBC.CDL.Reals.Switch swi9 if have_heaWatCoi "Output 0 or 1 request " annotation (Placement(transformation(extent={{100,-360},{120,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi10 if (have_heaWatCoi and + Buildings.Controls.OBC.CDL.Reals.Switch swi10 if (have_heaWatCoi and have_heaPla) "Output 0 or 1 request " annotation (Placement(transformation(extent={{100,-440},{120,-420}}))); @@ -383,13 +383,13 @@ protected final samplePeriod=samplePeriod) "Sample input signal, as the output signal will go to the trim and respond which also samples at samplePeriod" annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greVDis50 + Buildings.Controls.OBC.CDL.Reals.Greater greVDis50 "Check if discharge airflow is less than 50% of setpoint" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater greVDis70 + Buildings.Controls.OBC.CDL.Reals.Greater greVDis70 "Check if discharge airflow is less than 70% of setpoint" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les + Buildings.Controls.OBC.CDL.Reals.Less les "Check if the suppression time has not yet passed" annotation (Placement(transformation(extent={{38,330},{58,350}}))); Buildings.Controls.OBC.CDL.Logical.Not notLes diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/DamperValves.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/DamperValves.mo index 9060321643a..6244a00f471 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/DamperValves.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/DamperValves.mo @@ -6,50 +6,50 @@ model DamperValves damVal(kDam=1, V_flow_nominal=2) "Output signal for controlling VAV reheat box damper and valve position" annotation (Placement(transformation(extent={{60,40},{80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( duration=36000, height=-1, offset=1, startTime=0) "Heating control signal" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( height=1, duration=36000, offset=0, startTime=50400) "Cooling control signal" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaSet(k=273.15 + 20) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSet(k=273.15 + 20) "Zone heating setpoint temperature" annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon(k=273.15 + 22) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon(k=273.15 + 22) "Zone temperature" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSup(k=273.15 + 13) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSup(k=273.15 + 13) "AHU supply air temperature" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActMin_flow(k=0.01) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow(k=0.01) "Active minimum airflow setpoint" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMin_flow(k=0.015) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMin_flow(k=0.015) "Active heating minimum airflow setpoint" annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActHeaMax_flow(k=0.05) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow(k=0.05) "Active heating maximum airflow setpoint" annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMin_flow(k=0.015) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMin_flow(k=0.015) "Active cooling minimum airflow setpoint" annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VActCooMax_flow(k=0.075) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow(k=0.075) "Active cooling maximum airflow setpoint" annotation (Placement(transformation(extent={{20,70},{40,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin VDis_flow( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis_flow( offset=0.015, amplitude=0.002, freqHz=1/86400) "Discharge airflow rate" annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDis(k=273.15 + 25) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDis(k=273.15 + 25) "Discharge air temperature" annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant occSig( diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/SystemRequests.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/SystemRequests.mo index 13ed742c4e6..4fee2462623 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/SystemRequests.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Reheat/Validation/SystemRequests.mo @@ -6,38 +6,38 @@ model SystemRequests sysReq_RehBox(have_heaPla=true, have_heaWatCoi=true) "Block outputs system requests" annotation (Placement(transformation(extent={{60,60},{80,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine(freqHz=1/7200, offset=296.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine(freqHz=1/7200, offset=296.15) "Generate data for setpoint" annotation (Placement(transformation(extent={{-60,80},{-40,100}}))); Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet(samplePeriod=1800) "Cooling setpoint temperature" annotation (Placement(transformation(extent={{-20,80},{0,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon( freqHz=1/7200, amplitude=2, offset=299.15) "Zone temperature" annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo( height=0.9, duration=7200, offset=0.1) "Cooling loop signal" annotation (Placement(transformation(extent={{-20,30},{0,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet( height=0.9, duration=7200, offset=0.1) "Discharge airflow rate setpoint" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirRate( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirRate( duration=7200, offset=0.1, height=0.3) "Discharge airflow rate" annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp damPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos( duration=7200, height=0.7, offset=0.3) "Damper position" annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sine1( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1( freqHz=1/7200, offset=305.15) "Generate data for setpoint" @@ -46,13 +46,13 @@ model SystemRequests samplePeriod=1800) "Discharge air setpoint temperature" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin TDis( freqHz=1/7200, amplitude=2, offset=293.15) "Discharge air temperature" annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp valPos( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp valPos( duration=7200, height=1, offset=0) diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/Validation/ZoneTemperatures.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/Validation/ZoneTemperatures.mo index db647bb5477..69ab0836cc6 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/Validation/ZoneTemperatures.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/Validation/ZoneTemperatures.mo @@ -9,27 +9,27 @@ model ZoneTemperatures "Validate block for zone set point" final heaAdj=true) "Block that determines the thermal zone setpoints" annotation (Placement(transformation(extent={{100,52},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetOcc( final k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetOcc( final k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonCooSetUno( final k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSetUno( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSetUno( final k=287.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin cooSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin cooSetAdj( final freqHz=1/28800) "Cooling setpoint adjustment" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin heaSetAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin heaSetAdj( final freqHz=1/28800, final amplitude=0.5) "Heating setpoint adjustment" @@ -42,11 +42,11 @@ model ZoneTemperatures "Validate block for zone set point" final k=0) "Heating demand limit level" annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ram( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram( final duration=28800) "Generate ramp output" annotation (Placement(transformation(extent={{-120,-100},{-100,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( final t=0.75) "Check if input is greater than 0.75" annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); @@ -67,14 +67,14 @@ model ZoneTemperatures "Validate block for zone set point" annotation (Placement(transformation(extent={{60,10},{80,30}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not" annotation (Placement(transformation(extent={{-40,-100},{-20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerAdj( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zerAdj( final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Switch to zero adjustment when window is open" annotation (Placement(transformation(extent={{-20,10},{0,30}}))); diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/ZoneTemperatures.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/ZoneTemperatures.mo index 075b658cbdc..4e3cf287f35 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/ZoneTemperatures.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/SetPoints/ZoneTemperatures.mo @@ -174,28 +174,28 @@ block ZoneTemperatures annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); Buildings.Controls.OBC.CDL.Logical.Not not1 "Logic not" annotation (Placement(transformation(extent={{0,140},{20,160}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar3( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar3( final p=incTSetDem_3) "Increase setpoint by 2.2 degC" annotation (Placement(transformation(extent={{40,20},{60,40}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar1( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=incTSetDem_2) "Increase setpoint by 1.1 degC" annotation (Placement(transformation(extent={{40,60},{60,80}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar2( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar2( final p=incTSetDem_1) "Increase setpoint by 0.56 degC" annotation (Placement(transformation(extent={{40,100},{60,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro6 + Buildings.Controls.OBC.CDL.Reals.Multiply pro6 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,140},{100,160}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro "Output product of the two inputs" annotation (Placement(transformation(extent={{80,100},{100,120}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro1 + Buildings.Controls.OBC.CDL.Reals.Multiply pro1 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,60},{100,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro2 + Buildings.Controls.OBC.CDL.Reals.Multiply pro2 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,20},{100,40}}))); Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler heaSetFre @@ -205,28 +205,28 @@ block ZoneTemperatures annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not" annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro7 + Buildings.Controls.OBC.CDL.Reals.Multiply pro7 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-80},{100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar6( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar6( final p=-decTSetDem_1) "Decrease setpoint by 0.56 degC" annotation (Placement(transformation(extent={{40,-120},{60,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar5( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar5( final p=-decTSetDem_2) "Decrease setpoint by 1.1 degC" annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar4( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar4( final p=-decTSetDem_3) "Decrease setpoint by 2.2 degC" annotation (Placement(transformation(extent={{40,-200},{60,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro5 + Buildings.Controls.OBC.CDL.Reals.Multiply pro5 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-200},{100,-180}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro4 + Buildings.Controls.OBC.CDL.Reals.Multiply pro4 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-160},{100,-140}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro3 + Buildings.Controls.OBC.CDL.Reals.Multiply pro3 "Output product of the two inputs" annotation (Placement(transformation(extent={{80,-120},{100,-100}}))); Buildings.Controls.OBC.CDL.Logical.Timer tim(final t=300) @@ -238,11 +238,11 @@ block ZoneTemperatures Buildings.Controls.OBC.CDL.Logical.Edge edg1 "Instant when the zone becomes more than 5 minutes" annotation (Placement(transformation(extent={{-40,-280},{-20,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter heaSetDec( + Buildings.Controls.OBC.CDL.Reals.AddParameter heaSetDec( final p=-1.1) "Heating setpoint decrease due to the 5 minutes unpopulation under occupied mode" annotation (Placement(transformation(extent={{100,-320},{120,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter cooSetInc( + Buildings.Controls.OBC.CDL.Reals.AddParameter cooSetInc( final p=1.1) "Heating setpoint increase due to the 5 minutes unpopulation under occupied mode" annotation (Placement(transformation(extent={{100,-280},{120,-260}}))); @@ -252,21 +252,21 @@ block ZoneTemperatures Buildings.Controls.OBC.CDL.Discrete.TriggeredSampler heaSetSam "Sample current heating setpoint when zone becomes unpopulated by 5 minutes" annotation (Placement(transformation(extent={{40,-320},{60,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add1 "Adjust heating setpoint" + Buildings.Controls.OBC.CDL.Reals.Add add1 "Adjust heating setpoint" annotation (Placement(transformation(extent={{140,240},{160,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add2 "Adjust cooling setpoint" + Buildings.Controls.OBC.CDL.Reals.Add add2 "Adjust cooling setpoint" annotation (Placement(transformation(extent={{-200,340},{-180,360}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter cooSetLim( + Buildings.Controls.OBC.CDL.Reals.Limiter cooSetLim( final uMax=TZonCooOnMax, final uMin=TZonCooOnMin) "Limit occupied zone cooling setpoint" annotation (Placement(transformation(extent={{-240,-530},{-220,-510}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter heaSetLim( + Buildings.Controls.OBC.CDL.Reals.Limiter heaSetLim( final uMax=TZonHeaOnMax, final uMin=TZonHeaOnMin) "Limit occupied zone heating setpoint" annotation (Placement(transformation(extent={{-240,-590},{-220,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( final p=-0.56) "Cooling setpoint minus 0.56 degC" annotation (Placement(transformation(extent={{160,-590},{180,-570}}))); @@ -297,18 +297,18 @@ protected Buildings.Controls.OBC.CDL.Logical.Sources.Constant cooSetAdjCon(k=(cooAdj or sinAdj)) "Cooling setpoint adjustable" annotation (Placement(transformation(extent={{-340,320},{-320,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0) "Zero adjustment" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-340,280},{-320,300}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3(final k=0) if not (cooAdj or sinAdj) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con3(final k=0) if not (cooAdj or sinAdj) "Zero adjustment" annotation (Placement(transformation(extent={{-340,360},{-320,380}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4(final k=0) if not heaAdj + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con4(final k=0) if not heaAdj "Zero adjustment" annotation (Placement(transformation(extent={{-340,240},{-320,260}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant heaSetAdjCon(final k=heaAdj) "Heating setpoint adjustable" annotation (Placement(transformation(extent={{-60,240},{-40,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(final k=0) "Zero adjustment" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(final k=0) "Zero adjustment" annotation (Placement(transformation(extent={{-60,200},{-40,220}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant sinSetAdjCon(final k=sinAdj) "Single common setpoint adjustable" @@ -330,16 +330,16 @@ protected Buildings.Controls.OBC.CDL.Logical.Sources.Constant have_occSenCon(final k=have_occSen) "Check if there is occupancy sensor" annotation (Placement(transformation(extent={{160,-360},{180,-340}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetWinOpe(final k=TZonCooSetWinOpe) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSetWinOpe(final k=TZonCooSetWinOpe) "Cooling setpoint when window is open" annotation (Placement(transformation(extent={{-240,-480},{-220,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetWinOpe(final k=TZonHeaSetWinOpe) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSetWinOpe(final k=TZonHeaSetWinOpe) "Heating setpoint when window is open" annotation (Placement(transformation(extent={{-120,-480},{-100,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant alaZer(k=-0.2) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant alaZer(k=-0.2) "Alarm level 0" annotation (Placement(transformation(extent={{-180,-400},{-160,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant alaFou(k=3.8) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant alaFou(k=3.8) "Alarm level 4" annotation (Placement(transformation(extent={{-140,-400},{-120,-380}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt @@ -366,82 +366,82 @@ protected annotation (Placement(transformation(extent={{-220,-420},{-200,-400}}))); Buildings.Controls.OBC.CDL.Logical.Not not5 "Other than occupied mode" annotation (Placement(transformation(extent={{-280,-400},{-260,-380}}))); - Buildings.Controls.OBC.CDL.Continuous.Less les + Buildings.Controls.OBC.CDL.Reals.Less les "Check if occupied cooling setpoint is less than unoccupied one" annotation (Placement(transformation(extent={{20,-550},{40,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre + Buildings.Controls.OBC.CDL.Reals.Greater gre "Check if occupied heating setpoint is greater than unoccupied one" annotation (Placement(transformation(extent={{20,-610},{40,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Greater gre2 + Buildings.Controls.OBC.CDL.Reals.Greater gre2 "Check whether heating setpoint exceeds cooling setpoint minus 0.56 degC" annotation (Placement(transformation(extent={{220,-590},{240,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi + Buildings.Controls.OBC.CDL.Reals.Switch swi "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-300,520},{-280,540}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi1 + Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Switch between occupied and unoccupied heating setpoint" annotation (Placement(transformation(extent={{-300,440},{-280,460}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi2 + Buildings.Controls.OBC.CDL.Reals.Switch swi2 "Setpoint can only be adjusted in occupied mode" annotation (Placement(transformation(extent={{-120,360},{-100,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi3 + Buildings.Controls.OBC.CDL.Reals.Switch swi3 "Setpoint can only be adjusted in occupied mode" annotation (Placement(transformation(extent={{220,260},{240,240}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi4 + Buildings.Controls.OBC.CDL.Reals.Switch swi4 "If there is no cooling adjustment, zero adjust" annotation (Placement(transformation(extent={{-280,320},{-260,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi5 + Buildings.Controls.OBC.CDL.Reals.Switch swi5 "If there is no heating adjustment, zero adjust" annotation (Placement(transformation(extent={{0,240},{20,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi6 + Buildings.Controls.OBC.CDL.Reals.Switch swi6 "If there is only one common adjust for both heating and cooling, use the adjust value from cooling one" annotation (Placement(transformation(extent={{80,240},{100,260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi7 + Buildings.Controls.OBC.CDL.Reals.Switch swi7 "Ensure heating setpoint being not higher than cooling setpoint minus 0.56 degC" annotation (Placement(transformation(extent={{280,-590},{300,-570}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi8 + Buildings.Controls.OBC.CDL.Reals.Switch swi8 "Ensure unoccupied heating setppint being lower than occupied one" annotation (Placement(transformation(extent={{100,-610},{120,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi9 + Buildings.Controls.OBC.CDL.Reals.Switch swi9 "Ensure unoccupied cooling setppint being higher than occupied one" annotation (Placement(transformation(extent={{100,-550},{120,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi10 + Buildings.Controls.OBC.CDL.Reals.Switch swi10 "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{220,80},{240,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi11 + Buildings.Controls.OBC.CDL.Reals.Switch swi11 "Switch between occupied and unoccupied cooling setpoint" annotation (Placement(transformation(extent={{220,-140},{240,-120}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi12 + Buildings.Controls.OBC.CDL.Reals.Switch swi12 "Increase cooling setpoint when the zone is unpopulated by more than 5 minutes" annotation (Placement(transformation(extent={{160,-280},{180,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi13 + Buildings.Controls.OBC.CDL.Reals.Switch swi13 "Decrease heating setpoint when the zone is unpopulated by more than 5 minutes" annotation (Placement(transformation(extent={{160,-320},{180,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi14 + Buildings.Controls.OBC.CDL.Reals.Switch swi14 "Switch to TZonCooSetWinOpe when window is open" annotation (Placement(transformation(extent={{-180,-460},{-160,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi15 + Buildings.Controls.OBC.CDL.Reals.Switch swi15 "Switch to TZonHeaSetWinOpe when window is open" annotation (Placement(transformation(extent={{-60,-460},{-40,-440}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi16 + Buildings.Controls.OBC.CDL.Reals.Switch swi16 "Generate level 4 alarm when window is open during modes other than occupied" annotation (Placement(transformation(extent={{-100,-420},{-80,-400}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi17 + Buildings.Controls.OBC.CDL.Reals.Switch swi17 "If it is occupied mode, cooling setpoint should be limited" annotation (Placement(transformation(extent={{-180,-550},{-160,-530}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi18 + Buildings.Controls.OBC.CDL.Reals.Switch swi18 "If it is occupied mode, heating setpoint should be limited" annotation (Placement(transformation(extent={{-180,-610},{-160,-590}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi19 + Buildings.Controls.OBC.CDL.Reals.Switch swi19 "If there is occupancy sensor, update heating setpoint according to the occupancy" annotation (Placement(transformation(extent={{220,-320},{240,-300}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi20 + Buildings.Controls.OBC.CDL.Reals.Switch swi20 "If there is occupancy sensor, update cooling setpoint according to the occupancy" annotation (Placement(transformation(extent={{220,-280},{240,-260}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi21 + Buildings.Controls.OBC.CDL.Reals.Switch swi21 "If there is window status sensor, update heating setpoint according to the window status" annotation (Placement(transformation(extent={{160,-480},{180,-460}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swi22 + Buildings.Controls.OBC.CDL.Reals.Switch swi22 "If there is window status sensor, update cooling setpoint according to the window status" annotation (Placement(transformation(extent={{100,-460},{120,-440}}))); Buildings.Controls.OBC.CDL.Integers.Equal intEqu7 @@ -497,17 +497,17 @@ protected Buildings.Controls.OBC.CDL.Integers.Equal intEqu5 "Check if the cooling demand limit level is level 3" annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add3 "Add real inputs" annotation (Placement(transformation(extent={{120,118},{140,138}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add4 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add4 "Add real inputs" annotation (Placement(transformation(extent={{120,40},{140,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add5 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add5 "Add real inputs" annotation (Placement(transformation(extent={{160,80},{180,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add6 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add6 "Add real inputs" annotation (Placement(transformation(extent={{120,-100},{140,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add7 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add7 "Add real inputs" annotation (Placement(transformation(extent={{120,-180},{140,-160}}))); - Buildings.Controls.OBC.CDL.Continuous.Add add8 "Add real inputs" + Buildings.Controls.OBC.CDL.Reals.Add add8 "Add real inputs" annotation (Placement(transformation(extent={{160,-140},{180,-120}}))); equation diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Validation/Controller.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Validation/Controller.mo index 748f9e64325..bf58b2419de 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Validation/Controller.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/TerminalUnits/Validation/Controller.mo @@ -15,25 +15,25 @@ model Controller "Validate model for controlling VAV terminal box with reheat" have_winSen=true, have_CO2Sen=true) "Controller for VAV terminal unit with reheat" annotation (Placement(transformation(extent={{40,0},{60,20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRooCoo(k=273.15 + 24) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRooCoo(k=273.15 + 24) "Room cooling setpoint " annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp disAirFlo( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirFlo( offset=0.02, height=0.0168, duration=3600) "Discharge airflow rate" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TZon( height=6, offset=273.15 + 17, duration=3600) "Measured room temperature" annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDis( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDis( height=4, duration=3600, offset=273.15 + 18) "Terminal unit discharge air temperature" annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TSup( height=4, duration=3600, offset=273.15 + 14) "AHU supply air temperature" @@ -42,10 +42,10 @@ model Controller "Validate model for controlling VAV terminal box with reheat" final k=Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "AHU operation mode is Occupied" annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHea(k=273.15 + 20) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRooHea(k=273.15 + 20) "Room heating setpoint" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ppmCO2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ppmCO2( duration=3600, height=800, offset=200) "CO2 concentration" @@ -53,12 +53,12 @@ model Controller "Validate model for controlling VAV terminal box with reheat" Buildings.Controls.OBC.CDL.Logical.Sources.Pulse winSta(period=3600) "WIndow status" annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp nOcc( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp nOcc( height=5, duration=4800, offset=0) "Number of occupants" annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Round rou(n=0) "Round the input" + Buildings.Controls.OBC.CDL.Reals.Round rou(n=0) "Round the input" annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( final samplePeriod=2) "Mimic damper position" diff --git a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/package.mo b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/package.mo index 55673bb0662..54ae8f34e55 100644 --- a/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/package.mo +++ b/Buildings/Obsolete/Controls/OBC/ASHRAE/G36_PR1/package.mo @@ -39,8 +39,8 @@ actuator signals for the terminal unit dampers.

                Implementation of PID controllers

                For the PID controllers, the implementation in - -Buildings.Controls.OBC.CDL.Continuous.PID + +Buildings.Controls.OBC.CDL.Reals.PID is used. Hence, the PID controllers are in the standard form

                diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/ChangeSign.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/ChangeSign.mo index 8b8ef17ccdd..13f2b567287 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/ChangeSign.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/ChangeSign.mo @@ -13,7 +13,7 @@ equation y = -u; annotation ( - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.Gain with a gain of -1 instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.Gain with a gain of -1 instead", defaultComponentName="chaSig", Icon(coordinateSystem( preserveAspectRatio=true, diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqual.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqual.mo index f0826fd2e70..9606570f05b 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqual.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqual.mo @@ -17,7 +17,7 @@ equation annotation ( defaultComponentName="greEqu", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.Greater instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.Greater instead", Icon(coordinateSystem(preserveAspectRatio=false,extent={{-100, -100},{100,100}}), graphics={ Rectangle( diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqualThreshold.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqualThreshold.mo index 4c6b645e202..aa6b873e2cd 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqualThreshold.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/GreaterEqualThreshold.mo @@ -16,7 +16,7 @@ equation annotation ( defaultComponentName="greEquThr", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.GreaterThreshold instead", Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, {100,100}}), graphics={ Text( diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/HysteresisWithHold.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/HysteresisWithHold.mo index acd5791ef19..0fb9acb5eb7 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/HysteresisWithHold.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/HysteresisWithHold.mo @@ -18,7 +18,7 @@ block HysteresisWithHold annotation (Placement(transformation(extent={{100,-20},{140,20}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysteresis( + Buildings.Controls.OBC.CDL.Reals.Hysteresis hysteresis( final uLow=uLow, final uHigh=uHigh) "Transform Real to Boolean signal with Hysteresis" @@ -39,7 +39,7 @@ equation annotation (Line(points={{62,0},{120,0}}, color={255,0,255})); annotation ( defaultComponentName="hysWitHol", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.Hysteresis and Buildings.Controls.OBC.CDL.Logical.TrueFalseHold instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.Hysteresis and Buildings.Controls.OBC.CDL.Logical.TrueFalseHold instead", Icon(graphics={ Rectangle( extent={{-100,100},{100,-100}}, diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqual.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqual.mo index 8b123bb3561..9bb7e9bb34f 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqual.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqual.mo @@ -16,7 +16,7 @@ equation y = u1 <= u2; annotation ( defaultComponentName="lesEqu", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.Less instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.Less instead", Icon(coordinateSystem(preserveAspectRatio=false,extent={{-100, -100},{100,100}}), graphics={ Rectangle( diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqualThreshold.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqualThreshold.mo index de62fbcd020..8f032e79e3c 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqualThreshold.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LessEqualThreshold.mo @@ -16,7 +16,7 @@ equation annotation ( defaultComponentName="lesEquThr", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.LessThreshold instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.LessThreshold instead", Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, {100,100}}), graphics={ Rectangle( diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LimPID.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LimPID.mo index e8410425e48..ef60ff7558f 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LimPID.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/LimPID.mo @@ -91,7 +91,7 @@ block LimPID "Control error (set point - measurement)" annotation (Placement(transformation(extent={{-200,-10},{-180,10}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset I( + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset I( final k=1/Ti, final y_start=xi_start) if with_I "Integral term" annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); @@ -115,7 +115,7 @@ block LimPID "I error (after anti-windup compensation)" annotation (Placement(transformation(extent={{-82,-10},{-62,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Limiter lim( + Buildings.Controls.OBC.CDL.Reals.Limiter lim( final uMax=yMax, final uMin=yMin) "Limiter" @@ -132,54 +132,54 @@ protected "Boolean flag to enable derivative action" annotation(Evaluate=true, HideResult=true); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Dzero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Dzero( final k=0) if not with_D "Zero input signal" annotation(Evaluate=true, HideResult=true, Placement(transformation(extent={{-40,90},{-20,110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Izero( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant Izero( final k=0) if not with_I "Zero input signal" annotation(Evaluate=true, HideResult=true, Placement(transformation(extent={{-40,20},{-20,41}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uS_revAct(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct(final k= revAct) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uSetWp(final k=wp) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uSetWp(final k=wp) "Set point multiplied by weight for proportional gain" annotation (Placement(transformation(extent={{-160,110},{-140,130}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uMea_revAct(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct(final k= revAct) "Set point multiplied by reverse action sign" annotation (Placement(transformation(extent={{-180,-50},{-160,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter uSetWd(final k=wd) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter uSetWd(final k=wd) if with_D "Set point multiplied by weight for derivative gain" annotation (Placement(transformation(extent={{-160,60},{-140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPD + Buildings.Controls.OBC.CDL.Reals.Add addPD "Outputs P and D gains added" annotation (Placement(transformation(extent={{0,104},{20,124}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gainPID(final k=k) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gainPID(final k=k) "Multiplier for control gain" annotation (Placement(transformation(extent={{80,80},{100,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Add addPID + Buildings.Controls.OBC.CDL.Reals.Add addPID "Outputs P, I and D gains added" annotation (Placement(transformation(extent={{40,80},{60,100}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.Feedback antWinErr if with_I "Error for anti-windup compensation" annotation (Placement(transformation(extent={{162,50},{182,70}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter antWinGai(k=1/(k*Ni)) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai(k=1/(k*Ni)) if with_I "Gain for anti-windup compensation" annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yResSig(final k=y_reset) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yResSig(final k=y_reset) if reset == Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Parameter "Signal for y_reset" annotation (Placement(transformation(extent={{-180,-80},{-160,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter divK(final k=1/k) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter divK(final k=1/k) if reset <> Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Disabled "Division by k for integrator reset" annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); @@ -200,7 +200,7 @@ protected if reset == Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Disabled "No trigger when reset is disabled" annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) if reset == Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Disabled "Reset input to integrator when the reset is disabled" annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); @@ -288,7 +288,7 @@ equation connect(zer.y, I.y_reset_in) annotation (Line(points={{-78,-40},{-52,-40},{-52, -8},{-42,-8}}, color={0,0,127})); annotation (defaultComponentName="conPID", - obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Continuous.PID instead", + obsolete = "Obsolete model, use Buildings.Controls.OBC.CDL.Reals.PID instead", Icon( coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Add.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Add.mo index 437425c7009..1bfb1a6122a 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Add.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Add.mo @@ -4,13 +4,13 @@ model Add Buildings.Obsolete.Controls.OBC.CDL.Continuous.Add add1 "Block that outputs the sum of the two inputs" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=-1) diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo index bd1acc76177..cfee62c7a74 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/AddParameter.mo @@ -5,7 +5,7 @@ model AddParameter "Validation model for the AddParameter block" k=1.0) "Block that outputs the sum of an input plus a parameter" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/ChangeSign.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/ChangeSign.mo index 5050bd36920..38845eee48c 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/ChangeSign.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/ChangeSign.mo @@ -3,7 +3,7 @@ model ChangeSign "Validation model for the ChangeSign block" Buildings.Obsolete.Controls.OBC.CDL.Continuous.ChangeSign changSign "Block that change sign of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-1.5, height=3.0) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Derivative.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Derivative.mo index 9c7dce5c18a..708e599d5ed 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Derivative.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Derivative.mo @@ -1,9 +1,9 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model Derivative "Validation model for the Derivative block" - Buildings.Controls.OBC.CDL.Continuous.Cos cos1 + Buildings.Controls.OBC.CDL.Reals.Cos cos1 "Block that outputs the cosine of the input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=5, offset=0, height=6.283*5) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Feedback.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Feedback.mo index f6eb9d737e7..76758640aba 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Feedback.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/Feedback.mo @@ -3,13 +3,13 @@ model Feedback "Validation model for the Feedback block" Buildings.Obsolete.Controls.OBC.CDL.Continuous.Feedback feedback1 "Block that outputs difference between commanded and feedback input" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-1, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( height=2, duration=1, offset=-1) diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqual.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqual.mo index 90afc028bf5..a66bd66403d 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqual.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqual.mo @@ -1,11 +1,11 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model GreaterEqual "Validation model for the GreaterEqual block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-26,12},{-6,32}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=2) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqualThreshold.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqualThreshold.mo index ac9ea0aa43a..a5ba603d2fa 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqualThreshold.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/GreaterEqualThreshold.mo @@ -1,6 +1,6 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model GreaterEqualThreshold "Validation model for the GreaterEqualThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=2) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqual.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqual.mo index f68789aacbd..9a22efb44d6 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqual.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqual.mo @@ -1,11 +1,11 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model LessEqual "Validation model for the LessEqual block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-26,12},{-6,32}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=2) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqualThreshold.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqualThreshold.mo index 64a84be9bc0..8fabfdca913 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqualThreshold.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LessEqualThreshold.mo @@ -1,6 +1,6 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model LessEqualThreshold "Validation model for the LessEqualThreshold block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPID.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPID.mo index 4b68cad24c3..8dd4faa09d3 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPID.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPID.mo @@ -1,6 +1,6 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model LimPID "Test model for LimPID controller" - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse pulse(period=0.25) + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse pulse(period=0.25) "Setpoint" annotation (Placement(transformation(extent={{-90,14},{-70,34}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.LimPID limPID( @@ -15,7 +15,7 @@ model LimPID "Test model for LimPID controller" Td=1, yMin=-1) "PID controller" annotation (Placement(transformation(extent={{-30,74},{-10,94}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=0.5) "Measurement data" annotation (Placement(transformation(extent={{-90,-22},{-70,-2}}))); diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialDerivativeOutput.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialDerivativeOutput.mo index ac704e30440..8a80a658421 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialDerivativeOutput.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialDerivativeOutput.mo @@ -2,10 +2,10 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model LimPIDInitialDerivativeOutput "Test model for LimPID controller with initial output specified" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant ySet(k=0.75) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant ySet(k=0.75) "Set point" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yMea(k=0.75) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yMea(k=0.75) "Measured value" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialState.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialState.mo index d808181f169..7b8703c31ca 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialState.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDInitialState.mo @@ -2,10 +2,10 @@ within Buildings.Obsolete.Controls.OBC.CDL.Continuous.Validation; model LimPIDInitialState "Test model for LimPID controller with initial state specified" - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant ySet(k=0.75) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant ySet(k=0.75) "Set point" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yMea(k=0.5) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yMea(k=0.5) "Measured value" annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDWithReset.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDWithReset.mo index d933ab232d3..0bc4012c862 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDWithReset.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/LimPIDWithReset.mo @@ -4,7 +4,7 @@ model LimPIDWithReset Buildings.Controls.OBC.CDL.Conversions.BooleanToReal setPoi "Set point" annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.ModelTime modTim "Model time" + Buildings.Controls.OBC.CDL.Reals.Sources.ModelTime modTim "Model time" annotation (Placement(transformation(extent={{-90,-70},{-70,-50}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.GreaterEqualThreshold greEquThr( threshold=1) "Outputs true after t=1" @@ -19,7 +19,7 @@ model LimPIDWithReset reset=Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Parameter, y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,60},{40,80}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes1 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,60},{80,80}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.LimPID limPIDInp( @@ -31,10 +31,10 @@ model LimPIDWithReset reset=Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Input, y_reset=0.5) "Controller, reset to input value" annotation (Placement(transformation(extent={{20,20},{40,40}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes2 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes2 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant resVal(k=0.75) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant resVal(k=0.75) "Reset value" annotation (Placement(transformation(extent={{-40,12},{-20,32}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.LimPID limPIPar( @@ -46,7 +46,7 @@ model LimPIDWithReset reset=Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Parameter, y_reset=0.5) "Controller, reset to parameter value" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes3 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes3 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); Buildings.Obsolete.Controls.OBC.CDL.Continuous.LimPID limPIInp( @@ -58,10 +58,10 @@ model LimPIDWithReset reset=Buildings.Obsolete.Controls.OBC.CDL.Types.Reset.Input, y_reset=0.5) "Controller, reset to input value" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.IntegratorWithReset intWitRes4 + Buildings.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes4 "Integrator whose output should be brought to the set point" annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Reset input to integrator when the reset is disabled" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant noTri(final k=false) diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/NumberOfRequests.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/NumberOfRequests.mo index 59025fb7b05..c4997de267f 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/NumberOfRequests.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/Validation/NumberOfRequests.mo @@ -6,29 +6,29 @@ model NumberOfRequests "Validation model for the NumberOfRequests block" kind=0) "Block that outputs the number of signals that are above/below a certain threshold" annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-2, height=4) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,56},{-40,76}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-1, height=3) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,22},{-40,42}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( duration=1, height=3.5, offset=0.5) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp4( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( duration=1, offset=3, height=-1) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-60,-42},{-40,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp5( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( duration=1, offset=0, height=4) "Block that generates ramp signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/package.mo b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/package.mo index 30d90dbb3b3..6755bc64dc4 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Continuous/package.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Continuous/package.mo @@ -7,8 +7,8 @@ Documentation(info="

                Package that contains obsolete components that were part of the OpenBuildingControl (OBC) package - -Buildings.Controls.OBC.CDL.Continuous. + +Buildings.Controls.OBC.CDL.Reals.

                ")); end Continuous; diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Discrete/Examples/MovingMean.mo b/Buildings/Obsolete/Controls/OBC/CDL/Discrete/Examples/MovingMean.mo index d2b0b1d4d8f..b2b7432ca57 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Discrete/Examples/MovingMean.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Discrete/Examples/MovingMean.mo @@ -1,6 +1,6 @@ within Buildings.Obsolete.Controls.OBC.CDL.Discrete.Examples; model MovingMean "Validation model for the MovingMean block" - Buildings.Controls.OBC.CDL.Continuous.Sources.Sin sin( + Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( freqHz=1/8, phase=0.5235987755983, startTime=-0.5) "Example input signal" diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Integers/Validation/Add.mo b/Buildings/Obsolete/Controls/OBC/CDL/Integers/Validation/Add.mo index 7a1dca02657..7a815ea4935 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Integers/Validation/Add.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Integers/Validation/Add.mo @@ -4,26 +4,26 @@ model Add Buildings.Obsolete.Controls.OBC.CDL.Integers.Add add1 "Block that outputs the sum of the two inputs" annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp1( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( duration=1, offset=-3.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp ramp2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( duration=1, offset=-0.5, height=7.0) "Block that generates ramp signal" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round1( + Buildings.Controls.OBC.CDL.Reals.Round round1( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert real to integer" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Round round2( + Buildings.Controls.OBC.CDL.Reals.Round round2( n=0) "Round real number to given digits" annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Logical/Validation/Timer.mo b/Buildings/Obsolete/Controls/OBC/CDL/Logical/Validation/Timer.mo index a492c8e59db..ea86c30ae4e 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Logical/Validation/Timer.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Logical/Validation/Timer.mo @@ -22,7 +22,7 @@ model Timer "Validation model for the Timer block" final period=4) "Block that outputs cyclic on and off" annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(final t=1.5) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(final t=1.5) "Output true when input is greater than threshold" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); Buildings.Controls.OBC.CDL.Logical.Pre pre diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TDewPoi_TDryBulPhi.mo b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TDewPoi_TDryBulPhi.mo index 77746abc517..b178286b0e7 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TDewPoi_TDryBulPhi.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TDewPoi_TDryBulPhi.mo @@ -5,24 +5,24 @@ model TDewPoi_TDryBulPhi Buildings.Obsolete.Controls.OBC.CDL.Psychrometrics.TDewPoi_TDryBulPhi dewBulPhi "Model for dew point temperature" annotation (Placement(transformation(extent={{16,74},{36,94}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant p(k=101325) "Pressure" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant p(k=101325) "Pressure" annotation (Placement(transformation(extent={{-94,8}, {-74,28}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=1, offset=0.001) "Relative humidity" annotation (Placement(transformation(extent={{-94,40},{-74,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul(k=273.15 + 29.4) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul(k=273.15 + 29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-94,74},{-74,94}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant p2(k=101325) "Pressure" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant p2(k=101325) "Pressure" annotation (Placement(transformation(extent={{-94,-94},{-74,-74}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp TDryBul2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TDryBul2( duration=1, height=35, offset=273.15+2.0) "Dry bulb temperature" annotation (Placement(transformation(extent={{-94,-28},{-74,-8}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant phi2(k=0.4) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant phi2(k=0.4) "Relative humidity" annotation (Placement(transformation(extent={{-94,-60},{-74,-40}}))); @@ -36,7 +36,7 @@ model TDewPoi_TDryBulPhi annotation (Placement(transformation(extent={{-12,4},{8,24}}))); // =================================================================== - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Dew point temperature difference" annotation (Placement(transformation(extent={{52,40},{72,60}}))); Buildings.Obsolete.Controls.OBC.CDL.Psychrometrics.TDewPoi_TDryBulPhi dewBulPhi1 @@ -50,7 +50,7 @@ model TDewPoi_TDryBulPhi annotation (Placement(transformation(extent={{-10,-98},{10,-78}}))); Buildings.Utilities.Psychrometrics.X_pTphi X_pTphi1 "Steam mass fraction" annotation (Placement(transformation(extent={{-44,-98},{-24,-78}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Dew point temperature difference" annotation (Placement(transformation(extent={{52,-60},{72,-40}}))); diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TWetBul_TDryBulPhi.mo b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TWetBul_TDryBulPhi.mo index 8b8a4654315..7f5ed3bbae1 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TWetBul_TDryBulPhi.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/TWetBul_TDryBulPhi.mo @@ -7,14 +7,14 @@ model TWetBul_TDryBulPhi Buildings.Obsolete.Controls.OBC.CDL.Psychrometrics.TWetBul_TDryBulPhi wetBulPhi "Model for wet bulb temperature" annotation (Placement(transformation(extent={{-10,46},{10,66}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant p(k=101325) "Pressure" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant p(k=101325) "Pressure" annotation (Placement(transformation(extent={{-90,-34},{-70,-14}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=0.95, offset=0.05) "Relative humidity" annotation (Placement(transformation(extent={{-90,6},{-70,26}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul(k=273.15 + 29.4) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul(k=273.15 + 29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-90,46},{-70,66}}))); @@ -31,10 +31,10 @@ model TWetBul_TDryBulPhi annotation (Placement(transformation(extent={{-32,-30},{-20,-18}}))); // =================================================================== - Buildings.Controls.OBC.CDL.Continuous.Subtract sub + Buildings.Controls.OBC.CDL.Reals.Subtract sub "Wet bulb temperature difference" annotation (Placement(transformation(extent={{40,6},{60,26}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 + Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Wet bulb temperature difference" annotation (Placement(transformation(extent={{40,-34},{60,-14}}))); equation diff --git a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/h_TDryBulPhi.mo b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/h_TDryBulPhi.mo index f120828ddef..589dc59b50c 100644 --- a/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/h_TDryBulPhi.mo +++ b/Buildings/Obsolete/Controls/OBC/CDL/Psychrometrics/Validation/h_TDryBulPhi.mo @@ -4,14 +4,14 @@ model h_TDryBulPhi "Model to test the specific enthalpy computation" Buildings.Obsolete.Controls.OBC.CDL.Psychrometrics.h_TDryBulPhi hBulPhi "Model for specific enthalpy computation" annotation (Placement(transformation(extent={{46,-10},{66,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant p(k=101325) "Pressure" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant p(k=101325) "Pressure" annotation (Placement(transformation(extent={{-64,-42},{-44,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp phi( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp phi( duration=1, height=1, offset=0.001) "Relative humidity" annotation (Placement(transformation(extent={{-64,-10},{-44,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TDryBul(k=273.15 + 29.4) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TDryBul(k=273.15 + 29.4) "Dry bulb temperature" annotation (Placement(transformation(extent={{-64,24},{-44,44}}))); diff --git a/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/Guideline36.mo b/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/Guideline36.mo index f45e2f1c898..70f497723de 100644 --- a/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/Guideline36.mo +++ b/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/Guideline36.mo @@ -29,10 +29,10 @@ model Guideline36 Buildings.Controls.OBC.CDL.Integers.MultiSum PZonResReq(nin=numZon) "Number of zone pressure requests" annotation (Placement(transformation(extent={{300,320},{320,340}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaPum + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaPum "Switch for freeze stat of pump" annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFreHeaCoi(final k=1.0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFreHeaCoi(final k=1.0) "Flow rate signal for heating coil when freeze stat is on" annotation (Placement(transformation(extent={{-40,-106},{-20,-86}}))); Buildings.Obsolete.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Controller conAHU( @@ -76,7 +76,7 @@ model Guideline36 final have_occSen=fill(false, numZon), final have_winSen=fill(false, numZon)) "Zone setpoint" annotation (Placement(transformation(extent={{-100,180},{-80,208}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant warCooTim[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant warCooTim[numZon]( final k=fill(1800, numZon)) "Warm up and cool down time" annotation (Placement(transformation(extent={{-300,370},{-280,390}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant falSta[numZon]( @@ -103,7 +103,7 @@ model Guideline36 Buildings.Examples.VAVReheat.BaseClasses.Controls.SystemHysteresis sysHysCoo "Hysteresis and delay to switch cooling on and off" annotation (Placement(transformation(extent={{20,-250},{40,-230}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch swiFreStaVal + Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaVal "Switch for freeze stat of valve" annotation (Placement(transformation(extent={{20,-160},{40,-140}}))); Buildings.Examples.VAVReheat.BaseClasses.Controls.FreezeStat freSta( @@ -127,12 +127,12 @@ model Guideline36 Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator tZonNexOcc(nout= numZon) "Next occupancy for each zone" annotation (Placement(transformation(extent={{-340,372},{-320,392}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonSetHea[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonSetHea[numZon]( each k( unit="K", displayUnit="degC") = 293.15) "Heating setpoint for zone air" annotation (Placement(transformation(extent={{-340,460},{-320,480}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZonSetCoo[numZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZonSetCoo[numZon]( each k( unit="K", displayUnit="degC") = 297.15) "Cooling setpoint for zone air" diff --git a/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/VAVBranch.mo b/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/VAVBranch.mo index 949859323c1..46118fca59b 100644 --- a/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/VAVBranch.mo +++ b/Buildings/Obsolete/Examples/VAVReheat/BaseClasses/VAVBranch.mo @@ -86,7 +86,7 @@ model VAVBranch "Supply branch of a VAV system" "Actuator position for reheat valve (0: closed, 1: open)" annotation ( Placement(transformation(extent={{-140,-60},{-100,-20}}), iconTransformation(extent={{-140,-60},{-100,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiM_flow(final k= + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiM_flow(final k= m_flow_nominal*1000*15/4200/10) "Gain for mass flow rate" annotation (Placement(transformation(extent={{80,2},{60,22}}))); Modelica.Blocks.Interfaces.RealOutput y_actual "Actual VAV damper position" diff --git a/Buildings/Obsolete/Examples/VAVReheat/Validation/Guideline36SteadyState.mo b/Buildings/Obsolete/Examples/VAVReheat/Validation/Guideline36SteadyState.mo index f00a24749f3..f39cb73c638 100644 --- a/Buildings/Obsolete/Examples/VAVReheat/Validation/Guideline36SteadyState.mo +++ b/Buildings/Obsolete/Examples/VAVReheat/Validation/Guideline36SteadyState.mo @@ -22,7 +22,7 @@ model Guideline36SteadyState winDirSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HInfHorSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HSou=Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant solRad(k=0) "Solar radiation" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant solRad(k=0) "Solar radiation" annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=180, origin={-70,-20}))); diff --git a/Buildings/Resources/Documentation/userGuide/build/html/_sources/bestPractice.rst.txt b/Buildings/Resources/Documentation/userGuide/build/html/_sources/bestPractice.rst.txt index b7785890c58..9f370d40591 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/_sources/bestPractice.rst.txt +++ b/Buildings/Resources/Documentation/userGuide/build/html/_sources/bestPractice.rst.txt @@ -507,7 +507,8 @@ variable that is input to the controller depends on a variable that is computed by an iterative algorithm. To avoid this, the Modelica Buildings Library contains inequality blocks such as -`Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold `_ +`Buildings.Controls.OBC.CDL.Reals.GreaterThreshold +`_ that have a hysteresis parameter. Examples of a iterative algorithms are nonlinear equation solvers diff --git a/Buildings/Resources/Documentation/userGuide/build/html/_sources/development.rst.txt b/Buildings/Resources/Documentation/userGuide/build/html/_sources/development.rst.txt index ebd642f30f4..07d595e8c3e 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/_sources/development.rst.txt +++ b/Buildings/Resources/Documentation/userGuide/build/html/_sources/development.rst.txt @@ -537,7 +537,7 @@ The following rules need to be followed, in addition to the guidelines described but prioritize groupings based on model specific similarities. #. Each block must have a ``defaultComponentName`` annotation and a ``%name`` label placed above the icon. - See for example the `CDL.Continuous.Constant `_ + See for example the `CDL.Logical.Sources.Constant `_ block. #. To aid readability, the formatting of the Modelica source code file must be consistent with other diff --git a/Buildings/Resources/Documentation/userGuide/build/html/_sources/performance.rst.txt b/Buildings/Resources/Documentation/userGuide/build/html/_sources/performance.rst.txt index 0023b6d5070..b661bb02a0a 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/_sources/performance.rst.txt +++ b/Buildings/Resources/Documentation/userGuide/build/html/_sources/performance.rst.txt @@ -27,7 +27,7 @@ helpful to log which state variables dominate the integration error or the integrator time step control. This usually points to the control loop that is unstable. There are various methods for tuning a controller, and the documentation of -`Buildings.Controls.OBC.CDL.Continuous.PIDWithReset `_ +`Buildings.Controls.OBC.CDL.Reals.PIDWithReset `_ outlines one approach for tuning the gains of a PI-controller. diff --git a/Buildings/Resources/Documentation/userGuide/build/html/bestPractice.html b/Buildings/Resources/Documentation/userGuide/build/html/bestPractice.html index 7698675a15a..e054e93783f 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/bestPractice.html +++ b/Buildings/Resources/Documentation/userGuide/build/html/bestPractice.html @@ -724,7 +724,7 @@

                2.4.5. Nominal ValuesBuildings.Controls.OBC.CDL.Continuous.GreaterThreshold +Buildings.Controls.OBC.CDL.Reals.GreaterThreshold that have a hysteresis parameter.

                Examples of a iterative algorithms are nonlinear equation solvers or time integration algorithms with variable step size (such as diff --git a/Buildings/Resources/Documentation/userGuide/build/html/development.html b/Buildings/Resources/Documentation/userGuide/build/html/development.html index 77a96cd864b..2cebad6912f 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/development.html +++ b/Buildings/Resources/Documentation/userGuide/build/html/development.html @@ -669,7 +669,7 @@

                5.4.3. Control sequences using the Contr

              • Each block must have a defaultComponentName annotation and a %name label placed above the icon. -See for example the CDL.Continuous.Constant +See for example the CDL.Logical.Sources.Constant block.

              • To aid readability, the formatting of the Modelica source code file must be consistent with other implemented blocks, e.g., use two spaces for indentation (no tabulators), diff --git a/Buildings/Resources/Documentation/userGuide/build/html/performance.html b/Buildings/Resources/Documentation/userGuide/build/html/performance.html index 86daa9075a0..565346a6595 100644 --- a/Buildings/Resources/Documentation/userGuide/build/html/performance.html +++ b/Buildings/Resources/Documentation/userGuide/build/html/performance.html @@ -202,7 +202,7 @@

                3.1. Unstable control loopsBuildings.Controls.OBC.CDL.Continuous.PIDWithReset +Buildings.Controls.OBC.CDL.Reals.PIDWithReset outlines one approach for tuning the gains of a PI-controller.

                diff --git a/Buildings/Resources/Documentation/userGuide/source/bestPractice.rst b/Buildings/Resources/Documentation/userGuide/source/bestPractice.rst index b7785890c58..9f370d40591 100644 --- a/Buildings/Resources/Documentation/userGuide/source/bestPractice.rst +++ b/Buildings/Resources/Documentation/userGuide/source/bestPractice.rst @@ -507,7 +507,8 @@ variable that is input to the controller depends on a variable that is computed by an iterative algorithm. To avoid this, the Modelica Buildings Library contains inequality blocks such as -`Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold `_ +`Buildings.Controls.OBC.CDL.Reals.GreaterThreshold +`_ that have a hysteresis parameter. Examples of a iterative algorithms are nonlinear equation solvers diff --git a/Buildings/Resources/Documentation/userGuide/source/development.rst b/Buildings/Resources/Documentation/userGuide/source/development.rst index ebd642f30f4..07d595e8c3e 100644 --- a/Buildings/Resources/Documentation/userGuide/source/development.rst +++ b/Buildings/Resources/Documentation/userGuide/source/development.rst @@ -537,7 +537,7 @@ The following rules need to be followed, in addition to the guidelines described but prioritize groupings based on model specific similarities. #. Each block must have a ``defaultComponentName`` annotation and a ``%name`` label placed above the icon. - See for example the `CDL.Continuous.Constant `_ + See for example the `CDL.Logical.Sources.Constant `_ block. #. To aid readability, the formatting of the Modelica source code file must be consistent with other diff --git a/Buildings/Resources/Documentation/userGuide/source/modelica/FlowCircuit.mo b/Buildings/Resources/Documentation/userGuide/source/modelica/FlowCircuit.mo index 6c6feb46f69..19ef2326d4a 100644 --- a/Buildings/Resources/Documentation/userGuide/source/modelica/FlowCircuit.mo +++ b/Buildings/Resources/Documentation/userGuide/source/modelica/FlowCircuit.mo @@ -20,7 +20,7 @@ model FlowCircuit m_flow_nominal=0.1, V=1) annotation (Placement(transformation(extent={{0,62},{20,82}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(k=1) annotation (Placement(transformation(extent={{-50,30},{-30,50}}))); Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1) annotation (Placement(transformation(extent={{80,48},{60,68}}))); diff --git a/Buildings/Resources/Documentation/userGuide/source/performance.rst b/Buildings/Resources/Documentation/userGuide/source/performance.rst index 0023b6d5070..b661bb02a0a 100644 --- a/Buildings/Resources/Documentation/userGuide/source/performance.rst +++ b/Buildings/Resources/Documentation/userGuide/source/performance.rst @@ -27,7 +27,7 @@ helpful to log which state variables dominate the integration error or the integrator time step control. This usually points to the control loop that is unstable. There are various methods for tuning a controller, and the documentation of -`Buildings.Controls.OBC.CDL.Continuous.PIDWithReset `_ +`Buildings.Controls.OBC.CDL.Reals.PIDWithReset `_ outlines one approach for tuning the gains of a PI-controller. diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Acos.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Acos.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Acos.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Acos.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Asin.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Asin.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Asin.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Asin.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Atan.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Atan.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Atan.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Atan.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Atan2.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Atan2.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Atan2.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Atan2.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Constant.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Constant.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Constant.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Constant.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Cos.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Cos.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Cos.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Cos.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Exp.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Exp.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Exp.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Exp.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Hysteresis.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Hysteresis.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Hysteresis.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Hysteresis.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Hysteresis.svg b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Hysteresis.svg similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Hysteresis.svg rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Hysteresis.svg diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/HysteresisWithHold.svg b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/HysteresisWithHold.svg similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/HysteresisWithHold.svg rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/HysteresisWithHold.svg diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Log.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Log.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Log.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Log.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Log10.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Log10.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Log10.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Log10.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sin.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Sin.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sin.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Sin.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Tan.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Tan.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Tan.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/Tan.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/int.pdf b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/int.pdf similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/int.pdf rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/int.pdf diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/int.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/int.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/int.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Continuous/int.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Pulse.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Pulse.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Pulse.svg b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Pulse.svg rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Ramp.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Ramp.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.png diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Ramp.svg b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.svg similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Ramp.svg rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.svg diff --git a/Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Sin.png b/Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Sin.png similarity index 100% rename from Buildings/Resources/Images/Controls/OBC/CDL/Continuous/Sources/Sin.png rename to Buildings/Resources/Images/Controls/OBC/CDL/Reals/Sources/Sin.png diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonths.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonths.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsMinus.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsMinus.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsPlus.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_CalendarTimeMonthsPlus.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Constant.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Constant.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Pulse.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Pulse.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Ramp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Ramp.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Sin.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_Sin.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_StandardTime.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_StandardTime.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_StandardTime.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_StandardTime.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTable.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTable.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTableNegativeStartTime.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Sources_Validation_TimeTableNegativeStartTime.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Abs.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Abs.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Abs.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Abs.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Acos.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Acos.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Acos.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Acos.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Add.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Add.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Add.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Add.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_AddParameter.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_AddParameter.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_AddParameter.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_AddParameter.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Asin.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Asin.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Asin.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Asin.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Atan.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Atan.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Atan.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Atan.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Atan2.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Atan2.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Atan2.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Atan2.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Average.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Average.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Average.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Average.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Cos.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Cos.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Cos.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Cos.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Derivative.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Derivative.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Derivative.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Derivative.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Divide.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Divide.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Divide.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Divide.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Exp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Exp.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Exp.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Exp.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Greater.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Greater.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Greater.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Greater.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_GreaterThreshold.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_GreaterThreshold.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Hysteresis.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Hysteresis.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_IntegratorWithReset.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_IntegratorWithReset.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Less.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Less.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Less.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Less.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_LessThreshold.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_LessThreshold.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_LimitSlewRate.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_LimitSlewRate.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Limiter.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Limiter.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Limiter.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Limiter.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Line.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Line.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Line.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Line.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Log.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Log.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Log.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Log.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Log10.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Log10.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Log10.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Log10.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixGain.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixGain.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMax.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMax.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMin.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MatrixMin.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Max.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Max.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Max.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Max.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Min.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Min.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Min.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Min.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Modulo.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Modulo.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Modulo.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Modulo.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage_nonZeroStart.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MovingAverage_nonZeroStart.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMax.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiMax.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMax.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiMax.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMin.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiMin.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiMin.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiMin.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiSum.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiSum.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiSum.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiSum.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Multiply.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Multiply.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Multiply.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Multiply.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiplyByParameter.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_MultiplyByParameter.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PID.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PID.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PID.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PID.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialDerivativeOutput.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialDerivativeOutput.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialState.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDInitialState.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDScale.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDScale.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDScale.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDScale.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithReset.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithReset.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithResetScale.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_PIDWithResetScale.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Ramp.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Ramp.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Ramp.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Ramp.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Round.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Round.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Round.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Round.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sin.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sin.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sin.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sin.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sort.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sort.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sort.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sort.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sqrt.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sqrt.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Sqrt.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Sqrt.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Subtract.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Subtract.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Subtract.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Subtract.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Switch.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Switch.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Switch.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Switch.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Tan.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Tan.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Continuous_Validation_Tan.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Reals_Validation_Tan.txt diff --git a/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_9_to_10.0.0.mos b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_9_to_10.0.0.mos index 4b2cbf57854..0f39b1a19c6 100644 --- a/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_9_to_10.0.0.mos +++ b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_9_to_10.0.0.mos @@ -4,11 +4,16 @@ clear convertClear(); + +// Conversion for https://github.com/lbl-srg/modelica-buildings/issues/3483 +convertClass("Buildings.Controls.OBC.CDL.Continuous", + "Buildings.Controls.OBC.CDL.Reals") + // Conversion for https://github.com/lbl-srg/modelica-buildings/issues/3339 convertClass("Buildings.Controls.OBC.CDL.Continuous.Sources.Sine", - "Buildings.Controls.OBC.CDL.Continuous.Sources.Sin"); + "Buildings.Controls.OBC.CDL.Reals.Sources.Sin"); convertClass("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sine", - "Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sin"); + "Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Sin"); // Conversion for https://github.com/lbl-srg/modelica-buildings/issues/3288 convertElement("Buildings.Fluid.HeatExchangers.DXCoils.AirCooled.MultiStage", diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mos deleted file mode 100644 index a61ab32670b..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Constant.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Constant", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Constant1"); -createPlot(id=1, position={15, 10, 590, 420}, y={"con.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mos deleted file mode 100644 index 251bc78356c..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Pulse.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Pulse", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Pulse1"); -createPlot(id=1, position={15, 10, 590, 420}, y={"pulse.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mos deleted file mode 100644 index 9d5a9a6a501..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Ramp.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Ramp", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Ramp1"); -createPlot(id=1, position={15, 10, 590, 420}, y={"ram.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mos deleted file mode 100644 index 8d2000c75b6..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/Sin.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sin", stopTime=130.0, method="Cvode", tolerance=1e-06, resultFile="Sin"); -createPlot(id=1, position={15, 10, 590, 420}, y={"sin.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mos deleted file mode 100644 index 397c3e553b9..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/StandardTime.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.StandardTime", startTime=-1, tolerance=1e-6, stopTime=1, method="Cvode", resultFile="StandardTime1"); -createPlot(id=1, position={15, 10, 482, 336}, y={"staTim.y"}, range={-1.0, 1.0, -1.5, 1.5}, grid=true, leftTitleType=1, bottomTitleType=1, colors={{0,0,255}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/AddParameter.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/AddParameter.mos deleted file mode 100644 index 4af5d76f076..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/AddParameter.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.AddParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="AddParameter2"); -createPlot(id=1, position={15, 10, 590, 420}, y={"addPar.u", "addPar.y"}, range={0.0, 1.0, -4, 5}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mos deleted file mode 100644 index 72431366d95..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LimitSlewRate.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.LimitSlewRate", method="Cvode", stopTime=480, tolerance=1e-06, resultFile="LimitSlewRate"); -createPlot(id=1, position={15, 10, 730, 420}, y={"sleRatLim.u", "sleRatLim.y"}, range={0.0, 5.0, -2.0, 2.0}, grid=true, colors={{238,46,47},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mos deleted file mode 100644 index 2a95796e12f..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiplyByParameter.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MultiplyByParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Gain1"); -createPlot(id=1, position={15, 10, 590, 420}, y={"gain1.u", "gain1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos similarity index 82% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos index 177e8b5e11c..23326d41308 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonths.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths", startTime=172800, tolerance=1e-6, stopTime=345600, method="Cvode", resultFile="CalendarTimeMonths1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths", startTime=172800, tolerance=1e-6, stopTime=345600, method="Cvode", resultFile="CalendarTimeMonths1"); createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos similarity index 81% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos index f2e5f868d8e..83131f0e4d3 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsMinus.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsMinus", startTime=172799, tolerance=1e-6, stopTime=345599, method="Cvode", resultFile="CalendarTimeMonthsMinus1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsMinus", startTime=172799, tolerance=1e-6, stopTime=345599, method="Cvode", resultFile="CalendarTimeMonthsMinus1"); createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos similarity index 81% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos index ff6b60e5d76..b3f0851ebcf 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/CalendarTimeMonthsPlus.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsPlus", startTime=172801, tolerance=1e-6, stopTime=345601, method="Cvode", resultFile="CalendarTimeMonthsPlus1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsPlus", startTime=172801, tolerance=1e-6, stopTime=345601, method="Cvode", resultFile="CalendarTimeMonthsPlus1"); createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos new file mode 100644 index 00000000000..80f098b445b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Constant", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Constant1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"con.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos new file mode 100644 index 00000000000..b27616f2f06 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Pulse", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Pulse1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"pulse.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos new file mode 100644 index 00000000000..7813552ea74 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Ramp", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Ramp1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"ram.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos new file mode 100644 index 00000000000..2c6e74da2e5 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Sin", stopTime=130.0, method="Cvode", tolerance=1e-06, resultFile="Sin"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sin.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mos new file mode 100644 index 00000000000..a6a4c21a585 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/StandardTime.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.StandardTime", startTime=-1, tolerance=1e-6, stopTime=1, method="Cvode", resultFile="StandardTime1"); +createPlot(id=1, position={15, 10, 482, 336}, y={"staTim.y"}, range={-1.0, 1.0, -1.5, 1.5}, grid=true, leftTitleType=1, bottomTitleType=1, colors={{0,0,255}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos similarity index 77% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos index 35794c46617..63019799f31 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTable.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable", startTime=0, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="TimeTable1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable", startTime=0, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="TimeTable1"); createPlot(id=1, position={15, 10, 1936, 1264}, y={"timTabLin.y[1]", "timTabLinCon.y[1]", "timTabCon.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}, {238,46,47}}, patterns={LinePattern.Solid, LinePattern.DashDot, LinePattern.Solid}, timeUnit="d"); createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinHol.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{0,0,255}}, timeUnit="d"); createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinDer.y[1]"}, range={-1.6, 2.0, -4.0, 2.0}, grid=true, subPlot=3, colors={{0,0,255}}, timeUnit="d"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos similarity index 74% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos index b304373c9b6..135b2a0012f 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Sources/Validation/TimeTableNegativeStartTime.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTableNegativeStartTime", startTime=-129600, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="NegativeStartTime1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTableNegativeStartTime", startTime=-129600, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="NegativeStartTime1"); createPlot(id=1, position={15, 10, 1936, 1264}, y={"timTabLin.y[1]", "timTabLinCon.y[1]", "timTabCon.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}, {238,46,47}}, patterns={LinePattern.Solid, LinePattern.DashDot, LinePattern.Solid}, timeUnit="d"); createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinHol.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{0,0,255}}, timeUnit="d"); createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinDer.y[1]"}, range={-1.6, 2.0, -4.0, 2.0}, grid=true, subPlot=3, colors={{0,0,255}}, timeUnit="d"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Abs.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Abs.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos index 7501fa0e684..a09dafc50fd 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Abs.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Abs", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Abs1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Abs", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Abs1"); createPlot(id=1, position={15, 10, 590, 420}, y={"abs1.u", "abs1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{28,108,200}, {238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Acos.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Acos.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos index fa28f0ba5f0..f85cf50b525 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Acos.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Acos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Acos"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Acos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Acos"); createPlot(id=1, position={15, 10, 590, 420}, y={"arcCos.u", "arcCos.y"}, range={0.0, 1.0, -2, 2}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Add.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos similarity index 55% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Add.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos index 691a6360c81..3e3e29fccf4 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Add.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Add", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Add1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Add", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Add1"); createPlot(id=1, position={15, 10, 590, 420}, y={"add1.u1", "add1.u2", "add1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos new file mode 100644 index 00000000000..805e264db4a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.AddParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="AddParameter2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"addPar.u", "addPar.y"}, range={0.0, 1.0, -4, 5}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Asin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Asin.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos index 47af29d69fa..24af7b3fa68 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Asin.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Asin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Asin"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Asin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Asin"); createPlot(id=1, position={15, 10, 590, 420}, y={"arcSin.u", "arcSin.y"}, range={0.0, 1.0, -2, 2}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos index f58a501baf6..859ab4ade9e 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Atan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Atan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan1"); createPlot(id=1, position={15, 10, 590, 420}, y={"atan1.u", "atan1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan2.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos similarity index 55% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan2.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos index aff722eb456..b700b58bde7 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Atan2.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Atan2", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan2_1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Atan2", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan2_1"); createPlot(id=1, position={15, 10, 590, 420}, y={"atan2_1.u1", "atan2_1.u2", "atan2_1.y"}, range={0.0, 1.0, -2.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Average.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos similarity index 54% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Average.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos index ecb4506d58b..ea4c8e1fc91 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Average.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Average", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Average1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Average", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Average1"); createPlot(id=1, position={15, 10, 590, 420}, y={"avg1.u1", "avg1.u2", "avg1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Cos.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Cos.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos index 75b58d38924..22488ee55c2 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Cos.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Cos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Cos1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Cos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Cos1"); createPlot(id=1, position={15, 10, 590, 420}, y={"cos1.u", "cos1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Derivative.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos similarity index 70% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Derivative.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos index 54fbb93c5df..3712afb71fe 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Derivative.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Derivative", stopTime=10, method="Cvode", tolerance=1e-07, resultFile="Derivative"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Derivative", stopTime=10, method="Cvode", tolerance=1e-07, resultFile="Derivative"); createPlot(id=1, position={15, 15, 761, 628}, y={"der1.y", "intWitRes.u", "der2.y"}, range={0.0, 20.0, -3.0, 3.0}, grid=true, subPlot=102, colors={{238,46,47}, {28,108,200}, {0,140,72}}, timeUnit="s"); createPlot(id=1, position={15, 15, 761, 628}, y={"der1.T"}, range={0.0, 20.0, 0.0, 0.12}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Divide.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos similarity index 54% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Divide.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos index abdf1d1e432..29d1048c93d 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Divide.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Divide", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Divide1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Divide", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Divide1"); createPlot(id=1, position={15, 10, 590, 420}, y={"div1.u1", "div1.u2", "div1.y"}, range={0.0, 1.0, -2.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Exp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Exp.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos index b137f9bc2bb..12af37213eb 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Exp.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Exp", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Exp1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Exp", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Exp1"); createPlot(id=1, position={15, 10, 590, 420}, y={"Exp1.u", "Exp1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Greater.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos similarity index 68% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Greater.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos index fa032d41301..db88fb910c8 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Greater.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Greater", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Greater1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Greater", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Greater1"); createPlot(id=1, position={15, 15, 742, 472}, y={"gre.u1", "gre.u2"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); createPlot(id=1, position={15, 15, 742, 472}, y={"gre.y", "greHys.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos similarity index 65% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos index 177d1543111..79ae8a65114 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/GreaterThreshold.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.GreaterThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="GreaterThreshold1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.GreaterThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="GreaterThreshold1"); createPlot(id=1, position={15, 15, 742, 472}, y={"gre.u", "gre.t"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); createPlot(id=1, position={15, 15, 742, 472}, y={"gre.y", "greHys.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos similarity index 77% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos index cac7109916d..29384bfeaf3 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Hysteresis.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Hysteresis", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Hysteresis1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Hysteresis", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Hysteresis1"); createPlot(id=1, position={15, 10, 900, 420}, subPlot=1, y={"hysteresis.u", "hysteresis.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); createPlot(id=1, position={15, 10, 900, 420}, subPlot=2, y={"hysteresis1.u", "hysteresis1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); createPlot(id=1, position={15, 10, 900, 420}, subPlot=3, y={"hysteresis2.u", "hysteresis2.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos similarity index 84% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos index 1eeb0d926f3..3077d0d9cf4 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/IntegratorWithReset.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.IntegratorWithReset", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegratorWithReset1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.IntegratorWithReset", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegratorWithReset1"); createPlot(id=1, position={35, 30, 586, 850}, y={"cons.y"}, range={0.0, 1.0, 8.8, 11.2}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={35, 30, 586, 850}, y={"booleanPulse.y"}, range={0.0, 1.0, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}); createPlot(id=2, position={645, 30, 725, 850}, y={"intDef.y_start", "intDef.y", "intDef.y_reset_in"}, range={0.0, 1.0, -5.0, 15.0}, grid=true, colors={{28,108,200}, {0,140,72},{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Less.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos similarity index 69% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Less.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos index 4972f2ecba3..f2e7abe873f 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Less.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Less", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Less1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Less", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Less1"); createPlot(id=1, position={15, 15, 742, 472}, y={"les.u1", "les.u2"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); createPlot(id=1, position={15, 15, 742, 472}, y={"les.y", "lesHys.y"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos similarity index 66% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos index dbdf0d3bc41..ecd08ff9536 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/LessThreshold.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.LessThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="LessThreshold1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.LessThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="LessThreshold1"); createPlot(id=1, position={15, 15, 742, 472}, y={"les.u", "les.t"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); createPlot(id=1, position={15, 15, 742, 472}, y={"les.y", "lesHys.y"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos new file mode 100644 index 00000000000..b286e00d10c --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.LimitSlewRate", method="Cvode", stopTime=480, tolerance=1e-06, resultFile="LimitSlewRate"); +createPlot(id=1, position={15, 10, 730, 420}, y={"sleRatLim.u", "sleRatLim.y"}, range={0.0, 5.0, -2.0, 2.0}, grid=true, colors={{238,46,47},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Limiter.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Limiter.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos index 9dfacf19e47..7906c5dfc9a 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Limiter.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Limiter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Limiter1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Limiter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Limiter1"); createPlot(id=1, position={15, 10, 590, 420}, y={"limiter1.u", "limiter1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Line.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos similarity index 71% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Line.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos index 3856755fdef..3dbf4d496f5 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Line.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Line", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Line1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Line", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Line1"); createPlot(id=1, position={15, 10, 590, 420}, y={"line1.u", "line1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); createPlot(id=1, position={15, 10, 590, 420}, y={"line1.u", "line1.y", "line2.y", "line3.y"}, range={0.0, 1.0, -1.0, 4.0}, grid=true, colors={{238,46,47}, {28,108,200}, {0,140,72}, {217,67,180}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos index 86b8d55c070..10203e69130 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Log", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Log", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log1"); createPlot(id=1, position={15, 10, 590, 420}, y={"log1.u", "log1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log10.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos similarity index 52% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log10.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos index 2bf92b026fc..7cbc0a75a9e 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Log10.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Log10", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log10_1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Log10", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log10_1"); createPlot(id=1, position={15, 10, 590, 420}, y={"log10_1.u", "log10_1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos similarity index 82% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos index 31ee40b7078..26a44cbb963 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixGain.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixGain", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixGain"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MatrixGain", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixGain"); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matGai.y[1]", "matGai.y[2]", "matGai.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matGai.u[1]", "matGai.u[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos similarity index 78% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos index dc68eac8c33..a525f33ea3b 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMax.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMax", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMax"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMax", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMax"); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matMax.y[1]", "matMax.y[2]", "matMax.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matMax1.y[1]", "matMax1.y[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos similarity index 79% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos index 253f86c7fab..177e93b57c6 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MatrixMin.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMin"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMin"); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matMin.y[1]", "matMin.y[2]", "matMin.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matMin1.y[1]", "matMin1.y[2]", "matMin1.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Max.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos similarity index 55% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Max.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos index de055b9214c..7ca69163477 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Max.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Max", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Max1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Max", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Max1"); createPlot(id=1, position={15, 10, 590, 420}, y={"max1.u1", "max1.u2", "max1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Min.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos similarity index 55% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Min.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos index 2a7afb1ab30..13eb92425bc 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Min.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Min", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Min1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Min", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Min1"); createPlot(id=1, position={15, 10, 590, 420}, y={"min1.u1", "min1.u2", "min1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Modulo.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos similarity index 54% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Modulo.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos index 997959dea85..73633acbcc9 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Modulo.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Modulo", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Modulo1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Modulo", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Modulo1"); createPlot(id=1, position={15, 10, 590, 420}, y={"mod1.u1", "mod1.u2", "mod1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos similarity index 79% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos index 8c3a51c6021..090a28bb7bf 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage", stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage", stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage1"); createPlot(id=1, position={15, 10, 1300, 400}, subPlot=1, y={"sinInpNoDel.y","movAve1.y","movAve2.y","movAve3.y","movAve4.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); createPlot(id=2, position={15, 430, 600, 400}, subPlot=1, y={"sinInp50sDel.y","movAve6.y","movAve7.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); createPlot(id=3, position={640, 430, 600, 400}, subPlot=1, y={"sinInp100sDel.y","movAve8.y","movAve9.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos similarity index 75% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos index df07e305122..ff3ecaee0af 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MovingAverage_nonZeroStart.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage_nonZeroStart", startTime=100.0, stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage_nonZeroStart1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart", startTime=100.0, stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage_nonZeroStart1"); createPlot(id=1, position={15, 10, 1300, 400}, subPlot=1, y={"sinInpNoDel.y","movAve1.y","movAve2.y","movAve3.y","movAve4.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); createPlot(id=2, position={15, 430, 600, 400}, subPlot=1, y={"sinInp50sDel.y","movAve6.y","movAve7.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); createPlot(id=3, position={640, 430, 600, 400}, subPlot=1, y={"sinInp100sDel.y","movAve8.y","movAve9.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMax.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos similarity index 70% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMax.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos index 87cd2154b33..9da5129d6b6 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMax.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMax1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MultiMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMax1"); createPlot(id=1, position={15, 10, 600, 420}, y={"con[1].y","con[2].y","con[3].y","con[4].y","con[5].y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); createPlot(id=2, position={630, 10, 600, 420}, y={"maxVal.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos similarity index 70% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMin.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos index edee77cd921..d7826e01262 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiMin.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMin", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMin1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MultiMin", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMin1"); createPlot(id=1, position={15, 10, 600, 420}, y={"con[1].y","con[2].y","con[3].y","con[4].y","con[5].y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); createPlot(id=2, position={630, 10, 600, 420}, y={"minVal.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiSum.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos similarity index 80% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiSum.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos index 793cccb1a79..1928c3e73d5 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/MultiSum.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.MultiSum", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MultiSum_1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MultiSum", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MultiSum_1"); createPlot(id=1, position={15, 10, 600, 350}, y={"mulSum_1.u[1]", "mulSum_1.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {28,108,200}}); createPlot(id=2, position={15, 400, 600, 350}, y={"mulSum_2.u[1]","mulSum_2.u[2]", "mulSum_2.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); createPlot(id=3, position={630, 10, 600, 750}, y={"mulSum_5.u[1]", "mulSum_5.u[2]", "mulSum_5.u[3]", "mulSum_5.u[4]", "mulSum_5.u[5]","mulSum_5.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {238,46,47}, {217,67,180}, {238,46,47}, {217,67,180},{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Multiply.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos similarity index 55% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Multiply.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos index 17ed199124d..b2feb4f2aed 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Multiply.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Multiply", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Multiply1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Multiply", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Multiply1"); createPlot(id=1, position={15, 10, 590, 420}, y={"product1.u1", "product1.u2", "product1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos new file mode 100644 index 00000000000..cacb93312fe --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.MultiplyByParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Gain1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"gain1.u", "gain1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PID.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos similarity index 79% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PID.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos index 7c2a594f643..7281f45f3b7 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PID.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PID", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="PID1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PID", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="PID1"); createPlot(id=1, position={15, 10, 900, 700}, y={"limPID.u_s", "limPID.u_m"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, colors={{238,46,47}, {0,140,72}}); createPlot(id=1, position={15, 10, 900, 700}, y={"limPID.u_s", "limPID.y", "noLimPID.y"}, range={0.0, 1.0, -20.0, 10.0}, grid=true, subPlot=102, colors={{238,46,47}, {0,140,72}, {217,67,180}}); createPlot(id=1, position={15, 10, 900, 700}, y={"limP.y", "limPI.y", "limPD.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=103, colors={{238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos similarity index 54% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos index 7325a63a94a..879ebe994b5 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialDerivativeOutput.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialDerivativeOutput", tolerance=1e-06, stopTime=0.2, resultFile="PIDInitialDerivativeOutput"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialDerivativeOutput", tolerance=1e-06, stopTime=0.2, resultFile="PIDInitialDerivativeOutput"); createPlot(id=1, position={31, 124, 592, 372}, y={"limPID.y", "limPD.y", "limPID.D.y", "limPD.D.y"}, range={0.0, 1.0, -0.2, 0.6}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {0,0,0}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos similarity index 61% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos index a5e8e7a5b82..619dbe0228d 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDInitialState.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialState", tolerance=1e-06, resultFile="PIDInitialState"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialState", tolerance=1e-06, resultFile="PIDInitialState"); createPlot(id=1, position={35, 35, 926, 623}, y={"limPID.I.y", "limPID.D.y", "limPI.I.y", "limPID.D.u"}, range={0.0, 1.0, -0.6, 0.5}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDScale.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos similarity index 70% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDScale.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos index 54c31366324..4fbf10b3729 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDScale.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PIDScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDScale"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PIDScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDScale"); createPlot(id=2, position={577, 61, 1112, 827}, y={"pidSca.y", "pidNoSca.y"}, range={0.0, 100.0, -1.5, 1.5}, grid=true, colors={{28,108,200}, {238,46,47}}); createPlot(id=2, position={577, 61, 1112, 827}, y={"pla1.y", "pla2.y", "pidSca.u_s"}, range={0.0, 100.0, -500.0, 1500.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos similarity index 83% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos index cd6d549af77..79e43953e77 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithReset.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithReset", stopTime=10, method="Cvode", tolerance=1e-06, resultFile="CDL_PIDWithReset"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithReset", stopTime=10, method="Cvode", tolerance=1e-06, resultFile="CDL_PIDWithReset"); createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIDPar.u_s", "limPIDPar.u_m", "limPIDPar.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIDInp.u_s", "limPIDInp.u_m", "limPIDInp.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}}); createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIPar.u_s", "limPIPar.u_m", "limPIPar.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos similarity index 75% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos index c9f6ecfeb0b..6d5d7c626e6 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/PIDWithResetScale.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithResetScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDWithResetScale"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithResetScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDWithResetScale"); createPlot(id=2, position={577, 61, 1454, 979}, y={"pidSca.y", "pidNoSca.y"}, range={0.0, 100.0, -2.0, 2.0}, grid=true, colors={{28,108,200}, {238,46,47}}); createPlot(id=2, position={577, 61, 1454, 979}, y={"pla1.y", "pla2.y", "pidSca.u_s"}, range={0.0, 100.0, -500.0, 1500.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}); createPlot(id=2, position={577, 61, 1454, 979}, y={"pidSca.trigger"}, range={0.0, 100.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Ramp.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos similarity index 88% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Ramp.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos index 25d8807c5bc..68cc3eec90d 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Ramp.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Ramp", method="Cvode", tolerance=1e-06, stopTime=10.0, resultFile="rampUpDown"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Ramp", method="Cvode", tolerance=1e-06, stopTime=10.0, resultFile="rampUpDown"); createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUp.u", "ramUp.y", "ramUp1.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUp.active"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUpDow.u", "ramUpDow.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Round.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos similarity index 77% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Round.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos index a7d71b4b0c2..f8da9937005 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Round.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Round", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Round1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Round", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Round1"); createPlot(id=1, position={15, 10, 1475, 1167}, y={"round1.u", "round1.y"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, colors={{238,46,47}, {28,108,200}}); createPlot(id=1, position={15, 10, 1475, 385}, y={"round2.u", "round2.y"}, range={0.0, 1.0, -0.5, 0.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); createPlot(id=1, position={15, 10, 1475, 385}, y={"round3.u", "round3.y"}, range={0.0, 1.0, -50.0, 50.0}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sin.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sin.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos index 7f7182bf35d..d056c23988a 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sin.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Sin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sin1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Sin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sin1"); createPlot(id=1, position={15, 10, 590, 420}, y={"sin1.u", "sin1.y"}, range={0.0, 1.0, -2, 7.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sort.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos similarity index 84% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sort.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos index 2d898461792..2ae546a6364 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sort.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Sort", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sort1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Sort", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sort1"); createPlot(id=1, position={53, 14, 959, 905}, y={"sorAsc.u[1]", "sorAsc.u[2]", "sorAsc.u[3]", "sorAsc.u[4]", "sorAsc.u[5]"}, range={0.0, 0.0, -4.0, 6.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}); createPlot(id=1, position={53, 14, 959, 299}, y={"sorAsc.y[1]", "sorAsc.y[2]", "sorAsc.y[3]", "sorAsc.y[4]", "sorAsc.y[5]"}, range={0.0, 0.0, -6.0, 6.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}); createPlot(id=1, position={53, 14, 959, 299}, y={"sorDes.y[1]", "sorDes.y[2]", "sorDes.y[3]", "sorDes.y[4]", "sorDes.y[5]"}, range={0.0, 0.0, -6.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sqrt.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sqrt.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos index 1aa1129aed8..973a65bfd7f 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Sqrt.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Sqrt", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sqrt1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Sqrt", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sqrt1"); createPlot(id=1, position={15, 10, 590, 420}, y={"sqrt1.u", "sqrt1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Subtract.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos similarity index 54% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Subtract.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos index f7e1474ef98..1c550969b9f 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Subtract.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Subtract", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="sub1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Subtract", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="sub1"); createPlot(id=1, position={15, 10, 590, 420}, y={"sub.u1", "sub.u2", "sub.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Switch.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos similarity index 69% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Switch.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos index 1a4d969954d..cb9aad8d63a 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Switch.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Switch", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="ConSwitch"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Switch", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="ConSwitch"); createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"switch1.u1","switch1.u2","switch1.u3"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"switch1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Tan.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Tan.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos index b22c6168f90..126cafefab0 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Continuous/Validation/Tan.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Continuous.Validation.Tan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Tan1"); +simulateModel("Buildings.Controls.OBC.CDL.Reals.Validation.Tan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Tan1"); createPlot(id=1, position={15, 10, 590, 420}, y={"tan1.u", "tan1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonths.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsMinus.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsMinus.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsMinus.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsMinus.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsPlus.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsPlus.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.CalendarTimeMonthsPlus.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsPlus.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Constant.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Constant.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Constant.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Constant.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Pulse.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Pulse.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Pulse.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Pulse.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Ramp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Ramp.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Ramp.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Ramp.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sin.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Sin.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.Sin.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.Sin.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.StandardTime.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.StandardTime.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.StandardTime.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.StandardTime.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTable.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTableNegativeStartTime.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTableNegativeStartTime.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Sources.Validation.TimeTableNegativeStartTime.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Sources.Validation.TimeTableNegativeStartTime.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Abs.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Abs.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Abs.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Abs.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Acos.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Acos.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Acos.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Acos.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Add.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Add.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Add.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Add.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.AddParameter.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.AddParameter.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.AddParameter.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.AddParameter.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Asin.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Asin.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Asin.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Asin.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Atan.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Atan.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Atan.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Atan.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Atan2.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Atan2.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Atan2.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Atan2.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Average.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Average.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Average.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Average.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Cos.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Cos.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Cos.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Cos.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Derivative.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Derivative.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Derivative.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Derivative.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Divide.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Divide.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Divide.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Divide.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Exp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Exp.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Exp.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Exp.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Greater.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Greater.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Greater.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Greater.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.GreaterThreshold.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.GreaterThreshold.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.GreaterThreshold.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.GreaterThreshold.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Hysteresis.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Hysteresis.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Hysteresis.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Hysteresis.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.IntegratorWithReset.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.IntegratorWithReset.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.IntegratorWithReset.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.IntegratorWithReset.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Less.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Less.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Less.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Less.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.LessThreshold.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.LessThreshold.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.LessThreshold.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.LessThreshold.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.LimitSlewRate.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.LimitSlewRate.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.LimitSlewRate.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.LimitSlewRate.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Limiter.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Limiter.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Limiter.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Limiter.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Line.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Line.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Line.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Line.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Log.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Log.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Log.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Log.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Log10.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Log10.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Log10.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Log10.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixGain.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixGain.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixGain.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixGain.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMax.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMax.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMax.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMax.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMin.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMin.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MatrixMin.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MatrixMin.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Max.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Max.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Max.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Max.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Min.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Min.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Min.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Min.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Modulo.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Modulo.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Modulo.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Modulo.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage_nonZeroStart.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MovingAverage_nonZeroStart.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMax.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiMax.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMax.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiMax.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMin.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiMin.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiMin.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiMin.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiSum.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiSum.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiSum.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiSum.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Multiply.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Multiply.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Multiply.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Multiply.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiplyByParameter.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiplyByParameter.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.MultiplyByParameter.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.MultiplyByParameter.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PID.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PID.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PID.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PID.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialDerivativeOutput.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialDerivativeOutput.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialDerivativeOutput.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialDerivativeOutput.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialState.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialState.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDInitialState.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDInitialState.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDScale.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDScale.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDScale.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDScale.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithReset.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithReset.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithReset.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithReset.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithResetScale.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithResetScale.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.PIDWithResetScale.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.PIDWithResetScale.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Ramp.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Ramp.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Ramp.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Ramp.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Round.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Round.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Round.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Round.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sin.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sin.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sin.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sin.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sort.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sort.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sort.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sort.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sqrt.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sqrt.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Sqrt.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Sqrt.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Subtract.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Subtract.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Subtract.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Subtract.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Switch.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Switch.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Switch.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Switch.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Tan.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Tan.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Continuous.Validation.Tan.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Reals.Validation.Tan.mos diff --git a/Buildings/Resources/src/Controls/OBC/UnitConversions/unit_converters.py b/Buildings/Resources/src/Controls/OBC/UnitConversions/unit_converters.py index ad7fba8b2ac..63bb9d3c736 100644 --- a/Buildings/Resources/src/Controls/OBC/UnitConversions/unit_converters.py +++ b/Buildings/Resources/src/Controls/OBC/UnitConversions/unit_converters.py @@ -482,11 +482,11 @@ def write_unit_converters(self): " constant Real k = " + x['multiplier'] + " \"Multiplier\";\n"\ " constant Real p = " + x['adder'] + " \"Adder\";\n" "\n"\ - " Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(\n"\ + " Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(\n"\ " final k = k) \"Gain factor\"\n"\ " annotation (Placement(transformation(extent={{-68,-10},{-48,10}})));\n"\ "\n"\ - " Buildings.Controls.OBC.CDL.Continuous.AddParameter conv(\n"\ + " Buildings.Controls.OBC.CDL.Reals.AddParameter conv(\n"\ " final p = p) \"Unit converter\"\n"\ " annotation (Placement(transformation(extent={{-10,-10},{10,10}})));\n"\ "\n") @@ -494,7 +494,7 @@ def write_unit_converters(self): file.write(\ " constant Real k = " + x['multiplier'] + " \"Multiplier\";\n"\ "\n"\ - " Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter conv(\n"\ + " Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter conv(\n"\ " final k = k) \"Unit converter\"\n"\ " annotation (Placement(transformation(extent={{-10,-10},{10,10}})));\n"\ "\n") @@ -666,10 +666,10 @@ def write_unit_converter_validators(self): "model "+model_name+" \"Validation model for unit conversion from "+from_unit+" to "+to_unit+"\"\n"\ " extends Modelica.Icons.Example;\n"\ "\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Subtract sub\n"\ + " Buildings.Controls.OBC.CDL.Reals.Subtract sub\n"\ " \"Difference between the calculated and expected conversion output\"\n"\ " annotation (Placement(transformation(extent={{20,40},{40,60}})));\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Subtract sub1\n"\ + " Buildings.Controls.OBC.CDL.Reals.Subtract sub1\n"\ " \"Difference between the calculated and expected conversion output\"\n"\ " annotation (Placement(transformation(extent={{20,-40},{40,-20}})));\n"\ "\n"\ @@ -686,19 +686,19 @@ def write_unit_converter_validators(self): " \"Unit converter from "+from_unit+" to "+to_unit+" \"\n"\ " annotation (Placement(transformation(extent={{-20,-40},{0,-20}})));\n"\ "\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value(\n"\ + " Buildings.Controls.OBC.CDL.Reals.Sources.Constant value(\n"\ " final k=kin)\n"\ " \"Value to convert\"\n"\ " annotation (Placement(transformation(extent={{-60,40},{-40,60}})));\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Sources.Constant value1(\n"\ + " Buildings.Controls.OBC.CDL.Reals.Sources.Constant value1(\n"\ " final k=kin1)\n"\ " \"Value to convert\"\n"\ " annotation (Placement(transformation(extent={{-60,-40},{-40,-20}})));\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result(\n"\ + " Buildings.Controls.OBC.CDL.Reals.Sources.Constant result(\n"\ " final k=kout)\n"\ " \"Expected converted value\"\n"\ " annotation (Placement(transformation(extent={{-20,10},{0,30}})));\n"\ - " Buildings.Controls.OBC.CDL.Continuous.Sources.Constant result1(\n"\ + " Buildings.Controls.OBC.CDL.Reals.Sources.Constant result1(\n"\ " final k=kout1)\n"\ " \"Expected converted value\"\n"\ " annotation (Placement(transformation(extent={{-20,-70},{0,-50}})));\n"\ diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo b/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo index 64cf9d79bc3..8d6750d3e0f 100644 --- a/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo @@ -4,7 +4,7 @@ block OpenLoop "Open loop controller" Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone( final typ=Buildings.Templates.AirHandlersFans.Types.Controller.OpenLoop); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamOut(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDamOut(k=1) if secOutRel.typDamOut == Buildings.Templates.Components.Types.Damper.Modulating annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -16,7 +16,7 @@ block OpenLoop "Open loop controller" extent={{-10,-10},{10,10}}, rotation=-90, origin={-170,144}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamOutMin(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDamOutMin(k=1) if secOutRel.typDamOutMin == Buildings.Templates.Components.Types.Damper.Modulating annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -28,12 +28,12 @@ block OpenLoop "Open loop controller" extent={{-10,-10},{10,10}}, rotation=-90, origin={-140,144}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamRet(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDamRet(k=1) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={-120,170}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamRel(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDamRel(k=1) if secOutRel.typDamRel == Buildings.Templates.Components.Types.Damper.Modulating annotation (Placement(transformation( extent={{-10,-10},{10,10}}, @@ -45,7 +45,7 @@ block OpenLoop "Open loop controller" extent={{-10,-10},{10,10}}, rotation=-90, origin={-60,170}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiCoo(k=1) if coiCoo.typ + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCoiCoo(k=1) if coiCoo.typ == Buildings.Templates.Components.Types.Coil.WaterBasedCooling or coiCoo.typ == Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed annotation ( @@ -58,7 +58,7 @@ block OpenLoop "Open loop controller" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=-90, origin={-20,110}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanSup(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanSup(k=1) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, @@ -68,13 +68,13 @@ block OpenLoop "Open loop controller" extent={{-10,-10},{10,10}}, rotation=-90, origin={40,70}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiHea(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCoiHea(k=1) annotation ( Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={20,110}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanRet(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanRet(k=1) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, @@ -85,7 +85,7 @@ block OpenLoop "Open loop controller" rotation=-90, origin={200,70}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanRel(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFanRel(k=1) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo index 2bd0aa1a9cd..cc6b8ff4752 100644 --- a/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo @@ -16,11 +16,11 @@ block VAVBoxControlPoints "Emulation of VAV box control points" rotation=90, origin={100,0}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant tNexOcc(final k=3600) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant tNexOcc(final k=3600) "Time next occupancy" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VAirDis_flow(final k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VAirDis_flow(final k=1) annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant yReqZonTemRes(final k=1) "Request" @@ -28,7 +28,7 @@ block VAVBoxControlPoints "Emulation of VAV box control points" Buildings.Controls.OBC.CDL.Integers.Sources.Constant yReqZonPreRes(final k=1) "Request" annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirDis(final k=303.15) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TAirDis(final k=303.15) "Discharge temperature" annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); @@ -39,10 +39,10 @@ block VAVBoxControlPoints "Emulation of VAV box control points" Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatus sta "Evaluate zone temperature status" annotation (Placement(transformation(extent={{100,-74},{120,-46}}))); - Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim(final k=1800) + Controls.OBC.CDL.Reals.Sources.Constant cooDowTim(final k=1800) "Cooling down time" annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant warUpTim(final k=1800) + Controls.OBC.CDL.Reals.Sources.Constant warUpTim(final k=1800) "Warm-up time" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); Controls.OBC.ASHRAE.G36.VentilationZones.Title24.Setpoints setMinOA_T24( diff --git a/Buildings/Templates/Components/Dampers/TwoPosition.mo b/Buildings/Templates/Components/Dampers/TwoPosition.mo index 5fd4ac0a495..8ebb55f6a45 100644 --- a/Buildings/Templates/Components/Dampers/TwoPosition.mo +++ b/Buildings/Templates/Components/Dampers/TwoPosition.mo @@ -25,14 +25,14 @@ model TwoPosition "Two-position damper" extent={{-10,-10},{10,10}}, rotation=-90, origin={0,50}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) "Return true if open (open end switch contact)" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={20,-50}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.LessThreshold evaClo(t=0.01, h=0.5E-2) "Return true if closed (closed end switch contact)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/Buildings/Templates/Components/Fans/ArrayVariable.mo b/Buildings/Templates/Components/Fans/ArrayVariable.mo index c83b441d196..39d838f0459 100644 --- a/Buildings/Templates/Components/Fans/ArrayVariable.mo +++ b/Buildings/Templates/Components/Fans/ArrayVariable.mo @@ -27,13 +27,13 @@ model ArrayVariable "Fan array - Variable speed" extent={{-10,-10},{10,10}}, rotation=-90, origin={-46,80}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply sigCon + Buildings.Controls.OBC.CDL.Reals.Multiply sigCon "Resulting control signal" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={-40,50}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta[nFan]( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaSta[nFan]( each t=1E-2, each h=0.5E-2) "Evaluate fan status" annotation (Placement(transformation( diff --git a/Buildings/Templates/Components/Fans/SingleConstant.mo b/Buildings/Templates/Components/Fans/SingleConstant.mo index 0495c9c17c3..1365eeae94f 100644 --- a/Buildings/Templates/Components/Fans/SingleConstant.mo +++ b/Buildings/Templates/Components/Fans/SingleConstant.mo @@ -21,7 +21,7 @@ model SingleConstant "Single fan - Constant speed" extent={{-10,-10},{10,10}}, rotation=-90, origin={0,50}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaSta( t=1E-2, h=0.5E-2) "Evaluate fan status" annotation (Placement(transformation( diff --git a/Buildings/Templates/Components/Fans/SingleVariable.mo b/Buildings/Templates/Components/Fans/SingleVariable.mo index ad97e80487d..b8f6acd67fa 100644 --- a/Buildings/Templates/Components/Fans/SingleVariable.mo +++ b/Buildings/Templates/Components/Fans/SingleVariable.mo @@ -23,14 +23,14 @@ model SingleVariable "Single fan - Variable speed" rotation=-90, origin={-20,70}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply sigCon + Buildings.Controls.OBC.CDL.Reals.Multiply sigCon "Resulting control signal" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={0,30}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaSta( t=1E-2, h=0.5E-2) "Evaluate fan status" diff --git a/Buildings/Templates/Components/Validation/Coils.mo b/Buildings/Templates/Components/Validation/Coils.mo index 5c4c4af962c..02dcb409345 100644 --- a/Buildings/Templates/Components/Validation/Coils.mo +++ b/Buildings/Templates/Components/Validation/Coils.mo @@ -58,7 +58,7 @@ model Coils "Validation model for coil components" annotation (Placement(transformation(extent={{-20,120},{20, 160}}), iconTransformation(extent={{-250,-32},{-210,8}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + Controls.OBC.CDL.Reals.Sources.Ramp y(height=1, duration=10) "Coil/valve control signal" annotation (Placement(transformation(extent={{-90,150},{-70,170}}))); @@ -117,17 +117,17 @@ model Coils "Validation model for coil components" Interfaces.Bus bus3 "Control bus" annotation (Placement(transformation(extent={{-20,-100},{20,-60}}), iconTransformation(extent={{-250,-32},{-210,8}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TOut(k=coiEva.dat.datCoi.sta[1].nomVal.TConIn_nominal) + Controls.OBC.CDL.Reals.Sources.Constant TOut(k=coiEva.dat.datCoi.sta[1].nomVal.TConIn_nominal) "Outdoor temperature" annotation (Placement(transformation(extent={{-130,-110},{-110,-90}}))); - Controls.OBC.CDL.Continuous.Sources.Constant XOut(k=0.015) + Controls.OBC.CDL.Reals.Sources.Constant XOut(k=0.015) "Water mass fraction in outdoor air" annotation (Placement(transformation(extent={{-130,-150},{-110,-130}}))); Utilities.Psychrometrics.TWetBul_TDryBulXi wetBul( redeclare final package Medium = MediumAir) "Compute wet bulb temperature" annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); - Controls.OBC.CDL.Continuous.Sources.Constant pOut(k=101325) + Controls.OBC.CDL.Reals.Sources.Constant pOut(k=101325) "Outdoor pressure" annotation (Placement(transformation(extent={{-130,-190},{-110,-170}}))); Fluid.Sources.Boundary_pT bouAirEntCoo1( @@ -140,10 +140,10 @@ model Coils "Validation model for coil components" Utilities.Psychrometrics.X_pTphi x_pTphi(use_p_in=false) "Compute wet bulb temperature" annotation (Placement(transformation(extent={{-88,-10},{-68,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.TEvaIn_nominal) + Controls.OBC.CDL.Reals.Sources.Constant TAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.TEvaIn_nominal) "Entering air temperature" annotation (Placement(transformation(extent={{-130,10},{-110,30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant phiAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.phiIn_nominal) + Controls.OBC.CDL.Reals.Sources.Constant phiAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.phiIn_nominal) "Enetring air relative humidity" annotation (Placement(transformation(extent={{-130,-30},{-110,-10}}))); Buildings.Templates.Components.Coils.EvaporatorMultiStage coiMul( diff --git a/Buildings/Templates/Components/Validation/Dampers.mo b/Buildings/Templates/Components/Validation/Dampers.mo index f27632b1d1f..35c50bce851 100644 --- a/Buildings/Templates/Components/Validation/Dampers.mo +++ b/Buildings/Templates/Components/Validation/Dampers.mo @@ -25,7 +25,7 @@ model Dampers "Validation model for damper components" "Control bus" annotation (Placement(transformation(extent={{-20,60},{20,100}}), iconTransformation(extent={{-250,-32},{-210,8}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + Controls.OBC.CDL.Reals.Sources.Ramp y(height=1, duration=10) "Damper control signal" annotation (Placement(transformation(extent={{-90,90},{-70,110}}))); diff --git a/Buildings/Templates/Components/Validation/Fans.mo b/Buildings/Templates/Components/Validation/Fans.mo index a6d3934fa04..9ffbbe33d96 100644 --- a/Buildings/Templates/Components/Validation/Fans.mo +++ b/Buildings/Templates/Components/Validation/Fans.mo @@ -29,7 +29,7 @@ model Fans "Validation model for fans components" final dp_nominal=arr.dat.dp_nominal) "Ducts and coils equivalent flow resistance" annotation (Placement(transformation(extent={{40,70},{60,90}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, duration=10) + Controls.OBC.CDL.Reals.Sources.Ramp y(height=1, duration=10) "Fan control signal" annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); Interfaces.Bus bus "Control bus" diff --git a/Buildings/Templates/Components/Validation/Valves.mo b/Buildings/Templates/Components/Validation/Valves.mo index d0704c1e8b0..30d805f4dc2 100644 --- a/Buildings/Templates/Components/Validation/Valves.mo +++ b/Buildings/Templates/Components/Validation/Valves.mo @@ -34,7 +34,7 @@ model Valves "Validation model for valve components" "Control bus" annotation (Placement(transformation(extent={{-20,80},{20,120}}), iconTransformation(extent={{-250,-32},{-210,8}}))); - Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + Controls.OBC.CDL.Reals.Sources.Ramp y(height=1, duration=10) "Damper control signal" annotation (Placement(transformation(extent={{-90,110},{-70,130}}))); diff --git a/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo b/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo index 11e70e3d208..101c77b6a97 100644 --- a/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo +++ b/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo @@ -32,14 +32,14 @@ model ThreeWayTwoPosition "Three-way two-position valve" transformation( extent={{-10,-10},{10,10}}, rotation=0))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) "Return true if open (open end switch contact)" annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={20,-50}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.LessThreshold evaClo(t=0.01, h=0.5E-2) "Return true if closed (closed end switch contact)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo b/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo index 14aeb976710..d904826558b 100644 --- a/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo +++ b/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo @@ -25,7 +25,7 @@ model TwoWayTwoPosition "Two-way two-position valve" transformation( extent={{-10,-10},{10,10}}, rotation=0))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold evaOpe( t=0.99, h=0.5E-2) "Return true if open (open end switch contact)" @@ -34,7 +34,7 @@ model TwoWayTwoPosition "Two-way two-position valve" extent={{-10,-10},{10,10}}, rotation=-90, origin={20,-50}))); - Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + Buildings.Controls.OBC.CDL.Reals.LessThreshold evaClo(t=0.01, h=0.5E-2) "Return true if closed (closed end switch contact)" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo b/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo index dc929fe4fea..b97362eea26 100644 --- a/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo @@ -4,12 +4,12 @@ block OpenLoop "Open loop controller" Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox( final typ=Buildings.Templates.ZoneEquipment.Types.Controller.OpenLoop); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamVAV(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yDamVAV(k=1) annotation (Placement(transformation( extent={{-10,-10},{10,10}}, rotation=-90, origin={-100,110}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiHea(k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCoiHea(k=1) annotation ( Placement(transformation( extent={{-10,-10},{10,10}}, diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo b/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo index cea01689116..54e357d80a6 100644 --- a/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo @@ -119,16 +119,16 @@ block ControllerG36VAVBox "Guideline 36 controller for VAV terminal unit" "Evaluate zone temperature status" annotation (Placement(transformation(extent={{0,-120},{20,-92}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowWarUpTim(k=3600) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooDowWarUpTim(k=3600) "RFE: Optimal start (using global OA temperature not associated with any AHU) not implemented" annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setAdj(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant setAdj(k=0) "RFE: Setpoint adjustment by the occupant is not implemented in the template" annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetAdj(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooSetAdj(k=0) "RFE: Setpoint adjustment by the occupant is not implemented in the template" annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetAdj(k=0) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaSetAdj(k=0) "RFE: Setpoint adjustment by the occupant is not implemented in the template" annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant uCooDemLimLev(k=0) diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo index 3bf7f94977e..02dd5319c97 100644 --- a/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo @@ -14,13 +14,13 @@ block VAVMZControlPoints "Emulation of multiple-zone VAV control points" rotation=90, origin={100,0}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirSupSet[nZon]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TAirSupSet[nZon]( each k=15 + 273.15) "AHU supply air temperature setpoint" annotation (Placement(transformation(extent={{0,50},{20,70}}))); Buildings.Controls.OBC.CDL.Integers.Sources.Constant yOpeMod[nZon](each k=1) "Group operating mode" annotation (Placement(transformation(extent={{0,10},{20,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VDesUncOutAir_flow[nZon](each k=1) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant VDesUncOutAir_flow[nZon](each k=1) "VDesUncOutAir_flow from AHU controller" annotation (Placement(transformation(extent={{0,130},{20,150}}))); Buildings.Controls.OBC.CDL.Logical.Sources.Constant yReqOutAir[nZon](each k=true) @@ -29,7 +29,7 @@ block VAVMZControlPoints "Emulation of multiple-zone VAV control points" Controls.OBC.CDL.Logical.Sources.Constant y1FanSup_actual[nZon](each k=true) "y1FanSup_actual from AHU controller" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TAirSup[nZon](each k=15 + 273.15) + Controls.OBC.CDL.Reals.Sources.Constant TAirSup[nZon](each k=15 + 273.15) "AHU supply air temperature" annotation (Placement(transformation(extent={{40,50},{60,70}}))); equation diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo index 0f22f35818e..f0a2fda1485 100644 --- a/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo @@ -27,23 +27,23 @@ block BASControlPoints "Emulation of control points from the BAS" Controls.OBC.CDL.Integers.Sources.Constant yOveDamPos[nZon](each k=0) "Override damper position, 1: set to close; 2: set to open" annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaOccSet[nZon]( + Controls.OBC.CDL.Reals.Sources.Constant TZonHeaOccSet[nZon]( each k=293.15) "Occupied heating setpoint" annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonCooOccSet[nZon]( + Controls.OBC.CDL.Reals.Sources.Constant TZonCooOccSet[nZon]( each k=297.15) "Occupied cooling setpoint" annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaUnoSet[nZon]( + Controls.OBC.CDL.Reals.Sources.Constant TZonHeaUnoSet[nZon]( each k=285.15) "Unoccupied heating setpoint" annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonCooUnoSet[nZon]( + Controls.OBC.CDL.Reals.Sources.Constant TZonCooUnoSet[nZon]( each k=303.15) "Unoccupied cooling setpoint" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); - Controls.OBC.CDL.Continuous.Sources.Constant ppmCO2Set[nZon]( + Controls.OBC.CDL.Reals.Sources.Constant ppmCO2Set[nZon]( each k=1000) "Zone CO2 concentration setpoint" annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo index b5b68009b9e..33557c2ca48 100644 --- a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo @@ -19,14 +19,14 @@ block ZoneControlPoints "Emulation of control points from zone sensors and therm Controls.OBC.CDL.Logical.Sources.Constant y1Win(k=true) "Window switch status" annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZon(k=303.15) + Controls.OBC.CDL.Reals.Sources.Constant TZon(k=303.15) "Zone temperature" annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); Controls.OBC.CDL.Logical.Sources.Constant y1OveOccZon( k=false) "Zone occupancy override" annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant ppmCO2(k=1000) + Controls.OBC.CDL.Reals.Sources.Constant ppmCO2(k=1000) "Zone CO2 concentration" annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); diff --git a/Buildings/ThermalZones/Detailed/Examples/MixedAirCO2.mo b/Buildings/ThermalZones/Detailed/Examples/MixedAirCO2.mo index 04dd4c386f1..efb9ad69df5 100644 --- a/Buildings/ThermalZones/Detailed/Examples/MixedAirCO2.mo +++ b/Buildings/ThermalZones/Detailed/Examples/MixedAirCO2.mo @@ -39,11 +39,11 @@ model MixedAirCO2 reverseActing=false) "PI controller for fresh air supply, with negative minimum because of reverse action" annotation (Placement(transformation(extent={{-100,-130},{-80,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addFlo( + Buildings.Controls.OBC.CDL.Reals.AddParameter addFlo( p = 1) "Gain that increases the mass flow rate above its typical value" annotation (Placement(transformation(extent={{-70,-130},{-50,-110}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiFac( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiFac( k=-mOut_flow) "Gain that increases the mass flow rate above its typical value" annotation (Placement(transformation(extent={{-40,-130},{-20,-110}}))); diff --git a/Buildings/ThermalZones/Detailed/Validation/BESTEST/BaseClasses/DaySchedule.mo b/Buildings/ThermalZones/Detailed/Validation/BESTEST/BaseClasses/DaySchedule.mo index edf69df6c33..ddc8711155e 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BESTEST/BaseClasses/DaySchedule.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BESTEST/BaseClasses/DaySchedule.mo @@ -1,6 +1,6 @@ within Buildings.ThermalZones.Detailed.Validation.BESTEST.BaseClasses; model DaySchedule "Schedule that repeats every day" - extends Buildings.Controls.OBC.CDL.Continuous.Sources.TimeTable( + extends Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable( final smoothness=Buildings.Controls.OBC.CDL.Types.Smoothness.LinearSegments, final extrapolation=Buildings.Controls.OBC.CDL.Types.Extrapolation.Periodic, final offset=fill(0, size(table, 2)-1)); diff --git a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600.mo b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600.mo index 7a5c7438dd0..bd4877ec8cc 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600.mo @@ -20,23 +20,23 @@ model Case600 "Case 600FF, but with dual-setpoint for heating and cooling" cooCri(lowerLimit=-5*3.6e9, upperLimit=-6.83*3.6e9) "Annual cooling load limits of the test acceptance criteria from ASHRAE/ANSI Standard 140" annotation (Placement(transformation(extent={{-96,62},{-82,76}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conHea( + Buildings.Controls.OBC.CDL.Reals.PID conHea( k=0.1, Ti=300, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI) "Controller for heating" annotation (Placement(transformation(extent={{-72,30},{-64,38}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conCoo( + Buildings.Controls.OBC.CDL.Reals.PID conCoo( k=0.1, Ti=300, reverseActing=false, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI) "Controller for cooling" annotation (Placement(transformation(extent={{-72,8},{-64,16}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiHea(k=1E6) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiHea(k=1E6) "Gain for heating" annotation (Placement(transformation(extent={{-58,30},{-50,38}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gaiCoo(k=-1E6) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gaiCoo(k=-1E6) "Gain for cooling" annotation (Placement(transformation(extent={{-58,8},{-50,16}}))); Modelica.Blocks.Math.Sum sumHeaCoo(nin=2) @@ -67,10 +67,10 @@ model Case600 "Case 600FF, but with dual-setpoint for heating and cooling" replaceable BaseClasses.DaySchedule TSetCoo(table=[0.0,273.15 + 27]) "Cooling setpoint" annotation (Placement(transformation(extent={{-92,8},{-84,16}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage PHea(delta=3600) + Buildings.Controls.OBC.CDL.Reals.MovingAverage PHea(delta=3600) "Hourly averaged heating power" annotation (Placement(transformation(extent={{-20,48},{-12,56}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage PCoo(delta=3600) + Buildings.Controls.OBC.CDL.Reals.MovingAverage PCoo(delta=3600) "Hourly averaged cooling power" annotation (Placement(transformation(extent={{-20,-8},{-12,0}}))); equation @@ -155,8 +155,8 @@ Removed initType in PID controller.
              • January 21, 2020, by Michael Wetter:
                Changed calculation of time averaged values to use - -Buildings.Controls.OBC.CDL.Continuous.MovingMean + +Buildings.Controls.OBC.CDL.Reals.MovingMean because this does not trigger a time event every hour.
                This is for issue 1714. diff --git a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600FF.mo b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600FF.mo index 8e38e774169..86066b01c2b 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600FF.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases6xx/Case600FF.mo @@ -185,13 +185,13 @@ model Case600FF Modelica.Blocks.Math.MultiSum multiSum(nu=1) "Multi sum for infiltration air flow rate" annotation (Placement(transformation(extent={{-78,-80},{-66,-68}}))); - Controls.OBC.CDL.Continuous.MovingAverage TRooHou( + Controls.OBC.CDL.Reals.MovingAverage TRooHou( delta=3600, y(final unit="K", displayUnit="degC")) "Hourly averaged room air temperature" annotation (Placement(transformation(extent={{-68,-28},{-60,-20}}))); - Controls.OBC.CDL.Continuous.MovingAverage TRooAnn( + Controls.OBC.CDL.Reals.MovingAverage TRooAnn( delta=86400*365, y(final unit="K", displayUnit="degC")) @@ -343,8 +343,8 @@ This is for January 21, 2020, by Michael Wetter:
                Changed calculation of time averaged values to use -
                -Buildings.Controls.OBC.CDL.Continuous.MovingMean + +Buildings.Controls.OBC.CDL.Reals.MovingMean because this does not trigger a time event every hour.
                This is for issue 1714. diff --git a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases9xx/Case960.mo b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases9xx/Case960.mo index cc2a607f287..3fa10537e29 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases9xx/Case960.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BESTEST/Cases9xx/Case960.mo @@ -133,10 +133,10 @@ model Case960 "Case 900, but with an unconditioned sun-space" "Sun space room air temperature" annotation (Placement(transformation(extent={{5,-5},{-5,5}}, rotation=0, origin={107,-11}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage TSunSpaHou(delta=3600) + Buildings.Controls.OBC.CDL.Reals.MovingAverage TSunSpaHou(delta=3600) "Hourly averaged room air temperature" annotation (Placement(transformation(extent={{88,-28},{96,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.MovingAverage TSunSpaAnn(delta=86400*365) + Buildings.Controls.OBC.CDL.Reals.MovingAverage TSunSpaAnn(delta=86400*365) "Annual averaged room air temperature" annotation (Placement(transformation(extent={{88,-40},{96,-32}}))); equation diff --git a/Buildings/ThermalZones/Detailed/Validation/BESTEST/UsersGuide.mo b/Buildings/ThermalZones/Detailed/Validation/BESTEST/UsersGuide.mo index 6e7bc9901b6..19446577bb8 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BESTEST/UsersGuide.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BESTEST/UsersGuide.mo @@ -36,14 +36,14 @@ in Nouidui et al. (2012).

                Implementation

                Heating and cooling is controlled using the PI controller - -Buildings.Controls.OBC.CDL.Continuous.PID + +Buildings.Controls.OBC.CDL.Reals.PID with anti-windup.

                Hourly averaged values and annual mean values are computed using an instance of - -Buildings.Controls.OBC.CDL.Continuous.MovingAverage. + +Buildings.Controls.OBC.CDL.Reals.MovingAverage.

                Validation results

                diff --git a/Buildings/ThermalZones/Detailed/Validation/BaseClasses/SingleZoneFloorHeater.mo b/Buildings/ThermalZones/Detailed/Validation/BaseClasses/SingleZoneFloorHeater.mo index c6559c193b3..6ec2b0eb208 100644 --- a/Buildings/ThermalZones/Detailed/Validation/BaseClasses/SingleZoneFloorHeater.mo +++ b/Buildings/ThermalZones/Detailed/Validation/BaseClasses/SingleZoneFloorHeater.mo @@ -27,17 +27,17 @@ model SingleZoneFloorHeater annotation (Placement(transformation(extent={{-140,-110},{-100,-70}}), iconTransformation(extent={{-140,-110},{-100,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, Ti=900, u_s(unit="K", displayUnit="degC"), u_m(unit="K", displayUnit="degC")) "Controller for heater" annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( k=20) "Gain factor" annotation (Placement(transformation(extent={{-48,-70},{-28,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.AddParameter addPar( + Buildings.Controls.OBC.CDL.Reals.AddParameter addPar( p=273.15 + 10, y(unit="K", displayUnit="degC")) "Compute the leaving water setpoint temperature" diff --git a/Buildings/ThermalZones/Detailed/Validation/MixedAirFreeResponseSteadyState.mo b/Buildings/ThermalZones/Detailed/Validation/MixedAirFreeResponseSteadyState.mo index 1979fffe8a7..5c2519f95f9 100644 --- a/Buildings/ThermalZones/Detailed/Validation/MixedAirFreeResponseSteadyState.mo +++ b/Buildings/ThermalZones/Detailed/Validation/MixedAirFreeResponseSteadyState.mo @@ -17,7 +17,7 @@ model MixedAirFreeResponseSteadyState HInfHorSou=Buildings.BoundaryConditions.Types.DataSource.Parameter, HSou=Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor)); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(k=0) "Zero input signal" + Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(k=0) "Zero input signal" annotation (Placement(transformation(extent={{-100,30},{-80,50}}))); equation connect(zer.y, weaDat.HDifHor_in) annotation (Line(points={{-78,40},{-66,40},{ diff --git a/Buildings/ThermalZones/Detailed/Validation/SingleZoneFloorWithHeating.mo b/Buildings/ThermalZones/Detailed/Validation/SingleZoneFloorWithHeating.mo index 7965c3f1006..3f17d7fff13 100644 --- a/Buildings/ThermalZones/Detailed/Validation/SingleZoneFloorWithHeating.mo +++ b/Buildings/ThermalZones/Detailed/Validation/SingleZoneFloorWithHeating.mo @@ -40,10 +40,10 @@ model SingleZoneFloorWithHeating gai(K=0*[0.4; 0.4; 0.2])) "Single-zone floor model" annotation (Placement(transformation(extent={{66,106},{106,146}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetRoo(k=273.15 + 22, + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetRoo(k=273.15 + 22, y(unit="K", displayUnit="degC")) "Setpoint for room air" annotation (Placement(transformation(extent={{-120,84},{-100,104}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiSum EHeaFlo(nin=5) + Buildings.Controls.OBC.CDL.Reals.MultiSum EHeaFlo(nin=5) "Heating energy of the five-zone floor" annotation (Placement(transformation(extent={{80,-50},{100,-30}}))); Buildings.ThermalZones.Detailed.Validation.BaseClasses.SingleZoneFloorHeater heaAndCon( diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/AirHeating.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/AirHeating.mo index 5f4bcfb1c3f..affaa78803b 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/AirHeating.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/AirHeating.mo @@ -34,7 +34,7 @@ model AirHeating nominalValuesDefineDefaultPressureCurve=true) "Fan" annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); - Controls.OBC.CDL.Continuous.Sources.Pulse TSet( + Controls.OBC.CDL.Reals.Sources.Pulse TSet( shift( displayUnit="h")=21600, amplitude=6, @@ -45,7 +45,7 @@ model AirHeating displayUnit="degC")) "Setpoint for room air" annotation (Placement(transformation(extent={{-150,-110},{-130,-90}}))); - Controls.OBC.CDL.Continuous.PID conPID( + Controls.OBC.CDL.Reals.PID conPID( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=1, Ti( @@ -88,7 +88,7 @@ model AirHeating nPorts=1) "Outside air supply" annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); - Controls.OBC.CDL.Continuous.Hysteresis sta1( + Controls.OBC.CDL.Reals.Hysteresis sta1( uLow=0.05, uHigh=0.5) "Hysteresis to switch on stage 1" @@ -97,7 +97,7 @@ model AirHeating realTrue=mRec_flow_nominal/2) "Mass flow rate for 1st stage" annotation (Placement(transformation(extent={{-50,-90},{-30,-70}}))); - Controls.OBC.CDL.Continuous.Hysteresis sta2( + Controls.OBC.CDL.Reals.Hysteresis sta2( uLow=0.5, uHigh=0.75) "Hysteresis to switch on stage 2" @@ -106,13 +106,13 @@ model AirHeating realTrue=mRec_flow_nominal/2) "Mass flow rate added for 2nd stage" annotation (Placement(transformation(extent={{-50,-60},{-30,-40}}))); - Controls.OBC.CDL.Continuous.Add m_fan_set + Controls.OBC.CDL.Reals.Add m_fan_set "Mass flow rate for fan" annotation (Placement(transformation(extent={{8,-66},{28,-46}}))); - Controls.OBC.CDL.Continuous.Add TAirLvgSet + Controls.OBC.CDL.Reals.Add TAirLvgSet "Set point temperature for air leaving the heater" annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); - Controls.OBC.CDL.Continuous.AddParameter TSupMin( + Controls.OBC.CDL.Reals.AddParameter TSupMin( p=2) "Minimum supply air temperature" annotation (Placement(transformation(extent={{8,-110},{28,-90}}))); @@ -120,7 +120,7 @@ model AirHeating Modelica.Blocks.Sources.Constant qIntGai[3](each k=0) "Internal heat gains, set to zero because these are modeled in EnergyPlus" annotation (Placement(transformation(extent={{-40,100},{-20,120}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai(final k=8) "Gain factor" + Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=8) "Gain factor" annotation (Placement(transformation(extent={{-6,-90},{14,-70}}))); initial equation // Stop simulation if the hard-coded values differ from the ones computed by EnergyPlus. diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/EquipmentSchedule.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/EquipmentSchedule.mo index 0ad54518759..2b3f7e41eca 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/EquipmentSchedule.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/EquipmentSchedule.mo @@ -7,7 +7,7 @@ model EquipmentSchedule unit=Buildings.ThermalZones.EnergyPlus_9_6_0.Types.Units.Normalized) "Block that writes to the EnergyPlus schedule INTERMITTENT" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Pulse intLoaFra( + Buildings.Controls.OBC.CDL.Reals.Sources.Pulse intLoaFra( shift( displayUnit="h")=25200, period( diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/HeatPumpRadiantHeatingGroundHeatTransfer.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/HeatPumpRadiantHeatingGroundHeatTransfer.mo index 5f7a2065b6b..9629b085161 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/HeatPumpRadiantHeatingGroundHeatTransfer.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/HeatPumpRadiantHeatingGroundHeatTransfer.mo @@ -61,7 +61,7 @@ model HeatPumpRadiantHeatingGroundHeatTransfer Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TSurLivFlo "Surface temperature for floor of living room" annotation (Placement(transformation(extent={{20,-140},{40,-120}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHea(k( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooHea(k( final unit="K", displayUnit="degC") = 293.15, y(final unit="K", displayUnit="degC")) "Room temperture set point for heating" @@ -104,7 +104,7 @@ model HeatPumpRadiantHeatingGroundHeatTransfer Td=600) "Controller for radiant heating system" annotation (Placement(transformation(extent={{-280,-156},{-260,-136}}))); - Controls.OBC.CDL.Continuous.PIDWithReset conSup( + Controls.OBC.CDL.Reals.PIDWithReset conSup( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=4, Ti(displayUnit="min") = 60, @@ -114,9 +114,9 @@ model HeatPumpRadiantHeatingGroundHeatTransfer final reverseActing=true, y_reset=0.2) "Controller for heat pump" annotation (Placement(transformation(extent={{-160,-150},{-140,-130}}))); - Controls.OBC.CDL.Continuous.Switch swiHeaPum "Switch for heat pump signal" + Controls.OBC.CDL.Reals.Switch swiHeaPum "Switch for heat pump signal" annotation (Placement(transformation(extent={{-120,-158},{-100,-138}}))); - Controls.OBC.CDL.Continuous.Sources.Constant off( + Controls.OBC.CDL.Reals.Sources.Constant off( final k = 0) "Output 0 to switch heater off" annotation (Placement(transformation(extent={{-320,-188},{-300,-168}}))); @@ -199,7 +199,7 @@ model HeatPumpRadiantHeatingGroundHeatTransfer displayUnit="kWh/m2")) "Electricity use per floor area" annotation (Placement(transformation(extent={{180,-378},{200,-358}}))); - Controls.OBC.CDL.Continuous.Divide COP "Coefficient of performance" + Controls.OBC.CDL.Reals.Divide COP "Coefficient of performance" annotation (Placement(transformation(extent={{220,-360},{240,-340}}))); Controls.OBC.CDL.Logical.Sources.Pulse ava( width=22/24, @@ -207,7 +207,7 @@ model HeatPumpRadiantHeatingGroundHeatTransfer shift=7*3600) "Availability schedule to block heat pump operation in early morning (assuming grid is at capacity)" annotation (Placement(transformation(extent={{-320,-220},{-300,-200}}))); - Controls.OBC.CDL.Continuous.Switch swiPum "Switch for circulation pumps" + Controls.OBC.CDL.Reals.Switch swiPum "Switch for circulation pumps" annotation (Placement(transformation(extent={{-240,-220},{-220,-200}}))); Controls.OBC.CDL.Logical.And onHeaPum "On/off signal for heat pump" annotation (Placement(transformation(extent={{-200,-190},{-180,-170}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/LightsControl.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/LightsControl.mo index 3f5cfdae044..d10f841c42b 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/LightsControl.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/LightsControl.mo @@ -22,24 +22,24 @@ model LightsControl timZon=-21600) "Block that computes sunrise and sunset" annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); - Controls.OBC.CDL.Continuous.Modulo mod1 + Controls.OBC.CDL.Reals.Modulo mod1 "Output time of day" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); - Controls.OBC.CDL.Continuous.Sources.Constant day( + Controls.OBC.CDL.Reals.Sources.Constant day( k=24*3600) "Outputs one day" annotation (Placement(transformation(extent={{-150,38},{-130,58}}))); - Controls.OBC.CDL.Continuous.Sources.ModelTime modTim + Controls.OBC.CDL.Reals.Sources.ModelTime modTim "Model time" annotation (Placement(transformation(extent={{-150,66},{-130,86}}))); - Controls.OBC.CDL.Continuous.LessThreshold lesEquThr( + Controls.OBC.CDL.Reals.LessThreshold lesEquThr( t=22*3600) "Check whether time is earlier than 22:00" annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); - Controls.OBC.CDL.Continuous.Subtract timToSunSet + Controls.OBC.CDL.Reals.Subtract timToSunSet "Time to next sunset" annotation (Placement(transformation(extent={{-100,130},{-80,150}}))); - Controls.OBC.CDL.Continuous.LessThreshold lesEquThr1( + Controls.OBC.CDL.Reals.LessThreshold lesEquThr1( t=1800) "Block that outputs true if sun sets in less than 30 minutes" annotation (Placement(transformation(extent={{-70,130},{-50,150}}))); @@ -56,7 +56,7 @@ model LightsControl Controls.OBC.CDL.Logical.Not not1 "Output true if the sun is down" annotation (Placement(transformation(extent={{-70,100},{-50,120}}))); - Controls.OBC.CDL.Continuous.GreaterThreshold greEquThr( + Controls.OBC.CDL.Reals.GreaterThreshold greEquThr( t=12*3600) "Output true after noon" annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TRoom.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TRoom.mo index 736198979fe..68b42ae67f8 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TRoom.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TRoom.mo @@ -57,7 +57,7 @@ model RadiantHeatingCooling_TRoom nPorts=1) "Pressure boundary condition" annotation (Placement(transformation(extent={{70,-190},{50,-170}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHea( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooHea( k(final unit="K", displayUnit="degC")=293.15, y(final unit="K", @@ -115,7 +115,7 @@ model RadiantHeatingCooling_TRoom nPorts=1) "Mass flow source for cooling water at prescribed temperature" annotation (Placement(transformation(extent={{-38,80},{-18,100}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooCoo( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooCoo( k(final unit="K", displayUnit="degC")=299.15, y(final unit="K", diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TSurface.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TSurface.mo index 9fbec02f628..6533f75ffe3 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TSurface.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/RadiantHeatingCooling_TSurface.mo @@ -59,7 +59,7 @@ model RadiantHeatingCooling_TSurface nPorts=1) "Pressure boundary condition" annotation (Placement(transformation(extent={{70,-190},{50,-170}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHea( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooHea( k(final unit="K", displayUnit="degC")=293.15, y(final unit="K", @@ -117,7 +117,7 @@ model RadiantHeatingCooling_TSurface nPorts=1) "Mass flow source for cooling water at prescribed temperature" annotation (Placement(transformation(extent={{-38,80},{-18,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSurCooOn(k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSurCooOn(k( final unit="K", displayUnit="degC") = 293.15, y(final unit="K", displayUnit="degC")) "Surface temperture set point for cooling" @@ -146,18 +146,18 @@ model RadiantHeatingCooling_TSurface Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TSur "Surface temperature" annotation (Placement(transformation(extent={{120,60},{140,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSetSurOff(k( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSetSurOff(k( final unit="K", displayUnit="degC") = 303.15, y(final unit="K", displayUnit="degC")) "Surface temperture set point to switch system off" annotation (Placement(visible = true, transformation(extent = {{-214, 100}, {-194, 120}}, rotation = 0))); - Controls.OBC.CDL.Continuous.Greater enaCoo(h=1) + Controls.OBC.CDL.Reals.Greater enaCoo(h=1) "Switch to enable and disable cooling" annotation (Placement(transformation(extent={{-140,-10},{-120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.Switch TSetSurCoo + Buildings.Controls.OBC.CDL.Reals.Switch TSetSurCoo "Set point for surface temperature for cooling system" annotation (Placement(visible = true, transformation(extent = {{-180, 108}, {-160, 128}}, rotation = 0))); - Controls.OBC.CDL.Continuous.AddParameter TOffSet(p=3) + Controls.OBC.CDL.Reals.AddParameter TOffSet(p=3) "Off set before switching on the cooling system" annotation (Placement(transformation(extent={{-180,-18},{-160,2}}))); initial equation diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/ShadeControl.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/ShadeControl.mo index 0c6880b8d7d..23b5521243a 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/ShadeControl.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse/ShadeControl.mo @@ -62,11 +62,11 @@ model ShadeControl annotation (Placement(transformation(extent={{-20,-118},{0,-100}}))); Buildings.Controls.OBC.CDL.Logical.And and2 annotation (Placement(transformation(extent={{40,-110},{60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greEquT( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquT( t=0.5) "Output conversion" annotation (Placement(transformation(extent={{10,-90},{30,-70}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greEquH( + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greEquH( t=0.5) "Output conversion" annotation (Placement(transformation(extent={{10,-120},{30,-100}}))); @@ -167,13 +167,13 @@ protected HeatTransfer.Sources.PrescribedHeatFlow preHeaFlo "Prescribed heat flow rate" annotation (Placement(transformation(extent={{50,-10},{70,10}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=-5000) "Gain" + Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=-5000) "Gain" annotation (Placement(transformation(extent={{10,-10},{30,10}}))); - Controls.OBC.CDL.Continuous.PID conPID( + Controls.OBC.CDL.Reals.PID conPID( Ti=120, reverseActing=false) annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSet( + Controls.OBC.CDL.Reals.Sources.Constant TSet( k=273.15+25) "Set point temperature" annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/Floor.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/Floor.mo index d2dec72a606..bddd378c260 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/Floor.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/Floor.mo @@ -106,7 +106,7 @@ protected computeWetBulbTemperature=false) "Building-level declarations" annotation (Placement(transformation(extent={{140,460},{160,480}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant qGai_flow[3]( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant qGai_flow[3]( k={0,0,0}) "Internal heat gain (computed already in EnergyPlus)" annotation (Placement(transformation(extent={{-140,-40},{-120,-20}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/IdealHeaterCooler.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/IdealHeaterCooler.mo index 5696cb05620..80d5edf9f98 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/IdealHeaterCooler.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/BaseClasses/IdealHeaterCooler.mo @@ -38,7 +38,7 @@ model IdealHeaterCooler Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heaPor "Heat port" annotation (Placement(transformation(extent={{90,-10},{110,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PID conPID( + Buildings.Controls.OBC.CDL.Reals.PID conPID( final controllerType=controllerType, final k=k, final Ti=Ti, @@ -48,7 +48,7 @@ model IdealHeaterCooler annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); protected - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=Q_flow_nominal) "Gain for heat flow rate" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/IdealHeatingCoolingWinter.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/IdealHeatingCoolingWinter.mo index fa4110f999f..1f7394d01df 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/IdealHeatingCoolingWinter.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Examples/SmallOffice/IdealHeatingCoolingWinter.mo @@ -2,13 +2,13 @@ within Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice; model IdealHeatingCoolingWinter "Building with constant fresh air and ideal heating/cooling that exactly meets set point" extends Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice.Unconditioned; - Controls.OBC.CDL.Continuous.Sources.Constant THeaSet[5]( + Controls.OBC.CDL.Reals.Sources.Constant THeaSet[5]( each k( final unit="K", displayUnit="degC")=293.15) "Set point temperature for heating" annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); - Controls.OBC.CDL.Continuous.Sources.Constant THeaCoo[5]( + Controls.OBC.CDL.Reals.Sources.Constant THeaCoo[5]( each k( final unit="K", displayUnit="degC")=299.15) @@ -22,14 +22,14 @@ model IdealHeatingCoolingWinter Q_flow_nominal=-50*{flo.AFloSou,flo.AFloEas,flo.AFloNor,flo.AFloWes,flo.AFloCor}) "Ideal cooling device for sensible cooling" annotation (Placement(transformation(rotation=0,extent={{-80,130},{-60,150}}))); - Controls.OBC.CDL.Continuous.MultiSum QHea_flow( + Controls.OBC.CDL.Reals.MultiSum QHea_flow( nin=5) "Total heat flow rate" annotation (Placement(transformation(extent={{-30,90},{-10,110}}))); Modelica.Blocks.Continuous.Integrator EHea "Heating energy" annotation (Placement(transformation(extent={{0,90},{20,110}}))); - Controls.OBC.CDL.Continuous.MultiSum QCoo_flow( + Controls.OBC.CDL.Reals.MultiSum QCoo_flow( nin=5) "Total heat flow rate" annotation (Placement(transformation(extent={{-30,150},{-10,170}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/ThermalZone.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/ThermalZone.mo index 1332b18b738..d4f0caea881 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/ThermalZone.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/ThermalZone.mo @@ -196,7 +196,7 @@ protected Utilities.Psychrometrics.Phi_pTX relHum "Relative humidity" annotation (Placement(transformation(extent={{156,12},{176,32}}))); - Controls.OBC.CDL.Continuous.Divide X_w + Controls.OBC.CDL.Reals.Divide X_w "Water vapor mass fraction per kg total air" annotation (Placement(transformation(extent={{40,-32},{60,-12}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/Schedule/EquipmentScheduleOutputVariable.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/Schedule/EquipmentScheduleOutputVariable.mo index e66c0893917..829d797305e 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/Schedule/EquipmentScheduleOutputVariable.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/Schedule/EquipmentScheduleOutputVariable.mo @@ -14,7 +14,7 @@ model EquipmentScheduleOutputVariable message="EnergyPlus did not synchronize the output variable correctly") "Assertion to test whether the schedule and the EnergyPlus output variable are correctly synchronized" annotation (Placement(transformation(extent={{30,40},{50,60}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai(k=500) + Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=500) "Gain for internal heat gain" annotation (Placement(transformation(extent={{-40,34},{-20,54}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/OneZoneOneYear.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/OneZoneOneYear.mo index a3ad2a919a4..78ae03908d0 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/OneZoneOneYear.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/OneZoneOneYear.mo @@ -2,7 +2,7 @@ within Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone; model OneZoneOneYear "Validation model for one zone" extends Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SingleFamilyHouse.Unconditioned; - Controls.OBC.CDL.Continuous.MovingAverage TAirMea( + Controls.OBC.CDL.Reals.MovingAverage TAirMea( delta(displayUnit="d")= 86400, y(final unit="K", displayUnit="degC")) diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/TwoIdenticalZones.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/TwoIdenticalZones.mo index 54c887e4696..38adc684e84 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/TwoIdenticalZones.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/TwoIdenticalZones.mo @@ -35,7 +35,7 @@ model TwoIdenticalZones Controls.OBC.UnitConversions.From_degC TAirEnePlu "Room air temperature computed by EnergyPlus" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter relHumEnePlu(k=0.01) + Controls.OBC.CDL.Reals.MultiplyByParameter relHumEnePlu(k=0.01) "Relative humidity in the room computed by EnergyPlus" annotation (Placement(transformation(extent={{0,20},{20,40}}))); diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneConstantFloorTemperature.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneConstantFloorTemperature.mo index 563fde8f1a1..21057915670 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneConstantFloorTemperature.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneConstantFloorTemperature.mo @@ -6,7 +6,7 @@ model OneZoneConstantFloorTemperature surfaceName="Living:Floor") "Floor surface of living room" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TFlo( + Controls.OBC.CDL.Reals.Sources.Constant TFlo( k(final unit="K", displayUnit="degC")=298.15) "Floor temperature" diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneControlledFloorTemperature.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneControlledFloorTemperature.mo index bca219c54d5..d5ce7ecd3d7 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneControlledFloorTemperature.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ZoneSurface/OneZoneControlledFloorTemperature.mo @@ -7,28 +7,28 @@ model OneZoneControlledFloorTemperature surfaceName="Living:Floor") "Floor surface of living room" annotation (Placement(transformation(extent={{70,40},{90,60}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooHea( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooHea( k(final unit="K", displayUnit="degC")=293.15, y(final unit="K", displayUnit="degC")) "Room temperture set point for heating" annotation (Placement(transformation(extent={{-96,40},{-76,60}}))); - Controls.OBC.CDL.Continuous.PID conHea( + Controls.OBC.CDL.Reals.PID conHea( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=0.25, Ti( displayUnit="min")=1800) "Controller for heating" annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TSetRooCoo( + Controls.OBC.CDL.Reals.Sources.Constant TSetRooCoo( k(final unit="K", displayUnit="degC")=297.15, y(final unit="K", displayUnit="degC")) "Room temperture set point for cooling" annotation (Placement(transformation(extent={{-96,70},{-76,90}}))); - Controls.OBC.CDL.Continuous.PID conCoo( + Controls.OBC.CDL.Reals.PID conCoo( controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, k=0.25, Ti( @@ -36,18 +36,18 @@ model OneZoneControlledFloorTemperature reverseActing=false) "Controller for cooling" annotation (Placement(transformation(extent={{-60,70},{-40,90}}))); - Controls.OBC.CDL.Continuous.Add dTSetFlo + Controls.OBC.CDL.Reals.Add dTSetFlo "Change in floor temperature compared to room air temperature" annotation (Placement(transformation(extent={{0,60},{20,80}}))); - Controls.OBC.CDL.Continuous.Add TFlo( + Controls.OBC.CDL.Reals.Add TFlo( y(final unit="K", displayUnit="degC")) "Floor temperature" annotation (Placement(transformation(extent={{30,40},{50,60}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai( + Controls.OBC.CDL.Reals.MultiplyByParameter gai( final k=-5) "Gain factor" annotation (Placement(transformation(extent={{-32,70},{-12,90}}))); - Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( + Controls.OBC.CDL.Reals.MultiplyByParameter gai1( final k=5) "Gain factor" annotation (Placement(transformation(extent={{-32,40},{-12,60}}))); diff --git a/Buildings/Utilities/Math/Functions/round.mo b/Buildings/Utilities/Math/Functions/round.mo index 1f3b91667b6..3d279ba5dcf 100644 --- a/Buildings/Utilities/Math/Functions/round.mo +++ b/Buildings/Utilities/Math/Functions/round.mo @@ -40,8 +40,8 @@ Hence, the function outputs

          To use this function as a block, use - -Buildings.Controls.OBC.CDL.Continuous.Round. + +Buildings.Controls.OBC.CDL.Reals.Round.

          ", revisions="
            diff --git a/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo b/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo index 3b888f3c838..e3aa59f3053 100644 --- a/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo +++ b/Buildings/Utilities/Plotters/Examples/BaseClasses/CoolingCoilValve.mo @@ -104,7 +104,7 @@ block CoolingCoilValve "Cooling coil valve position control sequence" annotation (Placement(transformation(extent={{120,-10},{140,10}}), iconTransformation(extent={{100,-10},{120,10}}))); - Buildings.Controls.OBC.CDL.Continuous.PIDWithReset limPI( + Buildings.Controls.OBC.CDL.Reals.PIDWithReset limPI( final reverseActing=reverseActing, final k=k, final Ti = Ti, @@ -114,41 +114,41 @@ block CoolingCoilValve "Cooling coil valve position control sequence" "Custom PI controller" annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Line higLim( + Buildings.Controls.OBC.CDL.Reals.Line higLim( final limitBelow=true, final limitAbove=true) "Defines lower limit of the cooling valve signal at low range SATs" annotation (Placement(transformation(extent={{80,-30},{100,-10}}))); protected - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCooValMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCooValMin( final k=uMin) "Minimal control loop signal limit when supply air temperature is at a defined high limit" annotation (Placement(transformation(extent={{0,-100},{20,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCooValMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant yCooValMax( final k=uMax) "Minimal control loop signal limit when supply air temperature is at a defined low limit" annotation (Placement(transformation(extent={{40,-100},{60,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis TOutThr( + Buildings.Controls.OBC.CDL.Reals.Hysteresis TOutThr( final uLow = TOutCooCut - TOutDelta, final uHigh = TOutCooCut) "Determines whether the outdoor air temperature is below a treashold" annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Hysteresis uFanFeeThr( + Buildings.Controls.OBC.CDL.Reals.Hysteresis uFanFeeThr( final uLow=FanFeeCut - FanFeeDelta, final uHigh= FanFeeCut) "Checks if the fan status is above a threshold" annotation (Placement(transformation(extent={{-110,-70},{-90,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMin( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMin( final k=TSupHigLim) "Low range supply air temperature low limit" annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TSupMax( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupMax( final k=TSupHighLim) "Low range supply air temperature high limit" annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); @@ -157,7 +157,7 @@ protected "Outputs controller enable signal" annotation (Placement(transformation(extent={{-70,-70},{-50,-50}}))); - Buildings.Controls.OBC.CDL.Continuous.Min min + Buildings.Controls.OBC.CDL.Reals.Min min "Switches the signal between controller and low range limiter signals" annotation (Placement(transformation(extent={{80,20},{100,40}}))); @@ -168,7 +168,7 @@ protected Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Multiply pro + Buildings.Controls.OBC.CDL.Reals.Multiply pro annotation (Placement(transformation(extent={{40,74},{60,94}}))); equation diff --git a/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo b/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo index 3495d3736e9..d97aca5c276 100644 --- a/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo +++ b/Buildings/Utilities/Plotters/Examples/BaseClasses/Validation/CoolingCoilValve.mo @@ -62,17 +62,17 @@ model CoolingCoilValve annotation (Placement(transformation(extent={{140,-42},{160,-22}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTOutAboveCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTOutAboveCutoff( final k=TOutCooCut + 5) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{-120,40},{-100,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSup( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSup( final k=TSup) "Supply air temperature" annotation (Placement(transformation(extent={{-160,80},{-140,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSupSet( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSupSet( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); @@ -82,23 +82,23 @@ model CoolingCoilValve "Supply fan status" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uFanFee( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uFanFee( final k=fanFee) "Supply fan feedback" annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); // Tests disable if it is warm outside - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTOutBelowCutoff( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTOutBelowCutoff( final k=TOutCooCut - 5) "Outdoor air temperature is above the cutoff" annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSup1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSup1( final k=TSup) "Supply air temperature" annotation (Placement(transformation(extent={{-160,-38},{-140,-18}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSupSet1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSupSet1( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{-160,-80},{-140,-60}}))); @@ -108,18 +108,18 @@ model CoolingCoilValve "Supply fan status" annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uFanFee1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uFanFee1( final k=fanFee) "Supply fan feedback" annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); // Tests controler normal operation when supply air temperature is above limiter values - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTOutAboveCutoff2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTOutAboveCutoff2( final k=TOutCooCut + 5) "Outdoor air temperature is above the cutoff" annotation (Placement(transformation(extent={{60,40},{80,60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSupSet2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSupSet2( final k=TSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{20,40},{40,60}}))); @@ -129,25 +129,25 @@ model CoolingCoilValve "Supply fan status" annotation (Placement(transformation(extent={{100,10},{120,30}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uFanFee2( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uFanFee2( final k=fanFee) "Supply fan feedback" annotation (Placement(transformation(extent={{100,40},{120,60}}))); // Tests controler operation when supply air temperature is within limiter values - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup2( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup2( final duration=1800, final height=4, final offset=TSupSet - 2, final startTime=0) "\"Supply air temperature\"" annotation (Placement(transformation(extent={{20,80},{40,100}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTOutAboveCutoff1( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTOutAboveCutoff1( final k=TOutCooCut + 5) "Outdoor air temperature is below the cutoff" annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uTSupSet3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uTSupSet3( final k=LowTSupSet) "Supply air temperature setpoint" annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); @@ -157,7 +157,7 @@ model CoolingCoilValve "Supply fan status" annotation (Placement(transformation(extent={{100,-110},{120,-90}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uTSup3( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uTSup3( final duration=1800, final startTime=0, final height=TSetMaxLowLim - TSetMinLowLim, @@ -165,7 +165,7 @@ model CoolingCoilValve "Supply air temperature source" annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uFanFee3( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant uFanFee3( final k=fanFee) "Supply fan feedback" annotation (Placement(transformation(extent={{100,-80},{120,-60}}))); diff --git a/Buildings/Utilities/Plotters/Examples/ControlsVerification_CoolingCoilValve.mo b/Buildings/Utilities/Plotters/Examples/ControlsVerification_CoolingCoilValve.mo index 032c5141ac6..0024c11668c 100644 --- a/Buildings/Utilities/Plotters/Examples/ControlsVerification_CoolingCoilValve.mo +++ b/Buildings/Utilities/Plotters/Examples/ControlsVerification_CoolingCoilValve.mo @@ -90,15 +90,15 @@ model ControlsVerification_CoolingCoilValve "Cooling valve position control sequence" annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(t=0.5) + Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.5) "Converter to boolean" annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter percConv(k=0.01) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter percConv(k=0.01) "Converter from percentage" annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter percConv1(k=0.01) + Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter percConv1(k=0.01) "Converter from percentage" annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); diff --git a/Buildings/Utilities/Plotters/Examples/SingleZoneVAVSupply_u.mo b/Buildings/Utilities/Plotters/Examples/SingleZoneVAVSupply_u.mo index d18c688bd0c..faac5764003 100644 --- a/Buildings/Utilities/Plotters/Examples/SingleZoneVAVSupply_u.mo +++ b/Buildings/Utilities/Plotters/Examples/SingleZoneVAVSupply_u.mo @@ -6,7 +6,7 @@ model SingleZoneVAVSupply_u inner Configuration plotConfiguration(samplePeriod=1) "Plot configuration" annotation (Placement(transformation(extent={{100,60},{120,80}}))); - Buildings.Controls.OBC.CDL.Continuous.Subtract heaCooConSig + Buildings.Controls.OBC.CDL.Reals.Subtract heaCooConSig "Add control signal for heating (with negative sign) and cooling" annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); Buildings.Utilities.Plotters.Scatter scaTem( @@ -44,22 +44,22 @@ the cooling loop signal (from 0 to +1).") "Block that computes the setpoints for temperature and fan speed" annotation (Placement(transformation(extent={{0,-20},{20,0}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TZon( + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon( k = 273.15 + 28) "Zone air temperature" annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TOut(k=273.15 + 22) + Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOut(k=273.15 + 22) "Outdoor temperature" annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uHea( + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea( duration=900, height=-1, offset=1) "Heating control signal" annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); - Buildings.Controls.OBC.CDL.Continuous.Sources.Ramp uCoo(duration=900, + Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo(duration=900, startTime=2700) "Cooling control signal" annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); @@ -67,11 +67,11 @@ the cooling loop signal (from 0 to +1).") Controls.OBC.CDL.Integers.Sources.Constant opeMod(final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "AHU operation mode is occupied" annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonCooSet(final k= + Controls.OBC.CDL.Reals.Sources.Constant TZonCooSet(final k= 273.15 + 24) "Zone cooling set point" annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); - Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaSet(final k= + Controls.OBC.CDL.Reals.Sources.Constant TZonHeaSet(final k= 273.15 + 20) "Zone heating set point" annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); diff --git a/Buildings/package.mo b/Buildings/package.mo index 9f17e1f3958..637d017aa8f 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -308,7 +308,7 @@ to existing libraries: issue 3042. -Buildings.Controls.OBC.CDL.Continuous.Ramp +Buildings.Controls.OBC.CDL.Reals.Ramp Added new CDL blocks as suggested by ASHRAE 231p committee.
            This is for @@ -489,7 +489,7 @@ have been improved in a Buildings.Controls.OBC.CDL -Buildings.Controls.OBC.CDL.Continuous.Switch +Buildings.Controls.OBC.CDL.Reals.Switch Added smoothOrder(0, ...) as this is required for some solvers that assume otherwise the output of the block to be differentiable. @@ -845,19 +845,28 @@ have been improved in a Buildings.Controls.OBC.CDL -Buildings.Controls.OBC.CDL.Continuous.Acos
            - Buildings.Controls.OBC.CDL.Continuous.Asin
            - Buildings.Controls.OBC.CDL.Continuous.Atan
            - Buildings.Controls.OBC.CDL.Continuous.Atan2 +Buildings.Controls.OBC.CDL.Continuous
            + + Renamed package Continuous to Reals + due to changes in ASHRAE Standard 231P.
            + This is for + #3483.
            + This change is supported in the conversion script. + + + Buildings.Controls.OBC.CDL.Reals.Acos
            + Buildings.Controls.OBC.CDL.Reals.Asin
            + Buildings.Controls.OBC.CDL.Reals.Atan
            + Buildings.Controls.OBC.CDL.Reals.Atan2 Added unit rad to the output.
            This is for #3277.
            -Buildings.Controls.OBC.CDL.Continuous.Cos
            - Buildings.Controls.OBC.CDL.Continuous.Sin
            - Buildings.Controls.OBC.CDL.Continuous.Tan +Buildings.Controls.OBC.CDL.Reals.Cos
            + Buildings.Controls.OBC.CDL.Reals.Sin
            + Buildings.Controls.OBC.CDL.Reals.Tan Added unit rad to the input.
            This is for @@ -1101,7 +1110,7 @@ that can lead to wrong simulation results): Buildings.Controls.OBC.CDL - Buildings.Controls.OBC.CDL.Continuous.Sources.CalendarTime + Buildings.Controls.OBC.CDL.Reals.Sources.CalendarTime Refactored implementation to avoid wrong day number due to rounding errors that caused simultaneous events to not be triggered at the same time.
            @@ -12642,4 +12651,4 @@ requirements definition or providing feedback regarding the model applicability to solve specific problems.

            ")); -end Buildings; +end Buildings; \ No newline at end of file From bdb2512b4f4f4b31c0884c72bbfee4fedf7d16fd Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Wed, 30 Aug 2023 08:48:51 -0700 Subject: [PATCH 8/9] Issue3209 spawn binaries v0.4.3 (#3487) * Updated binary version * Integrated commit e91e28d66955efc71285cc294e2589cd1505f70c from #3466 --- .../libModelicaBuildingsEnergyPlus_9_6_0.so | 2 +- .../ModelicaBuildingsEnergyPlus_9_6_0.dll | 2 +- .../pyfmi/runSpawnFromOtherDirectory.py | 2 +- .../C-Sources/BuildingInstantiate.c | 13 ++++----- .../ThermalZones/EnergyPlus_9_6_0/install.py | 18 ++++++------ .../ThermalZones/EnergyPlus_9_6_0/Building.mo | 4 +-- .../EnergyPlus_9_6_0/UsersGuide.mo | 28 +++++++++---------- 7 files changed, 33 insertions(+), 36 deletions(-) diff --git a/Buildings/Resources/Library/linux64/libModelicaBuildingsEnergyPlus_9_6_0.so b/Buildings/Resources/Library/linux64/libModelicaBuildingsEnergyPlus_9_6_0.so index 2233ca30355..81d40b36519 100644 --- a/Buildings/Resources/Library/linux64/libModelicaBuildingsEnergyPlus_9_6_0.so +++ b/Buildings/Resources/Library/linux64/libModelicaBuildingsEnergyPlus_9_6_0.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46aee6b4e492b401567ba0c367b978d88f939cd6a2c8f85617f58a31017d03c0 +oid sha256:8669d4ff3d691dac49b82aed48f7b0a19541feacef2d4c329ffacd51d05cdea1 size 81616 diff --git a/Buildings/Resources/Library/win64/ModelicaBuildingsEnergyPlus_9_6_0.dll b/Buildings/Resources/Library/win64/ModelicaBuildingsEnergyPlus_9_6_0.dll index 94be6eabc1d..d7da8d81814 100644 --- a/Buildings/Resources/Library/win64/ModelicaBuildingsEnergyPlus_9_6_0.dll +++ b/Buildings/Resources/Library/win64/ModelicaBuildingsEnergyPlus_9_6_0.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d73b192db05ae7495ef5b35026c1e32b2d3629ee444854f9e87d10d46a870f13 +oid sha256:011fc668cf502073270a58f3ca899e4660ee334d7bb3287fa6bb62097cabd6eb size 148480 diff --git a/Buildings/Resources/Scripts/travis/pyfmi/runSpawnFromOtherDirectory.py b/Buildings/Resources/Scripts/travis/pyfmi/runSpawnFromOtherDirectory.py index f2ff314b20e..deec7e9d7fc 100755 --- a/Buildings/Resources/Scripts/travis/pyfmi/runSpawnFromOtherDirectory.py +++ b/Buildings/Resources/Scripts/travis/pyfmi/runSpawnFromOtherDirectory.py @@ -79,7 +79,7 @@ def print_output(typ, stream): def run_test(pathVariable): # List of files to be moved fileMoves = [ - {"src": os.path.abspath(os.path.join("Buildings", "Resources", "bin", "spawn-0.3.0-0fa49be497", "linux64")), + {"src": os.path.abspath(os.path.join("Buildings", "Resources", "bin", "spawn-0.4.3-7048a72798", "linux64")), "des": "my-bin"}, {"src": os.path.abspath(os.path.join("Buildings", "Resources", "weatherdata")), "des": "some_weather_directory_that_the_fmu_does_not_know_about"}, diff --git a/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/C-Sources/BuildingInstantiate.c b/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/C-Sources/BuildingInstantiate.c index 274f94f03b4..27cf24816be 100644 --- a/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/C-Sources/BuildingInstantiate.c +++ b/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/C-Sources/BuildingInstantiate.c @@ -529,7 +529,6 @@ void generateFMU(FMUBuilding* bui, const char* spawnFullPath, const char* modeli /* Generate the FMU */ char* optionFlags; char* outputFlag; - char* createFlag; char* fulCmd; int retVal; size_t len; @@ -545,12 +544,11 @@ void generateFMU(FMUBuilding* bui, const char* spawnFullPath, const char* modeli SpawnFormatError("Requested to use json file '%s' which does not exist.", modelicaBuildingsJsonFile); } - optionFlags = " --no-compress "; /* Flag for command */ - outputFlag = " --output-path "; /* Flag for command */ - createFlag = " --create "; /* Flag for command */ + optionFlags = " energyplus create-fmu "; /* Flag for command */ + outputFlag = " --output-path "; /* Flag for command */ len = strlen("\"") + strlen(spawnFullPath) + strlen("\"") + strlen(optionFlags) - + strlen(outputFlag) + strlen("\"") + strlen(bui->fmuAbsPat) + strlen("\"") - + strlen(createFlag) + strlen("\"") + strlen(modelicaBuildingsJsonFile) + strlen("\"") + + strlen(outputFlag) + strlen("\"") + strlen(bui->fmuAbsPat) + strlen("\" ") + + strlen("\"") + strlen(modelicaBuildingsJsonFile) + strlen("\"") + 1; #ifdef _WIN32 /* Win32 or Win64 */ /* Windows needs double quotes in the system call, see https://stackoverflow.com/questions/2642551/windows-c-system-call-with-spaces-in-command */ @@ -572,8 +570,7 @@ void generateFMU(FMUBuilding* bui, const char* spawnFullPath, const char* modeli strcat(fulCmd, outputFlag); strcat(fulCmd, "\""); strcat(fulCmd, bui->fmuAbsPat); - strcat(fulCmd, "\""); - strcat(fulCmd, createFlag); + strcat(fulCmd, "\" "); strcat(fulCmd, "\""); strcat(fulCmd, modelicaBuildingsJsonFile); strcat(fulCmd, "\""); diff --git a/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/install.py b/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/install.py index 03bbc316544..2799597e00d 100755 --- a/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/install.py +++ b/Buildings/Resources/src/ThermalZones/EnergyPlus_9_6_0/install.py @@ -21,8 +21,8 @@ # List of all spawn versions and commits that are supported # by the Buildings library spawn_dists = [ - {"version": "0.3.0", - "commit": "0fa49be49715a5acc87f078ba583e369d435cdf9"} + {"version": "0.4.3", + "commit": "7048a72798"} ] ########################################################################### @@ -95,7 +95,7 @@ def delete_installers(dis): tar_fil = os.path.basename(dis["src"]) os.remove(tar_fil) -def get_vars_as_json(spawnFlag, spawn_dir, spawn_exe): +def get_vars_as_json(spawnFlags, spawn_dir, spawn_exe): """Return a json structure that contains the output variables supported by spawn""" import os import subprocess @@ -104,9 +104,9 @@ def get_vars_as_json(spawnFlag, spawn_dir, spawn_exe): bin_dir = get_bin_directory() spawn = os.path.join(bin_dir, spawn_dir, "linux64", "bin", spawn_exe) - ret = subprocess.run([spawn, spawnFlag], stdout=subprocess.PIPE, check=True) + ret = subprocess.run([spawn] + spawnFlags.split(' '), stdout=subprocess.PIPE, check=True) vars = json.loads(ret.stdout) - if spawnFlag == "--output-vars": + if spawnFlags == "energyplus list-output-variables": vars = sorted(vars, key = lambda i: i['name']) else: vars = sorted(vars, key = lambda i: (i['componentType'], i['controlType'])) @@ -220,20 +220,20 @@ def update_version_in_modelica_files(spawn_dir, spawn_exe): def update_actuator_output_tables(spawn_dir, spawn_exe): vars = [ { - "spawnFlag": "--output-vars", + "spawnFlags": "energyplus list-output-variables", "htmlTemplate": "output_vars_template.html", "varType": "output variables", "moFile": "OutputVariable.mo" }, { - "spawnFlag": "--actuators", + "spawnFlags": "energyplus list-actuators", "htmlTemplate": "actuators_template.html", "varType": "actuators", "moFile": "Actuator.mo" }, ] for v in vars: - js = get_vars_as_json(v["spawnFlag"], spawn_dir, spawn_exe) + js = get_vars_as_json(v["spawnFlags"], spawn_dir, spawn_exe) html = get_html_table(js, v["htmlTemplate"]) replace_table_in_mo(html, v["varType"], v["moFile"], spawn_dir) @@ -313,7 +313,7 @@ def update_actuator_output_tables(spawn_dir, spawn_exe): } ) - p = Pool(2) + p = Pool(len(dists)) p.map(download_distribution, dists) for dist in dists: install_distribution_inside_buildings_library(dist) diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Building.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Building.mo index a3026da5333..52dd9d287d3 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Building.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Building.mo @@ -3,8 +3,8 @@ model Building "Model that declares a building to which EnergyPlus objects belong to" extends Modelica.Blocks.Icons.Block; - constant String spawnExe="spawn-0.3.0-0fa49be497" - "Name of the spawn executable, without extension, such as spawn-0.3.0-0fa49be497aaa" + constant String spawnExe="spawn-0.4.3-7048a72798" + "Name of the spawn executable, without extension, such as spawn-0.4.3-7048a72798aaa" annotation (HideResult=true); constant String idfVersion = "9_6_0" diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/UsersGuide.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/UsersGuide.mo index b6c066a11d1..2cb8282afa9 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/UsersGuide.mo +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/UsersGuide.mo @@ -27,14 +27,14 @@ the binaries can be downloaded from the following links: Linux - -https://spawn.s3.amazonaws.com/builds/Spawn-light-0.3.0-0fa49be497-Linux.tar.gz + +https://spawn.s3.amazonaws.com/builds/Spawn-light-0.4.3-7048a72798-Linux.tar.gz Windows - -https://spawn.s3.amazonaws.com/builds/Spawn-light-0.3.0-0fa49be497-win64.zip + +https://spawn.s3.amazonaws.com/builds/Spawn-light-0.4.3-7048a72798-win64.zip @@ -51,9 +51,9 @@ To install, proceed as follows: Run from a terminal

            -wget https://spawn.s3.amazonaws.com/builds/Spawn-light-0.3.0-0fa49be497-Linux.tar.gz;
            -tar xzf Spawn-light-0.3.0-0fa49be497-Linux.tar.gz;
            -export PATH=${PATH}:`pwd`/Spawn-light-0.3.0-0fa49be497-Linux/bin
            +wget https://spawn.s3.amazonaws.com/builds/Spawn-light-0.4.3-7048a72798-Linux.tar.gz;
            +tar xzf Spawn-light-0.4.3-7048a72798-Linux.tar.gz;
            +export PATH=${PATH}:`pwd`/Spawn-light-0.4.3-7048a72798-Linux/bin
             

            and restart your Modelica environment. You may put the last line in your ${HOME}/.bashrc file @@ -69,10 +69,10 @@ to make the setting persistent when you log in the next time. Download the binary from the link above.

          • -Unzip Spawn-light-0.3.0-0fa49be497-win64.zip at your desired location. +Unzip Spawn-light-0.4.3-7048a72798-win64.zip at your desired location.
          • -Add the directory xyz/Spawn-light-0.3.0-0fa49be497-win64/bin +Add the directory xyz/Spawn-light-0.4.3-7048a72798-win64/bin to your PATH environment variable.
          • @@ -85,17 +85,17 @@ Restart your Modelica environment.

            How is spawn invoked?

            -Modelica tries to invoke spawn-0.3.0-0fa49be497[.exe] in this order: +Modelica tries to invoke spawn-0.4.3-7048a72798[.exe] in this order:

            1. On Linux, it searches for
              -Buildings[ x.y.z]/Resources/bin/spawn-0.3.0-0fa49be497/linux64/bin/spawn-0.3.0-0fa49be497
              +Buildings[ x.y.z]/Resources/bin/spawn-0.4.3-7048a72798/linux64/bin/spawn-0.4.3-7048a72798
               
              and on Windows, it searches for
              -Buildings[ x.y.z]/Resources/bin/spawn-0.3.0-0fa49be497/win64/bin/spawn-0.3.0-0fa49be497.exe
              +Buildings[ x.y.z]/Resources/bin/spawn-0.4.3-7048a72798/win64/bin/spawn-0.4.3-7048a72798.exe
               
              where Buildings[ x.y.z] is the installation folder of the Modelica Buildings Library. This file is distributed with the Modelica Buildings Library installation, @@ -103,11 +103,11 @@ together with all files needed to translate and simulate a model in a Modelica e
            2. If not found, it searches on the environment variable SPAWNPATH for -spawn-0.3.0-0fa49be497[.exe]. +spawn-0.4.3-7048a72798[.exe].
            3. If not found, it searches on the environment variable PATH for -spawn-0.3.0-0fa49be497[.exe]. +spawn-0.4.3-7048a72798[.exe].

            From c34386a4b8419a1c86c093e3918e793e4ca66ed2 Mon Sep 17 00:00:00 2001 From: Casper Fu <91219266+hcasperfu@users.noreply.github.com> Date: Wed, 30 Aug 2023 08:49:26 -0700 Subject: [PATCH 9/9] Issue3481 spawn zone capacitance multiplier (#3482) * created comparison validation model w modified idf --- ...neAirBalance_zoneCapacitanceMultiplier.idf | 1986 +++++++++++++++++ ..._ThermalZone_ZoneCapacitanceMultiplier.txt | 11 + .../ThermalZone/ZoneCapacitanceMultiplier.mos | 10 + ....ThermalZone.ZoneCapacitanceMultiplier.mos | 5 + .../ThermalZone/ZoneCapacitanceMultiplier.mo | 52 + .../Validation/ThermalZone/package.order | 1 + 6 files changed, 2065 insertions(+) create mode 100644 Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse_TwoSpeed_ZoneAirBalance/SingleFamilyHouse_TwoSpeed_ZoneAirBalance_zoneCapacitanceMultiplier.idf create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_EnergyPlus_9_6_0_Validation_ThermalZone_ZoneCapacitanceMultiplier.txt create mode 100644 Buildings/Resources/Scripts/Dymola/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone.ZoneCapacitanceMultiplier.mos create mode 100644 Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mo diff --git a/Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse_TwoSpeed_ZoneAirBalance/SingleFamilyHouse_TwoSpeed_ZoneAirBalance_zoneCapacitanceMultiplier.idf b/Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse_TwoSpeed_ZoneAirBalance/SingleFamilyHouse_TwoSpeed_ZoneAirBalance_zoneCapacitanceMultiplier.idf new file mode 100644 index 00000000000..0728c722cdb --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse_TwoSpeed_ZoneAirBalance/SingleFamilyHouse_TwoSpeed_ZoneAirBalance_zoneCapacitanceMultiplier.idf @@ -0,0 +1,1986 @@ +!-Generator IDFEditor 1.34 +!-Option OriginalOrderTop UseSpecialFormat +!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically. +!- Use '!' comments if they need to be retained when using the IDFEditor. +! SingleFamilyHouse_TwoSpeed_ZoneAirBalance.idf +! Basic file description: A 186 m^2 (2000 ft^2) residential house with slab-on-grade (no ground contact). +! +! Highlights: This file does the basic test of an air distribution system in a residential home. +! A two speed heat pump with a supplmental gas heater provides space heating and cooling. +! It provides ventilation through the ZoneAirBalance:OutdoorAir model. +! +! +! Simulation Location/Run: CHICAGO_IL_USA TMY2-94846, 2 design days, 2 run periods, +! Run Control executes the design days only. +! +! Location: Chicago, IL +! +! Design Days: CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C +! +! Run Period (Weather File): Winter 1/14, Summer 7/7, CHICAGO_IL_USA TMY2-94846 +! +! Run Control: No zone or system sizing, design day simulation. +! +! Building: There are 3 zones (living space, garage and attic). The living zone is conditioned. +! The other two zones are unconditioned. +! Supply ducts are located in the attic zone and return ducts are located in the garage zone. +! Supply leaks are terminated in the attic zone, while return leaks originate in the garage. +! Building aspect ratio: 1:1.6 +! +! Floor Area: 186 m^2 (2000 ft^2) +! Number of Stories: 1 +! +! Zone Description Details (No attic zone): +! +! (10.323,16.876,0) (17.242,16.876,0) +! _________________ +! | | +! | | +! | | +! | Garage | +! | | +! | | +! (0,10.788,0) | | +! ___ __________|_________________| (17.242,10.778,0) +! | ************** | +! * * +! * * +! * * +! * Living * window = * +! * * +! * * +! | | +! |___**************____________________________| +! +! (0,0,0) (17.242,0,0) +! Internal gains description: ZONE Living - lighting is 1000.0 watts, equip is 500.0 watts, 3 occupants +! +! Interzone Surfaces: Interzone surfaces among living, garage, and attic (see diagram) +! Internal Mass: None +! People: 3 +! Lights: 1000 W +! Equipment: 500 W +! Windows: 4 in the living zone +! Detached Shading: None +! Daylight: None +! Natural Ventilation: ZoneAirBalance:OutdoorAir, a combined zone outdoor airflow by including interactions between +! mechanical ventilation, infiltration, and duct leakage. +! Compact Schedules: Yes +! Solair Distribution: None +! +! HVAC: A unitary system of UNITARYSYSTEM:MULTISPEEDHEATPUMP:AIRTOAIR provides space cooling and +! heating. The system has a supplemental heating coil as Coil:Heating:Fuel. +! Thermostat setting at 22C for space heating and 26.6C for space cooling. +! Heating and cooling performance curves are based on performance data of Carrier 25HNA948A30 +! outdoor section with FE5ANB006 Indoor section (low and high speeds). +! +! Zonal Equipment: Living Zone - Direct Air +! Central Air Handling Equipment: Yes +! System Equipment Autosize: No +! Purchased Cooling: No +! Purchased Heating: No +! Purchased Chilled Water: No +! Purchased Hot Water: No +! Coils: Coil:Heating:DX:MultiSpeed +! Coil:Cooling:DX:MultiSpeed +! Coil:Heating:Fuel +! Pumps: None +! Boilers: None +! Chillers: None +! Towers: None +! +! Results: +! Standard Reports: None +! Timestep or Hourly Variables: Timestep +! Time bins Report: None +! HTML Report: None +! Environmental Emissions: None +! Utility Tariffs: None +! + + Version,9.6; + + Building, + Single family House, !- Name + 0, !- North Axis {deg} + Suburbs, !- Terrain + 0.001, !- Loads Convergence Tolerance Value {W} + 0.0050000, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Timestep,6; + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + HeatBalanceAlgorithm,ConductionTransferFunction; + + Output:DebuggingData, + No, !- Report Debugging Data + No; !- Report During Warmup + + SimulationControl, + No, !- Do Zone Sizing Calculation + No, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + Yes, !- Run Simulation for Sizing Periods + No, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + + RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 14, !- Begin Day of Month + , !- Begin Year + 1, !- End Month + 14, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + RunPeriod, + Run Period 2, !- Name + 7, !- Begin Month + 7, !- Begin Day of Month + , !- Begin Year + 7, !- End Month + 7, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + No; !- Use Weather File Snow Indicators + + Site:Location, + CHICAGO_IL_USA TMY2-94846, !- Name + 41.78, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190.00; !- Elevation {m} + +! CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -17.3, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.0; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.5, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.0; !- Sky Clearness + + Site:GroundTemperature:BuildingSurface,20.03,20.03,20.13,20.30,20.43,20.52,20.62,20.77,20.78,20.55,20.44,20.20; + + Material, + A1 - 1 IN STUCCO, !- Name + Smooth, !- Roughness + 2.5389841E-02, !- Thickness {m} + 0.6918309, !- Conductivity {W/m-K} + 1858.142, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.9200000, !- Solar Absorptance + 0.9200000; !- Visible Absorptance + +! CC Blk 8 in HW Hol. + + Material, + CB11, !- Name + MediumRough, !- Roughness + 0.2032000, !- Thickness {m} + 1.048000, !- Conductivity {W/m-K} + 1105.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.2000000, !- Solar Absorptance + 0.2000000; !- Visible Absorptance + +! Gyps or Plast Brd 1/2 in + + Material, + GP01, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + +! Min.Wool/Fib Batt R-11 + + Material, + IN02, !- Name + Rough, !- Roughness + 9.0099998E-02, !- Thickness {m} + 4.3000001E-02, !- Conductivity {W/m-K} + 10.00000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + +! Min.Wool/Fib Batt R-30 + + Material, + IN05, !- Name + Rough, !- Roughness + 0.2458000, !- Thickness {m} + 4.3000001E-02, !- Conductivity {W/m-K} + 10.00000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + +! Plywood1/2 in + + Material, + PW03, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 545.0000, !- Density {kg/m3} + 1213.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + +! CC HW Dr. 140 lbs 4 in + + Material, + CC03, !- Name + MediumRough, !- Roughness + 0.1016000, !- Thickness {m} + 1.310000, !- Conductivity {W/m-K} + 2243.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + +! STEEL SIDING LW + + Material, + HF-A3, !- Name + Smooth, !- Roughness + 1.5000000E-03, !- Thickness {m} + 44.96960, !- Conductivity {W/m-K} + 7689.000, !- Density {kg/m3} + 418.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.2000000, !- Solar Absorptance + 0.2000000; !- Visible Absorptance + +! Asphalt Shingle and Siding + + Material:NoMass, + AR02, !- Name + VeryRough, !- Roughness + 7.8000002E-02, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + +! Carpet With Rubber Pad + + Material:NoMass, + CP02, !- Name + Rough, !- Roughness + 0.2170000, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + +! ID 2 + + WindowMaterial:Glazing, + CLEAR 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.837, !- Solar Transmittance at Normal Incidence + 0.075, !- Front Side Solar Reflectance at Normal Incidence + 0.075, !- Back Side Solar Reflectance at Normal Incidence + 0.898, !- Visible Transmittance at Normal Incidence + 0.081, !- Front Side Visible Reflectance at Normal Incidence + 0.081, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Gas, + AIR 6MM, !- Name + AIR, !- Gas Type + 0.006; !- Thickness {m} + + Construction, + EXTWALL:LIVING, !- Name + A1 - 1 IN STUCCO, !- Outside Layer + CB11, !- Layer 2 + GP01; !- Layer 3 + + Construction, + INTERIORWall, !- Name + GP01, !- Outside Layer + IN02, !- Layer 2 + GP01; !- Layer 3 + + Construction, + FLOOR:GARAGE, !- Name + CC03; !- Outside Layer + + Construction, + FLOOR:LIVING, !- Name + CC03, !- Outside Layer + CP02; !- Layer 2 + + Construction, + ROOF, !- Name + AR02, !- Outside Layer + PW03; !- Layer 2 + + Construction, + EXTWALL:GARAGE, !- Name + A1 - 1 IN STUCCO, !- Outside Layer + CB11; !- Layer 2 + + Construction, + CEILING:LIVING, !- Name + IN05, !- Outside Layer + GP01; !- Layer 2 + + Construction, + reverseCEILING:LIVING, !- Name + GP01, !- Outside Layer + IN05; !- Layer 2 + + Construction, + GABLE, !- Name + PW03; !- Outside Layer + +! 2000 U=3.23 SC= .88 SHGC=.76 TSOL=.70 TVIS=.81 + + Construction, + Dbl Clr 3mm/6mm Air, !- Name + CLEAR 3MM, !- Outside Layer + AIR 6MM, !- Layer 2 + CLEAR 3MM; !- Layer 3 + + Construction, + Garage:SteelDoor, !- Name + HF-A3; !- Outside Layer + + Construction, + CEILING:Garage, !- Name + GP01; !- Outside Layer + + Zone, + LIVING ZONE, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + autocalculate, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + GARAGE ZONE, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + autocalculate, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + ATTIC ZONE, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + autocalculate, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + World; !- Coordinate System + + BuildingSurface:Detailed, + Living:North, !- Name + Wall, !- Surface Type + EXTWALL:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,10.778,0, !- X,Y,Z ==> Vertex 2 {m} + 0,10.778,0, !- X,Y,Z ==> Vertex 3 {m} + 0,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:East, !- Name + Wall, !- Surface Type + EXTWALL:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 17.242,0,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 17.242,0,0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:South, !- Name + Wall, !- Surface Type + EXTWALL:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,2.4383, !- X,Y,Z ==> Vertex 1 {m} + 0,0,0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,0,0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,0,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:West, !- Name + Wall, !- Surface Type + EXTWALL:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 0,10.778,0, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,0,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Garage:Interior, !- Name + WALL, !- Surface Type + INTERIORWall, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Living:Interior, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,10.778,0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:Interior, !- Name + WALL, !- Surface Type + INTERIORWall, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Garage:Interior, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 17.242,10.778,0, !- X,Y,Z ==> Vertex 2 {m} + 10.323,10.778,0, !- X,Y,Z ==> Vertex 3 {m} + 10.323,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:Floor, !- Name + FLOOR, !- Surface Type + FLOOR:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Living:Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,0, !- X,Y,Z ==> Vertex 1 {m} + 0,10.778,0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,0,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Living:Ceiling, !- Name + CEILING, !- Surface Type + CEILING:LIVING, !- Construction Name + LIVING ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Attic:LivingFloor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0, !- View Factor to Ground + 4, !- Number of Vertices + 0,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 0,0,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 17.242,0,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 17.242,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Attic:LivingFloor, !- Name + FLOOR, !- Surface Type + reverseCEILING:LIVING, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Living:Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 0,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 17.242,0,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + NorthRoof1, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 4, !- Number of Vertices + 13.782,5.389,4.6838, !- X,Y,Z ==> Vertex 1 {m} + 13.782,7.3172,3.8804, !- X,Y,Z ==> Vertex 2 {m} + 0,7.3172,3.8804, !- X,Y,Z ==> Vertex 3 {m} + 0,5.389,4.6838; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SouthRoof, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0.000000,5.389000,4.683800, !- X,Y,Z ==> Vertex 1 {m} + 0.000000,0.000000,2.438400, !- X,Y,Z ==> Vertex 2 {m} + 17.24200,0.000000,2.438400, !- X,Y,Z ==> Vertex 3 {m} + 17.24200,5.389000,4.683800; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + NorthRoof2, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 4, !- Number of Vertices + 13.782,7.3172,3.8804, !- X,Y,Z ==> Vertex 1 {m} + 10.332,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 0,10.778,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 0,7.3172,3.8804; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + NorthRoof3, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 4, !- Number of Vertices + 17.242,5.389,4.6838, !- X,Y,Z ==> Vertex 1 {m} + 17.242,7.3172,3.8804, !- X,Y,Z ==> Vertex 2 {m} + 13.782,7.3172,3.8804, !- X,Y,Z ==> Vertex 3 {m} + 13.782,5.389,4.6838; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + NorthRoof4, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 3, !- Number of Vertices + 17.242,7.3172,3.8804, !- X,Y,Z ==> Vertex 1 {m} + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 13.782,7.3172,3.8804; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + EastGable, !- Name + WALL, !- Surface Type + GABLE, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 3, !- Number of Vertices + 17.242,5.389,4.6838, !- X,Y,Z ==> Vertex 1 {m} + 17.242,0.0,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,2.4384; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + WestGable, !- Name + WALL, !- Surface Type + GABLE, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 3, !- Number of Vertices + 0.0,5.389,4.6838, !- X,Y,Z ==> Vertex 1 {m} + 0.0,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4384; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + EastRoof, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 4, !- Number of Vertices + 13.782,16.876,3.8804, !- X,Y,Z ==> Vertex 1 {m} + 13.782,7.3172,3.8804, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 17.242,16.876,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WestRoof, !- Name + ROOF, !- Surface Type + ROOF, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.9, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,16.876,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 13.782,7.3172,3.8804, !- X,Y,Z ==> Vertex 3 {m} + 13.782,16.876,3.8804; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Attic:NorthGable, !- Name + WALL, !- Surface Type + GABLE, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 3, !- Number of Vertices + 13.782,16.876,3.8804, !- X,Y,Z ==> Vertex 1 {m} + 17.242,16.876,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 10.323,16.876,2.4384; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + Garage:EastWall, !- Name + WALL, !- Surface Type + EXTWALL:GARAGE, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 17.242,10.778,0.0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,16.876,0.0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,16.876,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Garage:WestWall, !- Name + WALL, !- Surface Type + EXTWALL:GARAGE, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,16.876,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,16.876,0.0, !- X,Y,Z ==> Vertex 2 {m} + 10.323,10.778,0.0, !- X,Y,Z ==> Vertex 3 {m} + 10.323,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Garage:FrontDoor, !- Name + WALL, !- Surface Type + Garage:SteelDoor, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 17.242,16.876,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 17.242,16.876,0.0, !- X,Y,Z ==> Vertex 2 {m} + 10.323,16.876,0.0, !- X,Y,Z ==> Vertex 3 {m} + 10.323,16.876,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Attic:GarageFloor, !- Name + FLOOR, !- Surface Type + CEILING:Garage, !- Construction Name + ATTIC ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Garage:Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,10.778,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,16.876,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 17.242,16.876,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 17.242,10.778,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Garage:Ceiling, !- Name + CEILING, !- Surface Type + CEILING:Garage, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Attic:GarageFloor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.5, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,16.876,2.4384, !- X,Y,Z ==> Vertex 1 {m} + 10.323,10.778,2.4384, !- X,Y,Z ==> Vertex 2 {m} + 17.242,10.778,2.4384, !- X,Y,Z ==> Vertex 3 {m} + 17.242,16.876,2.4384; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Garage:Floor, !- Name + FLOOR, !- Surface Type + FLOOR:GARAGE, !- Construction Name + GARAGE ZONE, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Garage:Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0, !- View Factor to Ground + 4, !- Number of Vertices + 10.323,10.778,0, !- X,Y,Z ==> Vertex 1 {m} + 10.323,16.876,0, !- X,Y,Z ==> Vertex 2 {m} + 17.242,16.876,0, !- X,Y,Z ==> Vertex 3 {m} + 17.242,10.778,0; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + NorthWindow, !- Name + Window, !- Surface Type + Dbl Clr 3mm/6mm Air, !- Construction Name + Living:North, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.5000000, !- View Factor to Ground + , !- Frame and Divider Name + 1.0, !- Multiplier + 4, !- Number of Vertices + 6.572,10.778,2.1336, !- X,Y,Z ==> Vertex 1 {m} + 6.572,10.778,0.6096, !- X,Y,Z ==> Vertex 2 {m} + 2,10.778,0.6096, !- X,Y,Z ==> Vertex 3 {m} + 2,10.778,2.1336; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + EastWindow, !- Name + Window, !- Surface Type + Dbl Clr 3mm/6mm Air, !- Construction Name + Living:East, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.5000000, !- View Factor to Ground + , !- Frame and Divider Name + 1.0, !- Multiplier + 4, !- Number of Vertices + 17.242,2,2.1336, !- X,Y,Z ==> Vertex 1 {m} + 17.242,2,0.6096, !- X,Y,Z ==> Vertex 2 {m} + 17.242,6.572,0.6096, !- X,Y,Z ==> Vertex 3 {m} + 17.242,6.572,2.1336; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + SouthWindow, !- Name + Window, !- Surface Type + Dbl Clr 3mm/6mm Air, !- Construction Name + Living:South, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.5000000, !- View Factor to Ground + , !- Frame and Divider Name + 1.0, !- Multiplier + 4, !- Number of Vertices + 2,0,2.1336, !- X,Y,Z ==> Vertex 1 {m} + 2,0,0.6096, !- X,Y,Z ==> Vertex 2 {m} + 6.572,0,0.6096, !- X,Y,Z ==> Vertex 3 {m} + 6.572,0,2.1336; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WestWindow, !- Name + Window, !- Surface Type + Dbl Clr 3mm/6mm Air, !- Construction Name + Living:West, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.5000000, !- View Factor to Ground + , !- Frame and Divider Name + 1.0, !- Multiplier + 4, !- Number of Vertices + 0,6.572,2.1336, !- X,Y,Z ==> Vertex 1 {m} + 0,6.572,0.6096, !- X,Y,Z ==> Vertex 2 {m} + 0,2,0.6096, !- X,Y,Z ==> Vertex 3 {m} + 0,2,2.1336; !- X,Y,Z ==> Vertex 4 {m} + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS, !- Numeric Type + Temperature; !- Unit Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + Schedule:Compact, + Activity Sch, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,131.8; !- Field 3 + + Schedule:Compact, + Work Eff Sch, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Schedule:Compact, + Clothing Sch, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0; !- Field 3 + + Schedule:Compact, + Air Velo Sch, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.137; !- Field 3 + + Schedule:Compact, + HOUSE OCCUPANCY, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays, !- Field 2 + Until: 6:00,1.0, !- Field 3 + Until: 7:00,0.10, !- Field 5 + Until: 8:00,0.50, !- Field 7 + Until: 12:00,1.00, !- Field 9 + Until: 13:00,0.50, !- Field 11 + Until: 16:00,1.00, !- Field 13 + Until: 17:00,0.50, !- Field 15 + Until: 18:00,0.10, !- Field 17 + Until: 24:00,1.0, !- Field 19 + For: AllOtherDays, !- Field 21 + Until: 24:00,0.0; !- Field 22 + + Schedule:Compact, + INTERMITTENT, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays, !- Field 2 + Until: 8:00,0.0, !- Field 3 + Until: 18:00,1.00, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: AllOtherDays, !- Field 9 + Until: 24:00,0.0; !- Field 10 + + Schedule:Compact, + HOUSE LIGHTING, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays, !- Field 2 + Until: 6:00,0.05, !- Field 3 + Until: 7:00,0.20, !- Field 5 + Until: 17:00,1.00, !- Field 7 + Until: 18:00,0.50, !- Field 9 + Until: 24:00,0.05, !- Field 11 + For: AllOtherDays, !- Field 13 + Until: 24:00,0.05; !- Field 14 + + Schedule:Compact, + ReportSch, !- Name + on/off, !- Schedule Type Limits Name + Through: 1/20, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0, !- Field 3 + Through: 1/21, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,1.0, !- Field 7 + Through: 7/20, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,0.0, !- Field 11 + Through: 7/21, !- Field 13 + For: AllDays, !- Field 14 + Until: 24:00,1.0, !- Field 15 + Through: 12/31, !- Field 17 + For: AllDays, !- Field 18 + Until: 24:00,0.0; !- Field 19 + + Schedule:Compact, + HVACAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0; !- Field 3 + + Schedule:Compact, + Dual Heating Setpoints, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,22.0; !- Field 3 + + Schedule:Compact, + Dual Cooling Setpoints, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,26.6; !- Field 3 + + Schedule:Compact, + Dual Zone Control Type Sched, !- Name + Control Type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + Schedule:Compact, + CyclingFanSchedule, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Schedule:Compact, + INF-SCHED, !- Name + ANY NUMBER, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Alldays, !- Field 2 + Until: 24:00,1.00; !- Field 3 + + People, + LIVING ZONE People, !- Name + LIVING ZONE, !- Zone or ZoneList or Space or SpaceList Name + HOUSE OCCUPANCY, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 3.000000, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3000000, !- Fraction Radiant + , !- Sensible Heat Fraction + Activity Sch, !- Activity Level Schedule Name + 3.82E-8, !- Carbon Dioxide Generation Rate {m3/s-W} + , !- Enable ASHRAE 55 Comfort Warnings + zoneaveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + Work Eff Sch, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + Clothing Sch, !- Clothing Insulation Schedule Name + Air Velo Sch, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + Lights, + LIVING ZONE Lights, !- Name + LIVING ZONE, !- Zone or ZoneList or Space or SpaceList Name + HOUSE LIGHTING, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1000, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Return Air Fraction + 0.2000000, !- Fraction Radiant + 0.2000000, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ZoneVentilation:DesignFlowRate, + LIVING ZONE Ventl 1, !- Name + LIVING ZONE, !- Zone or ZoneList Name + INF-SCHED, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 6.131944, !- Design Flow Rate {m3/s} + , !- Flow Rate per Zone Floor Area {m3/s-m2} + , !- Flow Rate per Person {m3/s-person} + , !- Air Changes per Hour {1/hr} + BALANCED, !- Ventilation Type + 400.0, !- Fan Pressure Rise {Pa} + 0.9, !- Fan Total Efficiency + 0.6060000, !- Constant Term Coefficient + 0.03636, !- Temperature Term Coefficient + 0.1177, !- Velocity Term Coefficient + 0, !- Velocity Squared Term Coefficient + 18.0, !- Minimum Indoor Temperature {C} + , !- Minimum Indoor Temperature Schedule Name + , !- Maximum Indoor Temperature {C} + , !- Maximum Indoor Temperature Schedule Name + 1.0; !- Delta Temperature {deltaC} + + ZoneInfiltration:DesignFlowRate, + LIVING ZONE Infil 1, !- Name + LIVING ZONE, !- Zone or ZoneList Name + INF-SCHED, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.01, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneAirBalance:OutdoorAir, + LIVING ZONE Balance 1, !- Name + LIVING ZONE, !- Zone Name + Quadrature, !- Air Balance Method + 0.01, !- Induced Outdoor Air Due to Unbalanced Duct Leakage {m3/s} + INF-SCHED; !- Induced Outdoor Air Schedule Name + + ZoneInfiltration:DesignFlowRate, + ATTIC ZONE Infil 1, !- Name + ATTIC ZONE, !- Zone or ZoneList Name + INF-SCHED, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.05, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + GARAGE ZONE Infil 1, !- Name + GARAGE ZONE, !- Zone or ZoneList Name + INF-SCHED, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.05, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + +ZoneCapacitanceMultiplier:ResearchSpecial, + Living zone heat capacitance multiplier, !- Name + LIVING ZONE, !- Zone or ZoneList Name + 10, !- Temperature Capacity Multiplier + , !- Humidity Capacity Multiplier + , !- Carbon Dioxide Capacity Multiplier + ; !- Generic Contaminant Capacity Multiplier + + ElectricEquipment, + LIVING ZONE ElecEq, !- Name + LIVING ZONE, !- Zone or ZoneList or Space or SpaceList Name + INTERMITTENT, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 500, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3000000, !- Fraction Radiant + 0; !- Fraction Lost + + Curve:Biquadratic, + WindACCoolCapFT, !- Name + 0.942587793, !- Coefficient1 Constant + 0.009543347, !- Coefficient2 x + 0.000683770, !- Coefficient3 x**2 + -0.011042676, !- Coefficient4 y + 0.000005249, !- Coefficient5 y**2 + -0.000009720, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + WindACEIRFT, !- Name + 0.342414409, !- Coefficient1 Constant + 0.034885008, !- Coefficient2 x + -0.000623700, !- Coefficient3 x**2 + 0.004977216, !- Coefficient4 y + 0.000437951, !- Coefficient5 y**2 + -0.000728028, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACCOOLPLFFPLR, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Cubic, + HPACHeatCapFT, !- Name + 0.758746, !- Coefficient1 Constant + 0.027626, !- Coefficient2 x + 0.000148716, !- Coefficient3 x**2 + 0.0000034992, !- Coefficient4 x**3 + -20.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Cubic, + HPACHeatCapFFF, !- Name + 0.84, !- Coefficient1 Constant + 0.16, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 x**3 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Cubic, + HPACHeatEIRFT, !- Name + 1.19248, !- Coefficient1 Constant + -0.0300438, !- Coefficient2 x + 0.00103745, !- Coefficient3 x**2 + -0.000023328, !- Coefficient4 x**3 + -20.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACHeatEIRFFF, !- Name + 1.3824, !- Coefficient1 Constant + -0.4336, !- Coefficient2 x + 0.0512, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Quadratic, + WindACCoolCapFFF, !- Name + 0.8, !- Coefficient1 Constant + 0.2, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Quadratic, + WindACEIRFFF, !- Name + 1.1552, !- Coefficient1 Constant + -0.1808, !- Coefficient2 x + 0.0256, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Quadratic, + WindACPLFFPLR, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + NodeList, + ZoneInlets, !- Name + Zone Inlet Node; !- Node 1 Name + + NodeList, + Supply Air Temp Nodes, !- Name + Heating Coil Air Inlet Node, !- Node 1 Name + Air Loop Outlet Node; !- Node 2 Name + + BranchList, + Air Loop Branches, !- Name + Air Loop Main Branch; !- Branch 1 Name + + Branch, + Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed, !- Component 1 Object Type + TwoSpeed Heat Pump 1, !- Component 1 Name + Air Loop Inlet Node, !- Component 1 Inlet Node Name + Air Loop Outlet Node; !- Component 1 Outlet Node Name + + AirLoopHVAC, + Typical Residential System, !- Name + , !- Controller List Name + Reheat System 1 Avail List, !- Availability Manager List Name + 0.7551, !- Design Supply Air Flow Rate {m3/s} + Air Loop Branches, !- Branch List Name + , !- Connector List Name + Air Loop Inlet Node, !- Supply Side Inlet Node Name + Return Air Mixer Outlet, !- Demand Side Outlet Node Name + Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + Air Loop Outlet Node; !- Supply Side Outlet Node Names + + AvailabilityManagerAssignmentList, + Reheat System 1 Avail List, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + Reheat System 1 Avail; !- Availability Manager 1 Name + + AvailabilityManager:Scheduled, + Reheat System 1 Avail, !- Name + HVACAvailSched; !- Schedule Name + + ZoneHVAC:EquipmentConnections, + LIVING ZONE, !- Zone Name + ZoneEquipment, !- Zone Conditioning Equipment List Name + ZoneInlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Zone Node, !- Zone Air Node Name + Zone Outlet Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + ZoneEquipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + ZoneDirectAir ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + AirLoopHVAC:UnitaryHeatPump:AirToAir:MultiSpeed, + TwoSpeed Heat Pump 1, !- Name + HVACAvailSched, !- Availability Schedule Name + AIR LOOP INLET NODE, !- Air Inlet Node Name + Air Loop Outlet Node, !- Air Outlet Node Name + LIVING ZONE, !- Controlling Zone or Thermostat Location + Fan:OnOff, !- Supply Air Fan Object Type + Supply Fan 1, !- Supply Air Fan Name + BlowThrough, !- Supply Air Fan Placement + CyclingFanSchedule, !- Supply Air Fan Operating Mode Schedule Name + Coil:Heating:DX:MultiSpeed, !- Heating Coil Object Type + Heat Pump DX Heating Coil 1, !- Heating Coil Name + -8.0, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C} + Coil:Cooling:DX:MultiSpeed, !- Cooling Coil Object Type + ACDXCoil 1, !- Cooling Coil Name + Coil:Heating:Fuel, !- Supplemental Heating Coil Object Type + Supp Heating Coil 1, !- Supplemental Heating Coil Name + 50.0, !- Maximum Supply Air Temperature from Supplemental Heater {C} + 21, !- Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation {C} + 0, !- Auxiliary On-Cycle Electric Power {W} + 0, !- Auxiliary Off-Cycle Electric Power {W} + 0.00, !- Design Heat Recovery Water Flow Rate {m3/s} + 80.0, !- Maximum Temperature for Heat Recovery {C} + , !- Heat Recovery Water Inlet Node Name + , !- Heat Recovery Water Outlet Node Name + 0.2, !- No Load Supply Air Flow Rate {m3/s} + 2, !- Number of Speeds for Heating + 2, !- Number of Speeds for Cooling + 0.6135, !- Heating Speed 1 Supply Air Flow Rate {m3/s} + 0.7551, !- Heating Speed 2 Supply Air Flow Rate {m3/s} + , !- Heating Speed 3 Supply Air Flow Rate {m3/s} + , !- Heating Speed 4 Supply Air Flow Rate {m3/s} + 0.6135, !- Cooling Speed 1 Supply Air Flow Rate {m3/s} + 0.7551, !- Cooling Speed 2 Supply Air Flow Rate {m3/s} + , !- Cooling Speed 3 Supply Air Flow Rate {m3/s} + ; !- Cooling Speed 4 Supply Air Flow Rate {m3/s} + + AirTerminal:SingleDuct:ConstantVolume:NoReheat, + ZoneDirectAir, !- Name + HVACAvailSched, !- Availability Schedule Name + Zone Inlet Node ATInlet, !- Air Inlet Node Name + Zone Inlet Node, !- Air Outlet Node Name + 0.7551, !- Maximum Air Flow Rate {m3/s} + , !- Design Specification Outdoor Air Object Name + ; !- Per Person Ventilation Rate Mode + + ZoneHVAC:AirDistributionUnit, + ZoneDirectAir ADU, !- Name + Zone Inlet Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:NoReheat, !- Air Terminal Object Type + ZoneDirectAir, !- Air Terminal Name + , !- Nominal Upstream Leakage Fraction + , !- Constant Downstream Leakage Fraction + ; !- Design Specification Air Terminal Sizing Object Name + + ZoneControl:Thermostat, + Zone Thermostat, !- Name + LIVING ZONE, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Setpoints; !- Control 1 Name + + ThermostatSetpoint:DualSetpoint, + Setpoints, !- Name + Dual Heating Setpoints, !- Heating Setpoint Temperature Schedule Name + Dual Cooling Setpoints; !- Cooling Setpoint Temperature Schedule Name + + AirLoopHVAC:SupplyPath, + TermReheatSupplyPath, !- Name + Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + Zone Supply Air Splitter;!- Component 1 Name + + AirLoopHVAC:ReturnPath, + TermReheatReturnPath, !- Name + Return Air Mixer Outlet, !- Return Air Path Outlet Node Name + AirLoopHVAC:ZoneMixer, !- Component 1 Object Type + Zone Return Air Mixer; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + Zone Supply Air Splitter,!- Name + Zone Equipment Inlet Node, !- Inlet Node Name + Zone Inlet Node ATInlet; !- Outlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + Zone Return Air Mixer, !- Name + Return Air Mixer Outlet, !- Outlet Node Name + Zone Outlet Node; !- Inlet 1 Node Name + + Coil:Heating:Fuel, + Supp Heating Coil 1, !- Name + HVACAvailSched, !- Availability Schedule Name + NaturalGas, !- Fuel Type + 0.8, !- Burner Efficiency + 35000, !- Nominal Capacity {W} + SuppHeating Coil Air Inlet Node, !- Air Inlet Node Name + Air Loop Outlet Node; !- Air Outlet Node Name + + Coil:Cooling:DX:MultiSpeed, + ACDXCoil 1, !- Name + HVACAvailSched, !- Availability Schedule Name + Cooling Coil Air Inlet Node, !- Air Inlet Node Name + Heating Coil Air Inlet Node, !- Air Outlet Node Name + Outdoor Condenser Air Node, !- Condenser Air Inlet Node Name + AirCooled, !- Condenser Type + , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C} + , !- Supply Water Storage Tank Name + , !- Condensate Collection Water Storage Tank Name + No, !- Apply Part Load Fraction to Speeds Greater than 1 + No, !- Apply Latent Degradation to Speeds Greater than 1 + 200.0, !- Crankcase Heater Capacity {W} + 10.0, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C} + , !- Basin Heater Capacity {W/K} + , !- Basin Heater Setpoint Temperature {C} + , !- Basin Heater Operating Schedule Name + Electricity, !- Fuel Type + 2, !- Number of Speeds + 10266, !- Speed 1 Gross Rated Total Cooling Capacity {W} + 0.81, !- Speed 1 Gross Rated Sensible Heat Ratio + 4.32, !- Speed 1 Gross Rated Cooling COP {W/W} + 0.6135, !- Speed 1 Rated Air Flow Rate {m3/s} + 573.3, !- Speed 1 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + HPACCoolCapFT Speed 1, !- Speed 1 Total Cooling Capacity Function of Temperature Curve Name + HPACCoolCapFF Speed 1, !- Speed 1 Total Cooling Capacity Function of Flow Fraction Curve Name + HPACCOOLEIRFT Speed 1, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name + HPACCOOLEIRFF Speed 1, !- Speed 1 Energy Input Ratio Function of Flow Fraction Curve Name + HPACCOOLPLFFPLR Speed 1, !- Speed 1 Part Load Fraction Correlation Curve Name + 1000.0, !- Speed 1 Nominal Time for Condensate Removal to Begin {s} + 1.5, !- Speed 1 Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity {dimensionless} + 3.0, !- Speed 1 Maximum Cycling Rate {cycles/hr} + 45.0, !- Speed 1 Latent Capacity Time Constant {s} + 0.2, !- Speed 1 Rated Waste Heat Fraction of Power Input {dimensionless} + HAPCCoolWHFT Speed 2, !- Speed 1 Waste Heat Function of Temperature Curve Name + 0.9, !- Speed 1 Evaporative Condenser Effectiveness {dimensionless} + 0.1, !- Speed 1 Evaporative Condenser Air Flow Rate {m3/s} + 60, !- Speed 1 Rated Evaporative Condenser Pump Power Consumption {W} + 13826, !- Speed 2 Gross Rated Total Cooling Capacity {W} + 0.758, !- Speed 2 Gross Rated Sensible Heat Ratio + 3.98, !- Speed 2 Gross Rated Cooling COP {W/W} + 0.7551, !- Speed 2 Rated Air Flow Rate {m3/s} + 673.3, !- Speed 2 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)} + HPACCoolCapFT Speed 2, !- Speed 2 Total Cooling Capacity Function of Temperature Curve Name + HPACCoolCapFF Speed 2, !- Speed 2 Total Cooling Capacity Function of Flow Fraction Curve Name + HPACCOOLEIRFT Speed 2, !- Speed 2 Energy Input Ratio Function of Temperature Curve Name + HPACCOOLEIRFF Speed 2, !- Speed 2 Energy Input Ratio Function of Flow Fraction Curve Name + HPACCOOLPLFFPLR Speed 1, !- Speed 2 Part Load Fraction Correlation Curve Name + 1000.0, !- Speed 2 Nominal Time for Condensate Removal to Begin {s} + 1.5, !- Speed 2 Ratio of Initial Moisture Evaporation Rate and steady state Latent Capacity {dimensionless} + 3.0, !- Speed 2 Maximum Cycling Rate {cycles/hr} + 45.0, !- Speed 2 Latent Capacity Time Constant {s} + 0.2, !- Speed 2 Rated Waste Heat Fraction of Power Input {dimensionless} + HAPCCoolWHFT Speed 2, !- Speed 2 Waste Heat Function of Temperature Curve Name + 0.9, !- Speed 2 Evaporative Condenser Effectiveness {dimensionless} + 0.1, !- Speed 2 Evaporative Condenser Air Flow Rate {m3/s} + 60; !- Speed 2 Rated Evaporative Condenser Pump Power Consumption {W} + + OutdoorAir:Node, + Outdoor Condenser Air Node, !- Name + 1.0; !- Height Above Ground {m} + + Curve:Biquadratic, + HPACCoolCapFT Speed 1, !- Name + 2.015235142, !- Coefficient1 Constant + -0.120393178, !- Coefficient2 x + 0.004278319, !- Coefficient3 x**2 + -0.000285454, !- Coefficient4 y + -4.85775E-05, !- Coefficient5 y**2 + -0.000345086, !- Coefficient6 x*y + 13.88889, !- Minimum Value of x + 22.22222, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPACCoolCapFT Speed 2, !- Name + 1.742267734, !- Coefficient1 Constant + -0.089105103, !- Coefficient2 x + 0.003498847, !- Coefficient3 x**2 + -0.001004811, !- Coefficient4 y + -2.20198E-05, !- Coefficient5 y**2 + -0.000416472, !- Coefficient6 x*y + 13.88889, !- Minimum Value of x + 22.22222, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACCoolCapFF Speed 1, !- Name + 0.654699018, !- Coefficient1 Constant + 0.592983769, !- Coefficient2 x + -0.247682787, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACCoolCapFF Speed 2, !- Name + 0.657554567, !- Coefficient1 Constant + 0.600127146, !- Coefficient2 x + -0.257681712, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Biquadratic, + HPACCOOLEIRFT Speed 1, !- Name + -1.85015202, !- Coefficient1 Constant + 0.26207528, !- Coefficient2 x + -0.006630245, !- Coefficient3 x**2 + 0.010577602, !- Coefficient4 y + 0.000699189, !- Coefficient5 y**2 + -0.001378514, !- Coefficient6 x*y + 13.88889, !- Minimum Value of x + 22.22222, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPACCOOLEIRFT Speed 2, !- Name + -0.597878914, !- Coefficient1 Constant + 0.134906533, !- Coefficient2 x + -0.003784822, !- Coefficient3 x**2 + 0.006480135, !- Coefficient4 y + 0.000407907, !- Coefficient5 y**2 + -0.000446723, !- Coefficient6 x*y + 13.88889, !- Minimum Value of x + 22.22222, !- Maximum Value of x + 23.88889, !- Minimum Value of y + 46.11111, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACCOOLEIRFF Speed 1, !- Name + 1.548642617, !- Coefficient1 Constant + -1.148144073, !- Coefficient2 x + 0.599501456, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACCOOLEIRFF Speed 2, !- Name + 1.349343195, !- Coefficient1 Constant + -0.80009922, !- Coefficient2 x + 0.450756026, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACCOOLPLFFPLR Speed 1, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Biquadratic, + HAPCCoolWHFT Speed 1, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50; !- Maximum Value of y + +! operation condition varies + + Curve:Biquadratic, + HAPCCoolWHFT Speed 2, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50; !- Maximum Value of y + + Coil:Heating:DX:MultiSpeed, + Heat Pump DX Heating Coil 1, !- Name + HVACAvailSched, !- Availability Schedule Name + Heating Coil Air Inlet Node, !- Air Inlet Node Name + SuppHeating Coil Air Inlet Node, !- Air Outlet Node Name + -13.88889, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C} + -8.8, !- Outdoor Dry-Bulb Temperature to Turn On Compressor {C} + 200.0, !- Crankcase Heater Capacity {W} + 10.0, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C} + HPACDefrostCAPFT, !- Defrost Energy Input Ratio Function of Temperature Curve Name + 7.22, !- Maximum Outdoor Dry-Bulb Temperature for Defrost Operation {C} + ReverseCycle, !- Defrost Strategy + timed, !- Defrost Control + 0.058333, !- Defrost Time Period Fraction + 2000.0, !- Resistive Defrost Heater Capacity {W} + No, !- Apply Part Load Fraction to Speeds Greater than 1 + Electricity, !- Fuel Type + 4, !- Region number for Calculating HSPF + 2, !- Number of Speeds + 10164, !- Speed 1 Gross Rated Heating Capacity {W} + 4.235, !- Speed 1 Gross Rated Heating COP {W/W} + 0.6135, !- Speed 1 Rated Air Flow Rate {m3/s} + 573.3, !- Speed 1 Rated Supply Air Fan Power Per Volume Flow Rate {W/(m3/s)} + HPACHeatCapFT Speed 1, !- Speed 1 Heating Capacity Function of Temperature Curve Name + HPACHeatCapFF Speed 1, !- Speed 1 Heating Capacity Function of Flow Fraction Curve Name + HPACHeatEIRFT Speed 1, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name + HPACHeatEIRFF Speed 1, !- Speed 1 Energy Input Ratio Function of Flow Fraction Curve Name + HPACHeatPLFFPLR Speed 1, !- Speed 1 Part Load Fraction Correlation Curve Name + 0.2, !- Speed 1 Rated Waste Heat Fraction of Power Input {dimensionless} + HAPCHeatWHFT Speed 1, !- Speed 1 Waste Heat Function of Temperature Curve Name + 13866, !- Speed 2 Gross Rated Heating Capacity {W} + 3.9, !- Speed 2 Gross Rated Heating COP {W/W} + 0.7551, !- Speed 2 Rated Air Flow Rate {m3/s} + 673.3, !- Speed 2 Rated Supply Air Fan Power Per Volume Flow Rate {W/(m3/s)} + HPACHeatCapFT Speed 2, !- Speed 2 Heating Capacity Function of Temperature Curve Name + HPACHeatCapFF Speed 2, !- Speed 2 Heating Capacity Function of Flow Fraction Curve Name + HPACHeatEIRFT Speed 2, !- Speed 2 Energy Input Ratio Function of Temperature Curve Name + HPACHeatEIRFF Speed 2, !- Speed 2 Energy Input Ratio Function of Flow Fraction Curve Name + HPACHeatPLFFPLR Speed 2, !- Speed 2 Part Load Fraction Correlation Curve Name + 0.2, !- Speed 2 Rated Waste Heat Fraction of Power Input {dimensionless} + HAPCHeatWHFT Speed 2; !- Speed 2 Waste Heat Function of Temperature Curve Name + + Curve:Biquadratic, + HPACHeatCapFT Speed 1, !- Name + 0.760523473, !- Coefficient1 Constant + 0.007531702, !- Coefficient2 x + -0.000288398, !- Coefficient3 x**2 + 0.021653033, !- Coefficient4 y + 3.29133E-05, !- Coefficient5 y**2 + 0.00014862, !- Coefficient6 x*y + 18.33333, !- Minimum Value of x + 23.88889, !- Maximum Value of x + -13.88889, !- Minimum Value of y + 19.44444, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPACHeatCapFT Speed 2, !- Name + 0.640986059, !- Coefficient1 Constant + 0.012586769, !- Coefficient2 x + -0.000268027, !- Coefficient3 x**2 + 0.011921466, !- Coefficient4 y + -0.000184927, !- Coefficient5 y**2 + 0.000421853, !- Coefficient6 x*y + 18.33333, !- Minimum Value of x + 23.88889, !- Maximum Value of x + -13.88889, !- Minimum Value of y + 19.44444, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACHeatCapFF Speed 1, !- Name + 0.752130847, !- Coefficient1 Constant + 0.437552514, !- Coefficient2 x + -0.189683361, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACHeatCapFF Speed 2, !- Name + 0.479477415, !- Coefficient1 Constant + 1.274883083, !- Coefficient2 x + -0.754360498, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Biquadratic, + HPACHeatEIRFT Speed 1, !- Name + 0.750128109, !- Coefficient1 Constant + 0.002298944, !- Coefficient2 x + 0.000953927, !- Coefficient3 x**2 + -0.008327043, !- Coefficient4 y + 0.001016058, !- Coefficient5 y**2 + -0.001433855, !- Coefficient6 x*y + 18.33333, !- Minimum Value of x + 23.88889, !- Maximum Value of x + -13.88889, !- Minimum Value of y + 19.44444, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPACHeatEIRFT Speed 2, !- Name + 0.776836281, !- Coefficient1 Constant + 0.006598798, !- Coefficient2 x + 0.000480351, !- Coefficient3 x**2 + -0.001781924, !- Coefficient4 y + 0.000796743, !- Coefficient5 y**2 + -0.000985089, !- Coefficient6 x*y + 18.33333, !- Minimum Value of x + 23.88889, !- Maximum Value of x + -13.88889, !- Minimum Value of y + 19.44444, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPACHeatEIRFF Speed 1, !- Name + 1.853909301, !- Coefficient1 Constant + -1.411203778, !- Coefficient2 x + 0.557294478, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACHeatEIRFF Speed 2, !- Name + 2.028609363, !- Coefficient1 Constant + -2.16676198, !- Coefficient2 x + 1.138152616, !- Coefficient3 x**2 + 0.7, !- Minimum Value of x + 1.1; !- Maximum Value of x + + Curve:Quadratic, + HPACHeatPLFFPLR Speed 1, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Quadratic, + HPACHeatPLFFPLR Speed 2, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +! operation condition varies + + Curve:Biquadratic, + HPACDefrostCAPFT, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +! operation condition varies + + Curve:Biquadratic, + HAPCHeatWHFT Speed 1, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50; !- Maximum Value of y + +! operation condition varies + + Curve:Biquadratic, + HAPCHeatWHFT Speed 2, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50; !- Maximum Value of y + + Fan:OnOff, + Supply Fan 1, !- Name + HVACAvailSched, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 400.0, !- Pressure Rise {Pa} + 0.7551, !- Maximum Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + Air Loop Inlet Node, !- Air Inlet Node Name + Cooling Coil Air Inlet Node; !- Air Outlet Node Name + + Output:Variable,*,Zone Combined Outdoor Air Sensible Heat Loss Energy,TimeStep,ReportSch; + + Output:Variable,*,Zone Combined Outdoor Air Current Density Volume Flow Rate,TimeStep,ReportSch; + + Output:Variable,*,Zone Combined Outdoor Air Mass,TimeStep,ReportSch; + + Output:Variable,*,Cooling Coil Total Cooling Energy,TimeStep,ReportSch; + + Output:Variable,*,Heating Coil Heating Energy,TimeStep,ReportSch; + + Output:Variable,*,Zone Air Temperature,TimeStep,ReportSch; + + Output:Variable,*,Zone Air System Sensible Heating Energy,TimeStep,ReportSch; + + Output:Variable,*,Zone Air System Sensible Cooling Energy,TimeStep,ReportSch; + + Output:Variable,*,Unitary System DX Coil Cycling Ratio,TimeStep,ReportSch; + + Output:Variable,*,Unitary System DX Coil Speed Ratio,TimeStep,ReportSch; + + Output:Variable,*,Unitary System DX Coil Speed Level,TimeStep,ReportSch; + + Output:Meter:MeterFileOnly,Electricity:Facility,monthly; + + Output:Meter:MeterFileOnly,Electricity:Building,monthly; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,monthly; + + Output:Meter:MeterFileOnly,Electricity:Facility,runperiod; + + Output:Meter:MeterFileOnly,Electricity:Building,runperiod; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,runperiod; + + Output:VariableDictionary,Regular; + + Output:Surfaces:Drawing,dxf; + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + + Output:EnergyManagementSystem, + Verbose, !- Actuator Availability Dictionary Reporting + Verbose, !- Internal Variable Availability Dictionary Reporting + Verbose; !- EMS Runtime Language Debug Output Level + diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_EnergyPlus_9_6_0_Validation_ThermalZone_ZoneCapacitanceMultiplier.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_EnergyPlus_9_6_0_Validation_ThermalZone_ZoneCapacitanceMultiplier.txt new file mode 100644 index 00000000000..af53b4d023f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_EnergyPlus_9_6_0_Validation_ThermalZone_ZoneCapacitanceMultiplier.txt @@ -0,0 +1,11 @@ +last-generated=2023-08-29 +statistics-simulation= +{ + "linear": "0, 0", + "nonlinear": " ", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 4.32e+05] +defCap.zon.TAir=[2.931499938964844e+02, 2.851262817382812e+02, 2.829358520507812e+02, 2.810980224609375e+02, 2.794590148925781e+02, 2.779721069335938e+02, 2.765988159179688e+02, 2.768757934570312e+02, 2.784107055664062e+02, 2.797267456054688e+02, 2.80322998046875e+02, 2.804461975097656e+02, 2.806386413574219e+02, 2.802711486816406e+02, 2.796155395507812e+02, 2.789898986816406e+02, 2.783244018554688e+02, 2.7788671875e+02, 2.773622436523438e+02, 2.768299560546875e+02, 2.763008422851562e+02, 2.761153869628906e+02, 2.758070678710938e+02, 2.753749389648438e+02, 2.752128295898438e+02, 2.750193481445312e+02, 2.753028869628906e+02, 2.767030334472656e+02, 2.776649475097656e+02, 2.786033325195312e+02, 2.796157531738281e+02, 2.804749145507812e+02, 2.810079345703125e+02, 2.8121044921875e+02, 2.809478759765625e+02, 2.798797912597656e+02, 2.788085632324219e+02, 2.785285339355469e+02, 2.783365173339844e+02, 2.779616394042969e+02, 2.775796813964844e+02, 2.772979736328125e+02, 2.770599975585938e+02, 2.768825378417969e+02, 2.765175170898438e+02, 2.760656433105469e+02, 2.759440612792969e+02, 2.774949035644531e+02, 2.782390441894531e+02, 2.790961303710938e+02, 2.798348083496094e+02, 2.804661560058594e+02, 2.810580749511719e+02, 2.812132568359375e+02, 2.806531982421875e+02, 2.794320678710938e+02, 2.780961303710938e+02, 2.775421447753906e+02, 2.770378112792969e+02, 2.765709228515625e+02, 2.761454467773438e+02, 2.757478942871094e+02, 2.753711547851562e+02, 2.749943542480469e+02, 2.746211242675781e+02, 2.7430029296875e+02, 2.744634399414062e+02, 2.760703735351562e+02, 2.76943359375e+02, 2.779093322753906e+02, 2.78795166015625e+02, 2.795382080078125e+02, 2.801758117675781e+02, 2.803643188476562e+02, 2.79830810546875e+02, 2.784895935058594e+02, 2.769479064941406e+02, 2.763331604003906e+02, 2.75794189453125e+02, 2.750719299316406e+02, 2.742784729003906e+02, 2.736675109863281e+02, 2.731570739746094e+02, 2.724647521972656e+02, 2.714243469238281e+02, 2.702768859863281e+02, 2.697936096191406e+02, 2.719630432128906e+02, 2.743087463378906e+02, 2.765023498535156e+02, 2.783991394042969e+02, 2.80380126953125e+02, 2.822745056152344e+02, 2.826520690917969e+02, 2.818184814453125e+02, 2.803402404785156e+02, 2.78725341796875e+02, 2.776202697753906e+02, 2.765147094726562e+02, 2.754969482421875e+02, 2.74457275390625e+02] +mulCap.zon.TAir=[2.931499938964844e+02, 2.901801452636719e+02, 2.878099060058594e+02, 2.858500061035156e+02, 2.841411743164062e+02, 2.82617919921875e+02, 2.812156677246094e+02, 2.802545776367188e+02, 2.802074279785156e+02, 2.806913757324219e+02, 2.811638793945312e+02, 2.813619079589844e+02, 2.81478271484375e+02, 2.814356079101562e+02, 2.811454467773438e+02, 2.807387084960938e+02, 2.802452392578125e+02, 2.797724304199219e+02, 2.793012084960938e+02, 2.788330993652344e+02, 2.783436584472656e+02, 2.779898681640625e+02, 2.7761181640625e+02, 2.77216796875e+02, 2.768719787597656e+02, 2.765925598144531e+02, 2.763144836425781e+02, 2.765950012207031e+02, 2.771602478027344e+02, 2.777705383300781e+02, 2.784269409179688e+02, 2.790382080078125e+02, 2.796630249023438e+02, 2.801434326171875e+02, 2.804087524414062e+02, 2.801987609863281e+02, 2.796959838867188e+02, 2.793279724121094e+02, 2.790463562011719e+02, 2.787887268066406e+02, 2.784790344238281e+02, 2.781929626464844e+02, 2.779309997558594e+02, 2.777093200683594e+02, 2.774600830078125e+02, 2.771562194824219e+02, 2.767743530273438e+02, 2.769820861816406e+02, 2.77444580078125e+02, 2.779723510742188e+02, 2.785379333496094e+02, 2.79044189453125e+02, 2.796152038574219e+02, 2.800380554199219e+02, 2.802044372558594e+02, 2.7988330078125e+02, 2.792446594238281e+02, 2.787008056640625e+02, 2.782141723632812e+02, 2.777630004882812e+02, 2.773437194824219e+02, 2.769508972167969e+02, 2.765784912109375e+02, 2.762223510742188e+02, 2.7586669921875e+02, 2.755321350097656e+02, 2.752040710449219e+02, 2.754908142089844e+02, 2.760677795410156e+02, 2.766786193847656e+02, 2.773230895996094e+02, 2.779150390625e+02, 2.785517578125e+02, 2.790576782226562e+02, 2.792750244140625e+02, 2.789417114257812e+02, 2.782402954101562e+02, 2.776216125488281e+02, 2.770839233398438e+02, 2.765354919433594e+02, 2.759389038085938e+02, 2.753435363769531e+02, 2.748053894042969e+02, 2.742614440917969e+02, 2.736067199707031e+02, 2.728003540039062e+02, 2.719323425292969e+02, 2.719732666015625e+02, 2.729637145996094e+02, 2.744046325683594e+02, 2.758733825683594e+02, 2.773244934082031e+02, 2.789284973144531e+02, 2.800907897949219e+02, 2.804609985351562e+02, 2.801529846191406e+02, 2.7941064453125e+02, 2.786497497558594e+02, 2.778502197265625e+02, 2.770368347167969e+02, 2.762350158691406e+02] diff --git a/Buildings/Resources/Scripts/Dymola/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mos b/Buildings/Resources/Scripts/Dymola/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mos new file mode 100644 index 00000000000..44e9ca40d92 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mos @@ -0,0 +1,10 @@ +simulateModel("Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone.ZoneCapacitanceMultiplier", stopTime=432000, method="Cvode", tolerance=1e-06, resultFile="ZoneCapacitanceMultiplier"); +createPlot(id=1, + position={55, 55, 592, 371}, + y={"defCap.zon.TAir", "mulCap.zon.TAir"}, + range={0.0, 450000.0, -5.0, 25.0}, + grid=true, + colors={{28,108,200}, {238,46,47}}, + timeUnit="s", + displayUnits={"degC", "degC"}); + diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone.ZoneCapacitanceMultiplier.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone.ZoneCapacitanceMultiplier.mos new file mode 100644 index 00000000000..aa0be7dbd9e --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone.ZoneCapacitanceMultiplier.mos @@ -0,0 +1,5 @@ +compareVars := + { + "defCap.zon.TAir", + "mulCap.zon.TAir" + }; diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mo b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mo new file mode 100644 index 00000000000..6b82061beaa --- /dev/null +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mo @@ -0,0 +1,52 @@ +within Buildings.ThermalZones.EnergyPlus_9_6_0.Validation.ThermalZone; +model ZoneCapacitanceMultiplier + "Validation model for zone capacitance multiplier in Spawn" + extends Modelica.Icons.Example; + Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SingleFamilyHouse.Unconditioned defCap + "Default capacitance" + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SingleFamilyHouse.Unconditioned mulCap( + building( + idfName=Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/SingleFamilyHouse_TwoSpeed_ZoneAirBalance/SingleFamilyHouse_TwoSpeed_ZoneAirBalance_zoneCapacitanceMultiplier.idf"))) + "Capacitance with a multiplier of 10" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + annotation ( + Documentation( + info=" +

            +This validation case simulates two instances of + +Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SingleFamilyHouse.Unconditioned. +In the instance mulCap, the case is modified by adding +the following snippet to the idf file: +

            +
            +ZoneCapacitanceMultiplier:ResearchSpecial,
            +    Living zone heat capacitance multiplier,  !- Name
            +    LIVING ZONE,                              !- Zone or ZoneList Name
            +    10,                                       !- Temperature Capacity Multiplier
            +     ,                                        !- Humidity Capacity Multiplier
            +     ,                                        !- Carbon Dioxide Capacity Multiplier
            +     ;                                        !- Generic Contaminant Capacity Multiplier
            +
            +

            +This model is to validate that this leads to a difference in the simulation +results as expected. +

            +", + revisions=" +
              +
            • +August 23, 2023, by Hongxiang Fu:
              +First implementation. This is for +#3481. +
            • +
            +"), + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/ZoneCapacitanceMultiplier.mos" "Simulate and plot"), + experiment( + StopTime=432000, + Tolerance=1e-06)); +end ZoneCapacitanceMultiplier; diff --git a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/package.order b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/package.order index af5c8274a9f..a480e75c964 100644 --- a/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/package.order +++ b/Buildings/ThermalZones/EnergyPlus_9_6_0/Validation/ThermalZone/package.order @@ -4,4 +4,5 @@ OneZoneCompareZoneTemperatureOutput OneZoneOneYear RefBldgSmallOffice TwoIdenticalZones +ZoneCapacitanceMultiplier ZoneTemperatureInitialization